Commit Graph

1617 Commits

Author SHA1 Message Date
josephsellers b699cacd30 Add API endpoint to delete private notes
Adds DELETE /api/v1/conversations/{cuuid}/messages/{uuid} for removing private
notes via the API. Uses a dedicated `delete-private-message` query/stmt
(separate from the generic `delete-message` used internally by continuity) so
only messages with private=true can be deleted — sent/incoming messages are
protected. Returns 404 if the message doesn't exist or isn't private.

Useful for API consumers that create private notes programmatically and need to
clean them up (e.g. replacing an outdated note before adding a new one).

[Used Claude Code 🤖]
2026-06-18 11:33:19 +01:00
Abhinav Raut 4eb1f8eca1 Add 2FA for password login to roadmap 2026-06-17 11:28:06 +05:30
Abhinav Raut 36c962af7d Merge pull request #385 from abhinavxd/fix-autoassigner-assignment-race
fixes autoassigner overriding a manual assignment
2026-06-16 16:12:58 +05:30
Abhinav Raut 15e5c35d37 renames conversation assignment funcs for clearer intent 2026-06-16 16:04:24 +05:30
Abhinav Raut 18ae7b95d6 make updateAssignee private so user assignment can't skip hooks 2026-06-16 15:58:42 +05:30
Abhinav Raut 1b87433de4 fixes autoassigner overriding a manual assignment
The autoassigner fetched the unassigned list once, then looped and
assigned each one. If the conversation was reassigned while that slow
batch was still running, the autoassigner's write still landed and
overrode it, because the UPDATE had no guard.

Adds an atomic claim that only assigns when the conversation is still
unassigned AND still in the team the user was picked from. A manual
user assignment or a team change between the list read and the claim
now makes the claim a no-op, and the side-effects (webhook, automation,
notification) are skipped. Manual assignment keeps its unconditional
override path.
2026-06-16 12:55:09 +05:30
Abhinav Raut ef1ef15adf Update roadmap with new features and remove WIP items 2026-06-13 04:42:18 +05:30
Abhinav Raut 14a812d023 Merge pull request #371 from abhinavxd/update-font
update font family to Instrument Sans
2026-06-10 23:43:08 +05:30
Abhinav Raut d300ce26e6 feat: show day separators in conversation message list
closes https://github.com/abhinavxd/libredesk/issues/376
2026-06-10 21:20:07 +05:30
Abhinav Raut ae328d3c51 Update ROADMAP.md 2026-06-09 01:12:09 +05:30
Abhinav Raut edbc026a24 Merge pull request #359 from abhinavxd/transcript
feat: add conversation transcript download and CSAT in sidebar
2026-06-07 15:29:20 +05:30
Abhinav Raut f70e488662 refactor: sanitize only the reference number for transcript filename 2026-06-07 15:22:52 +05:30
Abhinav Raut 2d81703ae2 fix: address review nits on transcript download
- sanitize Content-Disposition filename via stringutil.SanitizeFilename to neutralize header injection
- use i18n.Tc for count-aware singular/plural attachment label
- append download anchor to DOM and defer URL.revokeObjectURL for cross-browser reliability
2026-06-07 15:17:03 +05:30
Abhinav Raut b75f138de1 Merge pull request #375 from abhinavxd/feat/self-assign-nudge-on-reply
feat: nudge agent to self-assign after replying to an unassigned conversation
2026-06-07 15:08:07 +05:30
Abhinav Raut 1ce638e9d7 refactor: extract AssignSelfNudge component, let store own local assignee state 2026-06-07 15:01:29 +05:30
Abhinav Raut b7564b5da4 Merge pull request #374 from abhinavxd/feat/from-name-template
feat: add customisable From display name template for outgoing emails
2026-06-07 14:51:08 +05:30
Abhinav Raut f9e044676a feat: nudge agent to self-assign after replying to an unassigned conversation 2026-06-07 14:51:03 +05:30
Abhinav Raut f987224cee perf: avoid DB lookups when building email From name 2026-06-07 14:45:51 +05:30
Abhinav Raut 1fccfceb4c feat: add customisable From display name template for outgoing emails
Adds a from_name_template field to email inboxes. When set and the sender is an agent, the template renders with agent and inbox variables and becomes the From display name; the inbox email address is unchanged. Any render failure, or a system-user sender, falls back to the plain inbox From so a misconfigured template never blocks delivery.

Variables: .Agent.FirstName, .Agent.LastName, .Agent.FullName, .Inbox.Name (the inbox name). Based on #249.

Co-authored-by: josephsellers <6892567+josephsellers@users.noreply.github.com>
2026-06-07 14:20:56 +05:30
Abhinav Raut cfed3cfc28 test: add e2e tests for inbox, team, agent and conversation flows 2026-06-07 14:06:40 +05:30
Abhinav Raut 2836ad2f71 Merge pull request #373 from aditya2r/feat/unified-send-and-close-ticket-action
feat: add "Send and set status" split button to reply box.
2026-06-07 12:35:39 +05:30
Abhinav Raut ed95b9104f refactor tidy reply box send button imports and dead code 2026-06-07 12:28:12 +05:30
Abhinav Raut 90ceece01b fix apply status update after send confirmation dialogs. 2026-06-07 12:17:29 +05:30
Abhinav Raut bf22811337 fix chevron color 2026-06-07 11:56:15 +05:30
aditya2r b679fc2158 feat: add "Send and set status" split button to reply box.
Add a dropdown next to the Send button that allows agents to send a
reply and update the conversation status in a single action.

- Add split button with dropdown to  ReplyBoxMenuBar
- Extract email validation into reusable validateBeforeSend helper
- Guard for status update on successful message send
- Exclude Snoozed from status options
2026-06-06 16:14:07 -04:00
Abhinav Raut 49b42976f3 update remaining static templates to Instrument Sans
The font swap missed static surfaces outside frontend/. The CSAT widget,
the public page style.css, and the email base template still loaded Plus
Jakarta Sans. Update them so all surfaces use the same font.
2026-06-06 21:16:11 +05:30
Abhinav Raut 073d6a517d Merge pull request #365 from vanboom/363-macro-hotkey
Resolves #363, implement CTRL+M hotkey to access the macro dialog
2026-06-06 21:08:04 +05:30
Abhinav Raut 4f4bbbef5f Fix macro context lost via Ctrl+K and stale macro filter after new conversation 2026-06-06 21:02:25 +05:30
Abhinav Raut cb081b4b38 update font family to Instrument Sans 2026-06-06 19:58:07 +05:30
Vanboom 168add044b Address issue #363, implement CTRL+M hotkey to access the macro dialog
directly
2026-06-03 14:28:38 -05:00
Abhinav Raut 5e9d964aed Merge pull request #361 from abhinavxd/revert-349-codex/document-widget-api
Revert "docs: document widget API endpoints"
2026-06-02 23:53:56 +05:30
Abhinav Raut da1cf5dba1 Revert "docs: document widget API endpoints" 2026-06-02 18:18:35 +05:30
Abhinav Raut eb6a195aaf feat: add conversation transcript download and CSAT in sidebar
Agents can download a full conversation as a .txt file from the
header menu. The conversation sidebar now shows the CSAT rating and
feedback once the customer responds.
2026-06-02 16:25:33 +05:30
Abhinav Raut 84c0c97f68 Merge pull request #349 from alan747271363-art/codex/document-widget-api
docs: document widget API endpoints
2026-06-02 15:30:29 +05:30
Abhinav Raut 9e247c574c Merge pull request #356 from abhinavxd/dependabot/npm_and_yarn/frontend/vitest-4.1.0
build(deps-dev): bump vitest from 3.2.2 to 4.1.0 in /frontend
2026-06-02 12:34:28 +05:30
Abhinav Raut c8413356ec Update ROADMAP.md 2026-06-02 12:06:38 +05:30
dependabot[bot] 3f065439ff build(deps-dev): bump vitest from 3.2.2 to 4.1.0 in /frontend
Bumps [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) from 3.2.2 to 4.1.0.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.0/packages/vitest)

---
updated-dependencies:
- dependency-name: vitest
  dependency-version: 4.1.0
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-01 21:34:46 +00:00
Abhinav Raut 5cd691f77b Merge pull request #353 from abhinavxd/fix/duplicate-admin-api-requests
fix: remove inbox keep-alive that caused duplicate admin requests
v2.3.1
2026-06-01 13:27:36 +05:30
Abhinav Raut 5c5c73b5b7 soft-refresh conversation list on inbox re-entry instead of refetching 2026-06-01 13:17:26 +05:30
Abhinav Raut 97df3ba7a6 fix: remove inbox keep-alive that caused duplicate admin requests 2026-06-01 13:06:52 +05:30
Abhinav Raut b42c46f890 Update contributing.md 2026-05-31 16:31:04 +05:30
alan747271363-art 2c766a4c46 docs: document widget API endpoints 2026-05-31 13:42:41 +07:00
Abhinav Raut 59f9b4e85d Merge pull request #347 from abhinavxd/dependabot/npm_and_yarn/frontend/axios-1.16.0
build(deps): bump axios from 1.15.2 to 1.16.0 in /frontend
2026-05-29 23:24:04 +05:30
Abhinav Raut 817e15dcfb add missing key to sample toml 2026-05-29 23:15:45 +05:30
Abhinav Raut 3e7756a8b0 fix: correct config keys for socket and draft retention 2026-05-29 22:18:36 +05:30
dependabot[bot] 3e9a52f960 build(deps): bump axios from 1.15.2 to 1.16.0 in /frontend
Bumps [axios](https://github.com/axios/axios) from 1.15.2 to 1.16.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.15.2...v1.16.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-version: 1.16.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-29 16:04:53 +00:00
Abhinav Raut d36c43c9a8 ci: pin pnpm to 9.15.3 and bump release node to 20
Latest pnpm now requires Node >=22.13; CI ran 18.12/20 and broke.
Pinning to the packageManager-pinned 9.15.3 (supports Node >=18.12)
keeps CI in sync with local dev.
v2.3.0
2026-05-29 21:33:05 +05:30
Abhinav Raut d173688c53 Merge pull request #346 from abhinavxd/fix-invalid-utf-8
fix: sanitize invalid UTF-8 in incoming email
2026-05-29 21:21:07 +05:30
Abhinav Raut 1233f2fbc1 fix: migrate livechat inbox lang codes to region format 2026-05-29 21:20:44 +05:30
Abhinav Raut c87c60b7c8 fix: drop contact email from incoming-message error log to keep PII out of logs 2026-05-29 21:18:54 +05:30