/** * Wire and storage types shared by service, agent, and web. * These are the serialization contracts snapshot tests pin. */ /** Provenance of executing code vs edited source (spec: audit distinguishes both). */ export interface ReleaseProvenance { revision?: string | undefined agentDigest?: string | undefined worktreeHead?: string | undefined worktreeDirty?: boolean | undefined } export interface AuditEvent { id: string ts: string kind: string sessionId?: string | undefined provenance?: ReleaseProvenance payload: unknown } /** Stored audit row as returned by timeline/recall APIs (payload parsed). */ export interface AuditRow { seq: number id: string ts: string kind: string sessionId?: string | undefined provenance?: ReleaseProvenance payload: unknown } export type ChatDirection = 'in' | 'out' export type TriggerReason = 'mention' | 'reply' | 'command' | 'none' export interface MediaRef { digest: string type: string fileName?: string size: number telegramFileId?: string } /** Inbound or outbound chat message as ingested by the service. */ export interface ChatMessageIn { id: string chatId: number messageId: number direction: ChatDirection ts: string updateId?: number | undefined senderId?: string | undefined senderName?: string | undefined replyToMessageId?: number | undefined triggerReason?: TriggerReason | undefined text?: string | undefined media?: MediaRef[] | undefined } /** Chat row served to the UI; hidden messages are tombstoned. */ export interface ChatRow { id: string chatId: number messageId: number direction: ChatDirection ts: string senderId?: string | undefined senderName?: string | undefined replyToMessageId?: number | undefined triggerReason?: TriggerReason | undefined text?: string | undefined media?: MediaRef[] | undefined hidden: boolean } export interface TombstoneIn { messageId: number requesterId: string authority: 'sender' | 'oliver' reason?: string | undefined ts: string } export type DeploymentEventKind = | 'build' | 'deploy' | 'promote' | 'startup-failed' | 'probation-failed' | 'rollback' | 'reconcile' export interface DeploymentEventMirror { id: string ts: string kind: DeploymentEventKind revision?: string | undefined detail: unknown } export interface MediaMeta { digest: string size: number type: string originalName?: string | undefined telegramFileId?: string | undefined createdAt: string } export interface AnalysisRecord { digest: string capability: string model: string schemaVersion: number result: unknown usage?: unknown | undefined createdAt: string } export interface JobRecord { kind: string status: 'running' | 'done' | 'failed' startedAt: string finishedAt?: string | undefined detail?: unknown | undefined }