/**
 * BrowserSafety — gatekeeper for mutating browser actions.
 *
 * Given an action request (type + target + current page), returns a decision:
 *   - "allow"   : proceed silently
 *   - "confirm" : ask the user (with a reason) before proceeding
 *   - "deny"    : refuse outright (rare — used for blocked origins)
 *
 * The decision is driven by three signals:
 *   1. Current mode: "live" | "confirm-all" | "dry-run"
 *   2. Per-site sensitivity (e.g. instagram.com, gmail.com → confirm more)
 *   3. Destructive-verb detection on the target element's accessible name
 *      (delete, unfollow, archive, remove, block, logout, purchase, send…)
 */
import type { ObservedElement } from "./browser-observer.js";
export type SafetyMode = "live" | "confirm-all" | "dry-run";
export type SafetyAction = {
    type: "click" | "dblclick";
    target: ObservedElement | null;
    hintedLabel?: string;
} | {
    type: "type";
    target: ObservedElement | null;
    text: string;
    submit?: boolean;
    hintedLabel?: string;
} | {
    type: "select";
    target: ObservedElement | null;
    option: string;
    hintedLabel?: string;
} | {
    type: "keys";
    keys: string;
} | {
    type: "navigate";
    url: string;
} | {
    type: "scroll";
} | {
    type: "hover";
    target: ObservedElement | null;
    hintedLabel?: string;
};
export type SafetyVerdict = {
    decision: "allow";
} | {
    decision: "confirm";
    reason: string;
} | {
    decision: "deny";
    reason: string;
};
export interface SafetyContext {
    url: string;
    mode: SafetyMode;
}
export declare class BrowserSafety {
    private _mode;
    get mode(): SafetyMode;
    setMode(m: SafetyMode): void;
    evaluate(action: SafetyAction, ctx: SafetyContext): SafetyVerdict;
    /** Short human-readable summary of an action for confirmation prompts. */
    describeAction(action: SafetyAction): string;
}
//# sourceMappingURL=browser-safety.d.ts.map