dsh-gitbash-win:在 Windows 上为 DSH 追加 Git Bash 执行器

前言

DeepSeek Harness(DSH)在 Windows 上的默认构成,通常只给智能体准备 PowerShell 执行器(dsh-pwsh-sandbox)和 pwsh 工具。多数 POSIX 习惯命令、管道写法、git/make 等场景,在纯 pwsh 下要么语法不同,要么要额外绕一层。社区插件 dsh-gitbash-win(维护者 Seduce0068,仓库 Seduce0068/dsh-gitbash-win)做的是一件事:在不改动官方 PowerShell 链路的前提下,再挂上一套基于 Git for Windows 的 bash 执行器与官方 bash 工具实现。卸载后可回到原先只有 pwsh 的状态。

下文介绍插件定位、能力边界、安装步骤与配置要点;事实以仓库 README 与 package.json 为准。当前包版本 0.1.0,许可证 MIT,engines.dsh 要求 >=0.2.2-rc.1 <0.3.0。

这是什么

dsh-gitbash-win 是 DSH 的客户端侧插件(分类:客户端)。它把全局 bash 工具(官方 @deepseek-ai/dsh-tool-bash 的实现,ctx.shell 接到 Git Bash 执行器)连同 Web 设置卡片、检测状态 API 一并挂载进配置;不修改 pwsh 执行器、pwsh 工具、agent preset 与 base bundle 的既有行。

同一 Windows 会话里,模型可以按用途在 bash 与 pwsh 之间选用;插件会为 routing 自动加入偏向 bash 的说明。bash 侧在后台任务、超时、输出上限、sandbox_permissions 与渲染等行为上,与官方 bash 工具保持一致。

适用环境(README 写明):

  • DSH 0.2.2-rc.1
  • Node.js >= 24.9.0
  • Windows 10 / 11
  • 已安装 Git for Windows(含 bash.exe)
  • 使用 Web 图形界面时需 Web 配置档(dsh web)

在 Linux / macOS 上该插件行默认禁用;README 说明仅可通过 profile patch 等测试手段强行启用。v0.1 聚焦 Git Bash;WSL、cmd、Nushell 等属于后续规划,README 中有「已知约束」章节。

核心能力

双壳层并存

工具 实际执行 典型用途
bash(本插件新增) C:\Program Files\Git\bin\bash.exe -c <command> POSIX 命令、管道、shell 脚本、git、make 等
pwsh(官方保留) 官方 PowerShell 执行器 cmdlet、.NET、注册表、Windows 原生操作

插件挂载内容

  • 新增:Git Bash 执行器、全局 bash 工具、Settings 中的「Git Bash」卡片、bash 路径检测 API
  • 不变:官方 PowerShell 执行器与 pwsh 工具

沙箱与权限(Windows 上需特别注意)

DSH 权限模式为 read-only / workspace-write / danger-full-access 时,插件行为与官方 bash 执行器对齐:

  • danger-full-access:直接运行 Git Bash。
  • 限制模式:经官方 ctx.sandbox 的 ACL restricted-token 路径传入 Git Bash;runner 无法启动则 fail-closed,不执行命令。
  • 默认 sandboxFallback: fail:限制模式下若无法在安全沙箱中跑 Git Bash,命令不执行,并向模型返回 SANDBOX_UNAVAILABLE。

README 记载 2026-11-10 在 GitHub Actions windows-latest(Git for Windows 2.56.0.windows.4)上的实测:在官方 ACL restricted-token 路径下 命令未成功执行(含 0xC0000142 等初始化失败情形)。因此 当前在 Windows 的 read-only / workspace-write 下,Git Bash 往往不可用。可行做法包括:该步改用官方 pwsh、将会话切到 danger-full-access,或在理解风险后于 cordis.patch.yml 中显式设置 sandboxFallback: unconfined(README 指向 docs/security.md)。

插件以当前 DSH 进程权限运行;安装前请自行查看源码与 MIT 许可证。

安装与启用

安装路径须使用 README 给出的 file: 形式,不要臆造 dsh plugin add github:... 一类命令。

方法 A:通过 dsh plugin add(推荐)

先把本仓库目录或发行包 dsh-gitbash-win-0.1.0.tgz 放到本机,在 PowerShell 中执行:

# 从文件夹安装
dsh plugin --profile web add file:C:/path/to/dsh-gitbash-win

# 从 tarball 安装
dsh plugin --profile web add file:C:/path/to/dsh-gitbash-win-0.1.0.tgz

dsh plugin add 会通过 pnpm 安装包,并把包声明的 dsh.bundle(cordis.patch.yml)写入配置的 dsh.profile.bundles。随后重启 DSH。README 注明:CI 对这条 pnpm 安装路径尚未做 Windows 实机自动验证;失败时可改用方法 B。

安装后可用下面命令核对依赖与 bundle 列表:

Get-Content "$env:USERPROFILE\.dsh\profiles\web\package.json"
#   "dependencies": { "dsh-gitbash-win": "..." }
#   "dsh": { "profile": { "bundles": [ ..., "dsh-gitbash-win" ] } }

若设置了 DSH_HOME,请在对应目录下的 profiles\web 查看,而非仅用 %USERPROFILE%\.dsh。

方法 B:手动复制(不用 pnpm 时的回退)

$profileDir = "$env:USERPROFILE\.dsh\profiles\web"
New-Item -ItemType Directory -Force "$profileDir\node_modules" | Out-Null
Copy-Item -Recurse -Force "C:\path\to\dsh-gitbash-win" "$profileDir\node_modules\dsh-gitbash-win"

编辑 $profileDir\package.json,在 dependencies 与 dsh.profile.bundles 中加入 dsh-gitbash-win(README 提供完整 JSON 示例)。在 $profileDir\cordis.patch.yml 去掉模板开头的空 [],可按需追加:

- id: gitbash-win
  config:
    # bashPath: 'C:/Program Files/Git/bin/bash.exe'  # 空 = 自动检测
    sandboxFallback: fail

保存后重启 DSH。

安装后自检

  1. 打开 Settings → Plugins → Git Bash 卡片,确认是否检测到 bash.exe 及路径来源。
  2. 新建会话,让模型执行:echo $BASH_VERSION、uname -s、command -v bash(README 给出预期形态,如 BASH 5.x、MINGW64_NT-...)。
  3. 工具列表中应同时出现 bash 与 pwsh。

配置

Web 设置卡片(推荐)

Settings → Plugins → Git Bash 中可改四项并 Save:

字段 默认值 说明
bashPath 空(自动检测) 显式 bash.exe 路径;空则自动检测,WSL/Store 别名会被拒绝
initScript 空 作为 BASH_ENV 的初始化脚本(支持 ~ 展开)
timeoutMs 120000 单命令默认超时
maxOutputBytes 64000 单流输出保留上限,超出部分写入 spill 文件

sandboxFallback 出于安全原因 不能在卡片里改;需编辑 cordis.patch.yml 并通过插件行热重载(启用 HMR 的 Web profile)或重启宿主生效。卡片上的「再检测」可重新扫描 Git Bash。

除 sandboxFallback 外,保存后对新命令即时生效;正在运行的命令由 ctx.subprocess 持有,不会被杀掉。

cordis.patch.yml

在 ...\profiles\web\cordis.patch.yml 中,行 ID 为 gitbash-win,可写完整参数,例如:

- id: gitbash-win
  config:
    bashPath: ''
    initScript: ''
    timeoutMs: 120000
    maxTimeoutMs: 600000
    maxOutputBytes: 64000
    maxSpillBytes: 67108864
    graceMs: 3000
    sandboxFallback: fail   # fail | unconfined

卡片 Save 只覆盖卡片拥有的字段;手写的 maxTimeoutMs、sandboxFallback 等会保留,但若与卡片同键冲突,再次 Save 可能覆盖手改值,手改后宜先刷新页面。

典型用法

安装并完成自检后,在同一 DSH 会话中:

  • 需要 cmdlet、.NET、注册表 等 Windows 原生能力时,继续让模型调用 pwsh。
  • 需要 POSIX 管道、常见 shell 脚本、git 命令行习惯 时,让模型调用 bash(底层为 Git for Windows 的 bash.exe)。

若会话处于限制权限且 Git Bash 沙箱不可用,模型会收到 SANDBOX_UNAVAILABLE;按上文三种运维方式之一处理,而不是假设 bash 在只读模式下一定能跑通。

升级 DSH 主版本前,README 建议先阅读仓库内 docs/updating-dsh.md 的检查清单。

适用场景与注意

适合:在 Windows 10/11 上使用 DSH 0.2.2-rc.1、已装 Git for Windows,并希望智能体在保留官方 PowerShell 的同时多用 Git Bash 的开发者。

注意:

  • 插件 0.1.0,星标与社区目录上的展示以 SkillHub 目录页 与 GitHub 为准(当前仓库星标为 0)。
  • 限制权限下 Git Bash 在 Windows 上的沙箱支持是已知痛点;生产环境请先按 README 安全章节评估 sandboxFallback。
  • DSH 插件生态遵循「一切皆插件」;SkillHub 等为社区目录,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-gitbash-win 用增量方式给 Windows 版 DSH 补上 Git Bash,官方 pwsh 链路保持原样,适合需要在同一会话里混用 POSIX shell 与 PowerShell 的场景。安装以 README 中的 dsh plugin --profile web add file:... 或手动 bundle 为准,装好后在插件卡片确认检测路径,并用新会话验证 bash / pwsh 双工具是否就绪。

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

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

Xiaoye