Skip to content

v0.12.9

Choose a tag to compare

@mpge mpge released this 06 Nov 01:29
ce7f4de

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).