commit-ai-guardian 0.2.0__tar.gz → 0.2.2__tar.gz
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.
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/PKG-INFO +68 -26
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/README.md +67 -25
- commit_ai_guardian-0.2.2/docs/article-promotion.md +182 -0
- commit_ai_guardian-0.2.2/docs/demo/index.html +969 -0
- commit_ai_guardian-0.2.2/docs/post-juejin.md +108 -0
- commit_ai_guardian-0.2.2/docs/post-v2ex.md +62 -0
- commit_ai_guardian-0.2.2/docs/seed-users-plan.md +84 -0
- commit_ai_guardian-0.2.2/docs/technical.md +261 -0
- commit_ai_guardian-0.2.2/docs/web-demo-roadmap.md +159 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/pyproject.toml +1 -1
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/src/commit_ai_guardian/cli.py +36 -32
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/src/commit_ai_guardian/hook_installer.py +4 -3
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/.ai-review/.gitignore +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/.ai-review/config.yaml +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/.ai-review/example/hardcoded-password.md +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/.ai-review/example/npe.md +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/.ai-review/example/resource-leak.md +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/.ai-review/example/sql-injection.md +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/.ai-review/example/weak-hash.md +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/.ai-review/example/xss.md +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/.ai-review/prompts/diff_review.md +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/.ai-review/prompts/full_file_review.md +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/.ai-review/prompts/system_message.txt +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/.github/workflows/publish.yml +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/.gitignore +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/STUDY.md +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/TECHNICAL.md +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/plan.md +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/src/commit_ai_guardian/__init__.py +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/src/commit_ai_guardian/__main__.py +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/src/commit_ai_guardian/ai_engine.py +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/src/commit_ai_guardian/case_loader.py +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/src/commit_ai_guardian/case_validator.py +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/src/commit_ai_guardian/config.py +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/src/commit_ai_guardian/diff_collector.py +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/src/commit_ai_guardian/file_collector.py +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/src/commit_ai_guardian/prompt_loader.py +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/src/commit_ai_guardian/result_formatter.py +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/src/commit_ai_guardian/templates/examples/js/mongoose-query-acceptable.md +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/src/commit_ai_guardian/templates/examples/js/redundant-null-union.md +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/src/commit_ai_guardian/templates/examples/js/vue-default-slot-redundant.md +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/src/commit_ai_guardian/templates/examples/js/vxe-size-redundant.md +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/src/commit_ai_guardian/templates/pre-commit-hook-template +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/src/commit_ai_guardian/utils.py +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/test_json_extract.py +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/tests/conftest.py +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/tests/test_ai_engine.py +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/tests/test_ai_engine_logs.py +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/tests/test_case_loader.py +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/tests/test_config.py +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/tests/test_diff_collector.py +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/tests/test_file_collector.py +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/tests/test_hook_installer.py +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/tests/test_json_fix_ai.py +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/tests/test_prompt_loader.py +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/tests/test_result_formatter.py +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/tests/test_utils.py +0 -0
- {commit_ai_guardian-0.2.0 → commit_ai_guardian-0.2.2}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: commit-ai-guardian
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.2
|
|
4
4
|
Summary: Git Pre-commit Hook AI 代码审核系统
|
|
5
5
|
Project-URL: Homepage, https://github.com/yourusername/commit-ai-guardian
|
|
6
6
|
Project-URL: Issues, https://github.com/yourusername/commit-ai-guardian/issues
|
|
@@ -31,6 +31,7 @@ Description-Content-Type: text/markdown
|
|
|
31
31
|
|
|
32
32
|

|
|
33
33
|

|
|
34
|
+
[](https://pypi.org/project/commit-ai-guardian/)
|
|
34
35
|
|
|
35
36
|
> **📚 学习笔记**:[STUDY.md](STUDY.md) — 设计原理与常见问题解答(适合初学者)
|
|
36
37
|
> **🔧 技术细节**:[TECHNICAL.md](TECHNICAL.md) — 架构设计、实现原理、Prompt 工程等(适合开发者)
|
|
@@ -53,35 +54,33 @@ Description-Content-Type: text/markdown
|
|
|
53
54
|
|
|
54
55
|
### 安装
|
|
55
56
|
|
|
56
|
-
#### 从
|
|
57
|
+
#### 从 PyPI 安装(推荐)
|
|
57
58
|
|
|
58
59
|
```bash
|
|
59
|
-
uv tool install
|
|
60
|
+
uv tool install commit-ai-guardian
|
|
60
61
|
```
|
|
61
62
|
|
|
62
|
-
#### 从 GitHub
|
|
63
|
+
#### 从 GitHub 安装
|
|
63
64
|
|
|
64
65
|
```bash
|
|
65
66
|
uv tool install git+https://github.com/tingkl/ai-review.git
|
|
66
67
|
```
|
|
67
68
|
|
|
68
|
-
#### 从
|
|
69
|
-
|
|
70
|
-
> ⏳ **尚未发布到 PyPI**,发布后可用:
|
|
69
|
+
#### 从 GitLab 安装(公司内部)
|
|
71
70
|
|
|
72
71
|
```bash
|
|
73
|
-
uv tool install
|
|
72
|
+
uv tool install git+ssh://git@124.223.189.152:7022/gaoq/ai-review.git
|
|
74
73
|
```
|
|
75
74
|
|
|
76
75
|
### 三种方式对比
|
|
77
76
|
|
|
78
|
-
| |
|
|
77
|
+
| | PyPI | GitHub | GitLab |
|
|
79
78
|
|---|---|---|---|
|
|
80
|
-
| 安装源 |
|
|
81
|
-
| 协议 |
|
|
82
|
-
| 代码版本 | 最新 main 分支 | 最新 main 分支 |
|
|
83
|
-
| 适用场景 |
|
|
84
|
-
| 当前状态 | ✅
|
|
79
|
+
| 安装源 | 公开包仓库 | 公开 GitHub | 内部 GitLab |
|
|
80
|
+
| 协议 | HTTPS | HTTPS | SSH |
|
|
81
|
+
| 代码版本 | 发布的稳定版 | 最新 main 分支 | 最新 main 分支 |
|
|
82
|
+
| 适用场景 | 普通用户、生产环境 | 外部开发者贡献 | 公司内部开发 |
|
|
83
|
+
| 当前状态 | ✅ **推荐** | ✅ 可用 | ✅ 可用 |
|
|
85
84
|
|
|
86
85
|
### 升级
|
|
87
86
|
|
|
@@ -143,7 +142,7 @@ cag 在 hook 文件中写入特定的 marker 标记来识别:
|
|
|
143
142
|
|
|
144
143
|
| hook 文件 | cag 的 marker 标记 |
|
|
145
144
|
|-----------|-------------------|
|
|
146
|
-
| `.git/hooks/pre-commit` | `#
|
|
145
|
+
| `.git/hooks/pre-commit` | `# === commit-ai-guardian ===` |
|
|
147
146
|
| `.husky/pre-commit` | `# === commit-ai-guardian ===` |
|
|
148
147
|
|
|
149
148
|
判断逻辑:文件存在但 **不含上述 marker** → 视为"有其他自定义 hook"(如 lint-staged、husky 默认模板、用户手写脚本等)。
|
|
@@ -198,7 +197,7 @@ cag 在 hook 文件中写入特定的 marker 标记来识别:
|
|
|
198
197
|
| `diff_mode` | 审核范围(`full` 全部文件 / `diff` 仅变更) | `full` |
|
|
199
198
|
| `use_cache` | 是否启用结果缓存 | `true` |
|
|
200
199
|
| `include_patterns` | 审核文件范围(glob 数组) | `["*"]` |
|
|
201
|
-
| `case_format` | 案例输出格式(`default` / `compact` / `minimal`) | `
|
|
200
|
+
| `case_format` | 案例输出格式(`default` / `compact` / `minimal`) | `compact` |
|
|
202
201
|
| `max_tokens` | AI 最大返回长度(token 数) | `8192` |
|
|
203
202
|
| `max_file_size` | 最大审核文件大小,**单位 KB** | `500` |
|
|
204
203
|
| `temperature` | AI 随机性(0=最保守, 0.3=平衡, 0.7=灵活) | `0.3` |
|
|
@@ -231,17 +230,28 @@ include_patterns:
|
|
|
231
230
|
|
|
232
231
|
`max_tokens` 限制的是 **AI 输出长度**(JSON 响应),不是输入。不同模型默认值差异很大,建议显式配置:
|
|
233
232
|
|
|
234
|
-
| 模型 | 默认 max_tokens | 最大可设 | 建议值 |
|
|
235
|
-
|
|
236
|
-
| **
|
|
237
|
-
| **
|
|
238
|
-
| **DeepSeek** |
|
|
239
|
-
| **
|
|
240
|
-
| **
|
|
241
|
-
|
|
242
|
-
|
|
233
|
+
| 服务商 | 模型 | 默认 max_tokens | 最大可设 | 建议值 |
|
|
234
|
+
|--------|------|----------------|---------|--------|
|
|
235
|
+
| **DeepSeek** | deepseek-v4-pro | 4,096 | 1,048,576 (1M) | **16K** |
|
|
236
|
+
| **DeepSeek** | deepseek-v4-flash | 4,096 | 1,048,576 (1M) | **16K** |
|
|
237
|
+
| **DeepSeek** | deepseek-chat | 4,096 | 8,192 (8K) | **8K** |
|
|
238
|
+
| **DeepSeek** | deepseek-reasoner | 4,096 | 8,192 (8K) | **8K** |
|
|
239
|
+
| **Kimi** | kimi-k2.6 | 32,768 | 262,144 (256K) | **16K** |
|
|
240
|
+
| **Kimi** | kimi-k2 | 32,768 | 262,144 (256K) | **16K** |
|
|
241
|
+
| **Kimi** | kimi-k2-thinking | 32,768 | 262,144 (256K) | **16K** |
|
|
242
|
+
| **MiniMax** | MiniMax-M3 | 很小(不设会截断) | 131,072 (128K) | **16K** |
|
|
243
|
+
| **MiniMax** | MiniMax-M2.7 | 很小 | 131,072 (128K) | **16K** |
|
|
244
|
+
| **MiniMax** | MiniMax-M2.5 | 很小 | 131,072 (128K) | **16K** |
|
|
245
|
+
| **MiniMax** | MiniMax-M2.1 | 很小 | 131,072 (128K) | **16K** |
|
|
246
|
+
| **OpenAI** | gpt-4o | ~4,096 | 16,384 (16K) | **8K** |
|
|
247
|
+
| **OpenAI** | gpt-4o-mini | ~4,096 | 16,384 (16K) | **8K** |
|
|
248
|
+
| **OpenAI** | gpt-3.5-turbo | ~4,096 | 4,096 (4K) | **4K** |
|
|
249
|
+
|
|
250
|
+
> **模型推荐**:DeepSeek 请用 `deepseek-v4-pro`(1M 上下文,最强代码能力),`deepseek-chat` 将于 2026/07/24 停用。Kimi 请用 `kimi-k2.6`(最新版本)。
|
|
251
|
+
>
|
|
252
|
+
> **为什么要配置**:MiniMax 如果不设 max_tokens,默认很小,JSON 几乎一定会被截断。默认值 `8192` 覆盖 95% 场景,使用 MiniMax 或 DeepSeek V4 时可适当提高。
|
|
243
253
|
>
|
|
244
|
-
> **支持简写**:`8K` = 8192,`16k` = 16384
|
|
254
|
+
> **支持简写**:`4K` = 4096,`8K` = 8192,`16k` = 16384,纯数字也可以。
|
|
245
255
|
|
|
246
256
|
### 查看配置状态
|
|
247
257
|
|
|
@@ -318,6 +328,38 @@ git remote add github https://github.com/your/project.git
|
|
|
318
328
|
git push origin main && git push github main
|
|
319
329
|
```
|
|
320
330
|
|
|
331
|
+
### 配置网络代理(HTTP Proxy)
|
|
332
|
+
|
|
333
|
+
如果你的网络需要代理才能访问 AI API(例如公司内网、或 Clash/V2Ray 规则模式),可以配置代理地址。
|
|
334
|
+
|
|
335
|
+
**怎么判断是否需要配 proxy:**
|
|
336
|
+
|
|
337
|
+
先不配 proxy 直接运行 `cag review`,能正常返回结果就不需要;如果报连接超时 / `Connection refused`,再配置。
|
|
338
|
+
|
|
339
|
+
**配置方式:**
|
|
340
|
+
|
|
341
|
+
```bash
|
|
342
|
+
# 方式一:交互式配置
|
|
343
|
+
cag configure
|
|
344
|
+
# 提示输入 proxy 时填写:http://127.0.0.1:7890
|
|
345
|
+
|
|
346
|
+
# 方式二:直接编辑配置文件
|
|
347
|
+
vim ~/.commit_ai_guardian/config.yaml
|
|
348
|
+
# proxy: "http://127.0.0.1:7890"
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
**常见代理地址:**
|
|
352
|
+
|
|
353
|
+
| 工具 | 默认地址 |
|
|
354
|
+
|------|----------|
|
|
355
|
+
| Clash | `http://127.0.0.1:7890` |
|
|
356
|
+
| V2RayN | `http://127.0.0.1:10809` |
|
|
357
|
+
| Surge | `http://127.0.0.1:6152` |
|
|
358
|
+
|
|
359
|
+
> 如果你的 Clash 开了**全局/TUN 模式**,系统所有流量自动走代理,不需要额外配置。只在**规则模式**下需要配置 proxy,因为 Python 不会自动读取系统代理设置。
|
|
360
|
+
>
|
|
361
|
+
> proxy 只影响命令行工具,不影响 Git hook(hook 继承 shell 环境变量)。
|
|
362
|
+
|
|
321
363
|
---
|
|
322
364
|
|
|
323
365
|
## 常见问题
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|

|
|
6
6
|

|
|
7
|
+
[](https://pypi.org/project/commit-ai-guardian/)
|
|
7
8
|
|
|
8
9
|
> **📚 学习笔记**:[STUDY.md](STUDY.md) — 设计原理与常见问题解答(适合初学者)
|
|
9
10
|
> **🔧 技术细节**:[TECHNICAL.md](TECHNICAL.md) — 架构设计、实现原理、Prompt 工程等(适合开发者)
|
|
@@ -26,35 +27,33 @@
|
|
|
26
27
|
|
|
27
28
|
### 安装
|
|
28
29
|
|
|
29
|
-
#### 从
|
|
30
|
+
#### 从 PyPI 安装(推荐)
|
|
30
31
|
|
|
31
32
|
```bash
|
|
32
|
-
uv tool install
|
|
33
|
+
uv tool install commit-ai-guardian
|
|
33
34
|
```
|
|
34
35
|
|
|
35
|
-
#### 从 GitHub
|
|
36
|
+
#### 从 GitHub 安装
|
|
36
37
|
|
|
37
38
|
```bash
|
|
38
39
|
uv tool install git+https://github.com/tingkl/ai-review.git
|
|
39
40
|
```
|
|
40
41
|
|
|
41
|
-
#### 从
|
|
42
|
-
|
|
43
|
-
> ⏳ **尚未发布到 PyPI**,发布后可用:
|
|
42
|
+
#### 从 GitLab 安装(公司内部)
|
|
44
43
|
|
|
45
44
|
```bash
|
|
46
|
-
uv tool install
|
|
45
|
+
uv tool install git+ssh://git@124.223.189.152:7022/gaoq/ai-review.git
|
|
47
46
|
```
|
|
48
47
|
|
|
49
48
|
### 三种方式对比
|
|
50
49
|
|
|
51
|
-
| |
|
|
50
|
+
| | PyPI | GitHub | GitLab |
|
|
52
51
|
|---|---|---|---|
|
|
53
|
-
| 安装源 |
|
|
54
|
-
| 协议 |
|
|
55
|
-
| 代码版本 | 最新 main 分支 | 最新 main 分支 |
|
|
56
|
-
| 适用场景 |
|
|
57
|
-
| 当前状态 | ✅
|
|
52
|
+
| 安装源 | 公开包仓库 | 公开 GitHub | 内部 GitLab |
|
|
53
|
+
| 协议 | HTTPS | HTTPS | SSH |
|
|
54
|
+
| 代码版本 | 发布的稳定版 | 最新 main 分支 | 最新 main 分支 |
|
|
55
|
+
| 适用场景 | 普通用户、生产环境 | 外部开发者贡献 | 公司内部开发 |
|
|
56
|
+
| 当前状态 | ✅ **推荐** | ✅ 可用 | ✅ 可用 |
|
|
58
57
|
|
|
59
58
|
### 升级
|
|
60
59
|
|
|
@@ -116,7 +115,7 @@ cag 在 hook 文件中写入特定的 marker 标记来识别:
|
|
|
116
115
|
|
|
117
116
|
| hook 文件 | cag 的 marker 标记 |
|
|
118
117
|
|-----------|-------------------|
|
|
119
|
-
| `.git/hooks/pre-commit` | `#
|
|
118
|
+
| `.git/hooks/pre-commit` | `# === commit-ai-guardian ===` |
|
|
120
119
|
| `.husky/pre-commit` | `# === commit-ai-guardian ===` |
|
|
121
120
|
|
|
122
121
|
判断逻辑:文件存在但 **不含上述 marker** → 视为"有其他自定义 hook"(如 lint-staged、husky 默认模板、用户手写脚本等)。
|
|
@@ -171,7 +170,7 @@ cag 在 hook 文件中写入特定的 marker 标记来识别:
|
|
|
171
170
|
| `diff_mode` | 审核范围(`full` 全部文件 / `diff` 仅变更) | `full` |
|
|
172
171
|
| `use_cache` | 是否启用结果缓存 | `true` |
|
|
173
172
|
| `include_patterns` | 审核文件范围(glob 数组) | `["*"]` |
|
|
174
|
-
| `case_format` | 案例输出格式(`default` / `compact` / `minimal`) | `
|
|
173
|
+
| `case_format` | 案例输出格式(`default` / `compact` / `minimal`) | `compact` |
|
|
175
174
|
| `max_tokens` | AI 最大返回长度(token 数) | `8192` |
|
|
176
175
|
| `max_file_size` | 最大审核文件大小,**单位 KB** | `500` |
|
|
177
176
|
| `temperature` | AI 随机性(0=最保守, 0.3=平衡, 0.7=灵活) | `0.3` |
|
|
@@ -204,17 +203,28 @@ include_patterns:
|
|
|
204
203
|
|
|
205
204
|
`max_tokens` 限制的是 **AI 输出长度**(JSON 响应),不是输入。不同模型默认值差异很大,建议显式配置:
|
|
206
205
|
|
|
207
|
-
| 模型 | 默认 max_tokens | 最大可设 | 建议值 |
|
|
208
|
-
|
|
209
|
-
| **
|
|
210
|
-
| **
|
|
211
|
-
| **DeepSeek** |
|
|
212
|
-
| **
|
|
213
|
-
| **
|
|
214
|
-
|
|
215
|
-
|
|
206
|
+
| 服务商 | 模型 | 默认 max_tokens | 最大可设 | 建议值 |
|
|
207
|
+
|--------|------|----------------|---------|--------|
|
|
208
|
+
| **DeepSeek** | deepseek-v4-pro | 4,096 | 1,048,576 (1M) | **16K** |
|
|
209
|
+
| **DeepSeek** | deepseek-v4-flash | 4,096 | 1,048,576 (1M) | **16K** |
|
|
210
|
+
| **DeepSeek** | deepseek-chat | 4,096 | 8,192 (8K) | **8K** |
|
|
211
|
+
| **DeepSeek** | deepseek-reasoner | 4,096 | 8,192 (8K) | **8K** |
|
|
212
|
+
| **Kimi** | kimi-k2.6 | 32,768 | 262,144 (256K) | **16K** |
|
|
213
|
+
| **Kimi** | kimi-k2 | 32,768 | 262,144 (256K) | **16K** |
|
|
214
|
+
| **Kimi** | kimi-k2-thinking | 32,768 | 262,144 (256K) | **16K** |
|
|
215
|
+
| **MiniMax** | MiniMax-M3 | 很小(不设会截断) | 131,072 (128K) | **16K** |
|
|
216
|
+
| **MiniMax** | MiniMax-M2.7 | 很小 | 131,072 (128K) | **16K** |
|
|
217
|
+
| **MiniMax** | MiniMax-M2.5 | 很小 | 131,072 (128K) | **16K** |
|
|
218
|
+
| **MiniMax** | MiniMax-M2.1 | 很小 | 131,072 (128K) | **16K** |
|
|
219
|
+
| **OpenAI** | gpt-4o | ~4,096 | 16,384 (16K) | **8K** |
|
|
220
|
+
| **OpenAI** | gpt-4o-mini | ~4,096 | 16,384 (16K) | **8K** |
|
|
221
|
+
| **OpenAI** | gpt-3.5-turbo | ~4,096 | 4,096 (4K) | **4K** |
|
|
222
|
+
|
|
223
|
+
> **模型推荐**:DeepSeek 请用 `deepseek-v4-pro`(1M 上下文,最强代码能力),`deepseek-chat` 将于 2026/07/24 停用。Kimi 请用 `kimi-k2.6`(最新版本)。
|
|
224
|
+
>
|
|
225
|
+
> **为什么要配置**:MiniMax 如果不设 max_tokens,默认很小,JSON 几乎一定会被截断。默认值 `8192` 覆盖 95% 场景,使用 MiniMax 或 DeepSeek V4 时可适当提高。
|
|
216
226
|
>
|
|
217
|
-
> **支持简写**:`8K` = 8192,`16k` = 16384
|
|
227
|
+
> **支持简写**:`4K` = 4096,`8K` = 8192,`16k` = 16384,纯数字也可以。
|
|
218
228
|
|
|
219
229
|
### 查看配置状态
|
|
220
230
|
|
|
@@ -291,6 +301,38 @@ git remote add github https://github.com/your/project.git
|
|
|
291
301
|
git push origin main && git push github main
|
|
292
302
|
```
|
|
293
303
|
|
|
304
|
+
### 配置网络代理(HTTP Proxy)
|
|
305
|
+
|
|
306
|
+
如果你的网络需要代理才能访问 AI API(例如公司内网、或 Clash/V2Ray 规则模式),可以配置代理地址。
|
|
307
|
+
|
|
308
|
+
**怎么判断是否需要配 proxy:**
|
|
309
|
+
|
|
310
|
+
先不配 proxy 直接运行 `cag review`,能正常返回结果就不需要;如果报连接超时 / `Connection refused`,再配置。
|
|
311
|
+
|
|
312
|
+
**配置方式:**
|
|
313
|
+
|
|
314
|
+
```bash
|
|
315
|
+
# 方式一:交互式配置
|
|
316
|
+
cag configure
|
|
317
|
+
# 提示输入 proxy 时填写:http://127.0.0.1:7890
|
|
318
|
+
|
|
319
|
+
# 方式二:直接编辑配置文件
|
|
320
|
+
vim ~/.commit_ai_guardian/config.yaml
|
|
321
|
+
# proxy: "http://127.0.0.1:7890"
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
**常见代理地址:**
|
|
325
|
+
|
|
326
|
+
| 工具 | 默认地址 |
|
|
327
|
+
|------|----------|
|
|
328
|
+
| Clash | `http://127.0.0.1:7890` |
|
|
329
|
+
| V2RayN | `http://127.0.0.1:10809` |
|
|
330
|
+
| Surge | `http://127.0.0.1:6152` |
|
|
331
|
+
|
|
332
|
+
> 如果你的 Clash 开了**全局/TUN 模式**,系统所有流量自动走代理,不需要额外配置。只在**规则模式**下需要配置 proxy,因为 Python 不会自动读取系统代理设置。
|
|
333
|
+
>
|
|
334
|
+
> proxy 只影响命令行工具,不影响 Git hook(hook 继承 shell 环境变量)。
|
|
335
|
+
|
|
294
336
|
---
|
|
295
337
|
|
|
296
338
|
## 常见问题
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
# AI 代码审核工具 commit-ai-guardian:让每次提交都经得起审查
|
|
2
|
+
|
|
3
|
+
> **一句话介绍**:在 git commit 前自动调用 AI 审查代码,发现问题直接阻断提交,帮你把 Bug 挡在代码库门外。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 01 为什么做这个工具
|
|
8
|
+
|
|
9
|
+
我在一个 20 人的研发团队带项目。Code Review 是有的,但大家都忙,CR 往往流于形式——扫两眼就过了。结果上线后 Bug 频出,低级错误反复出现:
|
|
10
|
+
|
|
11
|
+
- 空指针没判,生产环境炸了
|
|
12
|
+
- SQL 拼接没转义,差点被注入
|
|
13
|
+
- 函数改了签名,调用方没同步改,编译都没过就合进去了
|
|
14
|
+
- 重复代码复制粘贴了七八份,重构时想死
|
|
15
|
+
|
|
16
|
+
这些问题,**AI 比人更适合发现**。AI 不会累,不会敷衍,不会"这行代码一看就没问题"。
|
|
17
|
+
|
|
18
|
+
所以我做了 `commit-ai-guardian`(简称 `cag`):**每次 git commit 前,自动让 AI 审查代码,有问题直接阻断提交**。
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 02 它怎么工作
|
|
23
|
+
|
|
24
|
+
安装只要一行:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
uv tool install commit-ai-guardian
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
进入你的 Git 仓库,初始化:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
cag install
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
配置 API Key(支持 OpenAI、MiniMax、DeepSeek、Kimi 等):
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
cag configure
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
然后正常写代码、git add、git commit。在 commit 前,工具会自动:
|
|
43
|
+
|
|
44
|
+
1. **采集 diff** —— 获取暂存区的代码变更
|
|
45
|
+
2. **调用 AI 审查** —— 把代码 + 审核维度发给大模型
|
|
46
|
+
3. **解析结果** —— AI 返回 JSON 格式的问题列表
|
|
47
|
+
4. **阻断或放行** —— 有问题就阻断 commit,没问题直接通过
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
$ git commit -m "feat: add login"
|
|
51
|
+
|
|
52
|
+
🔍 AI 代码审核报告
|
|
53
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
54
|
+
|
|
55
|
+
┌─ src/auth.ts ──────────────────────────────┐
|
|
56
|
+
│ 有警告 │
|
|
57
|
+
│ │
|
|
58
|
+
│ ⚠️ 警告 🔒 安全 src/auth.ts:45 │
|
|
59
|
+
│ >> SQL 拼接存在注入风险 │
|
|
60
|
+
│ 💡 使用参数化查询: │
|
|
61
|
+
│ db.query("SELECT * FROM users WHERE │
|
|
62
|
+
│ id = ?", [userId]) │
|
|
63
|
+
│ 📍 const sql = `SELECT * FROM users │
|
|
64
|
+
│ WHERE id = ${req.params.id}` │
|
|
65
|
+
└──────────────────────────────────────────────┘
|
|
66
|
+
|
|
67
|
+
❌ 审核未通过
|
|
68
|
+
1 个文件存在问题,请修复后重试
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
修复后重新 commit,通过了:
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
✅ 审核通过
|
|
75
|
+
所有文件符合代码质量标准
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## 03 核心能力
|
|
81
|
+
|
|
82
|
+
### 🔍 5 大审核维度
|
|
83
|
+
|
|
84
|
+
| 维度 | 检查内容 |
|
|
85
|
+
|------|----------|
|
|
86
|
+
| Bug 检测 | 逻辑错误、边界条件、资源泄漏、并发问题 |
|
|
87
|
+
| 代码风格 | 命名规范、代码格式、注释质量、代码组织 |
|
|
88
|
+
| 性能问题 | 算法复杂度、内存泄漏、不必要的计算 |
|
|
89
|
+
| 最佳实践 | 设计模式、代码复用、错误处理、日志规范 |
|
|
90
|
+
| 文档完整 | 函数文档、参数说明、复杂逻辑注释 |
|
|
91
|
+
|
|
92
|
+
### 📝 自定义案例系统
|
|
93
|
+
|
|
94
|
+
每个团队的规范不同。你可以在 `.ai-review/cases/` 下放 Markdown 案例文件,AI 会参考这些案例来审核:
|
|
95
|
+
|
|
96
|
+
```yaml
|
|
97
|
+
---
|
|
98
|
+
title: "SQL 注入防护规范"
|
|
99
|
+
category: "安全"
|
|
100
|
+
severity: "error"
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## 场景描述
|
|
104
|
+
用户输入直接拼接到 SQL 查询中...
|
|
105
|
+
|
|
106
|
+
## 正确做法
|
|
107
|
+
使用参数化查询...
|
|
108
|
+
|
|
109
|
+
## 错误示例
|
|
110
|
+
```python
|
|
111
|
+
cursor.execute(f"SELECT * FROM users WHERE id = {user_id}")
|
|
112
|
+
```
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
案例按编程语言分类,支持 JS/TS、Java、Python、Vue 等。
|
|
116
|
+
|
|
117
|
+
### ⚡ 缓存机制
|
|
118
|
+
|
|
119
|
+
同一个文件的相同内容不会重复审核,命中缓存直接跳过,省时间省钱。
|
|
120
|
+
|
|
121
|
+
### 🔧 灵活配置
|
|
122
|
+
|
|
123
|
+
- **severity_threshold**:设置阻断阈值(info/warning/error)
|
|
124
|
+
- **diff_mode**:审核完整文件或只审变更
|
|
125
|
+
- **json_fix_history_mode**:JSON 修复 AI 的上下文策略
|
|
126
|
+
- **case_format**:案例注入格式(default/compact/minimal)
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## 04 技术亮点
|
|
131
|
+
|
|
132
|
+
### 四层容错,JSON 解析不死
|
|
133
|
+
|
|
134
|
+
AI 返回的 JSON 经常有问题:引号没转义、括号没闭合、字段缺失、类型错误……工具内置了四层容错:
|
|
135
|
+
|
|
136
|
+
1. **本地修复** —— 多种策略提取 JSON(过滤 think 标签、代码块匹配、括号补全)
|
|
137
|
+
2. **AI 修复** —— 本地修不好时,调用专门的 JSON 修复 AI,带完整对话历史
|
|
138
|
+
3. **Schema 校验** —— 校验字段名、类型、必填项
|
|
139
|
+
4. **兜底通过** —— 所有修复都失败时,记录日志但不阻断提交(避免卡死)
|
|
140
|
+
|
|
141
|
+
### 两级配置
|
|
142
|
+
|
|
143
|
+
全局配置 `~/.commit-ai-guardian/config.yaml` + 项目配置 `.ai-review/config.yaml`,项目配置覆盖全局。方便不同项目用不同模型、不同规则。
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
## 05 适合谁用
|
|
148
|
+
|
|
149
|
+
- **小团队** —— 没有专人做 CR,AI 替代 80% 的审查工作
|
|
150
|
+
- **大团队** —— CR 流于形式,AI 做第一道把关,人审更有针对性
|
|
151
|
+
- **个人开发者** —— 提交前自检,避免低级错误
|
|
152
|
+
- **开源项目** —— 保证贡献代码的质量底线
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## 06 安装使用
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
# 安装
|
|
160
|
+
uv tool install commit-ai-guardian
|
|
161
|
+
|
|
162
|
+
# 进入项目,初始化
|
|
163
|
+
cd your-project
|
|
164
|
+
cag install
|
|
165
|
+
|
|
166
|
+
# 配置 API Key
|
|
167
|
+
cag configure
|
|
168
|
+
|
|
169
|
+
# 完成!以后每次 git commit 自动审查
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
项目地址:[github.com/tingkl/ai-review](https://github.com/tingkl/ai-review)
|
|
173
|
+
|
|
174
|
+
PyPI:[pypi.org/project/commit-ai-guardian](https://pypi.org/project/commit-ai-guardian)
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## 07 写在最后
|
|
179
|
+
|
|
180
|
+
这个工具不是替代人工 CR,而是**把低级、重复的问题交给 AI,让人去关注架构、业务逻辑、设计决策**。
|
|
181
|
+
|
|
182
|
+
用完你会发现:AI 比同事更仔细,而且不会嫌你代码写得烂。
|