import type { ChatMessage, ProviderId, ReasoningPreference } from "../../types.js"; import type { SessionPlan } from "../../store/plan.js"; import type { PersistedContextUsage } from "../../store/history.js"; import type { PreviousTurnSignal } from "../../agent/continue-orient.js"; import type { TranscriptItem } from "./transcript-item.js"; export interface SaveSessionOptions { readonly sessionId?: string | undefined; readonly writerGeneration?: string | undefined; readonly revision?: number | undefined; readonly name?: string | undefined; readonly transcript?: readonly TranscriptItem[] | undefined; readonly contextUsage?: PersistedContextUsage | undefined; readonly previousTurn?: PreviousTurnSignal | null | undefined; readonly provider?: ProviderId | undefined; readonly model?: string | undefined; readonly thinking?: ReasoningPreference | undefined; } export interface PersistencePort { saveSession(messages: readonly ChatMessage[], options?: SaveSessionOptions): Promise; loadPlan(sessionId: string): Promise; savePlan(plan: SessionPlan): Promise; mutatePlan?(sessionId: string, reducer: (draft: SessionPlan) => boolean | void): Promise<{ ok: boolean; plan?: SessionPlan | undefined; }>; deletePlan(sessionId: string): Promise; }