代码知识图谱(CKG)
wescode 的代码知识图谱(Code Knowledge Graph):符号级代码理解。
定位
解决问题:大仓找路——grep 过了约 40 万行系统性不够。
CKG 在 tree-sitter 语法树之上构建符号级调用图,提供跨文件引用分析、影响面分析和调用链追踪。
索引架构
10-Pass 管线
CKG 使用增量 10-Pass 管线:
- 文件发现
- 语法树解析(tree-sitter)
- 符号提取
- 调用边提取
- 跨文件边解析
- 歧义消解
- 影响面分析
- 孤儿函数检测
- FTS5 索引
- 统计聚合
增量更新
单文件变更时只重跑受影响的 Pass:
文件修改事件 → indexFileViaWorker
→ 重新提取符号/调用边
→ resolveQualifiedEdges(单文件 delta)
→ 更新 FTS5
存储
CKG 索引存在 per-workspace Cell 内:
cells/ws-{hash}/index/code.db
CKG 是可重建数据——有完善的 wipe-rebuild 策略。PRAGMA user_version 不匹配时自动重建。
调用边解析
INV-CKG-EDGE-01
调用边存储与解析对 receiver 限定名不做大小写猜测:
fmt.Errorf、store.Save、svc.CreateUser原样输出- 只有类型选择器(
T.Method)才显式 qualify
三级回退
- 精确匹配:
Type.Method(symbols.parent匹配) - 包路径匹配:
file_path LIKE %/pkg/% - 裸名单候选:符号表中恰好一个同名符号时绑定;多候选保持 unresolved
上下文注入
CKG 分析结果注入到 AI 的上下文中:
- 当前文件的调用链
- 影响面分析结果
- 孤儿函数检测
- 相关符号信息
注入通过 CellSpec.HostEnvironment 的 Context Assembly 机制实现。
UI 集成
HoverProvider
编辑器悬停时显示 CKG 信息:调用者数量、被调用关系。
CodeLensProvider
函数定义上方显示调用统计。
项目概览面板
三区域布局 + D3 交互式调用图。
索引进度
状态栏 indexProgressBar:索引中显示进度,完成后自动消失。
跨语言支持
通过 21-polymorphic-dispatch.md 定义的多态分派:
IMPLEMENTS边:接口实现关系OVERRIDES边:方法覆盖关系- 跨语言调用追踪
相关文档
- 五层能力栈 →
five-layer-stack.md - 上下文组装 →
context-assembly.md - 编辑引擎 →
edit-engine.md