Terminal Opener
Terminal Opener 是一个用于在可见终端窗口中打开可执行文件及其参数数组的工具,通过可复用的、无 shell 的启动计划实现,支持 dry-run、JSON 输出和能力检测。
用途
该工具用于将某个可执行文件及其参数数组在可见的终端窗口中启动。它强调以无 shell 的方式构建启动计划,避免将命令拼接为 shell 字符串。
主要能力
- 使用 scripts/open-terminal.js 脚本,将可执行文件和每一个参数保留为独立的进程条目。
- 绝不插值拼接 shell 命令字符串,所有 spawn 均保持 shell: false。
- 默认生成不实际启动的计划(非启动模式)。
- 支持 --launch 选项,在用户明确请求真实窗口且 argv 已审查后执行实际启动。
- 支持 --dry-run 与 --json,用于在打开窗口前检查确切的 executable、argv、工作目录、终端适配器、主启动方式和回退方式。
- 支持 --detect --json,在不带命令的情况下探测终端可用性。
- 支持 --recover 或 --standalone,在用户配置或 mux 状态可能干扰目标命令时使用恢复模式。
使用方式
启动命令时,将启动器选项放在 -- 之前,然后传入恰好一个可执行文件及其参数数组:
node skills/terminal-opener/scripts/open-terminal.js
--launch
--cwd /absolute/host/path
-- ssh -t example.test command-with-arguments
建议先运行普通模式。让 WezTerm 尝试用新窗口启动其 mux,如果 mux 不可用,则让启动器回退到分离的 wezterm start 进程。当使用回退时,读取 JSON 输出中的 muxFailure(或人类可读的失败行)来诊断 mux 路径失败的原因。
恢复模式:当用户配置或 mux 状态可能干扰请求的命令时,添加 --recover 或 --standalone。以分离的 WezTerm 进程启动:
--skip-config start --always-new-process
恢复模式会有意跳过所有用户终端配置。
启动前检查:省略 --launch(或添加 --dry-run)并添加 --json,即可在不打开窗口的情况下检查确切的 executable、argv、工作目录、终端适配器、主启动和回退。可将 JSON 计划视为调用方的组合边界。
探测终端:不带命令运行 --detect --json 来探测终端可用性。当适配器缺失或不受支持时,遵循返回的 action。当前适配器使用 WezTerm;其他请求的终端应视为不受支持的计划,而不是要执行的命令。
适用场景
- 需要在可见终端窗口中启动可执行文件及其参数数组的场景。
- 需要在不实际打开窗口的情况下预先检查启动计划的场景。
- 需要探测终端可用性并据此决定后续操作的场景。
- 用户配置或 mux 状态可能干扰命令、需要恢复模式的场景。
限制
- 启动的进程会继承调用进程的完整环境,包括含密钥的变量;启动器不会过滤环境。因此应从环境可安全暴露给目标命令的 shell 中运行它。
- 当前适配器为 WezTerm;其他请求的终端被视为不受支持的计划,而非可执行的命令。
- 默认不启动,必须显式使用 --launch 才会打开真实窗口。
- 恢复模式会有意跳过所有用户终端配置。