/** * Local-only telemetry — SQLite-backed event tracking for observability. * * Tracks events like doom-loop detections, undo operations, fallback * transitions, background task outcomes, loop outcomes, and audit findings. * * All data stays local. Opt-in via config. Batched writes for performance. * Configurable retention window for automatic cleanup. */ import type { Logger, TelemetryConfig } from '../types'; export type TelemetryEventType = 'doom_loop' | 'undo' | 'fallback' | 'background_task' | 'loop_outcome' | 'audit_finding' | 'budget_warning' | 'budget_violation' | 'recovery' | 'shell_blocked' | 'intent_routed' | 'context_injected' | 'custom'; export interface TelemetryEvent { id?: number; type: TelemetryEventType; sessionId?: string; projectId?: string; timestamp: number; data: Record; } export interface TelemetryStats { totalEvents: number; byType: Record; oldestEvent?: number; newestEvent?: number; } export interface TelemetryQueryOptions { type?: TelemetryEventType; sessionId?: string; projectId?: string; since?: number; until?: number; limit?: number; } type Database = { run: (sql: string, ...params: unknown[]) => void; prepare: (sql: string) => { run: (...params: unknown[]) => void; all: (...params: unknown[]) => unknown[]; get: (...params: unknown[]) => unknown; }; }; export declare class TelemetryCollector { private logger; private config; private db; private buffer; private flushTimer; private initialized; constructor(logger: Logger, config?: TelemetryConfig); /** * Whether telemetry is enabled. */ isEnabled(): boolean; /** * Initialize the telemetry database. */ init(db: Database): void; /** * Record a telemetry event. */ record(event: Omit & { timestamp?: number; }): void; /** * Flush buffered events to the database. */ flush(): void; /** * Query telemetry events. */ query(options?: TelemetryQueryOptions): TelemetryEvent[]; /** * Get aggregate statistics. */ getStats(projectId?: string): TelemetryStats; /** * Run retention cleanup — removes events older than the configured retention window. */ cleanup(): number; /** * Shutdown — flush remaining events and stop the timer. */ close(): void; private startFlushTimer; } export {}; //# sourceMappingURL=telemetry.d.ts.map