export type TtsProvider = "elevenlabs" | "openai" | "edge"; export type TtsMode = "final" | "all"; export type TtsAutoMode = "off" | "always" | "inbound" | "tagged"; export type TtsModelOverrideConfig = { /** Enable model-provided overrides for TTS. */ enabled?: boolean; /** Allow model-provided TTS text blocks. */ allowText?: boolean; /** Allow model-provided provider override. */ allowProvider?: boolean; /** Allow model-provided voice/voiceId override. */ allowVoice?: boolean; /** Allow model-provided modelId override. */ allowModelId?: boolean; /** Allow model-provided voice settings override. */ allowVoiceSettings?: boolean; /** Allow model-provided normalization or language overrides. */ allowNormalization?: boolean; /** Allow model-provided seed override. */ allowSeed?: boolean; }; export type TtsConfig = { /** Auto-TTS mode (preferred). */ auto?: TtsAutoMode; /** Legacy: enable auto-TTS when `auto` is not set. */ enabled?: boolean; /** Apply TTS to final replies only or to all replies (tool/block/final). */ mode?: TtsMode; /** Primary TTS provider (fallbacks are automatic). */ provider?: TtsProvider; /** Optional model override for TTS auto-summary (provider/model or alias). */ summaryModel?: string; /** Allow the model to override TTS parameters. */ modelOverrides?: TtsModelOverrideConfig; /** ElevenLabs configuration. */ elevenlabs?: { apiKey?: string; baseUrl?: string; voiceId?: string; modelId?: string; seed?: number; applyTextNormalization?: "auto" | "on" | "off"; languageCode?: string; voiceSettings?: { stability?: number; similarityBoost?: number; style?: number; useSpeakerBoost?: boolean; speed?: number; }; }; /** OpenAI configuration. */ openai?: { apiKey?: string; model?: string; voice?: string; }; /** Microsoft Edge (node-edge-tts) configuration. */ edge?: { /** Explicitly allow Edge TTS usage (no API key required). */ enabled?: boolean; voice?: string; lang?: string; outputFormat?: string; pitch?: string; rate?: string; volume?: string; saveSubtitles?: boolean; proxy?: string; timeoutMs?: number; }; /** Optional path for local TTS user preferences JSON. */ prefsPath?: string; /** Hard cap for text sent to TTS (chars). */ maxTextLength?: number; /** API request timeout (ms). */ timeoutMs?: number; };