import { type CompressMethod } from "./gc-compress.js"; import { type ProgressOutput } from "./progress-reporter.js"; export interface GcCommandFlags { apply?: boolean; json?: boolean; agentDir?: string; blobs?: boolean; archive?: boolean; wal?: boolean; stale?: boolean; compress?: boolean; strip?: boolean; coldArchiveAfterDays?: number; retainNewestGlobal?: number; retainNewestPerCwd?: number; staleRetainNewest?: number; staleRetainDays?: number; compressAfterDays?: number; stripAfterDays?: number; } export interface GcCommandArgs { flags: GcCommandFlags; /** Where to draw transient per-step progress bars; drawn only on a TTY, none when omitted. */ progress?: ProgressOutput; } export interface BlobGcResult { referenced: number; candidates: number; wouldDelete: number; deleted: number; bytes: number; errors: string[]; } export interface ArchiveGcResult { scanned: number; skippedActive: number; keptNewestGlobal: number; keptNewestPerCwd: number; wouldArchive: number; archived: number; historyRowsDeleted: number; statsRowsDeleted: number; ftsRebuilt: boolean; /** Session staging temps past the write grace, left by a killed or crashed writer. */ wouldDeleteTemps: number; deletedTemps: number; tempBytes: number; errors: string[]; } export interface WalCheckpointResult { dbPath: string; walBytes: number; wouldCheckpoint: boolean; checkpointed: boolean; busy: number; log: number; checkpointedFrames: number; } export interface WalGcResult { databases: WalCheckpointResult[]; walBytes: number; wouldCheckpoint: boolean; checkpointed: boolean; } export interface StaleGcResult { /** Custom-session-file markers whose recorded transcript is gone. */ danglingMarkers: number; /** Terminal breadcrumbs whose session file is gone. */ staleBreadcrumbs: number; /** Debug report bundles beyond the retention window. */ expiredReports: number; /** Collab guest replicas beyond the retention window. */ expiredReplicas: number; wouldDelete: number; deleted: number; bytes: number; errors: string[]; } export interface CompressGcResult { /** False when the sessions' filesystem has no supported transparent compression; nothing was scanned. */ supported: boolean; /** The filesystem's compression method when supported. */ method?: CompressMethod; /** * With `--apply`, why a probe file showed the filesystem does not actually * compress (e.g. macOS 27 `ditto`); set means no session was scanned. */ probeFailure?: string; scanned: number; /** Idle sessions with files to compress that a running process still owns. */ skippedLive: number; /** Sessions with at least one file still stored uncompressed. */ sessions: number; wouldCompress: number; compressed: number; /** Logical bytes of the files selected for compression. */ bytes: number; /** Bytes those files allocated on disk before compression. */ allocatedBefore: number; /** Bytes the selected files allocate on disk afterwards (`--apply` only). */ allocatedAfter: number; /** Scratch directories a killed run left behind; removed with `--apply`. */ leftoverScratchDirs: number; errors: string[]; } export interface StripGcResult { /** Top-level session transcripts found; archived transcripts are scanned as well. */ scanned: number; /** Idle sessions (or archived subagent transcripts) with replay data that a running process still owns. */ skippedLive: number; /** Transcripts with replay data to strip: session, subagent, and archived. */ wouldStrip: number; stripped: number; /** Session records that carry replay data. */ records: number; /** JSONL bytes the replay data occupies; uncompressed for archived transcripts. */ bytes: number; errors: string[]; } export interface GcResult { agentDir: string; apply: boolean; stale?: StaleGcResult; strip?: StripGcResult; blobs?: BlobGcResult; archive?: ArchiveGcResult; compress?: CompressGcResult; wal?: WalGcResult; lockPath: string; } export declare function collectGcErrors(result: GcResult): string[]; export declare function runGcCommand(args: GcCommandArgs): Promise;