前言¶
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 进程权限运行,安装前请自行查看源码与许可证。
它解决的三件事¶
- 备份:把当前已安装插件写成 JSON,默认目录为
$DSH_HOME/plugin-backup/,建议改到.dsh之外;启动约 5 秒后自动备份一次,清单未变且快照不足一天则跳过;手动「立即备份」随时可用,按时间戳最多保留 20 份快照。 - 检测:对比备份与当前安装,差异分为五类:
missing(备份有、现未装)、version-mismatch、disabled(整个 bundle 禁用)、row-disabled(个别插件行禁用)、row-missing(插件行不存在)。 - 恢复:界面勾选后一键恢复,二次确认,逐项执行并显示进度;失败记日志后继续,不中断批次;幂等设计,已满足状态的步骤会跳过。
安装与入口¶
方式一: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 之外(建议)
- 界面:备份存储位置 → 更改位置 → 填写目录(如
D:\dsh-backups)→ 保存位置(保存前会写探测文件验证可写)。 - 环境变量:设置
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。