前言¶
在 DSH 裏做多輪智能體任務時,常見訴求不是單純撤銷一條回覆,而是把某條用戶消息引入後的工作區改動退回去,再從這條消息繼續。文件改動和對話歷史需要一起處理:文件要恢復,對話要能繼續。
dsh-rewind 是面向 DSH 的會話回退插件。它恢復被選中輪改變的文件,並通過 DSH 的 sessions.fork / sessions.create 在新會話中繼續。下面介紹它的能力、安裝方式和需要注意的邊界。
這是什麼¶
- 倉庫:
2501136589/dsh-rewind - 許可:
MIT - 定位:DSH 會話回退插件
- 目標場景:非 git 工作區中,按輪次恢復文件,並在 fork 出的新會話裏繼續對話
核心能力¶
- 通過
sessions.fork/sessions.create新建會話,把對話續到選中輪之後。 - 在非 git 場景使用
sha256內容尋址快照恢復文件,支持新增、刪除、修改、權限、文本與二進制。 - 在用戶消息下方提供回退按鈕,點擊後預覽將被恢復的文件改動。
- 提供
/rewind命令,支持rewind、list-files、dry-run子命令。 /rewind list或/rewind可列出本會話所有可回退的用戶消息。- fork 會話可以沿
header.parentSession血緣鏈繼續回退父會話消息。 - 回退範圍限制爲該會話碰過的文件,提供跨會話隔離。
- 默認歸檔原會話;可用
archiveOriginalSession: false關閉。
安裝與啓用¶
安裝要求 dsh 與 pnpm 在 PATH 上。
進入插件倉庫目錄後,執行:
dsh plugin --profile web add .
README 中還提到 npm 發佈後的安裝方式;由於是否已發佈可用未明確,若包可安裝,可嘗試:
dsh plugin --profile web add @xiaoxin/dsh-rewind
注意:bundle 行需要用 - insert: 包裹在 cordis.patch.yml 中,否則 loader 可能靜默忽略,導致按鈕不出現。
安裝後,需要完全停掉再啓動 dsh web,然後在瀏覽器裏執行 Ctrl+F5 強刷。
瀏覽器回退流程¶
1、打開會話,找到用戶消息下方的回退按鈕。
2、點擊按鈕,預覽將被恢復的文件改動。
3、確認後,插件先恢復文件,再通過 sessions.fork / sessions.create 新建會話。
4、新會話輸入框中填入該條用戶消息原文,可以修改後重新發送。
5、默認歸檔原會話;歸檔後原會話從側欄和搜索消失,但數據仍在磁盤。若不想歸檔,可以設置:
archiveOriginalSession: false
命令回退流程¶
列出本會話可回退的用戶消息:
/rewind list
也可以直接執行:
/rewind
執行回退:
/rewind <messageSeq|messageId> rewind
只預覽文件改動:
/rewind <messageSeq|messageId> list-files
或者:
/rewind <messageSeq|messageId> dry-run
注意:seq 是會話日誌的原始事件流水號,可用 /rewind list 獲取可用值。
回退邊界¶
- 只能回退到開啓採集之後的 turn;啓用插件之前的輪次沒有快照,無法回退。
- 快照邊界爲 turn;首輪沒有上一輪
turn/end,會走sessions.create。 - 工作區遍歷跳過
.git、node_modules和臺賬目錄;超大或超總量會明確失敗。 - 跨會話隔離是啓發式的;最後一個 turn 的 shell 改動可能不被歸因,會話事件缺失時退回全量差異。
- 兩個會話改過同一個文件時,後回退的一方可覆蓋另一方的該文件改動。
適用場景與注意¶
適合:
- 使用 DSH web 做多輪開發,希望從某條用戶消息重新出發。
- 工作區不是 git 倉庫,或不想依賴 git 狀態做文件回退。
- 需要在腳本或無 UI 環境中用
/rewind命令完成預覽和回退。
注意:
- 插件會以當前
dsh進程權限運行;安裝前建議檢查源碼與MIT許可證。 DSH沒有刪除單個會話的 RPC;默認歸檔後,原會話從側欄和搜索消失,但數據仍在磁盤。- 跨會話隔離依賴會話事件和快照漂移;共享工作區、shell 副作用和併發修改都可能影響回退範圍。
- 社區目錄頁是獨立站點,不是官方應用商店;選擇插件時應自行覈對倉庫與許可。
相關鏈接¶
- GitHub:https://github.com/2501136589/dsh-rewind
- 社區目錄頁:https://www.skillhub.cn/plugins/2501136589/dsh-rewind