job51-gitlab-cr-node-skill-prompt-optimize 1.4.3 → 1.4.4

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.
@@ -195,6 +195,11 @@
195
195
  > - 禁止在 package、import、类定义、方法签名等位置报告无关问题
196
196
 
197
197
  19. **输出格式**:严格参照 SKILL.md 模板,无某类问题时省略对应部分;
198
+ > - **必须输出 `<LINE_INFO>` 标签**:包含所有问题的行号信息
199
+ > - **LINE_INFO 格式**:`[{"new_path":"文件路径","new_line":行号}]`
200
+ > - **行号计算**:参考下方第 14 条 行号计算规范
201
+ > - **行号定位**:参考下方第 17 条 问题报告位置规则
202
+ > - 无问题时输出空数组:`<LINE_INFO>[]</LINE_INFO>`
198
203
 
199
204
  20. **误报防控检查清单**(报告前必须确认):
200
205
  > - [ ] 已追踪读取相关方法实现,确认可能返回危险值
@@ -1,82 +1,56 @@
1
1
  ---
2
2
  name: simple-code-review
3
- description: 你是一个专业的代码审查助手。请严格根据代码规范、安全规则(如 SQL 注入防护、XSS 防护)、性能要求(如时间复杂度优化、内存占用控制)、可读性要求(如注释完整性、命名规范性)及功能正确性标准处理指定文件中的代码变更内容
3
+ description: 代码审查技能,审查变更代码并输出 REPORT LINE_INFO
4
4
  ---
5
5
 
6
6
  ## 处理步骤
7
7
 
8
8
  1. **读取 diff 文件**:使用 Read 工具读取文件:$ARGUMENTS
9
9
 
10
- 2. **解析文件信息**:从文件内容中提取以下信息
11
- - `Block Index`: 当前块的索引号
12
- - New Path: 变更后的文件路径(可能包含 `b/` 前缀)
13
- - Old Path: 变更前的文件路径(可能包含 `a/` 前缀)
14
- - `Diff Content`: 实际的代码变更内容(unified diff 格式)
10
+ 2. **解析文件信息**:从 `=== File Information ===` 部分提取
11
+ - `Block Index`: 当前块索引号
12
+ - `Line Info`: 行号信息 JSON 对象
13
+ - `New Path` / `Old Path`: 文件路径(去掉 `a/` 或 `b/` 前缀)
15
14
 
16
- 3. **解析 Line Info**:解析 `Line Info` 行中的 JSON 对象,获取 diff 块的行号信息
17
- - `new_path`: 变更后文件路径(必填)
18
- - `new_line`: 变更后代码行号(必填,指向 `+` 开头的新增代码在变更后文件中的行号)
15
+ 3. **解析行号**:从 `Line Info` 中获取 `new_start`,遍历 diff 内容计算每行行号
16
+ - `+` 开头:记录行号,计数器 +1
17
+ - 空格开头:计数器 +1
18
+ - `-` 开头:跳过
19
19
 
20
- 4. **仅审查新增代码**(关键规则):
21
- - **只审查 `+` 开头的新增代码行**
22
- - **忽略 `-` 开头的已删除代码行**(已删除的代码不纳入审查范围)
23
- - 空格开头的上下文代码仅作参考,不进行审查
20
+ 4. **读取上下文**:基于 New Path 读取变更后文件,涉及方法调用时追踪读取实现代码
24
21
 
25
- 5. **读取项目上下文文件**:
26
- - 基于 `Line Info` 和 diff 内容,读取**变更后文件**(New Path)的完整内容
27
- - 如果涉及方法调用,读取相关方法/类的实现代码以确认是否存在真实的运行时风险
22
+ 5. **执行审查**:按照 @.claude/rules/code-review-rules.md 中的规则进行审查
28
23
 
29
- 6. **深度分析代码上下文(必须执行)**:
30
- - 对于 diff 中涉及的方法/函数调用,**必须**使用 Read 工具追踪读取该方法的实现代码
31
- - **跨 diff 块分析**:同一文件可能有多个 diff 块,必须合并分析
32
- - 只有在确认方法/函数确实可能返回危险值时,才能报告严重问题
33
-
34
- 7. **结合项目上下文**,按照 @.claude/rules/code-review-rules.md 中的规则进行审查
35
-
36
- 8. **提取行号信息**:审查完成后,从审查结果中提取所有问题的行号信息
37
- - 遍历每个问题,解析"**文件及行号**"行中的文件路径和行号
38
- - 将行号信息以 JSON 数组格式放入 `<LINE_INFO>` 标签内
39
- - **LINE_INFO 格式必须包含 `new_path` 和 `new_line` 字段**:
40
- - 示例:`<LINE_INFO>[{"new_path":"src/main/java/UserService.java","new_line":87}]</LINE_INFO>`
41
- - **字段说明**:
42
- - `new_path`: 变更后文件路径(必填)
43
- - `new_line`: 变更后代码行号(必填,指向 `+` 开头的新增代码在变更后文件中的行号)
44
-
45
- 9. 输出格式必须以下方模板为准
24
+ 6. **输出结果**:
25
+ - 审查结果放入 `<REPORT>` 标签
26
+ - 行号信息放入 `<LINE_INFO>` 标签(必须输出)
46
27
 
47
28
  ## 输出模板
48
29
 
49
- **说明**:
50
- - 必须以 `<REPORT>` 开始,以 `</REPORT>` 结束
51
- - 若某类问题不存在,则**完全省略该模块**(不输出对应标题)
52
- - 所有占位符必须被真实内容替换
53
- - 带圈数字序号:① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩
54
-
55
30
  <REPORT>
56
31
  ## 🤖 AI 代码审查结果
57
32
 
58
33
  **生成时间**: [当前时间]
59
- **审查范围**: 仅审查新增代码(+ 开头的行)
60
34
 
61
35
  ---
62
36
 
63
- ### 审查总览
64
-
65
- [简要总结]
66
-
67
37
  ### 🔴 严重问题
68
38
 
69
39
  [带圈数字序号][问题描述]<br/>
70
- **文件及行号**:[完整文件路径:行号,如:src/main/java/com/example/UserService.java:87]<br/>
40
+ **文件及行号**:[文件路径:行号]<br/>
71
41
  **修改建议**:[修复建议 + 错误代码 + 正确示例]
72
42
 
73
43
  ### 🟡 警告
74
44
 
75
45
  [带圈数字序号][问题描述]<br/>
76
- **文件及行号**:[完整文件路径:行号]<br/>
46
+ **文件及行号**:[文件路径:行号]<br/>
77
47
  **修改建议**:[改进建议 + 代码示例]
78
48
 
79
49
  </REPORT>
80
50
  <LINE_INFO>
81
51
  [{"new_path":"文件路径","new_line":行号}]
82
52
  </LINE_INFO>
53
+
54
+ **说明**:
55
+ - 无问题时省略对应标题,但 `<LINE_INFO>` 必须输出(空数组:`[]`)
56
+ - 行号指向 `+` 开头的新增代码行
package/index.js CHANGED
@@ -124,9 +124,10 @@ class GitLabCodeReviewer {
124
124
  try {
125
125
  // 构造包含元数据的 diff 内容
126
126
  const diffContentWithMetadata = `=== File Information ===
127
+ Block Index: ${blockIndex}
128
+ Line Info: {"old_start":${diffObject.line_info?.old_start || 0},"old_count":${diffObject.line_info?.old_count || 0},"new_start":${diffObject.line_info?.new_start || 0},"new_count":${diffObject.line_info?.new_count || 0},"firstLineFirstChar":"${diffObject.line_info?.firstLineFirstChar || ''}"}
127
129
  New Path: ${diffObject.new_path || 'N/A'}
128
130
  Old Path: ${diffObject.old_path || 'N/A'}
129
- Block Index: ${blockIndex}
130
131
  === Diff Content ===
131
132
  ${diffObject.diff}`;
132
133
 
@@ -206,7 +207,7 @@ ${diffObject.diff}`;
206
207
  2. **每个模块不是必须的**:没有对应问题时,完全省略该模块(不输出标题)
207
208
  3. 必须以 <REPORT> 开始,以 </REPORT> 结束
208
209
  4. 如有严重问题,从diff头部行号数据计算真正出问题的行用来在<LINE_INFO>标签中构建问题对应的行号信息
209
- 4. 不要输出任何额外的解释、问候或总结文本`;
210
+ 5. 不要输出任何额外的解释、问候或总结文本`;
210
211
  //打印
211
212
  debugLog(`Claude命令: ${prompt}`);
212
213
  // 最多重试5次,直到结果包含"🤖 AI 代码审查结果"或达到最大重试次数
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "job51-gitlab-cr-node-skill-prompt-optimize",
3
- "version": "1.4.3",
3
+ "version": "1.4.4",
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": {