export const OBSERVER_STATUSES = ["open", "active", "waiting", "blocked", "done", "cancelled", "superseded"] as const; export type ObserverStatus = (typeof OBSERVER_STATUSES)[number]; export type ThreadStatus = ObserverStatus | "dismissed"; export interface Thread { id: string; canonicalRequest: string; status: ThreadStatus; createdAt: number; updatedAt: number; } export interface ObservedThread { id?: string; canonicalRequest: string; status: ObserverStatus; } export interface ObserverOutput { existing: ObservedThread[]; additions: ObservedThread[]; } export interface UserMessageRecord { messageId: string; text: string; at: number; } export interface ObservationFailure { kind: "observer_failure"; messageIds: string[]; error: string; at: number; } export type CommitmentEvent = | { kind: "user_message"; messageId: string; text: string; at: number } | { kind: "observation"; reconciled: string[]; output: ObserverOutput; at: number } | { kind: "user_action"; threadId: string; action: "accept" | "dismiss" | "reopen" | "drop"; reason?: string; at: number } | { kind: "correction"; threadId: string; canonicalRequest?: string; status?: ThreadStatus; at: number } | ObservationFailure; export interface Registry { threads: Thread[]; unreconciled: UserMessageRecord[]; created: number; } export interface ObserverPacket { threads: Thread[]; userMessages: UserMessageRecord[]; completedAssistantTurn: string; }