From 64408823ae639fea56de5aaec5fef7b16407c53f Mon Sep 17 00:00:00 2001 From: trafgals Date: Fri, 3 Apr 2026 11:51:22 +1000 Subject: [PATCH] fix: actually swap merge order so project is added before user Previous fix only changed comments, not logic. Now project agents are added to the map before user agents, so project takes precedence. --- src/tools/delegate-task/subagent-resolver.test.ts | 11 +++++++++++ src/tools/delegate-task/subagent-resolver.ts | 10 +++++----- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/tools/delegate-task/subagent-resolver.test.ts b/src/tools/delegate-task/subagent-resolver.test.ts index fe769df5f..013a256ed 100644 --- a/src/tools/delegate-task/subagent-resolver.test.ts +++ b/src/tools/delegate-task/subagent-resolver.test.ts @@ -624,6 +624,13 @@ describe("resolveSubagentExecution", () => { test("project agent takes precedence over user agent with same name", async () => { //#given + const cacheSpy = spyOn(connectedProvidersCache, "readProviderModelsCache").mockReturnValue({ + models: { minimaxi: ["MiniMax-M2.7-highspeed", "claude-3-haiku"] }, + connected: ["minimaxi"], + updatedAt: "2026-03-03T00:00:00.000Z", + }) + const connectedSpy = spyOn(connectedProvidersCache, "readConnectedProvidersCache").mockReturnValue(["minimaxi"]) + mockLoadUserAgents.mockReturnValue({ "my-custom-agent": { description: "User agent", @@ -650,6 +657,10 @@ describe("resolveSubagentExecution", () => { //#then expect(result.error).toBeUndefined() expect(result.agentToUse).toBe("my-custom-agent") + expect(result.categoryModel?.modelID).toBe("MiniMax-M2.7-highspeed") + + cacheSpy.mockRestore() + connectedSpy.mockRestore() }) test("filters out primary agents from user/project when resolving", async () => { diff --git a/src/tools/delegate-task/subagent-resolver.ts b/src/tools/delegate-task/subagent-resolver.ts index 21d04f470..b8d729183 100644 --- a/src/tools/delegate-task/subagent-resolver.ts +++ b/src/tools/delegate-task/subagent-resolver.ts @@ -84,7 +84,7 @@ Create the work plan directly - that's your job as the planning agent.`, })) // Merge user and project agents into the server's agent list - // Server agents take precedence; user/project agents fill in gaps + // Server agents take precedence; project agents override user agents const mergedAgentMap = new Map() // First add server agents (they take precedence) @@ -92,15 +92,15 @@ Create the work plan directly - that's your job as the planning agent.`, mergedAgentMap.set(agent.name.toLowerCase(), agent) } - // Then add user agents (server/project agents win on collision) - for (const agent of userAgentsList) { + // Then add project agents (overrides user agents, server wins on collision) + for (const agent of projectAgentsList) { if (!mergedAgentMap.has(agent.name.toLowerCase())) { mergedAgentMap.set(agent.name.toLowerCase(), agent) } } - // Then add project agents (overrides user agents, server wins on collision) - for (const agent of projectAgentsList) { + // Then add user agents (only if not already added by server or project) + for (const agent of userAgentsList) { if (!mergedAgentMap.has(agent.name.toLowerCase())) { mergedAgentMap.set(agent.name.toLowerCase(), agent) }