@unifan/pi-review-zh 1.0.15 → 1.0.17

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.
Files changed (2) hide show
  1. package/index.ts +37 -26
  2. package/package.json +1 -1
package/index.ts CHANGED
@@ -200,42 +200,49 @@ type ReviewTarget =
200
200
  | { type: "folder"; paths: string[] };
201
201
 
202
202
  // 针对不同审查目标的中文提示词
203
+ const LITE_REVIEW_PROMPT =
204
+ "【极速体检模式】请首先运行 `git diff` 获取代码改动,并针对改动涉及的核心函数按需使用 `read` 查阅周边上下文(如所在完整方法实现与生命周期),快速排查高危逻辑崩溃与安全漏洞。结合上下文精准核验后直接输出审查发现。严禁输出任何步骤清单。所有输出必须使用纯正中文。";
205
+
206
+ const FULL_REVIEW_PROMPT =
207
+ "【全量深度审查模式】请对当前代码改动展开深度的上下文关联审查:首先运行 `git diff` 全量查阅改动,必须使用 `read` / `grep` 深入查阅改动方法所在的完整类定义、调用方契约、状态机与生命周期等关键上下文,深入排查业务逻辑隐患、边界异常、并发安全、性能GC开销与架构契约,结合完整代码脉络直接输出详尽审查清单。严禁输出任何步骤清单。所有输出必须使用纯正中文。";
208
+
203
209
  const UNCOMMITTED_PROMPT =
204
- "请审查当前代码的所有改动(包含暂存区、未暂存区以及新增文件)。直接运行 `git diff` 与 `git status` 查看代码差异,并直接输出审查发现。严禁输出任何步骤清单或待办列表。所有输出必须使用纯正中文。";
210
+ "请审查当前代码的所有改动(包含暂存区、未暂存区以及新增文件)。先运行 `git diff` 与 `git status` 获取改动,再针对关键改动按需使用 `read` / `grep` 查阅周边上下文代码与调用链路,结合完整上下文直接输出审查发现。严禁输出任何步骤清单或待办列表。所有输出必须使用纯正中文。";
205
211
 
206
212
  const BASE_BRANCH_PROMPT_WITH_MERGE_BASE =
207
- "请审查当前分支相对于基准分支 '{baseBranch}' 的改动(合并基准 commit: {mergeBaseSha})。直接运行 `git diff {mergeBaseSha}` 查看改动并直接输出审查发现。严禁输出任何步骤清单。所有输出必须使用纯正中文。";
213
+ "请审查当前分支相对于基准分支 '{baseBranch}' 的改动(合并基准 commit: {mergeBaseSha})。运行 `git diff {mergeBaseSha}` 查看改动,并按需使用 `read` / `grep` 结合周边上下文深入分析,直接输出审查发现。严禁输出任何步骤清单。所有输出必须使用纯正中文。";
208
214
 
209
215
  const BASE_BRANCH_PROMPT_FALLBACK =
210
- "请审查当前分支相对于基准分支 '{branch}' 的改动。直接使用 `git merge-base` 与 `git diff` 查看改动并直接输出审查发现。严禁输出任何步骤清单。所有输出必须使用纯正中文。";
216
+ "请审查当前分支相对于基准分支 '{branch}' 的改动。先使用 `git merge-base` 与 `git diff` 查看改动,并按需使用 `read` / `grep` 结合周边上下文深入分析,直接输出审查发现。严禁输出任何步骤清单。所有输出必须使用纯正中文。";
211
217
 
212
218
  const COMMIT_PROMPT_WITH_TITLE =
213
- '请审查提交 commit {sha} ("{title}") 引入的代码改动。直接运行 `git show {sha}` 查看差异并直接输出审查发现。严禁输出任何步骤清单。所有输出必须使用纯正中文。';
219
+ '请审查提交 commit {sha} ("{title}") 引入的代码改动。运行 `git show {sha}` 查看差异,并按需使用 `read` / `grep` 结合周边上下文深入分析,直接输出审查发现。严禁输出任何步骤清单。所有输出必须使用纯正中文。';
214
220
 
215
221
  const COMMIT_PROMPT =
216
- "请审查提交 commit {sha} 引入的代码改动。直接运行 `git show {sha}` 查看差异并直接输出审查发现。严禁输出任何步骤清单。所有输出必须使用纯正中文。";
222
+ "请审查提交 commit {sha} 引入的代码改动。运行 `git show {sha}` 查看差异,并按需使用 `read` / `grep` 结合周边上下文深入分析,直接输出审查发现。严禁输出任何步骤清单。所有输出必须使用纯正中文。";
217
223
 
218
224
  const PULL_REQUEST_PROMPT =
219
- '请审查 Pull Request #{prNumber} ("{title}") 相对于基准分支 \'{baseBranch}\' 的改动(合并基准 commit: {mergeBaseSha})。直接运行 `git diff {mergeBaseSha}` 查看改动并直接输出审查发现。严禁输出任何步骤清单。所有输出必须使用纯正中文。';
225
+ '请审查 Pull Request #{prNumber} ("{title}") 相对于基准分支 \'{baseBranch}\' 的改动(合并基准 commit: {mergeBaseSha})。运行 `git diff {mergeBaseSha}` 查看改动,并按需使用 `read` / `grep` 结合周边上下文深入分析,直接输出审查发现。严禁输出任何步骤清单。所有输出必须使用纯正中文。';
220
226
 
221
227
  const PULL_REQUEST_PROMPT_FALLBACK =
222
- '请审查 Pull Request #{prNumber} ("{title}") 相对于基准分支 \'{baseBranch}\' 的改动。直接运行 `git diff` 查看改动并直接输出审查发现。严禁输出任何步骤清单。所有输出必须使用纯正中文。';
228
+ '请审查 Pull Request #{prNumber} ("{title}") 相对于基准分支 \'{baseBranch}\' 的改动。先运行 `git diff` 查看改动,并按需使用 `read` / `grep` 结合周边上下文深入分析,直接输出审查发现。严禁输出任何步骤清单。所有输出必须使用纯正中文。';
223
229
 
224
230
  const FOLDER_REVIEW_PROMPT =
225
- "请对以下目录/文件路径的代码进行快照审查:{paths}。直接读取这些文件并直接输出审查发现。严禁输出任何步骤清单。所有输出必须使用纯正中文。";
231
+ "请对以下目录/文件路径的代码进行快照审查:{paths}。直接读取这些文件并结合上下文直接输出审查发现。严禁输出任何步骤清单。所有输出必须使用纯正中文。";
226
232
 
227
233
  // 权威的中文代码审查准则 (基于 Codex 准则精炼与本土化)
228
234
  const REVIEW_RUBRIC = `> 🚨【最高执行原则】:
229
235
  > 1. **全流程纯中文**:思维链(Thinking)、推理分析与最终报告必须 100% 使用纯正中文,严禁包含任何英文段落或英文小标题!
230
- > 2. **直接审查,拒绝繁琐步骤**:严禁打印任何工作流待办清单(Checklist)或环境测试命令!直接阅读代码改动并立即输出审查报告!
236
+ > 2. **结合上下文,拒绝断章取义**:仅看 diff 的片段容易产生误判。请**先运行 \`git diff\` 锁定变动,再针对改动涉及的关键方法、类生命周期或调用方,按需使用 \`read\` 或 \`grep\` 查阅必要的上下文代码**(精准核验,切勿无目的漫游遍历),结合真实完整的业务上下文做出准确裁决!
237
+ > 3. **直接审查,拒绝繁琐步骤**:严禁打印任何工作流待办清单(Checklist)或环境测试命令!
231
238
 
232
239
  # 核心代码审查准则
233
240
 
234
- 你是一名资深技术专家,正在审查提交的代码改动。请直击本质,拦截真实缺陷:
241
+ 你是一名资深技术专家,正在审查提交的代码改动。请结合完整代码上下文,直击本质,拦截真实缺陷:
235
242
 
236
243
  ## 重点排查范围
237
- 1. **代码正确性与边界**:业务逻辑漏洞、空指针/未定义引用、边界越界、生命周期异常、未捕获的运行时崩溃。
238
- 2. **并发与状态安全**:竞态条件、死锁隐患、异步缺少等待、脏状态残留。
244
+ 1. **代码正确性与边界**:结合函数整体逻辑与调用方,排查业务漏洞、空指针/未定义引用、边界越界、生命周期异常、未捕获的运行时崩溃。
245
+ 2. **并发与状态安全**:结合上下文状态机与生命周期,排查竞态条件、死锁隐患、异步缺少等待、脏状态残留。
239
246
  3. **性能与内存开销**:高频主循环内的大量堆内存分配 (GC 压力)、不必要的深拷贝、高复杂度算法、资源句柄泄露。
240
247
  4. **防御与输入校验**:外部未受信任输入未做严格参数化或校验(SQL注入、路径穿越、越权等)。
241
248
  5. **只关注本次改动**:严禁将改动前既有的历史代码当作本次改动的缺陷。
@@ -243,7 +250,7 @@ const REVIEW_RUBRIC = `> 🚨【最高执行原则】:
243
250
  ## 严格过滤误报
244
251
  - ❌ 严禁提出吹毛求疵、纯属个人审美的风格建议。
245
252
  - ❌ 严禁提出 Linter / 类型检查器会自动捕获的浅层格式建议。
246
- - ❌ 严禁基于纯主观假设进行无端猜测,每条问题必须有明确代码事实证据。
253
+ - ❌ 严禁脱离上下文进行无端猜测,每条问题必须有明确的代码与上下文事实证据。
247
254
 
248
255
  ## 缺陷等级标记 [P0~P3]
249
256
  - **[P0 - 致命阻塞]** 崩溃、死锁、数据损坏、关键功能不可用,必须阻断合并
@@ -255,8 +262,8 @@ const REVIEW_RUBRIC = `> 🚨【最高执行原则】:
255
262
  ### 审查发现清单
256
263
  每个问题按以下格式列出(若无存活缺陷,明确输出:\`未发现存活的代码缺陷,代码质量良好,建议合并。\`):
257
264
  - **[P0|P1|P2|P3] 简短标题**:\`文件路径:行号\`
258
- - **缺陷说明**:简明说明后果与触发场景。
259
- - **代码证据**:引用 1~3 行关键代码。
265
+ - **缺陷说明**:结合上下文简明说明后果与触发场景。
266
+ - **代码证据**:引用关键代码及上下文。
260
267
  - **修改建议**:给出最小化修复思路或代码替换块(可使用 \`\`\`suggestion)。
261
268
 
262
269
  ### 综合裁决
@@ -425,9 +432,15 @@ async function getDefaultBranch(pi: ExtensionAPI): Promise<string> {
425
432
  return "main";
426
433
  }
427
434
 
428
- async function buildReviewPrompt(pi: ExtensionAPI, target: ReviewTarget): Promise<string> {
435
+ async function buildReviewPrompt(
436
+ pi: ExtensionAPI,
437
+ target: ReviewTarget,
438
+ reviewStyle: "lite" | "full" | "standard" = "standard",
439
+ ): Promise<string> {
429
440
  switch (target.type) {
430
441
  case "uncommitted":
442
+ if (reviewStyle === "lite") return LITE_REVIEW_PROMPT;
443
+ if (reviewStyle === "full") return FULL_REVIEW_PROMPT;
431
444
  return UNCOMMITTED_PROMPT;
432
445
 
433
446
  case "baseBranch": {
@@ -916,6 +929,7 @@ export default function reviewExtension(pi: ExtensionAPI) {
916
929
  target: ReviewTarget,
917
930
  useFreshSession: boolean,
918
931
  runtimeSettings?: Partial<ReviewSettings>,
932
+ reviewStyle: "lite" | "full" | "standard" = "standard",
919
933
  ): Promise<void> {
920
934
  if (reviewOriginId) {
921
935
  ctx.ui.notify("当前已有正在进行的审查会话。请先使用 /end-review 结束。", "warning");
@@ -964,29 +978,26 @@ export default function reviewExtension(pi: ExtensionAPI) {
964
978
  pi.appendEntry(REVIEW_STATE_TYPE, { active: true, originId: lockedOriginId });
965
979
  }
966
980
 
967
- const prompt = await buildReviewPrompt(pi, target);
981
+ const prompt = await buildReviewPrompt(pi, target, reviewStyle);
968
982
  const hint = getUserFacingHint(target);
969
983
  const projectGuidelines = await loadProjectReviewGuidelines(ctx.cwd);
970
984
 
971
- const MANDATORY_CHINESE_HEADER = `> 🚨【核心语言指令 - 最高优先级】\n> 你的**所有思维链(Thinking)、中间分析过程、代码排查笔记、审查发现与最终裁决结论**必须 100% 全程使用纯正中文进行思考与撰写!绝对禁止输出任何英文思考段落、英文标题或英文总结!`;
972
-
973
- let fullPrompt = `${MANDATORY_CHINESE_HEADER}\n\n${REVIEW_RUBRIC}`;
985
+ let fullPrompt = REVIEW_RUBRIC;
974
986
 
975
987
  if (settings.mode === "subagents") {
976
988
  fullPrompt += `\n\n---\n\n${buildSubagentOrchestrationPrompt(settings.concurrency, settings.gateEnabled)}`;
977
989
  }
978
990
 
979
- fullPrompt += `\n\n---\n\n## 本次审查目标与任务指示\n\n${prompt}`;
991
+ fullPrompt += `\n\n---\n\n## 本次审查任务指示\n\n${prompt}`;
980
992
 
981
993
  if (projectGuidelines) {
982
994
  fullPrompt += `\n\n## 本项目附加规范指南\n\n${projectGuidelines}`;
983
995
  }
984
996
 
985
- fullPrompt += `\n\n> 🚨【最终语言校验】:请再次检查你的输出,确保通篇 100% 均为流畅纯正的中文,绝无任何英文说明!`;
986
-
997
+ const styleTag = reviewStyle === "lite" ? "[极速]" : reviewStyle === "full" ? "[全量]" : "";
987
998
  const modeLabel = settings.mode === "single" ? "单模型模式" : `多Subagent并发(${settings.concurrency}专家)`;
988
999
  const modeHint = useFreshSession ? " (独立审查分支)" : "";
989
- ctx.ui.notify(`正在启动代码审查: ${hint}${modeHint} [${modeLabel}]`, "info");
1000
+ ctx.ui.notify(`正在启动代码审查 ${styleTag}: ${hint}${modeHint} [${modeLabel}]`, "info");
990
1001
 
991
1002
  pi.sendUserMessage(fullPrompt);
992
1003
  }
@@ -1186,7 +1197,7 @@ export default function reviewExtension(pi: ExtensionAPI) {
1186
1197
  return;
1187
1198
  }
1188
1199
 
1189
- await executeReview(ctx, { type: "uncommitted" }, false);
1200
+ await executeReview(ctx, { type: "uncommitted" }, false, undefined, "lite");
1190
1201
  },
1191
1202
  });
1192
1203
 
@@ -1223,7 +1234,7 @@ export default function reviewExtension(pi: ExtensionAPI) {
1223
1234
  }
1224
1235
  }
1225
1236
 
1226
- await executeReview(ctx, finalTarget, false, settingsOverride);
1237
+ await executeReview(ctx, finalTarget, false, settingsOverride, "full");
1227
1238
  },
1228
1239
  });
1229
1240
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unifan/pi-review-zh",
3
- "version": "1.0.15",
3
+ "version": "1.0.17",
4
4
  "description": "Pi 交互式 AI 代码审查扩展(支持单模型与多 Subagent 并发 2~6 专家自由切换,Codex 经典架构)",
5
5
  "type": "module",
6
6
  "license": "MIT",