export interface NativeScreenFrame { width: number; height: number; timestampUs: number; data: ArrayBuffer; } export interface NativeAudioCapture { isNativeAudioCaptureAvailable(): Promise; startNativeAudioCapture(sourceId?: string): Promise; stopNativeAudioCapture(): void; onNativeAudioData(callback: (pcm: ArrayBuffer) => void): () => void; onNativeAudioStopped(callback: () => void): () => void; onNativeAudioDiagnostic(callback: (msg: string) => void): () => void; } export interface NativeScreenCapture { isNativeScreenCaptureAvailable(): Promise; startNativeScreenCapture(monitorIndex: number, fps: number, maxWidth?: number, maxHeight?: number, bitrate?: number, codec?: string): Promise<{ success: boolean; wsPort?: number; }>; stopNativeScreenCapture(): void; onNativeScreenFrame(callback: (frame: NativeScreenFrame) => void): () => void; onNativeScreenCaptureStopped(callback: () => void): () => void; } export interface VoiceHost { /** Whether native capture is available at all. */ hasNativeCapture(): boolean; getNativeAudio(): NativeAudioCapture | null; getNativeScreen(): NativeScreenCapture | null; allowsInsecureTransport(): boolean; } export declare const webHost: VoiceHost; /** Called once by the embedder, before any voice code runs. */ export declare function setVoiceHost(host: VoiceHost): void; export declare function getVoiceHost(): VoiceHost;