前言¶
在 DSH 裏做智能體開發時,常見的問題是:一條指令已經觸發多輪修改,工作區代碼和會話上下文一起往前走。如果某一步結果不符合預期,手動整理 git 歷史、再單獨處理會話分支,比較麻煩。
dsh-rollback-withdraw 針對這個點提供一條路徑:在已完成回合邊界上記錄撤回點,點擊消息旁的 undo 圖標後,同時恢復工作區代碼並把會話 fork 到該邊界前。
下面介紹它的定位、能力、安裝和需要注意的邊界。
這是什麼¶
dsh-rollback-withdraw 是 dyhyfjn 維護的 DSH web-profile 插件,許可證爲 MIT。它提供 Trae-style withdraw 體驗:在用戶氣泡下以及每個已完成回合的最後一條助手消息下提供撤回按鈕,用於恢復工作區代碼,並把會話回退到最後完成回合。
它適合已經在使用 DSH web profile、希望把“代碼回滾 + 會話分叉”做成單步操作的使用者。運行環境要求 Node >= 20;當前 Windows 優先,使用 robocopy 和 PowerShell 5.1+,其他平臺計劃中。
核心功能¶
每條消息都有撤回入口¶
- 用戶氣泡下提供撤回按鈕。
- 每個已完成回合的最後一條助手消息下也提供撤回按鈕。
兩種恢復後端自動選擇¶
插件會在可用後端中選擇:
- Git 模式:工作區爲 git 倉庫時,每回合結束提交爲
rollback checkpoint <seq>;撤回使用git reset --hard和git clean,並保留忽略目錄。 - 文件快照模式:每回合結束創建 hard-link 快照;未變化文件在快照間共享單份副本。
Git 模式相關命令含義如下:
git reset --hard
git clean
工作區級 Git 自動提交開關¶
默認配置項爲:
{
"gitAutoCommit": true
}
當工作區爲 git 倉庫時,插件使用 git 提交作爲撤回點。開關選擇持久化在:
.dsh-rollback/config.json
自動加載與兩步確認¶
- 插件作爲 web-profile bundle 自動加載,客戶端啓動時生效,重啓後無需重新激活。
- 撤回採用兩步確認:第一次點擊進入 arm 狀態,第二次點擊執行撤回。
安裝與啓用¶
安裝命令:
dsh plugin --profile web add dsh-rollback-withdraw
該命令把插件添加到 DSH 的 web profile。插件集合或插件設置變化後,需要重啓 web app,使插件設置生效;由於它作爲 web-profile bundle 加載,客戶端啓動後會自動生效。
這裏需要:
Node >= 20
當前插件以 Windows 爲優先平臺,依賴:
robocopy
PowerShell 5.1+
典型用法¶
- 正常與 agent 會話。每個已完成回合後,插件自動記錄一個撤回點。
- 懸停消息並點擊 undo 圖標。第一次點擊進入 confirm/arm,第二次點擊執行。
- 工作區恢復後,UI 切換到 forked 且已回滾的會話,可以從該會話繼續。
- 如果要切換 Git 自動提交開關,修改工作區級設置後重啓 web app,使設置生效。
適用場景與注意¶
適用場景¶
- 在 Windows 上使用 DSH web profile。
- 工作區可以是 git 倉庫,也可以是非 git 目錄。
- 需要在本地、單人使用時快速回退代碼和會話。
回滾邊界¶
- fork 只能在回合邊界切斷;撤回助手回答也會回退其前面的用戶問題。
- 會話第一條消息不能撤回。
- 插件安裝前的消息沒有快照。
- 源會話會保留在側欄作爲分支,沒有自動歸檔。
文件刪除與忽略路徑¶
Git 模式會執行整個倉庫的:
git reset --hard
git clean
忽略目錄保留;未跟蹤且非忽略文件會在回滾時刪除。
以下路徑不會被快照、提交或刪除:
node_modules
.git
dist
build
安全邊界¶
插件的客戶端與宿主通過如下路由通信:
/rollback/rpc
該路由是 localhost 同源、未認證路由,假設個人本地使用。不要把 DSH harness 端口暴露到不可信網絡。
插件會執行倉庫級 git 命令並讀寫工作區文件,因此它會以當前 dsh 進程權限運行。安裝前建議檢查源碼、許可證與實際工作區內容。
鏈接¶
- 社區目錄頁:
https://www.skillhub.cn/plugins/dyhyfjn/dsh-rollback-withdraw - GitHub:
https://github.com/dyhyfjn/dsh-rollback-withdraw