dsh-shell-switch

DSH PLUGIN会话与消息

仓库 tianxingdao/dsh-shell-switch

会话与消息 L4 · 沙盒安装通过 安全审查:低风险 可信度:银 可安装插件
安装这个插件

dsh-shell-switch 是 tianxingdao 维护的 会话与消息 类 DSH 可安装插件, 仓库为 tianxingdao/dsh-shell-switch,许可证 MIT。 下面按「装什么、怎么装、验没验过、跑起来要注意什么」逐项列出。

一句话选型结论

按资料字段整理

dsh-shell-switch 是会话与消息类的 DSH 可安装插件,验证等级 L4 · 沙盒安装通过,安全审查为低风险,有可直接复制的安装命令。验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么;涉及密钥或系统权限的,建议先在隔离环境试装。

分类会话与消息 收录类型可安装插件 验证等级L4 · 沙盒安装通过 安全审查低风险
验证等级 L4 L4 · 沙盒安装通过
GitHub 星标 1 复刻 0 · 未关闭 issue 0
最近更新 2026-10-29 创建于 2026-10-26
README 13.0 KB 正文体量,越大说明说明书写得越细

安装

可安装插件
在 DSH 里执行,装完用 dsh plugin list 确认已挂上;标了 L4 / L5 的命令已在沙盒里真实跑通
dsh plugin --profile web add github:tianxingdao/dsh-shell-switch
  1. 1
    确认版本与运行环境

    仓库没有标注兼容版本与 Node.js 要求,先确认你的 DSH 版本能装,再继续。

  2. 2
    执行安装命令

    在 DSH 里执行上面的命令;多包仓库要注意区分具体子包名,别装错包。

  3. 3
    确认已挂载

    用 dsh plugin list 查看列表里是否出现这个插件,出现即挂载成功。

  4. 4
    试跑并检查权限

    加载后跑一个最小用例,确认它能正常工作;同时看它申请了哪些文件、命令或网络权限。

兼容 DSH 版本未标注版本不匹配时安装会报错
Node.js 要求未标注来自仓库 package.json 的 engines 字段
前置依赖无需要同时安装的同级依赖
npm 包名未发布到 npm可用 npm view 查看包信息

能做什么

会话与消息
字段来自项目仓库与公开索引,中文说明由本站标注

适用场景

终端命令GitHub 集成

上游标签

bashcordisdeepseek-harnessdshdsh-plugingit-bashmsys2niubashshellwindows

验证等级与安全审查

L4 · 沙盒安装通过
自动化流程结论,不是人工审核
验证等级L4 · 沙盒安装通过安装命令在隔离沙盒内真实执行成功,无依赖错误
安全审查低风险静态分析结论,未标注不代表已通过审查
仓库健康度活跃按仓库活跃度与最近更新时间给出
可信度银综合仓库活跃度与验证结果

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 验证等级 L4:在沙盒里真实装过,依赖能装上,不是纸面声明。
  • 静态安全审查为低风险,没有发现明显可疑行为。
  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有声明 Node.js 版本要求,版本不匹配可能装不上。
  • 验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么。

更适合

  • 需要在会话与消息场景里给 DSH 补能力的人。
  • 想装完就能用、不想自己排依赖的人。
  • 能接受在本地装依赖、愿意自己确认权限的人。

不太适合

  • 只使用 DSH 官方内置能力、不接受第三方插件的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
插件验证等级安全审查星标兼容版本安装命令
dsh-shell-switch当前 L4 · 沙盒安装通过 低风险 1 未标注 有
dsh-desktop L3 · 安装规范通过 低风险 3.0 万 未标注 无
openpets L4 · 沙盒安装通过 低风险 1,274 未标注 有
deeptide L4 · 沙盒安装通过 低风险 1,104 0.1.1-rc.2 有
jingyun-dsh L3 · 安装规范通过 低风险 1,004 未标注 有
study-mate 未做沙盒验证 未标注 856 未标注 无

仓库档案

会话与消息
字段来自项目仓库与公开索引,中文说明由本站标注
作者 / 维护方tianxingdao仓库 dsh-shell-switch · 默认分支 main
分类会话与消息desktop
收录类型可安装插件声明了 dsh.bundle、可用 dsh plugin add 安装的条目
开发语言未标注仓库主语言
许可证MIT商用或二次分发前请确认条款原文
星标 / 复刻 / issue1 / 0 / 0收录时的数值,非实时
创建 / 更新2026-10-26 · 2026-10-29最后推送 2026-10-29
本站收录2026-10-30首次进入本站目录的时间

README 全文

13.0 KB
作者原文,中文版优先;只做安全转义,不改内容

dsh-shell-switch

English | 简体中文

给 DeepSeek Harness(DSH)加一个 bash 工具和一个 设置 → Shell 选择器 页面:bash 命令直接在本机真实存在的 shell(Niubash / Git Bash / MSYS2 / Cygwin / PATH 里的 bash.exe)里执行,不再被改写成 PowerShell 命令。

Windows 下还会隐藏官方 pwsh 工具,让 bash 成为唯一的 shell 工具。

之前:模型想跑 ls → 必须写成 Get-ChildItem(pwsh 工具),或依赖 dsh-ops 自带的 MSYS bash(沙箱里经常起不来)
之后:模型跑 ls → 直接在 Niubash bash 5.3 里执行,输出、退出码、后台任务、spill 与官方 bash 工具完全一致

目录

  • 为什么需要它
  • 功能
  • 环境要求
  • 安装
  • 使用
  • 工作原理
  • 配置
  • HTTP 接口
  • Shell 检测与兼容性
  • 沙箱与权限
  • 已知限制
  • 卸载与恢复-pwsh
  • 故障排查
  • 开发
  • License

为什么需要它

Windows 上的 DSH 默认有两条 shell 路径:

  1. 官方 pwsh 工具 —— 模型必须把命令写成 PowerShell 语法;对习惯 bash 的模型/提示词来说,这是持续的翻译成本。
  2. dsh-ops 自带的 MSYS bash —— 在 DSH 的 Windows 受限令牌沙箱里,cygwin 初始化会失败(NtSetInformationToken / CreateFileMapping ... Win32 error 5),ops_bash 往往直接不可用。

同时,Windows 上装了 Niubash、Git Bash、MSYS2 的用户,这些 bash 明明能正常跑(实测 Niubash 的 bash.exe 在 DSH 受限令牌下工作正常),但 DSH 并没有「选择本机 shell」的能力。

本插件补上这一层:检测本机所有 shell → 在设置页选一个 → 官方 bash 工具就用它执行。

功能

  • bash 工具:复用官方 @deepseek-ai/dsh-tool-bash 与 @deepseek-ai/dsh-bash-sandbox,只把执行文件换成你选的 shell。因此后台任务(run_in_background)、超时、输出 spill、沙箱升级、[exit code: N] 标记等行为与官方完全一致。
  • 设置 → Shell 选择器:下拉框列出本机所有 shell(含版本、路径),支持保存、恢复默认、重新扫描;保存后下一条命令即生效,无需重启。
  • Windows 下隐藏 pwsh:官方 pwsh 工具无法卸载,但只要本插件启用,就对每个 Agent 加作用域级屏蔽,bash 成为唯一 shell 工具;停用插件即恢复。
  • 不破坏现有能力:不改宿主的 ctx.shell 执行器,pwsh 执行器行原样保留;其他预设工具(文件、搜索、子代理等)不受影响。
  • 尊重沙箱:命令始终按当前会话的 ctx.sandboxPolicy 执行,插件不提供任何绕过。

环境要求

项目 要求
操作系统 Windows 10/11(主要目标;非 Windows 会退化为不过滤 pwsh,检测逻辑也面向 Windows)
DSH 0.2.1-rc.2 及以上(开发验证于 0.2.1-rc.2)
本机 shell 至少一个 bash 兼容 shell:Niubash、Git Bash、MSYS2、Cygwin,或 PATH 上的 bash.exe
Node 由 DSH 自带,无需单独安装

安装

方式一:从本地目录安装(开发 / 自用)

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

例如在 DSH 的 Agent 会话里:

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

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

方式二:从 GitHub 克隆后安装

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

然后把克隆出来的目录作为 target,按方式一安装。

安装后确认

  • 新会话的工具列表里出现 bash;
  • 更多 → 设置 → Shell 出现「Shell 选择器」;
  • (Windows)pwsh 不再出现在工具列表。

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

使用

bash 工具

bash: {
command:  "git status --short && npm test",
workdir:  "<项目目录>",   // 可选,默认会话工作目录
timeoutMs: 120000          // 可选,受配置上限约束
}
  • 每次调用都是全新 shell,cd / 变量 / 函数不跨调用保留;
  • 结果末尾是机器可读标记:[exit code: N]、[killed by signal] 或 [timeout after N ms];
  • 输出超限会截断并提示,完整流在 spill 文件里;
  • 与官方 bash 工具一样支持 run_in_background(配合 job_output / job_kill)。

设置 → Shell 选择器

  • 下拉框分两组:可用于 bash(可选择)与 已检测到,但不是 bash 方言(WSL bash、PowerShell、cmd、Niubash 的 winuxsh.exe,禁用并标注原因);
  • 每个 bash 显示版本(如 5.3.0)与完整路径;
  • 卡片显示当前生效 shell、已保存选择、回退配置、沙箱模式;
  • 保存:写入 %DSH_HOME%\shell-switch.json,下一条命令生效;
  • 恢复默认:清除选择,回落到插件配置的 shell / shellPath / 自动检测;
  • 重新扫描:忽略 15 秒缓存重新检测(装了新 shell 后点一下)。

隐藏 pwsh(Windows)

本插件启用期间,Windows 下每个 Agent 的工具列表都会去掉 pwsh。这不是改组合、也不是卸载官方插件,而是在 Agent 作用域上加一条 deny 过滤,随插件卸载释放。

  • 现存与新建 Agent 都生效,下一条模型请求即可看到新工具列表;
  • 想恢复:停用或卸载本插件。

工作原理

Agent 创建
└─ agent.ctx.isolate('shell')                 每个 Agent 一个独立 shell 作用域
├─ ShellSwitchExecutor                   继承官方 SandboxBashExecutor
│    ├─ confine(cmd) → ctx.sandbox.confine([<选中 shell>, '-c', cmd], policy)
│    └─ execute()   → danger-full-access 时走 executeArgv
└─ @deepseek-ai/dsh-tool-bash            官方工具,注册进该 Agent 的 tools 层

几个关键点:

  1. 为什么每个 Agent 一份:Web 端每个会话挂的是 agent preset,工具注册在 Agent 自己的作用域里;全局注册对 Session 不可见。所以插件监听 agent/created,并为已存在的 Agent 补挂。
  2. 为什么不动 ctx.shell:ctx.shell 是单例服务,替换它会连带破坏 pwsh 工具。这里改为在隔离作用域里提供自己的 shell,只有挂载的官方 bash 工具能看到它。
  3. 为什么能加载官方包:profile 里的插件无法直接 import '@deepseek-ai/dsh-*'。插件以宿主进程入口(process.argv[1])为锚点 createRequire,再 import() 官方包的真实路径;解析失败时可用 DSH_INSTALL 指定安装根目录。
  4. 为什么切换不用重启:选择存在 %DSH_HOME%\shell-switch.json(按 mtime 缓存),执行器每次 resolve() 重新解析,所以保存后下一条命令就换 shell。

目录结构

.
├─ index.js            Host 半:shell 检测、执行器、按 Agent 挂载、pwsh 屏蔽、设置 API
├─ client.js           Client 半:设置 → Shell 选择器(slot settings.section)
├─ cordis.patch.yml    bundle 补丁,只插入一行 shell-switch
├─ locale/             插件清单里的标题与描述(zh / en)
├─ icon.svg            插件图标
├─ package.json        bundle 清单(dsh.bundle.patch + dsh.client)
├─ README.md           中文说明
└─ README.en.md        英文说明

配置

profile patch 中的 shell-switch 行:

- id: shell-switch
name: dsh-shell-switch
config:
shell: auto
字段 默认 说明
shell auto 预设 shell id:niubash、git-bash、msys2、cygwin、bash、wsl 等;auto 取第一个 bash 兼容项
shellPath 空 显式可执行文件路径,优先于 shell
timeoutMs 120000 前台命令默认超时
maxTimeoutMs 600000 单次 timeoutMs 上限
maxOutputBytes 64000 单流输出内存上限,超出转存 spill 文件
maxSpillBytes 67108864 spill 文件上限
graceMs 3000 终止到强杀的宽限期

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

%DSH_HOME%\shell-switch.json(设置页保存的值):

{
"shell": {
"path": "",
"at": "2026-01-01T00:00:00.000Z"
}
}

HTTP 接口

Host 内部接口,仅同源页面可访问(供设置页使用;通过局域网 IP 或反向代理打开 GUI 同样可用):

方法 路径 说明
GET /api/dsh-shell-switch/state 检测列表、当前选择、生效项、沙箱模式、pwsh 状态
POST /api/dsh-shell-switch/select { "path": "…" } 选择;{ "action": "reset" } 恢复默认

/state 示例(截断):

{
"ok": true,
"shells": [
{ "path": "", "label": "Niubash bash",
"version": "5.3.0", "compatible": true, "source": "registry" }
],
"selected": null,
"effective": { "label": "Niubash bash", "version": "5.3.0" },
"sandbox": { "mode": "workspace-write", "workspaceRoot": "<会话工作目录>" },
"pwsh": { "hidden": true, "restrictedAgents": 1, "errorCode": null }
}

Shell 检测与兼容性

检测顺序(按真实路径去重):

  1. 注册表 ...\CurrentVersion\Uninstall 中 DisplayName 含 Niubash / Winuxsh 的 InstallLocation → winuxcmd\usr\bin\bash.exe、winuxcmd\bin\bash.exe 等;
  2. Git for Windows 常见位置(Program Files、Program Files (x86)、LocalAppData\Programs);
  3. %SystemDrive%\msys64、msys32、cygwin64、cygwin;
  4. PATH 里的 bash.exe、pwsh.exe、nu.exe;
  5. 非 bash 方言也会列出但禁用:Niubash 的 winuxsh.exe、WSL System32\bash.exe、PowerShell 7 / 5.1、cmd.exe。

兼容性说明:

  • Niubash 的 bash.exe 在 DSH 受限令牌沙箱内实测可用(bash 5.3.0);
  • WSL bash 虽然也是 bash,但 Windows 路径在 WSL 内不存在,默认标记为不兼容;
  • 选中非 bash 方言会被接口拒绝(该工具只接受 bash 语法)。

沙箱与权限

  • 命令按当前会话的权限预设执行:read-only / workspace-write / danger-full-access;
  • 受限模式通过 ctx.sandbox.confine(argv, policy)(Windows 上为 ACL 受限令牌链)包装后才启动进程;
  • 文件被拒绝时会在 stderr 出现拒绝信息,并带上沙箱模式说明;
  • 插件本身不改变权限、不提供绕过,也不缓存特权结果。

已知限制

  • 只影响模型侧的 bash 工具;侧边栏终端不跟随该选择。
  • 只支持 bash 方言;WSL / PowerShell / cmd 只能展示,不能选。
  • pwsh 屏蔽依赖 Agent 作用域的 tools.restrict,所以:
  • 对已存在的会话在下一条模型请求生效(不是当前正在流式输出的那条);
  • 插件被停用/卸载后自动恢复。
  • 客户端设置页在 DSH 启动时注册;插件热装后需要刷新页面(必要时重启 DSH)。
  • 非 Windows 平台不做 pwsh 过滤(那些平台本来也不会组合 pwsh)。

卸载与恢复 pwsh

plugin_manager remove_bundle  target = dsh-shell-switch

或停用条目 shell-switch。停用后:

  • bash 工具消失(会话恢复官方工具集);
  • Windows 下 pwsh 工具恢复;
  • %DSH_HOME%\shell-switch.json 保留,重新启用后继续生效;不需要时可手动删除。

故障排查

现象 处理
设置页没有「Shell」 插件是启动后安装的:刷新页面;仍没有则重启 DSH
工具列表里没有 bash 确认行 shell-switch 处于启用状态且无报错;查看 %TEMP%\dsh-shell-switch-debug.log
报错找不到 DSH 安装 设置环境变量 DSH_INSTALL 指向 DSH 安装根目录后重启
报错「没有可用的 bash shell」 在设置页选择,或安装 Niubash/Git Bash/MSYS2 后点「重新扫描」
选中项显示「不是 bash 方言」 换一个「可用于 bash」分组里的 shell
命令报文件拒绝 属于会话沙箱策略,不是插件;按 DSH 的权限提示处理
pwsh 还在 该会话是在屏蔽前创建的:新开一个会话,或等下一次模型请求重算工具目录

日志:%TEMP%\dsh-shell-switch-debug.log(只在挂载、工具激活、屏蔽时写入)。

开发

  • 修改后:plugin_manager set_plugin 先 false 再 true 触发热重载(客户端需刷新页面);
  • 语法检查:node --check index.js && node --check client.js;
  • 调试端点:GET /api/dsh-shell-switch/state(在 DSH 进程所在机器上)。

License

MIT

常见问题

6 问
答案由本站依据条目字段整理,不引用上游原文
dsh-shell-switch 怎么安装?

在 DSH 里执行 `dsh plugin --profile web add github:tianxingdao/dsh-shell-switch` 即可。

dsh-shell-switch 的验证等级是什么意思?

L4 · 沙盒安装通过。安装命令在隔离沙盒内真实执行成功,无依赖错误

dsh-shell-switch 安全吗?

低风险。

dsh-shell-switch 装之前要先确认什么?

先看它会读写哪些文件、执行哪些命令、连接哪些网络地址;验证等级只说明装得上、跑得起来,不等于安全。涉及密钥或系统权限的,建议先在隔离环境试装。

dsh-shell-switch 用的是什么许可证?

上游标注为 MIT。商用或二次分发前请到仓库确认许可证原文。

这条记录的数据可靠吗?

本站按仓库名去重后合并整理,字段以作者仓库与 npm 元数据为准;安装命令、仓库地址与 README 保持原文,带 L4 / L5 标记的安装命令已在隔离沙盒里真实跑通。

同名或近似条目

1 条
不同作者的仓库分开列,请确认你要装的是哪一个
会话与消息
按星标排序,可作替代方案

dsh-desktop

dsh-desktop

为 DeepSeek Harness (DSH) 插件生态打造的现代化桌面端解决方案。万物皆「插件」,桌面本身也是「插件」。

L3 · 安装规范通过 3.0 万 星

openpets

openpets

L4 · 沙盒安装通过 1,274 星

deeptide

deeptide

L4 · 沙盒安装通过 1,104 星

jingyun-dsh

jingyun-dsh

井云 DSH 客户端插件,为 DeepSeek Harness 注入会员登录、订阅支付、算力管控与应用市场,让智能体和技能快速变成可交易商品

L3 · 安装规范通过 1,004 星

study-mate

study-mate

StudyMate 是 DSH 的「学习模式」预设与技能包,为数学、计算机科目定制学习路线、讲解课件与练习评估,跨科目共享记忆。

未标注验证等级 856 星

插件的元信息来自作者仓库;分类、验证等级与安全结论的中文说明为中文整理,最近核验 —。