Back to home@yunuo110

dsh-gitbash

DeepSeek Harness (DSH) bundle plugin: makes the existing bash tool run Git Bash on Windows and disables pwsh.

Stars
7
Language
JavaScript
Created
Aug 15, 2026
Updated
Sep 4, 2026
GitHub repo

Introduction

dsh-gitbash

English · 中文

DeepSeek Harness(DSH)bundle 插件:不新增模式、不新增工具,在 Windows 上把 DSH 现有的 bash 工具直接指向 Git for Windows Bash,并隐藏/禁用 pwsh,让模型自然使用 Git Bash。

参考了 Reasonix 的做法。

设计目标

  • 不是 preset 模式:不需要选择新模式,原有模式名不变。
  • 不是额外工具:不注册 gitbash 工具,模型看到的还是 DSH 原生的 bash 工具。
  • 默认 Git Bash:Windows 上 bash 工具通过 Git\bin\bash.exe -lc <command> 执行。
  • 隐藏 PowerShell:Windows 上 pwsh 从 prompt 中隐藏,并且即使旧缓存尝试调用也会被 guard 拒绝。
  • 动态描述bash 工具描述被改写为 Git Bash/MSYS2 规则,模型按 bash 语法写命令。
  • Windows 专用:非 Windows 上插件 no-op,不影响原生 bash。

目录结构

dsh-gitbash/
├── package.json
├── cordis.patch.yml        # 插入 dsh-gitbash,禁用 pwsh,启用 bash
├── lib/
│   ├── index.js            # shell provider + prompt 改写 + guard
│   └── gitbash-core.mjs    # 纯函数:路径探测/argv/渲染/校验
└── test/
    └── gitbash-core.test.mjs

安装(web profile)

在插件仓库根目录执行。如果你是从 GitHub clone 的,先进入 clone 出来的目录:

cd dsh-gitbash

新版 DSH 的 dsh plugin 命令会把参数转发给 pnpm。安装前请先确认本机已有 pnpm(例如执行 pnpm --version);没有的话先运行 npm install -g pnpm

方式 A:dsh 已经在 PATH 里

直接执行:

dsh plugin --profile web add .

方式 B:平时用 npx @deepseek-ai/dsh web 启动 DSH

很多人的 DSH 不是全局安装的,dsh 命令并不在 PATH 里。如果你平时是这样启动的:

npx @deepseek-ai/dsh web

那么安装插件也要通过 npx 调用:

npx @deepseek-ai/dsh plugin --profile web add .

注意:这条命令要在插件仓库根目录下执行,因为 add .. 指向当前目录。

如果你希望以后能直接使用 dsh 命令,可以先把 DSH 装到全局:

npm install -g @deepseek-ai/dsh

之后就能直接:

dsh plugin --profile web add .

安装后

安装会:

  1. dsh-gitbash 作为 bundle 加入 ~/.dsh/profiles/web
  2. 在 Windows 上提供一个 Git Bash shell executor;
  3. 重新启用 host 层 tool-bash
  4. 禁用 pwsh-sandbox / tool-pwsh

然后完整重启 DSH。之后新建会话和旧对话都会使用同一个 bash 工具,但它实际执行 Git Bash。

GitHub 安装(推荐)

如果你不想依赖本地源码目录,可以直接从 GitHub 安装:

dsh plugin --profile web add github:yunuo110/dsh-gitbash

如果你之前装过本地版本,先移除再安装:

dsh plugin --profile web remove dsh-gitbash
dsh plugin --profile web add github:yunuo110/dsh-gitbash

建议锁定版本,避免以后仓库变更悄悄影响你(当前最新 tag:v0.1.1):

dsh plugin --profile web add github:yunuo110/dsh-gitbash#v0.1.1

这样 profile 里保存的是 GitHub 依赖,而不是本地 link 依赖,DSH 更新不会把它刷掉。

使用

  • 新会话或旧对话里让模型执行 shell/git 命令,例如“查看 git 状态”“运行 npm test”。
  • 模型看到的是 bash 工具,描述会说明它运行 Git Bash。
  • Windows 上模型看不到 pwsh,即使旧缓存尝试 pwsh 也会被拒绝并提示改用 bash
  • 如果当前会话沙箱不是完全访问,第一次调用可能失败并提示升级。按提示让模型用:
    {
      "command": "git status",
      "description": "查看 git 状态",
      "sandbox_permissions": "danger-full-access",
      "justification": "Git Bash 无法在受限沙箱中启动,需要完全访问以执行 git 状态检查。"
    }
    
    或直接在设置里把会话权限切到完全访问

配置

默认自动探测 Git Bash:GIT_BASH 环境变量 → Program Files / Program Files (x86) / ProgramW6432 / LocalAppData / Scoop → PATH(排除 System32 的 WSL bash)。

要固定路径,在 profile 自己的 cordis.patch.yml~/.dsh/profiles/web/cordis.patch.yml)中覆盖插件行:

- id: dsh-gitbash
  config:
    shellPath: 'C:\Program Files\Git\bin\bash.exe'
    timeoutMs: 120000
    maxTimeoutMs: 600000
    maxOutputBytes: 64000
    maxSpillBytes: 67108864
    graceMs: 3000
字段默认说明
shellPath自动探测固定 Git Bash 路径
timeoutMs120000单条命令默认超时
maxTimeoutMs600000超时上限
maxOutputBytes64000stdout 内存保留字节数,溢出写入 spill
maxSpillBytes67108864spill 文件上限
graceMs3000SIGTERM → SIGKILL 宽限

工具行为

  • 每次调用都是新的非交互式 bash.exe -lc不保留 cd / export / alias 状态
  • 使用 POSIX/bash 语法:$VARexportlsgrepfindsedawk、管道、&&/||、命令替换。
  • 路径建议:/d/WorkSpaceC:/WorkSpace;避免未加引号的反斜杠。
  • 环境变量:$VAR / ${VAR},不要用 PowerShell 的 $env:VAR
  • 支持 DSH 原 bash 工具的 workdirtimeoutMsrun_in_backgroundsandbox_permissions + justification

Token 对比

只对比原版 DSH 配置与本插件的差异:

配置可见 shell 工具额外系统提示每轮 token 影响
原版 DSH(Windows)pwsh基准
本插件bash(实际执行 Git Bash)基本持平(只是用 bash schema 替换 pwsh schema,没有新增额外工具)

测试

npm run check

当前测试覆盖:Git Bash 路径探测、argv 构造、环境变量合并、参数校验、超时钳制、workdir 解析、结果渲染、配置校验、shell 工具过滤。

兼容性

  • DeepSeek Harness 0.1.2-rc.1(兼容 0.1.0-rc.6 起的同一套 shell/工具 seam)
  • Windows + Git for Windows(MSYS2)
  • Node.js 22.19+

说明

本工具完全由 DSH 制作而成。