dsh-undo:爲 DeepSeek Harness 提供按用戶輪次的持久化撤銷/重做

前言

在 DSH(DeepSeek Harness)的插件生態中,開發者可以通過插件擴展 Host 行爲、命令和 WebUI 行爲。社區目錄是獨立站點,與 DeepSeek / 幻方無官方從屬關係,不應把它寫成官方應用商店。

對使用 dsh 做多步工具任務的開發者來說,一個具體問題是:模型會按真實用戶消息推進會話,工具也可能在某一輪修改工作區文件。如果某輪之後需要回退,只刪除可見文本通常不夠,還需要把可見 surface 和工作區文件恢復到對應邊界。dsh-undo 針對這個邊界提供撤銷/重做能力。

這是什麼

dsh-undo 是 DeepSeek Harness(dsh)的持久化多步上下文撤銷/重做插件。它按真實用戶消息回退可見 surface,並恢復所選用戶輪次中工具修改的工作區文件。

倉庫線索指向 LingLambda,許可證爲 MITpackage.json 顯示版本爲 0.3.0-preview.1。已覈實資料中對維護者的標註不明確:GitHub 路徑與 homepage 線索爲 LingLambda,但未明確標註 maintainer。

重要限制:該發佈是 forward-looking preview,當前不可用於任何已發佈的 DeepSeek Harness 版本。它依賴未發佈 Harness 支持 durable surface/rewind / surface/restore events 和 conversation.chat.user-actions WebUI slot。在當前狀態安裝後,/undo 會 fail closed 並顯示升級提示。

核心功能

本地撤銷與重做命令

插件提供本地命令,且這些命令不發送給模型:

  • /undo:回退最新可見真實用戶消息及其後所有 surface 消息。
  • /undo <user-seq>:從指定可見用戶消息回退,幷包含後續輪次。
  • /redo:恢復最新活動回退。重複 undo/redo 使用 LIFO 順序。

會話重放與持久化

插件通過追加 durable surface/rewindsurface/restore 控制事件實現 undo/redo,而不是替換原始消息。它會保留原始消息節點、消息 ID、tool-call 關聯和日誌事件。

會話重放可重建相同的可見 surface 與 redo 堆棧。

新的普通 surface 輸出會使活動 redo 歷史失效。

工作區文件恢復

插件在隔離的隱藏 Git 目錄中記錄工具執行前後的工作區樹:

~/.dsh/dsh-undo/snapshots/

它不創建提交、不切換分支、不修改倉庫自身 Git index。

文件恢復的範圍是:

  • 僅針對所選用戶輪次中工具觸碰的文件;
  • 支持 tracked 文件和不超過 2 MiB 的 untracked 文件;
  • 限制在檢測到的 Git workspace 根內,從不恢復根外文件。

patch 與 redo 元數據按 session 存儲,使文件 redo 可在 Host 重啓後繼續。兩階段日誌用於協調重啓後中斷的文件操作。

WebUI 動作

WebUI 客戶端爲已確認的真實用戶消息氣泡提供 undo action。點擊後調用 /undo <user-seq>;Host 會驗證目標仍爲合法回退目標。

後臺任務處理

插件將頂層工具返回的 background jobs 關聯到其 user turn。undo 請求終止被移除輪次啓動的 jobs。

注意以下邊界:

  • 通過嵌套工具分派或子代理啓動的 background jobs 可能不關聯到根 user turn。
  • undo 只向頂層 background jobs 發送終止信號,不無限等待進程退出。

安裝與啓用

先確認你對當前版本狀態有預期:它依賴尚未發佈的 Harness 能力,今日安裝會使 /undo fail closed 並顯示升級提示。如果你只是爲了預覽和協調未來集成,可以按下面已覈實資料給出的 npm 示例安裝:

dsh plugin --profile demo add dsh-undo

這裏只採用已覈實資料中的 npm 示例;資料中也存在 git 安裝原文,但未指定唯一官方安裝命令。插件會以當前 dsh 進程權限運行,因此安裝前應檢查源碼與許可證。

典型用法

基本命令如下:

/undo
/undo 42
/redo

用法:

1、/undo 回退最新真實用戶輪次。

2、/undo 42 從指定 user-seq 回退,包括所有後續輪次。

3、/redo 恢復最新活動回退。

4、在 WebUI 中,也可以在舊用戶消息氣泡上點擊 undo action,調用 /undo <user-seq>

適用場景與注意

適合在以下情況考慮:

  • 你使用 dsh 運行多輪工具任務,希望按真實用戶消息邊界回退會話表面。
  • 你希望撤銷時同時恢復工具在該輪次中修改的工作區文件。
  • 你在 WebUI 中對已確認的真實用戶消息氣泡做回退。

需要注意:

1、當前發佈不可用於任何已發佈的 DeepSeek Harness 版本;舊版 Harness 會 fail closed,提示需要兼容的 Harness 升級,而不是寫入替換 assistant 消息或複製 transcript events。

2、網絡請求、數據庫寫入、遠程 API 調用、已退出進程及其他外部效應無法撤銷。

3、文件恢復只覆蓋檢測到的 Git workspace 根內文件,且 untracked 文件限制爲不超過 2 MiB

4、background jobs 關聯和終止只針對頂層工具返回的任務,且不會無限等待進程退出。

5、新的普通 surface 輸出會使活動 redo 歷史失效。

6、插件以當前 dsh 進程權限運行,安裝前應檢查源碼與許可證。

結尾

dsh-undo 的價值在於把“撤銷”落到真實用戶輪次上:既回退 DSH 的可見 surface,也嘗試恢復工具在該輪次中修改的工作區文件。當前資料表明它仍是 preview,需要等待匹配的 Harness 發佈;安裝前應先確認版本兼容性和權限邊界。

目錄頁(來自插件線索,未從已抓取資料確認):https://www.skillhub.cn/plugins/LingLambda/dsh-undo
GitHub:https://github.com/LingLambda/dsh-undo

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

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

小夜