import type { AssistantMessage } from "@earendil-works/pi-ai"; import type { ContextEvent, ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent"; import type { CodexConversionConfig } from "../adapter/activation/config.ts"; import { type RealtimePeerPlan } from "./controller-start.ts"; import type { CodexRealtimeConversation } from "./conversation/session.ts"; import { type PreparedVoiceDelegation } from "./session-messages.ts"; import type { CodexVoiceMode } from "./ui.ts"; export declare class CodexVoiceController { private readonly runtime; private readonly messages; private readonly inputMuteListeners; private readonly activePrompts; private delegationPreflight; constructor(pi: ExtensionAPI); setDelegationPreflight(preflight: (ctx: ExtensionContext, signal: AbortSignal) => Promise): void; setPrompt(report: { id: string; active: boolean; prompt: string; }): void; announceCompactionStart(reason: "threshold" | "overflow"): void; get status(): string; get active(): boolean; get activeMode(): CodexVoiceMode | undefined; get inputMuted(): boolean; onInputMuteChange(listener: (muted: boolean) => void): () => void; setInputMuted(muted: boolean): boolean; setInputTooQuiet(inputTooQuiet: boolean): void; resetContextAnnouncements(): void; resetSessionContext(): void; announceDictation(ctx: ExtensionContext): void; start(ctx: ExtensionContext, config: CodexConversionConfig, mode: CodexVoiceMode): Promise; startRealtimeWithPeerPlan(ctx: ExtensionContext, config: CodexConversionConfig, plan: RealtimePeerPlan, signal?: AbortSignal): Promise; prepareRealtimePrompt(ctx: ExtensionContext): string | undefined; stopConversation(session: CodexRealtimeConversation, options?: { announce?: boolean; }): Promise; stopRealtimeWithPeerPlan(plan: RealtimePeerPlan, options?: { announce?: boolean; }): Promise; setConversationInputActive(session: CodexRealtimeConversation, active: boolean): void; private startMode; stop(options?: { announce?: boolean; }): Promise; finishDictation(options?: { announce?: boolean; }): Promise; agentStarted(): void; filterContext(messages: ContextEvent["messages"]): ContextEvent["messages"]; mirrorPiSteer(input: unknown): boolean; streamDelta(delta: string): void; finishAgentMessage(message: AssistantMessage, forwardReasoningSummaries: boolean): void; settleTurn(): void; private currentSession; private fail; private drop; private markRealtimePeerInactive; private renderStatus; private renderCurrentStatus; }