用 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

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

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

小夜