



















@@ -1,3 +1,8 @@
1+import {
2+getRuntimeConfigSnapshot,
3+getRuntimeConfigSourceSnapshot,
4+selectApplicableRuntimeConfig,
5+} from "../config/runtime-snapshot.js";
16import type { OpenClawConfig } from "../config/types.openclaw.js";
27import { logVerbose } from "../globals.js";
38import type {
@@ -41,6 +46,14 @@ function resolveSearchConfig(cfg?: OpenClawConfig): WebSearchConfig {
4146return resolveWebProviderConfig(cfg, "search") as NonNullable<WebSearchConfig> | undefined;
4247}
434849+function resolveWebSearchRuntimeConfig(config?: OpenClawConfig): OpenClawConfig | undefined {
50+return selectApplicableRuntimeConfig({
51+inputConfig: config,
52+runtimeConfig: getRuntimeConfigSnapshot(),
53+runtimeSourceConfig: getRuntimeConfigSourceSnapshot(),
54+});
55+}
56+4457export function resolveWebSearchEnabled(params: {
4558search?: WebSearchConfig;
4659sandboxed?: boolean;
@@ -91,23 +104,26 @@ export function isWebSearchProviderConfigured(params: {
91104>;
92105config?: OpenClawConfig;
93106}): boolean {
94-return hasEntryCredential(params.provider, params.config, resolveSearchConfig(params.config));
107+const config = resolveWebSearchRuntimeConfig(params.config);
108+return hasEntryCredential(params.provider, config, resolveSearchConfig(config));
95109}
9611097111export function listWebSearchProviders(params?: {
98112config?: OpenClawConfig;
99113}): PluginWebSearchProviderEntry[] {
114+const config = resolveWebSearchRuntimeConfig(params?.config);
100115return resolveRuntimeWebSearchProviders({
101-config: params?.config,
116+ config,
102117bundledAllowlistCompat: true,
103118});
104119}
105120106121export function listConfiguredWebSearchProviders(params?: {
107122config?: OpenClawConfig;
108123}): PluginWebSearchProviderEntry[] {
124+const config = resolveWebSearchRuntimeConfig(params?.config);
109125return resolvePluginWebSearchProviders({
110-config: params?.config,
126+ config,
111127bundledAllowlistCompat: true,
112128});
113129}
@@ -117,18 +133,18 @@ export function resolveWebSearchProviderId(params: {
117133config?: OpenClawConfig;
118134providers?: PluginWebSearchProviderEntry[];
119135}): string {
136+const config = resolveWebSearchRuntimeConfig(params.config);
137+const search = params.search ?? resolveSearchConfig(config);
120138const providers = sortWebSearchProvidersForAutoDetect(
121139params.providers ??
122140resolvePluginWebSearchProviders({
123-config: params.config,
141+ config,
124142bundledAllowlistCompat: true,
125143origin: "bundled",
126144}),
127145);
128146const raw =
129-params.search && "provider" in params.search
130- ? normalizeLowercaseStringOrEmpty(params.search.provider)
131- : "";
147+search && "provider" in search ? normalizeLowercaseStringOrEmpty(search.provider) : "";
132148133149if (raw) {
134150const explicit = providers.find((provider) => provider.id === raw);
@@ -144,7 +160,7 @@ export function resolveWebSearchProviderId(params: {
144160keylessFallbackProviderId ||= provider.id;
145161continue;
146162}
147-if (!hasEntryCredential(provider, params.config, params.search)) {
163+if (!hasEntryCredential(provider, config, search)) {
148164continue;
149165}
150166logVerbose(
@@ -166,22 +182,23 @@ export function resolveWebSearchProviderId(params: {
166182export function resolveWebSearchDefinition(
167183options?: ResolveWebSearchDefinitionParams,
168184): { provider: PluginWebSearchProviderEntry; definition: WebSearchProviderToolDefinition } | null {
169-const search = resolveSearchConfig(options?.config);
185+const config = resolveWebSearchRuntimeConfig(options?.config);
186+const search = resolveSearchConfig(config);
170187const runtimeWebSearch = options?.runtimeWebSearch ?? getActiveRuntimeWebToolsMetadata()?.search;
171188const providers = sortWebSearchProvidersForAutoDetect(
172189options?.preferRuntimeProviders
173190 ? resolveRuntimeWebSearchProviders({
174-config: options?.config,
191+ config,
175192bundledAllowlistCompat: true,
176193})
177194 : resolvePluginWebSearchProviders({
178-config: options?.config,
195+ config,
179196bundledAllowlistCompat: true,
180197origin: "bundled",
181198}),
182199);
183200return resolveWebProviderDefinition({
184-config: options?.config,
201+ config,
185202toolConfig: search as Record<string, unknown> | undefined,
186203runtimeMetadata: runtimeWebSearch,
187204sandboxed: options?.sandboxed,
@@ -216,7 +233,8 @@ export function resolveWebSearchDefinition(
216233function resolveWebSearchCandidates(
217234options?: ResolveWebSearchDefinitionParams,
218235): PluginWebSearchProviderEntry[] {
219-const search = resolveSearchConfig(options?.config);
236+const config = resolveWebSearchRuntimeConfig(options?.config);
237+const search = resolveSearchConfig(config);
220238const runtimeWebSearch = options?.runtimeWebSearch ?? getActiveRuntimeWebToolsMetadata()?.search;
221239if (!resolveWebSearchEnabled({ search, sandboxed: options?.sandboxed })) {
222240return [];
@@ -225,11 +243,11 @@ function resolveWebSearchCandidates(
225243const providers = sortWebSearchProvidersForAutoDetect(
226244options?.preferRuntimeProviders
227245 ? resolveRuntimeWebSearchProviders({
228-config: options?.config,
246+ config,
229247bundledAllowlistCompat: true,
230248})
231249 : resolvePluginWebSearchProviders({
232-config: options?.config,
250+ config,
233251bundledAllowlistCompat: true,
234252origin: "bundled",
235253}),
@@ -242,7 +260,7 @@ function resolveWebSearchCandidates(
242260options?.providerId,
243261runtimeWebSearch?.selectedProvider,
244262runtimeWebSearch?.providerConfigured,
245-resolveWebSearchProviderId({ config: options?.config, search, providers }),
263+resolveWebSearchProviderId({ config, search, providers }),
246264].filter(
247265(value, index, array): value is string => Boolean(value) && array.indexOf(value) === index,
248266);
@@ -294,10 +312,12 @@ function hasExplicitWebSearchSelection(params: {
294312}
295313296314export async function runWebSearch(params: RunWebSearchParams): Promise<RunWebSearchResult> {
297-const search = resolveSearchConfig(params.config);
315+const config = resolveWebSearchRuntimeConfig(params.config);
316+const search = resolveSearchConfig(config);
298317const runtimeWebSearch = params.runtimeWebSearch ?? getActiveRuntimeWebToolsMetadata()?.search;
299318const candidates = resolveWebSearchCandidates({
300319 ...params,
320+ config,
301321 runtimeWebSearch,
302322preferRuntimeProviders: params.preferRuntimeProviders ?? true,
303323});
@@ -316,7 +336,7 @@ export async function runWebSearch(params: RunWebSearchParams): Promise<RunWebSe
316336for (const candidate of candidates) {
317337try {
318338const definition = candidate.createTool({
319-config: params.config,
339+ config,
320340searchConfig: search as Record<string, unknown> | undefined,
321341runtimeMetadata: runtimeWebSearch,
322342});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。