import type { Observable, Subject } from 'rxjs'; import type { Readable } from 'stream'; /** * Context passed to custom ASR/TTS factories from {@link defineMediaProviders}. * Populated by the host outside the script sandbox. */ export interface MediaConnectorContext { id: string; config: Record; dialogUuid: string; role?: string; debug$: Subject; } export interface ScriptAsrConnectorError { message: string; code?: number; } /** * Host ASR connector contract for custom providers (same surface as runtime AsrConnector). */ export interface ScriptAsrConnector { transcription$: Subject<{ text: string; isFinal: boolean; }>; result$: Subject; error$: Subject; isOpen(): boolean; send(audio: ArrayBufferLike): void; speech(active: boolean): void; finalize(): void; close(): void; } export type TtsSynthesisContext = { previousText?: string; nextText?: string; }; /** * Unified TTS connector: batch HTTP + optional streaming WebSocket methods. */ export interface ScriptTtsConnector { supportsStreaming(): boolean; textToSpeechStream(rawtext: string, ctx?: TtsSynthesisContext): Promise; readonly audio$: Subject; readonly done$: Subject; open(): Promise; startGeneration(): Promise; sendText(chunk: string): void; flush(): void; sendSeparatorFlush?(): void; close(): void; } /** Optional session object shared by ASR and TTS factories for one dialog. */ export type MediaProviderShared = { dispose?: () => void; close?: () => void; } & Record; export type AsrProviderFactory = (ctx: MediaConnectorContext, shared: MediaProviderShared | undefined) => ScriptAsrConnector; export type TtsProviderFactory = (ctx: MediaConnectorContext, shared: MediaProviderShared | undefined) => ScriptTtsConnector; export interface MediaProvidersDefinition { createShared?: (ctx: { dialogUuid: string; debug$: Subject; }) => MediaProviderShared; asr?: Record; tts?: Record; } /** * Mark a named export as custom media providers (identity helper). * * Export from a sibling module (`media-providers/index.ts`), not from the * sandboxed script entry. The host loads this outside the VM. * * @example * ```ts * // media-providers/index.ts (host-only) * export const mediaProviders = defineMediaProviders({ * createShared: (ctx) => new MySession(ctx), * asr: { 'my-asr': (ctx, shared) => new MyAsr(ctx, shared) }, * tts: { 'my-tts': (ctx, shared) => new MyTts(ctx, shared) }, * }); * ``` */ export declare function defineMediaProviders(def: MediaProvidersDefinition): MediaProvidersDefinition; /** @internal helper type for hosts that mirror connector subjects */ export type SubjectLike = Subject | Observable; //# sourceMappingURL=media-providers.d.ts.map