job51-gitlab-cr-node-jt-1 2.7.4 → 2.7.6

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.
@@ -1,121 +1,121 @@
1
- ---
2
- name: simple-code-review
3
- description: 代码审查技能,审查变更代码并输出 REPORT 和 LINE_INFO
4
- ---
5
-
6
- ## 处理步骤
7
-
8
- 1. **读取 diff 文件**:使用 Read 工具读取文件:$ARGUMENTS
9
-
10
- 2. **解析文件信息**:从文件末尾的 `# File Information` 部分提取
11
- - `New Start`: 当前 diff 块在变更后文件中的起始行号
12
- - `New Count`: 当前 diff 块的行数
13
- - `New Path`: 文件路径(去掉 `a/` 或 `b/` 前缀)
14
- - **注意**:元数据在文件末尾,`@@` 行已被移除,不影响行号计数
15
-
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
- ```
26
- [代码行 1] <-- 空格开头,行号 = 29(New Start=29)
27
- + [代码行 2] <-- + 开头,行号 = 30(29+1)
28
- + [代码行 3] <-- + 开头,行号 = 31(30+1)
29
- [代码行 4] <-- 空格开头,行号 = 32(31+1)
30
- ...(diff 内容结束)
31
- # File Information
32
- # New Path: b/src/Test.java
33
- # New Start: 29 <-- 元数据在末尾,提供行号计算起点
34
- ```
35
- - **⚠️ 强制验证步骤**(输出前必须执行):
36
- 1. 从元数据提取 `New Start` 和 `New Count`,计算行号范围:`[New Start, New Start + New Count - 1]`
37
- 2. **逐个检查**每个问题的行号是否在该范围内
38
- 3. **如果任何行号超出范围,必须重新计数**
39
- 4. **禁止**直接使用从完整文件读取的行号
40
- - **示例**:
41
- - `New Start: 1, New Count: 56` 的行号范围是 [1, 56],**不能返回 57、60 等超出范围的值**
42
- - `New Start: 167, New Count: 6` 的行号范围是 [167, 172],**不能返回 <167 或 >172 的值**
43
-
44
- 4. **读取上下文**:基于 New Path 读取变更后文件,涉及方法调用时追踪读取实现代码
45
- - **⚠️ 重要**:读取完整文件仅用于理解代码逻辑,**不得**直接使用完整文件中的行号
46
- - 如果从完整文件中定位到问题行号,**必须验证**该行号是否在 diff 块范围内
47
- - **验证公式**:`new_start <= 行号 <= new_start + new_count - 1`
48
- - **如果行号超出范围**:必须回到 diff 块内容,重新基于 `@@` 头之后逐行计数
49
-
50
- 5. **执行审查**:按照 @.claude/rules/code-review-rules.md 中的规则进行审查
51
-
52
- 6. **输出结果**:
53
- - 审查结果放入 `<REPORT>` 标签
54
- - 行号信息放入 `<LINE_INFO>` 标签(必须输出)
55
- - LINE_INFO 格式参考 @.claude/rules/code-review-rules.md 第 18 条
56
- - **问题和行号对应**:`<LINE_INFO>` 中的第 N 个元素对应第 N 个问题的行号
57
-
58
- ## 输出模板
59
-
60
- **⚠️ 强制格式要求(违反会导致解析失败)**:
61
-
62
- 1. **报告开头必须包含 `## 🤖 AI 代码审查结果`**:
63
- - **正确**:`<REPORT>\n## 🤖 AI 代码审查结果\n\n### 🔴 严重问题`
64
- - **错误**:`<REPORT>\n### 🔴 严重问题`(缺少主标题)
65
- - **错误**:`<REPORT>\n## 代码审查结果`(缺少 emoji)
66
-
67
- 2. **问题格式**:每个问题必须以 `**问题 N**:` 开头(N 为阿拉伯数字 1,2,3...)
68
- - **正确**:`**问题 1**:`、`**问题 2**:`
69
- - **错误**:`1. **xxx**`、`### 问题 1`、`**问题一**:`、`**问题 1**: xxx(行 43)`
70
-
71
- 3. **每个问题块只能有一个 `**文件及行号**:` 行**:
72
- - **正确**:每个问题块中 `**文件及行号**:` 只出现一次
73
- - **错误**:同一个问题块中出现两次 `**文件及行号**:` 行
74
-
75
- 4. **行号标注**:**禁止**在问题描述中写"(行 X)",行号只能通过 `<LINE_INFO>` 标签提供
76
-
77
- 5. **LINE_INFO**:必须与问题一一对应,第 N 个元素对应问题 N 的行号
78
-
79
- 6. **禁止输出错误代码示例**:已经有行号定位了,不需要重复输出错误代码
80
-
81
- 7. **必须输出 `<LINE_INFO>` 标签**:即使无问题也要输出空数组 `<LINE_INFO>[]</LINE_INFO>`
82
-
83
- 8. **修改建议中的代码格式**:
84
- - **必须使用 markdown 代码块**(```language ... ```)展示建议代码
85
- - **禁止**使用行内代码(\`xxx\`)展示多行代码示例
86
- - 代码块的语言根据文件类型自动选择(如 \`java\`、\`js\`、\`ts\`、\`py\`、\`go\` 等)
87
- - 示例:
88
- \`\`\`
89
- **修改建议**:添加空值检查
90
- \`\`\`java
91
- if ([变量] != null) {
92
- [方法调用];
93
- }
94
- \`\`\`
95
- \`\`\`
96
-
97
- <REPORT>
98
- ## 🤖 AI 代码审查结果
99
-
100
- ### 🔴 严重问题
101
-
102
- **问题 1**:[问题描述]<br/>
103
- **文件及行号**:[文件路径:行号]<br/>
104
- **修改建议**:[正确示例代码或说明]
105
-
106
- **问题 2**:[问题描述]<br/>
107
- **文件及行号**:[文件路径:行号]<br/>
108
- **修改建议**:[正确示例代码或说明]
109
-
110
- </REPORT>
111
-
112
- <LINE_INFO>
113
- [{"new_path":"文件路径","new_line":行号,"old_path":"文件路径","old_line":行号}]
114
- </LINE_INFO>
115
-
116
- **说明**:
117
- - 无问题时省略 `### 🔴 严重问题` 标题,但 `<LINE_INFO>` 必须输出(空数组:`[]`)
118
- - 每个问题以 `**问题 N**:` 开头,方便切分
119
- - **`<LINE_INFO>` 数组中的元素顺序必须与问题顺序一致**:第 1 个元素对应问题 1 的行号,第 2 个元素对应问题 2 的行号,以此类推
120
- - 行号:返回变更后文件中的绝对行号(从 1 开始计数),例如文件第 43 行则 `new_line = 43`
121
- - **无严重问题时,LINE_INFO 必须输出空数组 `[]`**
1
+ ---
2
+ name: simple-code-review
3
+ description: 代码审查技能,审查变更代码并输出 REPORT 和 LINE_INFO
4
+ ---
5
+
6
+ ## 处理步骤
7
+
8
+ 1. **读取 diff 文件**:使用 Read 工具读取文件:$ARGUMENTS
9
+
10
+ 2. **解析文件信息**:从文件末尾的 `# File Information` 部分提取
11
+ - `New Start`: 当前 diff 块在变更后文件中的起始行号
12
+ - `New Count`: 当前 diff 块的行数
13
+ - `New Path`: 文件路径(去掉 `a/` 或 `b/` 前缀)
14
+ - **注意**:元数据在文件末尾,`@@` 行已被移除,不影响行号计数
15
+
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
+ ```
26
+ [代码行 1] <-- 空格开头,行号 = 29(New Start=29)
27
+ + [代码行 2] <-- + 开头,行号 = 30(29+1)
28
+ + [代码行 3] <-- + 开头,行号 = 31(30+1)
29
+ [代码行 4] <-- 空格开头,行号 = 32(31+1)
30
+ ...(diff 内容结束)
31
+ # File Information
32
+ # New Path: b/src/Test.java
33
+ # New Start: 29 <-- 元数据在末尾,提供行号计算起点
34
+ ```
35
+ - **⚠️ 强制验证步骤**(输出前必须执行):
36
+ 1. 从元数据提取 `New Start` 和 `New Count`,计算行号范围:`[New Start, New Start + New Count - 1]`
37
+ 2. **逐个检查**每个问题的行号是否在该范围内
38
+ 3. **如果任何行号超出范围,必须重新计数**
39
+ 4. **禁止**直接使用从完整文件读取的行号
40
+ - **示例**:
41
+ - `New Start: 1, New Count: 56` 的行号范围是 [1, 56],**不能返回 57、60 等超出范围的值**
42
+ - `New Start: 167, New Count: 6` 的行号范围是 [167, 172],**不能返回 <167 或 >172 的值**
43
+
44
+ 4. **读取上下文**:基于 New Path 读取变更后文件,涉及方法调用时追踪读取实现代码
45
+ - **⚠️ 重要**:读取完整文件仅用于理解代码逻辑,**不得**直接使用完整文件中的行号
46
+ - 如果从完整文件中定位到问题行号,**必须验证**该行号是否在 diff 块范围内
47
+ - **验证公式**:`new_start <= 行号 <= new_start + new_count - 1`
48
+ - **如果行号超出范围**:必须回到 diff 块内容,重新基于 `@@` 头之后逐行计数
49
+
50
+ 5. **执行审查**:按照 @.claude/rules/code-review-rules.md 中的规则进行审查
51
+
52
+ 6. **输出结果**:
53
+ - 审查结果放入 `<REPORT>` 标签
54
+ - 行号信息放入 `<LINE_INFO>` 标签(必须输出)
55
+ - LINE_INFO 格式参考 @.claude/rules/code-review-rules.md 第 18 条
56
+ - **问题和行号对应**:`<LINE_INFO>` 中的第 N 个元素对应第 N 个问题的行号
57
+
58
+ ## 输出模板
59
+
60
+ **⚠️ 强制格式要求(违反会导致解析失败)**:
61
+
62
+ 1. **报告开头必须包含 `## 🤖 AI 代码审查结果`**:
63
+ - **正确**:`<REPORT>\n## 🤖 AI 代码审查结果\n\n### 🔴 严重问题`
64
+ - **错误**:`<REPORT>\n### 🔴 严重问题`(缺少主标题)
65
+ - **错误**:`<REPORT>\n## 代码审查结果`(缺少 emoji)
66
+
67
+ 2. **问题格式**:每个问题必须以 `**问题 N**:` 开头(N 为阿拉伯数字 1,2,3...)
68
+ - **正确**:`**问题 1**:`、`**问题 2**:`
69
+ - **错误**:`1. **xxx**`、`### 问题 1`、`**问题一**:`、`**问题 1**: xxx(行 43)`
70
+
71
+ 3. **每个问题块只能有一个 `**文件及行号**:` 行**:
72
+ - **正确**:每个问题块中 `**文件及行号**:` 只出现一次
73
+ - **错误**:同一个问题块中出现两次 `**文件及行号**:` 行
74
+
75
+ 4. **行号标注**:**禁止**在问题描述中写"(行 X)",行号只能通过 `<LINE_INFO>` 标签提供
76
+
77
+ 5. **LINE_INFO**:必须与问题一一对应,第 N 个元素对应问题 N 的行号
78
+
79
+ 6. **禁止输出错误代码示例**:已经有行号定位了,不需要重复输出错误代码
80
+
81
+ 7. **必须输出 `<LINE_INFO>` 标签**:即使无问题也要输出空数组 `<LINE_INFO>[]</LINE_INFO>`
82
+
83
+ 8. **修改建议中的代码格式**:
84
+ - **必须使用 markdown 代码块**(```language ... ```)展示建议代码
85
+ - **禁止**使用行内代码(\`xxx\`)展示多行代码示例
86
+ - 代码块的语言根据文件类型自动选择(如 \`java\`、\`js\`、\`ts\`、\`py\`、\`go\` 等)
87
+ - 示例:
88
+ \`\`\`
89
+ **修改建议**:添加空值检查
90
+ \`\`\`java
91
+ if ([变量] != null) {
92
+ [方法调用];
93
+ }
94
+ \`\`\`
95
+ \`\`\`
96
+
97
+ <REPORT>
98
+ ## 🤖 AI 代码审查结果
99
+
100
+ ### 🔴 严重问题
101
+
102
+ **问题 1**:[问题描述]<br/>
103
+ **文件及行号**:[文件路径:行号]<br/>
104
+ **修改建议**:[正确示例代码或说明]
105
+
106
+ **问题 2**:[问题描述]<br/>
107
+ **文件及行号**:[文件路径:行号]<br/>
108
+ **修改建议**:[正确示例代码或说明]
109
+
110
+ </REPORT>
111
+
112
+ <LINE_INFO>
113
+ [{"new_path":"文件路径","new_line":行号,"old_path":"文件路径","old_line":行号}]
114
+ </LINE_INFO>
115
+
116
+ **说明**:
117
+ - 无问题时省略 `### 🔴 严重问题` 标题,但 `<LINE_INFO>` 必须输出(空数组:`[]`)
118
+ - 每个问题以 `**问题 N**:` 开头,方便切分
119
+ - **`<LINE_INFO>` 数组中的元素顺序必须与问题顺序一致**:第 1 个元素对应问题 1 的行号,第 2 个元素对应问题 2 的行号,以此类推
120
+ - 行号:返回变更后文件中的绝对行号(从 1 开始计数),例如文件第 43 行则 `new_line = 43`
121
+ - **无严重问题时,LINE_INFO 必须输出空数组 `[]`**
@@ -1,9 +1,9 @@
1
1
  # GitLab Code Review AI Tool 技术文档
2
2
 
3
3
  **项目名称**: job51-gitlab-cr-node
4
- **当前版本**: 2.7.3
4
+ **当前版本**: 2.7.4
5
5
  **作者**: tao.jing
6
- **最后更新**: 2026-04-17
6
+ **最后更新**: 2026-04-20
7
7
  **项目地址**: https://gitdev.51job.com/51jobweb/ai-agent
8
8
 
9
9
  ---
@@ -27,9 +27,29 @@
27
27
 
28
28
  ## 版本历史
29
29
 
30
+ ### v2.7.4 (2026-04-20)
31
+
32
+ **当前版本**: 日志标识增强
33
+
34
+ **优化**:
35
+ - **日志追踪标识**:为每个 diff 块的 AI 调用添加唯一标识,解决 CI 环境中处理多个 diff 块重试时日志追踪困难的问题
36
+ - 问题现象:当某个 diff 块需要重试时,日志中无法清晰识别是哪个块的输出
37
+ - 修复方案:
38
+ - 在 `processBlock` 函数中构造块标识:`文件路径#块索引`(如 `UserService.java#0`)
39
+ - 将标识传递给 `reviewDiffWithClaudeUsingFile` 方法
40
+ - 更新所有关键日志输出,添加 `[块标识]` 前缀
41
+ - 影响范围:
42
+ - 所有 AI 调用的日志(开始审核、重试、完成、决策判断等)
43
+ - LINE_INFO 检查、严重问题检查、标题验证等关键决策点的日志
44
+ - 修复文件:
45
+ - `index.js:110-112`:构造块标识并传递给审查方法
46
+ - `index.js:182-183`:添加 `blockIdentifier` 参数
47
+ - `index.js:202-274`:更新所有日志输出添加标识前缀
48
+
30
49
  ### v2.7.3 (2026-04-17)
31
50
 
32
- **当前版本**: 技术文档版本更新
51
+ **优化**:
52
+ - **技术文档版本同步**:更新文档版本号与 package.json 保持一致
33
53
 
34
54
  ### v2.7.2 (2026-04-17)
35
55