dsh-plugin-backup:把 DSH 插件清单备份到 `.dsh` 之外

前言

DeepSeek Harness(DSH)把已安装插件记在 profile 目录里。一次 Harness 更新可能清空 profile 里的插件、悄悄换掉版本,或把 bundle 与个别插件行禁用。若把备份也写在 .dsh 里,更新重置整个目录时,备份会和插件一起消失。下面介绍社区插件 dsh-plugin-backup(维护者 Kirin-9000,分类 admin-security):把清单持久化到可配置的本机目录,更新后对比差异并在界面确认后恢复。

这是什么

dsh-plugin-backup 是 DSH 的插件备份与恢复工具。它采集当前 profile 已安装插件的包名、精确版本、安装来源 spec、启用状态,写成可读 JSON,落在 profile 与 .dsh 之外;Harness 更新后对比「备份 vs 当前」,勾选后通过 Harness 官方插件安装接口逐项恢复。恢复只走 pluginManager.installBundle / removeBundle / setBundleEnabled / setPluginEnabled,安装必须由你在界面上确认,插件不代批安装脚本,也不凭版本号猜测安装来源。清单与日志只写本机磁盘。

源码与说明见 GitHub 仓库,社区目录页:skillhub.cn/plugins/Kirin-9000/dsh-plugin-backup。许可证 MIT,package 版本 1.0.0。插件以当前 dsh 进程权限运行,安装前请自行查看源码与许可证。

它解决的三件事

  1. 备份:把当前已安装插件写成 JSON,默认目录为 $DSH_HOME/plugin-backup/,建议改到 .dsh 之外;启动约 5 秒后自动备份一次,清单未变且快照不足一天则跳过;手动「立即备份」随时可用,按时间戳最多保留 20 份快照。
  2. 检测:对比备份与当前安装,差异分为五类:missing(备份有、现未装)、version-mismatch、disabled(整个 bundle 禁用)、row-disabled(个别插件行禁用)、row-missing(插件行不存在)。
  3. 恢复:界面勾选后一键恢复,二次确认,逐项执行并显示进度;失败记日志后继续,不中断批次;幂等设计,已满足状态的步骤会跳过。

安装与入口

方式一:dsh 命令行(web 等由 CLI 管理的 profile):

dsh plugin --profile web add git+https://github.com/Kirin-9000/dsh-plugin-backup.git

profile 不叫 web 时把名字换掉。重启或刷新后,打开 设置 → 插件 → 「备份与恢复」。

方式二:DSH Desktop 桌面端
桌面端 profile 由应用内插件管理器管理,运行期间命令行无法改动。请在应用 设置 → 插件 中安装,或以开发方式把仓库链入 profile 的 node_modules(见 README「方式三」)。

典型用法

安装后从上到下使用各区块:

区块 作用
顶部 上次备份时间、插件数量、当前安装数量、备份目录;「立即备份」「刷新」
备份存储位置 查看与切换备份目录
从指定 JSON 文件恢复 填路径或「选择文件…」,按任意清单恢复
已备份的插件 快照内完整清单及当前状态、能否自动恢复
检测到的差异 仅列出异常项,勾选后「恢复所选」
恢复进度 / 日志 实时进度与 log.jsonl 最近记录

把备份放到 .dsh 之外(建议)

  1. 界面:备份存储位置 → 更改位置 → 填写目录(如 D:\dsh-backups)→ 保存位置(保存前会写探测文件验证可写)。
  2. 环境变量:设置 DSH_PLUGIN_BACKUP_DIR 后重启 DSH,优先级最高。

生效顺序:DSH_PLUGIN_BACKUP_DIR > .dsh 内 settings.json > 主目录镜像 ~/.dsh-plugin-backup-location.json > 默认 $DSH_HOME/plugin-backup/。.dsh 被重置后,可凭主目录镜像找回目录,界面会标「自定义(靠主目录镜像找回)」,点一次 保存位置 即可补回正式记录。

从任意 JSON 恢复
不限于 latest.json。支持标准快照 { "bundles": [ ... ] } 或最小数组 [{"name": "...", "version": "..."}]。缺 source 的条目会标「无安装来源,需手工安装」,恢复时不会凭版本号拼 npm 包名去装。

快照示例字段见 README:schemaVersion、createdAt、dshVersion、profile、bundles(含 name、version、source、enabled、rows)。

其他能力

  • 智能体工具 plugin_backup:只读 status、触发 backup;可选 file 读指定清单。恢复仅在用户界面操作,工具不会安装任何包。
  • 系统原生文件对话框(Windows + PowerShell):选 .json;其他环境回退内置 .json 浏览器。
  • 精确版本恢复:按备份时的 包名@版本 重装;git / tarball / 本地目录按原 source 处理。
  • 零依赖:仅用 Node 内置模块与宿主 pluginManager / webServer / tools,不 require Harness Client 包。

HTTP 半侧为同源 POST:status、backup、restore、settings、load-file、pick-file、list-files、log(详见 README)。

适用场景与注意

适合长期维护较多 DSH 插件、担心 Harness 更新清空或篡改 profile 的用户。插件不记录 DSH 安装自带的 bundle(availability: 'installation');遇 pendingBuilds 会提示到 设置 → 插件 自行批准安装脚本;与当前 DSH 不兼容的版本需等插件更新或授予版本豁免。任一项恢复失败只记日志并继续,结束有成功/失败汇总。

排障可参考 README:无安装来源需手工安装后重新备份;更新后面板显示默认目录时检查主目录镜像;恢复后「重启后生效」属 restart-required 的正常提示。

结尾

dsh-plugin-backup 把插件清单与 .dsh 解耦,用差异检测和界面确认的恢复流程,减轻更新后逐个重找插件的成本。目录页:https://www.skillhub.cn/plugins/Kirin-9000/dsh-plugin-backup;源码与 issue:https://github.com/Kirin-9000/dsh-plugin-backup。

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

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

Xiaoye