
























@@ -1,3 +1,4 @@
1+import { normalizeProviderId } from "@openclaw/model-catalog-core/provider-id";
12import { resolveProviderAuthAliasMap } from "../agents/provider-auth-aliases.js";
23import type { OpenClawConfig } from "../config/types.openclaw.js";
34import { normalizePluginsConfig } from "../plugins/config-state.js";
@@ -12,6 +13,7 @@ import {
1213loadPluginMetadataSnapshot,
1314type PluginMetadataSnapshot,
1415} from "../plugins/plugin-metadata-snapshot.js";
16+import { listSetupProviderIds } from "../plugins/setup-descriptors.js";
1517import { hasKind } from "../plugins/slots.js";
1618import { uniqueStrings } from "../shared/string-normalization.js";
1719@@ -52,6 +54,7 @@ export type ProviderAuthLookupMaps = {
5254aliasMap: Readonly<Record<string, string>>;
5355envCandidateMap: Readonly<Record<string, readonly string[]>>;
5456authEvidenceMap: Readonly<Record<string, readonly ProviderAuthEvidence[]>>;
57+setupProviderFallbackRefs: readonly string[];
5558};
56595760function isWorkspacePluginTrustedForProviderEnvVars(
@@ -129,6 +132,13 @@ function appendUniqueAuthEvidence(
129132}
130133}
131134135+function appendUniqueProviderRef(target: Set<string>, providerId: string): void {
136+const normalized = normalizeProviderId(providerId);
137+if (normalized) {
138+target.add(normalized);
139+}
140+}
141+132142function resolveProviderMetadataSnapshot(
133143params?: ProviderEnvVarLookupParams,
134144): PluginMetadataSnapshot {
@@ -260,6 +270,37 @@ function resolveManifestProviderAuthEvidenceFromSnapshot(
260270return evidenceByProvider;
261271}
262272273+function resolveManifestSetupProviderFallbackRefsFromSnapshot(
274+params: ProviderEnvVarLookupParams | undefined,
275+snapshot: PluginMetadataSnapshot,
276+aliases: Readonly<Record<string, string>>,
277+): string[] {
278+const refs = new Set<string>();
279+for (const plugin of snapshot.plugins) {
280+if (
281+snapshot.index.plugins.length > 0 &&
282+!isInstalledPluginEnabled(snapshot.index, plugin.id, params?.config)
283+) {
284+continue;
285+}
286+if (plugin.setup?.requiresRuntime === false) {
287+continue;
288+}
289+if (plugin.setup?.providers === undefined && plugin.providers === undefined) {
290+continue;
291+}
292+for (const providerId of listSetupProviderIds(plugin)) {
293+appendUniqueProviderRef(refs, providerId);
294+}
295+}
296+for (const [alias, target] of Object.entries(aliases)) {
297+if (refs.has(target)) {
298+appendUniqueProviderRef(refs, alias);
299+}
300+}
301+return [...refs].toSorted((a, b) => a.localeCompare(b));
302+}
303+263304export function resolveProviderAuthEnvVarCandidates(
264305params?: ProviderEnvVarLookupParams,
265306): Record<string, readonly string[]> {
@@ -291,6 +332,11 @@ export function resolveProviderAuthLookupMaps(
291332 ...CORE_PROVIDER_AUTH_ENV_VAR_CANDIDATES,
292333},
293334authEvidenceMap: resolveManifestProviderAuthEvidenceFromSnapshot(params, snapshot, aliasMap),
335+setupProviderFallbackRefs: resolveManifestSetupProviderFallbackRefsFromSnapshot(
336+params,
337+snapshot,
338+aliasMap,
339+),
294340};
295341}
296342此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。