import type { ActiveVoiceGuard } from "../active-owner.ts"; import type { VoiceControllerRuntime } from "./start.ts"; import { type VoiceSession } from "./support.ts"; import type { CodexRealtimeConversation } from "../conversation/session.ts"; import type { TransferredVoiceControls } from "../handoff-contract.ts"; import type { CapturedHandoffAudio } from "../handoff-peer.ts"; interface HandoffCallbacks { active(): boolean; status(): string; inputMuted(): boolean; currentSession(): VoiceSession | undefined; setInputMuted(muted: boolean): boolean; notifyMute(muted: boolean): void; renderStatus(status: string): void; renderCurrentStatus(): void; stop(options: { announce: boolean; transferring: boolean; }): Promise; } /** Owns arrival reservations and transferred audio subscriptions, not the live call. */ export declare class ControllerHandoff { private handoffReservation; private forwardedAudio; private departingSession; private removeForwardedEvents; private readonly runtime; private readonly ownership; private readonly callbacks; constructor(runtime: VoiceControllerRuntime, ownership: ActiveVoiceGuard, callbacks: HandoffCallbacks); get reservation(): AbortController | undefined; get forwarded(): TransferredVoiceControls | undefined; get departing(): CodexRealtimeConversation | undefined; cancelReservation(): void; detachForwarded(): void; reserveHandoffArrival(): { signal: AbortSignal; release(): void; }; captureHandoffAudio(): CapturedHandoffAudio; } export {};