dsh-plugin-versions:在 DSH 里浏览已装插件版本并切换、回滚

前言

DeepSeek Harness(DSH)把能力拆成可安装的插件 bundle。官方插件管理器刻意不提供版本选择器:第三方插件通常只能卸载再重装来升级,只有部分官方按需 bundle 才有明确的 Update 按钮。若要固定某个已知可用版本,或在升级后出现回归时回到旧版,往往需要手改 profile 里的 package.json。

dsh-plugin-versions 在 Settings → Plugins 下增加 Installed plugins 页面,用宿主自带的 pluginManager 列出已装插件的发布版本、切换或回滚,并在同一页卸载,不替代市场或安装器本身。

这是什么

  • 定位:已安装 DSH 插件的版本浏览器与管理入口(客户端插件)。
  • 包名:dsh-plugin-versions(package.json 版本 0.1.3,MIT,要求 Node >= 20)。
  • 简介:对已安装的 DeepSeek Harness 插件列出 registry 上的发布版本,支持切换、失败自动回滚与卸载。
  • 分类:客户端(在浏览器侧注册 Plugins 页的 Versions 标签,经 loopback HTTP 与宿主通信)。

社区目录页:just-liuyi/dsh-plugin-versions。README 中的安装源指向 GitHub 仓库 DangDangDeng/dsh-plugin-versions(npm 包尚未发布,需从仓库安装)。

核心功能

下面能力均来自插件 README 与 package.json 说明。

  1. 已装列表:列出当前 profile 安装的 bundle,含版本、来源 spec、是否可移除。
  2. 版本展开:从 registry 拉取该 bundle 的全部发布版本(发布日期、latest、deprecated 等标记);当前版本与最新版本会有标签。
  3. 切换版本:经 pluginManager.removeBundle 再 pluginManager.installBundle(name@version, { saveExact: true, enabled: true }) 写入精确依赖;安装失败(peer 校验、版本不存在、网络等)会自动装回上一版本并报告错误。
  4. 卸载:从同一标签页卸载 profile 中的 bundle;配置会保留。
  5. Registry:使用 profile 配置的 registry(含私有源),必要时回退到 registry.npmjs.org。

宿主侧仅暴露本机 loopback 路由,不能当作通用安装器:

POST /plugin-versions/api/{list|versions|switch|remove}

请求需带 x-requested-with: XMLHttpRequest,非跨站 sec-fetch-site,且 Host 为 127.0.0.1 / localhost / ::1。只能操作本 profile 已安装的 bundle。

安装与启用

README 写明 npm 尚未发布,需从仓库安装。将 <name> 换成你的 profile 名。

dsh plugin --profile <name> add github:DangDangDeng/dsh-plugin-versions

或使用显式 Git URL:

dsh plugin --profile <name> add git+https://github.com/DangDangDeng/dsh-plugin-versions.git

DSH Desktop 的 desktop profile 由应用管理:在 Plugins → Add plugin 中填写 github:DangDangDeng/dsh-plugin-versions,不要用上述 CLI。安装后重启或刷新页面。可用 #<tag> 或 #<commit> 固定修订。将来发布到 npm 后,README 预期可使用 dsh plugin add dsh-plugin-versions。

典型用法

  1. 打开 Settings → Plugins。
  2. 进入 Installed plugins 标签。
  3. 展开某个插件查看版本列表;当前版本与 latest 会有标记。
  4. 点击 Switch:确认后先卸再装目标版本;失败则自动回滚。
  5. 需要移除时用 Uninstall。

切换后应刷新页面,以便浏览器加载新版本对应的 client 半部分。若 profile 无 HMR,宿主可能返回 restart-required 而非即时生效。

切换流程(README 摘要):

pluginManager.listBundles()        # 找到已装 bundle 并记住版本
pluginManager.removeBundle(name)   # 卸载并移除依赖
pluginManager.installBundle(name@version, { saveExact: true, enabled: true })
   ├─ 成功 → ChangeResult.application: applied | restart-required
   └─ 失败 → 清理半成品并装回上一版本

适用场景与注意

适合:经常试社区插件、需要在多个发布版之间对比或回滚的 DSH 用户;使用私有 npm registry 的 profile。

局限(README 原文):

  • 仅 loopback:通过 --trusted-host 从其他机器打开的页面会被拒绝。
  • 不做自动更新检查,这是版本浏览器而非 updater。
  • 不预先逐版本做兼容性检查;不兼容时由宿主拒绝,切换会回滚。
  • 无 HMR 时切换可能需要重启;切换后必须刷新页面才能跑新 client。

安全:插件在 DSH 进程权限下运行,安装前请阅读仓库源码与 MIT 许可证,确认来源可信。SkillHub 目录与 DeepSeek / 幻方无官方从属关系,仅为社区收录。

结尾

dsh-plugin-versions 补上官方管理器缺失的版本选择界面,在不动市场与安装流程的前提下,用 pluginManager 完成列版本、切换、失败回滚与卸载。

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

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

小夜