job51-gitlab-cr-node-jt-1 2.9.8 → 3.0.0

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.
@@ -11,26 +11,22 @@ description: 代码审查技能,审查变更代码并输出 REPORT 和 LINE_IN
11
11
  - `New Start`: 当前 diff 块在变更后文件中的起始行号
12
12
  - `New Count`: 当前 diff 块的行数
13
13
  - `New Path`: 文件路径(去掉 `a/` 或 `b/` 前缀)
14
+ - `Is Large File`: 如果为 true,表示这是完整文件审查(GitLab diff 截断)
14
15
  - **注意**:元数据在文件末尾,`@@` 行已被移除,不影响行号计数
15
16
 
16
- 3. **解析行号**:**基于 diff 块内容逐行计数,计算绝对行号**
17
- - **行号计算方法**:
18
- 1. 从元数据中读取 `New Start` 值
19
- 2. 从第 1 行代码开始,行号 = `New Start`
20
- 3. 每往下一行(`+` 开头或空格开头),行号 +1
21
- 4. `-` 开头的删除行**不计数**,行号不增加
22
- 5. 示例:`New Start: 1` 时,第 1 行代码行号=1,第 2 行行号=2,以此类推
23
- - **忽略元数据行**:文件末尾的 `# File Information` 等以 `# ` 开头的行都**不编号**,直接跳过
24
- - **⚠️ 强制验证步骤**(输出前必须执行):
25
- 1. 从元数据提取 `New Start` 和 `New Count`,计算行号范围:`[New Start, New Start + New Count - 1]`
26
- 2. **逐个检查**每个问题的行号是否在该范围内
27
- 3. **如果任何行号超出范围,必须重新计数**
28
- 4. **禁止**直接使用从完整文件读取的行号
17
+ 3. **解析行号**:
18
+ - **大文件模式(Is Large File: true)**:
19
+ - 这是完整文件内容审查,所有代码都是新增
20
+ - 行号从 1 开始,逐行计数
21
+ - 发现问题时,直接使用实际行号
22
+ - **正常 diff 模式**:
23
+ - 从元数据中读取 `New Start`
24
+ - 从第 1 行代码开始,行号 = `New Start`
25
+ - 每往下一行(`+` 开头或空格开头),行号 +1
26
+ - `-` 开头的删除行**不计数**
27
+ - **忽略元数据行**:文件末尾的 `# File Information` 等以 `# ` 开头的行都**不编号**
29
28
 
30
29
  4. **读取上下文**:基于 New Path 读取变更后文件,涉及方法调用时追踪读取实现代码
31
- - **⚠️ 重要**:读取完整文件用于理解代码逻辑,但问题行号必须基于 diff 块计算
32
- - 如果从完整文件中定位到问题行号,**必须验证**该行号是否在 diff 块范围内
33
- - **验证公式**:`new_start <= 行号 <= new_start + new_count - 1`
34
30
 
35
31
  5. **执行审查**:按照 @.claude/rules/code-review-rules.md 中的规则进行审查
36
32
 
@@ -77,11 +73,21 @@ description: 代码审查技能,审查变更代码并输出 REPORT 和 LINE_IN
77
73
 
78
74
  7. **输出结果**:
79
75
  - 审查结果放入 `<REPORT>` 标签
80
- - 行号信息放入 `<LINE_INFO>` 标签(必须输出)
81
- - LINE_INFO 格式参考 @.claude/rules/code-review-rules.md 第 18 条
76
+ - **⚠️ 必须输出 `<LINE_INFO>` 标签**(这是强制要求,没有例外)
77
+ - LINE_INFO 格式:`[{"new_path":"文件路径","new_line":行号}]`
82
78
  - **问题和行号对应**:`<LINE_INFO>` 中的第 N 个元素对应第 N 个问题的行号
79
+ - **无问题时**:LINE_INFO 必须输出空数组 `<LINE_INFO>[]</LINE_INFO>`
83
80
  - **⚠️ 关键格式要求**:`<LINE_INFO>` 标签必须放置在 `</REPORT>` 标签之后
84
81
 
82
+ ## ⚠️ 大文件审查特殊要求
83
+
84
+ 当 `Is Large File: true` 时:
85
+ 1. 这是完整文件内容审查,所有代码行都是新增(`+` 开头)
86
+ 2. **必须审查整个文件**,不要只看部分代码
87
+ 3. **发现任何问题时,必须输出 `<LINE_INFO>` 标签**,包含准确的行号
88
+ 4. 行号基于完整文件内容计算,从第 1 行开始
89
+ 5. **即使只有一个问题,也必须输出 LINE_INFO**
90
+
85
91
  ## 输出模板
86
92
 
87
93
  **⚠️ 强制格式要求(违反会导致解析失败)**:
@@ -101,6 +107,8 @@ description: 代码审查技能,审查变更代码并输出 REPORT 和 LINE_IN
101
107
  6. **禁止输出错误代码示例**:已经有行号定位了,不需要重复输出错误代码
102
108
 
103
109
  7. **必须输出 `<LINE_INFO>` 标签**:即使无问题也要输出空数组 `<LINE_INFO>[]</LINE_INFO>`
110
+ - **⚠️ 再次强调**:如果发现严重问题,必须同时输出 LINE_INFO 标签包含行号信息
111
+ - **如果只输出 REPORT 而不输出 LINE_INFO,审查结果会被系统丢弃**
104
112
 
105
113
  <REPORT>
106
114
  ## 🤖 AI 代码审查结果
@@ -111,10 +119,14 @@ description: 代码审查技能,审查变更代码并输出 REPORT 和 LINE_IN
111
119
  **文件及行号**:[文件路径:行号]<br/>
112
120
  **修改建议**:[正确示例代码或说明]
113
121
 
122
+ **问题 2**:[问题描述]<br/>
123
+ **文件及行号**:[文件路径:行号]<br/>
124
+ **修改建议**:[正确示例代码或说明]
125
+
114
126
  </REPORT>
115
127
 
116
128
  <LINE_INFO>
117
- [{"new_path":"文件路径","new_line":行号}]
129
+ [{"new_path":"文件路径","new_line":行号},{"new_path":"文件路径","new_line":行号}]
118
130
  </LINE_INFO>
119
131
 
120
132
  **说明**:
@@ -123,3 +135,4 @@ description: 代码审查技能,审查变更代码并输出 REPORT 和 LINE_IN
123
135
  - **`<LINE_INFO>` 数组中的元素顺序必须与问题顺序一致**
124
136
  - 行号:返回变更后文件中的绝对行号(从 1 开始计数)
125
137
  - **无严重问题时,LINE_INFO 必须输出空数组 `[]`**
138
+ - **⚠️ 有严重问题时,LINE_INFO 必须包含对应的行号信息,否则审查结果会被丢弃**
package/index.js CHANGED
@@ -549,40 +549,54 @@ ${allReportsText}
549
549
 
550
550
  // 大文件模式下的特殊提示
551
551
  const largeFilePrompt = isLargeFile ? `
552
- **⚠️ 大文件审查模式**:
553
- 这是一个完整文件内容的审查(因为 GitLab diff 被截断)。
554
- 1. 所有代码行都是新增或修改的内容
555
- 2. 必须审查整个文件的业务逻辑,包括:
556
- - 所有方法中的循环逻辑、状态管理
557
- - 所有数据库操作和资源管理
558
- - 所有框架特性使用(如 @Async、MyBatis-Plus)
559
- 3. 发现问题时,准确报告行号(基于文件内容的实际行号)
552
+ **⚠️ 大文件审查模式 - 强制格式要求**:
553
+ 这是完整文件审查(GitLab diff截断),所有代码都是新增内容。
554
+ 1. 直接输出审查报告,不要先分析后格式化
555
+ 2. 发现问题后立即按模板格式写入 REPORT 和 LINE_INFO
556
+ 3. 行号基于完整文件实际行号计算
557
+ 4. **严禁在输出中写 "Let me format" 等中间过程文本**
558
+ 5. **必须在 </REPORT> 后立即输出 <LINE_INFO> 标签,包含每个问题的行号**
560
559
  ` : '';
561
560
 
562
561
  const prompt = `请调用 simple-code-review 技能审核代码变更。
563
562
  文件路径:${filePath}
564
563
  ${largeFilePrompt}
565
- **重要审查规则**:
566
- 1. **严格按照 .claude/rules/code-review-rules.md 中的规则执行审查**,该文件包含详细的审查规则
567
- 2. **重点检测以下问题类型**(详见规则文件):
568
- - 资源泄漏问题:JDBC连接、文件流、网络资源未关闭
569
- - 框架特性问题:Spring @Async返回值、MyBatis-Plus更新实体、乐观锁版本号
570
- - 循环逻辑问题:循环内状态失效、累积状态不一致
571
- - 异常处理问题:异常吞没、catch块空实现
572
- - 类型转换问题:精度丢失、装箱拆箱空指针
573
- - 集合操作问题:遍历中修改、空集合访问
574
- - 并发安全问题:线程安全、分布式锁
575
- - 边界条件问题:循环边界、输入边界
576
- - 空指针问题:需深度分析,遵循规则文件中的验证流程
577
- 3. **上下文读取要求**:必须使用 Read 工具读取完整方法代码,分析循环逻辑、状态管理、框架使用
578
- 4. **问题报告位置**:只报告在 diff 块内实际会出错的代码行,禁止在 import/类定义/方法签名等位置报告
579
-
580
- **输出要求**:
581
- 1. 严格按照 .claude/skills/simple-code-review/SKILL.md 中定义的模板格式输出
582
- 2. **每个模块不是必须的**:没有对应问题时,完全省略该模块(不输出标题)
583
- 3. 必须以 <REPORT> 开始,以 </REPORT> 结束
584
- 4. **必须输出 '<LINE_INFO>' 标签**,包含所有问题的行号信息(无问题时输出空数组 [])
585
- 5. 不要输出任何额外的解释、问候或总结文本`;
564
+ **⚠️ 强制输出格式要求(违反会导致审查结果丢失)**:
565
+
566
+ 你必须直接输出以下格式,不要输出任何分析过程、思考过程或中间文本:
567
+
568
+ <REPORT>
569
+ ## 🤖 AI 代码审查结果
570
+
571
+ ### 🔴 严重问题
572
+
573
+ **问题 1**:[问题描述]<br/>
574
+ **文件及行号**:[文件路径:实际行号]<br/>
575
+ **修改建议**:[修复建议]
576
+
577
+ **问题 2**:[问题描述]<br/>
578
+ **文件及行号**:[文件路径:实际行号]<br/>
579
+ **修改建议**:[修复建议]
580
+
581
+ ...(更多问题按同样格式)
582
+
583
+ </REPORT>
584
+
585
+ <LINE_INFO>
586
+ [{"new_path":"文件路径","new_line":实际行号},{"new_path":"文件路径","new_line":实际行号}]
587
+ </LINE_INFO>
588
+
589
+ **审查重点**:
590
+ 1. 资源泄漏:JDBC/文件流未关闭 → 报告资源创建行号
591
+ 2. 框架问题:@Async返回具体类型 → 报告方法定义行号
592
+ 3. 循环逻辑:状态过期、累积不一致 → 报告循环内出错行号
593
+ 4. 异常吞没:catch块空实现 → 报告catch行号
594
+ 5. 空指针:包装类型拆箱 → 报告使用行号
595
+
596
+ **关键**:
597
+ - 有严重问题时,LINE_INFO 必须包含对应行号,否则结果被丢弃
598
+ - 无问题时输出 <LINE_INFO>[]</LINE_INFO>
599
+ - 不要输出 "Let me analyze"、"Let me format" 等文本`;
586
600
  //打印
587
601
  debugLog(`[${blockIdentifier}] Claude命令: ${prompt}`);
588
602
  // 最多重试5次,直到结果包含"🤖 AI 代码审查结果"或达到最大重试次数
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "job51-gitlab-cr-node-jt-1",
3
- "version": "2.9.8",
3
+ "version": "3.0.0",
4
4
  "description": "GitLab merge request code review tool with AI-powered analysis and project context support",
5
5
  "main": "index.js",
6
6
  "bin": {