dsh-plugin-codegraph:DeepSeek Harness 的结构化代码智能

前言

DeepSeek Harness (DSH) 插件生态旨在扩展智能体的代码操作能力。在编写代码时,智能体需要回答三个结构化问题:符号在哪里声明、谁调用了它、修改它会产生什么影响。传统的文本搜索(如 grep)无法回答“谁调用它”这类关系问题,而 LSP 虽然精确,但依赖于光标位置且需要为每种语言运行单独的服务。dsh-plugin-codegraph 解决了这个问题,它通过在本地构建代码符号图,为智能体提供了 codegraph 和 codegraph_index 两个工具,使其能够基于图结构而非文本搜索来回答上述问题。

核心能力

该插件为智能体提供两个主要工具,它们在功能和设计上相互独立。

codegraph:只读查询工具

codegraph 提供 10 个只读操作,用于从预构建的索引中获取信息:

  • search:查找符号在哪里声明。
  • node:获取某个符号及其直接调用者和被调用者。
  • callers:列出调用当前符号的所有位置。
  • callees:列出当前符号调用的所有目标。
  • impact:分析修改当前符号可能产生的影响范围。
  • trace:追踪两个符号之间的路径。
  • files:列出被索引的文件,支持目录或通配符。
  • status:检查索引的大小和新鲜度。
  • explore:探索与查询相关的多个声明及其源码。
  • context:获取与特定任务相关的所有上下文信息。

codegraph_index:索引构建工具

该工具负责构建或刷新代码图索引。索引过程与查询过程分离,因为构建大型工作区的索引需要数分钟,而查询仅需毫秒级。将两者合并会导致超时预算配置困难:要么太紧导致索引无法完成,要么太松导致查询无法感知卡顿。

安装与启用

安装过程通过一条命令完成,它会自动获取包并将插件配置到指定 Profile 中:

dsh plugin --profile <name> add dsh-plugin-codegraph

安装后,智能体即可直接使用上述两个工具。如果索引尚未构建,status 操作会明确告知索引不存在,并指出需要运行 codegraph_index。

典型用法

  1. 查找符号声明:
    codegraph search query
  1. 查看符号的调用关系:
    codegraph node symbol
  1. 检查修改影响:
    codegraph impact symbol
  1. 追踪路径:
    codegraph trace from to
  1. 列出索引文件:
    codegraph files
  1. 构建或刷新索引:
    codegraph_index

技术细节

  • 语言支持:内置索引器支持 TypeScript、TSX、JavaScript、JSX、Python、Go、Java、C、C++、C#、PHP、Rust、Ruby、Zig、Kotlin、Swift、Dart 和 Scala。语法解析器按语言惰性加载,仅在使用匹配文件时加载对应的解析器。
  • 存储格式:插件与 codegraph CLI 共享磁盘格式(schema version 4),存储路径为 <projectRoot>/.codegraph/codegraph.db。这意味着既可以使用插件构建索引,也可以使用 CLI 构建,两者可互操作。
  • 调用解析逻辑:插件不会对未解决的调用进行猜测。解析顺序遵循固定规则:首先匹配导入的文件,其次匹配全局唯一的名称。如果都不匹配,该调用会被记录为 unresolved,而不是生成错误的边。

注意事项

  • 只读与构建分离:codegraph 工具始终是只读的,codegraph_index 是构建索引的专用工具。任何查询都不会隐式触发索引构建,这是为了防止长时间运行的索引任务与查询混淆。
  • 未解决的记录:未解析的调用被明确标记为 unresolved。智能体不应依赖这些标记来假设调用的存在,而应将其视为需要进一步确认的信息。

结语

dsh-plugin-codegraph 通过进程内索引和图查询,为 DeepSeek Harness 提供了与 LSP 不同维度的代码理解能力。它不猜测调用关系,而是基于明确的解析规则提供结构化数据。如需了解更多或贡献代码,请访问项目仓库。

羽毛球分组比赛记分
小程序二维码

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

小夜