前言¶
DeepSeek Harness (DSH) 是面向智能體開發的工具鏈。在處理長輪次對話時,模型會生成大量的工具調用和推理過程,這容易導致界面內容過多、難以瀏覽。本插件借鑑 Grok Build 的設計思路,將每輪對話中的 think(推理)和工具調用包裹在一個有限高度的可滾動窗口中,以階段性文字回覆爲界分段,避免頁面內容撐爆,同時保持所有中間過程的可見性。
核心功能¶
插件將每輪對話的中間過程(think 與工具調用)聚合展示,文字回覆保持原生顯示。
- 有限高度窗口:think 和工具調用合併爲一個 slide,默認高度爲 10 行,內部支持滾動。
- 分段邏輯:以階段性文字回覆爲界分段。兩個文字回覆之間的一段 think + bash 作爲一個 slide,避免兩個 input prompt 之間擠成一整個 slide。
- 內容同步:原生 Think 行從消息流中隱藏,與 slide 內展示共用同一份內容。
- 原生回覆保持:文字回覆完全原生展示,保持全文可見,不套 slide 窗口,不加“展開全部/收起”按鈕。
- 配置化控制:支持在 Settings 中調整窗口高度和默認收起狀態。
安裝¶
通過官方命令安裝插件:
dsh plugin --profile web add github:heiheiha798/dsh-plugin-response-window
安裝後重啓 dsh web 或等待 profile HMR 生效。卸載命令爲:
dsh plugin --profile web remove dsh-plugin-response-window
配置¶
插件在 cordis.patch.yml 中註冊了默認配置,可通過配置文件或 Web UI 調整:
配置項說明¶
| 鍵 | 默認值 | 說明 |
|---|---|---|
lines |
10 |
窗口高度(行)。0 表示不限高(即關閉窗口)。 |
collapsed |
false |
每輪 slide 是否默認收起成一行 bar。 |
showReadOnly |
true |
是否在 slide 裏列出 read/grep/web_search 等只讀調用。 |
minCollapseRows |
3 |
僅在 collapsed: true 時生效,少於該數量的輪次不收起。 |
設置頁調整¶
在 Web UI 的 Settings → General 中,插件註冊了一項 「響應窗口大小(行數)」:
* 支持 − / 數值輸入 / + 調整 lines(範圍 0–200)。
* 改動後即時生效,並持久化到 dsh-plugin-response-window namespace。
技術實現¶
插件在實現上注重對宿主 React 結構的零侵入和安全性。
- 渲染方式:使用
conversation.chat.node的 keyed 替換(key: 'tool-call')實現,而非舊的 priority shadow。這符合 dsh 0.1.5-rc keyed Chat Node 契約。 - 數據來源:分組邏輯完全基於會話模型,通過
useChat選擇器消費與右側用戶消息索引(turn rail)一致的 turn/location 數據,不依賴 DOM 測量。 - DOM 標記:通過模型推導的覆蓋集合驅動 DOM 標記(隱藏的原生 Think 行、null 渲染的 sibling 工具行),使用 MutationObserver 將集合應用到行上的 data 屬性,消除佈局競態導致的整類 bug。
- React 結構保護:絕不移走 React 擁有的
[data-chat-anchor-key]行節點。若移走該節點,React 在會話切換或編輯時會拋出NotFoundError。插件僅使用 keyed 替換和類/CSS 方式。 - 依賴更新:
createSnapshotStore依賴的dsh-client-runtime包已於 2026-08-22 從 dsh 移除,插件改用內置的最小可觀察值存儲。
開發與測試¶
插件採用純 JavaScript 編寫,無構建步驟。
- 類型檢查:
npm run check
- E2E 測試:需要已啓動的
dsh web與 python playwright:
dsh --profile web --no-open --port 3639 &
python3 test/e2e.py --url http://127.0.0.1:3639 --session "架構重構不順原因分析"
結尾¶
該插件不隱藏任何內容,think 與工具調用按真實輸出順序交錯排列在 slide 中,適合需要完整追蹤中間推理和工具執行過程的場景。所有內容均遵循 MIT 許可證。