前言¶
DeepSeek Harness(DSH)在 Linux 和 macOS 上可以通过 dsh-tool-bash 或 dsh-bash-sandbox 给智能体提供 bash。在 Windows 上,@deepseek-ai/dsh-base 会同时禁用这两个工具;即便手工启用,Git Bash(MSYS2)也往往在文件沙箱里起不来——受限 token 无法创建 MSYS 信号处理所需的命名管道。结果是智能体在 Windows 上缺少一套可用的 Unix 风格 shell 工具链。
社区插件 dsh-unsandboxed-winbash(维护者 xswt442-cmd,分类 admin-security)针对上述限制:向会话新增 winbash 工具,在用户自安装的 Git for Windows 上执行命令,并明确在沙箱之外运行。下面介绍它的定位、能力、安装方式与安全边界。
这是什么¶
dsh-unsandboxed-winbash 是仅面向 Windows(win32)的 DSH 工具插件。它不替换 DSH 自带的 pwsh、fs 或权限相关服务,只增加名为 winbash 的工具:用 Git Bash 的 bash -c 跑命令,修好 MSYS 相关的 PATH,并把 stdout、stderr 与退出码返回给调用方。
npm 包名与仓库名均为 dsh-unsandboxed-winbash;当前 package 版本为 0.1.7,许可证 MIT。DSH 要求 >=0.1.5-rc.3,Node.js 要求 >=20,运行环境还需已安装 Git for Windows(提供 Git Bash)。
为什么 Windows 上默认没有 bash¶
README 在 Windows 11 + dsh 0.1.5-rc.1 的沙箱内做过实测,常见尝试均失败:
| 尝试 | 结果 |
|---|---|
bash -c(PATH 解析到 C:\Windows\System32\bash.exe) |
Bash/Service/CreateInstance/E_ACCESSDENIED |
wsl.exe -e bash -c |
Wsl/Service/CreateInstance/E_ACCESSDENIED |
C:\Program Files\Git\usr\bin\bash.exe -c |
fatal error - couldn't create signal pipe, Win32 error 5 |
因此本插件的前提就是:MSYS 无法在 ACL 受限 token 下正常启动,需要在文件沙箱外 spawn Git Bash。工具描述中会写明这一点,且不提供 sandbox_permissions 升级面。
核心功能¶
winbash 工具¶
- 以
bash -c执行命令,返回 stdout、stderr 与退出码;非零退出按结果上报,不作为工具层错误。 - Git Bash 自动发现:优先
usr\bin\bash.exe(真实 MSYS2),再查bin\bash.exe包装器;也可通过配置项bashPath显式指定路径。 - PATH 修复:将 Git 的
usr\bin、mingw64\bin、cmd前置。否则在仅含Git\cmd的典型 Windows PATH 下,ls、grep、sed、awk、find、sleep、wc等会command not found。 - 有界输出:保留
maxOutputBytes窗口,超出部分写入 spill 文件并在结果里给出路径;多字节边界不会被截断成乱码。 - 环境擦除:复用
@deepseek-ai/dsh-subprocess的scrubbedParentEnv,只转发dshEnv与 Git 需要的变量;匹配*KEY*、*TOKEN*、*SECRET*、*PASSWORD*的凭证类环境变量不传给子进程。 - 超时与中断:
timeoutMs/maxTimeoutMs到期或调用被中止时,对进程树执行taskkill /T /F;在exit上结算,并用drainMs有界排空 stdio。 - 后台任务:支持
run_in_background,走宿主的ctx.jobs注册表,可增量读取输出。 - 实现上命令内部一律显式调用 Git Bash,不用裸
bash——在 Windows 上裸bash可能解析到 WSL shim。
与其他平台的关系¶
非 win32 平台不需要本插件:dsh-tool-bash 与 dsh-bash-sandbox 在其他平台上默认启用。
安装与启用¶
包内声明了 dsh.bundle,bundle 补丁会自行挂载工具行,无需手工改 cordis.patch.yml。安装后需重启 DSH Web 生效。
# 从 npm 安装并注册到 web profile(推荐)
dsh plugin --profile web add dsh-unsandboxed-winbash
# 仅下载 npm package
npm install dsh-unsandboxed-winbash
# 或从 GitHub 安装
dsh plugin --profile web add github:xswt442-cmd/dsh-unsandboxed-winbash
若仅安装 npm 包而未通过 dsh plugin 注册,需自行按 DSH 插件文档完成挂载;推荐路径是使用上面的 dsh plugin --profile web add 命令。
配置¶
可在 Cordis 补丁中插入 tool-winbash 节点,例如:
- insert:
- id: tool-winbash
name: dsh-unsandboxed-winbash/tool
config:
bashPath: '' # 显式指定 Git Bash 路径(默认自动发现)
gitPathPrefix: true # 把 Git 的 usr\bin / mingw64\bin / cmd 前置到 PATH
extraPath: '' # 额外 PATH 前缀,';' 分隔(排在最前)
drainMs: 250 # 子进程退出后等待输出排空的上限
timeoutMs: 120000 # 命令默认超时
maxTimeoutMs: 600000
maxOutputBytes: 64000
maxSpillBytes: 67108864
enableRunInBackground: true
Git Bash 自动发现顺序为:%ProgramFiles%\Git\usr\bin\bash.exe → %ProgramFiles%\Git\bin\bash.exe → %LOCALAPPDATA%\Programs\Git\usr\bin\bash.exe → %ProgramFiles(x86)%\Git\...。找不到且未配置 bashPath 时,只在调用 winbash 时报错,插件挂载本身不会失败。
典型用法¶
安装并重启 DSH Web 后,智能体会话里会出现 winbash 工具。模型或工作流通过该工具传入要在 Git Bash 中执行的 shell 片段(等价于 bash -c "..."),即可使用 MSYS 下的常见 Unix 命令,前提是本机已安装 Git for Windows 且路径可被自动发现或已在 bashPath 中指定。
需要受限、可审计的文件读写或修改时,仍应使用 DSH 的 fs 工具,而不是指望 winbash 遵守文件沙箱策略。
适用场景与注意¶
适合谁: 在 Windows 上跑 DSH Web 或同类 profile、希望智能体能执行 grep/sed/管道脚本等 Git Bash 能力、且接受「shell 命令在沙箱外、与 dsh 进程同权限」的开发者或运维场景。
安全与边界(务必阅读):
- 命令在文件沙箱之外执行;
pwsh、权限预设、/permission与fs仍受各自沙箱与审批策略约束。 - 插件以当前 dsh 进程权限运行;安装前应阅读 GitHub 仓库 源码与 MIT 许可证,确认符合你的安全策略。
- 超时或被中止时会终止整棵进程树;后台任务在宿主退出时同步清理。
DSH 生态强调「一切皆插件」;SkillHub 目录页 是社区收录站点,与 DeepSeek / 幻方无官方从属关系。
链接¶
- 目录页:https://www.skillhub.cn/plugins/xswt442-cmd/dsh-unsandboxed-winbash
- GitHub:https://github.com/xswt442-cmd/dsh-unsandboxed-winbash
- npm:https://www.npmjs.com/package/dsh-unsandboxed-winbash
经过上面的步骤,在 Windows 上即可在保持 fs 等沙箱能力不变的前提下,为 DSH 补上可用的 Git Bash 工具链;是否启用取决于你对沙箱外 shell 的接受程度与本机 Git 安装情况。