Commit Graph

1066 Commits

Author SHA1 Message Date
Abhinav Raut 7d919ece1f show attachment label in reply notifications when the reply is only quoted text 2026-10-20 00:23:46 +05:30
Abhinav Raut 36b46f16f6 skip quote-only replies in email history and check only the template for PreviousMessages 2026-10-20 00:06:04 +05:30
Abhinav Raut 703f38fafc quote only messages the contact already saw in email history
Quoted history now leaves out CSAT emails and anything the contact was not part of. Earlier messages load only when the outgoing template or the reply uses PreviousMessages.
2026-10-20 00:00:37 +05:30
Abhinav Raut 114c80a059 add IsIncoming to quoted messages and escape sender fields 2026-10-19 23:34:56 +05:30
Abhinav Raut d3acea74d0 add earlier messages as a variable in the outgoing email template 2026-10-19 23:33:20 +05:30
Abhinav Raut aecc5a14fe Merge pull request #709 from sneha-thyagarajan/fix/empty-subject-fallback
Bug fix: fall back to reference number as subject for empty-subject email conversations
2026-10-19 23:13:08 +05:30
Abhinav Raut ed077475ff run gofmt on conversation models 2026-10-19 23:02:55 +05:30
Sans 9be2894b62 fix: fall back to reference number as email subject for empty-subject conversations
Emails that arrive with no Subject header are stored with an empty subject.
When a reply is sent, some strict SMTP servers reject the message with
"550 Missing subject field". Fall back to the formatted reference number
(e.g. "#CONV-42") so the reply always carries a non-empty subject.

Fixes #701
2026-10-19 21:50:19 +05:30
Abhinav Raut a425c513d1 capitalize contact names taken from the email address 2026-10-19 15:17:50 +05:30
Abhinav Raut 1cda45797e share email template variables and add notification greetings
Preserve existing template fields while sharing conversation data across customer emails and agent alerts. Use the system layout for automation alerts and add regression coverage for notification delivery and conversation switching.
2026-10-18 20:47:24 +05:30
Abhinav Raut 14d49a7af8 include assignee details in conversation responses
Reuse assignee details in the agent store to avoid separate conversation list lookups.
2026-10-18 19:35:01 +05:30
Abhinav Raut d1d99bea0d unassign the conversation in the participant reply delivery test 2026-10-18 19:35:01 +05:30
Abhinav Raut b47e1f53b4 preserve participant tracking while filtering reply notifications 2026-10-18 19:35:01 +05:30
Abhinav Raut 839128f7cd keep alerts working when email templates fail 2026-10-18 19:35:01 +05:30
Abhinav Raut 0a13ff5b73 fix reply notifications and repeated agent lookups 2026-10-18 19:35:01 +05:30
Abhinav Raut 2fa0420c92 guide Juno toward concise and grounded answers 2026-10-16 15:43:44 +05:30
Abhinav Raut b29d29f0c9 refine conversation layouts and Juno interactions
Keep conversation metadata compact and simplify sidebar attribute editing.
Update Juno visuals and prompts, presence icons, and SLA duration formatting.
2026-10-16 02:10:01 +05:30
Abhinav Raut 07ec17369d align app layouts and refine conversation controls
Use shared headings and consistent field widths across the dashboard. Load older messages on scroll and prevent unread badges from flashing after sending messages.
2026-10-15 11:35:46 +05:30
Abhinav Raut cee88dd9d1 Merge pull request #691 from abhinavxd/fix-unicode-text-truncation
fix Unicode text truncation
2026-10-12 23:08:59 +05:30
Abhinav Raut 3932e3727a Merge pull request #587 from pmslava/email-template-inbox
Conversation: expose the inbox to the outgoing email template
2026-10-12 15:50:50 +05:30
Abhinav Raut 9cc499c469 fix Unicode text truncation 2026-10-12 15:43:19 +05:30
Abhinav Raut 9e2ae9668b raise macro content limit to 100000 characters 2026-10-12 11:36:06 +05:30
Abhinav Raut 01bb0d917f Merge pull request #678 from fredrikblau/fix/674-gemini-thought-signature
Preserve tool call extra_content so Gemini thought signatures round-trip
2026-10-12 00:51:22 +05:30
Abhinav Raut e56fe5dc1b trim long notification text so bell notifications save 2026-10-12 00:18:20 +05:30
Abhinav Raut bb1d3dcbf7 Merge main into SMTP header folding branch 2026-10-10 22:21:58 +05:30
Abhinav Raut 3ae32f97e1 rename migration files to match their RC8 version 2026-10-10 22:07:13 +05:30
Abhinav Raut e14dbae669 Use patched smtppool to fold long email headers 2026-10-10 22:00:05 +05:30
Abhinav Raut b5bf9baa99 remove repeated article citations within paragraphs 2026-10-10 21:51:10 +05:30
Abhinav Raut 51426f1a78 add inline citations and preserve widget line breaks 2026-10-10 21:21:46 +05:30
Abhinav Raut 170fcd026d add help article citations to AI replies
Link cited public help articles in chat replies and emails. Batch reference lookups and keep source metadata out of customer replies.
2026-10-10 20:57:12 +05:30
Abhinav Raut 080318a232 exclude deleted emails from IMAP fetching (refs abhinavxd/libredesk#611) 2026-10-10 20:02:43 +05:30
Abhinav Raut c3ccb81b26 explain the alias forwarding limit for plus addressing 2026-10-10 19:18:15 +05:30
Abhinav Raut 56bb780d68 reuse the existing email validation message for senders 2026-10-10 18:54:41 +05:30
amirahrari 6d9f551a20 preserve tool call extra_content so Gemini thought signatures round-trip
Gemini 3 returns extra_content.google.thought_signature on each tool call
and rejects the next turn with a 400 unless the replayed assistant message
carries it. ToolCall dropped the field when parsing the response, so every
tool-using agent run against Gemini failed on its second turn. Keep it as
raw JSON so it is sent back unchanged.

Fixes #674
2026-10-10 13:40:34 +03:30
Abhinav Raut f85b0c0687 merge latest main into the inbox aliases branch 2026-10-10 03:26:33 +05:30
Abhinav Raut b07358b400 invalidate agent sessions in Redis 2026-10-10 02:42:48 +05:30
Abhinav Raut 7df3188a8b Merge remote-tracking branch 'origin/main' into security-review-fixes
# Conflicts:
#	internal/migrations/v2.9.0-rc.9.go
2026-10-10 02:04:38 +05:30
Abhinav Raut 046b744515 fix message loading and unread state races 2026-10-10 01:50:00 +05:30
Abhinav Raut a5d4184dd1 send the alias verification email in the background so Verify returns right away 2026-10-08 00:50:59 +05:30
Abhinav Raut cfeb152a82 allow marking a conversation read without a message id 2026-10-08 00:48:17 +05:30
Abhinav Raut a9fd8616a8 put the alias reply tag on the main address and keep the alias as sender
Alias replies now put the +conv tag on the main address, because many alias forwarders bounce + addresses. From now follows the last address we sent from, and a failed re-verify no longer blocks an alias that was verified before.
2026-10-08 00:37:33 +05:30
Abhinav Raut 5dacd6ec2f merge main into fix-notification-read-state 2026-10-08 00:35:58 +05:30
Abhinav Raut 723c0e84ba fix notification and conversation read state
Opening a conversation used to mark it read even when the agent never scrolled to the new messages or the tab was in the background. Reply notifications in the bell also stayed unread after the agent read the reply.

Now the browser tells the server which message the agent saw. It only does this when the end of the thread is on screen and the tab has focus. The server moves the agent's last seen time forward to that message and never back.

A reply notification counts as read when the agent's last seen time is at or after the reply. "Mark as unread" marks the old reply notifications read first, so the bell stays the same.

Reply emails and pushes wait a little before sending. They are skipped if the agent already read the message or can no longer see the conversation.
2026-10-08 00:33:14 +05:30
Abhinav Raut 5c65772bdf keep customer replies on the alias and fix the alias verify e2e test 2026-10-07 23:32:30 +05:30
Abhinav Raut 58ee4193e2 move new tests into package test files and check reassignment access once 2026-10-07 23:22:46 +05:30
Abhinav Raut 4be5ae696f ignore case sensitive match on contact email automation rules 2026-10-07 23:10:57 +05:30
Abhinav Raut e6791bebf6 fix lost and stuck alias verifications and keep alias replies in the conversation
A verification that finished while an inbox was being saved could get lost. One stuck pending for 10 minutes is now marked failed. Replies to alias emails now come back into the same conversation.
2026-10-07 22:43:49 +05:30
Abhinav Raut 865bb00152 show saved alias status for the typed address and leave other inboxes' verification mail alone 2026-09-29 02:19:16 +05:30
Abhinav Raut f6a0a1e5c7 Merge remote-tracking branch 'origin/main' into feat/inbox-aliases
# Conflicts:
#	cmd/conversation.go
#	cmd/inboxes.go
#	cmd/init.go
#	cmd/messages.go
#	cmd/upgrade.go
#	frontend/apps/main/src/api/index.js
#	frontend/apps/main/src/features/admin/inbox/EmailInboxForm.vue
#	frontend/apps/main/src/features/conversation/CreateConversation.vue
#	frontend/apps/main/src/features/conversation/ReplyBox.vue
#	frontend/apps/main/src/views/admin/inbox/EditInbox.vue
#	i18n/en-US.json
#	internal/conversation/message.go
#	internal/inbox/channel/email/email.go
#	internal/inbox/inbox.go
#	internal/inbox/queries.sql
2026-09-29 01:47:13 +05:30
Abhinav Raut 415316d29c move IncomingTo to the end of the conversation struct 2026-09-29 01:05:09 +05:30