前言¶
在 DSH 裏和模型對話時,常見做法是複製助手回覆裏的一小段,貼進輸入框再寫「這裏不對 / 請按這個改」。上下文容易丟,模型也不一定能對齊你指的是哪一句。OpenAI Codex 與 ChatGPT 桌面版提供了 response annotations:在已完成回覆裏選中文字,加可選評論,隨下一條消息或單獨發送結構化載荷,並在原回覆上保留可定位的氣泡。DeepSeek Harness 社區插件 dsh-response-annotations(維護者 bovvl,倉庫作者標註爲 Ava)在 DSH Web GUI 側實現同類交互,且 Host 半邊爲空:不註冊工具、不改 Host 行爲、不髮網絡請求,純瀏覽器端 Client 插件。
這是什麼¶
dsh-response-annotations 分類爲模型推理相關能力,簡介爲「Codex-style response annotations for DeepSeek Harness」。它在已完成的助手回覆上提供選區 → 批註 → 發送 → 持久化氣泡與定位,發送時在用戶文本前附加與 Codex 對齊的 <response-annotations> 結構化塊(產品文案裏稱 assistant response)。設計參考 Codex 公開行爲,README 聲明未複製其代碼;初版由 DeepSeek Harness(deepseek-flash)輔助生成,2026-10 由 Ava 維護髮布。
核心功能¶
下面按 README 已描述的能力說明,均爲 Web 端已實現項。
選區與添加到對話¶
- 在已完成(非流式中)的助手回覆中選中文字(拖選或雙擊選詞)。
- 出現浮動工具條「添加到對話」;可選填寫評論。
- 保存後,回覆正文選區末尾出現編號氣泡,點擊可高亮原文。
輸入框上方的批註膠囊¶
輸入框上方顯示「N 條批註」膠囊,可展開編輯、刪除或清空。發送時自動在文本前附加 Codex 同款結構化塊;也支持只發批註:空輸入框按宿主發送快捷鍵、點膠囊內紙飛機、或點蓋在宿主主發送按鈕上的批註按鈕(運行中會蓋住 Stop,刪光批註後 Stop 恢復)。
已發送消息的展示¶
已發送消息在顯示層摺疊爲只讀的「N 條回覆批註」卡片;原回覆上保留灰色評論氣泡,點擊可看原文與評論並可定位。
載荷格式¶
發送時的文本前綴形如(\n 與塊結構以 README 爲準):
\n# Response annotations:\n<PREAMBLE>\n<response-annotations>\n[JSON]\n</response-annotations>\n\n## My request:\n<用戶原文>
JSON 每項形如 {"text":"所選文本","annotation":"可選評論","source":{"messageId":"..."}};空評論會丟棄 annotation 鍵;messageId 缺失時回退爲 nodeKey。解析失敗時原樣顯示消息,不隱藏內容。
持久化¶
每個會話獨立存儲於 localStorage['dsh-annotation.v1.<sessionId>'];發送成功後清空該會話 pending 集合,發送失敗則保留。已發送氣泡存檔每會話保留最近 1000 條(超出只隱藏最老的灰色氣泡)。
技術槽位與鉤子(便於排查)¶
- Client 入口:
client.js(由build.mjs從src/*.js生成)。 - 槽位:
shell.overlay、conversation.input.overlay、conversation.user.text.node。 - 註冊 user-text 規則
dsh-response-annotations(order-100)。 - 包裝
conversation.sendSession以附加載荷(發送成功才消費);定位按鈕會滾動到原回覆並臨時高亮選中段落。
安裝與啓用¶
安裝無需 npm;倉庫已提交構建產物 client.js,安裝時不需要本地構建。
方式 A:DSH 客戶端 Plugins 頁¶
- 打開 DSH 客戶端 → 左側邊欄 Plugins。
- Add plugin 右側箭頭 → Install a third-party plugin。
- 填寫 GitHub 地址:
https://github.com/bovvl/dsh-response-annotations。 - Install → Enable now → 刷新頁面。
方式 B:CLI(CLI 管理的 profile)¶
dsh plugin --profile <profile> add github:bovvl/dsh-response-annotations
安裝後刷新頁面(或依賴 HMR)即可。
成功標誌:打開任意會話,選中一段已完成的助手回覆文字,出現「添加到對話」浮動按鈕。
本地開發可將倉庫路徑加入 profile:
dsh plugin --profile <profile> add /abs/path/to/dsh-response-annotations
典型用法¶
- 啓用插件並刷新 Web 界面,進入任意會話。
- 等待助手回覆完成(流式結束),在回覆正文拖選或雙擊選中一段文字。
- 點浮動條「添加到對話」,按需填寫評論並保存;確認選區末尾編號氣泡與輸入框上方膠囊中的條目。
- 在輸入框寫後續指令後按平常方式發送,或空輸入框通過快捷鍵 / 膠囊紙飛機 / 批註發送按鈕只發批註。
- 發送後在用戶消息側查看「N 條回覆批註」卡片;回到原助手回覆點灰色氣泡或膠囊 / 卡片上的「定位」覈對錨點與高亮。
L1/L2 自測可參考 README:
# L1 安裝
dsh plugin --profile <profile> add github:bovvl/dsh-response-annotations
# L2 加載:啓動 Web profile 後檢查插件圖
dsh web --host 127.0.0.1 --port <port> --no-open
curl -s http://127.0.0.1:<port>/plugins/events | grep dsh-response-annotations
適用場景與注意¶
適合誰:需要在 DSH Web 裏對助手回覆做精確引用、帶可選評論一併發給模型,並希望在原回覆上保留可定位標記的開發者或日常對話用戶。
兼容性:README 寫明適配 DSH 0.2.1-rc.3(在此版本完成開發與實機驗證;更早或更新版本未驗證)。插件類型爲 web-only;dshbase L3 Headless 不適用。升級 DSH 時若改動 shell.overlay、conversation.sendSession、ui-chat DOM 錨點(如 data-chat-flow-kind="assistant-step" 等),可能出現氣泡缺失、定位失敗或發送不再附加批註;代碼對部分讀取做了 try/catch 與降級,但不承諾跨版本 100% 兼容。
已知限制(v1):僅助手回覆可選中;文件 / Diff / 終端選區、跨消息選區、流式中回覆無添加按鈕。未實現 Codex 的 More details / Ask in side chat / 內聯 :codex-annotation 指令渲染。批註不能與 / 命令同發(命令消息會跳過批註附加)。載荷塊對模型可見;複製消息文本時仍含原始塊。localStorage 僅本 origin,不同端口或域名不互通。發送鉤子通過包裝 conversation.sendSession 實現,屬非官方能力,升級 DSH 可能需要適配。
安全與許可:插件隨 DSH 客戶端在瀏覽器中運行,數據存於本機 localStorage;安裝第三方插件前建議閱讀倉庫源碼與 MIT 許可證(package.json 版本 1.0.0)。DSH 生態強調「一切皆插件」;社區目錄 skillhub.cn 爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。
結尾¶
dsh-response-annotations 把 Codex 風格的回覆批註落到 DSH Web:選區、評論、結構化發送與氣泡定位,Host 側零侵入。需要細節、Issue 或自行改 src/ 後執行 node build.mjs 時,見 GitHub 倉庫:
- 目錄頁:https://www.skillhub.cn/plugins/bovvl/dsh-response-annotations
- GitHub:https://github.com/bovvl/dsh-response-annotations