v9
UCS Operator - changelog
All notable changes to this project will be documented in this file.
[9.36.2] - 2026-09-02
🐛 Bug Fixes
- (email) Do not close 'new email' modal when user clicks outside
[9.36.1] - 2026-09-02
🐛 Bug Fixes
- (dial) Add localization to device loading error messages
[9.36.0] - 2026-09-02
🚀 Features
- (email) Style reply surface only for reply/forward drafts
- Show the purple reply surface and the "Reply draft" / "Forward draft" header only when the editor is actually editing a reply or forward. Brand-new outbound emails now use the neutral surface and omit the draft-kind label, since there is no original email to relate to.
🐛 Bug Fixes
- (topmenu) Improve dial loading and error states
[9.35.0] - 2026-08-31
🚀 Features
- (email) Allow agents to self-assign unassigned emails
- Add an "Assign to me" button on the agent row of EmailInformation that is visible to non-supervisor users when no agent is assigned. Clicking it patches agent_id via email.edit with the current agent's id, reusing the existing edit-lock rules.
- (email) Gate sent mail reply behind enableSentMailReply flag
- (email) Open original email when reply draft exists
🚜 Refactor
- (config) Extract feature flags into featureFlagsParser
[9.34.3] - 2026-08-31
🐛 Bug Fixes
- (connector) Prevent refCountUnsubscribe from tearing down legacy subscriptions
- Legacy subscribe() and refCountSubscribe() tracked subscriptions in separate structures, so a refCountUnsubscribe() call that dropped a topic's refcount to zero would send frontend.unsubscribe to the backend even when the topic was also subscribed via the legacy path (e.g. the provisioning saga at app start), silently killing events the app still expects to receive.
Pin the refcount of legacy-subscribed topics to +Infinity and share a private sendSubscribe() helper between both paths, so refCountUnsubscribe can never bring such topics to zero while refCountSubscribe no longer inflates its own counts through the public subscribe().
[9.34.2] - 2026-08-23
🐛 Bug Fixes
- (login) Allow user team to be null
[9.34.1] - 2026-08-23
🐛 Bug Fixes
- (device) Make nextDeviceSync default true even if ff section not defined
[9.34.0] - 2026-08-23
🚀 Features
- Added INSOFT kiosk deploy directory (for BeFree)
- (core) Make nextDeviceSync ff true by default
[9.33.0] - 2026-08-21
🚀 Features
- Mirror tanstack device query into Redux behind nextDeviceSync
- Adds a NextDeviceSync bridge that copies the paired device from the tanstack useDevice query into the legacy app.device slice while the ff.nextDeviceSync flag is on. Full device shape is preserved (matches UM_LOGIN_SUCCESS), so uPhone and other legacy selectors keep working and now react to device changes coming from other windows via user.mobility.login/logout events.
🐛 Bug Fixes
- (uphone) Scope unattended bridge ring to role's dispatch
- Previously the queue ring fired for every unattended bridge, alerting agents about calls in dispatching workspaces they do not manage. Match bridge dispatch_id against the current role's dispatch_id so only the relevant agents are notified.
- (integration) Do not skip onIdentify callback when nextDeviceSync is enabled
- (device) Make sure that both id and deprecated device_id properties are always present on device object in store
[9.32.0] - 2026-08-20
🚀 Features
- (email) Allow replying to sent emails
- Add reply, reply all and forward buttons to outbound sent emails so an agent can continue the thread without opening the original inbound message. The controls are hidden once the sent email itself has been replied to, and each button is disabled when the parent (reply_to) email already has a reply assigned, preventing a second reply from displacing the existing one.
Introduce a reusable TanStack Query options factory for loading emails by id and use it from both SentReplyButton and EmbeddedEmailView. Also expose reply_to on the email parser so the parent lookup has the id it needs.
- (uphone) Ring for unattended bridge calls when agent is ready
- Play a distinct ring tone (option 8) while there are unattended dispatching bridge calls in the queue, but only when the agent's status is ready so busy or paused agents are not interrupted.
🐛 Bug Fixes
- (email) Temporary hide sent email reply buttons