diff --git a/src/tools/interactive-bash/constants.ts b/src/tools/interactive-bash/constants.ts index 4b83fc7..2dad94c 100644 --- a/src/tools/interactive-bash/constants.ts +++ b/src/tools/interactive-bash/constants.ts @@ -1,5 +1,22 @@ export const DEFAULT_TIMEOUT_MS = 60_000 +export const BLOCKED_TMUX_SUBCOMMANDS = [ + "capture-pane", + "capturep", + "save-buffer", + "saveb", + "show-buffer", + "showb", + "pipe-pane", + "pipep", +] + export const INTERACTIVE_BASH_DESCRIPTION = `Execute tmux commands for interactive terminal session management. -Use session names following the pattern "omo-{name}" for automatic tracking.` +Use session names following the pattern "omo-{name}" for automatic tracking. + +BLOCKED COMMANDS (use bash tool instead): +- capture-pane / capturep: Use bash to read output files or pipe output +- save-buffer / saveb: Use bash to save content to files +- show-buffer / showb: Use bash to read buffer content +- pipe-pane / pipep: Use bash for piping output` diff --git a/src/tools/interactive-bash/tools.ts b/src/tools/interactive-bash/tools.ts index 32ccadd..d9be453 100644 --- a/src/tools/interactive-bash/tools.ts +++ b/src/tools/interactive-bash/tools.ts @@ -1,5 +1,5 @@ import { tool } from "@opencode-ai/plugin/tool" -import { DEFAULT_TIMEOUT_MS, INTERACTIVE_BASH_DESCRIPTION } from "./constants" +import { BLOCKED_TMUX_SUBCOMMANDS, DEFAULT_TIMEOUT_MS, INTERACTIVE_BASH_DESCRIPTION } from "./constants" import { getCachedTmuxPath } from "./utils" /** @@ -62,6 +62,11 @@ export const interactive_bash = tool({ return "Error: Empty tmux command" } + const subcommand = parts[0].toLowerCase() + if (BLOCKED_TMUX_SUBCOMMANDS.includes(subcommand)) { + return `Error: '${parts[0]}' is blocked. Use bash tool instead for capturing/printing terminal output.` + } + const proc = Bun.spawn([tmuxPath, ...parts], { stdout: "pipe", stderr: "pipe",