Luigit
repositories / will

will

owned by admin

src/shared/api.ts

Raw
import 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,
}