Commit Graph

757 Commits

Author SHA1 Message Date
Abhinav Raut 55c56586db fix logging audit issues and preserve canceled scan behavior 2026-10-25 20:31:41 +05:30
Abhinav Raut 92f5f7598a keep security failures visible and clarify rejection logs 2026-10-25 15:14:52 +05:30
Abhinav Raut b372bdc4a8 fix log levels and add missing logs 2026-10-25 11:54:57 +05:30
Abhinav Raut 1a1feff9dc Merge pull request #736 from abhinavxd/fix/rc-update-banner
show the update banner on release candidate builds
2026-10-24 23:53:23 +05:30
Abhinav Raut 59b6e92b99 add regression tests for update version comparisons 2026-10-24 23:42:47 +05:30
Abhinav Raut 564e3aea67 Merge pull request #719 from maximilize/fix/health-db-check
health: report unhealthy when the database does not answer
2026-10-24 23:29:34 +05:30
Abhinav Raut 2be3623f9f show the update banner on release candidate builds 2026-10-22 18:19:37 +05:30
Abhinav Raut 890cdb77da exclude holiday shifts from overnight campaign working hours 2026-10-22 11:27:37 +05:30
Abhinav Raut a1c44cc05e fix campaign navigation and overnight hours
Reject messages from the previous page and preserve events recorded after navigation.
Include the previous day's overnight hours when checking campaign eligibility.
2026-10-22 02:39:10 +05:30
max fdf446251a health: report unhealthy when the database does not answer
/health returned true without touching the database, so a deployment
whose Postgres was gone kept reporting healthy (see #654). Ping the
database with a 3s timeout and answer 503 when it fails.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 09:14:08 +00:00
Abhinav Raut a32818369b Merge remote-tracking branch 'origin/main' into qa/2.9.0-release 2026-10-21 01:12:48 +05:30
max 877ecb92a8 sidebar: list all of the contact's conversations, highlight the current one
The sidebar dropped the current conversation from the list and, when it
was not among the ten fetched, returned an empty list instead of the
others. The list now mirrors the conversation list on the left: every
conversation of the contact, the open one highlighted.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-20 18:01:33 +00:00
Abhinav Raut 7fee393cce fix issues found during release testing
- Save recipient edits and sender choices with reply drafts.
- Keep CC and BCC open when an address is cleared.
- Allow SMTP without credentials when authentication is off.
- Use the workspace timezone for reports and campaign dates.
- Show CSAT responses without reloading the conversation.
- Block access to attachments from deleted messages.
- Accept conditional email templates and catch missing or repeated replies.
- Explain why choosing another default email template failed.
- Reload stale routes and keep widget image fallbacks working.
- Keep the launcher usable by keyboard and reset host button styles.
2026-10-20 00:58:33 +05:30
Abhinav Raut 13bfa07402 merge main into the widget language branch 2026-10-19 00:00:30 +05:30
Abhinav Raut a58bdf6579 fix language matching in the widget and help center
Keep the chosen article language when widget buttons use another translation.
Match regional codes without mixing Traditional and Simplified Chinese.
2026-10-18 23:40:32 +05:30
Abhinav Raut 9cc499c469 fix Unicode text truncation 2026-10-12 15:43:19 +05:30
Abhinav Raut e499ea1a64 Merge pull request #689 from abhinavxd/parameterize-migration-version
use a parameterized query to record migration versions
2026-10-12 13:24:01 +05:30
Abhinav Raut 9e2ae9668b raise macro content limit to 100000 characters 2026-10-12 11:36:06 +05:30
Abhinav Raut b36207bc58 use a parameterized query to record migration versions 2026-10-12 11:25:45 +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 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 cfeb152a82 allow marking a conversation read without a message id 2026-10-08 00:48:17 +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 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 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 c46414ee60 Merge remote-tracking branch 'origin/main' into feature/automation-filter-email-to
# Conflicts:
#	internal/automation/models/models.go
2026-09-29 00:53:53 +05:30
Abhinav Raut 2bb129c8b1 remove the help center custom code test 2026-09-27 23:39:47 +05:30
Abhinav Raut c8227014ab block framing of the dashboard and require inbox UUIDs for widget joins 2026-09-27 23:28:48 +05:30
Abhinav Raut 956cb8ae51 rename the help center test file to match its source file 2026-09-27 23:15:16 +05:30
Abhinav Raut aae19c1e71 use cached agents for session and reassignment checks and index media uploader 2026-09-27 23:11:54 +05:30
Abhinav Raut 7e8620a2b3 fix issues found in code review of the security fixes 2026-09-27 23:11:54 +05:30
Abhinav Raut 14e6af0e6c restore help center custom code on the default domain 2026-09-27 23:11:54 +05:30
Abhinav Raut ac5921e192 fix security issues found in repository review 2026-09-27 23:11:54 +05:30
Abhinav Raut 0c1dec7456 simplify inbox aliases and tidy the email inbox form
Drop the check that blocked one address on two inboxes and simplify sender
lookup, alias verification and IMAP handling. The inbox form now shows the
connected account first, lines up its fields and shows one hint for unsaved aliases.
2026-09-27 22:54:40 +05:30
Abhinav Raut da13bfb44c Merge remote-tracking branch 'origin/main' into feat/inbox-aliases
# Conflicts:
#	frontend/apps/main/src/features/conversation/ReplyBox.vue
#	frontend/apps/main/src/features/conversation/ReplyBoxContent.vue
#	internal/conversation/conversation.go
#	internal/migrations/v2.9.0.go
2026-09-27 11:11:55 +05:30
Abhinav Raut 95cbbdab7b Merge remote-tracking branch 'origin/main' into feature/automation-filter-email-to 2026-09-27 11:06:28 +05:30
Abhinav Raut ce6cc5efdd limit To filter to new conversations and fix case sensitive checkbox 2026-09-27 11:06:12 +05:30
Abhinav Raut 3dfcde8e30 remove duplicate and unneeded WhatsApp translation strings 2026-09-25 21:41:08 +05:30
Abhinav Raut a38a89ebc4 name the v2.9.0 migration v2.9.0-rc.8 2026-09-25 21:30:08 +05:30
Abhinav Raut c0d6131e47 Merge remote-tracking branch 'origin/main' into feat-whatsapp 2026-09-25 21:12:01 +05:30
Abhinav Raut 6f77cfb1ad sandbox only downloaded files so videos play in Chrome again 2026-09-25 20:01:43 +05:30
Abhinav Raut 8272aa2d07 add forced download cases to the media serve test 2026-09-25 18:52:50 +05:30
Abhinav Raut fae3251dfc stop uploaded SVG files from running scripts
An upload could send a file type like "image/svg+xml; x". We saved that
type as sent, so it skipped the SVG check and the file opened in the tab
with scripts on. Types ending in +xml had the same hole.

We now clean up the type before saving it and again when serving it,
which also fixes files uploaded before this change. Files served from
libredesk get scripts turned off, except PDFs, because Chrome's PDF
viewer won't load that way. SVG and other XML types always download.

On S3, uploads store the cleaned type and a download or inline header
on the file.
2026-09-25 11:52:31 +05:30
Abhinav Raut 5cd6b3bbe2 fix WhatsApp contact blocking and reply variables
Drop messages from blocked contacts before media downloads or conversation updates. Restore variables in regular replies and add regression tests while preserving Meta template parameters.
2026-09-25 02:29:11 +05:30
Abhinav Raut 9f686ac568 remove redundant translations and semicolons 2026-09-25 02:06:02 +05:30
Abhinav Raut 7c3b239793 make the time trigger lookback configurable 2026-09-25 01:50:24 +05:30