job51-gitlab-cr-node-jt-1 2.5.7 → 2.5.8

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.
@@ -181,13 +181,13 @@
181
181
  12. 最终输出必须以 `<REPORT>` 开始,以 `</REPORT>` 结束;
182
182
 
183
183
  13. **行号计算规范**:
184
- > - **行号定义**:行号是变更后文件中的**绝对行号**(从 1 开始计数)
184
+ > - **行号定义**:行号是**diff 块内的相对行号**(从 1 开始计数)**不是文件的绝对行号**
185
185
  > - **⚠️ 关键规则:基于 diff 块内容逐行计数**(强制执行):
186
186
  > - **禁止**读取完整文件后计算绝对行号
187
- > - **必须**基于 diff 块内容,从 `@@ ... @@` 头之后的第一行开始逐行计数
188
- > - **⚠️ 重要:忽略所有元数据行**(如 `=== File Information ===`、`=== Diff Content ===`、`New Path:` 等)
187
+ > - **必须**基于当前 diff 块内容,从 `@@ ... @@` 头之后开始逐行计数
188
+ > - **⚠️ 重要:忽略所有元数据行**(如 `=== File Information ===`、`=== Diff Content ===`、`New Path:`、`New Start:`、`New Count:` 等)
189
189
  > - 计数规则:
190
- > - **从 `@@ ... @@` 行之后的第一行开始计数**(不是从文件第一行,不是从元数据开始)
190
+ > - **从 `@@ ... @@` 行之后的第一行开始计数**(该行 = 行号 1)
191
191
  > - `+` 开头的新增代码:计入行号
192
192
  > - 空格开头的上下文代码:计入行号
193
193
  > - `-` 开头的删除代码:**不计入**行号(已删除)
@@ -210,14 +210,19 @@
210
210
  > - 示例 2:已有文件修改 `@@ -42,3 +43,5 @@`
211
211
  ```
212
212
  @@ -42,3 +43,5 @@
213
- public void method() { // 行号 = 43(上下文行,保留)
214
- + Object obj = service.getData(); // 行号 = 44
215
- + obj.toString(); // 行号 = 45 ← 问题在这,new_line = 45
213
+ public void method() { // 行号 = 1(上下文行,从 @@ 后开始计数)
214
+ + Object obj = service.getData(); // 行号 = 2
215
+ + obj.toString(); // 行号 = 3 ← 问题在这,new_line = 3
216
216
  }
217
217
  ```
218
- > - **⚠️ 验证方法**:输出前检查行号是否合理
219
- > - 对于 `@@ -0,0 +1,N @@` 的新文件,最大行号应该是 N
220
- > - 如果报告的行号超过 diff 块的 `new_count`,说明计算错误
218
+ > - **⚠️ 验证方法**(强制执行,输出前必须检查):
219
+ > 1. **查看 diff 头的 new_count 值**:
220
+ > - `@@ -0,0 +1,N @@` → 最大行号 = N
221
+ > - `@@ -old_start,old_count +new_start,new_count @@` → 最大行号 = new_count
222
+ > 2. **确保所有问题的行号 ≤ new_count**
223
+ > 3. **如果行号超出范围,说明计算错误,必须重新计算**
224
+ > - 示例:`@@ -0,0 +1,56 @@` 的 diff 块,最大行号必须是 56,**不能返回 57, 60 等**
225
+ > - 示例:`@@ -167,7 +167,6 @@` 的 diff 块,new_count=6,最大行号必须是 6
221
226
  > - **关键**:问题行号必须准确指向变更后代码在 diff 块中的位置(从 `@@` 头之后计数)
222
227
 
223
228
  14. `<REPORT>` 标签示例中的问题块数量仅用于展示格式,实际数量由 review 结果决定;
@@ -16,28 +16,15 @@ description: 代码审查技能,审查变更代码并输出 REPORT 和 LINE_IN
16
16
  3. **解析行号**:**基于 diff 块内容逐行计数**
17
17
  - **⚠️ 重要**:行号计算规则详见 @.claude/rules/code-review-rules.md 第 13 条
18
18
  - **禁止**读取完整文件后计算绝对行号
19
- - **必须**基于 diff 块内容,从 `@@ ... @@` 头之后开始逐行计数
20
- - **忽略元数据行**:忽略 `=== File Information ===`、`=== Diff Content ===`、`New Path:` 等所有元数据行
21
- - **计数起点**:从 `@@ -0,0 +1,N @@` `@@ -old,count +new,count @@` 之后的第一行开始计数(该行 = 行号 1)
22
- - **⚠️ 行号计算示例**:
23
- ```
24
- @@ -0,0 +1,56 @@
25
- +package com.job51.dev.bbs.controller; // 行号 = 1
26
- + // 行号 = 2
27
- +import java.util.List; // 行号 = 3
28
- ...
29
- +public class Test { // 行号 = 17
30
- + public void method() { // 行号 = 18
31
- + Object obj = service.getData(); // 行号 = 19
32
- + obj.toString(); // 行号 = 20 ← 问题在这,new_line = 20
33
- + }
34
- +}
35
- ```
36
- - 行号定义:行号是变更后文件中的绝对行号(从 1 开始计数)
37
- - **验证方法**:输出前检查行号是否合理
38
- - 对于 `@@ -0,0 +1,N @@` 的新文件,最大行号应该是 N
39
- - 如果报告的行号超过 diff 块的 `new_count`,说明计算错误
40
- - 例如:如果新增代码在 diff 块的第 43 行,则 `new_line = 43`
19
+ - **必须**基于当前 diff 块内容,从 `@@ ... @@` 头之后开始逐行计数
20
+ - **忽略元数据行**:忽略 `=== File Information ===`、`=== Diff Content ===`、`New Path:`、`New Start:`、`New Count:` 等所有元数据行
21
+ - **计数起点**:从 `@@ ... @@` 之后的**第一行**开始计数(该行 = 行号 1)
22
+ - **⚠️ 关键规则**:
23
+ - **行号 = 从 @@ 头之后到该行的累计行数**
24
+ - **最大行号不能超过 diff 块的 new_count 值**(例如 `@@ -0,0 +1,56 @@` 的 diff 块,最大行号必须是 56)
25
+ - **验证方法**(输出前必须检查):
26
+ - 查看 diff 头的 `+1,N` 或 `+new_start,new_count` 中的 `N` / `new_count` 值
27
+ - 确保所有问题的行号 N / new_count
41
28
 
42
29
  4. **读取上下文**:基于 New Path 读取变更后文件,涉及方法调用时追踪读取实现代码
43
30
 
@@ -849,6 +849,7 @@ npm run dev
849
849
 
850
850
  | 版本 | 日期 | 变更说明 |
851
851
  |------|------|----------|
852
+ | **2.5.7** | 2026-04-16 | **行号计算规则修复**:修复 AI 返回的行号超出 diff 块范围的问题。问题根因:AI 读取完整源文件后返回文件的绝对行号,而不是基于 diff 块的相对行号。修复方案:(1) 更新 `code-review-rules.md` 第 13 条,明确行号是**diff 块内的相对行号**,不是文件的绝对行号;(2) 添加行号验证规则:最大行号不能超过 diff 块的 `new_count` 值;(3) 简化 `SKILL.md` 中的行号计算说明,将详细规则移至 rules 文件;(4) 在 rules 中添加强制验证步骤:输出前必须检查 diff 头的 `new_count` 值,确保所有问题行号 ≤ new_count |
852
853
  | **2.5.6** | 2026-04-16 | **当前版本**:技术文档更新 |
853
854
  | 2.4.10 | 2026-04-16 | **行号验证逻辑修复**:修复 AI 返回的行号超出 diff 块范围导致 GitLab API 400 错误的问题。新增功能:(1) 在 `postSingleCommentToGitLab` 方法中添加行号验证逻辑,检查 AI 返回的行号是否在 diff 块有效范围内 `[oldStart, oldEnd]` 或 `[newStart, newEnd]`;(2) 支持删除文件(`new_count=0`)的行号处理,将 AI 返回的 `new_line` 自动映射为 `old_line`;(3) 当行号超出范围时,自动降级为一般讨论(general discussion),避免 GitLab API 报错;(4) 增强 diff 块信息日志输出,包含 `old_start/old_count/old_end/new_start/new_count/isDeleteFile` 完整信息 |
854
855
  | 2.4.9 | 2026-04-16 | **代码优化与性能指标收集**:(1) 删除已废弃的 `reviewDiffWithClaude` 方法,精简 79 行代码;(2) 添加 GitLab 版本信息缓存机制,避免重复 API 调用;(3) 实现日志分级系统(DEBUG/INFO/WARN/ERROR),支持通过 `LOG_LEVEL` 环境变量控制输出级别;(4) 实现完整的性能指标收集器 `MetricsCollector`,收集 diff 块大小/文件类型/耗时分布,慢调用分析 (>10 秒),AI/API 调用成功率,评论发布统计等 |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "job51-gitlab-cr-node-jt-1",
3
- "version": "2.5.7",
3
+ "version": "2.5.8",
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": {