import type { ExecutionModeRegistrySnapshot } from "./executionModeRegistry.js";
import { type RuntimeModeExposureFailure, type RuntimeModeExposureGate } from "./modeDescriptor.js";
export type RuntimeModeSwitchStatus = "unchanged" | "planned";
export type RuntimeModeSwitchRequest = {
    runtimeId?: string;
    registry?: ExecutionModeRegistrySnapshot;
    fromModeId?: string;
    toModeId?: string;
    reason?: string;
    requestedScopes?: readonly string[];
    dryRun?: boolean;
    runtimeReady?: boolean;
    contract?: RuntimeModeExposureGate;
    governance?: RuntimeModeExposureGate;
};
export type RuntimeModeSwitchPlan = {
    runtimeId: string;
    fromModeId: string;
    toModeId: string;
    status: RuntimeModeSwitchStatus;
    reason?: string;
    requestedScopes: readonly string[];
    missingScopes: readonly string[];
    dryRun: true;
    controllerSurface: "runtime.modeExposure.modeSwitchController";
    governanceChecked: true;
    contractChecked: true;
    unsafeSideEffects: false;
};
export type RuntimeModeSwitchResult = {
    ok: true;
    plan: RuntimeModeSwitchPlan;
    events: readonly string[];
} | RuntimeModeExposureFailure;
export declare const modeSwitchControllerCapability: {
    readonly surface: "runtime.modeExposure";
    readonly capability: "modeSwitchController";
    readonly purpose: "plan a governed runtime mode switch as a dry-run envelope";
    readonly unsafeSideEffects: false;
};
export declare function planRuntimeModeSwitch(request?: RuntimeModeSwitchRequest): RuntimeModeSwitchResult;
