前言¶
DeepSeek Harness(DSH)在 Windows 上默认只向智能体暴露 PowerShell 终端工具;平台矩阵里 bash 家族被平台断言关闭,全局 ctx.shell 又是单实例服务,因此无法在不动第一方组合的前提下直接调用 Git Bash。若你希望模型在 Windows 上通过 git、grep、make 等 POSIX 工具链执行命令,或只想用系统自带的 cmd.exe 批处理语义,就需要在会话创建阶段把终端工具换成对应 shell。社区插件 dsh-terminal-shell(维护者 road-kid)在官方尚未提供内置「终端 / shell 选择」能力前,用会话级隔离替换实现上述切换;DSH 一旦提供等价能力,可从 profile 依赖中移除插件并重启即可回到官方行为。
这是什么¶
dsh-terminal-shell 是 DSH 的客户端类插件(当前版本 0.2.1,MIT 许可)。它在 Windows 的 DSH Desktop / Web shell 上增加一行设置:在 PowerShell(pwsh)、本机 Git Bash(bash) 与 cmd.exe(cmd) 之间选择智能体工具调用所使用的 shell。默认 dialect: 'pwsh' 与未装插件时一致;改为 bash 或 cmd 后,仅新会话的工具目录会出现对应工具并隐藏被替换的 shell 工具,已打开的会话不变。配置写入当前 profile 的 patch 层,不修改 DSH 安装目录、不改动 preset 文件、不接管全局 ctx.shell。
插件目录页:skillhub.cn/plugins/road-kid/dsh-terminal-shell(社区站点,与 DeepSeek / 幻方无官方从属关系)。源码:github.com/road-kid/dsh-terminal-shell。
核心功能¶
三种方言共用同一套设置,差别在于工具名、执行器与命令传输方式:
| 方言 | 工具 | 典型用途 |
|---|---|---|
pwsh(默认) |
官方 pwsh |
安装插件但不改变行为 |
bash |
官方 @deepseek-ai/dsh-tool-bash + GitBashExecutor |
POSIX 工具链(git / ls / grep / sed / make / gcc 等) |
cmd |
插件内移植的 cmd 工具 + CmdExecutor |
仅依赖系统 cmd.exe,无需 Git Bash |
工作原理可概括为:在新会话的 agent/created 钩子里,于 agentCtx.isolate('shell') 子树注册对应执行器与工具,对继承层 restrict 隐藏 pwsh(cmd 方言还会隐藏继承的 bash),并清空 tool:pwsh 提示词段。超时、输出收集、沙箱权限升级等行为主要复用官方实现。
安装与启用¶
前置条件¶
- Windows:
cordis.patch.yml在非 Windows 上整行不加载。 - DSH Desktop 版本满足
engines.dsh:>=0.2.1-rc.2 <0.3.0;Node>=22。 - 使用
bash方言:本机已安装 Git for Windows(或 MSYS2 / Cygwin)。 - 使用
cmd方言:系统自带%ComSpec%即可。
安装步骤¶
下面步骤摘自插件 README,在已取得源码的仓库目录中构建并装入 profile(示例 profile 名为 desktop):
# 1. 构建(产物在 lib/)
cd dsh-terminal-shell
npm install
npm run check
# 2. 装进 profile
# 用插件管理器从本地目录安装:
# plugin_manager install_bundle → target = 本仓库的绝对路径
npm pack
# 或把 tarball / 目录放进 profile 的依赖里,例如
# C:\Users\<you>\.dsh\profiles\desktop\package.json
profile 组合层会读取包内的 cordis.patch.yml,插入 terminal-shell 插件行。安装或升级后必须重启 DSH;仅装插件、保持默认 pwsh 时,会话行为与官方一致。
在界面中启用¶
重启后打开 设置 → 通用,底部会出现 终端 Shell 行(id terminal-shell)。在「终端类型」下拉中选择 powershell / bash / cmd(写入字段 dialect)。说明文案为:选择智能体工具调用终端使用的 shell,改动后仅在新会话生效。切换到 bash 或 cmd 时会触发本机路径扫描;也可手动填写 bashPath 或 cmdPath。
典型用法¶
- 完成安装并重启 DSH。
- 在 设置 → 通用 → 终端 Shell 中,将方言改为
bash(或cmd)。 - 若选
bash:确认 Git Bash 路径 指向有效的bash.exe;按需调整 沙箱策略(unconfined绕过沙箱 /escalate申请权限,默认unconfined)。 - 若选
cmd:可留空 cmd.exe 路径 以使用%ComSpec%;默认沙箱策略为escalate;可选 控制台代码页(默认65001)。 - 新建会话(不要指望在已打开的会话里即时切换工具目录)。
需要直接写 profile patch 时,核心字段包括 dialect、路径类字段及各方言的沙箱策略;完整列表见仓库 README「配置字段表」(与 src/config.ts 对应),所有字段均为 volatile,在会话创建时快照一次。
诊断日志默认位于 %TEMP%\dsh-terminal-shell.log,可用环境变量 DSH_TERMINAL_TOOL_DIAG_FILE 覆盖路径。
适用场景与注意¶
适合谁
- 在 Windows 上开发、希望智能体调用 bash 工具而非 pwsh 的 DSH 用户。
- 未安装 Git Bash、但希望智能体通过
cmd.exe执行批处理命令的场景。 - 需要临时替代方案、且接受「官方能力落地后可从 profile 移除本插件」的维护方式。
务必知晓
- 插件与 DSH 宿主在同一进程权限下运行;安装前应阅读源码与 MIT 许可证,确认可接受其行为(尤其
bash在unconfined下模型命令不受文件沙箱约束)。 - 非 Windows 平台不会加载此插件。
- 卸载:从 profile 依赖移除
dsh-terminal-shell,重启 DSH;已按 bash / cmd 装配的旧会话不会自动切回 pwsh。 - 本介绍中的版本号、引擎约束与命令均来自插件 GitHub README(
0.2.1);星标等目录页元数据以 skillhub 展示为准。
结尾¶
dsh-terminal-shell 用「一个设置开关、会话级隔离、不动全局 shell 服务」的方式,在 Windows 上把新会话的终端工具从默认 pwsh 换成 Git Bash 或 cmd,同时保留默认 pwsh 与官方一致的行为。需要进一步了解实现细节、CMD 方言限制或极简模式(minimalMode)时,请直接查阅仓库中文 README。
- 目录页:https://www.skillhub.cn/plugins/road-kid/dsh-terminal-shell
- GitHub:https://github.com/road-kid/dsh-terminal-shell