为 DSH 极简模式提供 Windows 变体,bash 改走 Git for Windows 的 MSYS bash,修复 Windows 上无法使用的问题。
- 语言
- JavaScript
- License
- MIT
- 分支
- main
安装
$ dsh plugin --profile web add github:liceses/dsh-gitbash-preset在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程
对话式安装
帮我安装 DeepSeek Harness 插件 liceses/dsh-gitbash-preset:先查看仓库 https://github.com/liceses/dsh-gitbash-preset.git 确认安全性,然后执行安装命令并验证插件加载成功。
把这段指令粘贴给 DSH Web GUI 里的助手,由它代你完成安装与验证。
一句话定位
为 DSH 极简模式提供 Windows 可用的变体:把 bash 工具的调用从无法在 Windows 启动的持久 PTY 改走 Git for Windows 自带的 bash(MSYS),解决官方极简模式在 Windows 上跑不起来的问题。
核心能力
- 启动时把打包的「极简模式 (Git Bash)」预设复制到用户预设根目录,已存在则跳过,避免覆盖用户已有文件
- 自动定位 Git for Windows 的 bash 路径:优先看
GIT_BASH环境变量,其次扫描常见安装目录和 PATH,且会跳过 Windows 自带的 WSL 启动器避免误用 - 把 bash 命令以
bash -c <command>形式每次新启一个 shell 执行,统一处理超时、后台、输出截断与错误诊断 - 通过沙箱策略门控保证安全:非「完全访问」沙箱下拒绝执行,并提示用
sandbox_permissions: "danger-full-access"做单次升级 - 保留极简模式的 persona 和 str_replace_editor 工具表面,使用体验与官方极简模式一致
技术实现
- 语言: JavaScript(ESM,原生 Node.js)
- 关键依赖: 仅使用 Node 内置模块(
node:fs/node:path/node:os/node:url);预设由宿主已有的@deepseek-ai/dsh-persona/dsh-tool-bash/dsh-fs-local/dsh-tool-str-replace-editor组成 - 架构模式: 通过
cordis.patch.yml把插件行插入 web profile,启动时lib/index.js的apply(ctx, config)把预设文件复制到用户目录;预设内部用 entry-local realm 注册shell服务和bash/str_replace_editor两个工具 - 入口文件:
lib/index.js(安装器)+agent-presets/minimal-gitbash/agent.cordis.yml(预设组合)+agent-presets/minimal-gitbash/gitbash-executor.mjs(bash 执行器)
适用场景
Windows 用户在 DSH Web 端使用「极简模式」时,原本的持久 bash 会因 PTY 限制和找不到 bash 失败,本插件提供一个一键可装的替代预设,让 Windows 也能像 macOS/Linux 一样在极简模式下使用 bash 工具。
前置依赖与兼容性
| 依赖 | 最低版本 | 说明 |
|---|---|---|
| DSH | 未声明 | 通过 @deepseek-ai/dsh-* 宿主包运行;未在 manifest 中声明版本范围 |
| Node.js | >=20 | 来自 package.json 的 engines.node |
| 操作系统 | Windows | 预设用 process.platform !== 'win32' 直接禁用,仅在 Windows 启用;执行器在非 Windows 上退化为 bash 但预设本身不会激活 |
| Git for Windows | 推荐 | 未安装时执行器会兜底走 PATH 或裸 bash 名,可能无法启动 |
| 原生模块 | 无 | 仅使用 Node 内置模块,无任何 npm 原生依赖 |
安装方式
dsh plugin --profile web add github:liceses/dsh-gitbash-preset
配置项
| 配置 | 类型 | 说明 | 默认值 |
|---|---|---|---|
shellPath | 字符串 | 显式指定 bash.exe 路径,留空则自动探测(GIT_BASH → 常见安装目录 → PATH) | 自动探测 |
timeoutMs | 毫秒 | 单次命令默认超时时间 | 120000 |
maxTimeoutMs | 毫秒 | 单次命令允许的最大超时时间 | 600000 |
maxOutputBytes | 字节 | 单个流(stdout/stderr)保留的最大字节数,超出写入溢出文件 | 64000 |
maxSpillBytes | 字节 | 溢出文件总大小上限 | 67108864 (64MB) |
graceMs | 毫秒 | 终止进程时从 SIGTERM 到 SIGKILL 的宽限时间 | 3000 |
force | 布尔 | 插件级配置:已存在预设时是否用包内文件覆盖 | false |
常见问题
Q: 这个插件是给谁用的?
A: 主要是 Windows 上使用 DSH 极简模式的普通用户。官方极简模式在 Windows 上跑不起来,本插件提供一个可替代的预设变体。
Q: macOS 或 Linux 需要装吗?
A: 不需要。预设内部用 process.platform !== 'win32' 直接禁用,在其他系统上即使装了也不会激活,继续用官方极简模式即可。
Q: 装完之后需要做什么?
A: 重启 DSH 让插件把预设写入用户目录(约 ~/.dsh/.agent-presets/minimal-gitbash/),然后在 Web 界面新建会话时选择「极简模式 (Git Bash)」即可。
Q: 会话沙箱是 workspace-write 时能用吗?
A: 不能直接用。bash 工具会因为沙箱限制拒绝执行;要么把会话切到「完全访问」沙箱模式,要么让模型按错误提示用 sandbox_permissions: "danger-full-access" 加 justification 做单次升级。
Q: 它会改我电脑上已有的 bash 工具吗?
A: 不会。它只在选用了「极简模式 (Git Bash)」的会话作用域内替换 shell 提供者,其他会话与系统 bash 完全不受影响。
Q: 如何强制覆盖已经装好的预设?
A: 在插件配置里把 force 设为 true,插件会用包内预设文件覆盖用户目录下的版本(不会删除你额外放进去的文件)。
Q: 怎么卸载?
A: 用 dsh plugin --profile web remove 移除插件,然后手动删除用户目录下的 minimal-gitbash 文件夹即可。
Q: 它和官方极简模式有什么区别?
A: persona、str_replace_editor 工具表面完全一致;唯一区别是 bash 工具每次调用都新启一个 shell,不保留 cd / export 状态,这是 Windows 上无法用持久 PTY 之后的折中设计。
上手难度
入门 — 装好插件、重启 DSH、选预设即可使用,不需要写代码或改配置;只有想固定 bash 路径或调整超时的高级用户才需要看 agent.cordis.yml。
已知问题与限制
- 会话沙箱为 workspace-write 或更严格时,Git Bash 无法在 Windows 受限令牌沙箱内启动(MSYS 运行时无法创建 signal pipe),需切换到「完全访问」或单次升级 — 这是沙箱边界,插件不绕过
- bash 调用每次新启一个 shell,不保留
cd/export等会话状态(与官方极简模式的持久 PTY shell 不同),需要模型在每条命令里带全路径或自行维护工作目录 - 仅在 Windows 平台启用预设;macOS / Linux 上即使安装也会被
agent.cordis.yml中的disabled条件禁用 - 预设禁用后台任务(
enableRunInBackground: false),长任务需要通过单次超时来管理 - 极端情况下,PATH 中同时存在 Git Bash 与 WSL 启动器(System32 下的 bash.exe)时执行器会主动跳过 WSL 启动器目录,避免拿到一个不存在的发行版的 stub
DeepSeek Harness 插件:一键安装「极简模式 (Git Bash)」agent preset —— 把 DSH 自带极简模式中的 bash 调用映射到 Git for Windows 的 bash(MSYS),让 Windows 上的极简模式真正可用。
About
DSH 自带的极简模式在 Windows 上无法使用,失败有两层原因:
- PTY 平台限制:极简模式的持久 bash 依赖 PTY 后端,而
@deepseek-ai/dsh-subprocess-local在 win32 上直接拒绝(terminal inspection is unsupported on platform win32),与 bash 是否存在无关; - shell 缺失:即便绕过 PTY,
@deepseek-ai/dsh-bash-local硬编码从 PATH 找bash,Windows 上默认没有。
本插件交付一个可安装的预设变体:同一套极简 persona + str_replace_editor 双工具表面,但 bash 工具每次命令执行 <git bash> -c <command>,并通过沙箱感知门控保证不绕过安全边界。
特性
- 幂等安装:插件启动时把打包的预设复制到用户预设根(
${DSH_HOME:-~/.dsh}/.agent-presets/minimal-gitbash/),已存在则跳过,force: true才覆盖; - 自动探测 bash:
GIT_BASH环境变量 → 常见安装目录(ProgramFiles / ProgramFiles(x86) / LOCALAPPDATA)→ PATH 中的bash.exe→ 兜底bash,无需硬编码路径; - 沙箱感知门控:MSYS 运行时无法在 Windows 受限令牌沙箱内启动(无法创建 signal pipe),因此命令仅在"完全访问"策略下执行——不绕过沙箱,受限时给出明确升级指引;
- 极简不变:固定 persona、
str_replace_editor、无上下文压缩,与原极简模式一致。
工作原理
| 环节 | 说明 |
|---|---|
| 插件行 | cordis.patch.yml 在 web profile 组合中插入 dsh-gitbash-preset,启动时安装预设文件 |
| 预设组合 | agent.cordis.yml 中 gitbash-shell 组以 entry-local realm 提供 shell 服务,tool-bash 注册模型工具 |
| 执行器 | gitbash-executor.mjs 通过 host 的 subprocess 服务执行 bash -c,处理超时、后台、输出截断与错误诊断 |
| 沙箱门控 | run/start 校验策略:仅 danger-full-access(或部署无沙箱)放行,否则抛出带指引的错误 |
安装
dsh plugin --profile web add @icelily/dsh-gitbash-preset
或手动合并 cordis.patch.yml 到 profile patch 层。重启 DSH 后生效;重启后插件会自动安装预设(已存在则 no-op,不会覆盖你已有的版本)。
也可以不装插件,直接把 agent-presets/minimal-gitbash/ 目录复制到 ~/.dsh/.agent-presets/。
使用
- Web 界面新建会话,选择 极简模式 (Git Bash);
- 二选一启用 bash:
- 把会话沙箱切到完全访问,之后所有 bash 调用直接走 git bash;
- 或保持 workspace-write,让模型在第一次调用失败后按提示用
sandbox_permissions: "danger-full-access"+ justification 单次升级(走正常审批流程)。
配置
预设配置(agent-presets/minimal-gitbash/agent.cordis.yml 中 gitbash-executor):
| 字段 | 默认 | 说明 |
|---|---|---|
shellPath | 自动探测 | 显式指定时优先(如 'C:\\Program Files\\Git\\bin\\bash.exe') |
timeoutMs | 120000 | 单次命令默认超时(上限 maxTimeoutMs) |
maxTimeoutMs | 600000 | 超时上限 |
maxOutputBytes | 64000 | 单流保留字节数(溢出写入 spill 文件) |
graceMs | 3000 | 终止进程的 SIGTERM→SIGKILL 宽限 |
插件配置(cordis.patch.yml 插入行):
| 字段 | 默认 | 说明 |
|---|---|---|
force | false | 预设已存在时是否用包内文件覆盖(保留用户额外文件) |
开发
npm run check # 三个文件语法检查(插件、执行器、测试)
npm run test # 单元测试:路径转换 / 探测优先级 / 配置校验,10 个用例
限制
- 会话沙箱为 workspace-write(或更窄)时,git bash 无法启动(MSYS 受限令牌限制),需切换完全访问或单次升级——这是沙箱边界,插件不绕过;
- 与原极简模式不同,bash 为每次调用新 shell(不保持 cd/export 状态)——Windows 上 PTY 持久会话不可用,此为替代设计。
License
MIT
收录徽章
[](https://deepseek-plugin.org/plugins/liceses/dsh-gitbash-preset)把这段 markdown 粘贴到你的 GitHub README,链接回本插件详情页。徽章只声明已被本站收录,不代表安全认证。