From 5d5bc5c84d6d544f371c1b164851ae463d2bf534 Mon Sep 17 00:00:00 2001 From: joshp123 Date: Sat, 6 Jun 2026 23:07:03 +0200 Subject: [PATCH] Revert "Fix talk config secret resolution" This reverts commit 4500f02fe684497ba622443fc2553b0ea3a08d2c. --- src/gateway/server-methods/talk.test.ts | 67 ------------------------- src/gateway/server-methods/talk.ts | 6 ++- 2 files changed, 5 insertions(+), 68 deletions(-) diff --git a/src/gateway/server-methods/talk.test.ts b/src/gateway/server-methods/talk.test.ts index c71ff3094d3e..733fc95e7cfa 100644 --- a/src/gateway/server-methods/talk.test.ts +++ b/src/gateway/server-methods/talk.test.ts @@ -516,73 +516,6 @@ describe("talk.config handler", () => { expectRecordFields(resolved, { provider: "acme" }); expectRecordFields(resolved?.config, { apiKey: "__OPENCLAW_REDACTED__" }); }); - - it("returns runtime-resolved talk provider secrets to scoped clients", async () => { - const sourceConfig = { - talk: { - provider: "acme", - providers: { - acme: { - apiKey: { source: "env", provider: "default", id: "ACME_SPEECH_API_KEY" }, - speakerVoiceId: "talk-speaker-id", - }, - }, - }, - } as OpenClawConfig; - const runtimeConfig = { - talk: { - provider: "acme", - providers: { - acme: { - apiKey: "env-acme-key", - speakerVoiceId: "talk-speaker-id", - }, - }, - }, - } as OpenClawConfig; - - mocks.readConfigFileSnapshot.mockResolvedValue({ - path: "/tmp/openclaw.json", - hash: "test-hash", - valid: true, - config: sourceConfig, - }); - mocks.getSpeechProvider.mockReturnValue({ - id: "acme", - label: "Acme Strict Speech", - resolveTalkConfig: ({ - talkProviderConfig, - }: { - talkProviderConfig: Record; - }) => { - expectRecordFields(talkProviderConfig, { - apiKey: "env-acme-key", - speakerVoiceId: "talk-speaker-id", - voiceId: "talk-speaker-id", - }); - return talkProviderConfig; - }, - }); - - const respond = vi.fn(); - await talkHandlers["talk.config"]({ - req: { type: "req", id: "1", method: "talk.config" }, - params: { includeSecrets: true }, - client: { connect: { scopes: ["operator.read", "operator.talk.secrets"] } } as never, - isWebchatConnect: () => false, - respond: respond as never, - context: { getRuntimeConfig: () => runtimeConfig } as never, - }); - - const response = expectRespondOk(respond) as { config?: { talk?: Record } }; - const resolved = response.config?.talk?.resolved as Record | undefined; - expectRecordFields(resolved, { provider: "acme" }); - expectRecordFields(resolved?.config, { - apiKey: "env-acme-key", - speakerVoiceId: "talk-speaker-id", - voiceId: "talk-speaker-id", - }); - }); }); describe("talk.session unified handlers", () => { diff --git a/src/gateway/server-methods/talk.ts b/src/gateway/server-methods/talk.ts index 25187a65d64a..f5cd0ba339ff 100644 --- a/src/gateway/server-methods/talk.ts +++ b/src/gateway/server-methods/talk.ts @@ -411,6 +411,10 @@ function resolveTalkResponseFromConfig(params: { return undefined; } + if (params.includeSecrets) { + return payload; + } + const sourceResolved = resolveActiveTalkProviderConfig(normalizedTalk); const runtimeResolved = resolveActiveTalkProviderConfig(params.runtimeConfig.talk); const activeProviderId = sourceResolved?.provider ?? runtimeResolved?.provider; @@ -449,7 +453,7 @@ function resolveTalkResponseFromConfig(params: { timeoutMs: typeof selectedBaseTts.timeoutMs === "number" ? selectedBaseTts.timeoutMs : 30_000, }) ?? providerInputConfig; const responseConfig = - params.includeSecrets || sourceProviderConfig.apiKey === undefined + sourceProviderConfig.apiKey === undefined ? resolvedConfig : { ...resolvedConfig, apiKey: sourceProviderConfig.apiKey };