Host · Chat
Message Queue & TODO Panels
Two panels always shown beside the ChatView body — MessageQueuePanel (pending external signals) + SessionTodoPanel (session TODOs). Both are React components rendered from ChatView.tsx, with data managed by workflowApi.
MessageQueuePanel
When an external signal arrives (a new Outlook email, a meeting ending, an Agent Hub message, etc.), it stacks up as a card in the panel without blocking the ChatView body. Implementation: src/ui/renderer/components/MessageQueuePanel.tsx. Clicking a card switches the chat body to an ask-user question card or a tool call.
SessionTodoPanel
Session-scoped TODOs. Items added directly by the user and items created by the agent from context share the same list. Implementation: src/ui/renderer/components/SessionTodoPanel.tsx. Each item is shown with a source label.
How a signal reaches the panel
- A plugin (e.g. ms-graph) calls
hostApi.emitEvent('email.new', payload). - The subscribed work-assistant evaluates it via a detector in
onEvent('email.new', …). - When the detector decides on a surface, it calls
hostApi.triggerConversation({ …spec })orshowOverlay({ …input }). - The host UI exposes it via the MessageQueuePanel or a card.
- Every flow appends one line to
~/.lvis/audit/<YYYY-MM-DD>.jsonl.
hostApi.enqueueMessage on the SDK surface. The standard path for putting an item on the panel is emit an event → host UI detects it → render, or triggerConversation / showOverlay.