dsh-codegraph:把工作区编成关系图,回答调用、影响与可达性

前言

在 DeepSeek Harness(DSH)里让 agent 改代码时,常见问题是:某个函数被谁调用、改一处会波及哪些符号、两条路径之间能否在代码里「走到」。全文搜索能找字符串,但很难稳定表达定义、调用、导入之间的结构关系;跨仓库的全局索引也不等于「当前这次对话的工作区」。

下面介绍社区插件 @meteor-system/dsh-codegraph(仓库 Meteor-system/dsh-codegraph)。它把当前工作区源码索引成关系图,通过 agent 工具 codegraph_explore 回答三类问题:谁在调用 X、改 X 会影响谁、X 能不能到达 Y。插件分类为联网工具,由 Meteor-system 维护;在 GitHub 上当前星标为 0,许可证 MIT,package 版本 0.12.0。

这是什么

CodeGraph 是装在 DSH profile 上的插件,默认关闭,与 agent 预设无关。启用后,该 profile 下的 agent 可见工具 codegraph_explore。

查询范围始终是本次会话绑定的工作区根目录,不会混入 GUI 进程家目录或其它仓库。换仓库或新开对话,索引与结果都针对那个仓库。

核心功能

关系图与 lazy 索引

  1. 第一次调用 codegraph_explore 时才扫描工作区,抽取定义、调用、导入、继承、类型引用等,写入图。
  2. 图缓存在 <项目>/.dsh/codegraph/;后续调用先做增量刷新再查询。
  3. 首次构建或刷新若超过配置的超时(默认 300s),工具返回 indexing,不会无限挂起。

扫描尊重 .gitignore 及默认排除(如 node_modules、dist、.dsh、.venv 等),并可通过项目配置追加 include / exclude glob。

三种查询模式

mode 用途 典型说法
callers 谁调用 target 查一下 graphFor 都有谁在调用
impact 改 target 影响谁(默认深度 5,上限 20) 改 activate 会波及哪些符号
reachability target 能否到达 path_to apply 能不能到达 graphFor

可选参数包括 scope(包名或路径前缀)、limit(默认 50,硬顶 200)、confidence、relation、include_snippets。

置信度与歧义

每条边带置信度:exact(解析器证明)、inferred(跨文件名字匹配)、heuristic(启发式)。工具不会把猜测表述为定论。符号歧义时返回候选列表,不会静默选一个。

/codegraph 命令

启用插件后可使用 /codegraph,一次运行会:

  1. Index warmup — 调用 codegraph_explore,直到 metadata.index.status 不是 indexing。
  2. Diff impact pass — 工作区有未提交改动时,对 diff 里最多 10 个顶层导出符号跑 callers / impact;干净工作树跳过。

未启用时该命令不存在;启用本身不会立刻全量扫描。

安装与启用

每个 DSH profile 安装一次。官方命令如下:

dsh plugin --profile web add @meteor-system/dsh-codegraph

本地开发包示例(README 原文):

dsh plugin --profile web add file:./meteor-system-dsh-codegraph-0.12.0.tgz

修改 profile 的 patch 后需重启该 profile;正在运行的 GUI 不会热替换整棵插件树。

默认关闭。任选一种启用方式。

当前项目(写在仓库旁,不进 profile):

// <project>/.dsh/codegraph/config.json
{ "enabled": true }

或整个 profile 常开($DSH_HOME/profiles/<name>/cordis.patch.yml):

- id: dsh-codegraph
  config:
    enabled: true

改启用状态后重启会话;进行中的请求仍用旧工具集。

项目级配置(节选):

Key Default 含义
max_file_bytes 1_000_000 超过则跳过文件
max_files 50_000 扫描文件数上限
build_timeout_ms 300_000 构建/刷新等待;超时返回 indexing
include — 强制包含的 glob
exclude — 强制排除的 glob

索引目录 <project>/.dsh/codegraph/ 不宜提交进 git。

典型用法

在已打开目标仓库的对话里,用自然语言即可,无需手写 JSON。agent 会调用 codegraph_explore,返回路径均属于当前工作区。

示例(README):

查一下 graphFor 都有谁在调用

其它等价说法:

  • 「改 activate 会波及哪些符号」→ impact
  • 「apply 能不能到达 graphFor」→ reachability

结果中可能带 diagnostic 码(如 partial、indexing、truncated、ambiguous_target 等);设计上是宁可部分结果加诊断,也不编造关系。

适用场景与注意

适合: 需要在当前仓库内做调用链、改动影响面、符号间可达性分析,且希望 agent 通过单一工具查询而非反复 grep 的场景。

能力边界(README 明确说明):

  • 语法级抽取加 import/export 与限定名匹配,没有类型检查器与控制流图。
  • Razor 尚无已发布 grammar WASM,.razor 可能为 unsupported_language。
  • C/C++ 宏不展开(启发式受限)。
  • 查询只读;索引写入是内部副作用。
  • 工具调用上限 300s,超时返回 indexing 需重试。

安全与权限: 插件随 DSH profile 与当前进程权限运行,会读取并扫描工作区源码、在工作区下写入 .dsh/codegraph/。安装前请查看 源码与 LICENSE,确认符合你的环境与合规要求。DSH 社区插件目录(如 SkillHub 条目)为独立生态站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-codegraph 把「当前工作区」编成可查询的关系图,用 codegraph_explore 统一回答 callers、impact、reachability,并标注边置信度与诊断码。若你的 agent 工作流常问「谁调用了谁、改这里会影响哪里」,可在 profile 安装后按项目或 profile 启用,再在对应对话里用自然语言提问或使用 /codegraph 预热索引。

  • 目录页:https://www.skillhub.cn/plugins/Meteor-system/dsh-codegraph
  • GitHub:https://github.com/Meteor-system/dsh-codegraph
羽毛球分组比赛记分
小程序二维码

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

小夜