/**
 * Banner Throttle State (increment 0796 / T-003)
 *
 * Persists the result of the most recent session-start banner check to
 * `<.specweave/state>/banner-last-check.json`. Used by the
 * UserPromptSubmit hook to short-circuit subsequent prompts within the
 * configured throttle window without re-running `specweave doctor`.
 *
 * Atomic write semantics: the new state is written to `*.tmp` first, then
 * `fs.renameSync` is used to swap it into place. This prevents partial
 * reads when multiple Claude Code windows fire UserPromptSubmit hooks
 * concurrently. Reads are tolerant — any malformed or schema-mismatched
 * file is treated as "never checked" so a corrupt state file can never
 * block prompt submission. ADR 0796-02 (throttle semantics), ADR 0796-03
 * (failure-mode policy).
 */
declare const SCHEMA_VERSION: 1;
export interface BannerState {
    version: typeof SCHEMA_VERSION;
    lastCheckAt: string;
    lastResult: {
        pluginUpdates: number;
        skillUpdates: number;
        doctorStatus: 'pass' | 'warn' | 'fail' | 'skip';
    };
    /** ISO timestamp the banner was last shown to the user, or null if never. */
    lastBannerShownAt: string | null;
}
export declare function bannerStatePath(stateDir: string): string;
/**
 * Read the throttle state. Returns null when the file is missing,
 * unparseable, or carries a schema version we don't understand. Never
 * throws — this is the hot path for every UserPromptSubmit and must
 * degrade silently.
 */
export declare function readBannerState(stateDir: string): BannerState | null;
/**
 * Write the throttle state atomically. Creates the parent directory if
 * missing. The temp file is removed on success (only the final file
 * remains).
 */
export declare function writeBannerStateAtomic(stateDir: string, state: BannerState): void;
export {};
//# sourceMappingURL=banner-state.d.ts.map