前言¶
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.json 裏 dsh.client.platform 爲 web,瀏覽器側會注入會話 UI 相關客戶端包,因此需要網頁界面 profile 才能看到 Timeline 和標題欄控件。
核心功能¶
編輯、重生成與重試¶
倉庫 README 列出三類操作:
- 編輯消息:對象是已經落定的用戶文本、
assistant.reasoning思考塊,以及assistant.response回覆文本。 - 重生成:從「最後一條已落定助手回覆」所屬回合之前分支,用原來的用戶輸入重新生成。
- 重試任意回合:在 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-timeline,order: 15):位於 Trajectory(10)與 Prompt Studio(20)之間,展示完整已知分支樹、操作時間、編輯前後內容與當前版本。
產品文案爲中文。組件使用 CSS Modules 和 --dsw-* 語義 token,不引入額外 UI 庫。
HTTP 接口¶
Host 側還暴露了兩個 HTTP 接口,便於腳本或其它客戶端調用:
GET /message-edit?sessionId=:讀取可編輯消息、可重試回合與完整版本樹。POST /message-edit:執行edit、reroll或retry,返回已發佈的新 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 之後,打開一個已有會話:
- 會話標題欄會出現消息編輯控件。對最後一輪助手回覆不滿意,可以直接觸發重生成;需要退回上一版或切到最新子版本時,用
←/→。 - 對話區會多一個 Timeline 標籤,夾在 Trajectory 和 Prompt Studio 之間。這裏能看到分支樹、每次操作時間和編輯前後內容,也可以選任意歷史回合做 Retry。
- 編輯已落定的用戶消息或助手塊時,插件會從該回合之前創建新 Session。原會話不會被覆蓋,可以對照兩條分支。
- 如果後面還有多輪用戶輸入,按需要選擇
truncate或preserve:只想改當前這一句、後面不要了,用默認的truncate;希望後面幾輪提問還在、但助手輸出和工具鏈全部重跑,用preserve。
需要從腳本觸發時,可以用上面的 GET / POST /message-edit。
適用場景與注意事項¶
比較適合:
- 主要在 Web UI 裏用 DeepSeek Harness,需要改提示、重擲回覆、從中間回合重跑
- 希望保留原會話作對照,而不是覆蓋歷史
- 需要看清分支樹和每次編輯前後的差異
需要注意:
- 不改工作區文件。 README 寫明:不聯動恢復或修改工作區文件、命令外部效果與既有產物。如果智能體已經改過倉庫裏的代碼,切會話版本不會把文件一併回滾。同類目錄分類下,
dsh-turn-rewind纔是「對話 + 工作區狀態回退」方向的插件,兩者不要混用預期。 - 不修改引擎。 插件不改 DSH 引擎、apiproxy 或官方 UI 包;Host 只走公開的
sessions、agents、sessionPersistence、sessionQuery、workspaceRegistry和webServer服務。 - 歷史只追加。 Session 事件是 append-only、deep-frozen,不會原地改寫。
- 需要 web profile。 沒有網頁界面時,Timeline 和標題欄控件不會出現。
- 權限與許可證。 插件以當前 dsh 進程權限運行。
package.json/ npm 聲明 MIT,但倉庫目前沒有獨立 LICENSE 文件,安裝前仍應自己覈對源碼。 - 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