export type AgentTraceSource = "claude" | "codex" | "pi" | "poe-code"; export interface AgentTraceFileSystem { readFile(path: string, encoding: BufferEncoding): Promise; writeFile(path: string, data: string, options?: { encoding?: BufferEncoding; }): Promise; mkdir(path: string, options?: { recursive?: boolean; }): Promise; readdir(path: string): Promise; stat(path: string): Promise<{ isFile(): boolean; isDirectory(): boolean; mtime?: Date; size?: number; }>; } export interface SqliteTraceDatabase { all(sql: string, params: unknown[]): unknown[] | Promise; close(): void | Promise; } export type SqliteTraceDatabaseFactory = (path: string) => Promise; export interface TraceDiscoverOptions { cwd?: string; homeDir: string; since?: Date; allWorkspaces?: boolean; fs: AgentTraceFileSystem; sqlite?: SqliteTraceDatabaseFactory; } export type TraceReadOptions = Pick; export interface TraceReference { source: AgentTraceSource; id: string; path?: string; cwd?: string; updatedAt?: Date; title?: string; agentType?: string; spawnDepth?: number; metadata?: Record; } export interface NormalizedTrace { source: AgentTraceSource; id: string; path?: string; cwd?: string; title?: string; model?: string; contextWindow?: number; usage?: TraceUsage; createdAt?: Date; updatedAt?: Date; children?: TraceReference[]; turns: NormalizedTraceTurn[]; } export interface TraceUsage { inputTokens: number; outputTokens: number; cachedTokens?: number; cacheCreationTokens?: number; contextTokens: number; source: "reported"; } export interface NormalizedTraceTurn { id?: string; role: "human" | "assistant" | "tool" | "system"; text: string; timestamp?: Date; sourceKind?: string; toolName?: string; mcpServer?: string; skillName?: string; } export interface HumanPromptRecord { traceId: string; source: AgentTraceSource; cwd?: string; title?: string; timestamp?: string; text: string; } export interface CollectHumanPromptsOptions { sources?: AgentTraceSource[]; cwd?: string; homeDir?: string; since?: Date; limit?: number; allWorkspaces?: boolean; fs?: AgentTraceFileSystem; sqlite?: SqliteTraceDatabaseFactory; indexDir?: string; } export interface CollectHumanPromptsResult { records: HumanPromptRecord[]; traceCount: number; } export interface TraceScanOptions { homeDir: string; fs: AgentTraceFileSystem; } export interface TraceScanDirectory { directory: string; files: string[]; } export interface TraceHeadMetadata { id: string; cwd?: string; title?: string; updatedAt?: Date; metadata?: Record; } export interface TraceReader { id: AgentTraceSource; defaultRoots(homeDir: string): string[]; discover(options: TraceDiscoverOptions): Promise; read(reference: TraceReference, options: TraceReadOptions): Promise; scan?(options: TraceScanOptions): AsyncIterable; readHeadMetadata?(head: string, filePath: string): TraceHeadMetadata | undefined; }