refactor: use generic web search runtime credential hooks · openclaw/openclaw@89741c7
steipete
·
2026-04-22
·
via Recent Commits to openclaw:main
3 files changed
lines changed
| Original file line number | Diff line number | Diff line change |
|---|
@@ -70,6 +70,10 @@ const CORE_SECRET_SURFACE_GUARDS = [
|
70 | 70 | path: "src/flows/search-setup.ts", |
71 | 71 | forbiddenPatterns: [/\bbrave\b/], |
72 | 72 | }, |
| 73 | +{ |
| 74 | +path: "src/web-search/runtime.ts", |
| 75 | +forbiddenPatterns: [/\bbrave\b/], |
| 76 | +}, |
73 | 77 | { |
74 | 78 | path: "src/media-understanding/defaults.ts", |
75 | 79 | forbiddenPatterns: [ |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -155,6 +155,39 @@ describe("web search runtime", () => {
|
155 | 155 | }); |
156 | 156 | }); |
157 | 157 | |
| 158 | +it("auto-detects a provider through its legacy search config reader", async () => { |
| 159 | +const provider = createCustomSearchProvider({ |
| 160 | +getConfiguredCredentialValue: () => undefined, |
| 161 | +getCredentialValue: (searchConfig) => |
| 162 | +(searchConfig?.customLegacy && |
| 163 | +typeof searchConfig.customLegacy === "object" && |
| 164 | +!Array.isArray(searchConfig.customLegacy) |
| 165 | + ? (searchConfig.customLegacy as Record<string, unknown>) |
| 166 | + : undefined |
| 167 | +)?.apiKey, |
| 168 | +}); |
| 169 | +resolveRuntimeWebSearchProvidersMock.mockReturnValue([provider]); |
| 170 | +resolvePluginWebSearchProvidersMock.mockReturnValue([provider]); |
| 171 | + |
| 172 | +await expect( |
| 173 | +runWebSearch({ |
| 174 | +config: { |
| 175 | +tools: { |
| 176 | +web: { |
| 177 | +search: { |
| 178 | +customLegacy: { apiKey: "legacy-key" }, |
| 179 | +} as never, |
| 180 | +}, |
| 181 | +}, |
| 182 | +}, |
| 183 | +args: { query: "hello" }, |
| 184 | +}), |
| 185 | +).resolves.toEqual({ |
| 186 | +provider: "custom", |
| 187 | +result: { query: "hello", ok: true }, |
| 188 | +}); |
| 189 | +}); |
| 190 | + |
158 | 191 | it("treats non-env SecretRefs as configured credentials for provider auto-detect", async () => { |
159 | 192 | const provider = createCustomSearchProvider(); |
160 | 193 | resolveRuntimeWebSearchProvidersMock.mockReturnValue([provider]); |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -73,7 +73,7 @@ function hasEntryCredential(
|
73 | 73 | toolConfig: search as Record<string, unknown> | undefined, |
74 | 74 | resolveRawValue: ({ provider: currentProvider, config: currentConfig, toolConfig }) => |
75 | 75 | currentProvider.getConfiguredCredentialValue?.(currentConfig) ?? |
76 | | -(currentProvider.id === "brave" ? currentProvider.getCredentialValue(toolConfig) : undefined), |
| 76 | +currentProvider.getCredentialValue(toolConfig), |
77 | 77 | resolveEnvValue: ({ provider: currentProvider, configuredEnvVarId }) => |
78 | 78 | (configuredEnvVarId ? readWebProviderEnvValue([configuredEnvVarId]) : undefined) ?? |
79 | 79 | readWebProviderEnvValue(currentProvider.envVars), |
|
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。