The collapsed session block computed from the conversation's stamped detail rows.
Optional session-row enrichment (agent name / status / close reason); null degrades gracefully.
Emitted with the MJ: AI Agent Sessions.ID when the user asks to open the session review.
Display name of the signed-in user for the last-turn preview (matches the chat's sender names).
Whether the chip represents an error close (drives the error chip styling).
Whether the chip represents a live session (drives the live chip styling).
Whether the start and end fall on the same calendar day (drives the end-time format).
The status chip label, or null to hide the chip entirely:
Error / Explicit / Janitor / Shutdown)
humanized, falling back to "Closed" for legacy rows without one;Card title: "Realtime session ·
Emits OpenRequested for the whole-card / Open-button click.
Optionalevent: MouseEvent
The ONE timeline element a realtime session collapses to in the standard conversation message list (see"), its time range, a status / close-reason chip when
known, the visible-turn count, and a one-line preview of the last turn.
BuildConversationTimeline): a visually distinct card at the session's chronological position carrying the session identity (broadcast icon + "Realtime session ·The card's Open button emits OpenRequested with the session id; the message list bubbles it up so the chat area can host the existing SESSION REVIEW overlay via
ConversationChatAreaComponent.OpenRealtimeSessionReview(Resume / Close live inside that overlay, unchanged).Rendered DYNAMICALLY by
MessageListComponent(samecreateComponentpath the message items use) — standalone by design, no module declaration needed.