dsh-fk-rollback:DSH 配置快照与回滚

前言

在 DSH 里改 cordis.patch.yml、装新插件、动 package.json 和锁文件,往往一次失误就会导致启动失败或功能残缺。社区里已有不少「备份思路」,但多数不针对 DSH profile 里那几份关键配置,也不会在 pnpm add 前后自动留痕。装完插件 DSH 起不来时,也很难判断该回到哪一个时间点。

下面介绍维护者 FuriousKinght 发布的 dsh-fk-rollback(GitHub:FuriousKinght/dsh-fk-rollback,SkillHub 分类:记忆)。它只做一件事:对 DSH 运行所依赖的少量配置文件做快照与回滚,并配合体检、溯源和命令行工具,在桌面端能正常用时走面板,在 DSH 已崩溃时仍能靠 Node 脚本恢复。

这是什么

dsh-fk-rollback(包名 dsh-fk-rollback,当前资料版本 v1.4.0)是 DSH 的配置快照与回滚插件。简介中的定位是:自动留痕、出问题能查、坏了能退回,目标是保证 DSH 本体能启动、能输入输出、功能正常。

需要事先弄清边界:

  • 在快照范围内:profile 层的 5 个配置文件(约 119 KB),见下文列表。
  • 不在快照范围内:会话聊天内容、用户自行安装的插件源码、node_modules/、cordis.yml(每次启动会被重写)、以及 $DSH_HOME/cordis.patch.yml(home 层:可检测 fatal,但不备份、不回滚)。

README 中记录了 2026 年 10 月多起与配置损坏相关的事故(循环依赖、插件 exports 缺失、patch 被截断等),并给出 2026-10-19 的实测:破坏后 bundles 与 patch 体积骤降、启动 YAML 报错;回滚后 5/5 文件 SHA256 恢复、启动正常。这些说明插件针对的是「配置被改坏」而非聊天数据丢失。

快照内容与三类快照

备份哪五个文件

快照只包含以下文件(回滚时 cordis.patch.yml 最后写入,避免中间态触发热重载):

pnpm-workspace.yaml
compatibility.json
pnpm-lock.yaml
package.json
cordis.patch.yml

存放路径:$DSH_HOME/rollback-snapshots/<profile>/(在 profile 目录外,避免 profile 整体损坏时连快照一起丢)。

每日、滚动与检查点

类型 目录 何时创建 保留
每日 daily/ 每天第一次启动成功后 3 份(不计入 50 配额)
滚动 rolling/ 每轮对话结束,且距上次 ≥2h 且内容有变 3 份(不计入 50 配额)
检查点 checkpoints/ 手动、回滚前、装插件前后自动等 50 份

每日快照在「启动成功」后才建立;若当天首次启动就失败,当天 daily 不存在,需依赖前一天的 daily。

核心功能

装插件前后自动留痕

README 将其标为关键能力:不论安装哪个插件,都会在 pnpm add 之前和安装完成之后各存一份检查点。

实现依赖 DSH dsh-plugin-manager 的事件顺序(维护者已对照源码):

  1. plugin-manager/install-state(phase=installing):在真正执行 pnpm add 之前写入「装插件前」快照。
  2. plugin-manager/changed:安装完成后写入「安装插件后」快照,并立即做体检。

同一安装请求用 requestId 去重;连续安装多个插件时,检查点名称会自动编号区分。

面板(DSH 能正常启动时)

路径:设置 →「FK回滚设置」。资料中列出的能力包括:

  • 快照列表(星级对应健康等级)
  • 创建快照、一键回滚
  • 体检(真问题 / 提示 / 正常状态三层)
  • 改动溯源(谁在何时改过哪个配置文件)
  • 设置(保留策略、体检历史、报错日志与诊断报告)

DSH 为 Electron 桌面应用,F5 / Ctrl+R 不会重载页面。回滚或改插件面板代码后需重启 DSH;面板提供「立即重启 DSH」(v1.3.0 起内置,Windows 桌面版可走 WMI 助手重启;dsh web 等非桌面场景会提示手动重启)。仅刷新列表数据可用面板「刷新」,无需重启。

命令行与崩溃时脚本

DSH 无法启动时,可双击同目录下的 还原DSH配置.bat(不依赖 DSH 进程,只依赖 node.exe)。脚本内置 5 级 Node 探测链;找不到 Node 则退出且不修改任何文件。

也可手动调用(PATH 无 node 时可用 DSH 自带运行时下的 node.exe,路径因安装位置而异):

node dsh-rollback.mjs <命令> [选项]

常用命令(摘自 README):

命令 作用
list 按类型列出快照
show <id> 快照详情
status 当前状态摘要
check 静态体检(支持 --json、--home-layer)
diagnose 诊断(含 home 层排查顺序)
snapshot 手动快照(--name / --note / --daily)
restore <id> 还原到指定快照
restore --last-good 按健康等级自动选点
restore --dry-run 仅预览将修改的文件
trace [文件] 改动溯源(--days N)
prune 清理过期快照

退出码:0 成功;4 无可用快照;5 权限或占用;7 需人工;8 部分成功。

健康分级与 --last-good

快照可靠性分 5 级,按「配置指纹」记录启动历史(内容相同的快照共享验证):

等级 判据
verified-strong 同指纹启动成功 ≥3 次且 0 失败
verified 同指纹启动成功 ≥1 次
static-ok 静态体检通过,未经过启动验证
failed 曾启动失败
broken 静态体检有 fatal

restore --last-good 降级顺序:verified-strong → verified → static-ok → failed。

v1.4.0 体检与界面更新(资料已核实)

  • 新增 client-loader-id-mismatch(fatal)与 client-exports-name-mismatch(warn),用于发现 client.js 中模块 loader id 与包名不一致等会导致启动失败的问题。
  • 修复全新 profile 下 cordis.patch.yml 为 [] 时被误报 YAML 错误。
  • 快照列表各分组可折叠;修复跨组翻页导致分组头计数与列表不一致的问题,改为每组独立「显示更多」。

安装与启用

插件在 SkillHub 社区目录登记为 furiouskinght/dsh-fk-rollback(目录页),标注可安装、MIT 许可证、engines.node 为 >=22.15。已抓取 README 与目录页未给出形如 dsh plugin add … 的固定安装命令字符串;请在 DSH 自带的插件管理流程中,从社区目录选择该插件完成安装(安装行为会触发前述装前/装后检查点)。

安装前建议自行阅读 GitHub 仓库 源码与 package.json,确认许可证与权限范围。插件以当前 DSH 进程权限读写 profile 旁的快照目录与配置文件,属于高敏感能力。

典型用法

场景一:装插件后 DSH 起不来

  1. 若仍能进设置,打开「FK回滚设置」,在检查点中找到「装插件前」对应项,执行回滚,再点「立即重启 DSH」。
  2. 若已无法启动,在插件包目录或 DSH 数据目录找到 还原DSH配置.bat 双击,或执行 node dsh-rollback.mjs restore --last-good(可先 restore --dry-run 预览)。

场景二:profile 体检全绿仍启动失败

先查 home 层 patch(README 称常见来源包括第三方皮肤插件生成的 $DSH_HOME/cordis.patch.yml):

node dsh-rollback.mjs check --home-layer

该文件不在快照范围内,本插件只能报 home-layer-unparsable 等 fatal,不能自动修复。

场景三:日常留痕

依赖每日与滚动快照即可;重大手动改动前可在面板「创建快照」或执行:

node dsh-rollback.mjs snapshot --name "改动前" --note "说明"

适用场景与注意

适合谁:经常在 DSH 里试插件、改 patch 或锁文件,且希望「坏了能退回上一个已知好点」的开发者。不适合把会话内容或插件源码当作备份对象的需求。

安全设计(README 摘要):不自动回滚、不改 DSH 本体、不碰 node_modules、会话日志只读、回滚前会先快照、两阶段写入且 patch 最后写;插件自身异常需被隔离,避免拖垮 DSH 启动。

死角:$DSH_HOME/cordis.patch.yml 优先级高于 profile 层,损坏会导致启动失败,但不在本插件回滚范围。profile 层一切正常却仍崩溃时,应优先排查该文件。

生态说明:DSH 采用「一切皆插件」的架构;SkillHub 为社区独立目录站点,与 DeepSeek / 幻方无官方从属关系,本文介绍的是社区维护插件,非官方内置功能。

结尾

dsh-fk-rollback 把 DSH 最容易「一改就全挂」的几份配置收进可验证的快照体系,并在装插件这种高风险操作前后自动检查点,配合面板与零第三方依赖的命令行,覆盖「还能进设置」和「已经起不来」两种恢复路径。查阅版本与更新记录请以 GitHub README 为准。

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

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

Xiaoye