github abhinavxd/libredesk v2.9.0-rc.8

pre-release6 hours ago

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.
usage_libredesk
  • 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.8 Docker tag. The latest tag 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

Full Changelog: v2.8.0...v2.9.0-rc.8

Don't miss a new libredesk release

NewReleases is sending notifications on new releases.