dsh-unsandboxed-winbash:在 Windows 上为 DSH 提供沙箱外的 Git Bash

前言

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 安装情况。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye