/**
 * Permission escalation meta-tools.
 *
 * These two tools sit OUTSIDE the permission-gate chain — they are
 * ALWAYS_AVAILABLE (config/schema.ts) so an agent that has been over-restricted
 * can still ASK for more access. They can never GRANT access: approval requires
 * a human clicking Approve in the settings UI.
 *
 * The per-call dispatcher in src/index.ts invokes these handlers BEFORE running
 * account routing, agent grants, permission gate, or destructive-confirm. The
 * signature here is intentionally lighter than ToolHandler because escalation
 * runs pre-gate — it only needs args + a live config snapshot for the settings
 * URL.
 */
import type { ProtonMailConfig } from "../types/index.js";
import type { ToolDef, ToolResult } from "./types.js";
export interface EscalationContext {
    args: Record<string, unknown>;
    config: ProtonMailConfig;
    /**
     * PERM-002: identity of the agent making the escalation request, so the
     * approval card can surface it. `clientId === "stdio"` for the local
     * stdio transport (no OAuth identity); for HTTP/OAuth callers, this is
     * the real client id and (optionally) the human-readable client name.
     * Optional for back-compat with any test harness that doesn't supply it.
     */
    caller?: {
        clientId: string;
        clientName?: string;
    };
}
export type EscalationHandler = (ctx: EscalationContext) => Promise<ToolResult>;
export declare const defs: ToolDef[];
/**
 * `request_permission_escalation`'s description renders the settings-UI URL
 * at ListTools time using the then-current port. Returns the dynamic description
 * so the ListTools handler can inject the live port before sending tools to
 * the client.
 */
export declare function describeRequestEscalation(settingsPort: number): string;
export declare const handlers: Record<string, EscalationHandler>;
//# sourceMappingURL=escalation.d.ts.map