Skip to content
LVIS AI
EN|KO

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.

ChatView.tsx:1417 MessageQueuePanel
ChatView.tsx:1416 SessionTodoPanel
Message queue and TODO list floating above the chat body

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

  1. A plugin (e.g. ms-graph) calls hostApi.emitEvent('email.new', payload).
  2. The subscribed work-assistant evaluates it via a detector in onEvent('email.new', …).
  3. When the detector decides on a surface, it calls hostApi.triggerConversation({ …spec }) or showOverlay({ …input }).
  4. The host UI exposes it via the MessageQueuePanel or a card.
  5. Every flow appends one line to ~/.lvis/audit/<YYYY-MM-DD>.jsonl.
There's no API like enqueueMessage
There is no 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.