前言¶
在 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 索引¶
- 第一次调用
codegraph_explore时才扫描工作区,抽取定义、调用、导入、继承、类型引用等,写入图。 - 图缓存在
<项目>/.dsh/codegraph/;后续调用先做增量刷新再查询。 - 首次构建或刷新若超过配置的超时(默认 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,一次运行会:
- Index warmup — 调用
codegraph_explore,直到metadata.index.status不是indexing。 - 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