dsh-file-changes:在每輪迴答末尾展示文件變更面板的 DSH Web 插件

前言

用 DeepSeek Harness(DSH)做智能體開發時,一個常見問題是:模型在一輪迴答裏創建或修改了哪些文件,往往要從長轉錄裏翻找。內置的 Produced 行只給出一個籠統的產物列表,想知道某個文件具體改了什麼,還得自己去編輯器裏看。

dsh-file-changes 是 mixin-ai 維護的一個 DSH Web 插件,解決的問題很具體:在每輪迴答結束的消息下方,列出本輪創建或修改的文件,支持直接查看 diff、用系統默認應用打開,或在 OS 文件管理器中定位文件。本文按功能、安裝、原理、注意事項的順序介紹它。

這是什麼

dsh-file-changes 是一個 DeepSeek Harness Web 插件,採用 MIT 許可證,當前版本爲 0.1.0,代碼託管在 GitHub(mixin-ai/dsh-file-changes)。

它是對內置 Produced 行的補充:在 Produced 之外,增加了 created/modified 徽章、逐文件 diff 和逐文件文件系統定位。當一輪對話創建了或修改了文件,面板會在結束消息下方把每個文件列出來,並附帶三個操作:

  • Open:點擊文件名,用 OS 默認應用打開文件;
  • View diff:彈出一個模態框,使用 harness 的 DiffBlock primitive 渲染本輪實際應用的變更,新文件則顯示整文件內容;
  • Reveal:在 OS 文件管理器中定位並選中文件(macOS 用 open -R,Windows 用 explorer /select,,桌面 Linux 打開所在目錄)。這個操作僅在 loopback 訪問且原生 opener 可用時顯示。

安裝與啓用

從 GitHub 安裝:

dsh plugin --profile web add git+https://github.com/mixin-ai/dsh-file-changes

也可以從本地 checkout 安裝,便於修改和調試:

dsh plugin --profile web add link:/path/to/dsh-file-changes

安裝後重啓 dsh web,再刷新瀏覽器頁面,面板即可生效。

插件要求 Node 版本 ^22.19.0 || >=24.0.0。如果想驗證插件邏輯是否正常,可以在倉庫根目錄運行測試:

node smoke.test.mjs && node client.test.mjs

這兩個測試分別覆蓋 host 半部與客戶端邏輯。

工作原理

插件由 host 和 client 兩個半部組成,通過 cordis.patch.yml 的 bundle patch 掛載:

  • lib/index.js:host 半部,包含嵌套 dispatch tap 和兩個 HTTP 路由;
  • lib/client.js:瀏覽器 bundle,包含 turn 累加器和麪板/diff/reveal 的 UI。

按數據來源分兩種模式:

1、Native 模式。客戶端半部註冊一個會話定義(做法上類似於 @deepseek-ai/dsh-client-ui-deliverables),從展示視圖(card: 'diff' 的 hunk,或通用的 kind: 'edit' location)累積本輪成功的變更類工具調用,以 turn-scoped 數據發佈在 fileChanges 鍵下,再經 chat 視圖的 conversation.chat.turnTail slot chain 渲染出來。

2、Code Mode(run_code)。嵌套 dispatch 在線上傳輸時不攜帶展示視圖,客戶端拿不到信息,所以由 host 半部監聽 tools/executetools/result 中帶 parent 的執行(即 Code Mode 子調用),從 write / edit / str_replace_editor 的參數重建變更記錄,通過 /api/file-changes/changes 提供給前端。

面板會把兩個來源合併,並按文件路徑去重,所以不管文件是通過哪種方式改的,都能在同一處看到。

Reveal 功能走 POST /api/file-changes/reveal 端點:服務端先校驗 JSON payload、loopback origin 和絕對存在路徑,全部通過後才交給平臺 opener 執行。

適用場景與注意

適合的場景:

  • 在瀏覽器裏使用 DSH Web 界面做開發,希望每輪結束後立刻確認哪些文件被改動;
  • 需要逐文件查看 diff,而不是翻轉錄裏的代碼塊;
  • 在 loopback 環境下希望一鍵跳到文件管理器定位文件。

使用時注意以下幾點:

  • 終端命令(如 bash)間接創建的文件不會被檢測到,這與官方 produced-files 行的詞彙表限制相同;
  • host 側 Code Mode 的變更記錄存在內存中(2 小時、每會話 2000 條的環形緩衝),服務器重啓後即清空;
  • reveal 端點只信任 loopback 同源的 JSON 請求,這是有意爲之的安全設計。

另外要提醒:插件以當前 dsh 進程的權限運行,安裝前建議先檢查源碼與許可證。該項目是 MIT 許可,代碼量不大,主要邏輯集中在 lib/index.jslib/client.js 兩個文件裏,通讀一遍的代價不高。

小結

dsh-file-changes 做的事情不復雜,但切中了 DSH Web 使用中的一個日常痛點:讓每輪迴答的文件變更可見、可查、可跳轉。它兼容 Native 與 Code Mode 兩種來源,並對 reveal 路徑做了邊界校驗,是一個定位清晰的小型插件。

DSH 的理念是「一切皆插件」,這類由社區維護的插件正是這個生態的組成部分。項目地址與目錄頁如下:

  • GitHub:https://github.com/mixin-ai/dsh-file-changes
  • 目錄頁:https://www.skillhub.cn/plugins/mixin-ai/dsh-file-changes

需要說明的是,skillhub.cn 是獨立的社區目錄站點,與 DeepSeek / 幻方無官方從屬關係,使用前請以倉庫內的 README 爲準。

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

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

小夜