SuperAPI AI 工具集

gitnexus-pdg-query

智能体与模型

查看项目

更新于 10-16 02:34

技能介绍

用途:该技能提供 pdg_query MCP 工具及程序依赖图(PDG)控制/数据依赖边的专家知识,适用于查询或扩展 GitNexus 的 PDG 表面,或在解释 pdg_query 结果时参考。典型问题包括“该语句在什么条件下执行”(守卫谓词)、“变量在函数内流向何处”(def→use)、守卫子句发现,以及调试空或异常结果。

主要能力:pdg_query 有两种模式。mode: 'controls' 读取 CDG,对锚定函数返回控制谓词块→依赖块的边,分支方向在 label 中('T' 为真/进入分支,'F' 为假/落空),指向提前返回或 throw 块的边标记 guard: true。mode: 'flows' 读取 REACHING_DEF 的 def→use 边,可用 variable 过滤单个绑定。target 必填,为文件路径或符号/函数名。

底层结构:PDG 分层构建,均需 --pdg 显式开启,默认 analyze 不记录任何层。L1 CFG(每函数基本块与控制流边)、L2 REACHING_DEF(GEN/KILL def→use 数据依赖)、L5 CDG(Ferrante 控制依赖,基于后支配)。三者都是单一 CodeRelation 表中 BasicBlock→BasicBlock 的边,按 type 属性区分,不存在 Function→BasicBlock 边。

使用方式与限制:必须锚定并加 LIMIT 限制,因为 LadybugDB 无关系属性索引,未锚定的路径扫描无界。BasicBlock 与符号的连接是重建的:按 id 前缀加符号跨度内的 startLine 匹配,且 BasicBlock 的 startLine 为 1 基而符号节点为 0 基,需将上下界各 +1。若仓库未用 --pdg 索引,工具返回空结果并附 note 提示,而非报错。CDG 标签在 M5/M6 中为二元,所有 switch-case 分支均为 'T'。该工具仅限过程内,跨函数流动属于 taint 的范畴。实现上 _pdgQueryImpl 是 _explainImpl 的前半部分,应复用共享辅助函数而非重新实现。