DSH 的核心流程由模型可見的上下文決定。當用戶輸入或助手回覆出現錯誤時,通常只能新建會話或通過 Prompt 修正。dsh-message-edit 插件在消息氣泡上提供「修改」按鈕,允許開發者直接編輯任意消息,並通過 DSH 核心 surface replace 機制改寫模型視角的上下文,同時保留 append-only 日誌用於審計。
核心功能¶
- 支持雙向編輯:用戶消息和助手回覆的氣泡上均提供修改按鈕。
- 正文直接替換:編輯後的文本直接顯示在氣泡中,支持 Markdown 格式(粗體、表格、代碼塊、列表)。
- 上下文真正改寫:使用
surfaceOp: { op: "replace" }機制修改模型可見上下文,而非僅僅替換顯示層。 - Fork 繼承與多次修改:分支出新對話時,子會話自動繼承已修改的上下文;已修改的消息按鈕變藍,支持二次編輯。
安裝¶
dsh plugin --profile web add github:TwilightSpirit/dsh-message-edit
使用方法¶
- 打開任意會話,在用戶消息或助手回覆的氣泡上找到鉛筆圖標按鈕。
- 點擊彈出編輯框,修改文本後點「保存修改」。
- 氣泡正文直接變成新文本;之後模型看到的上下文也是修改後的版本。
- 已修改的消息按鈕會變藍(提示”已改”),可再次點擊繼續編輯。
實現原理¶
-
Host 側(RPC 與 Surface 操作)
插件註冊/message-editRPC 通道。通過session.append(type, data, { surfaceOp: { op: "replace", ... } })追加替換事件,定位目標消息(按messageId或seq),改寫模型可見的 surface。 -
Client 側(渲染覆蓋與存儲)
助手消息覆蓋官方插槽conversation.chat.assistant-actions,用戶消息覆蓋 keyeduser/steering渲染器。編輯後的新文本存儲在localStorage覆蓋層(dsh-msg-edit:{sessionId}:{seq})中,渲染時優先顯示新文本(本地覆蓋 + host query 兜底,fork 子會話也能查到)。 -
Fork 繼承機制
監聽session/created事件。若子會話(header.parentSession存在)的 seed 前綴包含被替換消息,重放對應的 replace 事件,並做冪等檢查避免重複。
依賴與配置¶
- 依賴項:
@deepseek-ai/dsh-session(^0.1.0-rc7)@deepseek-ai/dsh-client-ui-conversation@deepseek-ai/dsh-client-connection
- 配置項:無額外配置項,插件開箱即用。
注意事項¶
修改的是「模型看到的上下文」。根據 DSH 的 append-only 安全設計,日誌文件中舊內容物理保留,無法抹除,但模型視角和氣泡顯示均爲新文本。
插件基於 MIT 許可證開源,維護者爲 TwilightSpirit。更多詳情請查看 GitHub 倉庫 或 DSH 生態目錄。