dsh-msg-edit:給 DeepSeek Harness Web 加上消息編輯與重新生成

前言

用 DSH 的 Web 界面跑智能體時,常會遇到兩類需求:某條助手回覆有措辭或格式問題,想直接改掉,而不重跑整輪;或者想回退到某一輪,換個問法重新生成。對話日誌是事件溯源式的,直接改文件不現實;自己補一套「改消息 + 重新生成」的 HTTP 接口和界面按鈕,工作量也不小。

下面介紹的 dsh-msg-edit 把這件事做成了插件:裝上後,DeepSeek Harness Web 的助手消息操作條會多出「編輯這條回覆」和「重新生成回覆」兩個按鈕,背後由四條 HTTP RPC 完成。

這是什麼

dsh-msg-edit 由 @moton16 維護,MIT 許可,當前版本 0.1.0。插件分兩部分:

  • host 插件(Cordis node 側):提供 /api/msg-edit/* 四條 HTTP RPC;
  • client 插件(dsh.client 聲明式):向助手消息操作條注入按鈕,並彈出編輯器。

整個包是純聲明式 Cordis bundle,dsh.bundle.patch 指向 cordis.patch.yml,沒有安裝腳本、沒有構建步驟、也沒有源碼補丁工具。兼容 @deepseek-ai/dsh-base@deepseek-ai/dsh-web-app 0.1.0-rc.6(peerDependencies 聲明),依賴 dsh 的 slot 系統(conversation.chat.assistant-actions)、webServer.register 以及 sessions/agents 服務。

核心功能

host 側四條 RPC,各自負責一件事:

1、rewrite-message:改寫單條助手回覆(正文/思考),不截斷後續消息;
2、edit-message:編輯用戶消息,截斷其後所有節點並重新生成;
3、regenerate:重新生成某條回覆,回溯到它歸屬的真實用戶消息;
4、get-message:讀取助手回覆當前文本,用於編輯時預填。

client 側只做界面:在助手消息操作條注入「編輯這條回覆」「重新生成回覆」兩個按鈕;點擊編輯會彈出「思考/正文」的行內編輯器,保存時調用 rewrite-message

兩點邊界需要說明:編輯與重新生成是在事件溯源日誌上追加 surface-replace 副本事件,不是改寫歷史記錄;「用戶消息行內編輯」的 UI 入口不在本插件範圍內(user 槽被官方 ui-conversation 獨佔),但 host 的 edit-message RPC 仍可用,可以由其他 UI 調用。

安裝與啓用

三種方式任選其一。

方式 A(推薦):在 profile 目錄內($DSH_HOME/profiles/<profile>)執行:

dsh plugin --profile web add @moton16/dsh-msg-edit

dsh 會從 npm 安裝包,讀到 dsh.bundle.patch 後自動把兩行插件追加進 profile 的 patch 層。

方式 B:git 安裝:

dsh plugin --profile web add github:moton16/dsh-msg-edit

倉庫已提交預構建的 lib/(運行時 JS),無需 prepare/postinstall;若 pnpm 提示構建授權,在 profile 的 pnpm-workspace.yamlallowBuilds 中放行本包(源碼可信才放行)。

方式 C:手動掛載(本地開發)。先做第一步,把 lib/ 放進 profile 依賴樹(或 pnpm link);再在 profile 的 cordis.patch.yml 追加兩行插件:

- insert:
    - id: msg-edit-host
      name: '@moton16/dsh-msg-edit'
    - id: ui-msg-edit
      name: '@moton16/dsh-msg-edit/client'

也可以直接以倉庫的 cordis.yml 作爲 --patch overlay 啓動:

dsh web --profile web --patch ./cordis.yml

安裝完成後需手動重啓 dsh web(本插件不代重啓);走方式 C 的,重啓後在瀏覽器按 Ctrl+F5。

驗證

經過上面的步驟,可以從兩側確認插件已生效。

host 側:對四條路由任一發一個空參 POST,返回 HTTP 200 加 {ok:false,error:{code:'bad-request',...}} 即路由已掛上:

curl -X POST http://127.0.0.1:<端口>/api/msg-edit/get-message

client 側:鼠標懸停助手消息,應出現鉛筆(編輯這條回覆)與循環(重新生成回覆)兩個按鈕;點擊編輯應彈出「思考/正文」行內編輯器。

倉庫的 docs/VERIFICATION.md 裏有本地複驗記錄:插件路由 4/4、UI 按鈕渲染、截圖證據。

適用場景與注意

適合自己部署 DSH Web、需要修正助手回覆措辭、或想對某一輪迴退重跑的開發者。

安裝前請注意:插件以當前 dsh 進程的權限運行,安裝前應檢查源碼與許可證(本包爲 MIT)。另外,在 dsh 0.1.0-rc.6 上,配套組件對 surface-replace 副本事件存在幾處官方未覆蓋的行爲,安裝側需按本機情況處理:

1、token-meter 重放崩潰(功能正確性依賴):dsh-token-meter@0.1.0-rc.6_foldEvent 在重放 replace 副本時拋錯,導致 /compact 失敗;官方倉庫 master 尚未合入支持。README 的「兼容補丁」小節給出了一處社區修復的改法,由安裝者自行評估應用;本包爲合規不附帶補丁腳本。

2、surface 投影:官方渲染器對 replace 副本的即時投影缺位,未應用社區投影邏輯時,編輯結果在刷新/重放後纔可見。

3、agent-loop 去重:編輯/重新生成後,agent-loop 可能重複 append 相同的 user/message,產生一次空轉 turn;社區去重邏輯(tail 同 id 跳過)可消除,非崩潰級。

4、用戶消息編輯按鈕:UI 入口不在本插件範圍內,如前述,可通過 host 的 edit-message RPC 由其他 UI 調用。

其中限制 1 不處理會導致 compact 失敗,限制 2-4 爲體驗級。官方對應組件合入支持後,本插件無需改動即可解除。

小結

一句話回顧:dsh-msg-edit 用四條 RPC 加兩個按鈕,把「改一條回覆、重跑一輪」變成 DSH Web 裏的現成操作;純聲明式掛載,裝上重啓即可用,代價是需要按 README 處理 rc.6 上的幾處已知限制。

社區目錄爲獨立站點,與 DeepSeek、幻方無官方從屬關係。

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

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

小夜