You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Upgrading
Everything new is optional and gated on the backend. The notifications
bell, read/unread controls, knowledge-base search, customer presence and
the agent status route appear only when the backend shares the matching
prop or defines the matching route (ADR 2026-11-05-agent-panel-data). A
backend that sends none of them renders the agent panel as 0.12.8 did. The
escalated backends send them from their releases of 2026-11-05; those
releases add tables (ticket_reads, customer_presence, notifications, agent statuses) and need their migrations run.
Agent status posts to escalated.agent.status first. The Online /
Away / Offline menu used to post only to escalated.admin.chat.status; it
now prefers the agent route and falls back to the admin one. On the
backends whose live-chat routing reads the agent's own status, an agent
must set themselves Online to receive chats.
The @mention picker follows the host's route. When the shared route
list has escalated.admin.agents.search it requests that URL instead of
the hard-coded /support/admin/agents/search. A host that proxied the old
path for a non-/support prefix can drop the proxy.
Admin embedding is off by default.layoutScope defaults to ['customer'], so layout wraps the customer pages exactly as before.
Listing 'admin' (and optionally 'agent'), the backend's escalated.embed flag, <EscalatedNavigation /> and the iframe connector
(@escalated-dev/escalated/embed, a new package export) only matter once a
host opts in; see docs/embedding-admin.md.
The widget bundle (dist/widget/escalated-widget.js) is unchanged apart
from its version banner: built from this release and from 0.12.8 with the
locked dependencies, the two are byte-identical before the version bump.
Fixed
The @mention picker in the reply, note and chat composers now searches the
host's escalated.admin.agents.search route when the host defines it, so
backends whose routes are not under /support (the /escalated prefix of
the NestJS, Go and Spring packages, or a custom prefix) are reached. Without
the route it still requests /support/admin/agents/search.
Added
Embedding the admin in your own admin panel (optional). Off unless you
opt in; with only layout set nothing changes. New layoutScope plugin
option (default ['customer']): list 'admin' (and optionally 'agent')
and those pages render inside your layout, the admin chrome-free (no
Escalated sidebar or top bar). layouts registers named layouts a backend
can pick per page. Pages honour the backend's escalated.embed flag
(chrome-free under any host prefix). <EscalatedNavigation />, useEscalatedNavigation() and escalatedNavIcons render the escalated.navigation menu in your sidebar. iframe mode: an allow-listed postMessage bridge (height, theme, navigation) and a host helper, connectEscalatedFrame, from @escalated-dev/escalated/embed. See
docs/embedding-admin.md and ADR 2026-11-05-embeddable-admin.
Knowledge-base search on the ticket page. With the host's escalated.agent.kb.search route, Related in the customer panel gets an
article search (open in a new tab, or insert the link into the reply) and
the composer toolbar gets Insert article link. Internal articles are shown
to agents but never inserted. Hidden without the route or with the
knowledge base off. See ADR 2026-11-05-agent-panel-data.
Notifications bell. When the backend shares escalated.notifications
({ unread_count }) and has escalated.agent.notifications.index, the top
bar shows a bell with the unread count and a popover with the feed (newest
first, Show more, Unread only, Mark all read). Clicking an item marks it
read and opens its ticket. notification.created on the agent's channel
updates it live. Hosts without the prop or route get no bell. See ADR
2026-11-05-agent-panel-data.
Mark tickets read and unread. With the host's escalated.agent.tickets.read / .unread routes, each inbox row gets a
menu with Mark as read / Mark as unread (Shift U for the focused row), the
bulk bar gets Mark read / Mark unread (mark_read / mark_unread on the
bulk route), and the ticket's overflow menu gets Mark as unread. The change
shows at once and rolls back if refused. The rail marks queues with unread
tickets from the optional inbox.unread. Hosts without the routes see no
new controls. See ADR 2026-11-05-agent-panel-data.
Agents set their own status through the agent route. The Online / Away /
Offline menu posts to escalated.agent.status when the host has it, and
falls back to the admin live-chat route escalated.admin.chat.status
otherwise. It offers only the values in the optional shared escalated.agent_statuses, keeps the agent_status the backend answers
with, and goes back to the previous status when the backend refuses the
change. See ADR 2026-11-05-agent-panel-data.
Customer presence in the ticket's customer panel. "Online now" when the
ticket's optional requester_online is true (or the chat is live), else
"Last seen ..." from the optional requester_last_seen_at. Without either
field nothing is shown. See ADR 2026-11-05-agent-panel-data.
Changed
The README's Layout Integration section now says what layout has always
done: it wraps customer pages; admin and agent pages keep their own chrome
unless listed in layoutScope.
The API tokens screen posts to the embedded admin's base URL when the admin
is embedded (unchanged otherwise).