import type { StreamEvent } from '../../../shared/types/provider.js'; import type { CompanionDiff } from './diff-reader.js'; export declare const COMPANION_CHANGE_DEBOUNCE_MS = 250; export interface CompanionChangeCandidate { readonly reason: 'quiet' | 'forced' | 'completion' | 'commit'; readonly observedGeneration: number; } export interface CompanionChangeTrigger extends CompanionChangeCandidate { readonly snapshot: CompanionDiff; } export type CompanionChangeSkipReason = 'empty_diff' | 'unchanged_digest' | 'below_minimum_changed_lines'; export declare class CompanionChangeDetector { private readonly intervalMs; private readonly minimumChangedLines; private readonly now; private readonly readDiff; private dirtySince; private lastChangeAt; private lastReviewedDigest; private generation; private immediateGeneration; constructor(input: { intervalMs: number; minimumChangedLines: number; now: () => number; readDiff: () => Promise; }); observe(event: StreamEvent): boolean; observeCommit(): void; observeSnapshotChange(before: CompanionDiff, after: CompanionDiff): boolean; isDirty(): boolean; getObservedGeneration(): number; markReviewed(snapshot: CompanionDiff, observedGeneration: number): void; getTriggerCandidate(quietIntervalMs: number): CompanionChangeCandidate | undefined; getCompletionCandidate(): CompanionChangeCandidate; evaluateCandidate(candidate: CompanionChangeCandidate, providedSnapshot?: CompanionDiff, onSkipped?: (reason: CompanionChangeSkipReason) => void): Promise; private consumeThrough; private isMutatingTool; } //# sourceMappingURL=change-detector.d.ts.map