simplecore-inc/coregraph

GitHub: simplecore-inc/coregraph

一款面向多语言 Monorepo 的可查询代码符号图工具,通过预计算图快速提供调用者查找、影响分析、死代码检测等服务,并专为 LLM agent 的低 Token 消耗进行了优化。

Stars: 1 | Forks: 0

CoreGraph

# CoreGraph [![npm version](https://img.shields.io/npm/v/@coregraph/cli?logo=npm&color=cb3837)](https://www.npmjs.com/package/@coregraph/cli) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) ![macOS arm64 | x64](https://img.shields.io/badge/macOS-arm64%20%7C%20x64-334155?logo=apple&logoColor=white) ![Linux x64 | arm64](https://img.shields.io/badge/Linux-x64%20%7C%20arm64-FCC624?logo=linux&logoColor=black) ![Windows x64 | arm64](https://img.shields.io/badge/Windows-x64%20%7C%20arm64-0078D6?logo=windows&logoColor=white) 针对多语言和 monorepo 代码库的单一可查询代码图——查找调用者、影响、死代码和跨文件不一致之处,每条关系都标记了您可以信任的程度。 CoreGraph 是一个 Rust CLI(`coregraph`,v0.1.3,MIT)。它对您的源代码进行一次性索引, 通过后台 daemon 提供图服务,并通过 IPC socket、面向 LLM agent 的 MCP 桥接、面向编辑器的 LSP 桥接以及可选的 HTTP API 来回答问题。因为每个答案都来自预先计算的图,而不是重新读取文件,所以结果精确、返回速度快,并且体积足够小,可以直接 交给 LLM——只需几百个 token,而 grep 和粘贴文件可能需要 花费数千个 token。 ## 什么是 CoreGraph CoreGraph 通过将两个分析层结合到一个单一结果中,为您的代码库构建了一个内存中的**符号图**: - **tree-sitter** 从每个文件中提取符号——函数、方法、结构体、类、 枚举、配置键、文档注释。 - **stack-graphs** 解析*跨文件*的名称——因此一个文件中的调用点 会链接到它在另一个文件中实际绑定的定义,而不仅仅是链接到任何 同名的内容。 两者都在一次 `coregraph index` 过程中运行——不需要语言服务器、构建系统 或编译器工具链。 图中的每条边都带有一个**置信度分数** (0.0–1.0)、产生它的**来源** (例如由 stack-graphs 解析还是语法匹配),以及一个 **信任模型**。这意味着消费者——无论是 LLM agent 还是人类——都可以将编译器级别的事实与启发式猜测区分开来,并在需要时通过 `--min-confidence` 进行过滤。 ## 核心亮点

CoreGraph highlights — Token-efficient: built for LLM agents, exact symbols and edges instead of whole files, llm output paged to a token budget. Fast: one index pass (~280 files in ~2.3s), in-memory daemon over IPC, warm-load from snapshot. Many languages: Java, TypeScript, JavaScript, Python, Go, Rust, Kotlin plus config and Markdown in one index. Monorepo-native: cross-package and cross-language in one connected graph.

- **Token 高效——专为 LLM agent 打造。** 每个答案都来自 预先计算的图,因此 CoreGraph 返回问题涉及的*确切*符号和边, 而不是整个文件。`--output-format llm` 输出紧凑、结构化的 文本;结果根据 `--token-budget` 进行分页(默认 `8000`;`--fast` 将其限制为 `2000`,`--full` 将其提高至 `16000`),并带有实时的 `budget: used/total` 计数器;且 `--min-confidence` 会在低信任度噪音到达 模型之前将其过滤掉。原本需要粘贴多个文件的调用者查找, 现在只需几百个 token 即可完成。 - **快速,且保持快速。** 单次 `index` 即可构建整个图(在此仓库中约 280 个文件耗时约 2.3 秒),然后后台 daemon 会通过 IPC socket 从内存中为后续的每个查询提供服务——无需为每个命令重新索引。空闲项目会被 快照到磁盘,并在下次查询时**热加载**(跳过 tree-sitter 提取),除非源文件发生了更改,因此重复查询实际上是 瞬时的,并且永远不会过时。 - **多种语言,一个图。** Java、TypeScript、JavaScript、Python、Go、Rust 和 Kotlin 每一种都同时具备符号提取*和*跨文件名称解析, 此外还有配置(YAML/TOML/JSON)和 Markdown 层——所有这些都统一到一个索引中,无论使用何种语言,您的查询方式都完全相同。 - **原生 Monorepo。** 一个图即可同时覆盖仓库中的每个包、服务和语言: 跨越目录或语言边界的引用会解析到其真实的定义,因此跨包调用路径和共享 定义可以在单个查询中访问,而不是散落在各语言专属的索引中。daemon 使用带有 可选堆预算的 LRU 缓存多个项目,保持大型多语言仓库的响应速度。 ## 为什么选择 CoreGraph | 工具 | 它能提供什么 | 它缺少什么 | |------|-------------------|----------------| | `grep` / ripgrep | 快速的文本匹配 | 没有符号、没有调用边、没有跨文件解析 | | `ctags` | 符号索引 | 没有调用者/被调用者、没有影响分析、仅限单次运行 | | 单语言 LSP | 一种语言的丰富导航 | 一次只能处理一种语言;无法处理多语言 monorepo | | **CoreGraph** | 带有置信度标记的边的、有类型的、跨文件、多语言图 | — | CoreGraph 专为答案跨越文件和语言的代码库而构建: 映射到 Go 处理程序的 TypeScript 路由、由配置注入的 Spring bean、跨服务重复的 枚举值。它可以回答“谁调用这个”、“如果我更改这个会发生什么”、“什么是死代码”以及“哪里存在分歧”——一次性跨越 所有内容。 ## 快速开始 ``` # 从 npm 安装 CLI —— 将 `coregraph` 添加到你的 PATH npm install -g @coregraph/cli # ...稍后升级到最新版本: npm install -g @coregraph/cli@latest # ...或者在不安装的情况下运行: npx @coregraph/cli@latest # ...或者从源码构建: cargo build --release (二进制文件位于 target/release/) # 检查已安装的版本: coregraph --version # 索引当前项目(首次运行时会创建 .coregraph/config.toml) coregraph index --stats ``` ``` coregraph: skipped 1 minified/generated file(s) (e.g. ./vscode-extension/media/cytoscape.min.js) Index complete — 281 files, 3396 symbols, 21342 edges (2337ms) ``` 第一次查询会自动生成一个后台 daemon,并为 随后的每个命令重用缓存的图。 ### 查找谁调用了某个函数 ``` coregraph query compute_impact \ --direction incoming --edge-kind calls --hop-limit 1 ``` ``` ── query: compute_impact ────────────────────────────────── ✓ compute_impact [crates/query/src/impact.rs:27] kind: Function | package: query (cargo) Incoming (14): ├── calls ← run [Function] @ crates/cli/src/commands/diff.rs [0.85] ✓ ├── calls ← run [Function] @ crates/cli/src/commands/impact.rs [0.85] ✓ ├── calls ← cached_impact [Function] @ crates/cli/src/dispatch.rs [0.85] ✓ ├── calls ← api_impact [Function] @ crates/server/src/handlers.rs [0.85] ✓ └── ... (14 total) ✓ trust: all paths verified ── page 1/1 | 14 edges total | budget: 506/5600 tokens ── [n]ext page | [e]xpand | [f]ilter --edge-kind | [q]uit ``` 每条边上的 `[0.85] ✓` 是其置信度分数。 ### 查看变更的影响范围 ``` coregraph impact build_router --risk ``` ``` Impact of 'build_router': 1251 reachable symbols, 1251 edges, depth 3 Risk Score: 0.96 (Critical) Blast Radius: Critical (16 modules, 910 callers) Confidence-Weighted Impact: 653.500 Affected tests: 334 test_app (distance 2, path_confidence 0.90) — ./crates/server/src/handlers.rs create_app_returns_router (distance 2, path_confidence 0.90) — ./crates/server/src/lib.rs ... (more affected tests) ``` ### 查找死代码候选 ``` coregraph orphans --exclude-tests ``` ``` Orphan symbols (12): 7 likely dead, 5 library API surface, 0 test code as_kebab [Method] — crates/cli/src/commands/query.rs strip_api_path_prefix [Function] — crates/extractor/src/string_literal_extractor.rs [library API] unregister [Method] — crates/graph/src/hooks.rs [library API] outputChannel [Constant] — vscode-extension/src/extension.ts ... ``` 标记为 `[library API]` 的符号是公共接口——可以从 crate 外部访问, 因此与完全未被引用的符号相比,其置信度标记较低。 ### 检测跨文件不一致 ``` coregraph inconsistencies ``` ``` Inconsistencies (63): [enum-mismatch] 'admin' appears in: - Permission.ADMIN (./tests/e2e/golden/04-inconsistencies/src/permissions.ts) - Role.ADMIN (./tests/e2e/golden/04-inconsistencies/src/roles.ts) [api-path] /a.rs vs /b.rs ... ``` 使用 `--category ` 缩小报告范围。 检测器可以通过 `[inconsistencies]` 配置部分针对每个项目进行调优: `disable = ["api-path"]` 会在“运行所有分析”模式下关闭某个类别(在仅含前端、路由字面量没有 对应服务端的仓库中非常有用——显式的 `--category` 仍然会运行它),而 `api_path_min_segments`(默认为 `2`) 设定了近失匹配段数的下限。 ### 在不熟悉的代码库中确定方位 ``` coregraph stats --breakdown ``` ``` symbols: 4136 edges: 24993 ## Symbol 种类 Function 1480 DocComment 709 Method 473 ... ## 每个 package 的 symbol/edge 数量 package symbols edges (no package) 1391 8058 coregraph 736 5634 coregraph-extractor 510 3902 ... ## 被引用次数最多的前 20 个 symbol(in-degree;排除 containers) 250 SymbolId [Struct] @ ./crates/core/src/symbol.rs 149 clone [Method] @ ./crates/graph/src/bloom.rs 122 nodes [Method] @ ./crates/graph/src/symbol_graph.rs ... ## 按 symbol 数量排名前 20 的文件 133 ./crates/cli/src/dispatch.rs 116 ./crates/extractor/src/lib.rs 110 ./crates/graph/src/symbol_graph.rs ... ``` 包信息来自项目自身的清单(Cargo 工作区、npm/pnpm 工作区、Maven/Gradle 模块);入度排名仅计算真实符号之间具有 实质性影响的边,因此文件容器和文档节点 不会淹没真正的核心枢纽。 在您不熟悉的仓库上从这里开始——被引用最多的符号和最密集的 文件正是架构实际所在之处。 ### 通过 `file:line` 查找符号 ``` coregraph inspect crates/query/src/impact.rs:33 ``` ``` ── inspect: crates/query/src/impact.rs:33 ── compute_impact [Function] bytes 1128..3581 doc::compute_impact [DocComment] bytes 531..1128 32 /// depends on (outgoing) does not break when X changes. → 33 pub fn compute_impact(graph: &SymbolGraph, seed_id: SymbolId, max_depth: usize) -> ImpactResult { 34 let mut visited: HashSet = HashSet::new(); ``` 解析位于光标位置的符号——其名称、种类、字节范围 以及周围的源代码(默认 5 行,`--context-lines`)。只有当查询位置落在文档注释自身的跨度内时,才会出现 `doc::… [DocComment]` 行(如上例所示);检查符号体内的某一行不会拉取该符号的文档注释,并且 JSON 输出和 编辑器/IPC 的 `inspect` 路径不携带文档注释数据。 ### 查看函数依赖于什么 ``` coregraph query compute_impact \ --direction outgoing --edge-kind calls --hop-limit 1 ``` ``` ── query: compute_impact ────────────────────────────────── ✓ compute_impact [crates/query/src/impact.rs:27] kind: Function | package: query (cargo) Outgoing (3): ├── calls → incident_edges [Method] @ crates/graph/src/symbol_graph.rs [0.85] ✓ ├── calls → is_impact_bearing [Function] @ crates/query/src/impact.rs [0.85] ✓ └── calls → clone [Method] @ crates/graph/src/bloom.rs [0.85] ✓ ✓ trust: all paths verified ``` 与“谁调用了函数”的查询相同,只是方向相反:`--direction outgoing` 遍历到 被调用者/依赖项,`incoming` 遍历到调用者。 ### 将结果通过管道传递给脚本或您的 AI 助手 ``` coregraph query build_router --direction outgoing --edge-kind calls \ --output-format json | jq -r '.edges[] | "\(.other_name) [\(.current_confidence)]"' ``` ``` new [0.95] route [0.95] post [0.95] clone [0.95] dispatch [0.95] ... (22 total) ``` 每个分析命令(`query`、`impact`、`diff`、`orphans`、 `inconsistencies`、`stats`、`inspect`、`index`)都支持 `--output-format json`,因此 结果可以直接导入脚本和 CI 门禁(`llm` 由通过 LLM 渲染器路由的命令支持;`stats`/`inspect`/`index` 会为此回退到人类文本)。要进行实时的编辑器/agent 使用,请运行 `coregraph lsp` 或 `coregraph mcp`——请参阅[集成](#integrations)。 ## 核心功能 - **Token 预算控制,适配 LLM。** `--output-format llm` 输出紧凑的 结构化文本,每个结果都根据 `--token-budget` 进行分页, 并且 `--min-confidence` 会剔除低信任度的噪音——因此 agent 每个答案只需花费几百个 token,而不是摄取整个文件。 - **多语言,一个图。** 七种代码语言加上配置和 Markdown, 统一到一个索引中——专为 monorepo 构建。 - **跨文件名称解析。** stack-graphs 将引用绑定到 它们实际解析到的跨文件的定义上。 - **每条边都有置信度和信任度。** 每个关系都有评分和 来源标记;使用 `--min-confidence` 进行过滤(默认 `0.70`)。 - **影响和风险分析。** 传递可达性加上风险评分、 影响范围,以及变更影响的测试。 - **死代码检测。** 孤立符号,区分可能是死代码的符号与公共 库接口。 - **跨文件不一致性检查。** 枚举值不匹配、API 路径漂移、 配置键漂移以及文档漂移(`@param`/`:param` 命名了 签名中不再存在的参数——并会从实际签名中建议重命名候选者)。可以通过 `config.toml` 中的 `[inconsistencies]` 针对每个项目调整类别。 - **配置自调优。** `coregraph config recommend` 会测量已索引的 图并建议 `config.toml` 的调优(排除列表、字符串匹配上限、 类别禁用);`--write` 会应用它而不会破坏注释。 - **后台 daemon。** 首次使用时自动生成,缓存图,并在 空闲时自动终止——重复查询速度快,未使用时无驻留开销。 - **内置集成。** 用于 LLM agent 的 MCP、用于编辑器的 LSP,以及 可选的 HTTP API。 - **3D 可视化。** `coregraph viz` 打开一个在浏览器内交互的 全图全景图,由 daemon 实时提供数据。 ## 可视化:coregraph atlas ``` coregraph viz # serves http://127.0.0.1:7321 and opens the browser coregraph viz --detach # same, in the background; logs to viz.log coregraph viz --stop # stop the detached server ``` `coregraph viz` 启动一个本地服务器(仅限 127.0.0.1,受 token 保护),提供 符号图的 3D 力导向视图,直接从 daemon 内存中读取——无需导出步骤。如果 daemon 没有运行,系统会为您启动它, 并且项目选择器会列出所有已加载的内容。`--detach` 运行 独立于终端会话外的服务器(在终端关闭后依然存活),并在 端口响应后返回;`--stop` 会终止上次 `--detach` 记录的实例。

coregraph atlas — the symbol graph clustered by unit: each module/package/crate gathers inside a translucent labeled sphere, with cross-unit edges faded

您可以在查看器中执行以下操作: - **探索** —— 模糊符号搜索,隔离周边节点(深度 1–3), 检查任何符号及其关联边和源代码预览。 - **按单元聚类** —— 在半透明的边界球体内按模块/包/crate(源自 路径结构)对节点进行分组,如上所示。 - **在图上运行分析** —— 影响分析会将影响范围绘制为 跳跃距离渐变色,并显示风险分数和受影响的测试;死代码、 跨文件不一致、git-diff 影响以及两个符号之间的最短路径均只需 点击一下即可查看。 - **过滤** —— 符号/边类型、分析来源、最低置信度、 最小度和核心枢纽修剪,按类型/目录/单元着色。 - **分享与导出** —— 复制可恢复确切视图的链接,下载 PNG 截图或将可见子图导出为 json-graph。 - **保持新鲜** —— 查看器会轮询 daemon,并在 磁盘上的图发生变化时提供一键重新加载;它绝不会在您不知情的情况下重置您的镜头视角。

coregraph atlas — exploring one symbol: its isolated neighborhood fills the canvas with labeled neighbors while the side panel shows the symbol's kind, file, source preview, and incident edges

coregraph atlas — impact analysis of one symbol: its transitive dependents glow against the dimmed graph while the side panel shows reachable/caller counts, a risk bar, and the affected tests

## 工作原理 ``` source files │ ▼ tree-sitter ──► symbols (functions, structs, config keys, doc comments, …) │ ▼ stack-graphs ─► cross-file name resolution (calls, imports, references) │ ▼ symbol graph (in memory) ──► confidence/trust-tagged edges │ ▼ background daemon ──► IPC socket │ MCP │ LSP │ HTTP ``` `coregraph index` 会在一次过程中运行两个分析层。生成的图由 后台 daemon 持有,该 daemon 会: - **自动启动** 在第一个瘦客户端命令(`query`、`stats`、`impact`、 `orphans`、`inconsistencies`、`lsp`、`mcp`)时。使用 `--no-auto-start(或 `COREGRAPH_NO_AUTO_START=1`)改为在进程内构建。 - **自动终止** 在完全空闲 `server start --auto-stop-minutes `(默认为 30) 分钟后;`0` 则禁用。 - **缓存多个项目** 在 LRU 下(`server.max_loaded_projects`, 默认 5),并带有可选的总堆字节预算 (`server.max_loaded_bytes`,`0` = 无限制)。 - **选择性提供 HTTP 服务** 通过 `coregraph server start --http`。 ### 内存图管理 daemon 仅在项目图有用时才将其保留在内存中, 因此空闲的工作站会自动回收内存: - **空闲卸载(持久化后释放)。** 空闲时间达到 `server.idle_unload_minutes`(默认 10)的项目将从内存中清除。在 释放之前——同样在 LRU 或字节预算驱逐它时——自上次 保存以来发生更改的图将被写入 `.coregraph/snapshot.bin`。写入 操作在缓存锁之外进行,因此它永远不会阻塞并发查询,并且 干净(未修改)的图会被跳过以避免多余的磁盘读写。 - **热重启。** 下一次查询卸载的项目时,会从磁盘**热加载** 快照,而不是重新运行 tree-sitter 提取——*除非*任何 源文件比快照记录的构建时间更新,在这种情况下它会 从源代码重建。因此,热加载速度很快,但绝不会提供过期的数据。 - **墓碑垃圾回收。** 被删除的符号会先被标记为墓碑,然后 一旦超过 5 分钟的宽限期,后台清理程序就会从每个 已加载的图中清除它们,回收它们的节点、边和索引条目。 - **紧凑存储。** 文件路径被驻留(`Arc`),因此同一个 文件中的每个符号在内存中共享一个路径分配,而不是持有私有 副本。快照本身在每个节点/边上存储路径,因此当快照重新加载到内存时,共享会被重新建立。 每个项目的图都经历一个简单的生命周期——按需加载, 从内存中提供服务,并在空闲后(在持久化之后)卸载: ``` graph LR U[Unloaded] -->|first query| A[Active] A -->|cache hit| A A -->|idle / evict| U A -->|all idle| S([Daemon stops]) ``` 其中 _首次查询_ 会热加载快照(或重建),_空闲/驱逐_ 在释放之前持久化已更改的图,而 _全部空闲_ 会自动停止 daemon——如上所述。
详细流程 —— 加载路径、驱逐和清理器 **加载路径** —— 单个查询解析为的内容: ``` graph TD Q[Query] --> C{In cache?} C -->|hit| H[Serve from memory] C -->|quiescing| R[Revive] C -->|stale: source newer| E[Evict stale] C -->|miss| B{Snapshot fresh?} R --> H E --> B B -->|yes| W[Warm-load: skip extraction] B -->|no/missing| F[Rebuild: tree-sitter + stack-graphs] W --> H F --> H ``` **驱逐(持久化后释放)** —— 图如何在不丢失 更改或阻塞并发查询的情况下离开内存: ``` graph TD T[Trigger: idle / LRU / byte budget] --> M[Mark victims under lock] M --> P{Changed since save?} P -->|yes| W[Persist snapshot off-lock, atomic] P -->|no| K[Skip write] W --> RC{Still idle?} K --> RC RC -->|yes| D[Drop from cache, memory freed] RC -->|query arrived| RV[Revive, keep Active] ``` **后台清理器** —— 每 60 秒执行一次操作,完成三件事: ``` graph LR S[Sweeper tick every 60s] --> A[sweep_idle: unload idle projects] S --> G[gc_loaded: reap Gone nodes past 5min] S --> C{All idle past auto_stop?} C -->|yes| X[persist all dirty, then exit] C -->|no| N[wait next tick] ```
快照是 bincode 二进制数据块(schema v6,携带图的构建时间)。 使用 `coregraph snapshot save --out ` / `coregraph snapshot load ` 手动保存和重新加载图,或者在索引时通过 `index --snapshot ` 附加一个。 ### 置信度与信任度 存储的边置信度为 `base(edge_kind) × base(origin)`,限制在 `[0,1]` 范围内 (在创建边时计算一次)。查询输出中显示的实时 `current_confidence` 是 `base(origin)` 经过每个过期证据项乘以 0.7 衰减后的结果——过期 衰减仅适用于来源基准,而不适用于存储的乘积。五种 分析来源,从高到低的基准置信度依次为: | 来源 | 基准 | 含义 | |--------|------|---------| | CompilerDerived | 0.99 | 编译器级别的事实 | | NameResolved | 0.95 | 由 stack-graphs 解析 | | SyntaxMatched | 0.85 | 语法匹配 (tree-sitter) | | PatternMatched | 0.60 | 通过已知框架模式匹配 | | ConventionInferred | 0.40 | 从命名/结构约定推断 | 边还携带四种信任模型之一——`SourceEvidenced`、 `ContractDependent`、`Bidirectional`、`ExternallyMediated`。请参阅 [`docs/confidence.md`](docs/confidence.md) 和 [`docs/graph-model.md`](docs/graph-model.md) 获取完整的 schema。 ## 语言支持 所有七种代码语言都具备**双重**符号提取和跨文件名称 解析功能。仅当语言没有规则,或解析未产生绑定时,名称解析才会退回到 tree-sitter 语法匹配。 | 语言 | 符号提取 (tree-sitter) | 名称解析 (stack-graphs) | |----------|:-------------------------------:|:------------------------------:| | Java | ✓ | ✓ (上游) | | TypeScript | ✓ | ✓ (上游) | | JavaScript | ✓ | ✓ (上游) | | Python | ✓ | ✓ (上游) | | Go | ✓ | ✓ (手工编写的 `.tsg`) | | Rust | ✓ | ✓ (手工编写的 `.tsg`) | | Kotlin | ✓ | ✓ (手工编写的 `.tsg`) | | YAML / TOML / JSON | ✓ (→ `ConfigKey` 节点) | — | | Markdown | ✓ (文档层) | — | CoreGraph 手工编写的规则位于 `crates/stack/rules/{go,rust,kotlin}.tsg` 中。 ## CLI 概览 `coregraph ` —— 运行 `coregraph --help` 获取完整的标志列表。 | 命令 | 用途 | |---------|---------| | `index` | 索引源文件并构建符号图 | | `query` | 查询符号(邻居、调用者、被调用者) | | `inspect` | 在 `FILE:LINE` 处检查符号及其源代码上下文 | | `stats` | 图统计信息(`--breakdown` 查看直方图) | | `orphans` | 列出孤立符号(死代码候选) | | `impact` | 某个符号的影响分析(`--risk` 添加评分) | | `diff` | git diff 的影响:变更会触及哪些符号 | | `review` | 自动对 GitHub PR 进行评论,附带差异影响摘要 | | `inconsistencies` | 检测枚举 / api-path / config-key / 文档漂移问题 | | `export` | 导出图 (`dot` \| `cypher` \| `json-graph`) | | `viz` | 在 `127.0.0.1:7321` 提供 3D 图查看器 (atlas) 服务 (`--detach` / `--stop`) | | `snapshot` | `save` / `load` 二进制快照 | | `config` | `init` / `show` / `unset` / `path` / `recommend` | | `server` | Daemon 管理:`start` / `stop` / `status` / `restart` / `install` / `uninstall` | | `lsp` | LSP stdio 桥接 | | `mcp` | MCP stdio 桥接 | | `watch` | 监视文件并重建图 | | `batch` | 从 JSON 文件运行多个查询 | | `plugin` | 管理插件钩子:`list` / `run` | 常用的全局选项适用于每个命令:`--output-format `、 `--min-confidence <0.0–1.0>`(默认 `0.70`)、`--hop-limit `(默认 `3`)、 `--token-budget `(默认 `8000`)、`-C/--project `,以及预设 `--fast` / `--standard` / `--full`。 请参阅 [`docs/cli.md`](docs/cli.md) 获取完整的参考手册。 ## 与 AI 编程 agent 配合使用 CoreGraph 提供了一个现成的工具包,以便任何 AI 编程 agent 都可以使用它——并且对于结构性问题(调用者、变更影响、死代码、跨文件 不一致),相比原始的 grep/read 扫描更倾向于使用它。所有内容都位于 [`agents/`](agents/README.md) 下:Claude Code 插件、一个您可以放入自己项目的 `AGENTS.md`,以及用于 Codex、Gemini CLI 和 opencode 的复制粘贴式 MCP 配置。所有这些都指向同一个指导来源——内置的 技能。 **Claude Code** —— 安装插件(注册技能和 `coregraph mcp` 服务器)。 通过其 `marketplace.json` URL 添加市场仅会下载小型目录——无需 克隆仓库——且插件是稀疏获取的(仅限 `agents/coregraph`): ``` /plugin marketplace add https://raw.githubusercontent.com/simplecore-inc/coregraph/main/.claude-plugin/marketplace.json /plugin install coregraph@coregraph ``` **Codex / Gemini CLI / opencode** —— 注册 `coregraph mcp` 并使用 `AGENTS.md`。有关 特定于 agent 的确切设置,请参阅 [`agents/README.md`](agents/README.md)。 ## 集成 除了终端之外,CoreGraph 还支持三种机器协议。详情请参阅 [`docs/integrations.md`](docs/integrations.md)。 ### MCP —— `coregraph mcp` 为 LLM agent 提供的 stdio JSON-RPC 桥接,公开了六个工具(纯名称,无 前缀): | 工具 | 输入 | 返回 | |------|-------|---------| | `query` | `{name}` | 跨项目匹配某个名称的符号 | | `impact` | `{name, transitive? = false, depth = 5}` | 某个符号的传递依赖项(如果它发生变化,谁会遭到破坏),直至 `depth`(默认为 5);`transitive` 仅改变输出标签,因此传入 `depth: 1` 仅获取直接依赖项 | | `orphans` | `{}` | 死代码候选:没有传入或传出边的代码符号 | | `inconsistencies` | `{}` | 跨文件不一致:枚举 / api-path / config-key(文档漂移仅限 CLI) | | `stats` | `{}` | 图形摘要:符号计数和边计数 | | `recommend` | `{}` | 基于索引图推荐的 `.coregraph/config.toml` 调优:`[index]`/`[analysis]` 排除候选、字符串匹配上限、api-path 类别禁用(仅作建议——不会写入任何内容) | 使用 MCP 客户端(Claude Code `.mcp.json` 或 `claude_desktop_config.json`)注册它: ``` { "mcpServers": { "coregraph": { "command": "coregraph", "args": ["mcp"] } } } ``` ### LSP —— `coregraph lsp` 为编辑器提供的 stdio LSP 桥接。提供三种方法: - `textDocument/definition` - `textDocument/references` - `workspace/symbol` ### HTTP —— `coregraph server start --http` 可选的 REST API,默认绑定到 `127.0.0.1:27787`(使用 `--allow-external` 绑定非 localhost 地址)。 | 方法 | 路由 | 用途 | |--------|-------|---------| | GET | `/health` | 存活状态 + 版本 + 符号计数 | | POST | `/query` | 按名称查找符号 | | POST | `/batch` | 一次运行多个名称查询 | | GET | `/api/query` | 分页符号查询(`page`/`page_size`);`budget` 参数作为元数据回显,但不会截断响应 | | GET | `/api/expand` | 展开节点的传入/传出边(返回所有边;其 `budget` 参数同样仅用于回显) | | GET | `/api/impact` | 某个符号的传递影响 | | GET | `/api/source` | `FILE:LINE` 周围的源代码片段 | ## 配置 首次索引时,会在 `/.coregraph/config.toml` 创建一个 针对每个项目的配置文件。使用 `coregraph config show` 查看有效配置: ``` limits.token_budget = 8000 [project] limits.hop_limit = 3 [project] limits.min_confidence = 0.7 [project] server.max_loaded_projects = 5 [project] server.graceful_shutdown_sec = 30 [project] server.idle_unload_minutes = 10 [project] server.max_loaded_bytes = 0 [project] ``` 所有 `server.*` 键都会在启动时被 daemon 读取(项目本地配置 会覆盖全局配置)。`config.toml` 示例: ``` [limits] hop_limit = 3 # query traversal depth min_confidence = 0.7 # minimum edge confidence to report token_budget = 8000 # LLM-mode page size [server] max_loaded_projects = 5 # daemon LRU cache size (project count) max_loaded_bytes = 0 # total heap budget across loaded graphs; 0 = unlimited idle_unload_minutes = 10 # unload (and snapshot) a project after this idle time graceful_shutdown_sec = 30 # in-flight grace before hard-exit [index] exclude = [] # gitignore-syntax patterns to skip during indexing string_match_max_files = 8 # skip cross-file StringMatch pairing for a string # found in more than N distinct files (convention # strings would otherwise emit O(k²) edges); 0 = unlimited [analysis] exclude = [] # files still parsed (their edges survive) but hidden from # dead-code (orphans) reports — for generated consumers [inconsistencies] disable = [] # categories to skip when running without --category, # e.g. ["api-path"] in a frontend-only repo api_path_min_segments = 2 # minimum non-empty path segments for an api-path # near-miss report ``` 配置会进行 lint 检查:`coregraph index` 会在 stderr 上发出警告(并且 `config show` 会在线标记)有关 TOML 语法错误、未知部分和未知键的信息, 而不是静默忽略它们,并且格式错误的 `exclude` 模式会 被跳过并发出警告,而不是禁用其他模式。索引 完成后,以数据符号(如 i18n 包、生成的文档)为主的文件会被 建议为人类可读输出中的 `[index].exclude` 候选项。 您还可以让系统为您测量调优:`coregraph config recommend` 会从索引图中得出 `[index].exclude`、`string_match_max_files`、 `[inconsistencies].disable` 和 `[analysis].exclude` 的建议值, 并将它们作为随时可粘贴的 TOML 块打印出来,每条建议都有一个理由。 `coregraph config recommend --write` 会将它们原地合并到 `config.toml` 中—— 和现有条目会被保留,数组会在不产生 重复项的情况下追加,并且如果文件无法解析,合并将中止(不写入任何内容)。 任何限制都可以在每次调用时通过 `--hop-limit`、 `--min-confidence` 或 `--token-budget` 进行覆盖。全局配置也位于 平台配置目录(`dirs::config_dir()`)中——在 Linux 上,这里遵循 `$XDG_CONFIG_HOME/coregraph/config.toml`,在 macOS 上则是 `~/Library/Application Support/coregraph/config.toml`(运行 `coregraph config path` 以打印确切位置)。 ## 故障排除 - **编辑文件后结果过期。** 重新运行 `coregraph index` —— 它总是会 从源代码重建图,并且从不重用现有的快照,因此 普通的重新索引已经是完全全新的构建。对于持续更新, `coregraph watch`(默认增量;`--no-incremental` 强制完全 重建)。 - **不想要后台 daemon。** 传入 `--no-auto-start`,或者设置 `COREGRAPH_NO_AUTO_START=1`,以便在进程内构建和回答。 - **Daemon 无法停止 / 已过期。** 执行 `coregraph server stop`,然后重新运行您的 命令以重生新的 daemon。检查 `coregraph server status`。 - **嘈杂的 `inconsistencies` 输出。** 仓库自身的测试夹具可能会产生 仅限夹具的噪音。使用 `--category ` 缩小范围, 在 `config.toml` 的 `[index]` 下添加 `exclude` 模式,或者通过 `[inconsistencies] disable = ["api-path"]` 为项目禁用在结构上无关的类别(提高 `api_path_min_segments` 以获得更宽松的过滤)。当少数数据文件在符号计数中占主导地位时,`coregraph index` 也会打印排除候选项的建议。 - **`orphans` 将公共 API 列为死代码。** 标记为 `[library API]` 的符号是 公共接口;使用 `--public-only=false` 来包含私有符号,或者 使用 `--exclude-tests` 丢弃测试代码。 - **无法从另一台主机访问 HTTP API。** 它默认绑定 localhost; 添加 `--allow-external`(并查阅 [`docs/security.md`](docs/security.md))。 ## 文档 - [`docs/overview.md`](docs/overview.md) —— 项目意图和设计理念 - [`docs/architecture.md`](docs/architecture.md) —— Crate 布局和 runtime - [`docs/cli.md`](docs/cli.md) —— 完整的 CLI 参考 - [`docs/graph-model.md`](docs/graph-model.md) —— 节点/边 schema 和信任层级 - [`docs/confidence.md`](docs/confidence.md) —— 置信度和信任度数学原理 - [`docs/change-tracking.md`](docs/change-tracking.md) —— 文件监视和增量更新 - [`docs/integrations.md`](docs/integrations.md) —— MCP / LSP / HTTP 详情 - [`docs/security.md`](docs/security.md) —— 威胁模型和绑定控制 - [`docs/contributing/development.md`](docs/contributing/development.md) —— 从源码构建、本地安装和开发工作流 - [`docs/contributing/testing.md`](docs/contributing/testing.md) —— 测试策略、测试夹具和 e2e 套件 - [`docs/roadmap.md`](docs/roadmap.md) —— 状态和未来计划 - [`CHANGELOG.md`](CHANGELOG.md) —— 用户可见的更改 ## 许可证 MIT —— 详见 [`LICENSE`](LICENSE)。
标签:LLM集成, Rust, SOC Prime, tree-sitter, 代码搜索, 可视化界面, 开发工具, 网络流量审计, 通知系统, 错误基检测, 静态代码分析