Release candidate for v2.9.0
What's new
WhatsApp channel
- WhatsApp inbox - connect a WhatsApp Business number through the Meta Cloud API, with templates.
Live chat widget
- Proactive messages - the widget messages visitors first when conditions you set are met, such as the page they are on, their device, business hours or time spent on the page.
- Help center - visitors can now browse the help center right inside the widget.
- Chat transcripts - visitors can download their conversation.
Help center
- Dark mode support - show the help center in light, dark or the visitor's system setting.
- Linked translations - You can now link an article to another as its translation.
Agent dashboard
- AI tools in copilot - copilot and generate reply can call custom AI tools, with agent approval.
- Notification preferences - agents can now choose which notifications they get in the app, by email and as browser push.
- Install as an app - libredesk is now a PWA, so agents can install it on desktop or phone and get push notifications.
- Command palette - rebuilt to jump to any page, find conversations and contacts, apply macros, snooze, and assign, tag or change status in bulk, with keyboard shortcuts for common actions.
- Better search - search results can now be filtered, sorted and paged, with matches highlighted.
- Sidebar counts - shows the open conversation count for each inbox and view right in the sidebar.
What's fixed
- Much lower memory and CPU use. On an instance with about ~5,000 conversations a day and ~500 agents logged in, memory stays between 180 MB and 560 MB over the day.
- Uploaded SVG files can no longer run scripts.
- Many other quality of life fixes and improvements.
Upgrade notes
- Always take a database backup before upgrading.
- Use the
v2.9.0-rc.8Docker tag. Thelatesttag stays on v2.8.0. - Follow the steps here.
Changelog
- 38deabc fix the WhatsApp spec for the lowercase brand name and drop an unchecked test cleanup
- 3dfcde8 remove duplicate and unneeded WhatsApp translation strings
- a38a89e name the v2.9.0 migration v2.9.0-rc.8
- c0d6131 Merge remote-tracking branch 'origin/main' into feat-whatsapp
- 0bfaa89 Merge remote-tracking branch 'origin/main' into feat-whatsapp
- ab3a5ca Merge pull request #641 from abhinavxd/fix-svg-uploads
- 6f77cfb sandbox only downloaded files so videos play in Chrome again
- 8272aa2 add forced download cases to the media serve test
- dc516bd refactor: replace string literals with constants for content disposition
- c42e121 Merge pull request #642 from abhinavxd/fix-zoom-overflow
- 8ec3b1a wrap long one-word contact names inside the sidebar
- 7c79f6e fix content spilling out of panels and dialogs when zoomed in or out
- fae3251 stop uploaded SVG files from running scripts
- 9e4a114 preserve leading zeros in Congo WhatsApp numbers
- 5cd6b3b fix WhatsApp contact blocking and reply variables
- 9f686ac remove redundant translations and semicolons
- b101170 log when time trigger evaluation starts
- 7c3b239 make the time trigger lookback configurable
- 7f5b346 add last resolved rules and consolidate migration tests
- 277ef89 consolidate database test helpers into testutil
- 5529754 drop the leading 0 from local WhatsApp numbers and fix composer Cypress tests
- 6c3006c share the channel icon mapping across components
- 544a3e1 keep prereleases from updating latest Docker tags
- 96b88dc revamp the new conversation composer and preserve drafts
- 503f751 fix WhatsApp ingester shutdown order
- e072728 Merge remote-tracking branch 'origin/main' into feat-whatsapp
- df9de13 show the WhatsApp icon next to the inbox in the conversation sidebar
- 4bcc7a3 move the reopen window field and focus template search on open
- db1eecc Merge pull request #637 from abhinavxd/fix-minimize-icon
- f9fe57d move the reply box minimize line to the bottom of its button
- 6b0f8c4 scroll the template row into view before checking it in the WhatsApp delete test
- 3001a7a merge main into feat-whatsapp
- 96d29eb Update README.md
- 35196e0 Merge pull request #618 from abhinavxd/mobile-improvements
- 5067eb2 keep focus in the tag picker after each pick
- e4fb977 make the phone message avatar bigger
- f4d5adf show the avatar next to the sender name on phones
- 804e457 add reply recipient tests and tidy three small UI details
- f07efc0 close the phone sidebar when opening the view form
- 21be970 show the desktop layout from 1024px and fix phone layout bugs
- 240aef8 fix bugs found while testing WhatsApp end to end
- 9b2c0ec keep text formatting in WhatsApp replies
- ad3888a bug fixes
- 5225f92 Merge branch 'merge-main-into-whatsapp' into feat-whatsapp
- 72497ec block new WhatsApp conversations when the contact already has an open one
- d2e2bcc Merge remote-tracking branch 'origin/main' into feat-whatsapp
- 717dfe9 Merge remote-tracking branch 'origin/main' into mobile-improvements
- b1c8044 Merge pull request #619 from abhinavxd/libredesk-widget-improvements
- 718c005 fix live chat review findings and tests
- 9c3b022 block minimizing the reply box during an AI rewrite and fix the bell badge on tablets
- 8068c28 simplify new i18n keys
- f8c684e add tests for set and not set on missing contact attributes
- 1a422a5 use shadcn buttons and labels instead of hand-styled raw elements
- 08e9407 stop showing a spinner in the admin table search box while the list loads
- eac3041 add separate light and dark footer colors to the help center
- 7ecc9fd fix help center colors that broke or went missing in dark mode
- c52fe0e add clarifying commetns to handlers
- a2ba6fa add a light, dark or system color scheme setting to the help center
- 77df872 clear the handoff form flag once the form is submitted
- a431211 stop the handoff form from sending itself empty and reload stale settings
- e30843a remove unused top-level quick replies from live chat config
- cf7c766 remove legacy launcher and widget setting resp.
- cb6b626 Keep transcript download cap only for widget.
- 3d450c8 key ci concurrency on the pull request number
- 954db05 skip ci for docs and cancel superseded runs
- 58386ce count a failed inbox reload as a failed attribute cleanup
- 9868e20 make livechat specs create the records they pick
- 8a6bb06 add a fifth cypress shard and cache the pnpm store and cypress binary
- 79f4ba4 split the cypress run across four shards
- 6c9d9e4 scope livechat form test switches to their section
- 8f5606f ignore playwright mcp artifacts
- c7ca133 fix livechat api test assertions and wait for an opened form section
- 0df54fa fix color scheme listener on old safari and reject fractional message counts
- 5702bbb Bug fixes in live chat widget form and more e2e tests
- 127d98c fix proactive message bugs and simplify launcher and preview settings
- 96d8bb9 improve proactive message setup
- a614372 fix widget compatibility and asset loading
- 374cd26 improve live chat widget settings and branding
- 01874c2 keep the tag list open so multiple tags can be picked in one go
- 3cd6fc6 fix the status badge selector in the lifecycle test
- 714d52b hide the bcc row when the thread has no bcc
- e668046 tidy comments in the reply box
- a9047f8 add a copy button next to the contact email
- d6bf0de shrink the status chip in the conversation header on mobile
- eeb11f9 show the draft text on the collapsed reply box
- 2c34b84 add a minimize button to the reply box
- 4ceb40e keep dark mode when navigating the help center inside the widget
- f73434e let admins link and unlink help center article translations
- 04464fb show message previews only after the widget loads
- 8351285 fix widget, search and help center bugs
- bd3e736 add dark mode to the help center
- 2d4a039 reduce shadow intensity on reply buttons
- f9564fa move typing bubble style into TypingIndicator
- 0e18223 send csat in livechat and fix widget dark mode menus
- c0d7388 keep zero campaign delay and scroll to an unread first message
- 08e6801 polish widget UI and fix proactive message delete
- a074bc4 add hover animation to widget launcher
- b290031 Merge remote-tracking branch 'origin/main' into libredesk-widget-improvements
- f6f1bb4 show helpcenter article as is inside the widget. adds new ?embed query param that shows the entire helpcenter in embed mode
- 173c0a5 Merge pull request #622 from abhinavxd/optimize-build
- 490f041 Merge pull request #621 from abhinavxd/fix-idle-away-shown-as-away
- ec00b94 speed up builds and load app layouts on demand
- 7c9fac4 show idle agents as online instead of away
- d2dc51b link article translations by group id and tidy the widget chat
- 0ee2e9e merge main
- 00c758f Merge pull request #620 from abhinavxd/feature/agent-ai-tools
- a1117ac send the AI agent's last reply before handing off to a human
- aa7336e move reusable AI tool labels to global translations
- a85d59a always send verified for agent tool calls and tidy the approval UI
- ea93e5e update agent approval hint for AI tools to clarify data change requirements
- 769aa32 send the real contact verification state to AI tools on agent surfaces
- aac97e3 reject a second AI tool run while one waits for approval
- 8d99740 add custom AI tools to copilot and generate reply with an agent approval step
- 28b33a1 insert campaign reply messages in the conversation transaction, allow zero cooldown, scope handoff drafts and parent origin
- 2164516 label audience prechat toggle, pin handoff conversation, clear dismissed preview timers
- 6614a77 reset fractional hidden repeat hours
- eb14b27 reset out of range repeat hours and widen campaign contact id
- 7848551 fix review findings in widget campaigns and help search
- 8769e92 handle overnight campaign hours
- 658e4e0 discard stale help searches
- 23b4dea block duplicate handoff submissions
- 4c5ce9c keep empty campaign previews rendering
- da1d8e0 count unread messages for new conversations
- 29847f9 keep campaign visitor sessions identified
- b28f576 fix quick reply character limits
- 7d77754 improve live chat widget flows
- c4d809d improve pagination accessibility
- 1101279 fix mobile layouts
- 3843f1e Merge branch 'main' into libredesk-widget-improvements
- ccba084 Merge remote-tracking branch 'origin/main' into libredesk-widget-improvements
- 98088f0 Merge pull request #612 from abhinavxd/search-improvements
- 319c5e6 add accessible labels to search controls
- c1e9626 preserve search sort and remove unused pagination changes
- ab44d64 add cursor pagination and search sorting
- 6a6e449 limit conversation suggestions to reference matches
- 3d09ad1 preserve existing search API responses
- 56269ca remove extra spacing from clear filters icon
- 9c1e147 fix campaign reply and poll edge cases, enlarge mobile launcher
- 46e2e52 escape wildcard characters in search queries
- 741be04 Merge pull request #615 from abhinavxd/fix/kathmandu-timezone
- 88daac8 improve search filters and results
- f4f1352 add Kathmandu timezone option
- 2ad9492 fix send using old draft after AI editor prompt rewrites it
- 46c3e42 add WhatsApp template editing and handle Meta failures
- 1892ff9 add extrap paddin when total page =1
- be39c24 move WhatsApp template package and trim README copy
- c390e46 fix WhatsApp inbox form test selector
- 9391b50 fix search results and pagination
- 608eefb Merge remote-tracking branch 'origin/main' into search-improvements
- 2f1f67b show pagination in a bordered panel
- f7f80b4 reuse beta badge component
- bb5c989 remove live chat beta badge
- a89f14b fix WhatsApp message status and private notes
- f342630 merge latest main into WhatsApp branch
- a41ce67 merge main into WhatsApp branch
- f4916f4 Merge pull request #610 from abhinavxd/remove-new-contact-icon
- cd4610a remove icon from new contact button
- 2221f95 Merge pull request #607 from abhinavxd/agent-notification-preferences
- ba34915 add notification settings link
- f508ddc update WhatsApp API to v26.0
- 639941e fix WhatsApp message order and contact numbers
- 75ab05c show a loader while notification settings load
- 8b79080 keep search pagination bar flush at the end of the page
- c758576 separate search result meta items with a middle dot
- ec73a17 give search result rows more space and a single meta line
- e0c38a9 fix tag filter chips showing ids and date range overflowing the filter row
- a7eb702 lay out search page as one centered column with the search field, filters and results aligned
- f600e7e add filters, pagination and richer results to conversation search
- 635ce63 fix browser notification persistence
- 89f5890 wip: add widget campaigns, help center in widget and transcript download
- 43c007e improve notification previews and editor AI
- ef53a48 revert chagnes to render.go
- 6fd04de remove message time from email queue
- 6655a9f fix reply alerts and browser push subscriptions
- f07ccd7 prevent overlapping notification preference saves
- ced1a8b add per-agent notification preferences and browser push
- 9016466 Merge pull request #452 from IzzaldinSamir/patch-1
- d804124 apply email light canvas only for email channel conversations
- 4f291fe Merge remote-tracking branch 'origin/main' into patch-1
- 42f7bb7 Merge pull request #603 from anvme/fix/csat-double-submit
- 2b3b9a4 Merge pull request #602 from anvme/fix/csat-error-leak
- 5fdf79f Merge pull request #601 from anvme/fix/csat-feedback-utf8
- 6487b6b remove over-explanatory CSAT comments
- 349519a Merge pull request #578 from pmslava/list-priority
- a870722 use ladders for priority market
- 7388ab9 fix: prevent duplicate CSAT submissions under concurrency
- cdfe811 fix: don't render raw driver errors on CSAT submit
- 852dbfe fix: truncate CSAT feedback by runes to preserve valid UTF-8
- 411ea02 Merge pull request #594 from abhinavxd/dependabot/npm_and_yarn/frontend/vitest-4.1.11
- 6e039e2 Bump vitest from 4.1.0 to 4.1.11 in /frontend
- 302bbd2 conversation: show a priority marker on conversation list rows
- b5c4a30 Update 2FA status and conversation reports in roadmap
- 2c1aa92 Update roadmap with new features and statuses
- 93df6c8 Merge pull request #492 from pat-s/agent/sso-only-auth
- 32f8147 drop the rationale comment on isLocalLoginEnabled
- bde1f06 skip the OIDC lookup on login unless local login is disabled and translate the error
- 920ac2c Merge pull request #577 from abhinavxd/ai-prompts-crud
- 34d2a64 keep prompt content out of the agent prompt list and load it on edit behind ai:manage
- b35fc83 Change translation contribution process to Crowdin
- 30b5d94 add editor prompts admin page to create, edit and delete AI reply box prompts
- 70c8606 Merge pull request #572 from abhinavxd/contacts-toolbar-layout
- 7b72e44 move new contact button to the right of the contacts toolbar
- 251f2bf Merge pull request #312 from Gumbraise/feat/add-contact-form-and-api-route
- 52b6658 reject duplicate emails when creating a contact and reuse shared i18n keys
- e8007b6 Merge remote-tracking branch 'origin/main' into pr-312
- 3ae4f94 fix access checks when reusing WhatsApp conversations
- 3332862 fix CSAT UUID leaks and conversation assignment order
- 85a1b47 Merge pull request #475 from fredrikblau/feat/private-note-ticket-links
- c1b999b fix stale searches and mention email links
- e418039 fix WhatsApp conversation setup and sending
- 975eb4f fix WhatsApp e2e mock listing the wrong phone number
- 3bf997f Merge pull request #559 from abhinavxd/dependabot/npm_and_yarn/frontend/qs-6.16.0
- 34d418e fix WhatsApp window updates on retries and contact search races
- 908f341 Bump qs from 6.15.2 to 6.16.0 in /frontend
- e1c8719 rename ticket references to conversation references
- 3d45b5f fix ticket reference parsing, stored links and suggestion popup
- 8fd7463 Merge remote-tracking branch 'origin/main' into feat-whatsapp
- 926bcc5 fix WhatsApp startup, retries and media limits
- dd57a86 Merge pull request #556 from abhinavxd/command-palette
- 8109d1b filter conversation and message search by read permissions in sql
- afeb120 apply the search limit after the read-permission filter
- 90c5e63 Merge pull request #555 from jleroy/i18n/update-2026-09-02
- ccf6ba2 drop the palette loading row
- e5ce086 always show the palette loading row while a search is in flight
- dd0d7ba show a loading row in the command palette list while results load
- c47e8e0 let search callers pass a result limit and show the palette spinner while typing
- 0e13b04 fix: discard stale ticket suggestions
- 18e2fbe fix: validate ticket reference URLs
- f8c75f6 feat: port ticket references to conversation editor
- 5dbe0f7 delete the test inbox in the command palette macros spec teardown
- 2eaaa36 fix snooze rounding, shifted slash shortcut and reply focus in fullscreen
- 9c0d242 rebuild the command palette and add keyboard shortcuts for conversation actions
- 0cba59c Update translations [2025-09-02]
- d33e07e Merge pull request #534 from amb1/pr/sidebar-counts
- b136346 fetch only the edited view's count after saving a view
- 5435d3e refresh sidebar counts after view edits and queued forced fetches
- b001d7a use one deadline for the whole sidebar counts request
- 2ba716c Merge remote-tracking branch 'origin/main' into pr/sidebar-counts
- 455f745 apply code review fixes to sidebar counts
- d22de18 count all sidebar views in batches instead of dropping past 50
- dc553da Merge pull request #537 from abhinavxd/shrink-macro-payloads
- 5e22ed3 keep the thumbnail name when its upload fails
- 12bb634 Merge remote-tracking branch 'origin/main' into shrink-macro-payloads
- 4977542 cover the user view form and tidy the palette empty state
- f0c8413 test the macro view filter for all three surfaces
- 3ffbea5 test macro visibility scoping for all three scopes
- 87a95f0 center command states in the available space
- 4aacd20 keep the upload when the thumbnail fails
- 51db29a move agent lookup into its own sql queries
- c934758 cap sidebar view counts and move the count badge into a component
- 939ca59 Merge pull request #540 from eozsahin1993/feat/read-receipt-indicator
- 01ec83c fix same-second read receipt and add sent/read tooltips
- 921e507 Merge pull request #543 from eozsahin1993/fix/disable-mentions-for-replies
- c1d613c Merge pull request #548 from malpou/fix/oidc-redirect-live-lookup
- 60cb854 Merge pull request #544 from malpou/api/source-id
- 4402cee auth: move resolveRedirectURL below the public methods
- 49932a8 Merge pull request #549 from LaQuay/feat/role-write-private-notes
- baeade9 oidc: always read the redirect URL from settings, drop the session copy
- ef8e99b cover note delete, summarize and copilot inserts in private note permission tests
- 9a64fe3 move canCreateConversationMessage below the handlers
- c0471ae gate message delete on messages:write_private & drop doc str
- dd9cd4a fix: preserve macro actions during permission filtering
- 08a1280 feat: add separate permission for private conversation notes
- 1811e89 oidc: reject a missing redirect URI from the session in the callback
- 8eeea38 oidc: resolve redirect URI once per login and propagate errors
- 02e9d1d oidc: resolve redirect URL live so Root URL changes without a restart
- 5d84d5a Reject line breaks in source_id
- 3b0d3d4 api: accept source_id on conversation and message endpoints
- 691e6cf fix(reply-editor): disable mentions for replies in tiptap
- 588b1ff fix: filter out only livechat message for read receipt explicitly
- 6ef82ad Merge pull request #539 from eozsahin1993/fix/thumbnail-orientation
- d8e8e19 remove console log
- 409c5ba feat(read-indicator): show read indicator for chat messages
- 70c4ea0 fix(thumbnail): fixes thumbnail rotation issues
- 7ae63c1 log each time trigger batch fetch
- 3870711 cut memory spikes from uploads, i18n and the hourly time trigger
- 921420d label saved picker values passed as model-value
- e62967b isolate remote picker searches
- a01eaa5 fix remote lookup tests
- e2ca7c7 avoid stale lookup results
- 18514cd search and paginate agents, teams, tags and macros instead of loading them all at boot
- 1a84031 clean up WhatsApp i18n keys
- 1d88ef1 fix: address CodeRabbit review on sidebar counts PR
- ebd60e8 fix: restore upstream i18n keys and keep sidebar count strings
- d12c444 feat: show open conversation counts in the inbox sidebar
- fd4a37f add WhatsApp channel tests and bug fixes
- bd62fa1 Update ROADMAP.md
- f5e853f Update roadmap with new tasks and statuses
- b7c2ef9 Merge remote-tracking branch 'origin/main' into feat-whatsapp
- e2f5446 add help center feature to README
- 9b3237e return a generic error on whatsapp template sync failure and handle the none sentinel
- a932805 fix whatsapp phone prefix duplication, add meta call timeouts and host checks
- a7c5e56 serialize whatsapp csat template reconcile per inbox
- d34c654 fix whatsapp credential validation, contact permission and phone normalization
- defc653 send whatsapp attachments as one message per file
- f56db19 remove redundant comments and tighten the ones worth keeping
- 3ef1a73 Merge remote-tracking branch 'origin/main' into feat-whatsapp
- 8a3efb0 docs(auth): clarify SSO recovery path
- 10d2a7d feat(auth): add SSO-only login mode
- 4f061b6 fix: remove invalid CSS syntax added by bot
- a3a1025 Update frontend/shared-ui/assets/styles/main.scss
- 9862adc render incoming email on a light canvas in dark mode
- 561435a Merge remote-tracking branch 'origin/main' into patch-1
- 45c1b6a fix: force light background for email messages in dark mode (#449)
- fe3eaee use one country list and renumber the whatsapp migration to v2.8.0
- 92a1ef8 Merge branch 'help-center' into feat-whatsapp
- 371dd87 Merge branch 'main' into feat-whatsapp
- b54a3d7 fix WhatsApp media, status, and template bugs found in code review
- 224f7ad Add tooltip for invalid token indication in inbox data table
- 57272a9 Add debug log for reserved template content matching in EnsureReserved
- 695aad2 Remove sync of whatsapp template on change of root url Add search to template picker.
- a2f3113 Simplify CSAT not-sent activity message
- 044a692 Use CSAT template body as fallback text when template is pending
- 1b28e08 Include sample_values in template upsert from Meta
- c8da54e Centralize WhatsApp template fetching and improve CSAT template reconciliation
- a65b08b add WhatsApp partial send handling and attachment retry
- 27f9f37 clean up comments in whatsapp channel
- 7a53cf9 fix bugs and clean up code
- 5296836 fix WhatsApp CSAT template button URL
- 08e637d Remove country list retry button and translation
- ef80ba2 fix WhatsApp webhook ingestion gaps
- 372bbf3 fix WhatsApp reopen window not saving
- 8781bd4 fix WhatsApp multi-attachment sending and polish the template form
- 9926524 remove dead WhatsApp media-header and From plumbing
- a06854e make the inbox auth-error tracker generic and drop the dead WhatsApp From backfill
- ceb1b09 reuses the open WhatsApp conversation instead of starting a parallel one
- 4e9b915 widens the WhatsApp template form to fill the content column
- 3f42530 encrypts the WhatsApp webhook verify token at rest
- 7fadf9e makes the WhatsApp CSAT template editable and moves the reopen window to an inbox column
- fa2b437 merges main into feat-whatsapp
- e25571d ignores unhandled WhatsApp template status events
- 59e5edf makes WhatsApp outbound sends retry-safe and validates template params before sending
- d127f1d requires a public HTTPS root URL for WhatsApp webhook auto-registration and drops the rate limit on inbound events
- 24245cf fixes the WhatsApp 24h window live update and centralizes the window check
- dd45881 refines the new-conversation forms and always creates a new WhatsApp conversation
- f81c787 adds the WhatsApp new-conversation UI
- f2ef6c5 adds outbound WhatsApp conversations and a per-contact 24h window
- b0ad1dd refines WhatsApp admin UI and keeps the reopen window backend-only
- f4596bd fixes WhatsApp 24h window by stamping last_inbound_at from the inbound message timestamp, not ingestion time
- 3d08f15 feat: conversation reopen window for WhatsApp
- 74599df feat: durable WhatsApp inbound queue
- 6a54252 fix: WhatsApp review fixes (CSAT uuid leak, named templates, reserved delete guard, dial-code guard)
- 6a4aec2 fix: WhatsApp review batch (nil logger guard, attachment thumb reset, template status logging, template list fetch race)
- 3a00b85 fix: address WhatsApp review findings (graceful decrypt, template picker, form + date guards)
- 764225d fix: preserve large WhatsApp template ID precision in webhook decode
- b3382d8 fix: improve WhatsApp channel error handling and dial-code lookup
- 1d66c3e feat: add WhatsApp Cloud API channel
- 14d151a fix(contact): treat avatar upload as best-effort after contact creation
- f26df73 Merge branch 'main' into feat/add-contact-form-and-api-route
- 864ab1c refactor(contact): simplify form schema
- f9d4089 refactor(contact): share form parsing
- 88c9433 fix(contact): route after sidebar create
- 46368da fix(contact): revoke avatar preview URLs
- 0994537 fix(contact): return envelope error
- feea4c1 feat(contact): add new contact button and dialog to sidebar
- 989adbc feat(contact): add create contact button and dialog to contacts list
- cc69a5b feat(contact): add CreateContactDialog component
- 72c794f feat(contact): add createContactFormSchema with all optional fields
- 3ed3400 feat(contact): add createContact API function
- 9999c1a feat(i18n): add create contact translation keys
- 1f59bff feat(contact): register POST /api/v1/contacts route
- 9bc84b2 feat(contact): add handleCreateContact handler
- 8c82704 feat(contact): add CreateManualContact method
- 7e91586 feat(contact): register InsertContactManual prepared statement
- db3e027 feat(contact): add insert-contact-manual SQL query
What's Changed
- Fixes thumbnail rotation issues by @eozsahin1993 in #539
- feat: add separate permission for private conversation notes by @LaQuay in #549
- api: accept source_id on conversation and message endpoints by @malpou in #544
- oidc: resolve redirect URL live so Root URL changes without a restart (preferred option) by @malpou in #548
- Fix: disable mentions for replies in tiptap by @eozsahin1993 in #543
- Feat: read receipt indicator by @eozsahin1993 in #540
- search and paginate agents, teams, tags and macros instead of loading them all at boot by @abhinavxd in #537
- feat: show open conversation counts in the inbox sidebar by @amb1 in #534
- Update translations [2025-09-02] by @jleroy in #555
- rebuild the command palette and add keyboard shortcuts for conversation actions by @abhinavxd in #556
- Bump qs from 6.15.2 to 6.16.0 in /frontend by @dependabot[bot] in #559
- Add conversation reference links to private notes by @fredrikblau in #475
- Implement create contact functionality by @Gumbraise in #312
- move new contact button to the right of the contacts toolbar by @abhinavxd in #572
- CRUD for editor ai prompts. by @abhinavxd in #577
- feat(auth): add SSO-only login mode by @pat-s in #492
- Bump vitest from 4.1.0 to 4.1.11 in /frontend by @dependabot[bot] in #594
- Conversation list: show a priority marker on each row by @pmslava in #578
- fix: truncate CSAT feedback by runes to preserve valid UTF-8 by @anvme in #601
- fix: don't render raw driver errors on CSAT submit by @anvme in #602
- fix: prevent duplicate CSAT submissions under concurrency by @anvme in #603
- Fix: Ensure email text visibility in Dark Mode (#449) by @IzzaldinSamir in #452
- add per-agent notification preferences by @abhinavxd in #607
- remove icon from new contact button by @abhinavxd in #610
- add Kathmandu timezone option by @abhinavxd in #615
- add filters, pagination and richer results to conversation search by @abhinavxd in #612
- Custom AI tools to copilot and generate reply with human approval by @abhinavxd in #620
- show idle agents as online instead of away by @abhinavxd in #621
- speed up builds and load app layouts on demand by @abhinavxd in #622
- Widget improvements by @abhinavxd in #619
- fix mobile layouts by @abhinavxd in #618
- move the reply box minimize line to the bottom of its button by @abhinavxd in #637
- fix content spilling out of panels and dialogs when zoomed in or out by @abhinavxd in #642
- stop uploaded SVG files from running scripts by @abhinavxd in #641
New Contributors
- @eozsahin1993 made their first contribution in #539
- @LaQuay made their first contribution in #549
- @malpou made their first contribution in #544
- @amb1 made their first contribution in #534
- @fredrikblau made their first contribution in #475
- @Gumbraise made their first contribution in #312
- @pmslava made their first contribution in #578
- @anvme made their first contribution in #601
- @IzzaldinSamir made their first contribution in #452
Full Changelog: v2.8.0...v2.9.0-rc.8