export type ReplyEventKind = "text" | "data" | "media" | "status";
export type ReplyEventSource = "main-loop" | "runtime-exec-engine" | "official-module" | "debug";
export type ReplyEventBoundary = "input" | "contract" | "governance" | "subscription";
export type ReplyEventGate = {
    accepted: boolean;
    reason?: string;
};
export type ReplyEventTrace = {
    correlationId?: string;
    sessionId?: string;
    callerId?: string;
};
export type ReplyEventPayload = {
    kind: ReplyEventKind;
    content: unknown;
    format?: string;
};
export type ReplyEventRequest = {
    sessionId?: string;
    replyId?: string;
    source?: ReplyEventSource;
    reply?: ReplyEventPayload;
    subscribers?: readonly string[];
    trace?: ReplyEventTrace;
    contract?: ReplyEventGate;
    governance?: ReplyEventGate;
};
export type ReplyEventErrorCode = "MISSING_SESSION_ID" | "MISSING_REPLY_ID" | "MISSING_REPLY_PAYLOAD" | "CONTRACT_REJECTED" | "GOVERNANCE_REJECTED";
export type ReplyEventError = {
    code: ReplyEventErrorCode;
    message: string;
    boundary: ReplyEventBoundary;
    stateSafe: true;
};
export type ExposedReplyEvent = {
    eventId: string;
    type: "agent.reply";
    sessionId: string;
    replyId: string;
    source: ReplyEventSource;
    reply: ReplyEventPayload;
    subscribers: readonly string[];
    trace: ReplyEventTrace;
    visibility: "event-exposure-plane";
    dryRun: true;
    unsafeSideEffects: false;
};
export type ReplyEventResult = {
    ok: true;
    event: ExposedReplyEvent;
    events: readonly string[];
} | {
    ok: false;
    error: ReplyEventError;
    events: readonly string[];
};
export declare function exposeReplyEvent(request: ReplyEventRequest): ReplyEventResult;
