DeepSeek Harness 後悔藥:undo-savepoint 一鍵撤回與存檔點回滾
逐格拆解外掛作者的實錄:裝一個外掛、記住紅「撤銷」綠「復原」兩顆按鈕、認識桌面撤銷管理器,再看一次被故意搞掛的 DSH 帶著完整會話原樣歸來。
最近更新: 2026-10-01

讓 DSH 放手做事——換依賴、重構外掛、改 cordis.patch.yml——總有一天它會改壞一個你沒備份的東西,而 DeepSeek Harness 本身沒有 Ctrl+Z。社群的答案叫 dsh-undo-savepoint(lire-安安 開源,MIT 授權):外掛掛載、設定變更、每 15 分鐘、啟動時都會自動存檔,另有一個永不自動清理的手動存檔庫,專治後悔。
這一頁講的是「怎麼用」——全部截圖取自外掛作者本人的實錄,每張都深鏈回原影片對應秒數。如果你還在挑「裝哪個回滾外掛」,先看回滾外掛集合: 回滾與撤銷外掛集合
TL;DR
- ▸一條指令裝好:dsh plugin --profile web add github:lire1131/dsh-undo-savepoint#master(Node.js ≥ 20),重啟 dsh web,每個會話頁首都會多出紅「撤銷」、綠「復原」、灰「快照」三顆按鈕。
- ▸三種入口:頁頭按鈕、桌面快捷鍵 Ctrl+Alt+Z / Ctrl+Alt+Y(可在設定裡改鍵),或直接在對話裡跟 AI 說一聲,請它替你撤。
- ▸撤銷是帶後悔檔的軟刪除:每次回退前先寫入一筆「後悔檔」,手動庫永不自動清理,自動庫預設只留最新 20 份。
- ▸DSH 起不來也救得回:桌面撤銷管理器在 DSH 之外照樣讀檔。快照含 .env 副本,千萬別外傳;ZIP 遷移包可選 AES-256-GCM 加密。
從安裝到「搞掛了也救得回來」
第一部 · 安裝與三種回退入口
- 1
裝外掛,重啟 dsh web
dsh-undo-savepoint 是 lire-安安(本次實錄作者)開源的 MIT 外掛,需要 Node.js ≥ 20。從 GitHub 源安裝並重啟後,它掛載那一刻就先打一份基線快照——你之後在管理器看到的第一行,就是這筆 plugin-mounted 基線。快照涵蓋 DSH 設定、profiles 的 cordis.patch.yml 與使用者外掛目錄。
$dsh plugin --profile web add github:lire1131/dsh-undo-savepoint#master
第二部 · 日常回滾與崩潰演練
- 3
開啟快照管理,還原到任意版本
「快照管理」彈窗共七個動作:手動儲存、撤銷、復原、重新整理、清理過期、匯出 / 匯入。每一行都標著時間、型別——基線、自動、手動、後悔檔——原因(plugin-mounted、config-change、settings-change、before-restore……)、檔案數與所屬的庫;行內操作是「差異」(看這次變更改了什麼)、「回退到此版本」、「刪除」。預設自動庫保留 20 份、後悔檔 10 份、手動存檔永不自動清理,都能在「快照設定」裡調整。

快照管理:七個動作,每一行都能看差異、回退、刪除看原影片 7:00 - 4
桌面撤銷管理器:先落後悔檔,再回退
同樣的操作有一個原生桌面視窗「DSH 撤銷管理器」:手動儲存、撤銷、復原、回退所選、刪除所選、重新整理、清理過期、匯出、匯入——而且 DSH 本體起不來時它照樣能讀庫,這就是作者說的「局外照樣救」。按下撤銷,先看最上面:一筆新的 before-restore 後悔檔已經寫好,然後才開始回退,所以「後悔自己的後悔」永遠來得及。雙擊任意行可看差異。

撤銷會先寫入一筆後悔檔,再開始回退看原影片 10:30 - 5
崩潰演練:故意搞掛 DSH,再原樣救回
作者的崩潰示範按鍵會往 patch 裡注入重複的 dsh-vision 載入器 id——DSH 立刻以 TypeError: duplicate loader entry id、結束代碼 1 收場。但死之前它已經存好手動快照 demo-crash-before 與一份 cordis.patch.yml 備份。同一個視窗裡還備著清除注入(安全閥,把壞注入拆掉)、開啟撤銷管理器、檢視 patch 檔案三顆按鈕。撤掉壞變更、清掉注入、重啟——實錄裡的會話原樣回來:8 輪 · 133 步,花費與模型設定分毫未動。按鍵下方也印著提醒:它真的會砍掉正在執行的 DSH 行程,按之前先儲存會話。

崩潰演練:先存檔、再注入、後強制結束,救援按鈕常備看原影片 10:18 
回滾再重啟,會話完好如初看原影片 10:58
第三部 · v0.4.5 的版本時間軸
- 6
v0.4.5 把彈窗升級成版本時間軸
現在的版本用時間軸頁取代彈窗:按日期分組的行,標著 AUTO / BASELINE、原因與大小,行內四個動作——對比、復原、編輯備註/標籤、刪除;工具列追加了安全模式(DSH 起不來時用)、診斷(undo_doctor 健檢)、清理、對話撤回與 ZIP 匯出/匯入。從這一代起快照預設脫敏:.env、憑證與 home 級設定會被遮罩進本地保險庫,ZIP 匯出還可選 AES-256-GCM 加密。

v0.4.5 時間軸:對比 / 復原 / 備註·標籤 / 刪除看原影片 5:09
另一種後悔藥:訊息級回退 dsh-rewind
dsh-undo-savepoint 把設定和檔案回退到存檔點;dsh-rewind(夏桑菊XSJ 開發,GitHub 儲存庫 XSJUSTC,套件名 @xsj/dsh-rewind)則是把對話本身回退到任意一條使用者訊息,像給 prompt 加了「取消傳送」。README 寫得很直白:每條使用者訊息的操作列、複製圖示旁會出現 ↺ 回退圖示;點下去,正在思考/輸出的回合立即被打斷,這條訊息及之後的所有內容在聊天檢視裡隱藏(如同從未發生),訊息文字自動填回輸入框——未送出、可編輯;送出按鈕左側會出現「取消回溯」,點它就原樣恢復被隱藏的訊息。
送出之後,模型只看得到截斷後的歷史加新訊息,被回退的尾巴永遠不再進入模型上下文。只有使用者訊息可回退,助手回覆沒有回退入口(宿主側強制校驗)。安裝:dsh plugin --profile web add github:XSJUSTC/dsh-rewind。

別把三家混成一談:dsh-undo-savepoint(本頁)用存檔點守護設定與檔案、能救崩潰;dsh-rewind 回退單則發言;anionex/dsh-turn-rewind 是第三個獨立的社群回合回退外掛。下面的集合頁把一家家擺在一起比。
常見問題
把回滾交給外掛之前,讀者最關心的事。
撤銷會不會把我剛改好的東西也退回去?
回滾是帶留痕的軟刪除:撤銷動作本身也會記成一筆後悔檔,隨時可以再回來。作者簡報裡特別提醒:「恢復最新快照」是空操作——要挑一筆內容確實不一樣的來回退,確認前先看差異。預設自動庫保留最新 20 筆、後悔檔 10 筆、手動存檔永不自動清理,三個數字都在「快照設定」裡。回到過去之後,那之後的工作得重做。
DSH 已經起不來了,還能回滾嗎?
這正是桌面撤銷管理器存在的意義:它不依賴 web UI,直接讀快照庫——作者的示範就是故意把 DSH 搞掛再走回來。如果崩潰來自壞的 patch 注入,「清除注入」會用自動備份把 cordis.patch.yml 還原;v0.4.5 還加了一鍵安全模式和 undo_doctor 診斷,專治起不來。
快照會不會把我的 API Key 洩出去?
快照裡就是 .env 和設定的副本——作者簡報原話:金鑰別外傳。v0.4.x 起預設脫敏:.env、憑證、home 級設定會被遮罩,真實值留在本地保險庫裡;ZIP 匯出可選 AES-256-GCM 加密。保險庫留在本機,匯出的 ZIP 記得加密。
dsh-rewind、dsh-turn-rewind 和 undo-savepoint 是同一個外掛嗎?
不是,是三個專案。lire1131 的 dsh-undo-savepoint(本頁主角)給設定和檔案打存檔點、能做崩潰救援;XSJUSTC 的 dsh-rewind 把會話回退到任意一條歷史使用者訊息;anionex/dsh-turn-rewind 是第三個獨立的社群回合回退外掛。集合頁裡有完整清單,本教學只手把手教 undo-savepoint。
相關攻略
同一張安全網的其他側面。
回滾與撤銷外掛集合
undo-savepoint、turn-rewind、config-manager 等回滾家族逐一比較——本教學的「裝哪個」上位層。
閱讀教學DSH 故障排查手冊
dsh 起不來、行為異常時的通用排查,和第 5 步的崩潰演練搭配食用。
閱讀教學重播會話軌跡
事後一步步回看 agent 做了什麼——和「事前存檔」互為補充。
閱讀教學匯出與遷移會話
換機時把會話帶走;設定這邊記得搭配快照 ZIP 匯出。
閱讀教學DSH 設定體系詳解
profiles、cordis.patch.yml 與設定項——正是快照守護的那幾份檔案。
閱讀教學DSH 外掛是什麼?
新手從這裡開始:外掛是什麼、怎麼裝、裝在哪裡。
閱讀教學來源與署名
全部截圖取自外掛作者本人的 B 站實錄,每張都深鏈回對應秒數;頁面文字為站內原創。安裝指令、脫敏與安全模式等事實已與 lire1131/dsh-undo-savepoint、XSJUSTC/dsh-rewind 的 README 交叉核對。


