repositories / will
will
owned by admin
src/shared/api.ts
Rawimport type {
AnalysisRecord,
AuditEvent,
ChatDirection,
ChatMessageIn,
DeploymentEventMirror,
MediaMeta,
MediaRef,
ReleaseProvenance,
TombstoneIn,
TriggerReason,
} from './events.ts'
/** Public timeline row; archived rows have no seq and are flagged cold. */
export interface TimelineRow {
seq?: number | undefined
id: string
ts: string
kind: string
sessionId?: string | undefined
provenance?: ReleaseProvenance | undefined
payload: unknown
archived: boolean
}
export interface ChatViewRow {
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
archived: boolean
}
export interface IngestResult {
accepted: number
duplicates: number
insertedSeqs: number[]
}
export type RecallKind = 'audit' | 'chat' | 'deploy' | 'analysis'
export interface RecallQuery {
kind: RecallKind
since?: string
until?: string
q?: string
digest?: string
limit?: number
}
export interface RecallResponse {
rows: unknown[]
cold: boolean
}
export interface ServiceStatus {
ready: boolean
schemaVersion: number
lastAuditSeq: number
counts: { audit: number; chat: number; deployments: number; media: number }
dbSizeBytes: number
storage: { freeBytes: number; totalBytes: number; freePct: number }
storageState: 'ok' | 'warn' | 'stop'
lastQuickCheck?: string
}
/** Internal maintenance op names (typed API surface, no arbitrary SQL). */
export const MAINTENANCE_OPS = ['quick_check', 'archive_cycle', 'vacuum', 'reconcile'] as const
export type MaintenanceOp = (typeof MAINTENANCE_OPS)[number]
export interface ArchiveCycleResult {
exportedAudit: number
exportedChat: number
segments: number
}
/* ---- wire helpers shared by service routes and the agent client ---- */
export type {
AnalysisRecord,
AuditEvent,
ChatMessageIn,
DeploymentEventMirror,
MediaMeta,
TombstoneIn,
}