Skip to content
LVIS AI
EN|KO

Host · Chat

Message Queue & TODO Panels

Two panels stacked directly above the composer — SessionTodoPanel (session TODOs) and MessageQueuePanel (pending external signals). Both are rendered by ChatComposerDock, and each draws nothing when it has no items.

rendered by ChatComposerDock
MessageQueuePanel + SessionTodoPanel
hidden when empty
Message queue and TODO list floating above the chat body

MessageQueuePanel

When an external signal arrives (a new Outlook email, a meeting ending, 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 }).
  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.