前言¶
用 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/execute 與 tools/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.js 和 lib/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 爲準。