@wuyanbin/ai-code-review-cli-remote 1.4.0 → 1.4.1

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.
package/README.md CHANGED
@@ -14,7 +14,7 @@ stdin: git diff <merge-base>..HEAD
14
14
  ├─ 4. 主评审 分片 + 注解 diff + 符号级上下文;首轮 baseline 两趟取并集,增量运行一趟
15
15
  ├─ 5. 对账 保活 / 收口 / 人工 dismiss / 增量准入;已知 OPEN 交复核 agent,新报交语义判重
16
16
  ├─ 6. 取证验证 只对本次新建的 P0:带只读工具的 agent 读仓库核实,CONFIRMED 才发布
17
- ├─ 7. 发布 行内评论 = 经验证的 P0;P1 / P2 只在摘要汇总(封顶 10 条);摘要 = 结论 + 验证说明 + AI 概述
17
+ ├─ 7. 发布 行内评论 = 经验证的 P0;P1 / P2 只在摘要汇总(封顶 10 条);摘要布局见下
18
18
  ├─ 8. 回写 PUT /api/modules/code-review/ci/findings 全量 finding 状态(含验证结论、resolve 时间)
19
19
  └─ 9. 上报 POST /api/modules/code-review/ci/runs 状态、用量、verdict、分项计数、Top 问题
20
20
  ```
@@ -26,6 +26,15 @@ stdin: git diff <merge-base>..HEAD
26
26
  | P0 | 是,只有 `CONFIRMED` 发布 | 是 | 是(任一 OPEN 且 blocking 的 P0 → `ACTION_REQUIRED`) | 是 |
27
27
  | P1 / P2 | 否 | 否,摘要「P1 提示(未验证)」段按文件 / 行号列出,封顶 10 条 | 否 | 是 |
28
28
 
29
+ ### MR 摘要布局(1.4.1 起)
30
+
31
+ 摘要只写一条 note、每次运行原地更新,从上到下:
32
+
33
+ 1. 结论标题(`## ✅ PASSED` / `## ⚠️ ACTION REQUIRED`)→ 一句话结论带各级别计数 → 引用块:评审范围(首轮 / 增量 + commit 区间 + 变更规模 + 送审文件数),增量运行再加「较上次:修复 / 新增 / 待处理 / 人工驳回」→ 验证排除 / 预算耗尽说明(有才显示);
34
+ 2. 「概述」(模型,1–2 句)→ 「需修复的 P0」列表(ACTION REQUIRED 时;带 blob 链接,`CI_PROJECT_URL` 缺失时退化为纯文本)→ 「P1 提示 · N 条(模型意见,未经取证验证)」封顶 10 条;
35
+ 3. 「合入前检查项」= CLI 按文件路径识别的确定项(数据库迁移 / 数据模型、CI、依赖、部署 / 环境、接口契约 / 规格;迁移含 `UPDATE` / `DELETE` / 破坏性 DDL 时加回滚提示,见 `src/core/summary-compose.ts`)+ 模型补充的横切风险;模型被要求不复述问题清单,不输出受影响文件表(GitLab Changes 页更准)→ `<details>` 折叠的「主要变更」;
36
+ 4. 未完整覆盖、敏感代码预警按需追加 → 页脚一行发布策略说明。整条 note 不再有级别表与 `---` 分隔线。
37
+
29
38
  验证结论为 `REFUTED` / `UNSURE` / `SKIPPED` 的 finding 以 `SUPPRESSED` 入库:`REFUTED` / `UNSURE` 对同一指纹粘性,
30
39
  后续 push 不重验;`SKIPPED`(预算、候选上限、时限没排上)不粘性,下次再报重新验证。
31
40
 
@@ -18,11 +18,18 @@ export type AgentStopReason = "submitted" | "max_turns" | "deadline" | "budget_e
18
18
  export type ToolRunOutcome = string | {
19
19
  error: string;
20
20
  };
21
+ /**
22
+ * 工具单次调用的上下文。`signal` 是候选截止信号——与中断进行中 API 请求的是同一个
23
+ * AbortController,由 Tool Runner 透传到每次工具调用;工具据此终止自己的子进程。
24
+ */
25
+ export interface ToolRunContext {
26
+ signal?: AbortSignal;
27
+ }
21
28
  export interface AgentTool<Schema extends z.ZodType = z.ZodType> {
22
29
  name: string;
23
30
  description: string;
24
31
  inputSchema: Schema;
25
- run: (input: z.infer<Schema>) => Promise<ToolRunOutcome> | ToolRunOutcome;
32
+ run: (input: z.infer<Schema>, context?: ToolRunContext) => Promise<ToolRunOutcome> | ToolRunOutcome;
26
33
  /** 收口工具:schema strict,模型调用它即为提交结论并结束运行(不执行 run) */
27
34
  submit?: boolean;
28
35
  }
@@ -1 +1 @@
1
- {"version":3,"file":"agent-runtime.d.ts","sourceRoot":"","sources":["../../src/core/agent-runtime.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAExD;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,eAAe,GACvB,WAAW,GACX,WAAW,GACX,UAAU,GACV,iBAAiB,GACjB,OAAO,CAAC;AAEZ,kEAAkE;AAClE,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAExD,MAAM,WAAW,SAAS,CAAC,MAAM,SAAS,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc,CAAC;IAC1E,mDAAmD;IACnD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,uCAAuC;AACvC,wBAAgB,eAAe,CAAC,MAAM,SAAS,CAAC,CAAC,OAAO,EACtD,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,GACtB,SAAS,CAEX;AAED,MAAM,WAAW,aAAa;IAC5B,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,uCAAuC;IACvC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,eAAe,CAAC;IAC5B,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,WAAW,CAAC;IACnB,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CACzD;AAED,MAAM,WAAW,wBAAwB;IACvC,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW;IACX,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,eAAe;IACf,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AASD,4DAA4D;AAC5D,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAElD;AAwED,qBAAa,iBAAkB,YAAW,YAAY;IACpD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,OAAO,EAAE,wBAAwB;IAcvC,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;CAoG9D"}
1
+ {"version":3,"file":"agent-runtime.d.ts","sourceRoot":"","sources":["../../src/core/agent-runtime.ts"],"names":[],"mappings":"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"}
@@ -61,10 +61,11 @@ function toRunnableTool(tool) {
61
61
  name: tool.name,
62
62
  description: tool.description,
63
63
  inputSchema: tool.inputSchema,
64
- run: async (input) => {
64
+ run: async (input, context) => {
65
65
  if (tool.submit)
66
66
  return "结论已收到。";
67
- const outcome = await tool.run(input);
67
+ // Tool Runner 把 toolRunner 选项里的 signal(候选截止)作为 context 传入每次工具调用
68
+ const outcome = await tool.run(input, { signal: context?.signal ?? undefined });
68
69
  if (typeof outcome === "string")
69
70
  return outcome;
70
71
  throw new ToolError_1.ToolError(outcome.error);
@@ -1 +1 @@
1
- {"version":3,"file":"agent-runtime.js","sourceRoot":"","sources":["../../src/core/agent-runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-runtime.js","sourceRoot":"","sources":["../../src/core/agent-runtime.ts"],"names":[],"mappings":";;;;;;AAwDA,0CAIC;AAsDD,8BAEC;AApHD,4DAA0C;AAC1C,4DAAiE;AACjE,qEAAkE;AAGlE,iDAAkD;AAClD,qDAI8B;AAC9B,mCAAwD;AA4CxD,uCAAuC;AACvC,SAAgB,eAAe,CAC7B,IAAuB;IAEvB,OAAO,IAA4B,CAAC;AACtC,CAAC;AA8CD,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAChC,MAAM,kBAAkB,GAAG,MAAO,CAAC;AACnC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAC9B,MAAM,MAAM,GAAG,QAAiB,CAAC;AACjC,MAAM,aAAa,GACjB,2DAA2D,CAAC;AAE9D,4DAA4D;AAC5D,SAAgB,SAAS,CAAC,QAAgB;IACxC,OAAO,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC;AACtF,CAAC;AAED,SAAS,OAAO,CAAC,KAAc;IAC7B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;QACrE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QACnB,CAAC,CAAC,CAAC,CAAC;AACR,CAAC;AAED,kEAAkE;AAClE,SAAS,iBAAiB,CAAC,KAA2C;IACpE,IAAI,CAAC,KAAK;QAAE,OAAO,UAAU,EAAE,CAAC;IAChC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC9D,OAAO;QACL,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,SAAS,GAAG,UAAU;QACjE,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC;QAC1C,eAAe,EAAE,SAAS;QAC1B,gBAAgB,EAAE,UAAU;KAC7B,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,KAAkB,EAAE,IAAiB;IACrD,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC;IACtC,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC;IACxC,KAAK,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC;IAC9C,KAAK,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,CAAC;AAClD,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACpF,CAAC;AAED,+EAA+E;AAC/E,SAAS,cAAc,CAAC,IAAe;IACrC,MAAM,QAAQ,GAAG,IAAA,iBAAW,EAAC;QAC3B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,GAAG,EAAE,KAAK,EAAE,KAAc,EAAE,OAAO,EAAE,EAAE;YACrC,IAAI,IAAI,CAAC,MAAM;gBAAE,OAAO,QAAQ,CAAC;YACjC,gEAAgE;YAChE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,CAAC,CAAC;YAChF,IAAI,OAAO,OAAO,KAAK,QAAQ;gBAAE,OAAO,OAAO,CAAC;YAChD,MAAM,IAAI,qBAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC;KACF,CAAC,CAAC;IACH,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;AAChE,CAAC;AAOD,mDAAmD;AACnD,SAAS,cAAc,CACrB,OAAmC,EACnC,UAAqB;IAErB,IAAI,OAAO,GAAe,IAAI,CAAC;IAC/B,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpC,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI;YAAE,SAAS;QAC1E,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7D,IAAI,MAAM,CAAC,OAAO;YAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;QAClE,OAAO,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IAC9D,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAa,iBAAiB;IAM5B,YAAY,OAAiC;QAC3C,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,sBAAS,CAAC;QAC1C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,kBAAkB,CAAC;QACzD,IAAI,CAAC,MAAM,GAAG,IAAI,aAAS,CAAC;YAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC;YACpC,cAAc,EAAE,EAAE,eAAe,EAAE,OAAO,CAAC,KAAK,IAAI,IAAA,uBAAY,GAAE,EAAE;YACpE,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,mBAAmB;YACrD,OAAO,EAAE,OAAO,CAAC,SAAS,IAAI,kBAAkB;YAChD,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACnD,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,KAAoB;QACjC,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC;QAC3B,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,MAAM,GAAG,CACb,UAA2B,EAC3B,SAAyB,IAAI,EAC7B,MAAe,EACC,EAAE,CAAC,CAAC;YACpB,MAAM;YACN,UAAU;YACV,KAAK;YACL,KAAK;YACL,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9B,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS;YAAE,OAAO,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAC5D,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAClD,IAAI,WAAW,IAAI,CAAC;YAAE,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC;QAEhD,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;QACnE,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,WAAW,CAAC,CAAC;QAChE,IAAI,MAAM,GAAG,KAAK,CAAC;QAEnB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CACjD;gBACE,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,UAAU,EAAE,IAAI,CAAC,SAAS;gBAC1B,6CAA6C;gBAC7C,MAAM,EAAE;oBACN;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,KAAK,CAAC,MAAM;wBAClB,aAAa,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;qBACrC;iBACF;gBACD,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;gBACjD,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC;gBACtC,cAAc,EAAE,KAAK,CAAC,QAAQ;gBAC9B,aAAa,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;aAClC,EACD;gBACE,OAAO,EAAE,EAAE,gBAAgB,EAAE,KAAK,CAAC,OAAO,EAAE;gBAC5C,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CACF,CAAC;YAEF,IAAI,KAAK,EAAE,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;gBACnC,KAAK,IAAI,CAAC,CAAC;gBACX,MAAM,SAAS,GAAG,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACnD,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;gBAC3B,IAAA,mBAAW,EAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;gBAEtC,IAAI,UAAU,EAAE,CAAC;oBACf,MAAM,UAAU,GAAG,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;oBACvD,wCAAwC;oBACxC,IAAI,UAAU,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;wBACjC,OAAO,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;oBAChD,CAAC;oBACD,sDAAsD;oBACtD,IAAI,UAAU,EAAE,IAAI,KAAK,SAAS;wBAAE,SAAS;gBAC/C,CAAC;gBAED,IAAI,OAAO,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;oBACvC,mCAAmC;oBACnC,IAAI,CAAC,MAAM,IAAI,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;wBACtC,MAAM,GAAG,IAAI,CAAC;wBACd,MAAM,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC;wBAC9D,SAAS;oBACX,CAAC;oBACD,OAAO,MAAM,CACX,OAAO,EACP,IAAI,EACJ,yCAAyC,OAAO,CAAC,WAAW,GAAG,CAChE,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,8CAA8C;YAC9C,OAAO,MAAM,CACX,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,EAC/C,IAAI,EACJ,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,mCAAmC,CAC1E,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,YAAY,aAAS,CAAC,iBAAiB,EAAE,CAAC;gBAC9E,OAAO,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;YACvD,CAAC;YACD,IACE,KAAK,YAAY,aAAS,CAAC,QAAQ;gBACnC,IAAA,gCAAmB,EAAC,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,EACnD,CAAC;gBACD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACzC,OAAO,MAAM,CAAC,iBAAiB,EAAE,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;YAC9D,CAAC;YACD,OAAO,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;QACpD,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;CACF;AAxHD,8CAwHC"}
@@ -27,6 +27,7 @@ export declare class PromptBuilder {
27
27
  export declare class SummaryPromptBuilder {
28
28
  private digest;
29
29
  private findings;
30
+ private checklist;
30
31
  /**
31
32
  * 摘要以「变更文件清单 + 增删行统计」为输入,而不是整份 diff。
32
33
  *
@@ -37,6 +38,8 @@ export declare class SummaryPromptBuilder {
37
38
  setDigest(digest: DiffDigest): this;
38
39
  /** 本次评审已产出的 findings:让摘要能点出风险,而不必重读源码 */
39
40
  setFindings(findings: AIComment[]): this;
41
+ /** CLI 按文件路径识别出的合入前检查项:已在摘要里渲染,模型只补充、不重复 */
42
+ setChecklist(items: string[]): this;
40
43
  buildSystem(): string;
41
44
  buildUser(): string;
42
45
  }
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/core/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAgBlD,qBAAa,aAAa;IACxB,OAAO,CAAC,IAAI,CAAM;IAClB,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,aAAa,CAAM;IAC3B,OAAO,CAAC,YAAY,CAAM;IAC1B,OAAO,CAAC,gBAAgB,CAAwB;IAEhD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK3B,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAKhC,mDAAmD;IACnD,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAKvC,0DAA0D;IAC1D,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKvC,8BAA8B;IAC9B,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKtC,mBAAmB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI;IAKpD;;;OAGG;IACH,WAAW,IAAI,MAAM;IAgCrB,SAAS,IAAI,MAAM;CAqCpB;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAA6D;IAC3E,OAAO,CAAC,QAAQ,CAAmB;IAEnC;;;;;;OAMG;IACH,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAKnC,yCAAyC;IACzC,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI;IAMxC,WAAW,IAAI,MAAM;IAuBrB,SAAS,IAAI,MAAM;CAkCpB"}
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/core/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAgBlD,qBAAa,aAAa;IACxB,OAAO,CAAC,IAAI,CAAM;IAClB,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,aAAa,CAAM;IAC3B,OAAO,CAAC,YAAY,CAAM;IAC1B,OAAO,CAAC,gBAAgB,CAAwB;IAEhD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK3B,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAKhC,mDAAmD;IACnD,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAKvC,0DAA0D;IAC1D,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKvC,8BAA8B;IAC9B,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKtC,mBAAmB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI;IAKpD;;;OAGG;IACH,WAAW,IAAI,MAAM;IAgCrB,SAAS,IAAI,MAAM;CAqCpB;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAA6D;IAC3E,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,SAAS,CAAgB;IAEjC;;;;;;OAMG;IACH,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAKnC,yCAAyC;IACzC,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI;IAKxC,4CAA4C;IAC5C,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAMnC,WAAW,IAAI,MAAM;IAqBrB,SAAS,IAAI,MAAM;CA0CpB"}
@@ -112,6 +112,7 @@ class SummaryPromptBuilder {
112
112
  constructor() {
113
113
  this.digest = { files: [], totalAdded: 0, totalRemoved: 0 };
114
114
  this.findings = [];
115
+ this.checklist = [];
115
116
  }
116
117
  /**
117
118
  * 摘要以「变更文件清单 + 增删行统计」为输入,而不是整份 diff。
@@ -129,27 +130,30 @@ class SummaryPromptBuilder {
129
130
  this.findings = findings;
130
131
  return this;
131
132
  }
133
+ /** CLI 按文件路径识别出的合入前检查项:已在摘要里渲染,模型只补充、不重复 */
134
+ setChecklist(items) {
135
+ this.checklist = items;
136
+ return this;
137
+ }
132
138
  // 固定指令集中于 system(与评审 prompt 同一缓存策略)
133
139
  buildSystem() {
134
140
  return [
135
141
  "你是一位资深开发工程师,擅长分析代码改动并生成清晰的技术摘要。",
136
- "你会收到本次改动的【变更文件清单与增删行统计】,以及【本次代码审查已发现的问题】,",
142
+ "你会收到本次改动的【变更文件清单与增删行统计】、【本次代码审查已发现的问题】与【已自动识别的检查项】,",
137
143
  "而不是完整 diff。请据此推断改动意图并生成中文 Markdown 汇总报告。",
138
144
  "对无法从文件清单确定的细节,用概括性描述,不要臆造具体实现。",
139
145
  "必须直接输出纯 Markdown 文本,不要返回 JSON,不要用代码块包裹。",
140
146
  "",
141
- "报告结构:",
147
+ "报告只包含以下三段,不要增加其它段落(尤其不要列受影响文件表,GitLab 已有):",
142
148
  "## 概述",
143
149
  "用 1-2 句话说明整体目的和范围。",
144
150
  "",
145
151
  "## 主要变更",
146
- "按目录/模块归纳这次改了哪些部分,说明各自的可能意图。",
152
+ "按目录/模块归纳这次改了哪些部分,说明各自的可能意图;最多 6 条。",
147
153
  "",
148
- "## 受影响文件",
149
- "用表格列出文件路径、增删行数、说明。文件较多时按变更量取前若干条并注明省略数量。",
150
- "",
151
- "## 注意事项",
152
- "结合已发现的问题列出需要关注的风险;没有则写\u201C无\u201D。",
154
+ "## 合入前检查项",
155
+ "只列无法落到某一行代码的横切风险:数据迁移与回滚、配置或环境变量、对外接口契约、兼容与发布顺序、大幅重构需要回归的链路。",
156
+ "【本次代码审查已发现的问题】已在报告其它部分逐条列出,不要复述;【已自动识别的检查项】也不要重复,只补充它们带来的风险。没有则只写\u201C无\u201D。",
153
157
  ].join("\n");
154
158
  }
155
159
  buildUser() {
@@ -169,11 +173,14 @@ class SummaryPromptBuilder {
169
173
  }
170
174
  if (this.findings.length > 0) {
171
175
  const shownFindings = this.findings.slice(0, MAX_SUMMARY_FINDINGS);
172
- parts.push("", "本次代码审查已发现的问题:", ...shownFindings.map((c) => `- [${c.severity}] ${c.file}:${c.line} ${c.message}`));
176
+ parts.push("", "本次代码审查已发现的问题(已在报告中逐条列出,仅供判断横切风险,不要复述):", ...shownFindings.map((c) => `- [${c.severity}] ${c.file}:${c.line} ${c.message}`));
173
177
  if (this.findings.length > shownFindings.length) {
174
178
  parts.push(`- …另有 ${this.findings.length - shownFindings.length} 条`);
175
179
  }
176
180
  }
181
+ if (this.checklist.length > 0) {
182
+ parts.push("", "已自动识别的检查项(已在报告中列出,不要重复):", ...this.checklist.map((item) => `- ${item}`));
183
+ }
177
184
  return parts.join("\n");
178
185
  }
179
186
  }
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/core/prompt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/core/prompt.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,9 @@
1
1
  import type { AIComment, CodeReviewConfig } from "../types";
2
2
  /**
3
3
  * @param findings 本次评审已产出的评论;让摘要能点出风险而无需重读源码
4
+ * @param options.checklist CLI 已识别的合入前检查项;喂给模型避免重复
4
5
  */
5
- export declare function generateSummary(diff: string, config: CodeReviewConfig, findings?: AIComment[]): Promise<string | null>;
6
+ export declare function generateSummary(diff: string, config: CodeReviewConfig, findings?: AIComment[], options?: {
7
+ checklist?: string[];
8
+ }): Promise<string | null>;
6
9
  //# sourceMappingURL=summarizer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"summarizer.d.ts","sourceRoot":"","sources":["../../src/core/summarizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AA8B5D;;GAEG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,gBAAgB,EACxB,QAAQ,GAAE,SAAS,EAAO,GACzB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAqBxB"}
1
+ {"version":3,"file":"summarizer.d.ts","sourceRoot":"","sources":["../../src/core/summarizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AA8B5D;;;GAGG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,gBAAgB,EACxB,QAAQ,GAAE,SAAS,EAAO,EAC1B,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;CAAO,GACrC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAsBxB"}
@@ -36,8 +36,9 @@ function cleanMarkdownResponse(content) {
36
36
  }
37
37
  /**
38
38
  * @param findings 本次评审已产出的评论;让摘要能点出风险而无需重读源码
39
+ * @param options.checklist CLI 已识别的合入前检查项;喂给模型避免重复
39
40
  */
40
- async function generateSummary(diff, config, findings = []) {
41
+ async function generateSummary(diff, config, findings = [], options = {}) {
41
42
  const effectiveDiff = (0, diff_1.filterDiffByIgnore)(diff, config.ignore);
42
43
  if (!effectiveDiff.trim())
43
44
  return null;
@@ -47,7 +48,8 @@ async function generateSummary(diff, config, findings = []) {
47
48
  // 输入是文件清单与增删统计,不是整份 diff:摘要调用的体量与 diff 总量解耦
48
49
  const prompt = new prompt_1.SummaryPromptBuilder()
49
50
  .setDigest((0, diff_1.summarizeDiffFiles)(effectiveDiff))
50
- .setFindings(findings);
51
+ .setFindings(findings)
52
+ .setChecklist(options.checklist ?? []);
51
53
  const raw = await adapter.call(config.ai.model, prompt.buildSystem(), prompt.buildUser(), { purpose: "summary" });
52
54
  return raw ? cleanMarkdownResponse(raw) : null;
53
55
  }
@@ -1 +1 @@
1
- {"version":3,"file":"summarizer.js","sourceRoot":"","sources":["../../src/core/summarizer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"summarizer.js","sourceRoot":"","sources":["../../src/core/summarizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import type { ReconcileResult } from "./incremental";
2
+ /**
3
+ * MR 摘要的「整合布局」(2026-10-21 用户拍板):
4
+ * - 头部一行评审范围(首轮 / 增量 + commit 区间 + 变更规模 + 送审文件数),增量运行再加一行相对上次的变化;
5
+ * - 行级问题只出现一次且只由 CLI 生成(P0 列表 / P1 汇总),模型不复述;
6
+ * - 模型输出只保留「概述」「主要变更」「合入前检查项」,「受影响文件」表去掉(GitLab Changes 页更准);
7
+ * - 「合入前检查项」= CLI 按文件路径识别的确定项 + 模型补充的横切风险;「主要变更」折叠。
8
+ * 段落顺序:结论与计数 → 范围 / 较上次 → 概述 → 需修复的 P0 → P1 提示 → 合入前检查项 → 主要变更。
9
+ */
10
+ export interface ReviewScopeInfo {
11
+ /** baseline = 首轮全量;incremental = 平台已有 lastReviewedSha;stateless = 平台快照不可用 */
12
+ mode: "baseline" | "incremental" | "stateless";
13
+ /** 上次评审到的 commit(增量运行) */
14
+ fromSha?: string | null;
15
+ /** 本次流水线 head */
16
+ toSha?: string | null;
17
+ /** 整份 MR diff 的文件数与增删行(含被忽略的文件) */
18
+ changedFiles: number;
19
+ added: number;
20
+ removed: number;
21
+ /** 实际送审的文件数(coverage.reviewedFiles) */
22
+ reviewedFiles?: number;
23
+ }
24
+ /** 相对上次评审的 finding 变化(只在增量运行展示) */
25
+ export interface ReviewDeltaInfo {
26
+ new: number;
27
+ fixed: number;
28
+ open: number;
29
+ wontFix: number;
30
+ }
31
+ /** 行级条目的链接基址:GitLab 项目地址 + 本次评审的 commit,缺任一则退化为纯文本 */
32
+ export interface SummaryLinkBase {
33
+ projectUrl?: string | null;
34
+ sha?: string | null;
35
+ }
36
+ export declare function shortSha(sha: string | null | undefined): string | null;
37
+ export declare function buildScopeLine(scope: ReviewScopeInfo): string;
38
+ export declare function buildDeltaLine(delta: ReviewDeltaInfo): string;
39
+ /**
40
+ * 从对账统计派生「相对上次」:
41
+ * - 新增 = 本次新建 − 验证排除(排除的不发布、另有「验证排除 N 条」说明)
42
+ * - 修复 = fixed − severity 迁移(迁移是换键,不是修复)
43
+ * - 仍待处理 = 保活的已知 finding − 复核判定已修复的
44
+ */
45
+ export declare function buildReviewDelta(stats: ReconcileResult["stats"]): ReviewDeltaInfo;
46
+ /** `file:line`,能拼出 blob 链接时指向本次评审 commit 上的那一行 */
47
+ export declare function fileRef(file: string, line: number, links?: SummaryLinkBase): string;
48
+ /** 按文件收集 diff 里的新增行(不含 `+++` 头),只用于迁移文件的风险判断 */
49
+ export declare function addedLinesByFile(diff: string): Map<string, string[]>;
50
+ /**
51
+ * 从变更文件清单识别需要人工确认的合入 / 发布事项。规则跨语言、只看路径(迁移文件另看新增行),
52
+ * 结果稳定可测;模型只在这之上补充判断性的条目。
53
+ */
54
+ export declare function detectMergeChecklist(files: string[], diff?: string): string[];
55
+ /** 模型写的检查项规整为「- 」列表;写「无」视为空 */
56
+ export declare function normalizeChecklistItems(body: string | null): string[];
57
+ /** 模型摘要的解析结果:概述、折叠展示的主要变更、规整后的检查项 */
58
+ export interface ModelSummary {
59
+ overview: string | null;
60
+ changes: string | null;
61
+ /** 已规整为「- 」列表的模型补充检查项;模型写「无」为空 */
62
+ checklist: string[];
63
+ /** 是否按约定结构解析成功;失败时整段当概述保留,不丢内容 */
64
+ recognized: boolean;
65
+ }
66
+ /** 按二级标题拆模型输出;「受影响文件」段丢弃;空输出返回 null */
67
+ export declare function parseModelSummary(markdown: string | null | undefined): ModelSummary | null;
68
+ //# sourceMappingURL=summary-compose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary-compose.d.ts","sourceRoot":"","sources":["../../src/core/summary-compose.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD;;;;;;;GAOG;AAEH,MAAM,WAAW,eAAe;IAC9B,6EAA6E;IAC7E,IAAI,EAAE,UAAU,GAAG,aAAa,GAAG,WAAW,CAAC;IAC/C,0BAA0B;IAC1B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,mCAAmC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,uCAAuC;IACvC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,mCAAmC;AACnC,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,sDAAsD;AACtD,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAGtE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAe7D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAI7D;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,eAAe,CAQjF;AAED,kDAAkD;AAClD,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,eAAe,GAAG,MAAM,CAMnF;AAuBD,gDAAgD;AAChD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAgBpE;AAOD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,SAAK,GAAG,MAAM,EAAE,CAyBzE;AA6CD,+BAA+B;AAC/B,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,EAAE,CAiBrE;AAED,qCAAqC;AACrC,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,kCAAkC;IAClC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,kCAAkC;IAClC,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,uCAAuC;AACvC,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,YAAY,GAAG,IAAI,CAa1F"}
@@ -0,0 +1,205 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.shortSha = shortSha;
4
+ exports.buildScopeLine = buildScopeLine;
5
+ exports.buildDeltaLine = buildDeltaLine;
6
+ exports.buildReviewDelta = buildReviewDelta;
7
+ exports.fileRef = fileRef;
8
+ exports.addedLinesByFile = addedLinesByFile;
9
+ exports.detectMergeChecklist = detectMergeChecklist;
10
+ exports.normalizeChecklistItems = normalizeChecklistItems;
11
+ exports.parseModelSummary = parseModelSummary;
12
+ function shortSha(sha) {
13
+ const trimmed = sha?.trim();
14
+ return trimmed ? trimmed.slice(0, 8) : null;
15
+ }
16
+ function buildScopeLine(scope) {
17
+ const to = shortSha(scope.toSha);
18
+ const from = shortSha(scope.fromSha);
19
+ let range;
20
+ if (scope.mode === "incremental" && from) {
21
+ range = `增量评审 ${from} → ${to ?? "HEAD"}`;
22
+ }
23
+ else if (scope.mode === "baseline") {
24
+ range = to ? `首轮评审(至 ${to})` : "首轮评审";
25
+ }
26
+ else {
27
+ range = to ? `评审(至 ${to},未对接平台历史)` : "评审(未对接平台历史)";
28
+ }
29
+ const size = `变更 ${scope.changedFiles} 个文件(+${scope.added} / −${scope.removed})`;
30
+ const reviewed = typeof scope.reviewedFiles === "number" ? `,送审 ${scope.reviewedFiles} 个` : "";
31
+ return `${range} · ${size}${reviewed}`;
32
+ }
33
+ function buildDeltaLine(delta) {
34
+ const parts = [`修复 ${delta.fixed}`, `新增 ${delta.new}`, `待处理 ${delta.open}`];
35
+ if (delta.wontFix > 0)
36
+ parts.push(`人工驳回 ${delta.wontFix}`);
37
+ return `较上次:${parts.join(" · ")}`;
38
+ }
39
+ /**
40
+ * 从对账统计派生「相对上次」:
41
+ * - 新增 = 本次新建 − 验证排除(排除的不发布、另有「验证排除 N 条」说明)
42
+ * - 修复 = fixed − severity 迁移(迁移是换键,不是修复)
43
+ * - 仍待处理 = 保活的已知 finding − 复核判定已修复的
44
+ */
45
+ function buildReviewDelta(stats) {
46
+ const nonNegative = (n) => (n > 0 ? n : 0);
47
+ return {
48
+ new: nonNegative(stats.new - stats.suppressed),
49
+ fixed: nonNegative(stats.fixed - stats.severityMigrated),
50
+ open: nonNegative(stats.kept - stats.revalidatedFixed),
51
+ wontFix: stats.wontFix,
52
+ };
53
+ }
54
+ /** `file:line`,能拼出 blob 链接时指向本次评审 commit 上的那一行 */
55
+ function fileRef(file, line, links) {
56
+ const label = `\`${file}:${line}\``;
57
+ const base = links?.projectUrl?.trim().replace(/\/+$/, "");
58
+ const sha = links?.sha?.trim();
59
+ if (!base || !sha)
60
+ return label;
61
+ return `[${label}](${base}/-/blob/${sha}/${encodeURI(file)}#L${line})`;
62
+ }
63
+ // ───────────────────────── 合入前检查项(确定性规则) ─────────────────────────
64
+ const MIGRATION_DIR_RE = /(^|\/)(migrations?|db\/migrate|flyway|liquibase)\//i;
65
+ const MIGRATION_FILE_RE = /\.(sql|ts|js|mjs|cjs|py|rb|xml|ya?ml|kt|java|go)$/i;
66
+ const DATA_MODEL_RE = /(^|\/)schema\.prisma$/;
67
+ const CI_RE = /(^|\/)(\.gitlab-ci\.ya?ml|\.gitlab\/.*|ci-templates\/.*|Jenkinsfile[^/]*|\.github\/workflows\/.*|\.circleci\/.*)$/;
68
+ const DEPS_RE = /(^|\/)(package\.json|package-lock\.json|pnpm-lock\.yaml|yarn\.lock|go\.mod|go\.sum|pom\.xml|build\.gradle(\.kts)?|settings\.gradle(\.kts)?|gradle\/libs\.versions\.toml|Podfile|Podfile\.lock|Package\.swift|Package\.resolved|Cartfile(\.resolved)?|requirements[^/]*\.txt|pyproject\.toml|poetry\.lock|Cargo\.toml|Cargo\.lock|Gemfile(\.lock)?|composer\.(json|lock))$/;
69
+ const DEPLOY_RE = /(^|\/)(\.env(\.[^/]+)?|Dockerfile[^/]*|docker-compose[^/]*\.ya?ml|(k8s|kubernetes|helm|deploy|deployment)\/.*)$/i;
70
+ const CONTRACT_RE = /(^|\/)(openapi[^/]*\.(ya?ml|json)|swagger[^/]*\.(ya?ml|json)|[^/]*\.proto|schema\.graphql|openspec\/specs\/.*)$/i;
71
+ /** 存量数据修改或破坏性 DDL:这些迁移不能只靠「再跑一次」回滚 */
72
+ const DATA_CHANGE_RE = /\b(UPDATE\s+\S+\s+SET|DELETE\s+FROM|TRUNCATE\s+(TABLE\s+)?\S+|DROP\s+(TABLE|COLUMN|INDEX)|ALTER\s+TABLE\s+\S+\s+(DROP|MODIFY|CHANGE|RENAME))\b/i;
73
+ function isMigrationFile(file) {
74
+ return (MIGRATION_DIR_RE.test(file) && MIGRATION_FILE_RE.test(file)) || DATA_MODEL_RE.test(file);
75
+ }
76
+ /** 按文件收集 diff 里的新增行(不含 `+++` 头),只用于迁移文件的风险判断 */
77
+ function addedLinesByFile(diff) {
78
+ const out = new Map();
79
+ let current = null;
80
+ for (const line of diff.split("\n")) {
81
+ const header = /^diff --git a\/(.+?) b\/(.+)$/.exec(line);
82
+ if (header) {
83
+ current = header[2];
84
+ if (!out.has(current))
85
+ out.set(current, []);
86
+ continue;
87
+ }
88
+ if (!current)
89
+ continue;
90
+ if (line.startsWith("+") && !line.startsWith("+++")) {
91
+ out.get(current).push(line.slice(1));
92
+ }
93
+ }
94
+ return out;
95
+ }
96
+ function listFiles(files, max = 3) {
97
+ const shown = files.slice(0, max).map((f) => `\`${f}\``);
98
+ return files.length > max ? `${shown.join("、")} 等 ${files.length} 个` : shown.join("、");
99
+ }
100
+ /**
101
+ * 从变更文件清单识别需要人工确认的合入 / 发布事项。规则跨语言、只看路径(迁移文件另看新增行),
102
+ * 结果稳定可测;模型只在这之上补充判断性的条目。
103
+ */
104
+ function detectMergeChecklist(files, diff = "") {
105
+ const items = [];
106
+ const unique = [...new Set(files)];
107
+ const migrations = unique.filter(isMigrationFile);
108
+ if (migrations.length > 0) {
109
+ const added = addedLinesByFile(diff);
110
+ const risky = migrations.some((f) => (added.get(f) ?? []).some((line) => DATA_CHANGE_RE.test(line)));
111
+ items.push(`数据库迁移 / 数据模型变更:${listFiles(migrations)}${risky ? ";含存量数据修改或破坏性 DDL,确认可回滚与上线顺序" : ""}`);
112
+ }
113
+ const ci = unique.filter((f) => CI_RE.test(f));
114
+ if (ci.length > 0)
115
+ items.push(`CI / 流水线配置变更:${listFiles(ci)}`);
116
+ const deps = unique.filter((f) => DEPS_RE.test(f));
117
+ if (deps.length > 0)
118
+ items.push(`依赖变更:${listFiles(deps)}`);
119
+ const deploy = unique.filter((f) => DEPLOY_RE.test(f));
120
+ if (deploy.length > 0)
121
+ items.push(`部署 / 环境配置变更:${listFiles(deploy)}`);
122
+ const contracts = unique.filter((f) => CONTRACT_RE.test(f));
123
+ if (contracts.length > 0)
124
+ items.push(`接口契约 / 规格变更:${listFiles(contracts)}`);
125
+ return items;
126
+ }
127
+ function normalizeTitle(raw) {
128
+ return raw.replace(/^[^\p{L}\p{N}]+/u, "").trim();
129
+ }
130
+ /** 只按二级标题切分;三级标题属于所在段落的正文 */
131
+ function splitSections(markdown) {
132
+ const result = { overview: null, changes: null, checklist: null, recognized: false };
133
+ let currentKey = null;
134
+ const buffers = { overview: [], changes: [], checklist: [] };
135
+ for (const line of markdown.split("\n")) {
136
+ const heading = /^##\s+(.+?)\s*$/.exec(line);
137
+ if (heading) {
138
+ const title = normalizeTitle(heading[1]);
139
+ if (title.includes("概述"))
140
+ currentKey = "overview";
141
+ else if (title.includes("主要变更"))
142
+ currentKey = "changes";
143
+ else if (title.includes("合入前检查项") || title.includes("注意事项"))
144
+ currentKey = "checklist";
145
+ else
146
+ currentKey = "ignored";
147
+ if (currentKey !== "ignored")
148
+ result.recognized = true;
149
+ continue;
150
+ }
151
+ if (currentKey && currentKey !== "ignored")
152
+ buffers[currentKey].push(line);
153
+ }
154
+ const body = (lines) => {
155
+ const text = lines.join("\n").trim();
156
+ return text ? text : null;
157
+ };
158
+ result.overview = body(buffers.overview);
159
+ result.changes = body(buffers.changes);
160
+ result.checklist = body(buffers.checklist);
161
+ return result;
162
+ }
163
+ const EMPTY_CHECKLIST_RE = /^[\s\-*•]*(无|没有|无。|none|n\/a)[\s。.]*$/i;
164
+ /** 模型写的检查项规整为「- 」列表;写「无」视为空 */
165
+ function normalizeChecklistItems(body) {
166
+ if (!body)
167
+ return [];
168
+ if (EMPTY_CHECKLIST_RE.test(body.trim()))
169
+ return [];
170
+ const items = [];
171
+ for (const raw of body.split("\n")) {
172
+ if (!raw.trim())
173
+ continue;
174
+ const indented = /^\s+[-*•]\s+/.test(raw);
175
+ if (indented) {
176
+ items.push(raw.replace(/^\s+[-*•]\s+/, " - "));
177
+ continue;
178
+ }
179
+ const line = raw.trim();
180
+ if (/^\d+[.、)]\s+/.test(line))
181
+ items.push(`- ${line.replace(/^\d+[.、)]\s+/, "")}`);
182
+ else if (/^[-*•]\s+/.test(line))
183
+ items.push(`- ${line.replace(/^[-*•]\s+/, "")}`);
184
+ else
185
+ items.push(`- ${line}`);
186
+ }
187
+ return items;
188
+ }
189
+ /** 按二级标题拆模型输出;「受影响文件」段丢弃;空输出返回 null */
190
+ function parseModelSummary(markdown) {
191
+ const raw = markdown?.trim() ?? "";
192
+ if (!raw)
193
+ return null;
194
+ const sections = splitSections(raw);
195
+ if (!sections.recognized) {
196
+ return { overview: raw, changes: null, checklist: [], recognized: false };
197
+ }
198
+ return {
199
+ overview: sections.overview,
200
+ changes: sections.changes,
201
+ checklist: normalizeChecklistItems(sections.checklist),
202
+ recognized: true,
203
+ };
204
+ }
205
+ //# sourceMappingURL=summary-compose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary-compose.js","sourceRoot":"","sources":["../../src/core/summary-compose.ts"],"names":[],"mappings":"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"}