job51-gitlab-cr-node-jt-1 2.6.5 → 2.6.7

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.
@@ -199,13 +199,13 @@
199
199
  > - **⚠️ 行号计算示例**(必读):
200
200
  > - **示例 0:临时文件完整格式**(理解计数起点)
201
201
  ```
202
- === File Information === <-- 元数据行,忽略,不编号
203
- New Path: b/src/Test.java <-- 元数据行,忽略,不编号
204
- Old Path: a/src/Test.java <-- 元数据行,忽略,不编号
205
- Block Index: 0 <-- 元数据行,忽略,不编号
206
- New Start: 29 <-- 元数据行,忽略,不编号
207
- New Count: 10 <-- 元数据行,忽略,不编号
208
- === Diff Content === <-- 元数据行,忽略,不编号
202
+ # File Information (AI 请忽略这些元数据行,从 @@ 之后开始计数)
203
+ # New Path: b/src/Test.java <-- 元数据行,忽略,不编号
204
+ # Old Path: a/src/Test.java <-- 元数据行,忽略,不编号
205
+ # Block Index: 0 <-- 元数据行,忽略,不编号
206
+ # New Start: 29 <-- 元数据行,忽略,不编号
207
+ # New Count: 10 <-- 元数据行,忽略,不编号
208
+ # Diff Content Below (start counting line numbers from the first line after @@)
209
209
  @@ -28,8 +29,10 @@ <-- @@ 行,不编号!从下一行才开始编号
210
210
  public void method() { <-- 空格开头,编号=1,绝对行号=1+29-1=29
211
211
  + Object obj = getXxx(); <-- + 开头,编号=2,绝对行号=2+29-1=30 ← 问题在这,new_line=30
@@ -248,11 +248,11 @@
248
248
  > - 示例:diff 块 `@@ -0,0 +1,56 @@` 范围是 [1, 56],如果你在完整文件中定位到第 60 行 → **该行不在 diff 块内,不能用**
249
249
  > - **原因**:GitLab API 只能评论 diff 块范围内的行
250
250
  > 5. **⚠️ 临时文件元数据行处理**(关键):
251
- > - 临时文件格式包含 8 行元数据(7 行信息 + 1 行`@@`),这些都**不编号**
251
+ > - 临时文件格式包含 7 行以 `# ` 开头的元数据行,这些都**不编号**
252
252
  > - **必须从 `@@` 之后的第一行才开始编号为 1**
253
253
  > - 验证方法:检查你的第一个行号是否等于 `new_start`。如果不是,说明你把元数据行算进去了
254
254
  > - 示例:`@@ -0,0 +1,56 @@` 的第一个新增行(如 `+package`)的行号必须是 **1**
255
- > - 错误示例:如果你返回的行号是 9、10、43 等,说明你把 8 行元数据算进去了,**必须重新计数**
255
+ > - 错误示例:如果你返回的行号是 8、9、43 等,说明你把 7 行元数据算进去了,**必须重新计数**
256
256
  > 6. **输出前最终验证**:
257
257
  > - 对于每个问题的行号 X,问自己:"X - new_start + 1 是否等于我在 diff 块中从 `@@` 之后开始数的位置?"
258
258
  > - 如果不等,说明计算错误,必须重新从 `@@` 之后逐行计数
@@ -16,17 +16,17 @@ description: 代码审查技能,审查变更代码并输出 REPORT 和 LINE_IN
16
16
  3. **解析行号**:**基于 diff 块内容逐行计数,计算绝对行号**
17
17
  - **⚠️ 重要**:行号计算规则详见 @.claude/rules/code-review-rules.md 第 13 条
18
18
  - **必须**基于当前 diff 块内容,从 `@@ ... @@` 头**之后**的第一行开始逐行计数
19
- - **忽略元数据行**:忽略 `=== File Information ===`、`=== Diff Content ===`、`New Path:`、`New Start:`、`New Count:`、`Block Index:` 等所有元数据行
19
+ - **忽略元数据行**:忽略所有以 `# ` 开头的元数据行(包括 `# File Information`、`# New Path:`、`# Old Path:`、`# Block Index:`、`# New Start:`、`# New Count:`、`# Diff Content Below` 等)
20
20
  - **⚠️ 关键**:`@@ ... @@` 这一行本身也不编号,从它**之后**的第一行才开始编号
21
21
  - **⚠️ 临时文件格式示例**(理解计数起点):
22
22
  ```
23
- === File Information === <-- 元数据行,忽略,不编号
24
- New Path: b/src/Test.java <-- 元数据行,忽略,不编号
25
- Old Path: a/src/Test.java <-- 元数据行,忽略,不编号
26
- Block Index: 0 <-- 元数据行,忽略,不编号
27
- New Start: 29 <-- 元数据行,忽略,不编号
28
- New Count: 10 <-- 元数据行,忽略,不编号
29
- === Diff Content === <-- 元数据行,忽略,不编号
23
+ # File Information (AI 请忽略这些元数据行,从 @@ 之后开始计数)
24
+ # New Path: b/src/Test.java <-- 元数据行,忽略,不编号
25
+ # Old Path: a/src/Test.java <-- 元数据行,忽略,不编号
26
+ # Block Index: 0 <-- 元数据行,忽略,不编号
27
+ # New Start: 29 <-- 元数据行,忽略,不编号
28
+ # New Count: 10 <-- 元数据行,忽略,不编号
29
+ # Diff Content Below (start counting line numbers from the first line after @@)
30
30
  @@ -28,8 +29,10 @@ <-- @@ 行,不编号!从下一行才开始编号
31
31
  public void method() { <-- 空格开头,编号=1,绝对行号=1+29-1=29
32
32
  + Object obj = getXxx(); <-- + 开头,编号=2,绝对行号=2+29-1=30
@@ -36,7 +36,7 @@ description: 代码审查技能,审查变更代码并输出 REPORT 和 LINE_IN
36
36
  - **计数步骤**:
37
37
  1. 找到 `@@ ... @@` 行(unified diff 的块头)
38
38
  2. 从 `@@ ... @@` **之后**的第一行开始,按顺序给每一行编号(第 1 行、第 2 行、第 3 行...)
39
- 3. `+` 开头的新增代码:编号;空格开头的上下文代码:编号;`-` 开头的删除代码:不编号
39
+ 3. `+` 开头的新增代码:编号;空格开头的上下文代码:编号;`-` 开头的删除代码:**不编号**
40
40
  4. **绝对行号 = 编号 + new_start - 1**
41
41
  - **简化计算**:
42
42
  - 对于 `@@ -0,0 +1,N @@`(新增文件):`绝对行号 = 编号`(因为 new_start=1)
@@ -49,7 +49,7 @@ description: 代码审查技能,审查变更代码并输出 REPORT 和 LINE_IN
49
49
  5. **验证计算过程**:在输出前,必须在心中默念验证:
50
50
  - "这个行号 X 是否在 [new_start, new_start + new_count - 1] 范围内?"
51
51
  - "如果 X 超出范围,说明我计数错误,必须从 `@@` 行之后重新逐行编号"
52
- - "临时文件的前 8 行(7 行元数据 + 1 行`@@`)都不能编号,从第 9 行(`@@`之后的第一行)才开始编号为 1"
52
+ - "临时文件的元数据行(以 `# ` 开头)和 `@@` 行都不能编号,从 `@@` 之后的第一行才开始编号为 1"
53
53
  - **示例**:
54
54
  - `@@ -0,0 +1,56 @@` 的行号范围是 [1, 56],**不能返回 57、60 等超出范围的值**
55
55
  - `@@ -167,7 +167,6 @@` 的行号范围是 [167, 172],**不能返回 <167 或 >172 的值**
@@ -1,7 +1,7 @@
1
1
  # GitLab Code Review AI Tool 技术文档
2
2
 
3
3
  **项目名称**: job51-gitlab-cr-node
4
- **当前版本**: 2.6.5
4
+ **当前版本**: 2.6.6
5
5
  **作者**: tao.jing
6
6
  **最后更新**: 2026-04-16
7
7
  **项目地址**: https://gitdev.51job.com/51jobweb/ai-agent
@@ -27,6 +27,18 @@
27
27
 
28
28
  ## 版本历史
29
29
 
30
+ ### v2.6.6 (2026-04-16)
31
+
32
+ **Bug 修复**:
33
+ - **修复行号计算 8 行偏移问题**:修改临时文件格式,将元数据行改为以 `# ` 开头的注释格式,并更新 SKILL.md 和 rules 中的说明
34
+ - 问题现象:AI 计的 absolute 行号总是比正确值多 8(如正确行号 35 返回 43)
35
+ - 根本原因:AI 没有正确忽略临时文件的元数据行(`=== File Information ===` 等 7 行),从文件第 1 行开始编号
36
+ - 修复方案:
37
+ - 修改临时文件格式:元数据行改为 `# File Information`、`# New Path:` 等注释格式
38
+ - 更新 SKILL.md:明确指示 AI 忽略所有以 `# ` 开头的行,从 `@@` 之后开始编号
39
+ - 更新 code-review-rules.md:同步更新示例格式
40
+ - 修复文件:`index.js:87-95`、`.claude/skills/simple-code-review/SKILL.md`、`.claude/rules/code-review-rules.md`
41
+
30
42
  ### v2.6.5 (2026-04-16)
31
43
 
32
44
  **Bug 修复**:
package/index.js CHANGED
@@ -85,13 +85,14 @@ class GitLabCodeReviewer {
85
85
  debugLog(`========== Diff Block ${blockIndex} 结束 ==========`);
86
86
 
87
87
  // 构造包含元数据的 diff 内容
88
- const diffContentWithMetadata = `=== File Information ===
89
- New Path: ${diffObject.new_path || 'N/A'}
90
- Old Path: ${diffObject.old_path || 'N/A'}
91
- Block Index: ${blockIndex}
92
- New Start: ${diffObject.line_info?.new_start || 1}
93
- New Count: ${diffObject.line_info?.new_count || 1}
94
- === Diff Content ===
88
+ // 注意:元数据行以 '# ' 开头,AI 会忽略这些行,从 '@@' 之后开始计数
89
+ const diffContentWithMetadata = `# File Information (AI 请忽略这些元数据行,从 @@ 之后开始计数)
90
+ # New Path: ${diffObject.new_path || 'N/A'}
91
+ # Old Path: ${diffObject.old_path || 'N/A'}
92
+ # Block Index: ${blockIndex}
93
+ # New Start: ${diffObject.line_info?.new_start || 1}
94
+ # New Count: ${diffObject.line_info?.new_count || 1}
95
+ # Diff Content Below (start counting line numbers from the first line after @@)
95
96
  ${diffObject.diff}`;
96
97
 
97
98
  // 将diff内容写入临时文件