前言¶
DeepSeek Harness(DSH)採用插件化架構,允許通過配置注入自定義邏輯。在智能體開發或調試過程中,當 Agent 調用 edit 或 write 等工具修改代碼時,改動內容通常散落在文件系統中,難以在對話流中實時追蹤。dsh-diffstream 插件直接在 DSH web GUI 的對話流中展示這些代碼改動,將文件層面的變更轉化爲可視化的行級 Diff。
插件簡介¶
dsh-diffstream 是一個由 F-Light 維護的 DSH Web 插件。它通過接管工具卡片渲染和回合尾部處理,將代碼變更直接嵌入到對話流中,無需修改 DSH 源碼即可使用。
核心功能¶
插件主要提供以下能力:
-
工具卡片內嵌行級 Diff
每次edit或write工具執行完成後,改動內容會直接渲染在對應的工具卡片內部。使用綠色+標記新增行,紅色−標記刪除行,並附帶行號與上下文。 -
流式動畫展示
Diff 以流式逐行動畫展開,支持 1x、2x 或立即展示的速度控制。動畫視覺效果與 assistant 消息的流式輸出同步,展開到哪一行即代表執行到了什麼位置。 -
回合尾部改動彙總
每個已完成的回合尾部會追加「📋 本回合改動彙總」卡片。卡片包含文件級列表,顯示路徑、增刪狀態標籤及+N −M統計。點擊文件行可展開該文件的完整行級 Diff。同一文件的多次編輯會自動合併統計。 -
Git 優先與回退機制
彙總卡片優先使用真實的 git diff(含上下文 hunk,通過 Host RPC 獲取)。若非 git 項目或 git 命令失敗,會靜默回退爲工具參數 diff,確保功能不中斷。 -
性能與交互優化
- 純客戶端計算:使用純客戶端 LCS 行級對比算法,零依賴、零延遲、不讀磁盤。
- 大文件截斷:文件超過 200 行時自動截斷,支持點擊展開全部。
- 自動滾動:動畫播放期間自動跟隨最新行滾動到底部(手動上滾時暫停跟隨)。
- 去重處理:動畫按工具調用
callId去重。歷史回合(刷新後)直接完整顯示,不會重播動畫。
安裝與啓用¶
插件以獨立 npm 包形式提供,通過 profile 的 cordis.patch.yml 注入。
# 1. 進入 web profile 目錄
cd ~/.dsh/profiles/web
# 2. 安裝插件包
pnpm add @f-light/dsh-diffstream
# 3. 編輯 cordis.patch.yml,追加插件配置
- insert:
- id: diffstream
name: '@f-light/dsh-diffstream'
# 4. 重啓 dsh web 使配置生效
dsh --profile web
使用說明¶
安裝並重啓後,插件會在對話流中自動生效。
- 查看改動:每次工具執行後,工具卡片內會立即出現內嵌的 Diff 視圖。
- 交互操作:點擊回合尾部的彙總卡片中的文件行,可展開該文件的完整 Diff。
- 非 Git 項目:即使當前目錄不是 git 倉庫,只要工具參數提供了
old_string或content,插件依然能通過參數對比展示 Diff。 - 文件產出衝突:對於沒有文件產出的回合,插件展示讓位給官方的
ProducedFiles,兩者互不干擾。
注意事項¶
- 插件以當前 DSH 進程的權限運行,安裝前應檢查源碼與許可證。
- 插件不產生新的文件輸出,僅改變 Web GUI 的展示層邏輯。
- 由於是基於純客戶端計算,性能開銷極低,不會影響對話生成的整體速度。