import type { EscalationTier } from './ModelTierEscalation.js';
/** Default hint TTL — a topic not resumed within this window drops the hint. */
export declare const DEFAULT_ESCALATION_HINT_TTL_MS: number;
/** One ephemeral carry: the trigger to re-evaluate + the tier the source ran. */
export interface EscalationHint {
    /** The escalation trigger label the source topic was running under (e.g.
     *  'build' / 'autonomous' / 'instar-dev' / 'spec-converge' / 'transfer'). A
     *  free-string label — NEVER trusted as authority; the destination governor
     *  re-evaluates from real state. Recorded for audit only. */
    trigger: string;
    /** The tier the source session was on (always 'escalated' for a filed hint —
     *  a default-tier topic files no hint). Recorded for audit/observability. */
    sourceTier: EscalationTier;
    /** Source machine id (audit only — peer-asserted, never a principal). */
    sourceMachineId?: string;
    /** Epoch ms after which the hint is treated as absent. */
    expiresAt: number;
    /** Epoch ms the hint was filed (audit/observability). */
    filedAt: number;
}
export interface EscalationHintStoreDeps {
    /** File the hints persist to (JSON). */
    filePath: string;
    /** Hint TTL (ms). Defaults to DEFAULT_ESCALATION_HINT_TTL_MS. */
    ttlMs?: number;
    /** Wall clock — injectable for tests. Defaults to `Date.now`. */
    now?: () => number;
}
export declare class EscalationHintStore {
    private readonly d;
    private hints;
    private loaded;
    private readonly now;
    private readonly ttlMs;
    constructor(deps: EscalationHintStoreDeps);
    private load;
    private persist;
    /**
     * File an escalation hint for a topic (the transfer SOURCE leg). Idempotent —
     * a newer file for the same topic replaces the older one. Stamps `expiresAt`
     * from the TTL.
     */
    file(sessionKey: string, hint: Omit<EscalationHint, 'expiresAt' | 'filedAt'>): void;
    /**
     * Read a topic's live (non-expired) hint WITHOUT consuming it. Returns null
     * when absent or expired. Observability/peek surface.
     */
    peek(sessionKey: string): EscalationHint | null;
    /**
     * Read AND remove a topic's live hint (the destination resume leg). Returns
     * null when absent or expired (an expired hint is removed as a side effect).
     * Consume-once: a single transfer yields at most one re-admit attempt.
     */
    consume(sessionKey: string): EscalationHint | null;
    /** Remove a topic's hint (e.g. a suppress write, or an explicit clear). */
    clear(sessionKey: string): void;
    /** All live (non-expired) hints — diagnostics surface. Prunes expired. */
    all(): Record<string, EscalationHint>;
}
//# sourceMappingURL=EscalationHintStore.d.ts.map