import type { ExtensionContext } from "@earendil-works/pi-coding-agent"; import type { PreparedRealtimeContext, RealtimePeerPlan } from "../controller/start.ts"; import type { CodexVoiceController } from "../controller.ts"; import type { CodexRealtimeConversation } from "../conversation/session.ts"; import type { LanVoiceActivity } from "./activity.ts"; import type { LanVoiceBrowserClients } from "./browser-clients.ts"; import { LanHostRealtimePeer } from "./browser-peer.ts"; import type { LanTakeoverArrival } from "./takeover.ts"; import { LanTransferredSession } from "./transferred-session.ts"; import type { CodexConversionConfig } from "../../adapter/activation/config.ts"; export interface LanConversationState { activeConversation?: { peer: LanHostRealtimePeer; conversation?: CodexRealtimeConversation; } | undefined; conversationStart?: { abort: AbortController; promise: Promise; } | undefined; realtimePlan?: RealtimePeerPlan | undefined; transferred?: LanTransferredSession | undefined; } export declare function createLanConversationStarter(options: { state: LanConversationState; ctx: ExtensionContext; voice: CodexVoiceController; getConfig(): CodexConversionConfig; arrival: LanTakeoverArrival<{ prepared: PreparedRealtimeContext; inputMuted: boolean; alternateVoice: boolean; }>; clients(): LanVoiceBrowserClients; activity: LanVoiceActivity; }): (takeoverToken?: string) => Promise;