用 dsh-message-edit 給 DeepSeek Harness 會話加上分支式編輯和時間線

前言

DeepSeek Harness(dsh)是 DeepSeek AI 開發的開源智能體框架,架構上強調「一切皆插件」。會話日誌按設計是隻追加、不回改:智能體跑完一輪之後,用戶消息、思考塊、工具調用和最終回覆都已經落定。實際用起來,常見需求並不是把剛纔那句話從歷史裏抹掉,而是提示寫偏了想改一句再跑、最後一輪迴復不滿意想重擲、中間某一回合跑歪了希望從那個點重新執行,同時把原來的會話留着對照。

社區插件 dsh-message-edit 做的就是這件事。它不改寫已有事件,也不去改 DSH 引擎內部;每次編輯、重生成或重試,都會從目標回合之前分出一個新的會話版本。原會話始終保留,可以隨時切回去。

本文按插件目錄頁、GitHub 倉庫 README、npm 頁面和 DeepSeek Harness 官方倉庫交叉覈對後整理。社區插件目錄(https://deepseek-harness-plugin.com)是獨立站點,與 DeepSeek / 幻方沒有官方從屬關係,不要把它當成官方應用商店。

這是什麼

dsh-message-edit 是一款會話與消息類插件,由 Moeblack 維護,源碼在 GitHub 倉庫 Moeblack/dsh-message-edit。npm 包名同樣是 dsh-message-edit,當前版本爲 0.2.3(2026-08-16 發佈)。package.json 與 npm 均聲明許可證爲 MIT;倉庫根目錄目前沒有單獨的 LICENSE 文件。主要語言是 TypeScript。本文查閱時 GitHub 倉庫顯示 25 star,目錄頁顯示 18 star,數字以倉庫爲準。目錄頁收錄日期爲 2026-08-15。

它給 DeepSeek Harness 補充基於事件溯源的「消息編輯與重生成」能力:

  • 可編輯已落定的用戶文本、助手思考塊(assistant.reasoning)和回覆文本(assistant.response
  • 可對最後一輪已落定助手回覆做重生成(reroll)
  • 可在 Timeline 裏選任意歷史回合重試
  • 會話標題欄和 Timeline 標籤頁提供版本切換

package.jsondsh.client.platformweb,瀏覽器側會注入會話 UI 相關客戶端包,因此需要網頁界面 profile 才能看到 Timeline 和標題欄控件。

核心功能

編輯、重生成與重試

倉庫 README 列出三類操作:

  1. 編輯消息:對象是已經落定的用戶文本、assistant.reasoning 思考塊,以及 assistant.response 回覆文本。
  2. 重生成:從「最後一條已落定助手回覆」所屬回合之前分支,用原來的用戶輸入重新生成。
  3. 重試任意回合:在 Timeline 中選擇任意歷史回合重新執行。

三種操作都不會原地改歷史。插件把完整回合當作效果原子:目標回合的 turn/start、模型請求、工具調用、工具結果和 turn/end 不會被拆開復制再拼回去。新版本從該回合之前的閉合邊界分出。

用戶消息編輯、Reroll 和 Retry 的路徑是:回退整個目標回合,再把目標用戶輸入作爲新回合交給 Agent。助手塊編輯則是:回退整個目標回合,用原用戶輸入加上編輯後的助手內容構造一個新的完整閉合回合;原來的工具鏈不會進入新版本。

級聯策略

對目標點之後還有後續用戶輸入的情況,插件提供兩種級聯策略:

  • truncate(默認):只重新執行目標輸入,該點之後的舊後續不再帶入新分支。
  • preserve:保留後續用戶輸入,並在新分支中依次重新執行;助手輸出與工具鏈全部重新生成。

編輯助手塊時如果選擇 preserve,後續用戶輸入會再依次交給 Agent,產生一套新的完整工具鏈。

版本時間線

每個版本會追加一個不可拆分的 message-edit/version 效果對:effect 記錄正向操作,inverse 記錄恢復目標。恢復不是刪除事件,而是沿着逆鏈切到仍然存在的版本。撤銷遵循後進先出:一次只撤銷當前原子效果,更早的效果保留;後繼分支也始終保留,可以從父版本重新施加。

會話頭的 parentSession 構成版本樹,並且必須與事件裏的 inverse.sessionId 一致。Timeline 通過 ctx.sessionQuery.traceSession()readSession() 做值級投影,再由原子逆鏈導出撤銷棧和可重施加的子版本。

界面上有兩處入口:

  • 會話標題欄(conversation.session.header.actions,id 爲 message-edit-controls): 撤銷當前原子效果, 重施加最新直接子效果,並顯示效果鏈計數和「最後回覆重生成」。
  • Timeline 標籤頁(註冊到 conversation.view,id 爲 message-edit-timelineorder: 15):位於 Trajectory(10)與 Prompt Studio(20)之間,展示完整已知分支樹、操作時間、編輯前後內容與當前版本。

產品文案爲中文。組件使用 CSS Modules 和 --dsw-* 語義 token,不引入額外 UI 庫。

HTTP 接口

Host 側還暴露了兩個 HTTP 接口,便於腳本或其它客戶端調用:

  • GET /message-edit?sessionId=:讀取可編輯消息、可重試回合與完整版本樹。
  • POST /message-edit:執行 editrerollretry,返回已發佈的新 Session ID。

README 沒有給出完整請求體示例,字段以倉庫當前實現爲準。

安裝與啓用

目錄頁給出的安裝命令如下,在 DeepSeek Harness 終端中運行:

dsh plugin add github:Moeblack/dsh-message-edit

如需可復現安裝,目錄頁建議固定 commit 哈希(把 commit 換成實際提交):

dsh plugin add github:Moeblack/dsh-message-edit#commit

倉庫 README 更明確地指向網頁 profile,因爲客戶端插件平臺是 web

dsh plugin --profile web add dsh-message-edit

這是從 npm 安裝包名 dsh-message-edit。本地開發可以用符號鏈接:

dsh plugin --profile web add -w link:/path/to/dsh-message-edit

README 說明 dsh plugin 是 pnpm 轉發器:add 之後會識別 dsh.bundle 聲明,把插件收進 profile 的 dsh.profile.bundles重啓 dsh 後生效。本地改源碼並重新構建後,同樣需要重啓才能更新。

從源碼構建:

npm install
npm run build

構建產物是 index.mjs(Host 插件)、client.js(Browser 插件)和對應 source map。構建依賴 npm 上的 @deepseek-ai/*@0.1.0-rc.6 類型包,不再依賴 dsh 源碼樹。

目錄頁提醒:插件以當前 dsh 進程的權限運行,安裝時可能執行代碼。安裝前請檢查源代碼倉庫和許可證。

典型用法

安裝並重啓帶 Web UI 的 dsh 之後,打開一個已有會話:

  1. 會話標題欄會出現消息編輯控件。對最後一輪助手回覆不滿意,可以直接觸發重生成;需要退回上一版或切到最新子版本時,用 /
  2. 對話區會多一個 Timeline 標籤,夾在 Trajectory 和 Prompt Studio 之間。這裏能看到分支樹、每次操作時間和編輯前後內容,也可以選任意歷史回合做 Retry。
  3. 編輯已落定的用戶消息或助手塊時,插件會從該回合之前創建新 Session。原會話不會被覆蓋,可以對照兩條分支。
  4. 如果後面還有多輪用戶輸入,按需要選擇 truncatepreserve:只想改當前這一句、後面不要了,用默認的 truncate;希望後面幾輪提問還在、但助手輸出和工具鏈全部重跑,用 preserve

需要從腳本觸發時,可以用上面的 GET / POST /message-edit

適用場景與注意事項

比較適合:

  • 主要在 Web UI 裏用 DeepSeek Harness,需要改提示、重擲回覆、從中間回合重跑
  • 希望保留原會話作對照,而不是覆蓋歷史
  • 需要看清分支樹和每次編輯前後的差異

需要注意:

  1. 不改工作區文件。 README 寫明:不聯動恢復或修改工作區文件、命令外部效果與既有產物。如果智能體已經改過倉庫裏的代碼,切會話版本不會把文件一併回滾。同類目錄分類下,dsh-turn-rewind 纔是「對話 + 工作區狀態回退」方向的插件,兩者不要混用預期。
  2. 不修改引擎。 插件不改 DSH 引擎、apiproxy 或官方 UI 包;Host 只走公開的 sessionsagentssessionPersistencesessionQueryworkspaceRegistrywebServer 服務。
  3. 歷史只追加。 Session 事件是 append-only、deep-frozen,不會原地改寫。
  4. 需要 web profile。 沒有網頁界面時,Timeline 和標題欄控件不會出現。
  5. 權限與許可證。 插件以當前 dsh 進程權限運行。package.json / npm 聲明 MIT,但倉庫目前沒有獨立 LICENSE 文件,安裝前仍應自己覈對源碼。
  6. DeepSeek Harness 仍處於開發者預覽,官方 README 寫明會有破壞兼容性的變更。插件構建對齊的是 @deepseek-ai/*@0.1.0-rc.6,升級 dsh 後需要再確認是否仍兼容。

小結

dsh-message-edit 把「改一句提示再跑一遍」做成了可切換的會話版本樹:編輯、重生成、重試都從目標回合之前分支,原會話留着,Timeline 能把整棵樹看清楚。它不管工作區文件回滾,也不改引擎,適合作爲 Web UI 上的會話編輯層。

目錄頁:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-message-edit/

GitHub:https://github.com/Moeblack/dsh-message-edit

npm:https://www.npmjs.com/package/dsh-message-edit

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

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

小夜