前言¶
DeepSeek Harness (DSH) 为 Agent 开发提供了一个统一的 ctx.shell 接口。在 Windows 环境下,开发者经常需要调用 Git Bash 或 WSL 来执行特定的 Linux/MSYS 命令。dsh-win-multi-bash 插件通过引入 shell-select 执行器和额外的模型工具,解决了单一 Shell 接口无法直接调用这些环境的问题,同时保持了对原生 PowerShell (pwsh) 的兼容性。
插件定位¶
这是一个由 Dinosaur-MC 维护的客户端插件,开源协议为 MIT。它扩展了 DSH 的 Shell 能力,支持在同一个 ctx.shell 上下文中路由请求至 Git Bash、WSL 和 PowerShell。
核心功能¶
插件主要提供以下能力:
- 模型工具:新增
git_bash和wsl_bash两个模型工具,分别对应 MSYS 和 Linux 两种方言。 - 执行器:引入
shell-select执行器,负责将request.shell或默认路由分配给具体的后端。 - 路由策略:默认路由保持为 pwsh,确保在不调用特定 bash 家族工具时,现有行为不变。
- 自动检测:支持自动检测 Git Bash,检测顺序包括 PATH、注册表、Git 安装根目录布局等。
- 沙箱支持:支持多种沙箱机制(
auto、bwrap、windows-acl),并支持requireSandbox配置项。
安装与启用¶
当前源文本未提供具体的安装命令字符串。建议通过以下链接查看仓库或插件目录获取安装指引。
- GitHub: https://github.com/Dinosaur-MC/dsh-win-multi-bash
- 技能目录: https://www.skillhub.cn/plugins/Dinosaur-MC/dsh-win-multi-bash
典型用法¶
配置沙箱要求¶
在 cordis.patch.yml 中,可以为后端配置 requireSandbox 以拒绝未限制的运行:
# cordis.patch.yml
config:
backends: [git-bash, wsl-bash, pwsh]
default: pwsh
gitBash: { requireSandbox: true }
wslBash: { requireSandbox: true }
启用 WSL 沙箱¶
wsl_bash 的沙箱机制依赖于发行版内的 bubblewrap。在 Ubuntu/Debian 发行版中安装:
wsl.exe -d Ubuntu-24.04 -e sudo apt-get install -y bubblewrap
wsl.exe -d Ubuntu-24.04 -e bash -c "command -v bwrap && bwrap --version"
安装后,必须重启 dsh web 进程(或触发 Shell 设置重建)以重新探测沙箱状态。
路径转换处理¶
Git Bash 会自动将 POSIX 路径转换为 Windows 路径。如果需要将命令原样传递给 Windows 原生程序(如 wsl.exe),需设置 MSYS_NO_PATHCONV=1:
MSYS_NO_PATHCONV=1 wsl.exe -e ls /root
适用场景与注意¶
- 沙箱限制:
git_bash通常无法在 Git for Windows 部署中完全沙箱化,沙箱机制有时会退化为无限制运行;wsl_bash的沙箱依赖发行版内的bubblewrap。 - 拒绝分类:沙箱拒绝行为仅在命令退出码非零时被分类。
- 沙箱范围:沙箱仅限制文件操作(
workspace-write/read-only),不限制网络及其他资源。 - 版本要求:插件依赖
@deepseek-ai/cordis及相关 DSH 组件,要求 Node.js 版本为^22.19.0 || >=24.0.0。 - 路径兼容:在使用 Git Bash 工具时,MSYS 路径需转换为 Windows 路径(如
/d/WorkSpace/foo转D:\WorkSpace\foo)供 DSH 的文件工具使用,反之在 Bash 内部则使用 MSYS 路径。
总结¶
dsh-win-multi-bash 为 Windows 下的 DSH Agent 开发提供了灵活的 Shell 路由能力,支持 Git Bash 和 WSL 的集成,并提供了基础的沙箱防护机制。对于需要在 Windows 环境下混合使用多种 Shell 的开发者,这是一个实用的工具补充。