smart-review 1.0.1

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 ADDED
@@ -0,0 +1,713 @@
1
+ # Smart Review
2
+
3
+ 🚀 **AI智能代码审查工具** - 结合静态规则检测和AI智能分析,为你的代码提供全方位的安全和质量审查。
4
+
5
+ ## ✨ 特性
6
+
7
+ - 🔍 **静态规则检测** - 内置安全、性能、最佳实践规则
8
+ - 🧠 **AI智能分析** - 基于 OpenAI GPT 的深度代码分析
9
+ - ⚡ **Git Diff增量审查** - 智能识别变更内容,只审查修改的代码行,大幅提升审查效率
10
+ - 🚀 **智能分批处理** - 自动优化大文件处理,支持分段分析
11
+ - 📊 **大文件支持** - 智能分段处理超大文件,突破token限制
12
+ - 🎯 **Git Hook集成** - 支持暂存区文件审查和指定文件审查
13
+ - 📁 **多语言支持** - JavaScript、TypeScript、Python、Java、Go、C++、PHP等
14
+ - ⚙️ **高度可配置** - 自定义规则、风险等级、AI参数
15
+ - 🔧 **自动安装** - 一键安装配置文件和Git Hook
16
+
17
+ ## 📦 安装
18
+
19
+ 在项目中安装 smart-review,安装后会自动初始化配置并集成到 git pre-commit 钩子:
20
+
21
+ ### 使用 npm
22
+ ```bash
23
+ npm install --save-dev smart-review
24
+ ```
25
+
26
+ ### 使用 yarn
27
+ ```bash
28
+ yarn add --dev smart-review
29
+ ```
30
+
31
+ > 💡 安装完成后,工具会自动:
32
+ > - 创建 `.smart-review` 配置目录和配置文件
33
+ > - 设置 git pre-commit 钩子,在每次提交时自动进行代码审查
34
+
35
+ ## 🚀 快速开始
36
+
37
+ ### 1. 自动初始化
38
+ 安装完成后,工具会自动创建配置目录和文件。如需手动重新初始化:
39
+ ```bash
40
+ node bin/install.js
41
+ ```
42
+
43
+ 初始化后的目录结构:
44
+
45
+ ```
46
+ .smart-review/
47
+ ├── smart-review.json # 主配置文件
48
+ ├── ai-rules/ # AI规则目录
49
+ └── local-rules/ # 本地静态规则目录
50
+ ├── security.js # 安全规则
51
+ ├── performance.js # 性能规则
52
+ └── best-practices.js # 最佳实践规则
53
+ ```
54
+
55
+ ### 2. 基本使用
56
+
57
+ #### 审查暂存区文件(Git Hook)
58
+ ```bash
59
+ node bin/review.js --staged
60
+ ```
61
+
62
+ #### 审查指定文件
63
+ ```bash
64
+ node bin/review.js --files test/src/test-file.js
65
+ node bin/review.js --files test/src/index.tsx,test/src/large-test-file.js
66
+ ```
67
+
68
+ #### Git Diff 增量审查模式
69
+ 启用增量审查模式后,工具会智能识别文件的变更内容,只审查修改的代码行,大幅提升审查效率:
70
+
71
+ ```bash
72
+ # 审查暂存区的变更内容(推荐)
73
+ node bin/review.js --staged
74
+
75
+ # 审查指定文件的变更内容
76
+ node bin/review.js --files src/modified-file.js
77
+ ```
78
+
79
+ **增量审查模式的优势:**
80
+ - ⚡ **高效审查** - 只分析变更的代码行,跳过未修改的内容
81
+ - 🎯 **精准定位** - 问题报告直接关联到具体的变更行
82
+ - 💰 **成本优化** - 减少AI API调用的token消耗
83
+ - 🚀 **快速反馈** - 大幅缩短审查时间,特别适合大型项目
84
+
85
+ **工作原理:**
86
+ 1. 自动检测Git变更(通过`git diff`)
87
+ 2. 提取变更的代码行和上下文
88
+ 3. 只对变更内容进行静态规则检测和AI分析
89
+ 4. 保持完整的上下文信息,确保分析准确性
90
+
91
+ #### 大文件分段分析
92
+ 对于超大文件,工具会自动进行智能分段处理:
93
+ ```bash
94
+ node bin/review.js --files test/src/large-test-file.js
95
+ ```
96
+
97
+ 输出示例:
98
+ ```
99
+ 代码审查审查中,请等待...
100
+ 🔍 开始逐段分析文件: test/src/large-test-file.js,共 2 段
101
+ 🔍 开始分析第 1/2 段 (行 1-150),预估2400 tokens, 共150 行代码
102
+ ✅ 第 1 段分析完成,发现 8 个问题
103
+ 🔍 开始分析第 2/2 段 (行 130-302),预估2800 tokens, 共172 行代码
104
+ ✅ 第 2 段分析完成,发现 12 个问题
105
+ 🎯 分段分析完成,共发现 20 个问题
106
+ ```
107
+
108
+ #### 批次处理示例
109
+ 对于多个文件的批次处理:
110
+ ```
111
+ 代码审查审查中,请等待...
112
+ 🔍 开始分析批次文件: src/utils.js, src/config.js, src/helper.js,预估3200 tokens, 共3 个文件
113
+ ✅ 批次分析完成: src/utils.js, src/config.js, src/helper.js,发现 5 个问题,耗时: 2.3s
114
+ 当前已完成进度: 1/3,总耗时: 2.3s
115
+ 🔍 开始分析批次文件: src/api.js, src/database.js,预估2800 tokens, 共2 个文件
116
+ ✅ 批次分析完成: src/api.js, src/database.js,发现 3 个问题,耗时: 1.8s
117
+ 当前已完成进度: 2/3,总耗时: 4.1s
118
+ ```
119
+
120
+ ### 3. Git Hook 集成
121
+ 在 `package.json` 中添加:
122
+ ```json
123
+ {
124
+ "husky": {
125
+ "hooks": {
126
+ "pre-commit": "smart-review --staged"
127
+ }
128
+ }
129
+ }
130
+ ```
131
+
132
+ ## ⚙️ 配置文件
133
+
134
+ ### 主配置文件 `.smart-review/smart-review.json`
135
+
136
+ ```json
137
+ {
138
+ "ai": {
139
+ "enabled": true,
140
+ "model": "deepseek-chat",
141
+ "apiKey": "your-api-key",
142
+ "baseURL": "https://api.deepseek.com/v1",
143
+ "reviewOnlyChanges": true,
144
+ "maxResponseTokens": 8192,
145
+ "maxFileSizeKB": 500,
146
+ "enabledFor": [".js", ".ts", ".jsx", ".less", ".css", ".tsx", ".vue", ".py", ".java", ".go", ".rs", ".cpp", ".c", ".cs", ".php"],
147
+ "useStaticHints": true,
148
+ "maxRequestTokens": 8000,
149
+ "minFilesPerBatch": 1,
150
+ "maxFilesPerBatch": 20,
151
+ "tokenRatio": 4,
152
+ "chunkOverlapLines": 5,
153
+ "includeStaticHints": true,
154
+ "temperature": 0,
155
+ "concurrency": 3
156
+ },
157
+ "riskLevels": {
158
+ "critical": { "block": true },
159
+ "high": { "block": true },
160
+ "medium": { "block": true },
161
+ "low": { "block": false },
162
+ "suggestion": { "block": false }
163
+ },
164
+ "suppressLowLevelOutput": false,
165
+ "useExternalRulesOnly": false,
166
+ "fileExtensions": [".js", ".jsx", ".less", ".css", ".ts", ".tsx", ".vue", ".svelte", ".py", ".java", ".go", ".rs", ".cpp", ".c", ".h", ".php", ".rb", ".html", ".css", ".scss", ".less"],
167
+ "ignoreFiles": [
168
+ "**/node_modules/**",
169
+ "**/dist/**",
170
+ "**/build/**",
171
+ "**/coverage/**",
172
+ "**/*.min.js",
173
+ "**/*.bundle.js",
174
+ "test/src/risky-code.js",
175
+ "large.*\\.js$"
176
+ ]
177
+ }
178
+ ```
179
+
180
+ ### 配置项说明
181
+
182
+ #### AI 配置 (`ai`)
183
+ - `enabled`: 是否启用AI分析
184
+ - `model`: OpenAI模型名称
185
+ - `apiKey`: OpenAI API密钥
186
+ - `baseURL`: API基础URL
187
+ - `reviewOnlyChanges`: 是否启用Git Diff增量审查模式。`true`时只审查变更的代码行,`false`时审查整个文件内容。默认为`true`,大幅提升审查效率
188
+ - `maxResponseTokens`: AI响应最大token数
189
+ - `maxFileSizeKB`: 单文件最大大小限制
190
+ - `enabledFor`: AI分析支持的文件扩展名
191
+ - `useStaticHints`: 是否将静态规则作为AI分析的上下文
192
+ - `maxRequestTokens`: 请求最大token数
193
+ - `minFilesPerBatch`: 批处理最小文件数
194
+ - `maxFilesPerBatch`: 批处理最大文件数
195
+ - `tokenRatio`: Token估算比例
196
+ - `chunkOverlapLines`: 分段重叠行数,保持上下文连续性
197
+ - `includeStaticHints`: 是否在AI分析中包含静态规则提示
198
+ - `temperature`: AI模型的创造性参数,0表示最确定性的输出
199
+ - `concurrency`: 并发AI请求数量,默认3个。设置为1或更小时使用串行处理,大于1时启用并发处理以提升性能
200
+
201
+ #### 风险等级配置 (`riskLevels`)
202
+ - `critical`: 致命风险
203
+ - `high`: 高危风险
204
+ - `medium`: 中危风险
205
+ - `low`: 低危风险
206
+ - `suggestion`: 建议性问题
207
+
208
+ 每个等级可配置 `block` 属性,决定是否阻断提交。
209
+
210
+ #### 输出控制配置 (`suppressLowLevelOutput`)
211
+ - `true`: 仅输出阻断等级的问题(即 `block: true` 的风险等级)
212
+ - `false`: 输出所有检测到的问题(默认行为)
213
+
214
+ 此配置允许您在保持现有阻断逻辑的同时,控制是否显示低等级的问题。当启用时,只有会阻断提交的问题才会在输出中显示,有助于聚焦于关键问题。
215
+
216
+ #### 规则加载策略配置 (`useExternalRulesOnly`)
217
+ - `true`: 仅使用外部规则模式 - 只加载 `.smart-review/local-rules` 目录中的规则,完全忽略内置规则
218
+ - `false`: 合并模式(默认) - 内置规则与外部规则合并,同名规则外部覆盖内置,不同名规则为新增
219
+
220
+ 此配置控制规则的加载策略:
221
+ - **仅外部规则模式**:适用于需要完全自定义规则集的场景,不受内置规则影响
222
+ - **合并模式**:适用于在内置规则基础上进行扩展或覆盖的场景
223
+
224
+ #### 忽略审查配置
225
+
226
+ Smart Reviewer 提供两种层级的忽略配置:文件级别和代码行级别。
227
+
228
+ ##### 1. 文件级别忽略 (`ignoreFiles`)
229
+
230
+ 在配置文件中设置 `ignoreFiles` 数组,支持三种匹配模式:
231
+
232
+ **精确匹配**
233
+ ```json
234
+ {
235
+ "ignoreFiles": [
236
+ "src/config/secrets.js",
237
+ "test/fixtures/data.json"
238
+ ]
239
+ }
240
+ ```
241
+
242
+ **Glob 模式**
243
+ ```json
244
+ {
245
+ "ignoreFiles": [
246
+ "**/node_modules/**",
247
+ "dist/*",
248
+ "**/*.min.js",
249
+ "**/build/**",
250
+ "**/*.bundle.js"
251
+ ]
252
+ }
253
+ ```
254
+
255
+ **正则表达式**
256
+ ```json
257
+ {
258
+ "ignoreFiles": [
259
+ ".*\\.generated\\.",
260
+ "large.*\\.js$",
261
+ "/test.*\\.spec\\./",
262
+ ".*\\.temp\\."
263
+ ]
264
+ }
265
+ ```
266
+
267
+ ##### 2. 文件内忽略注释
268
+
269
+ 在代码中使用特殊注释来忽略特定行或代码块的审查:
270
+
271
+ **单行忽略**
272
+ ```javascript
273
+ // review-disable-next-line
274
+ const password = "hardcoded-password"; // 下一行会被忽略
275
+
276
+ /* review-disable-next-line */
277
+ const apiKey = "sk-1234567890"; // 下一行会被忽略
278
+ ```
279
+
280
+ **多行忽略**
281
+ ```javascript
282
+ // review-disable-start
283
+ const config = {
284
+ password: "admin123",
285
+ apiKey: "secret-key",
286
+ token: "hardcoded-token"
287
+ };
288
+ // review-disable-end
289
+
290
+ /* review-disable-start */
291
+ function unsafeFunction() {
292
+ eval(userInput); // 这段代码块会被忽略
293
+ document.innerHTML = data;
294
+ }
295
+ /* review-disable-end */
296
+ ```
297
+
298
+ **支持的注释格式**
299
+ - **JavaScript/TypeScript**: `//` 和 `/* */`
300
+ - **Python/Ruby**: `#`
301
+ - **HTML/Svelte**: `<!-- -->`
302
+ - **CSS/SCSS/Less**: `/* */`
303
+ - **Java/Go/C/C++/Rust/PHP**: `//` 和 `/* */`
304
+
305
+ **注意事项**
306
+ - 忽略注释必须在独立的注释行中,不能与代码混写
307
+ - `review-disable-next-line` 只影响紧接着的下一行代码
308
+ - `review-disable-start/end` 必须成对出现,影响两个注释之间的所有代码
309
+ - 文件内忽略只影响静态规则检测,不影响AI分析
310
+
311
+ ## 🔧 自定义规则
312
+
313
+ ### 创建自定义规则文件
314
+ 在 `.smart-review/local-rules/` 目录下创建 JavaScript 文件:
315
+
316
+ ```javascript
317
+ // .smart-review/local-rules/custom-security.js
318
+ export const rules = {
319
+ security: [
320
+ {
321
+ id: 'CUSTOM001',
322
+ name: '敏感信息泄露',
323
+ pattern: '(token|secret|password)\\s*=\\s*[\'"][^\'"]+[\'"]',
324
+ risk: 'high',
325
+ message: '发现可能的敏感信息硬编码',
326
+ suggestion: '使用环境变量或安全配置管理',
327
+ flags: 'gi'
328
+ }
329
+ ]
330
+ };
331
+ ```
332
+
333
+ ### 函数式规则
334
+ 支持更复杂的检测逻辑:
335
+
336
+ ```javascript
337
+ export const rules = {
338
+ performance: [
339
+ {
340
+ id: 'PERF001',
341
+ name: '复杂度检测',
342
+ pattern: function(content) {
343
+ // 自定义检测逻辑
344
+ const lines = content.split('\n');
345
+ const issues = [];
346
+
347
+ lines.forEach((line, index) => {
348
+ if (line.includes('for') && line.includes('for')) {
349
+ issues.push(`第${index + 1}行:嵌套循环可能影响性能`);
350
+ }
351
+ });
352
+
353
+ return issues;
354
+ },
355
+ risk: 'medium',
356
+ message: '发现性能问题',
357
+ suggestion: '优化算法复杂度'
358
+ }
359
+ ]
360
+ };
361
+ ```
362
+
363
+ ### AI 提示词
364
+
365
+ 在 `.smart-review/ai-rules/` 目录下创建自定义AI提示词文件:
366
+
367
+ **`.smart-review/ai-rules/custom-prompts.txt`**
368
+ ```text
369
+ 请特别关注以下代码模式:
370
+ 1. 检查是否存在未处理的Promise rejection
371
+ 2. 验证API调用是否有适当的错误处理
372
+ 3. 确保敏感数据不会被意外记录到日志中
373
+ ```
374
+
375
+ **`.smart-review/ai-rules/security-focus.txt`**
376
+ ```text
377
+ 安全审查重点:
378
+ - 检查用户输入验证
379
+ - 确认权限控制逻辑
380
+ - 验证数据加密和脱敏处理
381
+ ```
382
+
383
+ > 💡 **提示**: AI提示词文件可以是 `.txt`、`.md` 或任何文本文件,内容会被添加到AI分析的上下文中。
384
+
385
+ ## 📋 内置规则
386
+
387
+ ### 安全规则 (Security)
388
+ - **SEC001**: 硬编码密码检测 - 检测硬编码的密码或密钥
389
+ - **SEC002**: SQL注入风险 - 检测字符串拼接SQL查询
390
+ - **SEC003**: XSS风险 - 检测直接操作HTML内容的风险
391
+ - **SEC004**: 命令注入风险 - 检测命令执行函数调用
392
+
393
+ ### 性能规则 (Performance)
394
+ - **PERF001**: 循环内数据库查询 - 检测可能导致N+1查询问题的代码
395
+ - **PERF002**: 内存泄漏风险 - 检测定时器使用但未清理的情况
396
+
397
+ ### 最佳实践 (Best Practices)
398
+ - **BP001**: 调试代码 - 检测console.log、print、alert等调试代码
399
+ - **BP002**: 魔法数字 - 检测常见的魔法数字,建议使用常量
400
+
401
+ ## 🚀 性能优化
402
+
403
+ ### Git Diff 增量审查优化
404
+
405
+ Smart Reviewer 的核心性能优化特性,通过智能识别变更内容,实现高效的增量审查:
406
+
407
+ #### 性能提升效果
408
+ - **审查速度提升 70-90%** - 只分析变更的代码行,跳过未修改内容
409
+ - **Token消耗减少 60-80%** - 大幅降低AI API调用成本
410
+ - **内存占用优化** - 只加载和处理变更相关的代码段
411
+ - **网络传输优化** - 减少API请求的数据量
412
+
413
+ #### 适用场景
414
+ - ✅ **日常开发提交** - 小范围代码修改,审查速度极快
415
+ - ✅ **功能迭代** - 针对性审查新增和修改的功能代码
416
+ - ✅ **Bug修复** - 快速验证修复代码的安全性和质量
417
+ - ✅ **代码重构** - 专注于重构部分的影响分析
418
+
419
+ #### 智能上下文保持
420
+ ```json
421
+ {
422
+ "ai": {
423
+ "reviewOnlyChanges": true,
424
+ "contextMergeLines": 10, // 保持变更行周围的上下文
425
+ "chunkOverlapLines": 5 // 确保分析的连续性
426
+ }
427
+ }
428
+ ```
429
+
430
+ ### 大文件处理策略
431
+
432
+ Smart Reviewer 采用智能分批处理技术,能够高效处理超大文件:
433
+
434
+ #### 自动分段机制
435
+ - **智能检测**: 自动识别超过token限制的大文件
436
+ - **分段处理**: 将大文件分割为多个重叠段落
437
+ - **上下文保持**: 通过重叠行数保持代码上下文连续性
438
+ - **并行分析**: 支持多段并行处理,提升分析速度
439
+
440
+ #### Token 管理
441
+ ```json
442
+ {
443
+ "ai": {
444
+ "maxRequestTokens": 8000, // 单次请求最大token数
445
+ "maxChunkSizeKB": 400, // 单个分段最大大小
446
+ "chunkOverlapLines": 20 // 分段重叠行数
447
+ }
448
+ }
449
+ ```
450
+
451
+ #### 性能优化建议
452
+
453
+ 1. **合理设置分段大小**
454
+ ```json
455
+ {
456
+ "maxChunkSizeKB": 300, // 较小的分段,更快的响应
457
+ "chunkOverlapLines": 15 // 适中的重叠,平衡上下文和性能
458
+ }
459
+ ```
460
+
461
+ 2. **启用并发处理**
462
+ ```json
463
+ {
464
+ "concurrency": 3, // 并发AI请求数量,提升处理速度
465
+ "maxFilesPerBatch": 5 // 控制批次文件数
466
+ }
467
+ ```
468
+
469
+ 3. **启用智能分批**
470
+ ```json
471
+ {
472
+ "enableSmartBatching": true,
473
+ "maxFilesPerBatch": 5 // 控制并发文件数
474
+ }
475
+ ```
476
+
477
+ 4. **文件过滤优化**
478
+ ```json
479
+ {
480
+ "ignoreFiles": [
481
+ "**/*.min.js", // 跳过压缩文件
482
+ "**/dist/**", // 跳过构建产物
483
+ "**/*.generated.*" // 跳过生成文件
484
+ ]
485
+ }
486
+ ```
487
+
488
+ ### 内存和网络优化
489
+
490
+ - **流式处理**: 大文件采用流式读取,减少内存占用
491
+ - **请求重试**: 内置智能重试机制,处理网络波动
492
+ - **缓存机制**: 静态规则结果缓存,避免重复计算
493
+ - **增量分析**: 只分析变更的文件部分
494
+
495
+ ## 🔌 API 使用
496
+
497
+ ### 编程式使用
498
+
499
+ ```javascript
500
+ import { CodeReviewer } from './lib/reviewer.js';
501
+ import { ConfigLoader } from './lib/config-loader.js';
502
+
503
+ // 加载配置
504
+ const configLoader = new ConfigLoader('/path/to/project');
505
+ const config = await configLoader.loadConfig();
506
+ const rules = await configLoader.loadRules(config);
507
+
508
+ // 创建审查器
509
+ const reviewer = new CodeReviewer(config, rules);
510
+
511
+ // 审查暂存区文件
512
+ const result = await reviewer.reviewStagedFiles();
513
+
514
+ // 审查指定文件
515
+ const result = await reviewer.reviewSpecificFiles(['test/src/test-file.js']);
516
+
517
+ // 处理结果
518
+ if (result.blockSubmission) {
519
+ console.log('发现阻断性问题,请修复后再提交');
520
+ result.issues.forEach(issue => {
521
+ console.log(`${issue.file}:${issue.line} - ${issue.message}`);
522
+ });
523
+ }
524
+ ```
525
+
526
+ ### 自定义配置
527
+
528
+ ```javascript
529
+ import { CodeReviewer } from './lib/reviewer.js';
530
+ import { defaultConfig, defaultRules } from './lib/default-config.js';
531
+
532
+ const customConfig = {
533
+ ...defaultConfig,
534
+ ai: {
535
+ ...defaultConfig.ai,
536
+ enabled: false // 禁用AI分析
537
+ },
538
+ riskLevels: {
539
+ ...defaultConfig.riskLevels,
540
+ low: { block: true } // 低危也阻断
541
+ }
542
+ };
543
+
544
+ const reviewer = new CodeReviewer(customConfig, defaultRules);
545
+ ```
546
+
547
+ ## 🌍 环境变量
548
+
549
+ 可通过环境变量配置:
550
+
551
+ ```bash
552
+ # OpenAI API配置
553
+ export OPENAI_API_KEY="your-api-key"
554
+ export OPENAI_BASE_URL="https://api.openai.com/v1"
555
+
556
+ # 调试模式
557
+ export DEBUG_SMART_REVIEW=true
558
+ ```
559
+
560
+ ## 🔧 命令行参数
561
+
562
+ ```bash
563
+ smart-review [options]
564
+
565
+ 选项:
566
+ --staged 审查Git暂存区文件
567
+ --files <files> 审查指定文件 (逗号分隔)
568
+ --ai 强制启用AI分析
569
+ --no-ai 禁用AI分析
570
+ --diff-only 强制启用Git Diff增量审查模式
571
+ --full-file 禁用增量审查,审查完整文件内容
572
+ --config <path> 指定配置文件路径
573
+ --rules <path> 指定规则目录路径
574
+ --output <format> 输出格式 (text|json)
575
+ --verbose 详细输出
576
+ --help 显示帮助信息
577
+ ```
578
+
579
+ **增量审查相关参数说明:**
580
+ - `--diff-only`: 强制启用Git Diff增量审查模式,覆盖配置文件中的`reviewOnlyChanges`设置
581
+ - `--full-file`: 禁用增量审查,审查完整文件内容,适用于需要全面审查的场景
582
+
583
+ **使用示例:**
584
+ ```bash
585
+ # 强制使用增量审查模式
586
+ smart-review --staged --diff-only
587
+
588
+ # 强制审查完整文件内容
589
+ smart-review --files src/important.js --full-file
590
+
591
+ # 结合其他参数使用
592
+ smart-review --staged --diff-only --verbose
593
+ ```
594
+
595
+ ## 🚀 CI/CD 集成
596
+
597
+ ### GitHub Actions
598
+
599
+ ```yaml
600
+ name: Code Review
601
+ on: [push, pull_request]
602
+
603
+ jobs:
604
+ review:
605
+ runs-on: ubuntu-latest
606
+ steps:
607
+ - uses: actions/checkout@v3
608
+ - uses: actions/setup-node@v3
609
+ with:
610
+ node-version: '18'
611
+ - run: npm install
612
+ - run: npx smart-review --files $(git diff --name-only HEAD~1)
613
+ env:
614
+ OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
615
+ ```
616
+
617
+ ### GitLab CI
618
+
619
+ ```yaml
620
+ code_review:
621
+ stage: test
622
+ script:
623
+ - npm install
624
+ - npx smart-review --files $(git diff --name-only $CI_MERGE_REQUEST_TARGET_BRANCH_SHA)
625
+ variables:
626
+ OPENAI_API_KEY: $OPENAI_API_KEY
627
+ ```
628
+
629
+ ## 🛠️ 故障排除
630
+
631
+ ### 常见问题
632
+
633
+ 1. **AI分析失败**
634
+ ```
635
+ ⚠️ 检测到 Node 版本 < 18 或缺少全局 fetch
636
+ ```
637
+ **解决方案**: 升级到 Node.js 18+ 或安装 fetch polyfill
638
+
639
+ 2. **配置文件未找到**
640
+ ```
641
+ ❌ 配置文件加载失败
642
+ ```
643
+ **解决方案**: 确保 `.smart-review/smart-review.json` 存在且格式正确
644
+
645
+ 3. **API密钥错误**
646
+ ```
647
+ ❌ OpenAI API调用失败
648
+ ```
649
+ **解决方案**: 检查 `OPENAI_API_KEY` 环境变量或配置文件中的密钥
650
+
651
+ 4. **大文件处理超时**
652
+ ```
653
+ ❌ 文件分析超时
654
+ ```
655
+ **解决方案**:
656
+ - 减小 `maxChunkSizeKB` 配置值
657
+ - 增加 `chunkOverlapLines` 以减少分段数量
658
+ - 检查网络连接稳定性
659
+
660
+ 5. **分段分析结果不完整**
661
+ ```
662
+ ⚠️ 部分分段分析失败
663
+ ```
664
+ **解决方案**:
665
+ - 检查文件编码是否为 UTF-8
666
+ - 确保文件没有语法错误
667
+ - 调整 `maxRequestTokens` 配置
668
+
669
+ 6. **内存占用过高**
670
+ ```
671
+ ❌ 内存不足错误
672
+ ```
673
+ **解决方案**:
674
+ - 减少 `maxFilesPerBatch` 配置值
675
+ - 启用 `enableSmartBatching` 智能分批
676
+ - 添加更多文件到 `ignoreFiles` 列表
677
+
678
+ 7. **Token 限制错误**
679
+ ```
680
+ ❌ Request too large
681
+ ```
682
+ **解决方案**:
683
+ - 降低 `maxRequestTokens` 配置值
684
+ - 减小 `maxChunkSizeKB` 分段大小
685
+ - 检查是否有超大的单行代码
686
+
687
+ ### 调试模式
688
+
689
+ 启用详细日志:
690
+ ```bash
691
+ DEBUG_SMART_REVIEW=true smart-review --staged --verbose
692
+ ```
693
+
694
+ ## 🤝 贡献
695
+
696
+ 欢迎提交 Issue 和 Pull Request!
697
+
698
+ 1. Fork 项目
699
+ 2. 创建特性分支 (`git checkout -b feature/amazing-feature`)
700
+ 3. 提交更改 (`git commit -m 'Add amazing feature'`)
701
+ 4. 推送到分支 (`git push origin feature/amazing-feature`)
702
+ 5. 开启 Pull Request
703
+
704
+ ## 📞 支持
705
+
706
+ - 📧 邮箱: zlife@vip.qq.com
707
+ - 🐛 问题反馈: [GitHub Issues](https://github.com/vlinr/smart-review/issues)
708
+
709
+ ---
710
+
711
+ ⭐ 如果这个项目对你有帮助,请给个 Star!
712
+
713
+