dsh-plugin-autoupdate:守规矩的 DSH Profile 插件更新

前言

DeepSeek Harness(DSH)的插件装在各个 profile 里,日常靠 dsh plugin 管理。手动检查、升级时,很容易踩坑:pnpm outdated 里「Latest」并不等于当前供应链策略下能装的版本;0.x 依赖的 caret 范围往往跨不了 minor;升完还要重启进程,浏览器侧还要刷新;一旦升坏,回滚也得自己摸索。

下面介绍 maintainer publieople 的 dsh-plugin-autoupdate(分类 admin-security)。它在 DSH 生态里做一件事:按 pnpm 最小发布时长(supply-chain)策略选版本,更新前自动快照、支持回滚,并提供与对话页同级的主栏页面和 agent 工具,把检查、应用、锁定、自动更新串起来;「重启 DSH」仍由你决定,插件不会替你做主。

这是什么

dsh-plugin-autoupdate 是挂在 profile 上的 DSH 插件(README 标注 status: early,license: MIT,要求 dsh: 0.2.0-rc.x 及以上;npm 包当前版本 0.3.2)。它不是 DSH 主程序(harness)本身的更新器,只处理 profile 里已安装的插件依赖。

核心约束写得很清楚:不会绕过 pnpm 的最小发布时长策略;版本决策全部交给 DSH CLI,与你在终端手动执行的行为一致。

它解决哪些具体问题

README 用表格归纳了手动更新的四个坑,本插件针对这些点做自动化或明示:

问题 插件侧做法
Latest 与「能装」不一致 只应用策略放行的版本,与 pnpm outdated 口径一致
^0.x 范围窄、跨 minor 升不上去 页面标「范围外」,并说明可用「忽略版本范围」或 agent 的 latest
升级后需重启 / 刷新 工具报告 restartRequired;页面区分「刷新界面」与「重启 DSH」
升坏了难恢复 每次 apply 前快照,保留最近 5 份,支持回滚

核心功能

主栏页面「插件更新」

安装后侧栏多一个图标,打开是与对话页同级的主栏整页,五个 Tab:

  1. 可用更新 — 各 profile 可升的插件;可勾选「更新所选」或「全部更新」;每行可锁定;超出记录 semver 范围的行标「范围外」。
  2. 已安装 — 依赖、版本范围与来源;可「回滚最近一次更新」。
  3. 发现 — 读取插件市场官方目录(数据源 https://awesome-dsh-plugin.com/plugins.json,与 dsh-market 同源),可搜索、按分类筛选、一键安装;只认目录里的 npm 名,不带版本。
  4. 已锁定 — 被锁定的包,可解锁。
  5. 自动更新 — 定时检查与条件满足时自动应用(默认全部关闭,需在此 Tab 手动打开)。

工具栏提供:重新加载、更新所选、全部更新、忽略版本范围(等价 --latest)、回滚、导出 CSV。右上角 刷新界面 仅重载浏览器侧;重启 DSH 受能力门禁约束(官方桌面版会说明需退出再开并拒绝执行;CLI / 服务部署才可能真正重启进程)。

Agent 工具 dsh_plugin_updates

action 作用
check(默认) 列出各 profile 可更新插件
apply 先快照再更新,报告范围变动
rollback 恢复最近快照(或指定 snapshot=)并重装
lock / unlock 抑制或恢复某包的更新提示
settings 读/写某 profile 的自动更新开关

常用参数:profiles(逗号分隔,默认当前实例 profile)、latest(忽略记录的 semver 范围选版,仍受发布时长策略约束)。工具不会替你重启 DSH。

快照、锁定与自动更新

  • 快照:apply 前将 package.json、pnpm-workspace.yaml、pnpm-lock.yaml、cordis.patch.yml 复制到 <profile>/.plugin-backup-auto-<时间戳>/,最多保留 5 份;rollback 还原后再跑 dsh plugin --profile <p> install。
  • 锁定:状态写在 <profile>/.plugin-autoupdate.json;不钉 manifest 版本,只是不再提示更新;被锁定的包不会被自动更新。
  • 自动更新:三个开关(启动后检查、定时间隔、发现即应用)默认全关;宿主约每分钟重读设置。失败过的 包@版本 记入 failures(最多 50 条),可清除后重试。

HTTP 与安全边界

页面通过宿主上 9 条路由读写状态与执行写操作;写操作要求 loopback 或 PLUGIN_AUTOUPDATE_TRUSTED_HOSTS 声明的 Host,apply / rollback / install / restart 还需请求体 confirm: true。安全模型强调:绝不走 pnpm add pkg@x.y.z(避免写入 minimumReleaseAgeExclude)、只写 profile 与插件自身缓存、自动应用路径与手动 dsh plugin update 一致。

安装与启用

在目标 profile 下执行 README 给出的安装命令:

dsh plugin --profile <你的 profile> add dsh-plugin-autoupdate

装完后完全退出 DSH 再重开。宿主插件只在进程启动时加载;仅刷新页面不会重载宿主侧。

典型用法

页面手动更新:打开侧栏「插件更新」→「可用更新」勾选插件 →「更新所选」或「全部更新」→ 按提示 重启 DSH(或桌面版自行退出再开)使宿主插件生效;若只需加载新装的客户端 UI,用「刷新界面」。

跨 0.x 范围:对标「范围外」的行,使用工具栏「忽略版本范围」或 agent 调用时设 latest=true,仍受发布时长策略限制。

Agent 检查并应用(示意,具体以你实例的工具 schema 为准):

action=check
action=apply
action=rollback

从「发现」安装:在 Tab 内选目录中的插件一键安装;拒绝 pkg@1.2.3 这类带版本的 spec。

适用场景与注意

适合:长期在多个 profile 维护较多 DSH 插件、希望更新流程与 pnpm 供应链策略对齐、需要快照回滚和可选自动更新的开发者或运维。

务必注意:

  • 插件以当前 DSH 进程权限运行,安装前应阅读 GitHub 仓库 源码与 MIT 许可证,自行评估信任边界。
  • 自动更新默认关闭;打开「发现更新就自动应用」前请确认 profile 内容与锁定策略。
  • 「发现」目录来自社区站点 awesome-dsh-plugin.com,与 DeepSeek / 幻方无官方从属关系,不是官方应用商店。
  • 需要 Node >=22(见 package.json engines)。

结尾

dsh-plugin-autoupdate 把 profile 插件更新的检查、受策略约束的应用、快照回滚和可视化操作收进一个 admin-security 向的插件里,并明确把重启 DSH 留给你。进一步了解可看目录页 skillhub.cn/plugins/publieople/dsh-plugin-autoupdate 与源码 github.com/publieople/dsh-plugin-autoupdate。

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

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

Xiaoye