dsh-message-edit:消息氣泡修改與上下文改寫

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

使用方法

  1. 打開任意會話,在用戶消息或助手回覆的氣泡上找到鉛筆圖標按鈕。
  2. 點擊彈出編輯框,修改文本後點「保存修改」。
  3. 氣泡正文直接變成新文本;之後模型看到的上下文也是修改後的版本。
  4. 已修改的消息按鈕會變藍(提示”已改”),可再次點擊繼續編輯。

實現原理

  • Host 側(RPC 與 Surface 操作)
    插件註冊 /message-edit RPC 通道。通過 session.append(type, data, { surfaceOp: { op: "replace", ... } }) 追加替換事件,定位目標消息(按 messageId 或 seq),改寫模型可見的 surface。

  • Client 側(渲染覆蓋與存儲)
    助手消息覆蓋官方插槽 conversation.chat.assistant-actions,用戶消息覆蓋 keyed user / 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 生態目錄。

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

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

小夜