前言¶
DeepSeek Harness(DSH)的生態理念是「一切皆插件」。在使用 Graphify 構建知識圖譜時,如果通過外部編輯器或命令行修改了代碼,DSH 的 workspace/changes 信號通常無法感知這些變化。graphify watch 原生支持監聽文件變化並自動重建圖譜,但需要一個長期運行的進程來維護它。dsh-plugin-graphify-watch 專爲解決這一問題設計,它接管了 graphify watch 的進程生命週期管理,確保代碼變更能自動觸發圖譜重建。
核心功能¶
該插件專注於進程管理,而非文件檢測。
- 進程託管:爲每個配置的項目根目錄啓動並維護一個
graphify watch進程。 - 自動恢復:進程崩潰後,使用指數退避策略(最大延遲 60 秒)自動重啓。
- 狀態過濾:
- 如果項目根目錄下不存在
graphify-out/graph.json,插件會跳過啓動並提示先運行/graphify。 - 如果已被當前進程監視,則跳過;如果已被其他進程監視,也會跳過以避免衝突。
- 如果項目根目錄下不存在
- 變更處理:
- 代碼變更:觸發
graph.json和GRAPH_REPORT.md的重建。 - 文檔/圖片變更:不直接重建圖譜,而是寫入
graphify-out/needs_update標記,提示手動運行/graphify --update。
- 代碼變更:觸發
- 資源清理:插件卸載時會終止整個進程樹,防止殘留進程佔用資源。
安裝與啓用¶
由於該插件依賴本地絕對路徑且包含依賴鏈接,需要通過 DSH 應用程序進行安裝,而非 dsh CLI。
- 打開 DSH 應用程序的側邊欄,進入 Plugins 頁面。
- 點擊 Add plugin,輸入插件的本地絕對路徑:
C:\documents\dsh\dsh-plugin-graphify-watch。 - 在插件列表中找到
dsh-plugin-graphify-watch,啓用對應的 bundle。 - 重啓 DSH。添加本地文件依賴需要重啓進程以清除 Node 的路徑緩存。
典型用法¶
安裝後,你通常需要在配置文件中指定要監視的項目路徑。
# 在 ~/.dsh/profiles/desktop/cordis.patch.yml 中覆蓋配置
- id: graphify-watch
name: dsh-plugin-graphify-watch
config:
enabled: true
roots:
- C:\Users\Administrator\Documents\my-project
exePath: ""
maxRestarts: 3
restartBackoffMs: 2000
logRebuilds: true
驗證進程是否正常運行:
# 在 PowerShell 中檢查 graphify.exe 進程
Get-CimInstance Win32_Process -Filter "Name='graphify.exe'" | Select-Object ProcessId,CommandLine
觸發重建:
# 修改源碼文件以觸發代碼重建
Add-Content <root>\src\thing.py "`ndef probe():`n return 1`n"
# 此時 graph.json 的時間戳應更新
(Get-Item <root>\graphify-out\graph.json).LastWriteTime
適用場景與注意¶
- 適用場景:當你需要將 Graphify 集成到非 DSH 環境的工作流中,或希望代碼修改能自動反映在知識圖譜上時使用。
- 不負責檢測:該插件只管理進程的啓動、重啓和銷燬,不負責文件系統變化檢測。實際的檢測和去抖動邏輯(默認 3 秒)由
graphify watch內部處理。 - 文檔更新策略:插件故意不自動處理文檔層的更新(如 PDF、圖片),因爲這通常需要消耗 LLM Token。它僅標記
needs_update,由你決定何時運行/graphify --update。 - 無依賴:插件不依賴
@deepseek-ai/schemastery,因此不會因爲 DSH 的版本兼容性檢查而被攔截。 - 進程終止:在 Windows 上,
graphify.exe是啓動器,實際 Python 進程是子進程。插件使用taskkill /T /F終止整個樹,確保徹底清理。
總結¶
dsh-plugin-graphify-watch 通過接管 graphify watch 的進程生命週期,解決了外部編輯器修改代碼後圖譜不同步的問題。它以零依賴、輕量級的方式,讓代碼變更能夠自動反映在知識圖譜中。你可以通過目錄鏈接獲取源碼:joslynSmall/dsh-plugin-graphify-watch。