# code-review-graph 功能文档 > **停止燃烧 token,让 AI 审查真正的代码。** > > code-review-graph 是一个本地优先的**代码审查引擎**:以 Tree-sitter 知识图谱为底座, > 为 AI 编程助手提供精准的代码上下文与结构化的审查工作流——从 diff 影响面分析、 > 客观量化评分、并行深读覆盖度门禁,到最终的双格式审查报告,全流程只读、可审计。 - 当前版本:v2.5.1(本地定制版) - 语言要求:Python 3.10+ - 运行形态:本地源码部署(venv / uv),MCP stdio 服务接入 AI 编程工具 - 数据形态:图谱存储于仓库本地 `.code-review-graph/`(SQLite),零遥测,源码不出本机 --- ## 目录 1. [工具概述](#1-工具概述) 2. [核心原理](#2-核心原理) 3. [代码审查工作流](#3-代码审查工作流) 4. [MCP 工具(37 个)](#4-mcp-工具37-个) 5. [MCP Prompts(7 个)](#5-mcp-prompts7-个) 6. [CLI 命令参考](#6-cli-命令参考) 7. [opencode 本机集成现状](#7-opencode-本机集成现状) 8. [配置与环境变量](#8-配置与环境变量) 9. [已知局限](#9-已知局限) --- ## 1. 工具概述 AI 编程工具执行代码审查时,往往反复扫描大量文件造成严重 token 浪费,且缺乏统一的 审查方法论与量化标准。code-review-graph 的解决方式是: - 使用 **Tree-sitter** 将仓库解析为知识图谱:节点(函数/类/导入/测试)+ 边(调用/继承/测试覆盖) - 审查时通过图谱查询计算需要读取的**最小文件集合**(Blast-radius 分析) - 在图谱之上提供**三套开箱即用的审查工作流**(diff 统一审查 / 全项目审查 / 单功能审查) - 用**客观指标评分**(SQL 风险、异常分支覆盖、冗余率等)替代"凭感觉审完" - 用**并行深读管线 + 覆盖度门禁**保证"审过了"不是由感觉决定,而是有数据支撑 - 最终产出自包含的中文 HTML + Markdown 双格式审查报告 核心特性一览: | 特性 | 说明 | | --- | --- | | 本地优先 | 图谱存本机 SQLite,无需外部数据库;云端 embedding 为显式可选 | | 增量更新 | 只重解析变更文件(SHA-256 比对),后续更新秒级完成 | | 零遥测 | 不向任何外部服务发送源码 | | 多语言 | 40+ 编程语言,支持自定义语言扩展 | | 三种审查入口 | unified-review(diff)/ project-review(全项目)/ project-review(单功能) | | 客观量化 | 5 项 Layer-2 指标 + good/warn/fail 分级,blocker 一票否决 | | 覆盖度门禁 | 文件数口径 + 行覆盖 + 语义单元三件套,双目标(全库 ≥85% 且高风险 ≥95%) | | 双格式报告 | 自包含中文 HTML(浏览器直开)+ Markdown(入库/PR 复用),全程只读不改代码 | --- ## 2. 核心原理 ### 2.1 架构管线 ``` 仓库 → Tree-sitter 解析 → SQLite 图谱 → Blast-radius 分析 → 最小审查集 ↓ detect_changes 风险评分 → score_review 客观指标 ↓ deep_read 并行深读 → coverage 门禁 → dedupe 合并 ↓ generate_report(HTML + Markdown) ``` ### 2.2 从代码到图谱 `code-review-graph build` 用 Tree-sitter 把源码解析为 AST,提取: - **节点**:函数、类、导入语句、测试函数等代码实体 - **边**:调用关系、继承关系、测试覆盖关系等结构联系 图谱把「代码长什么样」升级为「代码之间有什么关系」,这是后续一切审查能力的底座。 解析完成后图谱存储在仓库本地 `.code-review-graph/graph.db`。 ### 2.3 Blast-radius(爆炸半径)分析 文件发生变更时,图谱追踪所有可能受影响的调用方、依赖方与测试: - 变更波及面(谁调用了它、谁依赖它、哪些测试覆盖它) - AI 只读取受影响文件而非扫描整个项目,token 消耗显著下降 ### 2.4 增量更新 每次保存文件或 git commit 时计算变更文件的 SHA-256 哈希,只重新解析变化的文件, 再按图谱关系局部更新相关节点。配合 watch 模式 / 平台 hooks / crg-daemon 守护进程, 图谱始终贴近当前代码状态,不需要"用一次就过期"的全量重建。 --- ## 3. 代码审查工作流 ### 3.1 三种审查入口对比 | 维度 | unified-review(diff 审查) | project-review(全项目) | project-review(单功能) | | --- | --- | --- | --- | | **审查对象** | git diff(默认 `HEAD~1..HEAD`) | 图谱内全部源文件 | 目标功能/模块相关文件 + 影响面 | | **触发指令** | "审查"、"检查代码"、"review" | "对项目代码进行全面审查"、"全面审查"、"整个项目" | "审查支付功能的代码"、"审查 auth 模块" | | **入口** | `/code-review-graph-unified-review` | `/code-review-graph-project-review` | `/code-review-graph-project-review` | | **核心工具** | `detect_changes` + `score_review` | `score_review(all_files=True)` + 深读管线 | `semantic_search` + `get_impact_radius` + `score_review` | | **典型场景** | 合并前检查本次改动 | 代码质量体检、架构审计、发布前全面体检 | 上线前审查某个功能 | 三者共享同一套评分/去重/报告工具,流程结构一致: **图谱上下文 → 客观评分 → 链路分解 → 去重 → 人工裁决 → 报告**,区别仅在范围获取方式。 ### 3.2 unified-review:三层统一审查(diff) ``` 触发 → 范围/档位判定 → [图谱上下文] → Layer 1 八分类 + CRITICAL 检查 → [score_review 量化] → [specialist 并行派发] → [dedupe 合并去重] → 人工裁决(只读)→ 验收门禁 → [HTML + Markdown 报告] → 持久化 ``` | 步骤 | 内容 | | --- | --- | | Step 0 范围/档位 | 读 `.code-review.yaml` 确定 tier(fast / standard / strict);检测语言/框架加载对应 checklist;判定 change/file/service/chain 级范围 | | Step 1 图谱上下文 | `build_or_update_graph` → `get_review_context`(blast radius + 源码片段)→ `detect_changes`(风险分 + 测试缺口 + 受影响流) | | Step 2 Layer 1 链路分解 | 八分类逐类检查(接口/业务/数据/工具/错误处理/安全/性能/可观测性),叠加 CRITICAL 五类(SQL 数据安全、竞态并发、LLM 信任边界、Shell 注入、枚举完整性) | | Step 3 Layer 2 量化评分 | `score_review_tool` 计算 5 项客观指标;需求覆盖/逻辑对齐等由 LLM 判断(`llm_judged` 标注,无需求文档时 0.5× 降权) | | Step 4 specialist 派发 | diff ≥ 50 行时并行派发 testing/maintainability/security/performance/data-migration/api-contract 子代理;security 与 data-migration 为保险型永不 gate | | Step 5 合并去重 | `dedupe_findings_tool` 按 `path:line:category` 指纹合并、多源确认置信 +1、计算 PR 质量分、抑制历史已跳过项 | | Step 6 人工裁决 | **只读**。每条 finding 带 severity + 置信度 + file:line + 修复建议,按 severity 批量呈现;blocker 不可批量跳过 | | Step 7 验收门禁 | 任一 🔴 blocker → verdict `❌ FAIL`;分类 Ready / Needs Fix / Unusable | | Step 8 报告 | `generate_report_tool`(默认 `format="both"`)产出中文报告 | | Step 9 持久化 | 记录审查结果供后续去重抑制,不可用时静默跳过 | ### 3.3 project-review:全项目深读管线 全项目审查的关键难题是**覆盖度不能靠感觉**。主上下文无法逐文件深读数百个文件, 必须走并行子代理深读流水线: ``` a. deep_read_plan_tool(target_coverage=85) → 按风险权重贪心选出待深读文件并分组 b. 按组并行派发 explore 子代理,每个子代理完整深读该组全部文件, 逐文件返回 read_ranges / semantic_units / findings[](每条 finding 必须带 file:line 证据) c. 三件套质量门禁(coverage_tool gate="both+line"): ① 单元完整性:semantic_units 与图谱单元一一对应 ② 行覆盖:union(read_ranges) / 真实行数 ≥ 95% ③ 防伪抽验:主代理抽样回读比对,防子代理假读 d. line_gap ∪ unit_gap 非空 → 补轮重读直至清空,禁止静默降级 e. 未达标 → 按 priority_deep_read_files 补一轮,循环至达标 f. 报告生成后 save_coverage_index_tool 写跨轮覆盖索引(file + SHA + ranges), 下轮审查 include_prior=True 自动复用未变更文件,实现增量累积 ``` **覆盖度双口径门禁**: - 全库覆盖 = 已深读文件数 / 全部源文件数(目标 ≥85%) - 高风险覆盖 = 已深读高风险文件数 / 信号点名文件数(目标 ≥95%) - `target_reached=false` → 报告顶部标 🔴 覆盖不足;覆盖率结果完整透传进报告 `## 覆盖度` 区块 其余步骤(架构全景 → 高风险定位 → `score_review(all_files=True)` → 八分类 + CRITICAL → dedupe → 人工裁决 → 报告)与 unified-review 同构。 单功能(feature)流程则先用 `semantic_search_nodes(query=target)` 定位代码, 再 `query_graph(children_of)` 聚合文件、`get_impact_radius` 扩影响面, 之后聚焦这些文件走同一套评分与裁决流程。 ### 3.4 报告成果物 每次审查默认产出两份中文报告(`generate_report_tool format="both"`): - **`code-review-report.html`** — 自包含单文件(内联样式、零外部依赖),浏览器直接打开。 含结论(PASS/FAIL)、PR 质量分、客观指标表、问题清单(severity + 置信度 + 位置 + 修复建议)、 覆盖度区块、人工审查清单 - **`code-review-report.md`** — Markdown 版,便于 git 提交、PR 描述、内部文档复用 `format="html"` / `format="markdown"` 可单独产出;`output_path` 指定输出基础路径 (推荐归档到 `docs/reviews/{name}-review-{YYYY-MM-DD-HHMMSS}`,避免同名覆盖且便于追溯)。 **报告均为只读产物**:审查本身不修改任何代码,所有修复决定由人工确认后执行。 --- ## 4. MCP 工具(37 个) 图谱构建完成后,AI 助手通过 MCP 自动使用以下工具(共 37 个,按类分组)。 ### 4.1 图谱核心与上下文(12) | 工具 | 描述 | | --- | --- | | `build_or_update_graph_tool` | 构建或增量更新图谱 | | `run_postprocess_tool` | 重跑流检测、社区检测与 FTS 索引 | | `get_minimal_context_tool` | 超紧凑上下文(~100 token),任何任务的第一个调用 | | `get_impact_radius_tool` | 变更文件的爆炸半径分析 | | `get_review_context_tool` | token 优化的审查上下文 + 结构摘要 + 源码片段 | | `detect_changes_tool` | **风险评分的变更影响分析**:diff 映射到受影响函数/流/测试缺口,产出风险分与优先审查建议 | | `query_graph_tool` | 关系模式查询:callers_of / callees_of / imports_of / tests_for / inheritors_of 等 | | `traverse_graph_tool` | 从任意节点 BFS/DFS 探索,带深度与 token 预算 | | `semantic_search_nodes_tool` | 向量语义搜索代码实体(需先 embed),无向量时回退 FTS 关键词匹配 | | `embed_graph_tool` | 为全部图节点计算向量 embedding(local/openai/google/minimax/voyage) | | `list_graph_stats_tool` | 图谱规模与健康状况统计 | | `find_large_functions_tool` | 查找超过行数阈值的函数/类/文件(巨型文件审计) | ### 4.2 执行流与社区架构(11) | 工具 | 描述 | | --- | --- | | `list_flows_tool` | 按关键度排序列出执行流(从入口点追踪的调用链) | | `get_flow_tool` | 查看单个执行流的完整调用路径 | | `get_affected_flows_tool` | 查找受变更文件影响的用户级执行路径 | | `list_communities_tool` | 列出 Leiden 算法聚类出的代码社区 | | `get_community_tool` | 查看单个社区详情(规模/内聚度/成员) | | `get_architecture_overview_tool` | 从社区结构生成架构总览与耦合警告 | | `get_hub_nodes_tool` | 找出连接最多的节点(架构热点,改动爆炸半径大) | | `get_bridge_nodes_tool` | 通过介数中心性找出架构瓶颈(桥接节点) | | `get_knowledge_gaps_tool` | 识别孤立节点、未测试热点、薄弱社区等结构弱点 | | `get_surprising_connections_tool` | 检测意外耦合:跨社区/跨语言/外围到 Hub 的边 | | `get_suggested_questions_tool` | 从图谱分析自动生成审查问题(桥/hub/惊喜耦合驱动) | ### 4.3 审查分析与报告(8) | 工具 | 描述 | | --- | --- | | `score_review_tool` | **客观 Layer-2 指标**:SQL 风险、异常分支覆盖、冗余率、高风险密度、漏洞启发式五项,带 good/warn/fail 分级与证据;支持 `all_files=True` 全量评分;`llm_judged` 字段列出需 LLM 补判项 | | `dedupe_findings_tool` | **Finding 合并去重**:按 `path:line:category` 指纹合并、多源置信 +1(上限 10)、低置信移附录、抑制历史已跳过项、计算 PR 质量分 `max(0, 10 - (critical×2 + informational×0.5))` | | `generate_report_tool` | **报告生成**:渲染为自包含中文 HTML 与 Markdown(默认双格式),自动渲染结论/指标表/问题清单/覆盖度区块 | | `refactor_tool` | 重命名预览、框架感知死代码检测、社区驱动重构建议 | | `apply_refactor_tool` | 应用此前预览过的重构(精确字符串替换) | | `generate_wiki_tool` | 从社区结构生成 markdown wiki(`.code-review-graph/wiki/`) | | `get_wiki_page_tool` | 获取特定 wiki 页面 | | `get_docs_section_tool` | 获取内置 LLM 优化文档的指定章节(usage/review-pr/troubleshooting 等) | ### 4.4 深读管线、覆盖度与多仓(6) | 工具 | 描述 | | --- | --- | | `deep_read_plan_tool` | 生成按风险权重贪心分组的深读计划(groups + planned_files + estimated_batches),支持增量排除上轮已读文件 | | `coverage_tool` | **覆盖度三件套门禁**:文件数口径 + 行覆盖 + 语义单元覆盖三重计算;`gate="both+line"` 时四项 AND 判定;返回缺口文件与补读优先级队列;`include_prior=True` 合并跨轮索引实现增量 | | `save_coverage_index_tool` | 持久化深读名单到 `.code-review-graph/coverage-index.json`(file + per-file SHA + ranges),供下轮审查增量复用 | | `community_health_tool` | 检查 nodes.community_id 归属健康度,归属率 <90% 时提示先 postprocess 再算覆盖度,防止失真 | | `list_repos_tool` | 列出多仓注册表中已注册仓库 | | `cross_repo_search_tool` | 跨所有已注册仓库搜索代码实体,按仓内 rank 交错返回 | --- ## 5. MCP Prompts(7 个) MCP 协议层的 7 个预构建工作流模板,支持 MCP prompts 的客户端将其呈现为 "/" 可调用命令。 全部强制 token 效率模式:先调 `get_minimal_context`,默认 `detail_level="minimal"`。 | "/" 可调用命令 | 功能 | 参数 | | --- | --- | --- | | `/review_changes` | 提交前审查:`detect_changes` + 受影响执行流 + 测试缺口 | `base="HEAD~1"` | | `/architecture_map` | 架构文档:社区、执行流、Mermaid 图 + 耦合警告 | 无 | | `/debug_issue` | 引导式调试:语义搜索 + 调用链追踪 + 执行流定位根因 | `description=""` | | `/onboard_developer` | 新成员入职指南:统计、架构、关键执行流 | 无 | | `/pre_merge_check` | 合并前就绪检查:风险评分、测试缺口、死代码 | `base="HEAD~1"` | | `/unified_review` | 三层统一审查(只读):图谱上下文 → 客观评分 → 人工裁决 → 去重 → 双格式报告。任何 blocker 判 FAIL | `base="HEAD~1"`、`tier="standard"`(fast/standard/strict) | | `/project_review` | 项目级审查(非 diff):全项目或单功能,由用户自然语言指令决定范围,只读 | `scope="whole-project"`、`target=""` | --- ## 6. CLI 命令参考 ### 6.1 安装与部署 ```bash code-review-graph install # 自动检测并配置所有支持的 AI 平台(MCP/hooks/skills/规则注入) code-review-graph install --platform # 仅配置单个平台 code-review-graph install --dry-run # 预览动作不写入 code-review-graph init # install 别名 code-review-graph uninstall --dry-run # 对称卸载预览(只移除本工具拥有的组件) code-review-graph uninstall --keep-data # 移除集成但保留图谱数据库 code-review-graph uninstall --all-repos # 同时清理所有已注册仓库 ``` 支持平台:Codex、Claude Code、CodeBuddy Code、Cursor、Windsurf、Zed、Continue、 OpenCode、Antigravity、Gemini CLI、Qwen、Qoder、Kiro、GitHub Copilot(含 CLI)。 ### 6.2 图谱构建与维护 ```bash code-review-graph build # 全量解析整个代码库 code-review-graph build --skip-flows # 跳过流检测 code-review-graph build --skip-postprocess # 跳过后处理(流/社区/FTS) code-review-graph update # 增量更新(仅变更文件) code-review-graph update --base # 指定 git diff 基线 code-review-graph update --brief # 刷新后打印 Token Savings 面板 code-review-graph update --verify # 用 tiktoken 交叉校验 token 估算 code-review-graph postprocess # 重跑后处理 code-review-graph postprocess --no-flows # 跳过流检测 code-review-graph postprocess --no-communities# 跳过社区检测 code-review-graph postprocess --no-fts # 跳过 FTS 重建 code-review-graph watch # 监听文件变更自动增量更新 code-review-graph status [--json] # 图谱统计 code-review-graph forget [--dry-run] # 从图谱移除已解析文件(免全量重建) code-review-graph embed --provider local # 计算 embedding(--model all-MiniLM-L6-v2) ``` 通用参数:绝大多数命令支持 `--repo ` 显式指定仓库根(默认自动探测); `--data-dir` 可覆盖图谱数据目录。 ### 6.3 分析与审查 ```bash code-review-graph detect-changes --brief # 风险面板 + token 节省估算(只读) code-review-graph detect-changes --base # 指定 diff 基线(默认 HEAD~1) code-review-graph detect-changes --churn # 风险评分加入变更频率因子 code-review-graph impact --files ... # 变更爆炸半径(--depth/--max-results/--base) code-review-graph query # 图谱关系查询(callers_of/callees_of/imports_of 等) code-review-graph search [--kind] # FTS/语义混合搜索图谱实体 code-review-graph dead-code [--kind] [--file-pattern] [--json] # 死代码检测 code-review-graph large-functions --min-lines 150 [--path] [--kind] # 巨型函数/文件审计 code-review-graph refactor rename --old-name X --new-name Y # 重命名预览 code-review-graph refactor dead_code|suggest # 死代码/重构建议 ``` ### 6.4 结构浏览 ```bash code-review-graph flows [--limit 50] [--kind] [--sort] # 执行流列表 code-review-graph flow --id 3 [--source] # 单个执行流详情(可含源码片段) code-review-graph communities [--min-size] [--sort] # 社区列表 code-review-graph community --id 71 [--members] # 单个社区详情 code-review-graph architecture [--detail-level minimal|standard] # 架构总览 code-review-graph visualize [--format json|graphml|svg|obsidian|cypher] [--serve] code-review-graph wiki [--force] # 从社区生成 markdown wiki ``` ### 6.5 多仓与服务 ```bash code-review-graph register [--alias] # 注册仓库到多仓注册表 code-review-graph unregister # 移除注册 code-review-graph repos # 列出已注册仓库 code-review-graph eval [--benchmark ...] [--all] [--report] # 评估基准 code-review-graph serve # 启动 MCP stdio 服务 code-review-graph serve --repo # 指定仓库根 code-review-graph serve --http --host 127.0.0.1 --port 5555 # Streamable HTTP 模式 code-review-graph serve --tools t1,t2 # 仅暴露部分 MCP 工具(token 受限环境) code-review-graph serve --auto-watch # 服务期间自动增量更新 code-review-graph mcp # serve 别名 ``` ### 6.6 多仓守护进程(crg-daemon) 编辑器不支持 hooks 或希望后台保持多仓图谱新鲜时使用,随主程序一并安装: ```bash crg-daemon add ~/project-a --alias proj-a # 注册监听(写 ~/.code-review-graph/watch.toml) crg-daemon start # 后台启动,每 30s 健康检查并重启死掉的 watcher crg-daemon status # 查看守护进程与各仓库 watcher 状态 crg-daemon logs --repo proj-a --follow # 追踪某仓库日志 crg-daemon stop # 停止守护进程与全部 watcher ``` 也支持 `code-review-graph daemon start|stop|restart|status|logs|add|remove`。 --- ## 7. opencode 本机集成现状 本机采用**源码部署**方式:工具代码位于 `D:\code-review-graph\code-review-graph-main`, venv 内的可执行文件被 MCP 配置以绝对路径引用。 ### 7.1 MCP 配置(两处) ```json // D:\AuraSpace\.mcp.json(项目级) { "mcpServers": { "code-review-graph": { "command": "D:\\code-review-graph\\code-review-graph-main\\.venv\\Scripts\\code-review-graph.exe", "args": ["serve", "--repo", "D:\\AuraSpace"], "cwd": "D:\\AuraSpace", "type": "stdio" } } } ``` ```json // %USERPROFILE%\.config\opencode\opencode.json(全局级,节选) { "mcp": { "code-review-graph": { "type": "local", "command": [ "D:\\code-review-graph\\code-review-graph-main\\.venv\\Scripts\\code-review-graph.exe", "serve", "--repo", "D:\\AuraSpace" ], "timeout": 600000, "env": { "CRG_REPO_ROOT": "D:\\AuraSpace" } } } } ``` ### 7.2 已安装的 skills(`%USERPROFILE%\.config\opencode\skills\`,9 个) | Skill | 功能 | | --- | --- | | `build-graph` | 构建/重建代码图谱 | | `explore-codebase` | 图谱结构探索导航 | | `debug-issue` | 图谱引导式调试 | | `refactor-safely` | 依赖分析驱动的安全重构 | | `review-changes` | 变更审查(change detection + impact) | | `review-delta` | 自上次提交以来的增量审查 | | `review-pr` | PR/分支完整审查 | | `unified-review` | 三层统一审查:CRG 图谱上下文 + ai-code-review 评分方法论 + gstack-review 流程 | | `project-review` | 项目级审查(全项目/单功能):并行深读管线 + 三件套覆盖度门禁 + 双格式报告 | 其中 `project-review` 附带 PowerShell 校验脚本(verify-report / verify-line-coverage / verify-spot-check.ps1)与 Python 聚合脚本(aggregate_deep_read.py), skill 文档内引用了绝对路径,迁移机器时需同步修改。 ### 7.3 已安装的斜杠命令(`command\`,5 个) | 命令 | 功能 | | --- | --- | | `/code-review-graph-build-graph` | 构建/更新图谱 | | `/code-review-graph-unified-review` | diff 三层统一审查(只读) | | `/code-review-graph-project-review` | 项目级审查:全项目或单功能(只读) | | `/code-review-graph-review-pr` | PR/branch diff 审查 | | `/code-review-graph-review-delta` | 自上次提交以来的变更审查 | ### 7.4 本地部署步骤(新机器/重建环境) ```powershell # 前置:Python 3.10+ 与 uv cd D:\code-review-graph\code-review-graph-main uv sync # 按 uv.lock 重建 .venv(国内网络先设 UV_INDEX_URL 镜像) .\.venv\Scripts\code-review-graph.exe --version # 应输出 2.5.x ``` **配置 opencode.json(全局 MCP 注册)** 文件位于 `%USERPROFILE%\.config\opencode\opencode.json`,将 code-review-graph 段加入 `mcp` 对象 (若已有 `plugin`、`playwright` 等其他配置项则保留不动): ```json "code-review-graph": { "type": "local", "command": [ "D:\\code-review-graph\\code-review-graph-main\\.venv\\Scripts\\code-review-graph.exe", "serve", "--repo", "D:\\AuraSpace" ], "timeout": 600000, "env": { "CRG_REPO_ROOT": "D:\\AuraSpace" } } ``` 按新机器实际修改 3 处:`command[0]` 的 exe 绝对路径、`--repo` 的仓库根、`env.CRG_REPO_ROOT`。 项目级 `.mcp.json`(可选)参考 §7.1。 然后核对 §7.1 的 `.mcp.json` 与本节 opencode.json 中的绝对路径与新机一致, 复制 7.2/7.3 的 skills 与 commands,重启 opencode 即生效。 > **使用前提**:先构建图谱(首次 `code-review-graph build` 或 `/code-review-graph-build-graph`), > 否则图谱工具返回 `not_ready`。 --- ## 8. 配置与环境变量 ### 8.1 排除路径(`.code-review-graphignore`) 在仓库根目录创建 `.code-review-graphignore` 排除已跟踪文件的索引: ``` generated/** *.generated.ts vendor/** node_modules/** ``` > git 仓库中默认只索引被跟踪文件(`git ls-files`),gitignore 文件自动跳过。 > `.code-review-graphignore` 用于排除已跟踪文件或 git 不可用的场景。 ### 8.2 可选依赖组 ```bash pip install "code-review-graph[embeddings]" # 本地向量 embedding(sentence-transformers) pip install "code-review-graph[google-embeddings]" # Google Gemini embeddings pip install "code-review-graph[communities]" # 社区检测(igraph) pip install "code-review-graph[enrichment]" # Python 调用解析富化(Jedi) pip install "code-review-graph[eval]" # 评估基准 pip install "code-review-graph[wiki]" # Wiki 生成 + LLM 摘要(ollama) pip install "code-review-graph[all]" # 全部可选依赖 ``` 源码部署时对应 `uv sync --extra ` 或在 venv 内 `pip install -e .[]`。 ### 8.3 环境变量 | 变量 | 描述 | 默认 | | --- | --- | --- | | `CRG_REPO_ROOT` | 显式指定仓库根(opencode 全局配置中使用) | - | | `CRG_DATA_DIR` | 覆盖图谱数据库与生成产物的目录 | - | | `CRG_GIT_TIMEOUT` | Git 操作超时(秒) | `30` | | `CRG_TOOLS` | serve 时暴露的 MCP 工具允许列表(逗号分隔) | - | | `CRG_TOOL_TIMEOUT` | 有界 MCP 工具的可选超时(秒,`0` 禁用) | `0` | | `CRG_MAX_IMPACT_NODES` | 影响分析中最多包含的节点数 | `500` | | `CRG_MAX_IMPACT_DEPTH` | 爆炸半径分析搜索深度 | `2` | | `CRG_MAX_BFS_DEPTH` | 图谱遍历最大深度 | `15` | | `CRG_MAX_SEARCH_RESULTS` | 搜索结果数上限 | `20` | | `CRG_MAX_CHANGED_FUNCS` | 单次变更报告分析的最大变更函数数 | `500` | | `CRG_MAX_TRANSITIVE_FRONTIER` | 传递调用方/被调用方展开的最大前沿大小 | `50` | | `CRG_RECURSE_SUBMODULES` | 设为 `1`/`true`/`yes` 时包含 git 子模块文件 | - | | `CRG_SERIAL_PARSE` | 设为 `1` 禁用并行解析(调试用) | - | | `NO_COLOR` | 设置后禁用终端 ANSI 颜色 | - | **Embedding 相关**(可选功能,全部默认关闭): | 变量 | 描述 | 默认 | | --- | --- | --- | | `CRG_EMBEDDING_MODEL` | 本地 embedding 默认模型 | `all-MiniLM-L6-v2` | | `GOOGLE_API_KEY` | Google Gemini embedding 的 API key | - | | `MINIMAX_API_KEY` | MiniMax embedding 的 API key | - | | `VOYAGE_API_KEY` / `CRG_VOYAGE_*` | Voyage embedding 密钥与模型/维度/批大小等参数 | `voyage-code-3` | | `CRG_OPENAI_BASE_URL` / `CRG_OPENAI_API_KEY` / `CRG_OPENAI_MODEL` | OpenAI 兼容端点(真实 OpenAI、Azure、new-api、LiteLLM、vLLM、LocalAI 等) | - | | `CRG_ACCEPT_CLOUD_EMBEDDINGS` | 显式确认后抑制云端 embedding 出口警告 | - | | `CRG_ALLOW_REMOTE_CODE` | 允许需要 `trust_remote_code=True` 的 HuggingFace 模型 | `0` | 隐私说明:embedding 只处理标识符、签名、结构上下文与首段 docstring 摘要, **不传输函数体**;例行构建默认不刷新 embedding,刷新需显式传 provider + model。 ### 8.4 语言覆盖 解析器覆盖函数、类、导入、调用点、继承与测试检测: - **Web**:JavaScript / TypeScript / TSX、PHP、Ruby、Vue/Svelte SFC、Astro、Blade - **后端**:Python、Go、Java、C/C++、C#、VB.NET、Kotlin、Scala、Elixir、R - **系统**:Rust、Zig、Objective-C、Nix、Shell、Verilog/SystemVerilog、SQL - **移动**:Swift、Kotlin、Objective-C - **脚本**:Perl / Perl XS、Lua/Luau、PowerShell、Julia、ReScript、GDScript - **配置/结构**:Terraform/OpenTofu(`.tf`)、Ansible playbook/role/task、Solidity、Dart - **笔记本**:Jupyter / Databricks(`.ipynb`) > 通用 YAML 不视为源码。PHP 项目额外获得 Composer PSR-4 解析、Blade 引用与 > Laravel Route/Eloquent 语义边(基于证据门控)。 ### 8.5 自定义语言(无需改代码) 在仓库 `.code-review-graph/languages.toml` 将扩展名映射到 `tree_sitter_language_pack` 中任意已捆绑语法,并声明函数/类/导入/调用的 tree-sitter 节点类型: ```toml [languages.erlang] extensions = [".erl"] grammar = "erlang" function_node_types = ["function_clause"] class_node_types = ["record_decl"] import_node_types = ["import_attribute"] call_node_types = ["call"] ``` 通用 tree-sitter 遍历器即可完成提取;内置语言永远不会被覆盖。 详见本仓库 `docs/CUSTOM_LANGUAGES.md`。 - **如何验证工具正常工作?** `code-review-graph status`、`detect-changes --brief`, 或在 MCP 客户端中查看 code-review-graph 服务是否列出工具。 - **图谱何时需要重建?** 日常由 watch/hooks/crg-daemon 自动增量维护;仅在切换分支大范围 变更、怀疑图谱过期或升级版本后建议全量 `build`。 - **审查会修改我的代码吗?** 不会。三种审查工作流全程只读,报告落盘于 `docs/reviews/`(或指定的 `output_path`),修复决定始终由人工执行。 - **MCP 报 not_ready?** 该仓库尚未构建图谱,先运行一次 `build`。