/**
 * Persistent state for the Pro-tier upsell nudge.
 *
 * Lives in its own file (`~/.shieldcortex/upsell-state.json`) rather than
 * inside `config.json` so a corrupt write — or a hand-edit gone wrong — can't
 * damage the cloud-sync configuration. The state is purely for throttling
 * and mute; losing it just means the nudge could re-show prematurely (worst
 * case: one extra impression).
 */
export interface UpsellState {
    /** Epoch ms when the Pro upsell was last rendered to the user. */
    proLastShownAt: number | null;
    /** When true, never show the Pro upsell again until the user un-mutes. */
    proMuted: boolean;
}
/**
 * Read state from disk. Never throws — returns defaults on any failure
 * (missing file, malformed JSON, permission error). The upsell flow is
 * always best-effort; a broken state file should not affect the doctor's
 * exit code or user experience.
 */
export declare function getUpsellState(): UpsellState;
/**
 * Merge updates into state and persist. Creates `~/.shieldcortex/` if it
 * doesn't exist (first-run case). Silent on write errors — same rationale
 * as the read path.
 */
export declare function setUpsellState(updates: Partial<UpsellState>): void;
/** Convenience: mark the upsell as shown now. Used by doctor after rendering. */
export declare function markUpsellShown(now?: number): void;
