diff --git a/src/agents/models-config.ts b/src/agents/models-config.ts index 45a4bdd6a2f..3cf4d68f635 100644 --- a/src/agents/models-config.ts +++ b/src/agents/models-config.ts @@ -172,12 +172,14 @@ export async function ensureOpenClawModelsJson( (agentDirOverride?.trim() ? undefined : resolveAgentWorkspaceDir(cfg, resolveDefaultAgentId(cfg))); + const providerScopedDiscovery = Boolean(options.providerDiscoveryProviderIds?.length); const pluginMetadataSnapshot = options.pluginMetadataSnapshot ?? resolvePluginMetadataSnapshot({ config: cfg, env: createConfigRuntimeEnv(cfg), ...(workspaceDir ? { workspaceDir } : {}), + ...(providerScopedDiscovery ? { preferPersisted: false } : {}), }); const agentDir = agentDirOverride?.trim() ? agentDirOverride.trim() : resolveDefaultAgentDir(cfg); const targetPath = path.join(agentDir, "models.json"); diff --git a/src/agents/models-config.write-serialization.test.ts b/src/agents/models-config.write-serialization.test.ts index 70cd8158268..e37fb017735 100644 --- a/src/agents/models-config.write-serialization.test.ts +++ b/src/agents/models-config.write-serialization.test.ts @@ -176,6 +176,23 @@ describe("models-config write serialization", () => { }); }); + it("does not reuse persisted plugin metadata for provider-scoped discovery", async () => { + await withModelsTempHome(async (home) => { + const workspaceDir = path.join(home, "agent-workspace"); + const snapshot = createPluginMetadataSnapshot(workspaceDir); + setCurrentPluginMetadataSnapshot(snapshot, { config: {} }); + const agentDir = path.join(home, "agent-non-default"); + + await ensureOpenClawModelsJson({}, agentDir, { + workspaceDir, + providerDiscoveryProviderIds: ["google"], + }); + + const params = planParamsAt(0); + expect(params.pluginMetadataSnapshot).not.toBe(snapshot); + }); + }); + it("writes implicit models.json into the configured default agent dir", async () => { await withModelsTempHome(async (home) => { const cfg = {