Member Junction
    Preparing search index...

    SINGLE SOURCE of merged live-session state, owned by the overlay shell (RealtimeSessionOverlayComponent) and passed via @Input() to BOTH the session thread and the activity rail — so the per-CallID card bookkeeping and subscription logic exists exactly once.

    Merges FOUR reactive streams from RealtimeSessionService:

    • Captions$ — growing user/assistant caption list → appended to Items.
    • DelegationProgress$ — first event per CallID inserts a working card at the thread tail; later events REPLACE the card immutably (new object + new arrays) so change detection always fires.
    • DelegationResult$ — flips the card to Done/Failed with the real result text.
    • DelegationNarration$ — the EPHEMERAL spoken progress note (latest only, never accumulated), cleared when no delegation is running anymore.

    Consumers subscribe to Changed$ and markForCheck(); all exposed collections are replaced (never mutated) on change.

    Index

    Constructors

    Properties

    ActiveCallId: string | null = null

    CallID of the most recently started, still-running delegation (anchors the live note).

    AgentName: string = 'Sage'

    Display name used for new delegation cards (set by the overlay's AgentName input).

    All delegation cards of the session, NEWEST first — the activity rail's list.

    Changed$: Subject<void> = ...

    Emits after every state change so views can mark themselves for check.

    Items: RealtimeThreadItem[] = []

    The merged, chronological thread (captions + delegation cards), oldest first.

    Narration: string | null = null

    Latest ephemeral narration text, or null when none should be shown.

    Accessors

    Methods

    • REVIEW→LIVE continuation path: KEEPS the historical thread (and its delegation cards in the rail) and appends a "Resumed live session" RealtimeThreadDividerItem, then resets only the LIVE-merge bookkeeping so the new session's captions and cards append cleanly AFTER the divider:

      • placedCaptionCount → 0 (the fresh session's caption stream starts empty, so the start-of-session [] emission is a no-op rather than a reset);
      • the ephemeral narration is dropped (nothing is running yet);
      • historical cards stay indexed by CallID — new live CallIDs are unique, so live cards insert alongside them and ActiveCallId recomputes normally.

      Parameters

      • at: Date = ...

      Returns void