export type SandboxEventPhase = 'start' | 'end' | 'error';
export type SandboxEventError = {
    name?: string;
    message: string;
    code?: string;
    retryable?: boolean | null;
};
export type SandboxOperationEvent = {
    type: 'sandbox_operation';
    name: string;
    phase: SandboxEventPhase;
    timestamp: string;
    data?: Record<string, unknown>;
    durationMs?: number;
    error?: SandboxEventError;
};
export type SandboxEvent = SandboxOperationEvent;
export type SandboxEventSink = (event: SandboxEvent) => void | Promise<void>;
export type SandboxJsonlEventWriter = (line: string) => void | Promise<void>;
export type SandboxHttpEventRequest = {
    method: 'POST';
    headers: Record<string, string>;
    body: string;
};
export type SandboxHttpEventResponse = {
    ok: boolean;
    status: number;
    statusText?: string;
    text?: () => Promise<string>;
};
export type SandboxHttpEventFetch = (endpoint: string, request: SandboxHttpEventRequest) => Promise<SandboxHttpEventResponse>;
export type SandboxHttpEventSinkOptions = {
    endpoint: string;
    fetch?: SandboxHttpEventFetch;
    headers?: Record<string, string>;
};
export declare function addSandboxEventSink(sink: SandboxEventSink): () => void;
export declare function clearSandboxEventSinks(): void;
export declare function emitSandboxEvent(event: SandboxEvent): Promise<void>;
/**
 * Create a sink that writes one serialized sandbox event per JSONL line.
 */
export declare function createSandboxJsonlEventSink(writer: SandboxJsonlEventWriter): SandboxEventSink;
/**
 * Create a sink that POSTs each sandbox event as JSON to an HTTP endpoint.
 */
export declare function createSandboxHttpEventSink(options: SandboxHttpEventSinkOptions): SandboxEventSink;
/**
 * Create a sink that delivers each event to multiple child sinks.
 */
export declare function createChainedSandboxEventSink(...sinks: SandboxEventSink[]): SandboxEventSink;
export declare function serializeSandboxEventError(error: unknown): SandboxEventError;
