Shared RealtimeProvider opens ONE dashboard-wide IIOS message socket reused by
the messenger tab and the new NotificationCenter. CrmMessagingAdapter gains
setFocus (drives presence/push suppression) and subscribeActivity (joins all
of the caller's threads, fans out incoming messages). NotificationCenter shows
a clickable toast on new messages when you're not on the messenger tab and
deep-links to the conversation. Pulls @insignia/iios-messaging-ui@0.1.7.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Topbar search box → debounced crm.search → dropdown of hits (chat/mail, highlighted
snippet). Clicking a hit switches to the right tab and focuses the exact thread:
mail → Inbox, chat → Messenger (via the SDK's new focusThreadId, 0.1.6). Snippet HTML
is escaped except the <em> highlight. Demo mode searches an in-memory set.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Delete the now-dead pre-SDK stack (messenger/inbox/mail components + their
*-api libs + messenger-socket) — both tabs render the @insignia/iios-messaging-ui
SDK. Remove the redundant <PageHead> from the messenger/inbox SDK wrappers (the
Topbar already shows the title); the SDK itself renders no header.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
CrmMessagingAdapter is now hybrid: BFF for the conversation list, thread
creation, and directory (server-side tenancy); the IIOS MessageSocket
(delegated crm.messenger.realtime token) for everything live — history+join,
send, typing, read receipts, and reaction annotations. Falls back to the 4s
poll only when no socket is available.
- messenger-sdk useRealtimeSocket() opens the MessageSocket from the BFF token
and passes it to the adapter (adapter rebuilds live once connected)
- socket path maps senderId (userId space) → actorId so 'mine'/seen work
consistently, killing the actor-vs-user ambiguity in the poll fallback
- reaction annotations tracked per message and re-emitted as full sets
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The messenger tab now renders the shared SDK's <Messenger>, not the bespoke
in-CRM implementation. The CRM only supplies transport + theme:
- CrmMessagingAdapter implements the SDK's MessagingAdapter over the be-crm
data door (crm.messenger.conversation.list/open, history, send, directory);
live updates via a 4s poll for now (socket realtime is a follow-up that
reuses messenger-socket.tsx). Tenancy/auth stay server-side.
- messenger-sdk.tsx wires MessagingProvider + adapter (live = CrmMessagingAdapter,
demo = the SDK MockAdapter), themed by mapping --miu-* tokens to the CRM
design system.
- dashboard renders <MessengerSdk/>; the old messenger.tsx is left in place
for rollback and will be deleted once this is proven live.
NOTE: the SDK is installed from a local tarball (file:) for verification since
it isn't published yet. For deploy: publish @insignia/iios-messaging-ui to the
registry and change the dep to a version range. transpilePackages covers ESM.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>