coderev-cli 1.0.18 → 1.0.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,811 +1,810 @@
1
- # coderev-cli
2
-
3
- > 多智能体 AI 代码审查工具 — Security / Bug / Quality 三个 Agent 并行审查,带置信度评分和自动修复。
4
-
5
- [![npm version](https://img.shields.io/npm/v/coderev-cli)](https://www.npmjs.com/package/coderev-cli)
6
- [![GitHub Sponsors](https://img.shields.io/github/sponsors/jishuanjimingtian)](https://github.com/sponsors/jishuanjimingtian)
7
-
8
- ---
9
-
10
- > 🌟 **Support coderev!** If you find this tool useful, consider [sponsoring on GitHub](https://github.com/sponsors/jishuanjimingtian) or buying me a coffee.
11
- >
12
- > 如果这个工具对你有帮助,可以考虑[在 GitHub 上赞助](https://github.com/sponsors/jishuanjimingtian)支持持续开发!
13
-
14
- ---
15
-
16
- ## 目录
17
-
18
- - [项目介绍](#项目介绍)
19
- - [安装](#安装)
20
- - [快速上手](#快速上手)
21
- - [命令详解](#命令详解)
22
- - [coderev review(核心审查)](#coderev-review核心审查)
23
- - [coderev fix(自动修复)](#coderev-fix自动修复)
24
- - [coderev hook(Git Hooks)](#coderev-hookgit-hooks)
25
- - [coderev stats(统计看板)](#coderev-stats统计看板)
26
- - [coderev cache(缓存管理)](#coderev-cache缓存管理)
27
- - [coderev config(配置管理)](#coderev-config配置管理)
28
- - [coderev init(初始化)](#coderev-init初始化)
29
- - [coderev serve(GitHub App 自动审查)](#coderev-servegithub-app-自动审查)
30
- - [配置详解](#配置详解)
31
- - [平台集成](#平台集成)
32
- - [CI/CD 集成](#cicd-集成)
33
- - [FAQ / 常见问题](#faq--常见问题)
34
-
35
- ---
36
-
37
- ## 项目介绍
38
-
39
- **coderev 是什么?**
40
-
41
- coderev(Code Review 缩写)是一个**多智能体 AI 代码审查 CLI 工具**。你扔给它一段代码 diff,它会并行启动 3 个 AI Agent,从**安全、缺陷、质量**三个维度审查,然后汇总成结构化的审查报告。
42
-
43
- **为什么要用 coderev?**
44
-
45
- | 场景 | 不用 coderev | 用 coderev |
46
- |------|-------------|-----------|
47
- | 每次提交前 | 凭肉眼检查或忘了检查 | 自动跑三个维度审查 |
48
- | 审查同事的 PR | 逐行看,容易漏 | AI 先扫一遍,你只看高置信度 issue |
49
- | 安全审计 | 依赖经验,覆盖不全 | OWASP 级别检查 |
50
- | 项目代码质量把控 | 看个人标准和心情 | 统一的规则引擎 + 置信度评分 |
51
-
52
- **适用人群**
53
- - 独立开发者 — 提交前自动把关,减少 Bug
54
- - 团队/开源维护者 — PR 接入 AI 初审,提高审查效率
55
- - CI/CD 流水线 — 集成到 CI,自动拦截高风险代码
56
-
57
- ---
58
-
59
- ## 安装
60
-
61
- ### 全局安装(推荐)
62
-
63
- ```bash
64
- npm install -g coderev-cli
65
- ```
66
-
67
- > **要求 Node.js >= 18**,可使用 `node -v` 检查版本。
68
-
69
- ### 验证安装
70
-
71
- ```bash
72
- coderev --help
73
- ```
74
-
75
- 看到命令列表则安装成功。
76
-
77
- ### 更新
78
-
79
- ```bash
80
- npm update -g coderev-cli
81
- ```
82
-
83
- ---
84
-
85
- ## 快速上手
86
-
87
- ### 第 1 步:初始化
88
-
89
- 在项目目录中执行,生成默认配置:
90
-
91
- ```bash
92
- coderev init
93
- ```
94
-
95
- 会在当前目录创建 `.coderevrc.json` 配置文件。
96
-
97
- ### 第 2 步:设置 API Key
98
-
99
- coderev 需要调用 AI API 来审查代码。支持 OpenAI 和 DeepSeek。
100
-
101
- ```bash
102
- # Windows PowerShell
103
- $env:DEEPSEEK_API_KEY="sk-your-key-here"
104
-
105
- # Linux / macOS
106
- export DEEPSEEK_API_KEY="sk-your-key-here"
107
- ```
108
-
109
- 也可以写入配置文件(见下方「配置详解」)。
110
-
111
- ### 第 3 步:运行审查
112
-
113
- #### 审查暂存区变更(最常用的方式)
114
-
115
- ```bash
116
- git add .
117
- coderev review
118
- ```
119
-
120
- #### 审查当前分支的未提交变更
121
-
122
- ```bash
123
- coderev review --diff
124
- ```
125
-
126
- #### 审查某个 commit
127
-
128
- ```bash
129
- coderev review --commit HEAD~1
130
- ```
131
-
132
- #### 审查 PR
133
-
134
- ```bash
135
- coderev review --pr 42
136
- ```
137
-
138
- ### 第 4 步:查看报告
139
-
140
- 审查结果会直接输出在终端。如果开启 HTML 模式,可以生成可视化报告:
141
-
142
- ```bash
143
- coderev review --output html > report.html
144
- # 浏览器打开 report.html
145
- ```
146
-
147
- ---
148
-
149
- ## 命令详解
150
-
151
- ### coderev review(核心审查)
152
-
153
- **作用**:审查代码差异并输出审查报告。这是 coderev 最核心的命令。
154
-
155
- **使用方式**:
156
-
157
- ```bash
158
- coderev review [选项]
159
- ```
160
-
161
- **默认可选参数**:
162
-
163
- | 参数 | 说明 | 示例 |
164
- |------|------|------|
165
- | `--diff` | 审查当前分支未提交的变更(与最近 commit 对比) | `coderev review --diff` |
166
- | `--commit <ref>` | 审查指定 commit | `coderev review --commit abc123` |
167
- | `--staged` | 审查暂存区(默认行为) | `coderev review` |
168
- | `--single` | 单 Agent 模式(只用 1 个 Agent,省 token,v0.2 兼容) | `coderev review --single` |
169
- | `--min-confidence <0-100>` | 置信度阈值,低于此值的结果不显示(默认 60) | `coderev review --min-confidence 80` |
170
- | `--no-cache` | 跳过缓存,强制重新审查 | `coderev review --no-cache` |
171
- | `--format <format>` | 输出格式:`terminal`(终端) / `json` / `html` / `markdown` | `coderev review --format json` |
172
- | `--output <type>` | 输出方式:`terminal`(终端)/ `json` / `html` / `markdown` | `coderev review --output html` |
173
- | `--audit` | 安全审计模式,重点关注安全问题 | `coderev review --audit` |
174
- | `--incremental` | 增量模式,只审查 diff 中新增和变更的行(忽略删除的行) | `coderev review --incremental` |
175
- | `--interactive` | 交互式模式,逐条审查 issue 并选择是否修复 | `coderev review --interactive` |
176
- | `--ci` | CI 模式,发现问题时以非零退出码终止 | `coderev review --ci` |
177
- | `--pr <value>` | 审查 Pull Request,格式 `owner/repo#number` 或仅 `number`(自动检测仓库) | `coderev review --pr jishuanjimingtian/coderev#42` |
178
- | `--post` | 审查 PR 后自动回贴评论(需配合 `--pr`) | `coderev review --pr 42 --post` |
179
- | `--inline` | 审查 PR 后以行内方式回贴评论(需配合 `--pr`) | `coderev review --pr 42 --inline` |
180
-
181
- **使用示例**:
182
-
183
- ```bash
184
- # 最简用法:审查暂存区
185
- coderev review
186
-
187
- # 审查某个 PR 并回贴评论
188
- coderev review --pr jishuanjimingtian/coderev#42 --post
189
-
190
- # 终端输出 + 高置信度要求(减少误报)
191
- coderev review --min-confidence 80
192
-
193
- # CI 中使用,发现问题就报错
194
- coderev review --ci --min-confidence 70
195
-
196
- # 生成 HTML 报告
197
- coderev review --format html > review-report.html
198
-
199
- # 交互式审查并修复
200
- coderev review --interactive
201
-
202
- # 只审查新增的代码(增量模式)
203
- coderev review --incremental
204
-
205
- # 通过管道传入 diff(支持任意 diff 输入)
206
- git diff main | coderev review
207
- ```
208
-
209
- #### --interactive 交互式修复详解
210
-
211
- **作用**:逐条展示每个审查发现的问题,让你决定是否用 AI 生成补丁自动修复。
212
-
213
- **工作流程**:
214
-
215
- ```
216
- coderev review --interactive
217
- ```
218
-
219
- 终端会依次展示每个 issue:
220
-
221
- ```
222
- Issue #1 of 3
223
- ● [high] [error] SQL injection risk in query construction
224
- File: src/db.js:42
225
- Suggestion: Use parameterized queries
226
-
227
- [a]pply fix / [s]kip / [q]uit > a
228
- ```
229
-
230
- **交互选项**:
231
-
232
- | 按键 | 作用 |
233
- |------|------|
234
- | `a` | Apply fix — AI 生成补丁并应用到文件 |
235
- | `s` | Skip — 跳过当前 issue |
236
- | `q` | Quit — 退出交互模式 |
237
-
238
- #### --ci CI 模式详解
239
-
240
- **作用**:专为 CI/CD 管道设计。如果代码中发现任何 issue(且置信度高于阈值),coderev 以非零退出码退出,中断管道执行。
241
-
242
- ```bash
243
- # 常规使用
244
- coderev review --ci
245
-
246
- # 配合高阈值,只拦截确定严重的问题
247
- coderev review --ci --min-confidence 80
248
-
249
- # 结合 JSON 输出,供上游 CI 脚本处理
250
- coderev review --ci --format json
251
- ```
252
-
253
- **在 CI 配置中的用法**(例如 GitHub Actions):
254
-
255
- ```yaml
256
- - name: coderev check
257
- run: |
258
- git fetch origin main
259
- git diff origin/main...HEAD | coderev review --ci
260
- ```
261
-
262
- #### --incremental 增量审查详解
263
-
264
- **作用**:默认情况下,coderev 会审查整个 diff 的上下文。增量模式下,**只关注新增和修改的行**,忽略被删除的旧代码。适用于:
265
-
266
- - 大型代码库重构,不想看大段删除
267
- - 只想关注"引入的新代码"是否有问题
268
- - PR 审查时快速聚焦变更内容
269
-
270
- ```bash
271
- coderev review --incremental
272
- ```
273
-
274
- #### HTML 报告
275
-
276
- **作用**:生成可视化的 HTML 审查报告,支持深色/浅色模式自动适配,方便分享或归档。
277
-
278
- ```bash
279
- coderev review --output html > report.html
280
- ```
281
-
282
- ---
283
-
284
- ### coderev fix(自动修复)
285
-
286
- **作用**:根据审查结果生成补丁文件,或直接应用到代码中。
287
-
288
- ```bash
289
- coderev fix --file <diff文件>
290
- ```
291
-
292
- | 参数 | 说明 | 示例 |
293
- |------|------|------|
294
- | `--file <path>` | **必填**,指定包含 diff 的文件路径 | `coderev fix --file changes.diff` |
295
- | `--apply` | 生成补丁后**直接应用到文件** | `coderev fix --file changes.diff --apply` |
296
-
297
- **使用示例**:
298
-
299
- ```bash
300
- # 先生成 diff
301
- git diff > changes.diff
302
-
303
- # 审查并生成修复建议(不自动应用)
304
- coderev fix --file changes.diff
305
-
306
- # 审查并直接应用补丁
307
- coderev fix --file changes.diff --apply
308
- ```
309
-
310
- ---
311
-
312
- ### coderev hook(Git Hooks)
313
-
314
- **作用**:安装 Git hooks,让你在 git 操作时自动触发代码审查。支持 pre-commit(提交前)和 pre-push(推送前)。
315
-
316
- ```bash
317
- coderev hook install [hook类型] [选项]
318
- ```
319
-
320
- | 参数 | 说明 | 示例 |
321
- |------|------|------|
322
- | `install` | 安装 hook | `coderev hook install` |
323
- | `install pre-commit` | 安装 pre-commit hook(提交前审查) | `coderev hook install pre-commit` |
324
- | `install pre-push` | 安装 pre-push hook(推送前审查) | `coderev hook install pre-push` |
325
- | `--min-score <number>` | 设置最低置信度阈值 | `coderev hook install pre-commit --min-score 70` |
326
- | `remove` | 移除已安装的 hook | `coderev hook remove` |
327
-
328
- **使用示例**:
329
-
330
- ```bash
331
- # 安装默认 hook(pre-commit)
332
- coderev hook install
333
-
334
- # 安装 pre-commit,设置置信度 70
335
- coderev hook install pre-commit --min-score 70
336
-
337
- # 安装 pre-push
338
- coderev hook install pre-push
339
-
340
- # 移除所有 hook
341
- coderev hook remove
342
- ```
343
-
344
- **安装后效果**:
345
- - `git commit` 时 → 自动审查暂存区代码,发现问题会阻止提交
346
- - `git push` 时 → 自动审查将要推送的变更
347
-
348
- ---
349
-
350
- ### coderev stats(统计看板)
351
-
352
- **作用**:查看代码审查的历史统计,包括审查次数、发现的 issue 数量、类型分布等。
353
-
354
- ```bash
355
- coderev stats [周期]
356
- ```
357
-
358
- | 参数 | 说明 | 示例 |
359
- |------|------|------|
360
- | (无参数) | 查看总体统计数据 | `coderev stats` |
361
- | `week` | 本周统计 | `coderev stats week` |
362
- | `month` | 本月统计 | `coderev stats month` |
363
-
364
- **输出示例**(实际内容取决于缓存数据):
365
-
366
- ```
367
- 📊 coderev 统计
368
- ═══════════════════
369
- 总审查次数: 47
370
- 总发现 issue: 156
371
- 安全: 23 (14.7%)
372
- 缺陷: 67 (42.9%)
373
- 质量: 66 (42.3%)
374
- ═══════════════════
375
- ```
376
-
377
- ---
378
-
379
- ### coderev cache(缓存管理)
380
-
381
- **作用**:管理审查结果缓存,避免重复审查相同的代码。
382
-
383
- ```bash
384
- coderev cache <子命令>
385
- ```
386
-
387
- | 子命令 | 说明 | 示例 |
388
- |--------|------|------|
389
- | `status` | 查看缓存状态(缓存条目数、过期时间) | `coderev cache status` |
390
- | `clear` | 清空所有缓存 | `coderev cache clear` |
391
-
392
- **缓存机制**:
393
- - 基于代码 diff 的 SHA256 哈希值
394
- - 缓存有效期 24 小时
395
- - 同段代码反复审查时直接返回缓存结果,节省 API 调用
396
-
397
- ---
398
-
399
- ### coderev config(配置管理)
400
-
401
- **作用**:查看或管理当前配置。
402
-
403
- ```bash
404
- coderev config <子命令>
405
- ```
406
-
407
- | 子命令 | 说明 | 示例 |
408
- |--------|------|------|
409
- | `show` | 显示当前生效的完整配置 | `coderev config show` |
410
-
411
- ---
412
-
413
- ### coderev init(初始化)
414
-
415
- **作用**:在当前项目目录生成 `.coderevrc.json` 配置文件。
416
-
417
- ```bash
418
- coderev init
419
- ```
420
-
421
- 生成的文件内容:
422
-
423
- ```json
424
- {
425
- "ai": {
426
- "provider": "deepseek",
427
- "temperature": 0.3,
428
- "maxTokens": 4096
429
- },
430
- "rules": {
431
- "maxLineLength": 100,
432
- "predefined": ["security", "performance", "style"]
433
- }
434
- }
435
- ```
436
-
437
- 如果项目已有配置文件,执行 `coderev init` 会提示是否覆盖。
438
-
439
- ---
440
-
441
- ### coderev serve(GitHub App 自动审查)
442
-
443
- **作用**:启动 webhook 服务器,监听 GitHub App 的 pull_request 事件,自动对每个新 PR 进行代码审查。
444
-
445
- **适用场景**:团队仓库每个 PR 自动审查 / 开源项目自动反馈 / CI/CD 增强
446
-
447
- **参数**:
448
-
449
- | 参数 | 说明 | 示例 |
450
- |------|------|------|
451
- | `--port` | 服务器端口(默认 3000) | `--port 8080` |
452
- | `--app-id` | GitHub App ID | `--app-id 123456` |
453
- | `--private-key` | GitHub App 私钥 PEM | `--private-key "$(cat key.pem)"` |
454
- | `--webhook-secret` | Webhook 签名密钥 | `--webhook-secret xxx` |
455
- | `--review-mode` | 审查模式(comment/inline/check) | `--review-mode inline` |
456
- | `--auto-approve` | 无问题 PR 自动 approve | `--auto-approve` |
457
- | `--min-confidence` | 最低置信度阈值 | `--min-confidence 70` |
458
-
459
- **示例**:
460
-
461
- ```bash
462
- # 启动服务器
463
- coderev serve --app-id 123456 --webhook-secret mysecret --private-key "$(cat /path/to/key.pem)"
464
-
465
- # 使用环境变量
466
- GITHUB_APP_ID=123456 GITHUB_APP_WEBHOOK_SECRET=mysecret coderev serve
467
- ```
468
-
469
- **事件处理**:
470
- - `pull_request.opened` — 新 PR 自动审查
471
- - `pull_request.synchronize` — PR 更新时重新审查
472
- - `pull_request.reopened` — 重新审查
473
- - Draft PR 和 Bot PR 默认跳过
474
-
475
- **输出**:审查完成后自动:
476
- 1. 发布 PR review comment(Markdown 格式)
477
- 2. 设置 commit status(pending → success/failure/neutral)
478
- 3. 可选 auto-approve(无问题的 PR)
479
-
480
- > 完整部署指南见 [docs/github-app.md](docs/github-app.md)
481
-
482
- ---
483
-
484
- ## 配置详解
485
-
486
- ### 配置加载顺序
487
-
488
- coderev 按以下优先级加载配置(高的优先):
489
-
490
- 1. **CLI 参数**(命令行传入)
491
- 2. **配置文件**(`.coderevrc.json` / `.coderevrc` / `coderev.config.json`)
492
- 3. **环境变量**(环境变量中设置的 API Key)
493
- 4. **默认值**
494
-
495
- 配置文件会自动从**当前目录向父目录逐级查找**,找到第一个便停止。
496
-
497
- ### 完整配置项参考
498
-
499
- ```json
500
- {
501
- "ai": {
502
- "provider": "deepseek",
503
- "model": "deepseek-chat",
504
- "temperature": 0.3,
505
- "maxTokens": 4096,
506
- "apiKey": "",
507
- "apiKeyEnv": "DEEPSEEK_API_KEY",
508
- "baseURL": ""
509
- },
510
- "rules": {
511
- "maxLineLength": 100,
512
- "predefined": ["security", "performance", "style"],
513
- "autoLanguage": true,
514
- "custom": []
515
- },
516
- "output": {
517
- "format": "terminal",
518
- "includeScore": true
519
- }
520
- }
521
- ```
522
-
523
- #### ai(AI 配置)
524
-
525
- | 字段 | 类型 | 默认值 | 说明 |
526
- |------|------|--------|------|
527
- | `provider` | string | `"openai"` | AI 提供商,支持 `"openai"` / `"deepseek"` |
528
- | `model` | string | 取决于 provider | 模型名称 |
529
- | `temperature` | number | `0.3` | 生成温度(0-1),越低越确定越保守 |
530
- | `maxTokens` | number | `4096` | 每次请求最大输出 token 数 |
531
- | `apiKey` | string | `""` | 直接在配置文件中写入 API Key |
532
- | `apiKeyEnv` | string | `"OPENAI_API_KEY"` | 读取环境变量中的 API Key |
533
- | `baseURL` | string | `""` | 自定义 API 地址,兼容 OpenAI 协议的任何服务 |
534
-
535
- **支持的 Provider 默认值**:
536
-
537
- | provider | 默认模型 | 默认 API 地址 |
538
- |----------|---------|--------------|
539
- | `openai` | `gpt-4o` | `https://api.openai.com` |
540
- | `deepseek` | `deepseek-chat` | `https://api.deepseek.com` |
541
-
542
- **对接任意兼容 OpenAI API 的服务**(如 Azure OpenAI、本地 LLM):
543
-
544
- ```json
545
- {
546
- "ai": {
547
- "provider": "openai",
548
- "baseURL": "https://your-custom-endpoint.com/v1",
549
- "apiKey": "sk-your-key"
550
- }
551
- }
552
- ```
553
-
554
- #### rules(规则引擎配置)
555
-
556
- | 字段 | 类型 | 默认值 | 说明 |
557
- |------|------|--------|------|
558
- | `maxLineLength` | number | `100` | 最大行长度检查,超过会警告 |
559
- | `predefined` | string[] | `["security","performance","style"]` | 启用的预定义规则集 |
560
- | `autoLanguage` | boolean | `true` | 是否自动检测 diff 语言并追加专项规则 |
561
- | `custom` | object[] | `[]` | 自定义规则数组 |
562
-
563
- **预定义规则集一览**:
564
-
565
- 通过配置 `rules.predefined` 数组,可以自由组合启用以下规则集:
566
-
567
- | 名称 | 检查重点 |
568
- |------|---------|
569
- | `security` | SQL/NoSQL 注入、XSS、SSRF、CSRF、硬编码密钥、认证缺陷、授权缺失 |
570
- | `performance` | 不必要的循环、大对象未释放、N+1 查询、内存泄漏、冗余计算 |
571
- | `style` | 空格/缩进不统一、未使用的 import/变量、分号规范、命名约定 |
572
- | `typescript` | 非严格模式、滥用 any、泛型使用不当、类型断言滥用、枚举误用 |
573
- | `react` | hooks 规则违反、缺少 key props、函数组件命名、副作用清理 |
574
- | `node` | 未捕获异常、异步回调链、文件 I/O 未关闭、路径遍历 |
575
- | `naming` | 驼峰 vs 帕斯卡命名规范、常量大写、函数命名动词化 |
576
- | `testing` | 断言覆盖不足、边界条件缺失、测试间耦合、输出不明确 |
577
-
578
- **启用示例**:
579
-
580
- ```json
581
- {
582
- "rules": {
583
- "predefined": ["security", "typescript", "react", "naming", "testing"]
584
- }
585
- }
586
- ```
587
-
588
- #### rules.autoLanguage 自动语言检测
589
-
590
- coderev 会自动检查 diff 中文件的扩展名,追加对应的语言专项规则:
591
-
592
- | 语言 | 扩展名 | 检查重点 |
593
- |------|--------|---------|
594
- | JavaScript | `.js`, `.jsx`, `.mjs` | async/await 链、== vs ===、内存泄漏、循环依赖 |
595
- | TypeScript | `.ts`, `.tsx` | strict 模式、禁止 any、泛型约束、类型断言 |
596
- | Python | `.py` | PEP 8 规范、异常类型指定、mutable 默认参数、async 用法 |
597
- | Rust | `.rs` | unsafe 块审计、unwrap/expect 滥用、ownership 问题 |
598
- | Go | `.go` | error 忽略、goroutine 泄漏、context 传播、data race |
599
- | Java | `.java` | null 处理、checked exception、== vs .equals()、线程安全 |
600
- | SQL | `.sql` | 注入防护、N+1 查询、索引缺失、大 IN-clause |
601
-
602
- 可通过 `rules.autoLanguage: false` 关闭此功能。
603
-
604
- #### rules.custom 自定义规则
605
-
606
- **作用**:针对团队或项目的特定规范,编写专属审查规则。
607
-
608
- ```json
609
- {
610
- "rules": {
611
- "custom": [
612
- {
613
- "name": "no-console-log",
614
- "severity": "warning",
615
- "message": "避免在生产代码中使用 console.log"
616
- },
617
- {
618
- "name": "require-error-boundary",
619
- "severity": "error",
620
- "message": "React 组件必须包裹 ErrorBoundary",
621
- "filePattern": "src/components/**/*.jsx"
622
- },
623
- {
624
- "name": "single-quote-string",
625
- "severity": "warning",
626
- "message": "请使用单引号",
627
- "filePattern": "src/**/*.ts"
628
- }
629
- ]
630
- }
631
- }
632
- ```
633
-
634
- | 字段 | 必填 | 类型 | 说明 |
635
- |------|------|------|------|
636
- | `name` | ✅ | string | 规则名称 |
637
- | `severity` | ✅ | string | `"error"` / `"warning"` / `"info"` |
638
- | `message` | ✅ | string | 审查时显示的提示文字 |
639
- | `filePattern` | ❌ | string | 可选,限定生效的文件 glob 模式,如 `src/**/*.ts` |
640
- | `enabled` | ❌ | boolean | 可选,设为 `false` 可临时禁用此规则 |
641
-
642
- #### output(输出配置)
643
-
644
- | 字段 | 类型 | 默认值 | 说明 |
645
- |------|------|--------|------|
646
- | `format` | string | `"terminal"` | 输出格式:`"terminal"` / `"json"` / `"html"` / `"markdown"` |
647
- | `includeScore` | boolean | `true` | 是否显示置信度评分 |
648
-
649
- ### .coderevignore 忽略文件
650
-
651
- **作用**:指定 coderev 审查时跳过哪些文件或目录。
652
-
653
- 在项目根目录创建 `.coderevignore` 文件,语法同 `.gitignore`(glob 模式):
654
-
655
- ```
656
- # coderev ignore list
657
- *.min.js
658
- *.bundle.js
659
- package-lock.json
660
- yarn.lock
661
- vendor/
662
- dist/
663
- build/
664
- ```
665
-
666
- ### .coderevhint 项目上下文
667
-
668
- **作用**:给 AI 审查引擎提供项目背景,让它更准确理解你的代码。
669
-
670
- 在项目根目录创建 `.coderevhint` 文件:
671
-
672
- ```
673
- # 项目概况
674
- - Language: TypeScript
675
- - Framework: Next.js 14
676
- - Database: PostgreSQL
677
-
678
- # 编码规范
679
- - Prefer: 函数式组件、Tailwind CSS、Server Actions
680
- - Avoid: any 类型、使用 any 断言
681
- ```
682
-
683
- 也兼容 `CLAUDE.md` 格式,两者可共存。
684
-
685
- ### API Key 配置方式对比
686
-
687
- | 方式 | 安全性 | 适用场景 | 配置方法 |
688
- |------|--------|---------|---------|
689
- | 环境变量 | ✅ 最安全(不落盘) | 本地开发、CI 环境 | `$env:OPENAI_API_KEY="..."` |
690
- | 配置文件直接写 | ⚠️ 注意.gitignore | 本地个人使用 | `"apiKey": "..."` |
691
- | 配置文件引用 env | ✅ 安全 + 方便 | 推荐方式 | `"apiKeyEnv": "DEEPSEEK_API_KEY"` |
692
-
693
- > **推荐做法**:环境变量 + `apiKeyEnv`。既不在代码中暴露 key,又无需每次都手动设置。
694
-
695
- ---
696
-
697
- ## 平台集成
698
-
699
- ### 支持的 Git 平台
700
-
701
- coderev 支持四大平台,均支持 PR 审查和评论回贴:
702
-
703
- | 平台 | PR 审查 | 摘要评论 | 行内评论 | 自动检测 |
704
- |------|:-------:|:--------:|:--------:|:--------:|
705
- | GitHub | ✅ | ✅ | ✅ | ✅ |
706
- | GitLab | ✅ | ✅ | ✅ | ✅ |
707
- | Gitee | ✅ | ✅ | ❌ | ❌ 需完整格式 |
708
- | Bitbucket | ✅ | ✅ | ❌ | ❌ 需完整格式 |
709
-
710
- **使用方式**:
711
-
712
- ```bash
713
- # GitHub — 自动检测当前仓库
714
- coderev review --pr 42
715
-
716
- # 指定仓库(其他平台或跨平台)
717
- coderev review --pr owner/repo#42
718
-
719
- # 审查 + 回贴评论
720
- coderev review --pr 42 --post
721
-
722
- # 审查 + 行内评论(仅 GitHub/GitLab)
723
- coderev review --pr 42 --inline
724
- ```
725
-
726
- ---
727
-
728
- ## CI/CD 集成
729
-
730
- ### GitHub Actions
731
-
732
- 项目初始化时自动生成 `.github/workflows/coderev-review.yml`,在 PR 创建或更新时自动触发代码审查。
733
-
734
- **工作流说明**:
735
- - 触发条件:PR 打开、同步、重新打开
736
- - 执行内容:对比 PR 的 diff → coderev 审查 → 结果回贴到 PR 评论
737
- - 效果:每个 PR 自动获得一份 AI 审查报告
738
-
739
- ### 自定义 CI 集成
740
-
741
- 在任意 CI 管道中:
742
-
743
- ```bash
744
- # 对比当前分支与 main
745
- git fetch origin main
746
- git diff origin/main...HEAD | coderev review --ci --min-confidence 70
747
- ```
748
-
749
- 如果代码存在高置信度问题,管道会以非零退出码中断,阻止合并。
750
-
751
- ---
752
-
753
- ## 架构
754
-
755
- ```
756
- 你的代码 (git diff / PR)
757
-
758
- ┌──────┼──────┐
759
- ▼ ▼ ▼
760
- ┌──────┐┌──────┐┌──────┐
761
- │ 🔒 ││ 🐛 ││ 📐 │
762
- │ 安全 ││ 缺陷 ││ 质量 │
763
- │ 审计 ││ 检测 ││ 检查 │
764
- └──┬───┘└──┬───┘└──┬───┘
765
- │ │ │
766
- └───────┼───────┘
767
-
768
- ┌──────────┐
769
- │ 合并 & │
770
- │ 置信度评分 │
771
- │ (0-100) │
772
- └────┬─────┘
773
-
774
- 结构化审查报告
775
- ```
776
-
777
- | Agent | 专注领域 |
778
- |-------|---------|
779
- | 🔒 安全审计 | SQL注入、XSS、SSRF、硬编码密钥、认证缺陷 |
780
- | 🐛 缺陷检测 | 空指针、竞态条件、异步问题、逻辑错误 |
781
- | 📐 质量检查 | 代码复杂度、DRY、命名规范、异常处理 |
782
-
783
- 每个 issue 附带**置信度评分 (0-100)**,低于阈值(默认 60)自动过滤。多 Agent 发现的重复问题自动合并去重。
784
-
785
- ---
786
-
787
- ## FAQ / 常见问题
788
-
789
- ### Q:为什么审查结果为空?
790
- A:可能是代码本身没有问题,也可能是置信度低于阈值。可以尝试 `coderev review --min-confidence 0` 查看所有结果。
791
-
792
- ### Q:怎么换 API Key?
793
- A:重新设置环境变量即可,或在 `.coderevrc.json` 中修改 `ai.apiKey` / `ai.apiKeyEnv`。
794
-
795
- ### Q:不想用 DeepSeek,想用其他 AI?
796
- A:改成 `provider: "openai"`,再设置 `apiKeyEnv: "OPENAI_API_KEY"`。如果用的是兼容 OpenAI 协议的自定义 API,设置 `baseURL` 即可。
797
-
798
- ### Q:coderev 会泄漏我的代码吗?
799
- A:代码通过你的 API Key 发送到 AI 服务商。coderev 本身不会存储或转发你的代码。本地缓存仅存储在你自己机器上。
800
-
801
- ### Q:缓存能关掉吗?
802
- A:可以,审查时加 `--no-cache` 参数即可跳过缓存。
803
-
804
- ### Q:怎么给 coderev 加自己的规则?
805
- A:在 `.coderevrc.json` 的 `rules.custom` 数组中添加。详见上方「自定义规则」章节。
806
-
807
- ---
808
-
809
- ## License
810
-
811
- MIT
1
+ # coderev-cli
2
+
3
+ > 多智能体 AI 代码审查工具 — Security / Bug / Quality 三个 Agent 并行审查,带置信度评分和自动修复。
4
+
5
+ [![npm version](https://img.shields.io/npm/v/coderev-cli)](https://www.npmjs.com/package/coderev-cli)
6
+ [![GitHub Sponsors](https://img.shields.io/github/sponsors/jishuanjimingtian)](https://github.com/sponsors/jishuanjimingtian)
7
+
8
+ ---
9
+
10
+ > 🌟 **Support coderev!** If you find this tool useful, consider [sponsoring on GitHub](https://github.com/sponsors/jishuanjimingtian) or buying me a coffee.
11
+ >
12
+ > 如果这个工具对你有帮助,可以考虑[在 GitHub 上赞助](https://github.com/sponsors/jishuanjimingtian)支持持续开发!
13
+
14
+ ---
15
+
16
+ ## 目录
17
+
18
+ - [项目介绍](#项目介绍)
19
+ - [安装](#安装)
20
+ - [快速上手](#快速上手)
21
+ - [命令详解](#命令详解)
22
+ - [coderev review(核心审查)](#coderev-review核心审查)
23
+ - [coderev fix(自动修复)](#coderev-fix自动修复)
24
+ - [coderev hook(Git Hooks)](#coderev-hookgit-hooks)
25
+ - [coderev stats(统计看板)](#coderev-stats统计看板)
26
+ - [coderev cache(缓存管理)](#coderev-cache缓存管理)
27
+ - [coderev config(配置管理)](#coderev-config配置管理)
28
+ - [coderev init(初始化)](#coderev-init初始化)
29
+ - [coderev serve(GitHub App 自动审查)](#coderev-servegithub-app-自动审查)
30
+ - [配置详解](#配置详解)
31
+ - [平台集成](#平台集成)
32
+ - [CI/CD 集成](#cicd-集成)
33
+ - [FAQ / 常见问题](#faq--常见问题)
34
+
35
+ ---
36
+
37
+ ## 项目介绍
38
+
39
+ **coderev 是什么?**
40
+
41
+ coderev(Code Review 缩写)是一个**多智能体 AI 代码审查 CLI 工具**。你扔给它一段代码 diff,它会并行启动 3 个 AI Agent,从**安全、缺陷、质量**三个维度审查,然后汇总成结构化的审查报告。
42
+
43
+ **为什么要用 coderev?**
44
+
45
+ | 场景 | 不用 coderev | 用 coderev |
46
+ |------|-------------|-----------|
47
+ | 每次提交前 | 凭肉眼检查或忘了检查 | 自动跑三个维度审查 |
48
+ | 审查同事的 PR | 逐行看,容易漏 | AI 先扫一遍,你只看高置信度 issue |
49
+ | 安全审计 | 依赖经验,覆盖不全 | OWASP 级别检查 |
50
+ | 项目代码质量把控 | 看个人标准和心情 | 统一的规则引擎 + 置信度评分 |
51
+
52
+ **适用人群**
53
+ - 独立开发者 — 提交前自动把关,减少 Bug
54
+ - 团队/开源维护者 — PR 接入 AI 初审,提高审查效率
55
+ - CI/CD 流水线 — 集成到 CI,自动拦截高风险代码
56
+
57
+ ---
58
+
59
+ ## 安装
60
+
61
+ ### 全局安装(推荐)
62
+
63
+ ```bash
64
+ npm install -g coderev-cli
65
+ ```
66
+
67
+ > **要求 Node.js >= 18**,可使用 `node -v` 检查版本。
68
+
69
+ ### 验证安装
70
+
71
+ ```bash
72
+ coderev --help
73
+ ```
74
+
75
+ 看到命令列表则安装成功。
76
+
77
+ ### 更新
78
+
79
+ ```bash
80
+ npm update -g coderev-cli
81
+ ```
82
+
83
+ ---
84
+
85
+ ## 快速上手
86
+
87
+ ### 第 1 步:初始化
88
+
89
+ 在项目目录中执行,生成默认配置:
90
+
91
+ ```bash
92
+ coderev init
93
+ ```
94
+
95
+ 会在当前目录创建 `.coderevrc.json` 配置文件。
96
+
97
+ ### 第 2 步:设置 API Key
98
+
99
+ coderev 需要调用 AI API 来审查代码。支持 OpenAI 和 DeepSeek。
100
+
101
+ ```bash
102
+ # Windows PowerShell
103
+ $env:DEEPSEEK_API_KEY="sk-your-key-here"
104
+
105
+ # Linux / macOS
106
+ export DEEPSEEK_API_KEY="sk-your-key-here"
107
+ ```
108
+
109
+ 也可以写入配置文件(见下方「配置详解」)。
110
+
111
+ ### 第 3 步:运行审查
112
+
113
+ #### 审查暂存区变更(最常用的方式)
114
+
115
+ ```bash
116
+ git add .
117
+ coderev review
118
+ ```
119
+
120
+ #### 审查当前分支的未提交变更
121
+
122
+ ```bash
123
+ coderev review --diff
124
+ ```
125
+
126
+ #### 审查某个 commit
127
+
128
+ ```bash
129
+ coderev review --commit HEAD~1
130
+ ```
131
+
132
+ #### 审查 PR
133
+
134
+ ```bash
135
+ coderev review --pr 42
136
+ ```
137
+
138
+ ### 第 4 步:查看报告
139
+
140
+ 审查结果会直接输出在终端。如果开启 HTML 模式,可以生成可视化报告:
141
+
142
+ ```bash
143
+ coderev review --output html > report.html
144
+ # 浏览器打开 report.html
145
+ ```
146
+
147
+ ---
148
+
149
+ ## 命令详解
150
+
151
+ ### coderev review(核心审查)
152
+
153
+ **作用**:审查代码差异并输出审查报告。这是 coderev 最核心的命令。
154
+
155
+ **使用方式**:
156
+
157
+ ```bash
158
+ coderev review [选项]
159
+ ```
160
+
161
+ **默认可选参数**:
162
+
163
+ | 参数 | 说明 | 示例 |
164
+ |------|------|------|
165
+ | `--diff` | 审查当前分支未提交的变更(与最近 commit 对比) | `coderev review --diff` |
166
+ | `--commit <ref>` | 审查指定 commit | `coderev review --commit abc123` |
167
+ | `--staged` | 审查暂存区(默认行为) | `coderev review` |
168
+ | `--single` | 单 Agent 模式(只用 1 个 Agent,省 token,v0.2 兼容) | `coderev review --single` |
169
+ | `--min-confidence <0-100>` | 置信度阈值,低于此值的结果不显示(默认 60) | `coderev review --min-confidence 80` |
170
+ | `--no-cache` | 跳过缓存,强制重新审查 | `coderev review --no-cache` |
171
+ | `--format <format>` | 输出格式:`terminal`(终端) / `json` / `html` / `markdown` | `coderev review --format json` |
172
+ | `--output <type>` | 输出方式:`terminal`(终端)/ `json` / `html` / `markdown` | `coderev review --output html` |
173
+ | `--audit` | 安全审计模式,重点关注安全问题 | `coderev review --audit` |
174
+ | `--incremental` | 增量模式,只审查 diff 中新增和变更的行(忽略删除的行) | `coderev review --incremental` |
175
+ | `--interactive` | 交互式模式,逐条审查 issue 并选择是否修复 | `coderev review --interactive` |
176
+ | `--ci` | CI 模式,发现问题时以非零退出码终止 | `coderev review --ci` |
177
+ | `--pr <value>` | 审查 Pull Request,格式 `owner/repo#number` 或仅 `number`(自动检测仓库) | `coderev review --pr jishuanjimingtian/coderev#42` |
178
+ | `--post` | 审查 PR 后自动回贴评论(需配合 `--pr`) | `coderev review --pr 42 --post` |
179
+ | `--inline` | 审查 PR 后以行内方式回贴评论(需配合 `--pr`) | `coderev review --pr 42 --inline` |
180
+
181
+ **使用示例**:
182
+
183
+ ```bash
184
+ # 最简用法:审查暂存区
185
+ coderev review
186
+
187
+ # 审查某个 PR 并回贴评论
188
+ coderev review --pr jishuanjimingtian/coderev#42 --post
189
+
190
+ # 终端输出 + 高置信度要求(减少误报)
191
+ coderev review --min-confidence 80
192
+
193
+ # CI 中使用,发现问题就报错
194
+ coderev review --ci --min-confidence 70
195
+
196
+ # 生成 HTML 报告
197
+ coderev review --format html > review-report.html
198
+
199
+ # 交互式审查并修复
200
+ coderev review --interactive
201
+
202
+ # 只审查新增的代码(增量模式)
203
+ coderev review --incremental
204
+
205
+ # 通过管道传入 diff(支持任意 diff 输入)
206
+ git diff main | coderev review
207
+ ```
208
+
209
+ #### --interactive 交互式修复详解
210
+
211
+ **作用**:逐条展示每个审查发现的问题,让你决定是否用 AI 生成补丁自动修复。
212
+
213
+ **工作流程**:
214
+
215
+ ```
216
+ coderev review --interactive
217
+ ```
218
+
219
+ 终端会依次展示每个 issue:
220
+
221
+ ```
222
+ Issue #1 of 3
223
+ ● [high] [error] SQL injection risk in query construction
224
+ File: src/db.js:42
225
+ Suggestion: Use parameterized queries
226
+
227
+ [a]pply fix / [s]kip / [q]uit > a
228
+ ```
229
+
230
+ **交互选项**:
231
+
232
+ | 按键 | 作用 |
233
+ |------|------|
234
+ | `a` | Apply fix — AI 生成补丁并应用到文件 |
235
+ | `s` | Skip — 跳过当前 issue |
236
+ | `q` | Quit — 退出交互模式 |
237
+
238
+ #### --ci CI 模式详解
239
+
240
+ **作用**:专为 CI/CD 管道设计。如果代码中发现任何 issue(且置信度高于阈值),coderev 以非零退出码退出,中断管道执行。
241
+
242
+ ```bash
243
+ # 常规使用
244
+ coderev review --ci
245
+
246
+ # 配合高阈值,只拦截确定严重的问题
247
+ coderev review --ci --min-confidence 80
248
+
249
+ # 结合 JSON 输出,供上游 CI 脚本处理
250
+ coderev review --ci --format json
251
+ ```
252
+
253
+ **在 CI 配置中的用法**(例如 GitHub Actions):
254
+
255
+ ```yaml
256
+ - name: coderev check
257
+ run: |
258
+ git fetch origin main
259
+ git diff origin/main...HEAD | coderev review --ci
260
+ ```
261
+
262
+ #### --incremental 增量审查详解
263
+
264
+ **作用**:默认情况下,coderev 会审查整个 diff 的上下文。增量模式下,**只关注新增和修改的行**,忽略被删除的旧代码。适用于:
265
+
266
+ - 大型代码库重构,不想看大段删除
267
+ - 只想关注"引入的新代码"是否有问题
268
+ - PR 审查时快速聚焦变更内容
269
+
270
+ ```bash
271
+ coderev review --incremental
272
+ ```
273
+
274
+ #### HTML 报告
275
+
276
+ **作用**:生成可视化的 HTML 审查报告,支持深色/浅色模式自动适配,方便分享或归档。
277
+
278
+ ```bash
279
+ coderev review --output html > report.html
280
+ ```
281
+
282
+ ---
283
+
284
+ ### coderev fix(自动修复)
285
+
286
+ **作用**:根据审查结果生成补丁文件,或直接应用到代码中。
287
+
288
+ ```bash
289
+ coderev fix --file <diff文件>
290
+ ```
291
+
292
+ | 参数 | 说明 | 示例 |
293
+ |------|------|------|
294
+ | `--file <path>` | **必填**,指定包含 diff 的文件路径 | `coderev fix --file changes.diff` |
295
+ | `--apply` | 生成补丁后**直接应用到文件** | `coderev fix --file changes.diff --apply` |
296
+
297
+ **使用示例**:
298
+
299
+ ```bash
300
+ # 先生成 diff
301
+ git diff > changes.diff
302
+
303
+ # 审查并生成修复建议(不自动应用)
304
+ coderev fix --file changes.diff
305
+
306
+ # 审查并直接应用补丁
307
+ coderev fix --file changes.diff --apply
308
+ ```
309
+
310
+ ---
311
+
312
+ ### coderev hook(Git Hooks)
313
+
314
+ **作用**:安装 Git hooks,让你在 git 操作时自动触发代码审查。支持 pre-commit(提交前)和 pre-push(推送前)。
315
+
316
+ ```bash
317
+ coderev hook install [hook类型] [选项]
318
+ ```
319
+
320
+ | 参数 | 说明 | 示例 |
321
+ |------|------|------|
322
+ | `install` | 安装 hook | `coderev hook install` |
323
+ | `install pre-commit` | 安装 pre-commit hook(提交前审查) | `coderev hook install pre-commit` |
324
+ | `install pre-push` | 安装 pre-push hook(推送前审查) | `coderev hook install pre-push` |
325
+ | `--min-score <number>` | 设置最低置信度阈值 | `coderev hook install pre-commit --min-score 70` |
326
+ | `remove` | 移除已安装的 hook | `coderev hook remove` |
327
+
328
+ **使用示例**:
329
+
330
+ ```bash
331
+ # 安装默认 hook(pre-commit)
332
+ coderev hook install
333
+
334
+ # 安装 pre-commit,设置置信度 70
335
+ coderev hook install pre-commit --min-score 70
336
+
337
+ # 安装 pre-push
338
+ coderev hook install pre-push
339
+
340
+ # 移除所有 hook
341
+ coderev hook remove
342
+ ```
343
+
344
+ **安装后效果**:
345
+ - `git commit` 时 → 自动审查暂存区代码,发现问题会阻止提交
346
+ - `git push` 时 → 自动审查将要推送的变更
347
+
348
+ ---
349
+
350
+ ### coderev stats(统计看板)
351
+
352
+ **作用**:查看代码审查的历史统计,包括审查次数、发现的 issue 数量、类型分布等。
353
+
354
+ ```bash
355
+ coderev stats [周期]
356
+ ```
357
+
358
+ | 参数 | 说明 | 示例 |
359
+ |------|------|------|
360
+ | (无参数) | 查看总体统计数据 | `coderev stats` |
361
+ | `week` | 本周统计 | `coderev stats week` |
362
+ | `month` | 本月统计 | `coderev stats month` |
363
+
364
+ **输出示例**(实际内容取决于缓存数据):
365
+
366
+ ```
367
+ 📊 coderev 统计
368
+ ═══════════════════
369
+ 总审查次数: 47
370
+ 总发现 issue: 156
371
+ 安全: 23 (14.7%)
372
+ 缺陷: 67 (42.9%)
373
+ 质量: 66 (42.3%)
374
+ ═══════════════════
375
+ ```
376
+
377
+ ---
378
+
379
+ ### coderev cache(缓存管理)
380
+
381
+ **作用**:管理审查结果缓存,避免重复审查相同的代码。
382
+
383
+ ```bash
384
+ coderev cache <子命令>
385
+ ```
386
+
387
+ | 子命令 | 说明 | 示例 |
388
+ |--------|------|------|
389
+ | `status` | 查看缓存状态(缓存条目数、过期时间) | `coderev cache status` |
390
+ | `clear` | 清空所有缓存 | `coderev cache clear` |
391
+
392
+ **缓存机制**:
393
+ - 基于代码 diff 的 SHA256 哈希值
394
+ - 缓存有效期 24 小时
395
+ - 同段代码反复审查时直接返回缓存结果,节省 API 调用
396
+
397
+ ---
398
+
399
+ ### coderev config(配置管理)
400
+
401
+ **作用**:查看或管理当前配置。
402
+
403
+ ```bash
404
+ coderev config <子命令>
405
+ ```
406
+
407
+ | 子命令 | 说明 | 示例 |
408
+ |--------|------|------|
409
+ | `show` | 显示当前生效的完整配置 | `coderev config show` |
410
+
411
+ ---
412
+
413
+ ### coderev init(初始化)
414
+
415
+ **作用**:在当前项目目录生成 `.coderevrc.json` 配置文件。
416
+
417
+ ```bash
418
+ coderev init
419
+ ```
420
+
421
+ 生成的文件内容:
422
+
423
+ ```json
424
+ {
425
+ "ai": {
426
+ "provider": "deepseek",
427
+ "temperature": 0.3,
428
+ "maxTokens": 4096
429
+ },
430
+ "rules": {
431
+ "maxLineLength": 100,
432
+ "predefined": ["security", "performance", "style"]
433
+ }
434
+ }
435
+ ```
436
+
437
+ 如果项目已有配置文件,执行 `coderev init` 会提示是否覆盖。
438
+
439
+ ---
440
+
441
+ ### coderev serve(GitHub App 自动审查)
442
+
443
+ **作用**:启动 webhook 服务器,监听 GitHub App 的 pull_request 事件,自动对每个新 PR 进行代码审查。
444
+
445
+ **适用场景**:团队仓库每个 PR 自动审查 / 开源项目自动反馈 / CI/CD 增强
446
+
447
+ **参数**:
448
+
449
+ | 参数 | 说明 | 示例 |
450
+ |------|------|------|
451
+ | `--port` | 服务器端口(默认 3000) | `--port 8080` |
452
+ | `--app-id` | GitHub App ID | `--app-id 123456` |
453
+ | `--private-key` | GitHub App 私钥 PEM | `--private-key "$(cat key.pem)"` |
454
+ | `--webhook-secret` | Webhook 签名密钥 | `--webhook-secret xxx` |
455
+ | `--review-mode` | 审查模式(comment/inline/check) | `--review-mode inline` |
456
+ | `--auto-approve` | 无问题 PR 自动 approve | `--auto-approve` |
457
+ | `--min-confidence` | 最低置信度阈值 | `--min-confidence 70` |
458
+
459
+ **示例**:
460
+
461
+ ```bash
462
+ # 启动服务器
463
+ coderev serve --app-id 123456 --webhook-secret mysecret --private-key "$(cat /path/to/key.pem)"
464
+
465
+ # 使用环境变量
466
+ GITHUB_APP_ID=123456 GITHUB_APP_WEBHOOK_SECRET=mysecret coderev serve
467
+ ```
468
+
469
+ **事件处理**:
470
+ - `pull_request.opened` — 新 PR 自动审查
471
+ - `pull_request.synchronize` — PR 更新时重新审查
472
+ - `pull_request.reopened` — 重新审查
473
+ - Draft PR 和 Bot PR 默认跳过
474
+
475
+ **输出**:审查完成后自动:
476
+ 1. 发布 PR review comment(Markdown 格式)
477
+ 2. 设置 commit status(pending → success/failure/neutral)
478
+ 3. 可选 auto-approve(无问题的 PR)
479
+
480
+ > 完整部署指南见 [docs/github-app.md](docs/github-app.md)
481
+
482
+ ---
483
+
484
+ ## 配置详解
485
+
486
+ ### 配置加载顺序
487
+
488
+ coderev 按以下优先级加载配置(高的优先):
489
+
490
+ 1. **CLI 参数**(命令行传入)
491
+ 2. **配置文件**(`.coderevrc.json` / `.coderevrc` / `coderev.config.json`)
492
+ 3. **环境变量**(环境变量中设置的 API Key)
493
+ 4. **默认值**
494
+
495
+ 配置文件会自动从**当前目录向父目录逐级查找**,找到第一个便停止。
496
+
497
+ ### 完整配置项参考
498
+
499
+ ```json
500
+ {
501
+ "ai": {
502
+ "provider": "deepseek",
503
+ "model": "deepseek-chat",
504
+ "temperature": 0.3,
505
+ "maxTokens": 4096,
506
+ "apiKey": "",
507
+ "apiKeyEnv": "DEEPSEEK_API_KEY",
508
+ "baseURL": ""
509
+ },
510
+ "rules": {
511
+ "maxLineLength": 100,
512
+ "predefined": ["security", "performance", "style"],
513
+ "autoLanguage": true,
514
+ "custom": []
515
+ },
516
+ "output": {
517
+ "format": "terminal",
518
+ "includeScore": true
519
+ }
520
+ }
521
+ ```
522
+
523
+ #### ai(AI 配置)
524
+
525
+ | 字段 | 类型 | 默认值 | 说明 |
526
+ |------|------|--------|------|
527
+ | `provider` | string | `"openai"` | AI 提供商,支持 `"openai"` / `"deepseek"` |
528
+ | `model` | string | 取决于 provider | 模型名称 |
529
+ | `temperature` | number | `0.3` | 生成温度(0-1),越低越确定越保守 |
530
+ | `maxTokens` | number | `4096` | 每次请求最大输出 token 数 |
531
+ | `apiKey` | string | `""` | 直接在配置文件中写入 API Key |
532
+ | `apiKeyEnv` | string | `"OPENAI_API_KEY"` | 读取环境变量中的 API Key |
533
+ | `baseURL` | string | `""` | 自定义 API 地址,兼容 OpenAI 协议的任何服务 |
534
+
535
+ **支持的 Provider 默认值**:
536
+
537
+ | provider | 默认模型 | 默认 API 地址 |
538
+ |----------|---------|--------------|
539
+ | `openai` | `gpt-4o` | `https://api.openai.com` |
540
+ | `deepseek` | `deepseek-chat` | `https://api.deepseek.com` |
541
+
542
+ **对接任意兼容 OpenAI API 的服务**(如 Azure OpenAI、本地 LLM):
543
+
544
+ ```json
545
+ {
546
+ "ai": {
547
+ "provider": "openai",
548
+ "baseURL": "https://your-custom-endpoint.com/v1",
549
+ "apiKey": "sk-your-key"
550
+ }
551
+ }
552
+ ```
553
+
554
+ #### rules(规则引擎配置)
555
+
556
+ | 字段 | 类型 | 默认值 | 说明 |
557
+ |------|------|--------|------|
558
+ | `maxLineLength` | number | `100` | 最大行长度检查,超过会警告 |
559
+ | `predefined` | string[] | `["security","performance","style"]` | 启用的预定义规则集 |
560
+ | `autoLanguage` | boolean | `true` | 是否自动检测 diff 语言并追加专项规则 |
561
+ | `custom` | object[] | `[]` | 自定义规则数组 |
562
+
563
+ **预定义规则集一览**:
564
+
565
+ 通过配置 `rules.predefined` 数组,可以自由组合启用以下规则集:
566
+
567
+ | 名称 | 检查重点 |
568
+ |------|---------|
569
+ | `security` | SQL/NoSQL 注入、XSS、SSRF、CSRF、硬编码密钥、认证缺陷、授权缺失 |
570
+ | `performance` | 不必要的循环、大对象未释放、N+1 查询、内存泄漏、冗余计算 |
571
+ | `style` | 空格/缩进不统一、未使用的 import/变量、分号规范、命名约定 |
572
+ | `typescript` | 非严格模式、滥用 any、泛型使用不当、类型断言滥用、枚举误用 |
573
+ | `react` | hooks 规则违反、缺少 key props、函数组件命名、副作用清理 |
574
+ | `node` | 未捕获异常、异步回调链、文件 I/O 未关闭、路径遍历 |
575
+ | `naming` | 驼峰 vs 帕斯卡命名规范、常量大写、函数命名动词化 |
576
+ | `testing` | 断言覆盖不足、边界条件缺失、测试间耦合、输出不明确 |
577
+
578
+ **启用示例**:
579
+
580
+ ```json
581
+ {
582
+ "rules": {
583
+ "predefined": ["security", "typescript", "react", "naming", "testing"]
584
+ }
585
+ }
586
+ ```
587
+
588
+ #### rules.autoLanguage 自动语言检测
589
+
590
+ coderev 会自动检查 diff 中文件的扩展名,追加对应的语言专项规则:
591
+
592
+ | 语言 | 扩展名 | 检查重点 |
593
+ |------|--------|---------|
594
+ | JavaScript | `.js`, `.jsx`, `.mjs` | async/await 链、== vs ===、内存泄漏、循环依赖 |
595
+ | TypeScript | `.ts`, `.tsx` | strict 模式、禁止 any、泛型约束、类型断言 |
596
+ | Python | `.py` | PEP 8 规范、异常类型指定、mutable 默认参数、async 用法 |
597
+ | Rust | `.rs` | unsafe 块审计、unwrap/expect 滥用、ownership 问题 |
598
+ | Go | `.go` | error 忽略、goroutine 泄漏、context 传播、data race |
599
+ | Java | `.java` | null 处理、checked exception、== vs .equals()、线程安全 |
600
+ | SQL | `.sql` | 注入防护、N+1 查询、索引缺失、大 IN-clause |
601
+
602
+ 可通过 `rules.autoLanguage: false` 关闭此功能。
603
+
604
+ #### rules.custom 自定义规则
605
+
606
+ **作用**:针对团队或项目的特定规范,编写专属审查规则。
607
+
608
+ ```json
609
+ {
610
+ "rules": {
611
+ "custom": [
612
+ {
613
+ "name": "no-console-log",
614
+ "severity": "warning",
615
+ "message": "避免在生产代码中使用 console.log"
616
+ },
617
+ {
618
+ "name": "require-error-boundary",
619
+ "severity": "error",
620
+ "message": "React 组件必须包裹 ErrorBoundary",
621
+ "filePattern": "src/components/**/*.jsx"
622
+ },
623
+ {
624
+ "name": "single-quote-string",
625
+ "severity": "warning",
626
+ "message": "请使用单引号",
627
+ "filePattern": "src/**/*.ts"
628
+ }
629
+ ]
630
+ }
631
+ }
632
+ ```
633
+
634
+ | 字段 | 必填 | 类型 | 说明 |
635
+ |------|------|------|------|
636
+ | `name` | ✅ | string | 规则名称 |
637
+ | `severity` | ✅ | string | `"error"` / `"warning"` / `"info"` |
638
+ | `message` | ✅ | string | 审查时显示的提示文字 |
639
+ | `filePattern` | ❌ | string | 可选,限定生效的文件 glob 模式,如 `src/**/*.ts` |
640
+ | `enabled` | ❌ | boolean | 可选,设为 `false` 可临时禁用此规则 |
641
+
642
+ #### output(输出配置)
643
+
644
+ | 字段 | 类型 | 默认值 | 说明 |
645
+ |------|------|--------|------|
646
+ | `format` | string | `"terminal"` | 输出格式:`"terminal"` / `"json"` / `"html"` / `"markdown"` |
647
+ | `includeScore` | boolean | `true` | 是否显示置信度评分 |
648
+
649
+ ### .coderevignore 忽略文件
650
+
651
+ **作用**:指定 coderev 审查时跳过哪些文件或目录。
652
+
653
+ 在项目根目录创建 `.coderevignore` 文件,语法同 `.gitignore`(glob 模式):
654
+
655
+ ```
656
+ # coderev ignore list
657
+ *.min.js
658
+ *.bundle.js
659
+ package-lock.json
660
+ yarn.lock
661
+ vendor/
662
+ dist/
663
+ build/
664
+ ```
665
+
666
+ ### .coderevhint 项目上下文
667
+
668
+ **作用**:给 AI 审查引擎提供项目背景,让它更准确理解你的代码。
669
+
670
+ 在项目根目录创建 `.coderevhint` 文件:
671
+
672
+ ```
673
+ # 项目概况
674
+ - Language: TypeScript
675
+ - Framework: Next.js 14
676
+ - Database: PostgreSQL
677
+
678
+ # 编码规范
679
+ - Prefer: 函数式组件、Tailwind CSS、Server Actions
680
+ - Avoid: any 类型、使用 any 断言
681
+ ```
682
+
683
+ 也兼容 `CLAUDE.md` 格式,两者可共存。
684
+
685
+ ### API Key 配置方式对比
686
+
687
+ | 方式 | 安全性 | 适用场景 | 配置方法 |
688
+ |------|--------|---------|---------|
689
+ | 环境变量 | ✅ 最安全(不落盘) | 本地开发、CI 环境 | `$env:OPENAI_API_KEY="..."` |
690
+ | 配置文件直接写 | ⚠️ 注意.gitignore | 本地个人使用 | `"apiKey": "..."` |
691
+ | 配置文件引用 env | ✅ 安全 + 方便 | 推荐方式 | `"apiKeyEnv": "DEEPSEEK_API_KEY"` |
692
+
693
+ > **推荐做法**:环境变量 + `apiKeyEnv`。既不在代码中暴露 key,又无需每次都手动设置。
694
+
695
+ ---
696
+
697
+ ## 平台集成
698
+
699
+ ### 支持的 Git 平台
700
+
701
+ coderev 支持四大平台,均支持 PR 审查和评论回贴:
702
+
703
+ | 平台 | PR 审查 | 摘要评论 | 行内评论 | 自动检测 |
704
+ |------|:-------:|:--------:|:--------:|:--------:|
705
+ | GitHub | ✅ | ✅ | ✅ | ✅ |
706
+ | GitLab | ✅ | ✅ | ✅ | ✅ |
707
+ | Gitee | ✅ | ✅ | ❌ | ❌ 需完整格式 |
708
+ | Bitbucket | ✅ | ✅ | ❌ | ❌ 需完整格式 |
709
+
710
+ **使用方式**:
711
+
712
+ ```bash
713
+ # GitHub — 自动检测当前仓库
714
+ coderev review --pr 42
715
+
716
+ # 指定仓库(其他平台或跨平台)
717
+ coderev review --pr owner/repo#42
718
+
719
+ # 审查 + 回贴评论
720
+ coderev review --pr 42 --post
721
+
722
+ # 审查 + 行内评论(仅 GitHub/GitLab)
723
+ coderev review --pr 42 --inline
724
+ ```
725
+
726
+ ---
727
+
728
+ ## CI/CD 集成
729
+
730
+ ### GitHub Actions
731
+
732
+ 项目初始化时自动生成 `.github/workflows/coderev-review.yml`,在 PR 创建或更新时自动触发代码审查。
733
+
734
+ **工作流说明**:
735
+ - 触发条件:PR 打开、同步、重新打开
736
+ - 执行内容:对比 PR 的 diff → coderev 审查 → 结果回贴到 PR 评论
737
+ - 效果:每个 PR 自动获得一份 AI 审查报告
738
+
739
+ ### 自定义 CI 集成
740
+
741
+ 在任意 CI 管道中:
742
+
743
+ ```bash
744
+ # 对比当前分支与 main
745
+ git fetch origin main
746
+ git diff origin/main...HEAD | coderev review --ci --min-confidence 70
747
+ ```
748
+
749
+ 如果代码存在高置信度问题,管道会以非零退出码中断,阻止合并。
750
+
751
+ ---
752
+
753
+ ## 架构
754
+
755
+ ```
756
+ 你的代码 (git diff / PR)
757
+
758
+ ┌──────┼──────┐
759
+ ▼ ▼ ▼
760
+ ┌──────┐┌──────┐┌──────┐
761
+ │ 🔒 ││ 🐛 ││ 📐 │
762
+ │ 安全 ││ 缺陷 ││ 质量 │
763
+ │ 审计 ││ 检测 ││ 检查 │
764
+ └──┬───┘└──┬───┘└──┬───┘
765
+ │ │ │
766
+ └───────┼───────┘
767
+
768
+ ┌──────────┐
769
+ │ 合并 & │
770
+ │ 置信度评分 │
771
+ │ (0-100) │
772
+ └────┬─────┘
773
+
774
+ 结构化审查报告
775
+ ```
776
+
777
+ | Agent | 专注领域 |
778
+ |-------|---------|
779
+ | 🔒 安全审计 | SQL注入、XSS、SSRF、硬编码密钥、认证缺陷 |
780
+ | 🐛 缺陷检测 | 空指针、竞态条件、异步问题、逻辑错误 |
781
+ | 📐 质量检查 | 代码复杂度、DRY、命名规范、异常处理 |
782
+
783
+ 每个 issue 附带**置信度评分 (0-100)**,低于阈值(默认 60)自动过滤。多 Agent 发现的重复问题自动合并去重。
784
+
785
+ ---
786
+
787
+ ## FAQ / 常见问题
788
+
789
+ ### Q:为什么审查结果为空?
790
+ A:可能是代码本身没有问题,也可能是置信度低于阈值。可以尝试 `coderev review --min-confidence 0` 查看所有结果。
791
+
792
+ ### Q:怎么换 API Key?
793
+ A:重新设置环境变量即可,或在 `.coderevrc.json` 中修改 `ai.apiKey` / `ai.apiKeyEnv`。
794
+
795
+ ### Q:不想用 DeepSeek,想用其他 AI?
796
+ A:改成 `provider: "openai"`,再设置 `apiKeyEnv: "OPENAI_API_KEY"`。如果用的是兼容 OpenAI 协议的自定义 API,设置 `baseURL` 即可。
797
+
798
+ ### Q:coderev 会泄漏我的代码吗?
799
+ A:代码通过你的 API Key 发送到 AI 服务商。coderev 本身不会存储或转发你的代码。本地缓存仅存储在你自己机器上。
800
+
801
+ ### Q:缓存能关掉吗?
802
+ A:可以,审查时加 `--no-cache` 参数即可跳过缓存。
803
+
804
+ ### Q:怎么给 coderev 加自己的规则?
805
+ A:在 `.coderevrc.json` 的 `rules.custom` 数组中添加。详见上方「自定义规则」章节。
806
+
807
+ ---
808
+ ## License
809
+
810
+ MIT