From f731e3754c6396919929758044b9a3a8e68d034c Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 25 Apr 2026 22:17:25 +0100 Subject: [PATCH] fix: lazy-load Microsoft Edge TTS runtime --- extensions/microsoft/tts.ts | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/extensions/microsoft/tts.ts b/extensions/microsoft/tts.ts index 63ed73d8bd6..bfc2dc3b549 100644 --- a/extensions/microsoft/tts.ts +++ b/extensions/microsoft/tts.ts @@ -1,16 +1,28 @@ import { statSync } from "node:fs"; -import { EdgeTTS } from "node-edge-tts"; import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/text-runtime"; +type EdgeTTSRuntimeConfig = { + voice?: string; + lang?: string; + outputFormat?: string; + saveSubtitles?: boolean; + proxy?: string; + rate?: string; + pitch?: string; + volume?: string; + timeout?: number; +}; + type EdgeTTSDeps = { - EdgeTTS: new (config: ConstructorParameters[0]) => { + EdgeTTS: new (config: EdgeTTSRuntimeConfig) => { ttsPromise: (text: string, outputPath: string) => Promise; }; }; -const defaultEdgeTTSDeps: EdgeTTSDeps = { - EdgeTTS, -}; +async function loadDefaultEdgeTTSDeps(): Promise { + const { EdgeTTS } = await import("node-edge-tts"); + return { EdgeTTS }; +} export function inferEdgeExtension(outputFormat: string): string { const normalized = normalizeLowercaseStringOrEmpty(outputFormat); @@ -46,10 +58,11 @@ export async function edgeTTS( }; timeoutMs: number; }, - deps: EdgeTTSDeps = defaultEdgeTTSDeps, + deps?: EdgeTTSDeps, ): Promise { const { text, outputPath, config, timeoutMs } = params; - const tts = new deps.EdgeTTS({ + const resolvedDeps = deps ?? (await loadDefaultEdgeTTSDeps()); + const tts = new resolvedDeps.EdgeTTS({ voice: config.voice, lang: config.lang, outputFormat: config.outputFormat,