前言¶
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。