export type InterruptEventMode = "pause" | "cancel" | "handoff" | "diagnostic";
export type InterruptEventBoundary = "input" | "contract" | "governance" | "runtime-state" | "scope";
export type InterruptEventErrorCode = "MISSING_RUNTIME_ID" | "MISSING_SESSION_ID" | "MISSING_INTERRUPT_ID" | "MISSING_REASON" | "RUNTIME_NOT_READY" | "CONTRACT_REJECTED" | "GOVERNANCE_REJECTED" | "SCOPE_DENIED" | "REAL_INTERRUPT_BLOCKED";
export type InterruptEventGate = {
    accepted: boolean;
    reason?: string;
};
export type InterruptEventTrace = {
    correlationId?: string;
    callerId?: string;
    sessionId?: string;
};
export type InterruptEventRequest = {
    runtimeId?: string;
    sessionId?: string;
    interruptId?: string;
    reason?: string;
    mode?: InterruptEventMode;
    targetLoopId?: string;
    runtimeReady?: boolean;
    dryRun?: boolean;
    requestedScopes?: readonly string[];
    allowedScopes?: readonly string[];
    contract?: InterruptEventGate;
    governance?: InterruptEventGate;
    trace?: InterruptEventTrace;
    observedAt?: string;
};
export type ExecutionInterruptEvent = {
    kind: "execution.interrupt";
    eventId: string;
    runtimeId: string;
    sessionId: string;
    interruptId: string;
    reason: string;
    mode: InterruptEventMode;
    targetLoopId?: string;
    requestedScopes: readonly string[];
    grantedScopes: readonly string[];
    deniedScopes: readonly string[];
    trace: InterruptEventTrace;
    observedAt: string;
    dryRun: true;
    interruptDelivered: false;
    unsafeSideEffects: false;
};
export type InterruptEventError = {
    code: InterruptEventErrorCode;
    message: string;
    boundary: InterruptEventBoundary;
    publicSafe: true;
};
export type InterruptEventResult = {
    ok: true;
    event: ExecutionInterruptEvent;
    events: readonly string[];
} | {
    ok: false;
    error: InterruptEventError;
    events: readonly string[];
};
export declare function exposeInterruptEvent(request?: InterruptEventRequest): InterruptEventResult;
