Member Junction
    Preparing search index...

    The MINIMAL structural shape of a transcript turn this player needs — exactly the fields it reads for the click-to-seek transcript and the playhead-sync highlight. Deliberately NOT the full MJConversationDetailEntity: that keeps the player reusable by ANY caller that can supply these fields (the in-conversation session-review overlay passes its lighter RealtimeSessionReviewTurn; the Realtime Recordings dashboard passes full MJConversationDetailEntity rows — both satisfy this widened shape structurally).

    Field unions/nullability are intentionally WIDER than the generated entity so an MJConversationDetailEntity[] remains assignable here.

    interface EvidencePlaybackTurn {
        __mj_CreatedAt: Date | null;
        ID: string;
        Message: string | null;
        Role: string;
        UtteranceEndMs?: number | null;
        UtteranceStartMs?: number | null;
    }
    Index

    Properties

    __mj_CreatedAt: Date | null

    Persisted turn time — fallback offset origin when the turn has no UtteranceStartMs.

    ID: string

    Stable identity for the @for track.

    Message: string | null

    The transcript text shown on the turn.

    Role: string

    Speaker. The player only distinguishes 'User' (human) from everything else (the agent).

    UtteranceEndMs?: number | null

    Precise media-relative end (ms from recording t0). null/absent → derived from the next turn / duration.

    UtteranceStartMs?: number | null

    Precise media-relative start (ms from recording t0). null/absent when the driver supplied no timing — the player falls back to (__mj_CreatedAtRecordingStartedAt).