dsh-shell-switch:在 Windows 上让 DSH 的 bash 工具跑在本机真实 shell 里

前言

在 Windows 上使用 DeepSeek Harness(DSH)时,模型执行 shell 命令往往有两条路径:官方 pwsh 工具要求把命令写成 PowerShell 语法;dsh-ops 自带的 MSYS bash 在 DSH 受限令牌沙箱里又经常起不来。本机已安装的 Niubash、Git Bash、MSYS2 等 bash 明明能正常跑,DSH 却没有「选哪个 shell 来执行」的能力。

下面介绍社区插件 dsh-shell-switch(维护者 tianxingdao):为 DSH 注册官方同行为的 bash 工具,并在 更多 → 设置 → Shell 提供选择器;在 Windows 上还可隐藏 pwsh,让 bash 成为模型侧唯一的 shell 工具。插件分类为客户端,当前在 GitHub 上星标为 1。社区目录页:https://www.skillhub.cn/plugins/tianxingdao/dsh-shell-switch;源码:https://github.com/tianxingdao/dsh-shell-switch。

这是什么

dsh-shell-switch(bundle 行 id:shell-switch,版本 0.1.0,MIT 许可证)做两件事:

  1. 复用官方 @deepseek-ai/dsh-tool-bash 与 @deepseek-ai/dsh-bash-sandbox,只把实际执行的程序换成你在设置页或配置里选中的本机 bash。
  2. 在 Web 客户端注册 Shell 选择器 设置页,列出检测到的 shell(含版本与路径),保存后下一条命令即生效,无需重启 DSH。

它不替换宿主的 ctx.shell 单例,也不卸载官方 pwsh 包;Windows 下通过对 Agent 作用域的 deny 过滤隐藏 pwsh,停用插件即恢复。

核心功能

bash 工具

  • 行为与官方 bash 工具一致:后台任务(run_in_background)、超时、输出 spill、沙箱升级、[exit code: N] 等标记不变。
  • 命令始终按当前会话的 ctx.sandboxPolicy 执行,插件不提供绕过沙箱的能力。

设置 → Shell 选择器

  • 下拉框分 可用于 bash 与 已检测到但不是 bash 方言(如 WSL bash、PowerShell、cmd 等,禁用并标注原因)。
  • 支持保存、恢复默认、重新扫描(忽略 15 秒检测缓存)。
  • 用户选择写入 %DSH_HOME%\shell-switch.json。

Windows 下隐藏 pwsh

插件启用期间,每个 Agent 的工具列表去掉 pwsh;卸载或停用后恢复。侧边栏终端不跟随该选择(已知限制)。

环境要求

项目 要求
操作系统 Windows 10/11 为主要目标;非 Windows 会退化为不过滤 pwsh
DSH 0.2.1-rc.2 及以上(开发验证于 0.2.1-rc.2)
本机 shell 至少一个 bash 兼容环境:Niubash、Git Bash、MSYS2、Cygwin,或 PATH 上的 bash.exe

安装与启用

资料中的安装方式为 本地 bundle 安装,不是凭仓库名拼接 CLI 命令。

方式一:从本地目录安装

在 DSH Agent 会话里执行(target 为本仓库绝对路径):

plugin_manager install_bundle  target = <本仓库的绝对路径>

例如:

install_bundle: /path/to/dsh-shell-switch

安装后 profile 的 dsh.profile.bundles 会增加 dsh-shell-switch,node_modules/dsh-shell-switch 以 link 指向该目录,bundle 行 id 为 shell-switch。

方式二:克隆仓库后按方式一安装

README 给出的克隆地址为:

git clone https://github.com/tianxingdao/dsh-shell-switch.git

再将克隆目录作为 target 执行方式一。(本文任务要求不执行 git clone,仅复述文档步骤。)

安装后确认

  1. 新会话工具列表里出现 bash。
  2. 更多 → 设置 → Shell 出现 Shell 选择器。
  3. (Windows)pwsh 不再出现在工具列表。

客户端页面在 Harness 启动时注册;热装后若设置页未出现,先刷新页面,仍无则重启 DSH。

典型用法

调用 bash 工具

bash: {
  command:  "git status --short && npm test",
  workdir:  "<项目目录>",   // 可选,默认会话工作目录
  timeoutMs: 120000          // 可选,受配置上限约束
}

每次调用都是全新 shell;结果末尾含 [exit code: N]、[killed by signal] 或 [timeout after N ms] 等标记。

在设置页选择 shell

保存写入 %DSH_HOME%\shell-switch.json,下一条 bash 命令使用新 shell。恢复默认 清除选择,回落到 profile 里的 shell / shellPath 或自动检测。

profile 配置(shell-switch 行)

- id: shell-switch
  name: dsh-shell-switch
  config:
    shell: auto
字段 默认 说明
shell auto 预设 id 或 auto(第一个 bash 兼容项)
shellPath 空 显式可执行路径,优先于 shell
timeoutMs 120000 前台默认超时
maxTimeoutMs 600000 单次 timeout 上限

选择优先级:设置页保存的路径 → shellPath → shell → 自动检测。

适用场景与注意

适合谁: 主要在 Windows 上跑 DSH、希望模型直接写 bash 而不是 PowerShell,且本机已有 Niubash / Git Bash / MSYS2 等环境的开发者。

权限与安全: 插件与 DSH 宿主在同一进程权限下运行;命令仍受会话沙箱策略(read-only / workspace-write / danger-full-access)约束。安装前请自行阅读源码与 MIT 许可证,确认符合你的安全策略。DSH 生态强调「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。

卸载:

plugin_manager remove_bundle  target = dsh-shell-switch

或停用 shell-switch 条目;bash 消失,Windows 下 pwsh 恢复,shell-switch.json 可保留供再次启用。

结尾

dsh-shell-switch 补上了「本机 shell 检测 + 设置页选择 + 官方 bash 工具行为」这一层,缓解 Windows 上 PowerShell 翻译成本与 ops 内置 bash 在沙箱内不可用的问题。需要细节、HTTP 接口与故障排查表时,以仓库 README 为准。

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

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

小夜