前言¶
在 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 许可证)做两件事:
- 复用官方
@deepseek-ai/dsh-tool-bash与@deepseek-ai/dsh-bash-sandbox,只把实际执行的程序换成你在设置页或配置里选中的本机 bash。 - 在 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,仅复述文档步骤。)
安装后确认¶
- 新会话工具列表里出现
bash。 - 更多 → 设置 → Shell 出现 Shell 选择器。
- (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 为准。