Files
code-review-graph/CODE_REVIEW_GRAPH_ZH.md
T

567 lines
30 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 Prompts7 个)](#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-reviewdiff/ 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_reportHTML + 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-reviewdiff 审查) | 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` 确定 tierfast / 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` | 为全部图节点计算向量 embeddinglocal/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 Prompts7 个)
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 <name> # 仅配置单个平台
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 <ref> # 指定 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 <path> [--dry-run] # 从图谱移除已解析文件(免全量重建)
code-review-graph embed --provider local # 计算 embedding--model all-MiniLM-L6-v2
```
通用参数:绝大多数命令支持 `--repo <root>` 显式指定仓库根(默认自动探测);
`--data-dir` 可覆盖图谱数据目录。
### 6.3 分析与审查
```bash
code-review-graph detect-changes --brief # 风险面板 + token 节省估算(只读)
code-review-graph detect-changes --base <ref> # 指定 diff 基线(默认 HEAD~1
code-review-graph detect-changes --churn # 风险评分加入变更频率因子
code-review-graph impact --files <path>... # 变更爆炸半径(--depth/--max-results/--base
code-review-graph query <pattern> <target> # 图谱关系查询(callers_of/callees_of/imports_of 等)
code-review-graph search <query> [--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 <path> [--alias] # 注册仓库到多仓注册表
code-review-graph unregister <path_or_alias> # 移除注册
code-review-graph repos # 列出已注册仓库
code-review-graph eval [--benchmark ...] [--all] [--report] # 评估基准
code-review-graph serve # 启动 MCP stdio 服务
code-review-graph serve --repo <root> # 指定仓库根
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]" # 本地向量 embeddingsentence-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 <name>` 或在 venv 内 `pip install -e .[<name>]`
### 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`