import type { RealtimeVoiceProviderPlugin } from "../plugins/types.js";
import type { RealtimeVoiceBridge, RealtimeVoiceAudioFormat, RealtimeVoiceCloseReason, RealtimeVoiceProviderConfig, RealtimeVoiceRole, RealtimeVoiceTool, RealtimeVoiceToolCallEvent, RealtimeVoiceToolResultOptions } from "./provider-types.js";
export type RealtimeVoiceAudioSink = {
    isOpen?: () => boolean;
    sendAudio: (audio: Buffer) => void;
    clearAudio?: () => void;
    sendMark?: (markName: string) => void;
};
export type RealtimeVoiceMarkStrategy = "transport" | "ack-immediately" | "ignore";
export type RealtimeVoiceBridgeSession = {
    bridge: RealtimeVoiceBridge;
    acknowledgeMark(): void;
    close(): void;
    connect(): Promise<void>;
    sendAudio(audio: Buffer): void;
    sendUserMessage(text: string): void;
    setMediaTimestamp(ts: number): void;
    submitToolResult(callId: string, result: unknown, options?: RealtimeVoiceToolResultOptions): void;
    triggerGreeting(instructions?: string): void;
};
export type RealtimeVoiceBridgeSessionParams = {
    provider: RealtimeVoiceProviderPlugin;
    providerConfig: RealtimeVoiceProviderConfig;
    audioFormat?: RealtimeVoiceAudioFormat;
    audioSink: RealtimeVoiceAudioSink;
    instructions?: string;
    initialGreetingInstructions?: string;
    markStrategy?: RealtimeVoiceMarkStrategy;
    triggerGreetingOnReady?: boolean;
    tools?: RealtimeVoiceTool[];
    onTranscript?: (role: RealtimeVoiceRole, text: string, isFinal: boolean) => void;
    onToolCall?: (event: RealtimeVoiceToolCallEvent, session: RealtimeVoiceBridgeSession) => void;
    onReady?: (session: RealtimeVoiceBridgeSession) => void;
    onError?: (error: Error) => void;
    onClose?: (reason: RealtimeVoiceCloseReason) => void;
};
export declare function createRealtimeVoiceBridgeSession(params: RealtimeVoiceBridgeSessionParams): RealtimeVoiceBridgeSession;
