diff --git a/CHANGELOG.md b/CHANGELOG.md index 4220eb94662..ec2e261675a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -69,6 +69,7 @@ Docs: https://docs.openclaw.ai ### Fixes +- Talk/TTS: resolve configured extension speech providers from the active runtime registry before provider-list discovery, so Talk mode no longer rejects valid plugin speech providers as unsupported. - Sessions/subagents: stop stale ended runs and old store-only child reverse links from reappearing in `childSessions`, while keeping live descendants and recently-ended children visible. Fixes #57920. - Subagents: stop stale unended runs from counting as active or pending forever, while preserving restart-aborted recovery for recoverable child sessions. Fixes #71252. Thanks @hclsys. - Gateway/tools: allow `POST /tools/invoke` to reach plugin-backed catalog tools such as `browser` when no core implementation exists, while still preferring built-in tools for real core names. Thanks @chat2way. diff --git a/src/tts/provider-registry.ts b/src/tts/provider-registry.ts index c145727047c..f43a746fd87 100644 --- a/src/tts/provider-registry.ts +++ b/src/tts/provider-registry.ts @@ -1,5 +1,8 @@ import type { OpenClawConfig } from "../config/types.js"; -import { resolvePluginCapabilityProviders } from "../plugins/capability-provider-runtime.js"; +import { + resolvePluginCapabilityProvider, + resolvePluginCapabilityProviders, +} from "../plugins/capability-provider-runtime.js"; import { buildCapabilityProviderMaps, normalizeCapabilityProviderId, @@ -39,7 +42,13 @@ export function getSpeechProvider( if (!normalized) { return undefined; } - return buildProviderMaps(cfg).aliases.get(normalized); + return ( + resolvePluginCapabilityProvider({ + key: "speechProviders", + providerId: normalized, + cfg, + }) ?? buildProviderMaps(cfg).aliases.get(normalized) + ); } export function canonicalizeSpeechProviderId(