























@@ -121,7 +121,10 @@ function inferExactBundledPluginScopedWebToolConfigOwner(params: {
121121return isRecord(pluginConfig?.[params.key]) ? params.pluginId : undefined;
122122}
123123124-async function hasCustomWebSearchPluginRisk(params: {
124+type WebProviderContract = "webSearchProviders" | "webFetchProviders";
125+126+async function hasCustomWebProviderPluginRisk(params: {
127+contract: WebProviderContract;
125128config: OpenClawConfig;
126129env: NodeJS.ProcessEnv;
127130}): Promise<boolean> {
@@ -143,7 +146,7 @@ async function hasCustomWebSearchPluginRisk(params: {
143146const { resolveManifestContractPluginIds } = await loadRuntimeWebToolsManifest();
144147const bundledPluginIds = new Set<string>(
145148resolveManifestContractPluginIds({
146-contract: "webSearchProviders",
149+contract: params.contract,
147150origin: "bundled",
148151config: params.config,
149152env: params.env,
@@ -377,6 +380,7 @@ async function resolveBundledWebFetchProviders(params: {
377380sourceConfig: OpenClawConfig;
378381context: ResolverContext;
379382configuredBundledPluginId?: string;
383+hasCustomWebFetchPluginRisk: boolean;
380384}): Promise<PluginWebFetchProviderEntry[]> {
381385const env = { ...process.env, ...params.context.env };
382386if (params.configuredBundledPluginId) {
@@ -395,15 +399,24 @@ async function resolveBundledWebFetchProviders(params: {
395399origin: "bundled",
396400});
397401}
398-const { resolveBundledWebFetchProvidersFromPublicArtifacts } =
399-await loadRuntimeWebToolsPublicArtifacts();
400-const bundled = resolveBundledWebFetchProvidersFromPublicArtifacts({
401-config: params.sourceConfig,
402- env,
403-bundledAllowlistCompat: true,
404-});
405-if (bundled && bundled.length > 0) {
406-return bundled;
402+if (!params.hasCustomWebFetchPluginRisk) {
403+const { resolveBundledWebFetchProvidersFromPublicArtifacts } =
404+await loadRuntimeWebToolsPublicArtifacts();
405+const bundled = resolveBundledWebFetchProvidersFromPublicArtifacts({
406+config: params.sourceConfig,
407+ env,
408+bundledAllowlistCompat: true,
409+});
410+if (bundled && bundled.length > 0) {
411+return bundled;
412+}
413+const { resolvePluginWebFetchProviders } = await loadRuntimeWebToolsFallbackProviders();
414+return resolvePluginWebFetchProviders({
415+config: params.sourceConfig,
416+ env,
417+bundledAllowlistCompat: true,
418+origin: "bundled",
419+});
407420}
408421const { resolvePluginWebFetchProviders } = await loadRuntimeWebToolsFallbackProviders();
409422return resolvePluginWebFetchProviders({
@@ -481,12 +494,22 @@ export async function resolveRuntimeWebTools(params: {
481494const resolvedWeb = isRecord(resolvedTools?.web) ? resolvedTools.web : undefined;
482495let hasCustomWebSearchRisk: Promise<boolean> | undefined;
483496const getHasCustomWebSearchRisk = (): Promise<boolean> => {
484-hasCustomWebSearchRisk ??= hasCustomWebSearchPluginRisk({
497+hasCustomWebSearchRisk ??= hasCustomWebProviderPluginRisk({
498+contract: "webSearchProviders",
485499config: params.sourceConfig,
486500 env,
487501});
488502return hasCustomWebSearchRisk;
489503};
504+let hasCustomWebFetchRisk: Promise<boolean> | undefined;
505+const getHasCustomWebFetchRisk = (): Promise<boolean> => {
506+hasCustomWebFetchRisk ??= hasCustomWebProviderPluginRisk({
507+contract: "webFetchProviders",
508+config: params.sourceConfig,
509+ env,
510+});
511+return hasCustomWebFetchRisk;
512+};
490513const legacyXSearchSource = isRecord(sourceWeb?.x_search) ? sourceWeb.x_search : undefined;
491514const legacyXSearchResolved = isRecord(resolvedWeb?.x_search) ? resolvedWeb.x_search : undefined;
492515@@ -670,11 +693,12 @@ export async function resolveRuntimeWebTools(params: {
670693invalidAutoDetectCode: "WEB_FETCH_PROVIDER_INVALID_AUTODETECT",
671694sourceConfig: params.sourceConfig,
672695context: params.context,
673-resolveProviders: ({ configuredBundledPluginId }) =>
696+resolveProviders: async ({ configuredBundledPluginId }) =>
674697resolveBundledWebFetchProviders({
675698sourceConfig: params.sourceConfig,
676699context: params.context,
677700 configuredBundledPluginId,
701+hasCustomWebFetchPluginRisk: await getHasCustomWebFetchRisk(),
678702}),
679703sortProviders: sortWebFetchProvidersForAutoDetect,
680704readConfiguredCredential: ({ provider, config, toolConfig }) =>
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。