import { ExecutorKind } from './TaskExecutor';
export interface RuntimeCooldownState {
    executor: ExecutorKind;
    until?: string;
    reason?: string;
    failures: number;
    updatedAt: string;
    /** Set to true once failures exceed the retry budget within RETRY_BUDGET_WINDOW_MS. */
    permanentlyDown?: boolean;
    /** ms epoch of the failure that opened the current retry budget window. */
    budgetWindowStartedAt?: number;
}
/**
 * Exponential backoff parameters.
 *
 *   delay = min(BASE_DELAY_MS * 2^(failures-1), MAX_DELAY_MS)
 *
 * After MAX_FAILURES failures within RETRY_BUDGET_WINDOW_MS the executor
 * is marked permanentlyDown until manual reset via markHealthy().
 *
 * Story 6.5 — OpenLife v1.2 Royal Stack.
 */
export declare const BASE_DELAY_MS = 10000;
export declare const MAX_DELAY_MS: number;
export declare const MAX_FAILURES = 10;
export declare const RETRY_BUDGET_WINDOW_MS: number;
export declare function exponentialBackoffDelayMs(failures: number): number;
export declare class RuntimeHealthMonitor {
    private root;
    private filePath;
    constructor(root?: string);
    private read;
    private write;
    get(executor: ExecutorKind): RuntimeCooldownState | null;
    isCoolingDown(executor: ExecutorKind): boolean;
    /**
     * Record an executor failure. The cooldown is computed via exponential
     * backoff unless `cooldownMinutes` is explicitly provided (backward-
     * compatible — pre-v1.2 callers passed a fixed 10-minute window).
     */
    markFailure(executor: ExecutorKind, reason: string, cooldownMinutes?: number): void;
    markHealthy(executor: ExecutorKind): void;
    all(): Record<string, RuntimeCooldownState>;
}
