gitlab-ai-review 3.2.3 → 3.2.5

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.
Files changed (2) hide show
  1. package/lib/prompt-tools.js +79 -58
  2. package/package.json +1 -1
@@ -84,7 +84,7 @@ export function buildFileReviewPrompt(fileName, meaningfulChanges) {
84
84
  2. **优先检查"类型: 删除"的代码**,确认是否有其他地方仍在使用
85
85
  3. **只对有问题的行提出审查意见**,没有问题的行不需要评论
86
86
  4. **必须使用中文**返回审查意见
87
- 5. 返回 JSON 格式的结果,格式如下:
87
+ 5. **必须返回标准 JSON 格式**,不要用其他格式,结构如下:
88
88
 
89
89
  \`\`\`json
90
90
  {
@@ -92,24 +92,25 @@ export function buildFileReviewPrompt(fileName, meaningfulChanges) {
92
92
  {
93
93
  "lineNumber": 15,
94
94
  "hasIssue": true,
95
- "comment": "请按照项目审查规则中定义的格式填写审查意见"
96
- },
97
- {
98
- "lineNumber": 20,
99
- "hasIssue": false
95
+ "comment": "这里填写审查意见内容"
100
96
  }
101
97
  ]
102
98
  }
103
99
  \`\`\`
104
100
 
105
- **JSON 格式要求:**
101
+ **🚨 重要:外层必须是标准 JSON**
102
+ - 整个响应必须是合法的 JSON 对象
103
+ - 不要在最外层使用【】、emoji 或其他特殊格式
106
104
  - lineNumber 必须是数字
107
- - hasIssue 必须是布尔值
108
- - **comment 字段的内容格式:请严格遵循"项目特定的审查规则"中定义的格式**
109
- - 如果项目规则中没有定义特殊格式,使用中文简洁描述即可
105
+ - hasIssue 必须是布尔值(true/false)
106
+ - comment 必须是字符串
107
+
108
+ **comment 字段的内容:**
109
+ - 如果"项目特定的审查规则"中定义了 comment 格式(如包含 emoji、评分等),请在 comment 字符串内使用该格式
110
+ - 如果没有定义特殊格式,使用中文简洁描述即可
110
111
 
111
112
  6. 如果所有代码都没有问题,返回空的 reviews 数组:\`{"reviews": []}\`
112
- 7. 只返回 JSON,不要包含其他文字说明
113
+ 7. **只返回 JSON**,不要在 JSON 外面添加任何文字说明
113
114
 
114
115
  **再次强调:**
115
116
  - 看到 "类型: 删除" 和 "-" → 代码被移除了
@@ -277,42 +278,67 @@ export function buildFileReviewWithImpactPrompt(fileName, meaningfulChanges, imp
277
278
  prompt += `\`\`\`\n`;
278
279
  });
279
280
 
280
- prompt += `\n## ⚠️ 重要说明:如何区分删除和新增
281
+ prompt += `\n## ⚠️ 🚨 最重要的规则:理解代码修改 vs 重复定义
282
+
283
+ **🔥 核心概念(必读):**
281
284
 
282
- **请务必正确理解以下标记:**
283
- 1. **"类型: 删除"** + 代码以 **"-"** 开头 = **代码已被移除**(不存在了)
284
- 2. **"类型: 新增"** + 代码以 **"+"** 开头 = **代码是新加的**(新存在的)
285
+ 在 diff 中,如果你看到:
286
+ - 第一行:**"-"** 开头(删除旧值)
287
+ - 第二行:**"+"** 开头(添加新值)
288
+ - 并且是同一个变量名或属性名
285
289
 
286
- **🔥 关于代码修改的重要理解:**
290
+ 这是 **"修改/替换"**,NOT "重复定义"!
287
291
 
288
- 如果在**同一位置**看到以下情况(删除旧代码,添加新代码):
289
- - 第一行以 "-" 开头(删除)
290
- - 第二行以 "+" 开头(新增)
291
- - 修改的是同一个变量/属性/函数
292
+ **❌ 常见错误(请务必避免):**
292
293
 
293
- 这是**修改(替换)**,不是"重复定义"或"两次定义"!
294
+ **错误 1:对象属性修改**
295
+ 看到 diff:
296
+ - deleted: deletedSymbols,
297
+ + deleted: allDeleted,
294
298
 
295
- **常见错误理解:**
299
+ 错误理解:❌ "返回对象中存在重复的 'deleted' 键,违反对象键唯一性"
300
+ 正确理解:✅ "将 deleted 属性的值从 deletedSymbols 修改为 allDeleted"
296
301
 
297
- ❌ 错误示例 1:
298
- 看到:
302
+ 解释:
303
+ - 旧版本(-)的 "deleted: deletedSymbols" 已经被删除了,不存在了
304
+ - 新版本(+)的 "deleted: allDeleted" 是现在的版本
305
+ - 最终代码中只有一个 deleted 键,没有重复!
306
+
307
+ **错误 2:变量赋值修改**
308
+ 看到 diff:
299
309
  - const name = 'old';
300
310
  + const name = 'new';
301
- 错误理解:❌ "代码中定义了两次 name 变量,违反唯一性"
302
- 正确理解:✅ "将 name 的值从 'old' 修改为 'new',这是正常的代码变更"
303
311
 
304
- 错误示例 2:
305
- 看到:
312
+ 错误理解:❌ "定义了两次 name 变量"
313
+ 正确理解:✅ "修改了 name 的初始值"
314
+
315
+ **错误 3:属性值修改**
316
+ 看到 diff:
306
317
  - all: [...addedSymbols, ...deletedSymbols],
307
318
  + all: [...addedSymbols, ...allDeleted],
308
- 错误理解:❌ "返回对象中存在两个 all 属性"
309
- 正确理解:✅ "修改了 all 属性的值,从 deletedSymbols 改为 allDeleted"
310
319
 
311
- **核心原则:**
312
- - **"-"** 的代码已经**不存在**了(被删除)
313
- - **"+"** 的代码是**新存在**的(被添加)
314
- - 如果同一个变量/属性有 "-" 又有 "+",这是**修改**,不是重复定义
315
- - 在最终代码中,只有 "+" 的版本会保留
320
+ 错误理解:❌ "all 属性重复定义"
321
+ 正确理解:✅ "修改了 all 数组的第二个展开项"
322
+
323
+ **🎯 判断标准:**
324
+
325
+ 1. **如何判断是修改而非重复?**
326
+ - 看是否在**相邻的行**
327
+ - 一行是 **"-"**(删除)
328
+ - 下一行是 **"+"**(新增)
329
+ - **同一个变量名/属性名**
330
+ → 这就是**修改**!
331
+
332
+ 2. **如何判断是真正的重复定义?**
333
+ - 两行都是 **"+"**(新增)
334
+ - 没有对应的 **"-"**(删除)
335
+ - 同一个变量名/属性名
336
+ → 这才是**重复定义**!
337
+
338
+ **🚨 重要提醒:**
339
+ - **"-"** 开头的代码已经**不存在**了,不要把它当作"存在"
340
+ - **"+"** 开头的代码才是**最终保留**的版本
341
+ - 不要说"存在两个XXX",应该说"将XXX从A修改为B"
316
342
 
317
343
  ## 审查要求
318
344
 
@@ -328,7 +354,7 @@ export function buildFileReviewWithImpactPrompt(fileName, meaningfulChanges, imp
328
354
  7. 如果发现其他文件使用了**被删除/修改**的符号,需要提醒可能的影响
329
355
  8. **只对有问题的行提出审查意见**,没有问题的行不需要评论
330
356
  9. **必须使用中文**返回审查意见
331
- 10. 返回 JSON 格式的结果,格式如下:
357
+ 10. **必须返回标准 JSON 格式**,不要用其他格式,结构如下:
332
358
 
333
359
  \`\`\`json
334
360
  {
@@ -336,42 +362,37 @@ export function buildFileReviewWithImpactPrompt(fileName, meaningfulChanges, imp
336
362
  {
337
363
  "lineNumber": 15,
338
364
  "hasIssue": true,
339
- "comment": "请按照项目审查规则中定义的格式填写审查意见"
340
- },
341
- {
342
- "lineNumber": 20,
343
- "hasIssue": false
365
+ "comment": "这里填写审查意见内容"
344
366
  }
345
367
  ]
346
368
  }
347
369
  \`\`\`
348
370
 
349
- **🚨 关键规则:**
350
- - lineNumber 必须是上面"代码变更"中列出的行号(如第 15 行、第 20 行等)
371
+ **🚨 JSON 格式的关键规则:**
372
+ - **整个响应必须是合法的 JSON 对象**
373
+ - **不要在最外层使用【】、emoji 或其他特殊格式**
374
+ - lineNumber 必须是上面"代码变更"中列出的行号
375
+ - lineNumber 必须是数字,不能是 null、undefined
351
376
  - **不要使用其他文件的行号**,即使发现其他文件受影响
352
- - 如果发现其他文件受影响,在当前变更行的 comment 中说明影响范围
353
- - lineNumber 必须是数字,不能是 null、undefined 或其他值
354
- - 如果某个变更没有问题,可以不在 reviews 中包含它
355
- - **comment 字段的内容格式:请严格遵循"项目特定的审查规则"中定义的格式**(如果有定义)
377
+ - 如果发现其他文件受影响,在当前变更行的 comment 字符串中说明
378
+
379
+ **comment 字段的内容:**
380
+ - 如果"项目特定的审查规则"中定义了 comment 格式(如包含【严重程度评分】、emoji、分点说明等),**请在 comment 字符串内**使用该格式
381
+ - comment 是一个字符串,可以包含换行符 \\n 来格式化内容
382
+ - 如果没有定义特殊格式,使用中文简洁描述即可
356
383
 
357
384
  **示例:**
358
- 如果删除了第 15 行的函数,且发现其他文件在使用:
359
- \`\`\`json
360
- {
361
- "lineNumber": 15,
362
- "hasIssue": true,
363
- "comment": "删除函数 fetchData 会导致以下文件调用失败:components/UserList.vue (第 45 行)、pages/Dashboard.vue (第 78 行)。建议保留该函数或提供替代方案。"
364
- }
365
- \`\`\`
385
+ 如果删除了第 15 行的函数,且发现其他文件在使用,comment 内容可以是:
386
+ "【严重程度评分:8/10】\\n\\n📋 问题描述:\\n删除了函数 fetchData 但该函数仍被多处使用\\n\\n🔍 影响分析:\\n• 当前文件:函数定义被完全移除\\n• 受影响的其他文件:components/UserList.vue (第 45 行)\\n\\n💡 改进建议:\\n1. 恢复此函数或提供替代方案\\n2. 先标记为 @deprecated"
366
387
 
367
388
  11. 如果所有代码都没有问题,返回空的 reviews 数组:\`{"reviews": []}\`
368
- 12. 只返回 JSON,不要包含其他文字说明
369
- 13. comment 字段必须使用中文,要简洁明了,重点指出影响范围
389
+ 12. **只返回 JSON**,不要在 JSON 外面添加任何文字说明
370
390
 
371
391
  **最后再次确认:**
372
392
  - 看到 **"类型: 删除"** 和 **"-"** → 代码**被移除了**,需要检查影响
373
393
  - 看到 **"类型: 新增"** 和 **"+"** → 代码**是新的**,检查代码质量
374
- - **千万不要把删除理解成新增!**`;
394
+ - **千万不要把删除理解成新增!**
395
+ - **返回的必须是标准 JSON,不要在最外层使用特殊字符!**`;
375
396
 
376
397
  return prompt;
377
398
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gitlab-ai-review",
3
- "version": "3.2.3",
3
+ "version": "3.2.5",
4
4
  "description": "GitLab AI Review SDK with Impact Analysis - 支持影响分析、删除符号检测、注释代码识别、文件内部冲突检查、智能文件过滤的智能代码审查工具",
5
5
  "main": "index.js",
6
6
  "type": "module",