export interface CompletionEvent { runId?: string; phase: "complete" | "failed"; completed: number; failed: number; durationMs: number; timestamp: string; } export declare class CompletionTailer { private readonly projectRoot; private readonly store; constructor(projectRoot: string, sessionId: string); /** * Poll .bober/history.jsonl for new pipeline-complete events since the last * persisted byte cursor. Returns only newly-seen completions. * * Algorithm: * 1. stat the file; ENOENT → return []. * 2. If stat.size < cursor (rotation/shrink) → readFrom = 0. * 3. Read bytes [readFrom, EOF) via Buffer slice. * 4. Parse complete lines only (skip partial trailing line). * 5. Filter for event === "pipeline-complete"; extract runId via marker. * 6. Dedupe against seenRunIds; persist updated cursor + seenRunIds. */ poll(): Promise; } //# sourceMappingURL=completion-tailer.d.ts.map