import type { HarnessChatEventEnvelope, HarnessChatSessionStatus, HarnessChatTurnLifecycle, HarnessChatTurnRecord, } from "./contracts/interactive-chat.ts"; import type { HarnessTranscriptMessage } from "./contracts/transcript.ts"; export interface HarnessChatSessionSnapshot { session: HarnessChatSessionStatus; transcript: readonly HarnessTranscriptMessage[]; } export interface HarnessChatEventListOptions { sessionId?: string; afterSequence?: number; limit?: number; } export interface HarnessChatTurnListOptions { sessionId?: string; status?: HarnessChatTurnLifecycle; } export type HarnessMaybePromise = Value | Promise; export interface HarnessChatSessionTurnEventMutation { session: HarnessChatSessionSnapshot; event: HarnessChatEventEnvelope; turn: HarnessChatTurnRecord; createTurn?: boolean; } export interface HarnessChatSessionStore { saveSession(snapshot: HarnessChatSessionSnapshot): HarnessMaybePromise; getSession( sessionId: string, ): HarnessMaybePromise; listSessions(): HarnessMaybePromise; saveSessionAndAppendEvent( snapshot: HarnessChatSessionSnapshot, event: HarnessChatEventEnvelope, ): HarnessMaybePromise; saveSessionTurnAndAppendEvent( mutation: HarnessChatSessionTurnEventMutation, ): HarnessMaybePromise; saveTurn(turn: HarnessChatTurnRecord): HarnessMaybePromise; getTurn( sessionId: string, turnId: string, ): HarnessMaybePromise; listTurns( options?: HarnessChatTurnListOptions, ): HarnessMaybePromise; appendEvent(event: HarnessChatEventEnvelope): HarnessMaybePromise; listEvents( options?: HarnessChatEventListOptions, ): HarnessMaybePromise; latestSequence(): HarnessMaybePromise; close?(): HarnessMaybePromise; }