dsh-auto-upgrade:扫描、暂存与可回滚的 DSH 插件升级工作流

前言

DeepSeek Harness(DSH)把能力拆成 profile 上的 bundle 与插件;版本一多,手工 dsh plugin add、改依赖、重启宿主,很难保证「新包能装、能起、出问题能撤」。常见做法是直接覆盖生产目录,一旦 boot 失败就要靠备份或重装。下面介绍社区插件 dsh-auto-upgrade:用只读扫描摸清现状,在隔离 home 里构建候选版本并通过门禁,最后用两次目录重命名完成切换;回滚不依赖网络、也不删旧目录。

这是什么

dsh-auto-upgrade 是一个 DSH bundle:扫描已安装 profile 的更新情况,在隔离环境中暂存候选版本,经门禁后再切换,并支持可逆回滚。仓库维护者为 neo805(KEI.NEO),在 SkillHub 分类为工作流。当前版本 0.1.1-rc.2,在 DSH 0.2.1-rc.2 上做过端到端验证;engines.dsh 要求 >=0.2.0-rc.1 <0.3.0-0。项目自述为 0.1.x 进行中:扫描、候选流水线与可逆切换已实现;全自动探针矩阵、双端编排、定时自升级等仍在规划中,README 中有明确状态表,下文只写「今天能用」的部分。

架构上分三层:Bundle 负责像普通插件一样挂载与卸载;Skill 负责兼容性、安全与重叠等判断(需随版本重写);Scripts 负责扫描、快照、门禁、提升与回滚,确定性执行、可离线、不消耗 token。Bundle 挂载时会把 scripts/ 复制到 $DSH_HOME/auto-upgrade/scripts/。Registrar 有意不 import @deepseek-ai/*,仅通过 inject: ["skills"] 注册 skill,避免升级日被版本门误伤。

核心功能(当前已实现)

能力 说明
只读扫描 按 profile 盘点依赖、来源分类(npm / file / link / git)、engines 与 peer 门禁、快照、报告与根入口文件
隔离候选构建 独立 home、自有 node_modules,经 dump 门禁与隔离 boot 门禁
切换与回滚 两次重命名切换;反向重命名回滚;可 commit;首次重命名前写入 recovery-intent
执行器部署 挂载时脚本落到 $DSH_HOME/auto-upgrade/scripts/

门禁要点(资料原文):对 dsh --profile <p> --dump-default-config 只看 bundle 层;校验 engines.dsh 与各 @deepseek-ai/dsh-* peer;隔离 boot 用 --port 0 探活(Web 上 401 视为存活)。扫描除 $DSH_HOME/auto-upgrade/ 与一个入口文件外不改生产环境;切换时 live profile 移入 quarantine/<txn>/original,不删除。

README 记载在 Web 侧曾用两个真实升级做过 E2E(clearai-dsh 0.5.5→0.5.6、@changfenhuang/dsh-genui 0.13.0→0.14.0,各一次,含宿主重启与健康检查)。Desktop 侧尚未覆盖。0.1.x 一次只处理一个插件;DSH 核心升级与 Desktop 半自动化未实现;功能回归目前主要靠组合级门禁与证据,工具级 A/B 探针矩阵未实现。

环境与要求

  • Windows 10/11,PowerShell 7。
  • 待维护的 DSH 安装(开发与测试目标 0.2.1-rc.2)。
  • pnpm 在 PATH(候选构建装到隔离 profile)。
  • 目标版本未缓存时需要网络(或已有 warm 的 pnpm store)。
  • 尚未发布到 npm:需从 tarball 安装。

安装与启用

将 bundle 装进 profile 后需重启宿主一次:

dsh plugin --profile web add <path-to>\dsh-auto-upgrade-0.1.1-rc.2.tgz

安装后 catalog 中会出现两个 skill;扫描为只读。插件以当前 DSH 进程权限运行,安装前应自行审阅仓库源码与 MIT 许可证。维护方说明为个人 hobby 项目,不承诺按外部需求维护;Issues 关闭且不接受 PR,Fork 可在 MIT 下自行进行。

典型用法

资料中的 Quick start 可按顺序复现:

1. 只读扫描指定 profile

pwsh -File $DSH_HOME\auto-upgrade\scripts\Invoke-AutoUpgradeScan.ps1 -Profiles web

2. 在隔离 home 中暂存并门禁(生产未动)

pwsh -File $DSH_HOME\auto-upgrade\scripts\Invoke-AutoUpgradeVerify.ps1 `
  -Profile web -Plugin clearai-dsh -Spec 0.5.6

3. 停宿主、预览切换、确认切换、再启动并验证服务

切换脚本不会替你停宿主;运行中的 DSH 会占用文件,需先停止(资料示例:停 dsh web,再运行 $DSH_HOME\DSH-Hidden-Launcher.vbs)。切换过程内失败会补偿回先前状态,不删文件。

pwsh -File $DSH_HOME\auto-upgrade\scripts\Invoke-AutoUpgradeSwitch.ps1 -TxnId <id> -DryRun
pwsh -File $DSH_HOME\auto-upgrade\scripts\Invoke-AutoUpgradeSwitch.ps1 -TxnId <id> -Confirm

4. 保留新版本,或回滚

pwsh -File $DSH_HOME\auto-upgrade\scripts\Invoke-AutoUpgradeSwitch.ps1 -TxnId <id> -Commit
pwsh -File $DSH_HOME\auto-upgrade\scripts\Restore-AutoUpgrade.ps1 -TxnId <id>

无 UI:配置通过在会话里向 agent 说明需求完成。

适用场景与注意

适合在 Windows + DSH Web profile 上、需要可审计、可回滚地升级单个社区插件的开发者。不适合指望全自动升级 DSH 核心、Desktop 双端编排或定时无人值守——这些在路线图中,当前未实现。

务必注意:仅 Windows;候选与 live 须在同一卷上以保证重命名原子性;自升级 bundle 时,执行器部署在包外,避免「升级工具被升级删掉」。使用前请自行评估「as is」免责声明。DSH 生态强调「一切皆插件」;SkillHub 目录页为社区站点,与 DeepSeek / 幻方无官方从属关系。

链接

  • 目录页:https://www.skillhub.cn/plugins/neo805/dsh-auto-upgrade
  • 仓库:https://github.com/neo805/dsh-auto-upgrade

经过上面的步骤,你可以在不动生产目录的前提下试探新版本,用事务 id 在确认与回滚之间做选择;在 0.1.x 能力边界内,这是资料所描述的 dsh-auto-upgrade 的主要价值。

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

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

Xiaoye