export type UIEventBoundary = "input" | "contract" | "governance" | "scope" | "runtime-state";
export type UIEventGate = {
    accepted: boolean;
    reason?: string;
};
export type UIEventRequest = {
    runtimeId?: string;
    sessionId?: string;
    eventId?: string;
    kind?: string;
    eventSource?: string;
    payload?: Record<string, unknown>;
    requestedScopes?: readonly string[];
    allowedScopes?: readonly string[];
    subscribers?: readonly string[];
    runtimeReady?: boolean;
    contract?: UIEventGate;
    governance?: UIEventGate;
};
export type UIEventErrorCode = "MISSING_RUNTIME_ID" | "MISSING_SESSION_ID" | "MISSING_EVENT_KIND" | "MISSING_EVENT_SOURCE" | "INVALID_EVENT_PAYLOAD" | "RUNTIME_NOT_READY" | "CONTRACT_REJECTED" | "GOVERNANCE_REJECTED" | "SCOPE_DENIED";
export type UIEventError = {
    code: UIEventErrorCode;
    message: string;
    boundary: UIEventBoundary;
    safeForRuntimeInspection: true;
    internalDetailExposed: false;
};
export type UIEventRecord = {
    plane: "eventExposurePlane";
    category: "ui";
    runtimeId: string;
    sessionId: string;
    eventId: string;
    kind: string;
    eventSource: string;
    payload: Readonly<Record<string, unknown>>;
    acceptedScopes: readonly string[];
    subscribers: readonly string[];
    visibility: "runtime-subscribable";
    audit: {
        dryRun: true;
        unsafeSideEffects: false;
        contractSurface: "runtime.contractSurface";
        governanceRequired: true;
    };
};
export type UIEventExposureResult = {
    ok: true;
    event: UIEventRecord;
    events: readonly string[];
} | {
    ok: false;
    error: UIEventError;
    events: readonly string[];
};
export declare const uiEventDescriptor: {
    readonly plane: "eventExposurePlane";
    readonly category: "ui";
    readonly purpose: "expose UI execution events for runtime subscribers without running product UI logic";
    readonly unsafeSideEffects: false;
};
export declare function exposeUIEvent(request?: UIEventRequest): UIEventExposureResult;
