Member Junction
    Preparing search index...
    SessionLifecycleEvent:
        | { channelKinds: string[]; kind: "session-started"; sessionId: string }
        | {
            channelKind: string;
            kind: "session-channel";
            sessionId: string;
            state: SessionChannelState;
        }
        | { kind: "session-ended"; reason: SessionEndReason; sessionId: string }

    One lifecycle event surfaced by an ISessionsAdapter.

    Mirrors MJ: AI Agent Sessions lifecycle at a deliberately generic level — no voice/transcript/model fields — so future channel modalities (video, screen-share, code editor, etc.) emit the same shape.