From 7243bfa483a848c3e0b440db8eb7f06a9ac4bfc2 Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Sun, 5 Apr 2026 13:27:55 +0900 Subject: [PATCH] fix(tool-registry): use interactive bash availability for tool registration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with assistance of [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode) --- src/plugin/tool-registry.test.ts | 34 +++++++++++++++++++++++++++++++- src/plugin/tool-registry.ts | 16 ++++++++++----- 2 files changed, 44 insertions(+), 6 deletions(-) diff --git a/src/plugin/tool-registry.test.ts b/src/plugin/tool-registry.test.ts index b2c7752b1..07588b0ca 100644 --- a/src/plugin/tool-registry.test.ts +++ b/src/plugin/tool-registry.test.ts @@ -83,7 +83,7 @@ describe("#given task_system configuration", () => { }) describe("#given tmux integration is disabled", () => { - test("#when tool registry is created #then interactive_bash is not registered", () => { + test("#when system tmux is available #then interactive_bash remains registered", () => { const result = createToolRegistry({ ctx: { directory: "/tmp" } as Parameters[0]["ctx"], pluginConfig: { @@ -108,6 +108,38 @@ describe("#given tmux integration is disabled", () => { disabledSkills: new Set(), }, availableCategories: [], + interactiveBashEnabled: true, + }) + + expect(result.filteredTools).toHaveProperty("interactive_bash") + }) + + test("#when system tmux is unavailable #then interactive_bash is not registered", () => { + const result = createToolRegistry({ + ctx: { directory: "/tmp" } as Parameters[0]["ctx"], + pluginConfig: { + tmux: { + enabled: false, + layout: "main-vertical", + main_pane_size: 60, + main_pane_min_width: 120, + agent_pane_min_width: 40, + isolation: "inline", + }, + }, + managers: { + backgroundManager: {}, + tmuxSessionManager: {}, + skillMcpManager: {}, + } as Parameters[0]["managers"], + skillContext: { + mergedSkills: [], + availableSkills: [], + browserProvider: "playwright", + disabledSkills: new Set(), + }, + availableCategories: [], + interactiveBashEnabled: false, }) expect(result.filteredTools).not.toHaveProperty("interactive_bash") diff --git a/src/plugin/tool-registry.ts b/src/plugin/tool-registry.ts index 3026acfac..ed99f7c22 100644 --- a/src/plugin/tool-registry.ts +++ b/src/plugin/tool-registry.ts @@ -5,7 +5,7 @@ import type { AvailableCategory, } from "../agents/dynamic-agent-prompt-builder" import type { OhMyOpenCodeConfig } from "../config" -import { isTmuxIntegrationEnabled } from "../create-runtime-tmux-config" +import { isInteractiveBashEnabled } from "../create-runtime-tmux-config" import type { PluginContext, ToolsRecord } from "./types" import { @@ -104,10 +104,16 @@ export function createToolRegistry(args: { managers: Pick skillContext: SkillContext availableCategories: AvailableCategory[] + interactiveBashEnabled?: boolean }): ToolRegistryResult { - const { ctx, pluginConfig, managers, skillContext, availableCategories } = args - const tmuxIntegrationEnabled = isTmuxIntegrationEnabled(pluginConfig) - + const { + ctx, + pluginConfig, + managers, + skillContext, + availableCategories, + interactiveBashEnabled = isInteractiveBashEnabled(), + } = args const backgroundTools = createBackgroundTools(managers.backgroundManager, ctx.client) const callOmoAgent = createCallOmoAgent( ctx, @@ -204,7 +210,7 @@ export function createToolRegistry(args: { task: delegateTask, skill_mcp: skillMcpTool, skill: skillTool, - ...(tmuxIntegrationEnabled ? { interactive_bash } : {}), + ...(interactiveBashEnabled ? { interactive_bash } : {}), ...taskToolsRecord, ...hashlineToolsRecord, }