import type { CodexConversionConfig } from "../adapter/activation/config.ts"; import { type CodexRealtimePeer, type CodexRealtimePeerEvent } from "./conversation/peer.ts"; import type { TransferredVoiceControls } from "./handoff-contract.ts"; import { type HandoffNotification, type VoiceHandoffLink } from "./handoff-wire.ts"; export interface CapturedHandoffAudio { readonly inputMuted: boolean; /** Current source phase; omitted by older providers means primary. */ readonly alternateVoice?: boolean; sourceActive(): boolean; bindControls(controls: TransferredVoiceControls): void; release(signal: AbortSignal): Promise; createPeer(): Promise; start(peer: CodexRealtimePeer): Promise; transferred(peer: CodexRealtimePeer, controls: TransferredVoiceControls): void; finished(peer: CodexRealtimePeer | undefined, error: Error): void; } /** Source-side media owner. The destination never chooses a physical device. */ export declare class HandoffAudioHost { private sequence; private current; private lastPeer; private closed; private starting; private released; private muted; private readonly captured; private readonly link; private readonly controls; private readonly onMute; constructor(captured: CapturedHandoffAudio, link: VoiceHandoffLink, controls: TransferredVoiceControls, onMute: (muted: boolean) => void); setInputMuted(muted: boolean): void; get inputMuted(): boolean; release(signal: AbortSignal): Promise; start(): Promise<{ generation: number; sdp: string; }>; closePeer(value: unknown): Promise; command(message: Extract): void; close(error: Error): Promise; private closeCurrent; } /** Destination-side peer: call setup/auth and all Pi work remain local here. */ export declare class HandoffRemotePeer implements CodexRealtimePeer { readonly kind: "webrtc"; private readonly listeners; private readonly exitListeners; private generation; private starting; private closed; private readonly link; constructor(link: VoiceHandoffLink); onEvent(listener: (event: CodexRealtimePeerEvent) => void): () => void; onExit(listener: (error: Error) => void): () => void; start(_config: CodexConversionConfig): Promise; private open; applyAnswer(sdp: string): void; sendData(message: unknown): void; setInputMuted(muted: boolean): void; setSpeakerSuppressed(suppressed: boolean): void; private command; receive(generation: number, value: unknown): void; disconnected(error: Error): void; close(): Promise; }