From 9a774f1db28d814425ae980b8b3b387b67e5673d Mon Sep 17 00:00:00 2001 From: MoerAI Date: Fri, 13 Mar 2026 21:35:46 +0900 Subject: [PATCH] fix: union disabled_tools in mergeConfigs() like other disabled_* arrays disabled_tools was defined in the Zod schema but omitted from mergeConfigs(), causing project-level config to shadow user-level disabled_tools instead of merging both sets. Add Set union and regression test. Closes #2555 --- src/plugin-config.test.ts | 17 +++++++++++++++++ src/plugin-config.ts | 6 ++++++ 2 files changed, 23 insertions(+) diff --git a/src/plugin-config.test.ts b/src/plugin-config.test.ts index c0dde045b..125062e6e 100644 --- a/src/plugin-config.test.ts +++ b/src/plugin-config.test.ts @@ -115,6 +115,23 @@ describe("mergeConfigs", () => { expect(result.disabled_hooks).toContain("session-recovery"); expect(result.disabled_hooks?.length).toBe(3); }); + + it("should union disabled_tools from base and override without duplicates", () => { + const base: OhMyOpenCodeConfig = { + disabled_tools: ["todowrite", "interactive_bash"], + }; + + const override: OhMyOpenCodeConfig = { + disabled_tools: ["interactive_bash", "look_at"], + }; + + const result = mergeConfigs(base, override); + + expect(result.disabled_tools).toContain("todowrite"); + expect(result.disabled_tools).toContain("interactive_bash"); + expect(result.disabled_tools).toContain("look_at"); + expect(result.disabled_tools?.length).toBe(3); + }); }); }); diff --git a/src/plugin-config.ts b/src/plugin-config.ts index e1d8afb0d..c9f93f10f 100644 --- a/src/plugin-config.ts +++ b/src/plugin-config.ts @@ -146,6 +146,12 @@ export function mergeConfigs( ...(override.disabled_skills ?? []), ]), ], + disabled_tools: [ + ...new Set([ + ...(base.disabled_tools ?? []), + ...(override.disabled_tools ?? []), + ]), + ], claude_code: deepMerge(base.claude_code, override.claude_code), }; }