前言¶
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。
安装后自检¶
- 打开 Settings → Plugins → Git Bash 卡片,确认是否检测到
bash.exe及路径来源。 - 新建会话,让模型执行:
echo $BASH_VERSION、uname -s、command -v bash(README 给出预期形态,如 BASH 5.x、MINGW64_NT-...)。 - 工具列表中应同时出现
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 双工具是否就绪。