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