From 0fbf4636f52c8968033dc3a7df69ee6f53893a34 Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Sat, 2 May 2026 14:31:32 -0700 Subject: [PATCH] fix(plugins): suppress mirrored provider env warnings --- extensions/brave/openclaw.plugin.json | 9 +++++++++ src/plugins/manifest-registry.test.ts | 29 +++++++++++++++++++++++++++ src/plugins/manifest-registry.ts | 13 +++++++++++- 3 files changed, 50 insertions(+), 1 deletion(-) diff --git a/extensions/brave/openclaw.plugin.json b/extensions/brave/openclaw.plugin.json index be8204f1257..c5a04923080 100644 --- a/extensions/brave/openclaw.plugin.json +++ b/extensions/brave/openclaw.plugin.json @@ -6,6 +6,15 @@ "providerAuthEnvVars": { "brave": ["BRAVE_API_KEY"] }, + "setup": { + "providers": [ + { + "id": "brave", + "authMethods": ["api-key"], + "envVars": ["BRAVE_API_KEY"] + } + ] + }, "uiHints": { "webSearch.apiKey": { "label": "Brave Search API Key", diff --git a/src/plugins/manifest-registry.test.ts b/src/plugins/manifest-registry.test.ts index 5fd6581d657..e3e77402a70 100644 --- a/src/plugins/manifest-registry.test.ts +++ b/src/plugins/manifest-registry.test.ts @@ -923,6 +923,35 @@ describe("loadPluginManifestRegistry", () => { ); }); + it("does not report deprecated providerAuthEnvVars when setup providers mirror env vars", () => { + const dir = makeTempDir(); + writeManifest(dir, { + id: "external-openai", + providers: ["openai"], + setup: { + providers: [{ id: "openai", envVars: ["OPENAI_API_KEY"] }], + }, + providerAuthEnvVars: { + openai: ["OPENAI_API_KEY"], + }, + configSchema: { type: "object" }, + }); + + const registry = loadSingleCandidateRegistry({ + idHint: "external-openai", + rootDir: dir, + origin: "global", + }); + + expect(registry.diagnostics).not.toContainEqual( + expect.objectContaining({ + message: expect.stringContaining( + "providerAuthEnvVars is deprecated compatibility metadata", + ), + }), + ); + }); + it("sanitizes manifest-controlled fields in provider auth compatibility diagnostics", () => { const dir = makeTempDir(); const lineBreak = String.fromCharCode(10); diff --git a/src/plugins/manifest-registry.ts b/src/plugins/manifest-registry.ts index e2377d08d02..98431c5d66b 100644 --- a/src/plugins/manifest-registry.ts +++ b/src/plugins/manifest-registry.ts @@ -425,8 +425,19 @@ function pushProviderAuthEnvVarsCompatDiagnostic(params: { if (params.record.origin === "bundled" || !params.record.providerAuthEnvVars) { return; } + const setupProviderEnvVars = new Map( + (params.record.setup?.providers ?? []).map( + (provider) => [provider.id, new Set(provider.envVars ?? [])] as const, + ), + ); const providerIds = Object.entries(params.record.providerAuthEnvVars) - .filter(([providerId, envVars]) => providerId.trim() && envVars.length > 0) + .filter(([providerId, envVars]) => { + if (!providerId.trim() || envVars.length === 0) { + return false; + } + const mirroredEnvVars = setupProviderEnvVars.get(providerId); + return !mirroredEnvVars || envVars.some((envVar) => !mirroredEnvVars.has(envVar)); + }) .map(([providerId]) => providerId) .toSorted((left, right) => left.localeCompare(right)); if (providerIds.length === 0) {