From ba129784f5bbfd3a7ef95dd66212a383d44e2636 Mon Sep 17 00:00:00 2001 From: konaespresso94 Date: Sat, 31 Jan 2026 00:08:50 +0900 Subject: [PATCH] fix(agents): honor tools overrides via permission migration --- src/agents/utils.test.ts | 46 ++++++++++++++++++++++++++++++++++++++++ src/agents/utils.ts | 5 +++-- 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/src/agents/utils.test.ts b/src/agents/utils.test.ts index bb24f2f82..e6a1bbf54 100644 --- a/src/agents/utils.test.ts +++ b/src/agents/utils.test.ts @@ -523,3 +523,49 @@ describe("override.category expansion in createBuiltinAgents", () => { expect(agents.oracle.model).toBe(agentsWithoutOverride.oracle.model) }) }) + +describe("agent override tools migration", () => { + test("tools: { x: false } is migrated to permission: { x: deny }", async () => { + // #given + const overrides = { + explore: { tools: { "jetbrains_*": false } } as any, + } + + // #when + const agents = await createBuiltinAgents([], overrides, undefined, TEST_DEFAULT_MODEL) + + // #then + expect(agents.explore).toBeDefined() + const permission = agents.explore.permission as Record + expect(permission["jetbrains_*"]).toBe("deny") + }) + + test("tools: { x: true } is migrated to permission: { x: allow }", async () => { + // #given + const overrides = { + librarian: { tools: { "jetbrains_get_*": true } } as any, + } + + // #when + const agents = await createBuiltinAgents([], overrides, undefined, TEST_DEFAULT_MODEL) + + // #then + expect(agents.librarian).toBeDefined() + const permission = agents.librarian.permission as Record + expect(permission["jetbrains_get_*"]).toBe("allow") + }) + + test("tools config is removed after migration", async () => { + // #given + const overrides = { + explore: { tools: { "some_tool": false } } as any, + } + + // #when + const agents = await createBuiltinAgents([], overrides, undefined, TEST_DEFAULT_MODEL) + + // #then + expect(agents.explore).toBeDefined() + expect((agents.explore as any).tools).toBeUndefined() + }) +}) diff --git a/src/agents/utils.ts b/src/agents/utils.ts index 7e9f6169d..563600f2e 100644 --- a/src/agents/utils.ts +++ b/src/agents/utils.ts @@ -10,7 +10,7 @@ import { createMetisAgent } from "./metis" import { createAtlasAgent } from "./atlas" import { createMomusAgent } from "./momus" import type { AvailableAgent, AvailableCategory, AvailableSkill } from "./dynamic-agent-prompt-builder" -import { deepMerge, fetchAvailableModels, resolveModelWithFallback, AGENT_MODEL_REQUIREMENTS, findCaseInsensitive, includesCaseInsensitive, readConnectedProvidersCache } from "../shared" +import { deepMerge, fetchAvailableModels, resolveModelWithFallback, AGENT_MODEL_REQUIREMENTS, findCaseInsensitive, includesCaseInsensitive, readConnectedProvidersCache, migrateAgentConfig } from "../shared" import { DEFAULT_CATEGORIES, CATEGORY_DESCRIPTIONS } from "../tools/delegate-task/constants" import { resolveMultipleSkills } from "../features/opencode-skill-loader/skill-content" import { createBuiltinSkills } from "../features/builtin-skills" @@ -151,7 +151,8 @@ function mergeAgentConfig( base: AgentConfig, override: AgentOverrideConfig ): AgentConfig { - const { prompt_append, ...rest } = override + const migratedOverride = migrateAgentConfig(override as Record) as AgentOverrideConfig + const { prompt_append, ...rest } = migratedOverride const merged = deepMerge(base, rest as Partial) if (prompt_append && merged.prompt) {