The currently active conversation ID shared between overlay and workspace.
Deep-link navigation requests.
"Expand the overlay" requests from anywhere in the app — typically a dashboard's
"Refine with AI" button that wants to pop the chat after setting fresh AppContext.
The mounted overlay subscribes and calls its own Expand() in response. Decoupled
this way because the overlay component reference isn't reachable from arbitrary
callers, and we don't want everyone to take a hard dep on the overlay class.
Whether the overlay surface is currently active (expanded).
Events emitted when switching between overlay and workspace.
Whether the full workspace surface is currently active (visible).
Navigate to a specific conversation via deep link.
Notify that the overlay is now active (or inactive).
Notify that the workspace is now active (or inactive).
Ask the overlay to expand. Idempotent if already expanded.
Set the active conversation from the overlay. The workspace picks up the change
automatically via the shared ActiveConversationID$ stream.
Set the active conversation from the workspace. The overlay picks up the change
automatically via the shared ActiveConversationID$ stream.
true when the workspace is not active but there's an active conversation —
i.e., the overlay should resume that conversation when expanded.
Request switching from workspace to overlay. The workspace can stay open, but the overlay resumes the conversation.
Request switching from overlay to full workspace. The overlay should minimize; the workspace should open with the same conversation.
Shared state between conversation surfaces. Pure observable hub — knows nothing about any specific UI framework. Consumers subscribe to the streams they care about.
Usually accessed via
ConversationsRuntime.Instance.Bridge.