export type CodeInvocationBoundary = "input" | "contract" | "governance" | "scope" | "runtime-state";
export type CodeInvocationGate = {
    accepted: boolean;
    reason?: string;
};
export type CodeInvocationRequest = {
    runtimeId?: string;
    sessionId?: string;
    invocationId?: string;
    operation?: string;
    eventSource?: string;
    languageHint?: string;
    payload?: Record<string, unknown>;
    requestedScopes?: readonly string[];
    allowedScopes?: readonly string[];
    subscribers?: readonly string[];
    runtimeReady?: boolean;
    dryRun?: boolean;
    contract?: CodeInvocationGate;
    governance?: CodeInvocationGate;
};
export type CodeInvocationErrorCode = "MISSING_RUNTIME_ID" | "MISSING_SESSION_ID" | "MISSING_OPERATION" | "MISSING_EVENT_SOURCE" | "INVALID_INVOCATION_PAYLOAD" | "RUNTIME_NOT_READY" | "CONTRACT_REJECTED" | "GOVERNANCE_REJECTED" | "SCOPE_DENIED" | "REAL_SIDE_EFFECT_NOT_ALLOWED";
export type CodeInvocationError = {
    code: CodeInvocationErrorCode;
    message: string;
    boundary: CodeInvocationBoundary;
    safeForRuntimeInspection: true;
    internalDetailExposed: false;
};
export type CodeInvocationEvent = {
    plane: "eventExposurePlane";
    category: "basic-tool-invocation";
    toolKind: "code";
    runtimeId: string;
    sessionId: string;
    invocationId: string;
    operation: string;
    eventSource: string;
    languageHint?: string;
    payload: Readonly<Record<string, unknown>>;
    acceptedScopes: readonly string[];
    subscribers: readonly string[];
    execution: {
        dryRun: true;
        invoked: false;
        unsafeSideEffects: false;
    };
    audit: {
        contractSurface: "runtime.contractSurface";
        governanceRequired: true;
    };
};
export type CodeInvocationExposureResult = {
    ok: true;
    invocation: CodeInvocationEvent;
    events: readonly string[];
} | {
    ok: false;
    error: CodeInvocationError;
    events: readonly string[];
};
export declare const codeInvocationDescriptor: {
    readonly plane: "eventExposurePlane";
    readonly category: "basic-tool-invocation";
    readonly toolKind: "code";
    readonly purpose: "expose code tool invocation events without evaluating or running code";
    readonly unsafeSideEffects: false;
};
export declare function exposeCodeInvocationEvent(request?: CodeInvocationRequest): CodeInvocationExposureResult;
