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 雙工具是否就緒。

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

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

小夜