/**
 * Mode switching policy shared by tools and slash commands.
 *
 * The switch_mode tool is only one delivery surface for this behavior.
 * The actual mode registry, validation, confirmation, and side effects live here.
 */
import type { AgentSession } from '../agent-session.js';
import type { ExtensionContext } from '../extensions/index.js';
export interface ModeSettings {
    getAutoApprove(): boolean;
    setAutoApprove(v: boolean): void;
    getAutoApproveDefault(): boolean;
}
export interface SwitchModeOptions {
    settings?: ModeSettings;
    reason?: string;
    ctx?: Pick<ExtensionContext, 'hasUI' | 'ui'>;
    confirm?: (request: ModeSwitchConfirmationRequest) => Promise<boolean>;
    /** Bypass switchTo constraints (used by slash commands — user explicitly chose the mode). */
    force?: boolean;
}
export interface ModeSwitchConfirmationRequest {
    currentMode: string;
    targetMode: string;
    reason?: string;
    ctx?: Pick<ExtensionContext, 'hasUI' | 'ui'>;
}
export declare function requiresModeSwitchConfirmation(currentMode: string, targetMode: string): boolean;
export declare function switchMode(session: AgentSession, modeName: string, opts?: SwitchModeOptions): Promise<{
    ok: boolean;
    message: string;
}>;
//# sourceMappingURL=switch-mode.d.ts.map