|
1 | | -import type { OpenClawConfig } from "openclaw/plugin-sdk/config-contracts"; |
2 | 1 | import { isDiagnosticFlagEnabled } from "openclaw/plugin-sdk/diagnostic-runtime"; |
3 | 2 | import type { |
4 | 3 | SearchConfigRecord, |
5 | 4 | WebSearchProviderPlugin, |
6 | 5 | WebSearchProviderToolDefinition, |
7 | 6 | } from "openclaw/plugin-sdk/provider-web-search"; |
8 | 7 | import { |
9 | | - createWebSearchProviderContractFields, |
10 | 8 | mergeScopedSearchConfig, |
11 | 9 | resolveProviderWebSearchPluginConfig, |
12 | 10 | } from "openclaw/plugin-sdk/provider-web-search-config-contract"; |
13 | 11 | import { isRecord } from "openclaw/plugin-sdk/string-coerce-runtime"; |
14 | | - |
15 | | -const BRAVE_CREDENTIAL_PATH = "plugins.entries.brave.config.webSearch.apiKey"; |
| 12 | +import { buildBraveWebSearchProviderBase } from "../web-search-shared.js"; |
16 | 13 |
|
17 | 14 | type BraveWebSearchRuntime = typeof import("./brave-web-search-provider.runtime.js"); |
18 | 15 |
|
@@ -67,28 +64,6 @@ const BraveSearchSchema = { |
67 | 64 | }, |
68 | 65 | } satisfies Record<string, unknown>; |
69 | 66 |
|
70 | | -function resolveLegacyTopLevelBraveCredential( |
71 | | - config: OpenClawConfig | undefined, |
72 | | -): { path: string; value: unknown } | undefined { |
73 | | - if (!isRecord(config)) { |
74 | | - return undefined; |
75 | | - } |
76 | | - const tools = isRecord(config.tools) ? config.tools : undefined; |
77 | | - const web = isRecord(tools?.web) ? tools.web : undefined; |
78 | | - const search = isRecord(web?.search) ? web.search : undefined; |
79 | | - if (!search || !("apiKey" in search)) { |
80 | | - return undefined; |
81 | | - } |
82 | | - return { path: "tools.web.search.apiKey", value: search.apiKey }; |
83 | | -} |
84 | | - |
85 | | -function resolveConfiguredBraveCredential(config: OpenClawConfig | undefined): unknown { |
86 | | - return ( |
87 | | - resolveProviderWebSearchPluginConfig(config, "brave")?.apiKey ?? |
88 | | - resolveLegacyTopLevelBraveCredential(config)?.value |
89 | | - ); |
90 | | -} |
91 | | - |
92 | 67 | function resolveBraveMode(searchConfig?: Record<string, unknown>): "web" | "llm-context" { |
93 | 68 | const brave = isRecord(searchConfig?.brave) ? searchConfig.brave : undefined; |
94 | 69 | return brave?.mode === "llm-context" ? "llm-context" : "web"; |
@@ -116,24 +91,7 @@ function createBraveToolDefinition( |
116 | 91 |
|
117 | 92 | export function createBraveWebSearchProvider(): WebSearchProviderPlugin { |
118 | 93 | return { |
119 | | - id: "brave", |
120 | | - label: "Brave Search", |
121 | | - hint: "Structured results · country/language/time filters", |
122 | | - onboardingScopes: ["text-inference"], |
123 | | - credentialLabel: "Brave Search API key", |
124 | | - envVars: ["BRAVE_API_KEY"], |
125 | | - placeholder: "BSA...", |
126 | | - signupUrl: "https://brave.com/search/api/", |
127 | | - docsUrl: "https://docs.openclaw.ai/tools/brave-search", |
128 | | - autoDetectOrder: 10, |
129 | | - credentialPath: BRAVE_CREDENTIAL_PATH, |
130 | | - ...createWebSearchProviderContractFields({ |
131 | | - credentialPath: BRAVE_CREDENTIAL_PATH, |
132 | | - searchCredential: { type: "top-level" }, |
133 | | - configuredCredential: { pluginId: "brave" }, |
134 | | - }), |
135 | | - getConfiguredCredentialValue: resolveConfiguredBraveCredential, |
136 | | - getConfiguredCredentialFallback: resolveLegacyTopLevelBraveCredential, |
| 94 | + ...buildBraveWebSearchProviderBase(), |
137 | 95 | createTool: (ctx) => |
138 | 96 | createBraveToolDefinition( |
139 | 97 | mergeScopedSearchConfig( |
|
0 commit comments