前言¶
在 DeepSeek Harness(下稱 DSH)中,一個已確定(settled)的用戶消息往往不是孤立文本,而是後續所有回合的前置條件。對於需要修正提示、重跑任務或比較不同分支結果的 DSH 使用者來說,核心問題不是“再發一條新消息”,而是:能否回到某個已確定的用戶消息,修改它,並讓會話從該回合重新運行?
dsh-turn-fork 就是針對這個問題提供的 DSH 插件。它圍繞“回合”組織編輯、重試、重新生成和版本樹導航,並強調分支日誌在 dsh 進程重啓後仍可讀取。
這是什麼¶
ruby1304/dsh-turn-fork 是面向 DeepSeek Harness 會話的插件,許可證爲 MIT。它的核心定位是 turn-atomic:圍繞單個已確定用戶消息做編輯與重跑,而不是簡單地在會話末尾追加新消息。
基礎信息如下:
- 插件名:
dsh-turn-fork - 許可證:
MIT - 安裝命令:
dsh plugin add dsh-turn-fork - 插件目錄頁:
https://www.skillhub.cn/plugins/ruby1304/dsh-turn-fork - GitHub:
https://github.com/ruby1304/dsh-turn-fork
package.json 中與本次介紹相關的關鍵配置如下,說明它面向 DSH web 客戶端,並注入若干 DSH 客戶端模塊:
{
"version": "0.1.0",
"dsh": {
"client": {
"platform": "web",
"inject": [
"@deepseek-ai/dsh-client-connection",
"@deepseek-ai/dsh-client-runtime",
"@deepseek-ai/dsh-client-ui-conversation"
]
}
}
}
插件通過 dsh-client-locale 服務提供中文/英文雙語界面。
核心功能¶
下面介紹插件已提供的能力。
編輯已確定用戶消息¶
插件支持編輯已確定(settled)的用戶消息,並從該回合重新運行對話。
操作路徑是:打開 Turn Fork 標籤,選擇一條用戶消息,修改文本,選擇下游策略,然後保存。保存後,會從已完成前綴創建新分支會話,並重跑該回合。
下游策略有兩種:
1、truncate:丟棄編輯回合之後的所有內容。
2、preserve:重放編輯回合及之後的每個回合,並在確認前顯示將重放的回合數。
重試歷史回合與重新生成最新回覆¶
插件提供三類操作入口:
- 標籤中的 per-turn 按鈕,用於重試任意歷史回合;
- 助手回覆上的 per-message 按鈕,用於重新生成對應回覆;
- session header 的 regenerate 按鈕,用於重新生成最新助手回覆。
版本樹 Timeline¶
插件提供版本樹 Timeline,用於查看和管理不同分支。
版本樹標籤會:
- 列出每個分支及操作摘要;
- 標記當前版本;
- 提供 Undo / Redo 導航;
- 提供 Open 操作;
- 對運行中的分支顯示警告,並提供 Stop 控件。
分支日誌持久化¶
插件的分支日誌在 dsh 進程重啓後仍可讀取。資料指出,它修復了 dsh-message-edit 的 P0 持久化缺陷。
僅使用官方插槽¶
插件只使用以下官方插槽:
- Timeline 標籤;
- session-header 操作;
- 每條助手消息操作。
它不做 DOM 注入,也不通過文本猜測來定位消息。
安裝與啓用¶
先安裝插件:
dsh plugin add dsh-turn-fork
然後重啓 dsh。
安裝完成後,插件會註冊 Turn Fork 標籤、session header 操作,以及每條助手消息上的操作。
典型用法¶
下面給出可復現的使用路徑。
編輯一條用戶消息¶
1、打開 Turn Fork 標籤。
2、選擇要修改的用戶消息。
3、修改消息文本。
4、選擇下游策略:truncate 或 preserve。
5、保存。
保存後,插件會從已完成前綴創建新分支會話,並重跑該回合。
重試或重新生成¶
可以按目標選擇入口:
- 使用標籤中的 per-turn 按鈕,重試某個歷史回合;
- 使用助手回覆上的 per-message 按鈕,重新生成該回復;
- 使用 session header 的 regenerate 按鈕,重新生成最新回覆。
查看版本樹¶
在 Turn Fork 標籤中查看版本樹:
- 查看每個分支及其操作摘要;
- 查看當前版本標記;
- 使用 Undo / Redo 在分支間導航;
- 使用 Open 打開某個分支;
- 如果分支正在運行,查看警告並使用 Stop 控件。
選擇級聯策略¶
編輯保存前,需要選擇下游策略:
truncate:丟棄編輯回合之後所有內容;preserve:重放編輯回合及之後的每個回合,並在確認前顯示將重放的回合數。
適用場景與注意¶
適合誰¶
適合在 DSH 會話中需要修正歷史用戶消息、重跑某個回合、比較不同分支結果的開發者。尤其適合反覆調整提示或任務輸入,並希望保留分支譜系的場景。
權限與許可證¶
插件以當前 dsh 進程權限運行,安裝前應檢查源碼、許可證和它暴露的接口。
許可證爲 MIT;客戶端 bundle preset vendored 自 DeepSeek Harness 倉庫(MIT,© DeepSeek)。
不支持助手消息編輯¶
本插件明確不支持助手消息編輯。資料指出,助手編輯會僞造 source: {kind:'model'} 並丟棄 tool calls,因此該能力被排除。
分支刪除與垃圾回收¶
平臺當前沒有 session-delete API,分支暫不能 GC。版本樹只是譜系展示,不代表分支可以被平臺回收。
從 dsh-message-edit 遷移¶
舊損壞事件格式日誌會被持久層拒絕,無法就地修復。升級前需使用官方導出流程,或等待上游修復。
HTTP 信任圍欄¶
/turn-fork 路由有信任圍欄要求:
- 瀏覽器
Origin必須是localhost、127.0.0.1或[::1],且端口精確匹配; - 僅在服務器以
0.0.0.0顯式遠程暴露時放寬端口匹配; - 無
Origin時,要求 loopbackHost; POST請求必須使用application/json,且 body 不超過64 KiB。
測試口徑¶
dsh-test --suite full 在 local runner 下報告 flaky,原因是每次嘗試的絕對路徑/時間戳不同。quick suite 是權威生命週期 gate,CI 在 Docker 中運行。
結尾¶
dsh-turn-fork 的價值,是把“修改歷史用戶消息並重跑”變成 DSH 會話中一個可操作、可回退、可追蹤的分支流程。它圍繞回合、分支和持久化日誌組織功能,適合作爲 DSH 會話調試和分支比較場景中的客戶端插件。
相關地址:
- 插件目錄頁:
https://www.skillhub.cn/plugins/ruby1304/dsh-turn-fork - GitHub:
https://github.com/ruby1304/dsh-turn-fork