

















@@ -8,6 +8,7 @@ import { normalizeProviders } from "./models-config.providers.normalize.js";
88import { resolveApiKeyFromProfiles } from "./models-config.providers.secret-helpers.js";
99import { enforceSourceManagedProviderSecrets } from "./models-config.providers.source-managed.js";
101011+// Covers provider-key canonicalization plus secret marker persistence safeguards.
1112function normalizeLmstudioBaseUrl(baseUrl: string): string {
1213const trimmed = baseUrl.trim().replace(/\/+$/, "");
1314return trimmed.replace(/\/api\/v1$/, "").replace(/\/v1$/, "") + "/v1";
@@ -20,6 +21,7 @@ vi.mock("./models-config.providers.policy.runtime.js", () => {
2021providerKey: string,
2122provider: { baseUrl?: unknown } | undefined,
2223) =>
24+// Keep the test focused on normalizeProviders while preserving LM Studio policy behavior.
2325providerKey === "lmstudio" && typeof provider?.baseUrl === "string"
2426 ? { ...provider, baseUrl: normalizeLmstudioBaseUrl(provider.baseUrl) }
2527 : undefined,
@@ -33,6 +35,7 @@ describe("normalizeProviders", () => {
3335NonNullable<NonNullable<OpenClawConfig["models"]>["providers"]>[string]["models"][number]
3436> = {},
3537) => ({
38+// Compact default model row reused by normalization cases that only vary ids.
3639id: "config-model",
3740name: "Config model",
3841input: ["text"] as Array<"text" | "image">,
@@ -193,6 +196,7 @@ describe("normalizeProviders", () => {
193196const normalized = normalizeProviders({ providers, agentDir });
194197195198expect(normalized?.google?.models).toHaveLength(1);
199+// The first normalized row wins so explicit config details are not replaced by discovery.
196200const model = normalized?.google?.models?.[0];
197201expect(model?.id).toBe("gemini-3.1-pro-preview");
198202expect(model?.name).toBe("Pinned Gemini");
@@ -337,6 +341,7 @@ describe("normalizeProviders", () => {
337341 providers,
338342 agentDir,
339343});
344+// Env refs persist the env-name marker; non-env refs collapse to a non-secret sentinel.
340345expect(normalized?.openai?.headers?.Authorization).toBe("secretref-env:OPENAI_HEADER_TOKEN");
341346expect(normalized?.openai?.headers?.["X-Tenant-Token"]).toBe(NON_ENV_SECRETREF_MARKER);
342347} finally {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。