前言¶
在 DeepSeek Harness(DSH)裏做 Agent 開發時,常見做法是發錯指令、想從某條用戶消息重來,或模型改了一輪文件後希望對話和磁盤狀態一起回到更早的點。DSH 默認可以通過「在新對話中分支」繼續探索,但會新開分支或換窗口,容易留下副本、打斷當前會話節奏。若還要手動用 Git 或自己記改了哪些文件,成本更高。
下面介紹社區插件 dsh-nonead-prompt-rewind(維護者 NoneadChina,分類:工作流)。它在同一窗口、同一會話內,把對話回退到任意更早的用戶消息,並可在確認後一併還原插件追蹤過的 workspace 文件,語義對齊 Claude Code 的 /rewind,不依賴 Git 整樹快照。
這是什麼¶
dsh-nonead-prompt-rewind 是發佈在 npm 的 DSH 插件(包名 dsh-nonead-prompt-rewind)。刻意只做一件事:就地回退到任意遠的用戶消息,並可選擇通過輕量寫前備份還原被工具改過的文件。
- 倉庫:NoneadChina/dsh-nonead-prompt-rewind
- 社區目錄:SkillHub 插件頁
- 許可:MIT
核心功能¶
就地消息回退¶
目標用戶消息及其之後的內容,會同時從模型上下文和界面渲染的對話中撤回;目標消息的文本會自動回填到輸入框。全程在當前會話內完成,不新建分支、不產生殘留會話副本。
實現上遵循會話日誌 append-only:回退不刪改歷史,只在日誌末尾追加一條與官方 /compact 同類的「隱藏 + 替換」標記,把後續內容遮蔽掉。被撤回的內容仍完整留在日誌中,可在「軌跡」等面板審計;禁用插件時也可僅讓界面重新顯示(不影響日誌本身)。
輕量文件還原(可選)¶
對齊 Claude Code 檢查點思路:局部追蹤寫類工具(write、edit)編輯過的文件,寫前備份;每條用戶消息邊界會重掃已跟蹤文件,外部變更(命令、手改)也會被記錄。回退確認時,對話與文件一次確認、同時生效,沒有「只退對話」或「只退文件」的分模式。
限制與邊界見倉庫文檔(例如單文件默認超過 8 MiB 不備份、未被工具碰過的文件不還原、子代理編輯不追蹤)。快照關閉期間的新改動無法還原。
交互與命令¶
- 每條用戶消息操作行有 ↶ 回退 按鈕;確認框會列出將被還原或刪除的文件清單。
- 命令:
/rewind(別名/undo)打開候選列表;/rewind @<序號>直接指定目標。 - 設置 →「回退歷史」:按工作區保留最近 10 次回退(可通過配置項
historyLimit調整),可標註完成 / 部分完成 / 未完成;對當前會話最新且未撤銷的那一次,可「恢復到回退之前」——只還原文件、不恢復對話,且每條只能撤一次;若回退後又改過相關文件,撤銷會被拒絕。
存儲與安全(摘要)¶
- 快照默認目錄:
<dsh home>/rewind-snapshots/(默認~/.dsh/rewind-snapshots/);回退歷史:<dsh home>/rewind-history/。 - 快照備份可在插件配置卡關閉;另有默認關閉的快照自動清理,可通過
/snapshot-auto-cleanup查看與配置。 - 插件聲明:不觸碰 Git 倉庫、無網絡請求、不訪問憑據;文件備份與還原經安全加固。詳見倉庫 SECURITY.md。
界面文案跟隨 DSH 語言,內置多種 locale;插件與 DSH 均處開發者預覽階段,生產環境建議 pin 精確版本。
安裝與啓用¶
安裝前確認本機 DSH 版本,並在 Releases 選擇與本機 DSH 適配的插件版本。倉庫 package.json 聲明宿主支持 dsh:>=0.2.1-0 <0.3.1-0,Node.js >=24.9.0。
命令行(將 <name> 換成你的 Profile 名,<版本> 換成 Releases 中的版本號,例如資料中的 npm 包當前版本爲 0.5.1,仍以 Releases 說明爲準):
dsh plugin --profile <name> add dsh-nonead-prompt-rewind@<版本>
圖形界面:側欄「插件」→「添加插件」→ 填寫 dsh-nonead-prompt-rewind@<版本> → 安裝 → 重啓 DSH。
npm 上的
dsh-rewind屬於其他作者,請使用dsh-nonead-prompt-rewind。從舊包名升級時,插件條目 id 與相關設置不會自動遷移,需重新安裝;/rewind、/undo、快照目錄名與已有快照數據保持不變。
插件以當前 DSH 進程權限運行,安裝前應自行查看源碼與 MIT 許可證,評估是否適合你的工作區。
典型用法¶
- 在對話中找到要回退的用戶消息,點擊旁邊的 ↶;或輸入
/rewind//undo從列表選擇;已知序號時用/rewind @<序號>。 - 在確認框中查看將被還原或刪除的文件列表,點擊「回退」確認。
- 回退立即生效:界面與模型上下文回到目標消息當時的狀態,目標消息文本已在輸入框中,修改後可重新發送。
候選列表支持方向鍵與 Enter/Esc;確認框默認焦點在「取消」,可用 ⌘/Ctrl+Enter 直接確認。
快照與歷史相關命令示例(完整說明見 README):
/snapshot-auto-cleanup 查看狀態
/snapshot-auto-cleanup on|off 開啓 / 關閉自動清理
/snapshot-auto-cleanup max-age <天數> 設置失活閾值
/snapshot-auto-cleanup run [--apply] 預演,或加 --apply 執行
卸載插件:
dsh plugin --profile <name> remove dsh-nonead-prompt-rewind
如需刪除本地數據,可另行刪除 rewind-snapshots、rewind-history 等目錄(見 README「卸載」一節)。
適用場景與注意¶
適合:在同一 DSH 會話裏頻繁「從某條 prompt 重來」、且希望 Agent 寫過的文件儘量隨回退一起還原的開發者;不強制依賴 Git 的普通目錄工作流。
不適合或需另尋方案:整工作樹 / Git 級快照;子代理會話內的編輯回退;替代 DSH 內置的「在新對話中分支」。
注意:
/export導出的 JSONL 仍包含已撤回內容,插件無法改動導出行爲。- 回退目標早於已加載歷史時,對話區可能暫時空白,需「加載更早」後再看歷史。
- 明確不做 fork/分支回退、不做子代理備份追蹤。
與默認 DSH 行爲對比(摘自 README):
| 維度 | 默認行爲 | 本插件 |
|---|---|---|
| 對話回退 | 新建分支對話 | 就地回退,不切窗口 |
| 文件還原 | 手動 / Git | 寫前輕量備份,確認後一併還原 |
| 還原依賴 | 常依賴 Git 或重型快照 | 不依賴 Git 倉庫 |
| 歷史 | 無統一記錄 | 按工作區保留最近回退,最新一次可撤銷文件改動 |
結尾¶
dsh-nonead-prompt-rewind 把「從任意用戶消息重來」收束爲同窗口的一次確認操作,並用 append-only 日誌遮蔽與寫前文件備份,在 Agent 工作流裏補齊接近 Claude Code /rewind 的體驗。
- 社區目錄:https://www.skillhub.cn/plugins/NoneadChina/dsh-nonead-prompt-rewind
- 源碼與文檔:https://github.com/NoneadChina/dsh-nonead-prompt-rewind
SkillHub 爲社區插件目錄站點,與 DeepSeek / 幻方無官方從屬關係;DSH 生態理念是「一切皆插件」,選用插件時請自行覈對版本與權限邊界。