tae2089/code-context-graph

GitHub: tae2089/code-context-graph

基于 Tree-sitter 的本地代码知识图谱工具,通过无向量检索和 MCP 协议为 AI 编程助手提供精准的代码上下文基础设施。

Stars: 15 | Forks: 0

# code-context-graph 本地代码分析工具,通过 Tree-sitter 将代码库解析为知识图谱。支持 12 种语言、33 个 MCP 工具以及自定义注解搜索。 CCG 主要为 GPT、Claude、Codex 和其他基于 LLM 的编程助手构建。它充当本地或自托管的上下文基础设施:助手可以通过意图搜索代码、检查调用图、追踪影响、检索文档,并将响应限制在一定范围内,而不是将整个代码库读取到上下文中。 这是一个由开发者操作的工具,而不是通用的 SaaS 管理产品。预期的用户是编程助手和能够运行 CLI 命令、配置 MCP、阅读日志并使用生成的图谱/文档来指导代码修改的开发者。 受 [code-review-graph](https://github.com/tirth8205/code-review-graph) 启发 —— 这是一个基于 Python 的代码分析工具。本项目使用 Go 重新实现并扩展了该概念,提供了多数据库支持、自定义注解系统以及用于 AI 驱动代码理解的 MCP 集成。 ## 特性 - **12 种语言**:Go、Python、TypeScript、Java、Ruby、JavaScript、C、C++、Rust、Kotlin、PHP、Lua/Luau - **33 个 MCP 工具**:解析、搜索、影响分析、流程追踪、死代码检测、后处理操作、namespace 文件管理等 - **证据驱动的代码探索**:基于数据库的检索会在助手深入探索具体的图节点之前,返回带有匹配字段、证据节点和可选文档的小型文件级候选项 - **浏览器 Wiki UI**:`ccg-server` 可以提供生成的文档、树状搜索、基于数据库的检索、Context Tray 复制以及 Obsidian 风格的图查看器 - **自定义注解**:`@intent`、`@domainRule`、`@sideEffect`、`@mutates`、`@index` —— 根据业务上下文搜索代码([详情](guide/annotations.md)) - **Webhook 同步**:GitHub / Gitea 推送事件 → 自动 clone + 构建,支持按仓库的分支过滤和 `.ccg.yaml` `include_paths` 自动加载([详情](guide/webhook.md)) - **Eval**:基于 Golden 语料库的解析器准确率 (P/R/F1) 和搜索质量 (P@K, MRR, nDCG) 评估([详情](guide/eval.md)) - **多数据库**:SQLite(本地)、PostgreSQL - **全文搜索**:FTS5 (SQLite)、tsvector+GIN (PostgreSQL) ## 安装说明 ### npm / bun(推荐) ``` npm install -g code-context-graph # or bun install -g code-context-graph ``` npm 包会同时安装 `ccg` 和 `ccg-server`。 ### go install ``` go install github.com/tae2089/code-context-graph/cmd/ccg@latest go install github.com/tae2089/code-context-graph/cmd/ccg-server@latest ``` ### 从源码构建 ``` CGO_ENABLED=1 go build -tags "fts5" -o ccg ./cmd/ccg/ CGO_ENABLED=1 go build -tags "fts5" -o ccg-server ./cmd/ccg-server/ # Or use Makefile (injects version from git tag automatically) make build # Local stripped release-style build make release ``` ## 快速开始 ``` # Parse your project. For the default local SQLite database (ccg.db), runtime # commands create and migrate the database automatically on first use only when # the schema is missing. ccg build . # Build complete: 70 files, 749 nodes, 7387 edges # Search (includes annotations) ccg search "authentication" # Search by business context ccg search "payment" # finds functions with @intent/@domainRule about payments # Build docs and the default vectorless RAG index for agent-oriented exploration ccg docs --out docs # Serve the browser Wiki UI from built assets; builds the graph for DB-backed APIs make wiki-run # Graph statistics ccg status # Version info ccg version # Namespace isolation (MSA) ccg build ./backend --namespace backend ccg search --namespace backend "auth" # Evaluate parser accuracy (12 languages) ccg eval --suite parser # Update golden corpus ccg eval --suite parser --update ``` `ccg docs` 会生成 Markdown 并写入 `.ccg/wiki-index.json` 作为浏览器 Wiki 的兼容性快照。Wiki 优先使用图数据库进行树状 导航和搜索,仅在基于数据库的导航不可用时才使用 `wiki-index.json`。 默认情况下,`ccg docs` 还会刷新社区结构并写入 `.ccg/doc-index.json` 作为兼容性快照,用于 手动 RAG 索引工作流;运行时的 `search_docs` 使用基于数据库的图和 注解证据。当你只需要 Markdown 和 Wiki 快照时,请使用 `--rag=false`; 或者当你想从现有社区数据行重建 RAG 索引而不重新计算社区时,请使用 `--rag-refresh=false`。 对于 LLM 助手,对于广泛的问题(例如“webhook 同步是如何工作的?”或“运营风险在哪里?”),请使用基于数据库的 `search_docs` 作为第一站。它不是 Top1 搜索引擎;它是一个 证据驱动的缩小范围层,应返回带有 `matched_fields`、`matched_terms` 和证据节点的少量相关 文件。使用 `get_doc_content` 阅读缩小范围后的文档,然后只有在路径缩小后,才使用 `get_node`、`query_graph`、 `trace_flow` 和影响工具。将 `ccg search` 用作专注的 注解/关键字候选项搜索,而不是用于广泛代码理解的第一工具。 如果你使用 PostgreSQL、自定义 SQLite DSN、现有的 schema 或受控的 升级工作流,请在运行时命令之前显式运行 `ccg migrate`。当针对由旧版本创建的现有默认 `ccg.db` 升级 CCG 时,这也 适用。有关完整的 迁移契约,请参阅 [CLI 参考](guide/cli-reference.md)。 ## 浏览器 Wiki 当 `--wiki-dir` 指向已构建的 `web/wiki/dist` 目录时,`ccg-server` 可以在 `/wiki` 路径下提供基于 React 的 Wiki UI。Docker 镜像在 `/usr/share/ccg/wiki` 中包含了构建好的 UI;独立二进制文件将资产分开存放,以保持二进制文件体积最小。 Wiki 适用于检查生成的代码库的开发者和助手: - 在文件夹、包、文件和带注解的符号上进行树状导航 - 关键字搜索和带有匹配证据及小型文件级结果集的基于数据库的 `search_docs` - 来自 CCG 注解的丰富符号详情卡片,即使该符号没有生成 Markdown 文件 - Context Tray,用于将文件和无文档符号收集到一个可以复制到另一个 LLM 工具的 Markdown 包中 - 由 `/wiki/api/graph` 支持的 Graph 标签页,显示 namespace 节点和边,并提供针对结构、调用、导入、类型和符号的过滤器 本地开发快捷方式: ``` make wiki-run ``` 当你在启动服务器之前还需要生成的 Markdown、 `wiki-index.json` 快照和兼容的 `doc-index.json` 时,请使用 `make wiki-run-indexed`。 对于自托管部署,请运行 `ccg-server --wiki-dir `,并使用与 `/mcp` 相同的 bearer token 策略保护 `/wiki/api/*`。有关部署详情,请参阅 [Docker](guide/docker.md#wiki-ui) 和 [运行时布局](guide/runtime-layout.md)。 ## 演示 CCG 解析自身代码库的实际输出。 ### 1. 解析代码库 ``` $ ccg build . Build complete: 127 files, 1220 nodes, 12222 edges ``` ### 2. 图谱统计 ``` $ ccg status Nodes: 1220 Edges: 12222 Files: 127 Node kinds: class: 124 file: 127 function: 405 test: 543 type: 21 Edge kinds: calls: 9245 contains: 1097 imports_from: 1128 inherits: 1 tested_by: 751 Postprocess: Status: ok Fail-closed: 0 Recent failures: 0 ``` ### 3. 代码搜索 ``` $ ccg search "impact analysis" internal/analysis/impact/impact_test.go file internal/analysis/impact/impact_test.go:1 internal/analysis/impact/impact.go file internal/analysis/impact/impact.go:1 mcp.ImpactAnalyzer type internal/mcp/server.go:36 impact.EdgeReader type internal/analysis/impact/impact.go:12 impact.Analyzer.ImpactRadius function internal/analysis/impact/impact.go:42 internal/mcp/handler_analysis.go file internal/mcp/handler_analysis.go:1 $ ccg search "dead code" deadcode.Options class internal/analysis/deadcode/service.go:14 deadcode.Service.Find function internal/analysis/deadcode/service.go:38 mcp.handlers.findDeadCode function internal/mcp/handler_analysis.go:273 ``` ### 4. 通过 MCP 进行助手集成 配置 `.mcp.json` 后,你可以直接询问支持 MCP 的编程助手: 助手会调用 CCG MCP 工具,并直接从图谱中回答: ``` trace_flow(qualified_name: "webhook.WebhookHandler.ServeHTTP") → WebhookHandler.ServeHTTP → SyncQueue.Enqueue → safeHandle (retry loop: max 3 attempts, exponential backoff 1s→30s) → clone (git clone, 15min timeout) → build (ccg build, same context) ``` ``` search(query: "authentication") → internal/webhook/handler.go (HMAC signature validation) → cmd/ccg-server/main.go (--webhook-secret flag) ``` ## MCP 服务器 将 `.mcp.json` 添加到你的项目中: ``` { "mcpServers": { "ccg": { "command": "ccg", "args": ["serve", "--db-driver", "sqlite", "--db-dsn", "ccg.db"] } } } ``` 对于远程 HTTP 模式: 使用 `ccg-server` 运行自托管服务器,并连接到 `/mcp`。当配置了 `--wiki-dir` 时,同一 服务器还可以暴露 `/wiki`: ``` { "mcpServers": { "ccg": { "type": "streamable-http", "url": "http://your-server:8080/mcp" } } } ``` 支持 MCP 的客户端(例如 Codex 或 Claude Code)可以连接并访问 33 个 MCP 工具。完整列表请参阅 [MCP 工具参考](guide/mcp-tools.md)。 ## 架构 ``` Source Code → Tree-sitter Parser → Nodes + Edges + Annotations ↓ SQLite / PostgreSQL (GORM) ↓ FTS Search ↓ ccg serve ccg-server stdio MCP Streamable HTTP + Wiki UI ↓ ↓ ↓ ↑ Coding Agents Remote Clients Browser GitHub / Gitea Webhook Wiki push → clone → build → DB ``` 有关组件分解和 DB schema,请参阅 [架构详情](guide/architecture.md)。 ## 文档 | 指南 | 描述 | |-------|-------------| | [韩语指南](guide/ko/README.md) | 한국어 문서 인덱스 (Korean Documentation Index) | | [CLI 参考](guide/cli-reference.md) | 所有命令、标志和配置文件 (`.ccg.yaml`) | | [Eval](guide/eval.md) | 解析器/搜索质量评估、Golden 语料库和指标 | | [Lint](guide/lint.md) | 详细的 `ccg lint` 类别参考、解释指南和 CI 用法 | | [MCP 工具](guide/mcp-tools.md) | 33 个 MCP 工具、助手技能、AI 驱动注解 | | [注解](guide/annotations.md) | 注解系统 — 标签、示例、搜索 | | [Webhook](guide/webhook.md) | Webhook 同步、分支过滤、HMAC、优雅关闭 | | [Docker](guide/docker.md) | Docker 构建、MCP 服务器、Wiki UI、PostgreSQL 部署 | | [运维](guide/operations.md) | 部署配置、数据库选择、就绪状态、Webhook 运维 | | [后处理失败策略](guide/postprocess-failure-policy.md) | 构建和后处理工具的状态规则、失败原因以及自动降级/fail_closed 策略 | | [运行时布局](guide/runtime-layout.md) | `ccg`、`ccg-server`、Wiki 服务和共享的 `ccg-core` 所有权边界 | | [开发](guide/development.md) | 开发指南、集成测试、项目结构 | | [Namespace 迁移](guide/namespace-migration.md) | 默认 namespace 更改和迁移指南 | | [架构](guide/architecture.md) | 数据流、组件、DB schema | | [CLAUDE.md 指南](guide/claude-md-guide.md) | 使用 CCG 的项目模板 | ## 许可证 MIT
标签:AI编程助手, EVTX分析, MCP, SOC Prime, 代码分析, 代码检索, 凭证管理, 开发工具, 日志审计, 测试用例, 请求拦截