用 dsh-undo-plugin 给 DeepSeek Harness 加上配置快照与一键回滚

前言

DeepSeek Harness(dsh)把模型、工具、技能、会话和界面都做成插件,改环境往往就是改配置:装一个插件、换一套皮肤、改几行 cordis.patch.yml。官方仓库把这件事概括成「一切皆插件」。好处是可组合,代价也很直接——一次不兼容的挂载,或者一段被改坏的用户插件代码,就可能让 Web 界面起不来,甚至报 duplicate loader entry id 这类启动错误。

这类事故和「把对话回退一轮」不是一回事。会话回退关心的是模型和仓库文件;这里缺的是另一层:配置与插件树本身的存档。社区维护者 lire1131 做的 dsh-undo-plugin(安装后的包名是 dsh-undo-savepoint)就是做这件事:装插件、换皮肤、改设置时自动存档,也可以手动打点,再按撤销 / 重做 / 指定快照回滚。DSH 自己起不来时,仓库还附带一套不依赖 Harness 进程的 PowerShell 窗口和命令行。

下面按社区目录页、GitHub 仓库 README、package.json 和更新日志交叉核对后整理:它覆盖什么、怎么装、日常怎么用,以及不该把它当成什么。

这是什么

dsh-undo-plugin 是一款 DeepSeek Harness 开发与运行时插件,由 lire1131 维护,许可证 MIT,主要语言 JavaScript。GitHub 仓库是 lire1131/dsh-undo-plugin,截至 2026-08-18 查询,仓库显示 68 星;package.json 中的包名为 dsh-undo-savepoint,当前版本 0.3.5(2026-08-17)。它要求 Node.js ≥ 20,并声明 dsh.runtime: "host"、Web 端 client(platform: web)。

它解决的问题可以收成一句话:给 DSH 的配置文件和用户插件代码做快照,改坏了能回到改之前。 快照对象按 README 是这 6 类文件:cordis.patch.ymlpackage.jsoncordis.ymlpnpm-workspace.yaml(profile 下),以及 $DSH_HOME 下的 settings.yaml.env(默认家目录 ~/.dsh)。更新日志 0.3.2 还把 .credentials.yaml 纳入范围。从 0.2.0 起,快照也会覆盖用户插件代码树(node_modules 下的 junction、以及 cordis.patch.ymlname: './xxx' 引用的本地文件),所以「配置没动、插件源码被改坏」也能撤。

有两点归属需要先说清:

  • DeepSeek Harness 本身是 DeepSeek 的开源智能体框架;本文介绍的是社区插件。收录它的 DeepSeek Harness 插件目录 是独立站点,About 页 写明与 DeepSeek / 幻方无官方从属关系,也不托管插件代码。
  • 它不是对话回退。社区里另有 dsh-turn-rewind(对话与工作区文件回退)、LingLambda/dsh-undo(模型上下文撤销,其 README 标明依赖尚未发布的 Harness 能力)。dsh-undo-plugin 管的是 Harness 配置和插件代码,不管会话文本本身。

核心功能

自动存档和手动存档分库

配置变更后会自动生成快照(README 写明约 1.5 秒防抖),启动时还有一份 baseline。手动保存进 manual 库,不会被自动清理;自动档、启动基线和「撤销后悔档」进 auto 库,默认保留最近 20 份。旧版扁平目录在启动时会迁到新结构,读取仍兼容。

默认路径(均可在设置里改):

默认位置 内容
手动库 <快照根>/manual/ 手动保存,不自动清理
自动库 <快照根>/auto/ 自动快照、启动基线、撤销后悔档
旧库 <快照根>/ 根目录 兼容读取,启动时迁移

快照根默认是 $DSH_HOME/undo-snapshots。0.3.3 起按当前 profile 隔离,形如 <快照根>/<profile>/{auto,manual}dsh web 回退为 web;离线工具看不到启动参数,要用环境变量 DSH_UNDO_PROFILE 或设置里的 profileName

撤销、重做、回退到任意版本

入口有三处:WebUI、对话、离线 CLI。WebUI 会话头部有撤销 / 恢复 / 快照按钮;0.3.4 起三个按钮改成图标,快照按钮会立刻打一份手动档,旁边的状态徽章显示已存份数和最近时间,点徽章才打开快照面板。面板里可以看差异、回退、删除、清理、导出 / 导入 ZIP,以及进入安全模式。

快捷键默认是 Ctrl+Alt+Z(撤销)和 Ctrl+Alt+Y(恢复,仅当撤销后没有新操作)。也可以对助手说「撤销上一步」「保存快照」「回退到 \<id>」。

撤销语义按 README 不是「回到最新那份自动档」:自动快照是在变更之后生成的,恢复最新档往往是空操作。真实撤销会找到与当前内容不同的最近快照。如果全部相同,会提示没有可撤销的变化。恢复 cordis.patch.yml 后,插件会检查并重新写入自己的挂载条,避免把自己卸掉。0.3.4 起,只要有会话处于 open turn(智能体正在跑),undo / redo / restore 和安全模式切换一律拒绝,避免热重建插件树把正在跑的会话一起打断。

密钥脱敏和本机 vault

0.3.2 默认开启敏感模式 redact.env.credentials.yaml 进快照时,值替换成 ***REDACTED***,键名、引号、注释和结构保留。导出 ZIP 按文档可以外传而不带真实密钥;真实值放在本机 vault(内容寻址),本机回滚会还原原值,换机回滚则得到占位并提示自行填写。也可以改成 keep 沿用明文旧行为。差异预览两侧都会脱敏。README 仍提醒:快照里可能有配置副本,不要随意外传。

安全模式和崩溃归因

DSH 完全起不来时,安全模式会先打一份手动快照并备份 cordis.patch.yml,再把补丁层收成只保留撤销系统,保证进程能启动;退出时恢复原配置。WebUI 面板、对话工具 undo_safe_mode、离线 CLI safe-mode 以及局外 GUI 上都有入口。

崩溃归因用 boot-state.json 记录每次启动结果和「最后正常启动时间」。上次异常退出时,WebUI / GUI 会给出最后正常快照 id 和一键回退,不必自己猜该回到哪一档。涉及插件代码或挂载的回滚,报告会提示「重启 DSH 后生效」。

局外急救:DSH 挂了也能用

插件随安装目录带 PowerShell GUI 和 CLI,不依赖当前 dsh 进程。文档示例面向 Windows(PowerShell 5.1 与 7)。装完后目录名是包名 dsh-undo-savepoint,不是仓库名 dsh-undo-plugin。方式 A(dsh plugin add)的工具一般在:

$DSH_HOME/profiles/web/node_modules/dsh-undo-savepoint/tools/

DSH_HOME 未设置时默认是用户目录下的 .dsh。仓库提供 tools/make-desktop-shortcut.bat,可在桌面生成「DSH撤销管理器」快捷方式。

跨机迁移预检

快照可导出 / 导入 ZIP。docs/migration.md 写明:配置文件会原样写回目标机;插件代码不会被塞进一台没装该插件的机器(目录不存在则整条跳过)。真正容易踩坑的是:恢复后的 cordis.patch.yml 仍挂着目标机没有的插件,启动时 loader 报 MODULE_NOT_FOUND。0.3.1 起,恢复前会扫描目标快照引用的插件并提示本机解析不到的条目,建议先装齐或走安全模式。跨机恢复的本质是把 B 的配置变成 A 当时的样子,B 需要先具备对应插件。

安装与启用

前置:本机已能运行 DeepSeek Harness(@deepseek-ai/dsh),Node.js ≥ 20。

社区目录页给出的安装命令(以页面原文为准)是:

dsh plugin add github:lire1131/dsh-undo-plugin

仓库 README 推荐写上 web profile,并钉在 master 分支:

dsh plugin --profile web add github:lire1131/dsh-undo-plugin#master

目录页同时提醒:插件以当前 dsh 进程的权限运行,安装时可能执行代码。安装前应检查源代码仓库和许可证。需要可复现安装时,把引用钉到 commit。截至 2026-08-18,master 顶端对应 0.3.5 的提交是 ab9abee78ba0b3f96acea3a3593251c0be9208f9

dsh plugin add github:lire1131/dsh-undo-plugin#ab9abee78ba0b3f96acea3a3593251c0be9208f9

装完后重启 DSH。快照目录、自动保存开关、防抖、保留数量等可在 WebUI 设置的「快照」栏目改。0.3.5 起家目录解析与官方启动器一致:DSH_HOME 优先,否则回退 ~/.dsh。自定义家目录的第三方客户端不再把设置写到一套目录、运行时读另一套。

仓库还提供 clone + junction 的本地挂载方式(编辑 cordis.patch.yml 插入 id: dsh-undo-savepoint)。日常使用目录命令即可;本地挂载适合改源码或未走 dsh plugin add 的环境,步骤以 README「方式 B」为准。

典型用法

下面操作都来自仓库 README,可以按原样做。

1. WebUI:改坏设置后撤销

  1. 安装并重启后,会话头部应出现撤销、恢复、快照按钮,以及自动快照状态徽章。
  2. 正常改插件、皮肤或设置,等自动存档落盘(徽章上的份数或时间会变)。
  3. 需要回到上一档时,点撤销,或按 Ctrl+Alt+Z,或对助手说「撤销上一步」。
  4. 若刚撤销完、中间没有新的真实变更,可用恢复按钮或 Ctrl+Alt+Y 重做。
  5. 要回到更早的某一版:点徽章打开快照面板,选中一行「回退到此版本」。

智能体正在跑时不要点撤销。0.3.4 的守卫会直接拒绝,并给出提示。

2. 手动打点后再做高风险改动

大改 cordis.patch.yml 或批量装插件前,先手动存一档:

  • WebUI:点头部快照按钮,或在面板里选「手动保存」
  • 对话:对助手说「保存快照」
  • CLI:snapshot

手动档不会被自动清理,适合当「已知可用」的锚点。

3. DSH 起不来时用局外工具

README 给的典型事故是启动报 duplicate loader entry id。此时不要重装整个 Harness:

  1. 打开桌面「DSH撤销管理器」,或运行:
powershell -NoProfile -ExecutionPolicy Bypass -File "tools\dsh-undo-savepoint-gui.ps1"
  1. 选中出问题前的快照并回退,然后重启 DSH。
  2. 若完全无法判断该回哪一档:用 GUI 上的崩溃横幅(last-good 快照)一键回退;仍起不来则开安全模式,重启后再决定卸插件还是继续回退。

常用 CLI(在插件 tools 目录下):

powershell -NoProfile -ExecutionPolicy Bypass -File "tools\dsh-undo-savepoint.ps1" list
powershell -NoProfile -ExecutionPolicy Bypass -File "tools\dsh-undo-savepoint.ps1" undo
powershell -NoProfile -ExecutionPolicy Bypass -File "tools\dsh-undo-savepoint.ps1" restore -Id <id> -Force
powershell -NoProfile -ExecutionPolicy Bypass -File "tools\dsh-undo-savepoint.ps1" snapshot -Label "原因"

安全模式:

powershell -NoProfile -ExecutionPolicy Bypass -File "tools\dsh-undo-savepoint.ps1" safe-mode -Label on

仓库还提供 tools\dsh-plugin.ps1 add <包名>:装插件前后自动存档,失败则回退。界面语言默认跟系统 UI,可用 DSH_UNDO_LANG=zhen 强制指定。

4. 配置「突然变了」时先查回滚日志

回滚可能发生在另一个会话,或发生在局外工具里。对话里用 undo_recent,CLI 用 recent,查看最近的 undo / redo / restore 记录(时间、模式、目标快照、被回滚的文件)。不要先假设是人手改丢了文件。

适用场景与注意事项

比较适合:

  • 经常在 DSH 里试社区插件、换皮肤、改 profile 补丁,需要一条能回到「刚才还能启动」的路径
  • 本地改用户插件源码(junction / name: './xxx'),怕改出纯代码事故
  • Windows 上需要 DSH 挂掉之后仍能打开的 GUI / CLI
  • 使用非默认 DSH_HOME 的第三方客户端(0.3.5 已按官方启动器对齐家目录)

使用前注意:

  1. 权限与来源。 插件以当前 dsh 进程权限运行,安装可能执行代码。这是社区 MIT 项目,不是 DeepSeek 官方组件。装之前打开 GitHub 仓库看 README、许可证和近期提交。
  2. 它不管对话和工作区文件。 智能体改坏了项目代码,或要把某轮对话撤掉,应看 dsh-turn-rewind 一类插件,而不是这份配置快照。
  3. 快照含敏感配置。 默认脱敏后导出相对安全,但 keep 模式和旧快照会带明文。不要把快照目录或 ZIP 发到聊天群。
  4. 局外工具是 PowerShell。 README 路径、快捷方式和 .bat 都按 Windows 写。Node 宿主插件跟 DSH 走,但「DSH 起不来时的窗口」不要默认能在 macOS / Linux 上原样使用。
  5. 装完按包名找目录。 安装命令里是 dsh-undo-plugin,磁盘上是 dsh-undo-savepoint
  6. 跨机先装插件再恢复。 预检只提示、不阻断。目标机缺插件就启动失败时,用安全模式进系统再补装。
  7. 会话进行中不要回滚。 0.3.4 已加拒绝闸;空闲时再操作。

小结

dsh-undo-plugin 给 DeepSeek Harness 补的是配置层的撤销栈:自动 / 手动快照、WebUI 与对话入口、密钥脱敏,以及 DSH 挂掉之后仍能用的安全模式和局外工具。仓库名和包名不一致,安装命令以目录页的 github:lire1131/dsh-undo-plugin 为准;当前稳定功能以 GitHub 上的 0.3.5 文档为准。

目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-undo-plugin/

GitHub:https://github.com/lire1131/dsh-undo-plugin

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

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

小夜