import type { CartographerSweepEngine } from '../core/CartographerSweepEngine.js';
export interface CartographerSweepDegradation {
    feature: string;
    primary: string;
    fallback: string;
    reason: string;
    impact: string;
}
export interface CartographerSweepPollerOptions {
    engine: CartographerSweepEngine;
    /** Full cadence while there is work (default 600000 = 10 min). */
    cadenceMs?: number;
    /** Backed-off cadence while idle (no candidates) or breaker-open (default 30 min). */
    idleCadenceMs?: number;
    /** Consecutive zero-author-with-candidates ticks before the breaker opens (default 3). */
    zeroProgressTicksToBreak?: number;
    /** Re-escalate a continuous stall at most once per this many hours (default 6). */
    breakerReescalateHours?: number;
    /** Consecutive zero-candidate ticks before backing off to the idle cadence (default 2). */
    idleAfterZeroCandidateTicks?: number;
    onError?: (err: unknown) => void;
    reportDegradation?: (d: CartographerSweepDegradation) => void;
    log?: (msg: string) => void;
    now?: () => number;
}
export declare class CartographerSweepPoller {
    private readonly engine;
    private readonly cadenceMs;
    private readonly idleCadenceMs;
    private readonly zeroProgressTicksToBreak;
    private readonly reescalateMs;
    private readonly idleAfterZeroCandidateTicks;
    private readonly onError;
    private readonly reportDegradation;
    private readonly log;
    private readonly now;
    private cadence;
    private running;
    private zeroProgressTicks;
    private consecutiveZeroCandidate;
    private breakerOpen;
    private breakerOpenedAt;
    private lastEscalateAt;
    private lastCandidateCount;
    private backlogGrowthTicks;
    constructor(opts: CartographerSweepPollerOptions);
    start(): void;
    stop(): void;
    /** Visible for tests + the breaker logic. */
    isBreakerOpen(): boolean;
    private tick;
    private runPass;
    private classifyProgress;
    private updateBacklogTrend;
    private openBreaker;
    private closeBreaker;
    /** While broken: constant-cost probe; never authors on Claude. Try a real pass only if routing is OK. */
    private brokenTick;
    private maybeReescalate;
}
//# sourceMappingURL=CartographerSweepPoller.d.ts.map