@wuyanbin/ai-code-review-cli-remote 1.0.34 → 1.0.36
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/dist/core/diff.d.ts +108 -3
- package/dist/core/diff.d.ts.map +1 -1
- package/dist/core/diff.js +231 -39
- package/dist/core/diff.js.map +1 -1
- package/dist/core/prompt.d.ts +14 -2
- package/dist/core/prompt.d.ts.map +1 -1
- package/dist/core/prompt.js +48 -9
- package/dist/core/prompt.js.map +1 -1
- package/dist/core/reviewer.d.ts +25 -0
- package/dist/core/reviewer.d.ts.map +1 -1
- package/dist/core/reviewer.js +104 -26
- package/dist/core/reviewer.js.map +1 -1
- package/dist/core/summarizer.d.ts +5 -2
- package/dist/core/summarizer.d.ts.map +1 -1
- package/dist/core/summarizer.js +8 -2
- package/dist/core/summarizer.js.map +1 -1
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +50 -17
- package/dist/runner.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/core/diff.d.ts
CHANGED
|
@@ -1,9 +1,47 @@
|
|
|
1
1
|
import type { AIComment } from "../types";
|
|
2
|
+
/**
|
|
3
|
+
* 项目 `review.ignore` / `sensitive.files` 的 glob 语义,对齐 .gitignore 的直觉:
|
|
4
|
+
* - 不含 `/` 的模式(`*.pb.go`、`foo_test.go`、`node_modules`)匹配任意目录下的同名文件或目录;
|
|
5
|
+
* - 以 `/` 开头的模式(`/config.json`、`/proto/**`)锚定到仓库根目录;
|
|
6
|
+
* - 其余含 `/` 的模式相对仓库根目录匹配(`src/generated/**`、`proto/*.pb.go`),`**` 可出现在中间表示任意层级;
|
|
7
|
+
* - 以 `/` 结尾的模式视为目录,匹配该目录下全部文件;
|
|
8
|
+
* - `**` 跨目录,`*` 单层任意,`?` 单字符。
|
|
9
|
+
* 历史实现把 `*.pb.go` 翻译成只匹配根目录文件的正则,导致带目录的生成物全部漏过滤,
|
|
10
|
+
* 且失败是静默的(用户只看到 token 上涨和一串假告警),因此这里选择让匹配层贴合直觉,
|
|
11
|
+
* 而不是要求用户记住平台私有语法。被匹配的路径已由 normalizePath 去掉 `a/`、`b/`、`./` 前缀。
|
|
12
|
+
*/
|
|
2
13
|
export declare function globToRegExp(pattern: string): RegExp;
|
|
3
14
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
15
|
+
* 决定「哪些文件进入评审」——这是唯一回答这个问题的地方。
|
|
16
|
+
*
|
|
17
|
+
* 两类原因并列,本质是同一个概念(这个文件不该进评审),只是来源不同:
|
|
18
|
+
* - `ignored`:路径命中系统 default-ignore 或项目 `review.ignore`。预期内的配置
|
|
19
|
+
* 行为,**不算覆盖缺口**,不必打扰 MR 作者。
|
|
20
|
+
* - `oversized`:该文件独占一片时的投影请求体超过上限。**算覆盖缺口**,必须上报——
|
|
21
|
+
* 使用者会以为已评审。刻意不做 hunk 级二次切分:那会把一次被网关拦下的调用
|
|
22
|
+
* 拆成多次可通过的调用,抵消网关护栏。
|
|
23
|
+
*
|
|
24
|
+
* 体量判定按**投影请求体**而不是原始字节:注解膨胀实测 1.10×–5.16×,同样是 1MB,
|
|
25
|
+
* 长行投影 1.37MB(可以审)、极短行投影 4.95MB(必须跳),差 3.6 倍。
|
|
26
|
+
*/
|
|
27
|
+
export interface ReviewSelection {
|
|
28
|
+
/** 通过筛选、进入评审的 diff */
|
|
29
|
+
diff: string;
|
|
30
|
+
/** 路径规则命中(预期内,不算缺口) */
|
|
31
|
+
ignoredFiles: string[];
|
|
32
|
+
/** 体量上不可评审(算覆盖缺口) */
|
|
33
|
+
oversizedFiles: string[];
|
|
34
|
+
}
|
|
35
|
+
export interface ReviewSelectionOptions {
|
|
36
|
+
ignorePatterns?: string[];
|
|
37
|
+
/** 投影函数;缺省按 systemPromptBytes=0 估算,调用方应传入真实 system 体量 */
|
|
38
|
+
projectBytes?: (shardDiff: string) => number;
|
|
39
|
+
maxProjectedBytes?: number;
|
|
40
|
+
}
|
|
41
|
+
export declare function selectReviewableDiff(diff: string, options?: ReviewSelectionOptions): ReviewSelection;
|
|
42
|
+
/**
|
|
43
|
+
* 只做路径过滤的薄封装。摘要生成不关心体量(它的输入是文件清单统计,
|
|
44
|
+
* 与 diff 体量已解耦),因此不需要投影计算。
|
|
7
45
|
*/
|
|
8
46
|
export declare function filterDiffByIgnore(diff: string, ignorePatterns?: string[]): string;
|
|
9
47
|
export interface AddedLine {
|
|
@@ -45,6 +83,73 @@ export declare function walkDiff(diff: string): Generator<DiffEvent>;
|
|
|
45
83
|
export declare function collectAddedLines(diff: string): Map<string, AddedLine[]>;
|
|
46
84
|
export declare function getChangedFiles(diff: string): string[];
|
|
47
85
|
export declare function splitDiffByMaxBytes(diff: string, maxBytes: number): string[];
|
|
86
|
+
/**
|
|
87
|
+
* 单次 run 的分片数上限。单 run 的模型开销由此有确定性上界:
|
|
88
|
+
* 40 片 × 约 $0.32/片 ≈ $13。2026-08-28 事故中一个 run 发了 1185 次调用、$388,
|
|
89
|
+
* 正是因为分片数完全没有上限。
|
|
90
|
+
*/
|
|
91
|
+
export declare const MAX_REVIEW_SHARDS = 40;
|
|
92
|
+
/**
|
|
93
|
+
* 装箱预算的硬上限(与平台 `normalizeShardMaxBytes` 的上限同值,
|
|
94
|
+
* 单一声明源见 aicr-limits.json 的 maxShardMaxBytes)。
|
|
95
|
+
*
|
|
96
|
+
* 由不变式反推:300000 × 最坏注解膨胀 5.2 + 40000 源码窗口 = 1.60MB,
|
|
97
|
+
* 落在 MAX_PROJECTED_REQUEST_BYTES(1.8MB) 之内。
|
|
98
|
+
*/
|
|
99
|
+
export declare const MAX_RAW_SHARD_BYTES = 300000;
|
|
100
|
+
/**
|
|
101
|
+
* 单次模型请求的投影体量上限(单一声明源见仓库根 aicr-limits.json)。
|
|
102
|
+
*
|
|
103
|
+
* = 网关 `AICR_GATEWAY_MAX_REQUEST_BYTES`(2_000_000) × 0.9,留 10% 给两种线协议
|
|
104
|
+
* 信封差异与 JSON 转义膨胀。**cli-remote 与网关判定的是同一个物理量**——
|
|
105
|
+
* 投影出来的请求体字节数,而不是各自拿原始 diff 字节去猜。
|
|
106
|
+
*
|
|
107
|
+
* 为什么必须实测而不能用系数换算:`buildAnnotatedDiff` 的膨胀不是常数,实测在
|
|
108
|
+
* 1.10×(长行)到 5.16×(每行 1 字符)之间——每行都要付固定的 `[ADD] 1234 | `
|
|
109
|
+
* 标记开销,行越短占比越高。曾用「单文件原始 1MB」当阈值,结果一个 1MB 的
|
|
110
|
+
* 极短行文件投影出 4.95MB 请求体,反而被自己的网关 413。
|
|
111
|
+
*/
|
|
112
|
+
export declare const MAX_PROJECTED_REQUEST_BYTES = 1800000;
|
|
113
|
+
/**
|
|
114
|
+
* 投影一个分片最终会产生多大的请求体。源码窗口按其上限计入(规划时尚未读盘),
|
|
115
|
+
* 因此这是上界估计——宁可保守跳过,也不要送出去再被网关拦下。
|
|
116
|
+
*/
|
|
117
|
+
export declare function projectShardRequestBytes(shardDiff: string, systemPromptBytes: number): number;
|
|
118
|
+
export interface ShardPlanOptions {
|
|
119
|
+
shardMaxBytes: number;
|
|
120
|
+
maxShards?: number;
|
|
121
|
+
}
|
|
122
|
+
export interface ShardPlan {
|
|
123
|
+
shards: string[];
|
|
124
|
+
/** 分片预算用尽被跳过的文件 */
|
|
125
|
+
budgetSkippedFiles: string[];
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* 在分片预算内规划本次 run 的分片。**只回答「预算内能审多少」**——
|
|
129
|
+
* 「哪些文件该进评审」由 `selectReviewableDiff` 单独回答,两者不重叠。
|
|
130
|
+
*
|
|
131
|
+
* 未超预算时结果与 `splitDiffByMaxBytes` 逐字节一致——正常体量的 MR 不产生
|
|
132
|
+
* 任何分片组成变化,避免存量项目的评论锚点漂移。
|
|
133
|
+
*/
|
|
134
|
+
export declare function planReviewShards(diff: string, options: ShardPlanOptions): ShardPlan;
|
|
135
|
+
export interface DiffFileStat {
|
|
136
|
+
file: string;
|
|
137
|
+
added: number;
|
|
138
|
+
removed: number;
|
|
139
|
+
}
|
|
140
|
+
export interface DiffDigest {
|
|
141
|
+
files: DiffFileStat[];
|
|
142
|
+
totalAdded: number;
|
|
143
|
+
totalRemoved: number;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* 变更文件清单与增删行统计。摘要生成以此为输入,使摘要调用的体量与 diff
|
|
147
|
+
* 总量解耦——此前 `generateSummary` 把整份 diff 灌进一次调用,实测出现过
|
|
148
|
+
* 62–75 万 token 的单次摘要调用。
|
|
149
|
+
*
|
|
150
|
+
* 刻意只产出统计量,不夹带任何源码行。
|
|
151
|
+
*/
|
|
152
|
+
export declare function summarizeDiffFiles(diff: string): DiffDigest;
|
|
48
153
|
/**
|
|
49
154
|
* 紧凑模式的注解 diff:以新文件侧行号就地标注每一行,一份结构同时承载
|
|
50
155
|
* 「可评论锚定表」与「变更展示」(替代行索引 + 原始 diff 两块)。
|
package/dist/core/diff.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/core/diff.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAG1C,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/core/diff.ts"],"names":[],"mappings":"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"}
|
package/dist/core/diff.js
CHANGED
|
@@ -1,60 +1,111 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MAX_PROJECTED_REQUEST_BYTES = exports.MAX_RAW_SHARD_BYTES = exports.MAX_REVIEW_SHARDS = void 0;
|
|
3
4
|
exports.globToRegExp = globToRegExp;
|
|
5
|
+
exports.selectReviewableDiff = selectReviewableDiff;
|
|
4
6
|
exports.filterDiffByIgnore = filterDiffByIgnore;
|
|
5
7
|
exports.normalizePath = normalizePath;
|
|
6
8
|
exports.walkDiff = walkDiff;
|
|
7
9
|
exports.collectAddedLines = collectAddedLines;
|
|
8
10
|
exports.getChangedFiles = getChangedFiles;
|
|
9
11
|
exports.splitDiffByMaxBytes = splitDiffByMaxBytes;
|
|
12
|
+
exports.projectShardRequestBytes = projectShardRequestBytes;
|
|
13
|
+
exports.planReviewShards = planReviewShards;
|
|
14
|
+
exports.summarizeDiffFiles = summarizeDiffFiles;
|
|
10
15
|
exports.buildAnnotatedDiff = buildAnnotatedDiff;
|
|
11
16
|
exports.alignCommentsToDiffAddedLinesDetailed = alignCommentsToDiffAddedLinesDetailed;
|
|
12
17
|
exports.alignCommentsToDiffAddedLines = alignCommentsToDiffAddedLines;
|
|
13
18
|
const default_ignore_1 = require("./default-ignore");
|
|
19
|
+
/**
|
|
20
|
+
* 项目 `review.ignore` / `sensitive.files` 的 glob 语义,对齐 .gitignore 的直觉:
|
|
21
|
+
* - 不含 `/` 的模式(`*.pb.go`、`foo_test.go`、`node_modules`)匹配任意目录下的同名文件或目录;
|
|
22
|
+
* - 以 `/` 开头的模式(`/config.json`、`/proto/**`)锚定到仓库根目录;
|
|
23
|
+
* - 其余含 `/` 的模式相对仓库根目录匹配(`src/generated/**`、`proto/*.pb.go`),`**` 可出现在中间表示任意层级;
|
|
24
|
+
* - 以 `/` 结尾的模式视为目录,匹配该目录下全部文件;
|
|
25
|
+
* - `**` 跨目录,`*` 单层任意,`?` 单字符。
|
|
26
|
+
* 历史实现把 `*.pb.go` 翻译成只匹配根目录文件的正则,导致带目录的生成物全部漏过滤,
|
|
27
|
+
* 且失败是静默的(用户只看到 token 上涨和一串假告警),因此这里选择让匹配层贴合直觉,
|
|
28
|
+
* 而不是要求用户记住平台私有语法。被匹配的路径已由 normalizePath 去掉 `a/`、`b/`、`./` 前缀。
|
|
29
|
+
*/
|
|
14
30
|
function globToRegExp(pattern) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
31
|
+
let glob = pattern.trim().replace(/^\.\//, "");
|
|
32
|
+
const anchored = glob.startsWith("/");
|
|
33
|
+
glob = glob.replace(/^\/+/, "");
|
|
34
|
+
let body = glob.replace(/\/+$/, "");
|
|
35
|
+
const dirOnly = body !== glob;
|
|
36
|
+
const matchAnywhere = !anchored && !body.includes("/");
|
|
37
|
+
if (dirOnly)
|
|
38
|
+
body += "/**";
|
|
39
|
+
let re = "";
|
|
40
|
+
for (let i = 0; i < body.length; i++) {
|
|
41
|
+
const ch = body[i];
|
|
42
|
+
if (ch === "*") {
|
|
43
|
+
if (body[i + 1] === "*") {
|
|
44
|
+
i++;
|
|
45
|
+
if (body[i + 1] === "/") {
|
|
46
|
+
// `**/`:零个或多个目录层级,使 `**/*.ts` 也能匹配根目录文件
|
|
47
|
+
i++;
|
|
48
|
+
re += "(?:.*/)?";
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
re += ".*";
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
re += "[^/]*";
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
else if (ch === "?") {
|
|
59
|
+
re += "[^/]";
|
|
60
|
+
}
|
|
61
|
+
else if (".+^${}()|[]\\".includes(ch)) {
|
|
62
|
+
re += `\\${ch}`;
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
re += ch;
|
|
66
|
+
}
|
|
18
67
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
68
|
+
const prefix = matchAnywhere ? "(?:.*/)?" : "";
|
|
69
|
+
// 与 .gitignore 一致:命中目录时,目录下全部文件同样命中
|
|
70
|
+
const suffix = body.endsWith("**") ? "" : "(?:/.*)?";
|
|
71
|
+
return new RegExp(`^${prefix}${re}${suffix}$`);
|
|
72
|
+
}
|
|
73
|
+
function selectReviewableDiff(diff, options = {}) {
|
|
74
|
+
if (!diff.trim()) {
|
|
75
|
+
return { diff, ignoredFiles: [], oversizedFiles: [] };
|
|
76
|
+
}
|
|
77
|
+
const userPatterns = options.ignorePatterns ?? [];
|
|
78
|
+
const maxProjected = options.maxProjectedBytes ?? exports.MAX_PROJECTED_REQUEST_BYTES;
|
|
79
|
+
const project = options.projectBytes ??
|
|
80
|
+
((section) => projectShardRequestBytes(section, 0));
|
|
81
|
+
const ignoredFiles = [];
|
|
82
|
+
const oversizedFiles = [];
|
|
83
|
+
const kept = [];
|
|
84
|
+
for (const section of splitDiffByFile(diff)) {
|
|
85
|
+
const path = diffSectionPath(section);
|
|
86
|
+
if (path &&
|
|
87
|
+
((0, default_ignore_1.isDefaultIgnored)(path) ||
|
|
88
|
+
userPatterns.some((pattern) => globToRegExp(pattern).test(path)))) {
|
|
89
|
+
ignoredFiles.push(path);
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
if (project(section) > maxProjected) {
|
|
93
|
+
oversizedFiles.push(path);
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
kept.push(section);
|
|
25
97
|
}
|
|
26
|
-
|
|
27
|
-
.replace(/[.+?^${}()|[\]\\]/g, "\\$&")
|
|
28
|
-
.replace(/\*/g, "[^/]*");
|
|
29
|
-
return new RegExp(`^${escaped}$`);
|
|
98
|
+
return { diff: kept.join("\n"), ignoredFiles, oversizedFiles };
|
|
30
99
|
}
|
|
31
100
|
/**
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
* participate (cannot be disabled by project config).
|
|
101
|
+
* 只做路径过滤的薄封装。摘要生成不关心体量(它的输入是文件清单统计,
|
|
102
|
+
* 与 diff 体量已解耦),因此不需要投影计算。
|
|
35
103
|
*/
|
|
36
104
|
function filterDiffByIgnore(diff, ignorePatterns) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
const kept = [];
|
|
42
|
-
let ignoreCurrent = false;
|
|
43
|
-
for (const line of lines) {
|
|
44
|
-
if (line.startsWith("diff --git ")) {
|
|
45
|
-
ignoreCurrent = false;
|
|
46
|
-
const match = /^diff --git a\/(.+?) b\/(.+)$/.exec(line);
|
|
47
|
-
if (match) {
|
|
48
|
-
const path = match[2];
|
|
49
|
-
ignoreCurrent =
|
|
50
|
-
(0, default_ignore_1.isDefaultIgnored)(path) ||
|
|
51
|
-
userPatterns.some((pattern) => globToRegExp(pattern).test(path));
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
if (!ignoreCurrent)
|
|
55
|
-
kept.push(line);
|
|
56
|
-
}
|
|
57
|
-
return kept.join("\n");
|
|
105
|
+
return selectReviewableDiff(diff, {
|
|
106
|
+
...(ignorePatterns ? { ignorePatterns } : {}),
|
|
107
|
+
maxProjectedBytes: Number.MAX_SAFE_INTEGER,
|
|
108
|
+
}).diff;
|
|
58
109
|
}
|
|
59
110
|
function normalizePath(path) {
|
|
60
111
|
return path.trim().replace(/^[ab]\//, "").replace(/^\.\//, "");
|
|
@@ -183,8 +234,55 @@ function diffSectionPath(section) {
|
|
|
183
234
|
}
|
|
184
235
|
function splitDiffByMaxBytes(diff, maxBytes) {
|
|
185
236
|
// 按文件路径排序后再装箱,分片组成只取决于文件集合本身,
|
|
186
|
-
// 不受 diff
|
|
187
|
-
|
|
237
|
+
// 不受 diff 输出顺序影响,降低跨次评审的分片漂移。
|
|
238
|
+
// 注意:这里只按文件边界装箱,单文件超过 maxBytes 时不会再切——
|
|
239
|
+
// 该情况由 planReviewShards 显式跳过,见 MAX_SINGLE_FILE_BYTES。
|
|
240
|
+
return packSectionsByPath(splitDiffByFile(diff), maxBytes);
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* 单次 run 的分片数上限。单 run 的模型开销由此有确定性上界:
|
|
244
|
+
* 40 片 × 约 $0.32/片 ≈ $13。2026-08-28 事故中一个 run 发了 1185 次调用、$388,
|
|
245
|
+
* 正是因为分片数完全没有上限。
|
|
246
|
+
*/
|
|
247
|
+
exports.MAX_REVIEW_SHARDS = 40;
|
|
248
|
+
/**
|
|
249
|
+
* 装箱预算的硬上限(与平台 `normalizeShardMaxBytes` 的上限同值,
|
|
250
|
+
* 单一声明源见 aicr-limits.json 的 maxShardMaxBytes)。
|
|
251
|
+
*
|
|
252
|
+
* 由不变式反推:300000 × 最坏注解膨胀 5.2 + 40000 源码窗口 = 1.60MB,
|
|
253
|
+
* 落在 MAX_PROJECTED_REQUEST_BYTES(1.8MB) 之内。
|
|
254
|
+
*/
|
|
255
|
+
exports.MAX_RAW_SHARD_BYTES = 300000;
|
|
256
|
+
/**
|
|
257
|
+
* 单次模型请求的投影体量上限(单一声明源见仓库根 aicr-limits.json)。
|
|
258
|
+
*
|
|
259
|
+
* = 网关 `AICR_GATEWAY_MAX_REQUEST_BYTES`(2_000_000) × 0.9,留 10% 给两种线协议
|
|
260
|
+
* 信封差异与 JSON 转义膨胀。**cli-remote 与网关判定的是同一个物理量**——
|
|
261
|
+
* 投影出来的请求体字节数,而不是各自拿原始 diff 字节去猜。
|
|
262
|
+
*
|
|
263
|
+
* 为什么必须实测而不能用系数换算:`buildAnnotatedDiff` 的膨胀不是常数,实测在
|
|
264
|
+
* 1.10×(长行)到 5.16×(每行 1 字符)之间——每行都要付固定的 `[ADD] 1234 | `
|
|
265
|
+
* 标记开销,行越短占比越高。曾用「单文件原始 1MB」当阈值,结果一个 1MB 的
|
|
266
|
+
* 极短行文件投影出 4.95MB 请求体,反而被自己的网关 413。
|
|
267
|
+
*/
|
|
268
|
+
exports.MAX_PROJECTED_REQUEST_BYTES = 1800000;
|
|
269
|
+
/** 每分片源码窗口的上限(context.ts 的 MAX_SOURCE_BYTES),按上界计入投影 */
|
|
270
|
+
const SHARD_SOURCE_BUDGET_BYTES = 40000;
|
|
271
|
+
/** 线协议信封(model / max_tokens / role / cache_control 等固定字段)的开销 */
|
|
272
|
+
const JSON_ENVELOPE_BYTES = 2000;
|
|
273
|
+
/**
|
|
274
|
+
* 投影一个分片最终会产生多大的请求体。源码窗口按其上限计入(规划时尚未读盘),
|
|
275
|
+
* 因此这是上界估计——宁可保守跳过,也不要送出去再被网关拦下。
|
|
276
|
+
*/
|
|
277
|
+
function projectShardRequestBytes(shardDiff, systemPromptBytes) {
|
|
278
|
+
return (Buffer.byteLength(buildAnnotatedDiff(shardDiff)) +
|
|
279
|
+
SHARD_SOURCE_BUDGET_BYTES +
|
|
280
|
+
systemPromptBytes +
|
|
281
|
+
JSON_ENVELOPE_BYTES);
|
|
282
|
+
}
|
|
283
|
+
/** 按路径排序后首次适应装箱——与 splitDiffByMaxBytes 同一算法,供两者共用 */
|
|
284
|
+
function packSectionsByPath(sections, maxBytes) {
|
|
285
|
+
const files = [...sections].sort((a, b) => diffSectionPath(a).localeCompare(diffSectionPath(b)));
|
|
188
286
|
const shards = [];
|
|
189
287
|
let current = [];
|
|
190
288
|
let currentBytes = 0;
|
|
@@ -202,6 +300,100 @@ function splitDiffByMaxBytes(diff, maxBytes) {
|
|
|
202
300
|
shards.push(current.join("\n"));
|
|
203
301
|
return shards;
|
|
204
302
|
}
|
|
303
|
+
/**
|
|
304
|
+
* 在分片预算内规划本次 run 的分片。**只回答「预算内能审多少」**——
|
|
305
|
+
* 「哪些文件该进评审」由 `selectReviewableDiff` 单独回答,两者不重叠。
|
|
306
|
+
*
|
|
307
|
+
* 未超预算时结果与 `splitDiffByMaxBytes` 逐字节一致——正常体量的 MR 不产生
|
|
308
|
+
* 任何分片组成变化,避免存量项目的评论锚点漂移。
|
|
309
|
+
*/
|
|
310
|
+
function planReviewShards(diff, options) {
|
|
311
|
+
const maxShards = options.maxShards ?? exports.MAX_REVIEW_SHARDS;
|
|
312
|
+
const eligible = splitDiffByFile(diff);
|
|
313
|
+
// 装箱预算钳到 MAX_RAW_SHARD_BYTES:平台侧已对 shardMaxBytes 做过同样的钳制,
|
|
314
|
+
// 这里是第二道——CLI 不能因为拿到一个过大的下发值就产出必然被网关拒绝的分片。
|
|
315
|
+
const effectiveShardBytes = Math.min(options.shardMaxBytes, exports.MAX_RAW_SHARD_BYTES);
|
|
316
|
+
let shards = packSectionsByPath(eligible, effectiveShardBytes);
|
|
317
|
+
const budgetSkipped = [];
|
|
318
|
+
if (shards.length > maxShards) {
|
|
319
|
+
// 按单文件体积升序选取:手写改动通常小、生成物通常巨大,
|
|
320
|
+
// 这个顺序天然把可评审的内容排在前面。
|
|
321
|
+
const bySize = [...eligible].sort((a, b) => Buffer.byteLength(a) - Buffer.byteLength(b) ||
|
|
322
|
+
diffSectionPath(a).localeCompare(diffSectionPath(b)));
|
|
323
|
+
const budgetBytes = maxShards * effectiveShardBytes;
|
|
324
|
+
const chosen = [];
|
|
325
|
+
let usedBytes = 0;
|
|
326
|
+
for (const section of bySize) {
|
|
327
|
+
const bytes = Buffer.byteLength(section);
|
|
328
|
+
if (usedBytes + bytes > budgetBytes)
|
|
329
|
+
break;
|
|
330
|
+
chosen.push(section);
|
|
331
|
+
usedBytes += bytes;
|
|
332
|
+
}
|
|
333
|
+
shards = packSectionsByPath(chosen, effectiveShardBytes);
|
|
334
|
+
// 字节预算是近似:装箱碎片会让实际分片数低于上限,白白少审几片。
|
|
335
|
+
// 这里按体积升序把剩余文件逐个试着加回来,直到真正用满分片预算,
|
|
336
|
+
// 使「上限 40」名副其实——否则实测只会跑到 35 片,调参的人会困惑。
|
|
337
|
+
if (shards.length < maxShards) {
|
|
338
|
+
const chosenSet = new Set(chosen);
|
|
339
|
+
for (const section of bySize) {
|
|
340
|
+
if (chosenSet.has(section))
|
|
341
|
+
continue;
|
|
342
|
+
const trial = packSectionsByPath([...chosen, section], effectiveShardBytes);
|
|
343
|
+
if (trial.length > maxShards)
|
|
344
|
+
continue;
|
|
345
|
+
chosen.push(section);
|
|
346
|
+
chosenSet.add(section);
|
|
347
|
+
shards = trial;
|
|
348
|
+
if (shards.length === maxShards)
|
|
349
|
+
break;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
// 兜底:任何情况下都不得超过上限
|
|
353
|
+
if (shards.length > maxShards)
|
|
354
|
+
shards = shards.slice(0, maxShards);
|
|
355
|
+
const reviewed = new Set(shards.flatMap((s) => getChangedFiles(s)));
|
|
356
|
+
for (const section of eligible) {
|
|
357
|
+
const path = diffSectionPath(section);
|
|
358
|
+
if (!reviewed.has(path))
|
|
359
|
+
budgetSkipped.push(path);
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
return { shards, budgetSkippedFiles: budgetSkipped };
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* 变更文件清单与增删行统计。摘要生成以此为输入,使摘要调用的体量与 diff
|
|
366
|
+
* 总量解耦——此前 `generateSummary` 把整份 diff 灌进一次调用,实测出现过
|
|
367
|
+
* 62–75 万 token 的单次摘要调用。
|
|
368
|
+
*
|
|
369
|
+
* 刻意只产出统计量,不夹带任何源码行。
|
|
370
|
+
*/
|
|
371
|
+
function summarizeDiffFiles(diff) {
|
|
372
|
+
const byFile = new Map();
|
|
373
|
+
let currentFile = "";
|
|
374
|
+
for (const event of walkDiff(diff)) {
|
|
375
|
+
if (event.kind === "file") {
|
|
376
|
+
currentFile = normalizePath(event.newPath || event.oldPath || "");
|
|
377
|
+
if (currentFile && !byFile.has(currentFile)) {
|
|
378
|
+
byFile.set(currentFile, { file: currentFile, added: 0, removed: 0 });
|
|
379
|
+
}
|
|
380
|
+
continue;
|
|
381
|
+
}
|
|
382
|
+
const stat = byFile.get(currentFile);
|
|
383
|
+
if (!stat)
|
|
384
|
+
continue;
|
|
385
|
+
if (event.kind === "add")
|
|
386
|
+
stat.added += 1;
|
|
387
|
+
else if (event.kind === "del")
|
|
388
|
+
stat.removed += 1;
|
|
389
|
+
}
|
|
390
|
+
const files = [...byFile.values()].sort((a, b) => a.file.localeCompare(b.file));
|
|
391
|
+
return {
|
|
392
|
+
files,
|
|
393
|
+
totalAdded: files.reduce((sum, f) => sum + f.added, 0),
|
|
394
|
+
totalRemoved: files.reduce((sum, f) => sum + f.removed, 0),
|
|
395
|
+
};
|
|
396
|
+
}
|
|
205
397
|
/**
|
|
206
398
|
* 紧凑模式的注解 diff:以新文件侧行号就地标注每一行,一份结构同时承载
|
|
207
399
|
* 「可评论锚定表」与「变更展示」(替代行索引 + 原始 diff 两块)。
|
package/dist/core/diff.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/core/diff.ts"],"names":[],"mappings":";;AAGA,oCAgBC;AAOD,gDAqBC;AAQD,sCAEC;AAeD,4BAgEC;AAED,8CAaC;AAED,0CAaC;AAyBD,kDAuBC;AAOD,gDAuCC;AA0DD,sFA6DC;AAGD,sEAKC;AAlYD,qDAAoD;AAEpD,SAAgB,YAAY,CAAC,OAAe;IAC1C,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC;QAC1E,OAAO,IAAI,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,CAAC;IACtC,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,OAAO;aACjB,KAAK,CAAC,CAAC,CAAC;aACR,OAAO,CAAC,oBAAoB,EAAE,MAAM,CAAC;aACrC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC3B,OAAO,IAAI,MAAM,CAAC,YAAY,IAAI,GAAG,CAAC,CAAC;IACzC,CAAC;IACD,MAAM,OAAO,GAAG,OAAO;SACpB,OAAO,CAAC,oBAAoB,EAAE,MAAM,CAAC;SACrC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC3B,OAAO,IAAI,MAAM,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC;AACpC,CAAC;AAED;;;;GAIG;AACH,SAAgB,kBAAkB,CAAC,IAAY,EAAE,cAAyB;IACxE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO,IAAI,CAAC;IAC9B,MAAM,YAAY,GAAG,cAAc,IAAI,EAAE,CAAC;IAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,aAAa,GAAG,KAAK,CAAC;IAE1B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YACnC,aAAa,GAAG,KAAK,CAAC;YACtB,MAAM,KAAK,GAAG,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzD,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtB,aAAa;oBACX,IAAA,iCAAgB,EAAC,IAAI,CAAC;wBACtB,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QACD,IAAI,CAAC,aAAa;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AAQD,SAAgB,aAAa,CAAC,IAAY;IACxC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACjE,CAAC;AASD;;;;;GAKG;AACH,QAAe,CAAC,CAAC,QAAQ,CAAC,IAAY;IACpC,IAAI,OAAO,GAAkB,IAAI,CAAC;IAClC,IAAI,OAAO,GAAkB,IAAI,CAAC;IAClC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,GAAG,CAAC,IAAI,YAAY,GAAG,CAAC,CAAC;IAE1D,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YACd,IAAI,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;gBAClC,OAAO,GAAG,IAAI,CAAC;gBACf,OAAO,GAAG,IAAI,CAAC;gBACf,MAAM,KAAK,GAAG,+BAA+B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACxD,IAAI,KAAK,EAAE,CAAC;oBACV,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBAClC,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBAClC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;gBAC3C,CAAC;gBACD,SAAS;YACX,CAAC;YACD,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC;oBAChC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;oBAC3C,CAAC,CAAC,IAAI,CAAC;gBACT,SAAS;YACX,CAAC;YACD,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC;oBAChC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;oBAC3C,CAAC,CAAC,IAAI,CAAC;gBACT,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;gBACzC,SAAS;YACX,CAAC;YACD,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,MAAM,KAAK,GACT,mDAAmD,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAChE,IAAI,CAAC,KAAK;oBAAE,SAAS;gBACrB,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7D,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7D,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3B,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;gBAClE,SAAS;YACX,CAAC;YACD,SAAS;QACX,CAAC;QAED,iCAAiC;QACjC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS;QACnC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3E,OAAO,IAAI,CAAC,CAAC;YACb,YAAY,IAAI,CAAC,CAAC;QACpB,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5D,YAAY,IAAI,CAAC,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YACzD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;YAC7D,OAAO,IAAI,CAAC,CAAC;YACb,YAAY,IAAI,CAAC,CAAC;YAClB,YAAY,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAgB,iBAAiB,CAAC,IAAY;IAC5C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC7C,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC1B,IAAI,KAAK,CAAC,OAAO;gBAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5E,SAAS;QACX,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI;YAAE,SAAS;QAClD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5E,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,eAAe,CAAC,IAAY;IAC1C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,IAAI,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,+BAA+B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACxD,IAAI,KAAK;gBAAE,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9C,SAAS;QACX,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;AACpB,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,OAAO,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAClC,OAAO,GAAG,EAAE,CAAC;QACf,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QACxC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,eAAe,CAAC,OAAe;IACtC,MAAM,KAAK,GAAG,gCAAgC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7D,OAAO,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9C,CAAC;AAED,SAAgB,mBAAmB,CAAC,IAAY,EAAE,QAAgB;IAChE,8BAA8B;IAC9B,6BAA6B;IAC7B,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAChD,eAAe,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CACrD,CAAC;IACF,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,OAAO,GAAa,EAAE,CAAC;IAC3B,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,GAAG,SAAS,GAAG,QAAQ,EAAE,CAAC;YAC9D,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAChC,OAAO,GAAG,EAAE,CAAC;YACb,YAAY,GAAG,CAAC,CAAC;QACnB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvB,YAAY,IAAI,SAAS,CAAC;IAC5B,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACxD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,SAAgB,kBAAkB,CAAC,IAAY;IAC7C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,SAAS,GAAkB,IAAI,CAAC;IAEpC,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,qCAAqC;gBACrC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO;oBACzB,CAAC,CAAC,OAAO,KAAK,CAAC,OAAO,EAAE;oBACxB,CAAC,CAAC,KAAK,CAAC,OAAO;wBACf,CAAC,CAAC,OAAO,KAAK,CAAC,OAAO,SAAS;wBAC/B,CAAC,CAAC,IAAI,CAAC;gBACT,2CAA2C;gBAC3C,IAAI,KAAK,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACjC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAChB,SAAS,GAAG,KAAK,CAAC;gBACpB,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,MAAM;gBACT,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,CAAC;gBACvD,MAAM;YACR,KAAK,KAAK;gBACR,GAAG,CAAC,IAAI,CACN,SAAS,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,KAAK,CAAC,OAAO,EAAE,CAClE,CAAC;gBACF,MAAM;YACR,KAAK,KAAK;gBACR,GAAG,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC1C,MAAM;YACR,KAAK,KAAK;gBACR,GAAG,CAAC,IAAI,CACN,SAAS,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,KAAK,CAAC,OAAO,EAAE,CAClE,CAAC;gBACF,MAAM;QACV,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AAiBD,SAAS,mBAAmB;IAC1B,OAAO;QACL,cAAc,EAAE,CAAC;QACjB,cAAc,EAAE,CAAC;QACjB,mBAAmB,EAAE,CAAC;QACtB,oBAAoB,EAAE,CAAC;QACvB,2BAA2B,EAAE,CAAC;QAC9B,qBAAqB,EAAE,CAAC;QACxB,sBAAsB,EAAE,CAAC;KAC1B,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,iBAAiB,CAAC,IAAY;IACrC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACzB,IAAI,IAAI;QAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAE7B,MAAM,mBAAmB,GAAG,IAAI;SAC7B,OAAO,CAAC,gCAAgC,EAAE,EAAE,CAAC;SAC7C,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC;SACnC,IAAI,EAAE,CAAC;IACV,IAAI,mBAAmB;QAAE,QAAQ,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAE3D,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACxE,IAAI,iBAAiB;QAAE,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAEvD,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC;AACvB,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,qCAAqC,CACnD,IAAY,EACZ,QAAqB;IAErB,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,MAAM,KAAK,GAAG,mBAAmB,EAAE,CAAC;IAEpC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;QAClC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,KAAK,CAAC,mBAAmB,IAAI,CAAC,CAAC;YAC/B,SAAS;QACX,CAAC;QAED,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;YACxB,KAAK,CAAC,oBAAoB,IAAI,CAAC,CAAC;YAChC,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QACpE,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC7C,KAAK,CAAC,2BAA2B,IAAI,CAAC,CAAC;gBACvC,SAAS;YACX,CAAC;YACD,KAAK,CAAC,cAAc,IAAI,CAAC,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC;gBACX,GAAG,OAAO;gBACV,IAAI;gBACJ,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,IAAI,EAAE,KAAK,CAAC,OAAO;aACpB,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAC7C,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CACvC,CAAC;QACF,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC;YAC7B,KAAK,CAAC,cAAc,IAAI,CAAC,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC;gBACX,GAAG,OAAO;gBACV,IAAI;gBACJ,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,IAAI,EAAE,MAAM,CAAC,OAAO;aACrB,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,KAAK,CAAC,qBAAqB,IAAI,CAAC,CAAC;YACjC,SAAS;QACX,CAAC;QACD,KAAK,CAAC,sBAAsB,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACtC,CAAC;AAED,0EAA0E;AAC1E,SAAgB,6BAA6B,CAC3C,IAAY,EACZ,QAAqB;IAErB,OAAO,qCAAqC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC;AACxE,CAAC"}
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/core/diff.ts"],"names":[],"mappings":";;;AAcA,oCAuCC;AA+BD,oDAoCC;AAMD,gDAQC;AAQD,sCAEC;AAeD,4BAgEC;AAED,8CAaC;AAED,0CAaC;AAyBD,kDAMC;AA0CD,4DAUC;AA4CD,4CAkEC;AAqBD,gDA0BC;AAOD,gDAuCC;AA0DD,sFA6DC;AAGD,sEAKC;AAzpBD,qDAAoD;AAEpD;;;;;;;;;;GAUG;AACH,SAAgB,YAAY,CAAC,OAAe;IAC1C,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAEhC,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,IAAI,KAAK,IAAI,CAAC;IAC9B,MAAM,aAAa,GAAG,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACvD,IAAI,OAAO;QAAE,IAAI,IAAI,KAAK,CAAC;IAE3B,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACf,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBACxB,CAAC,EAAE,CAAC;gBACJ,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;oBACxB,wCAAwC;oBACxC,CAAC,EAAE,CAAC;oBACJ,EAAE,IAAI,UAAU,CAAC;gBACnB,CAAC;qBAAM,CAAC;oBACN,EAAE,IAAI,IAAI,CAAC;gBACb,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,EAAE,IAAI,OAAO,CAAC;YAChB,CAAC;QACH,CAAC;aAAM,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACtB,EAAE,IAAI,MAAM,CAAC;QACf,CAAC;aAAM,IAAI,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;YACxC,EAAE,IAAI,KAAK,EAAE,EAAE,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,EAAE,IAAI,EAAE,CAAC;QACX,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/C,oCAAoC;IACpC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;IACrD,OAAO,IAAI,MAAM,CAAC,IAAI,MAAM,GAAG,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC;AACjD,CAAC;AA+BD,SAAgB,oBAAoB,CAClC,IAAY,EACZ,UAAkC,EAAE;IAEpC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QACjB,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC;IACxD,CAAC;IACD,MAAM,YAAY,GAAG,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC;IAClD,MAAM,YAAY,GAChB,OAAO,CAAC,iBAAiB,IAAI,mCAA2B,CAAC;IAC3D,MAAM,OAAO,GACX,OAAO,CAAC,YAAY;QACpB,CAAC,CAAC,OAAe,EAAE,EAAE,CAAC,wBAAwB,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;IAE9D,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,MAAM,IAAI,GAAa,EAAE,CAAC;IAE1B,KAAK,MAAM,OAAO,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QACtC,IACE,IAAI;YACJ,CAAC,IAAA,iCAAgB,EAAC,IAAI,CAAC;gBACrB,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EACnE,CAAC;YACD,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,SAAS;QACX,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,YAAY,EAAE,CAAC;YACpC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1B,SAAS;QACX,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrB,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC;AACjE,CAAC;AAED;;;GAGG;AACH,SAAgB,kBAAkB,CAChC,IAAY,EACZ,cAAyB;IAEzB,OAAO,oBAAoB,CAAC,IAAI,EAAE;QAChC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,iBAAiB,EAAE,MAAM,CAAC,gBAAgB;KAC3C,CAAC,CAAC,IAAI,CAAC;AACV,CAAC;AAQD,SAAgB,aAAa,CAAC,IAAY;IACxC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACjE,CAAC;AASD;;;;;GAKG;AACH,QAAe,CAAC,CAAC,QAAQ,CAAC,IAAY;IACpC,IAAI,OAAO,GAAkB,IAAI,CAAC;IAClC,IAAI,OAAO,GAAkB,IAAI,CAAC;IAClC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,GAAG,CAAC,IAAI,YAAY,GAAG,CAAC,CAAC;IAE1D,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YACd,IAAI,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;gBAClC,OAAO,GAAG,IAAI,CAAC;gBACf,OAAO,GAAG,IAAI,CAAC;gBACf,MAAM,KAAK,GAAG,+BAA+B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACxD,IAAI,KAAK,EAAE,CAAC;oBACV,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBAClC,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBAClC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;gBAC3C,CAAC;gBACD,SAAS;YACX,CAAC;YACD,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC;oBAChC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;oBAC3C,CAAC,CAAC,IAAI,CAAC;gBACT,SAAS;YACX,CAAC;YACD,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC;oBAChC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;oBAC3C,CAAC,CAAC,IAAI,CAAC;gBACT,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;gBACzC,SAAS;YACX,CAAC;YACD,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,MAAM,KAAK,GACT,mDAAmD,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAChE,IAAI,CAAC,KAAK;oBAAE,SAAS;gBACrB,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7D,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7D,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3B,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;gBAClE,SAAS;YACX,CAAC;YACD,SAAS;QACX,CAAC;QAED,iCAAiC;QACjC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS;QACnC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3E,OAAO,IAAI,CAAC,CAAC;YACb,YAAY,IAAI,CAAC,CAAC;QACpB,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5D,YAAY,IAAI,CAAC,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YACzD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;YAC7D,OAAO,IAAI,CAAC,CAAC;YACb,YAAY,IAAI,CAAC,CAAC;YAClB,YAAY,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAgB,iBAAiB,CAAC,IAAY;IAC5C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC7C,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC1B,IAAI,KAAK,CAAC,OAAO;gBAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5E,SAAS;QACX,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI;YAAE,SAAS;QAClD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5E,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,eAAe,CAAC,IAAY;IAC1C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,IAAI,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,+BAA+B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACxD,IAAI,KAAK;gBAAE,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9C,SAAS;QACX,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;AACpB,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,OAAO,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAClC,OAAO,GAAG,EAAE,CAAC;QACf,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QACxC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,eAAe,CAAC,OAAe;IACtC,MAAM,KAAK,GAAG,gCAAgC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7D,OAAO,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9C,CAAC;AAED,SAAgB,mBAAmB,CAAC,IAAY,EAAE,QAAgB;IAChE,8BAA8B;IAC9B,8BAA8B;IAC9B,uCAAuC;IACvC,sDAAsD;IACtD,OAAO,kBAAkB,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC7D,CAAC;AAED;;;;GAIG;AACU,QAAA,iBAAiB,GAAG,EAAE,CAAC;AAEpC;;;;;;GAMG;AACU,QAAA,mBAAmB,GAAG,MAAO,CAAC;AAE3C;;;;;;;;;;;GAWG;AACU,QAAA,2BAA2B,GAAG,OAAS,CAAC;AAErD,wDAAwD;AACxD,MAAM,yBAAyB,GAAG,KAAM,CAAC;AAEzC,gEAAgE;AAChE,MAAM,mBAAmB,GAAG,IAAK,CAAC;AAElC;;;GAGG;AACH,SAAgB,wBAAwB,CACtC,SAAiB,EACjB,iBAAyB;IAEzB,OAAO,CACL,MAAM,CAAC,UAAU,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAChD,yBAAyB;QACzB,iBAAiB;QACjB,mBAAmB,CACpB,CAAC;AACJ,CAAC;AAaD,qDAAqD;AACrD,SAAS,kBAAkB,CAAC,QAAkB,EAAE,QAAgB;IAC9D,MAAM,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACxC,eAAe,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CACrD,CAAC;IACF,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,OAAO,GAAa,EAAE,CAAC;IAC3B,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,GAAG,SAAS,GAAG,QAAQ,EAAE,CAAC;YAC9D,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAChC,OAAO,GAAG,EAAE,CAAC;YACb,YAAY,GAAG,CAAC,CAAC;QACnB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvB,YAAY,IAAI,SAAS,CAAC;IAC5B,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACxD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,gBAAgB,CAC9B,IAAY,EACZ,OAAyB;IAEzB,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,yBAAiB,CAAC;IACzD,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAEvC,0DAA0D;IAC1D,2CAA2C;IAC3C,MAAM,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAClC,OAAO,CAAC,aAAa,EACrB,2BAAmB,CACpB,CAAC;IACF,IAAI,MAAM,GAAG,kBAAkB,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IAC/D,MAAM,aAAa,GAAa,EAAE,CAAC;IAEnC,IAAI,MAAM,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;QAC9B,8BAA8B;QAC9B,qBAAqB;QACrB,MAAM,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAC/B,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACP,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;YAC3C,eAAe,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CACvD,CAAC;QACF,MAAM,WAAW,GAAG,SAAS,GAAG,mBAAmB,CAAC;QACpD,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACzC,IAAI,SAAS,GAAG,KAAK,GAAG,WAAW;gBAAE,MAAM;YAC3C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrB,SAAS,IAAI,KAAK,CAAC;QACrB,CAAC;QAED,MAAM,GAAG,kBAAkB,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;QAEzD,kCAAkC;QAClC,kCAAkC;QAClC,uCAAuC;QACvC,IAAI,MAAM,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;YAC9B,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;YAClC,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;gBAC7B,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;oBAAE,SAAS;gBACrC,MAAM,KAAK,GAAG,kBAAkB,CAC9B,CAAC,GAAG,MAAM,EAAE,OAAO,CAAC,EACpB,mBAAmB,CACpB,CAAC;gBACF,IAAI,KAAK,CAAC,MAAM,GAAG,SAAS;oBAAE,SAAS;gBACvC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACrB,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACvB,MAAM,GAAG,KAAK,CAAC;gBACf,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;oBAAE,MAAM;YACzC,CAAC;QACH,CAAC;QAED,kBAAkB;QAClB,IAAI,MAAM,CAAC,MAAM,GAAG,SAAS;YAAE,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAEnE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;YACtC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,aAAa,EAAE,CAAC;AACvD,CAAC;AAcD;;;;;;GAMG;AACH,SAAgB,kBAAkB,CAAC,IAAY;IAC7C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC/C,IAAI,WAAW,GAAG,EAAE,CAAC;IAErB,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC1B,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YAClE,IAAI,WAAW,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC5C,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;YACvE,CAAC;YACD,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK;YAAE,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;aACrC,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK;YAAE,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC/C,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAC7B,CAAC;IACF,OAAO;QACL,KAAK;QACL,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACtD,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;KAC3D,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAgB,kBAAkB,CAAC,IAAY;IAC7C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,SAAS,GAAkB,IAAI,CAAC;IAEpC,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,qCAAqC;gBACrC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO;oBACzB,CAAC,CAAC,OAAO,KAAK,CAAC,OAAO,EAAE;oBACxB,CAAC,CAAC,KAAK,CAAC,OAAO;wBACf,CAAC,CAAC,OAAO,KAAK,CAAC,OAAO,SAAS;wBAC/B,CAAC,CAAC,IAAI,CAAC;gBACT,2CAA2C;gBAC3C,IAAI,KAAK,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACjC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAChB,SAAS,GAAG,KAAK,CAAC;gBACpB,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,MAAM;gBACT,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,CAAC;gBACvD,MAAM;YACR,KAAK,KAAK;gBACR,GAAG,CAAC,IAAI,CACN,SAAS,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,KAAK,CAAC,OAAO,EAAE,CAClE,CAAC;gBACF,MAAM;YACR,KAAK,KAAK;gBACR,GAAG,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC1C,MAAM;YACR,KAAK,KAAK;gBACR,GAAG,CAAC,IAAI,CACN,SAAS,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,KAAK,CAAC,OAAO,EAAE,CAClE,CAAC;gBACF,MAAM;QACV,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AAiBD,SAAS,mBAAmB;IAC1B,OAAO;QACL,cAAc,EAAE,CAAC;QACjB,cAAc,EAAE,CAAC;QACjB,mBAAmB,EAAE,CAAC;QACtB,oBAAoB,EAAE,CAAC;QACvB,2BAA2B,EAAE,CAAC;QAC9B,qBAAqB,EAAE,CAAC;QACxB,sBAAsB,EAAE,CAAC;KAC1B,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,iBAAiB,CAAC,IAAY;IACrC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACzB,IAAI,IAAI;QAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAE7B,MAAM,mBAAmB,GAAG,IAAI;SAC7B,OAAO,CAAC,gCAAgC,EAAE,EAAE,CAAC;SAC7C,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC;SACnC,IAAI,EAAE,CAAC;IACV,IAAI,mBAAmB;QAAE,QAAQ,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAE3D,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACxE,IAAI,iBAAiB;QAAE,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAEvD,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC;AACvB,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,qCAAqC,CACnD,IAAY,EACZ,QAAqB;IAErB,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,MAAM,KAAK,GAAG,mBAAmB,EAAE,CAAC;IAEpC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;QAClC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,KAAK,CAAC,mBAAmB,IAAI,CAAC,CAAC;YAC/B,SAAS;QACX,CAAC;QAED,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;YACxB,KAAK,CAAC,oBAAoB,IAAI,CAAC,CAAC;YAChC,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QACpE,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC7C,KAAK,CAAC,2BAA2B,IAAI,CAAC,CAAC;gBACvC,SAAS;YACX,CAAC;YACD,KAAK,CAAC,cAAc,IAAI,CAAC,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC;gBACX,GAAG,OAAO;gBACV,IAAI;gBACJ,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,IAAI,EAAE,KAAK,CAAC,OAAO;aACpB,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAC7C,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CACvC,CAAC;QACF,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC;YAC7B,KAAK,CAAC,cAAc,IAAI,CAAC,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC;gBACX,GAAG,OAAO;gBACV,IAAI;gBACJ,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,IAAI,EAAE,MAAM,CAAC,OAAO;aACrB,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,KAAK,CAAC,qBAAqB,IAAI,CAAC,CAAC;YACjC,SAAS;QACX,CAAC;QACD,KAAK,CAAC,sBAAsB,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACtC,CAAC;AAED,0EAA0E;AAC1E,SAAgB,6BAA6B,CAC3C,IAAY,EACZ,QAAqB;IAErB,OAAO,qCAAqC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC;AACxE,CAAC"}
|
package/dist/core/prompt.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { type DiffDigest } from "./diff";
|
|
2
|
+
import type { AIComment } from "../types";
|
|
1
3
|
import type { SensitiveMatch } from "./sensitive";
|
|
2
4
|
export declare class PromptBuilder {
|
|
3
5
|
private diff;
|
|
@@ -23,8 +25,18 @@ export declare class PromptBuilder {
|
|
|
23
25
|
buildUser(): string;
|
|
24
26
|
}
|
|
25
27
|
export declare class SummaryPromptBuilder {
|
|
26
|
-
private
|
|
27
|
-
|
|
28
|
+
private digest;
|
|
29
|
+
private findings;
|
|
30
|
+
/**
|
|
31
|
+
* 摘要以「变更文件清单 + 增删行统计」为输入,而不是整份 diff。
|
|
32
|
+
*
|
|
33
|
+
* 此前 `generateSummary` 把过滤后的整份 diff 灌进一次调用,不分片不截断:
|
|
34
|
+
* 2026-08-28 实测出现 62–75 万 token 的单次摘要调用,单项目单日约 $12.5
|
|
35
|
+
* 只花在摘要上。而那个长度本就超出模型有效摘要的范围,中段信息会被稀释。
|
|
36
|
+
*/
|
|
37
|
+
setDigest(digest: DiffDigest): this;
|
|
38
|
+
/** 本次评审已产出的 findings:让摘要能点出风险,而不必重读源码 */
|
|
39
|
+
setFindings(findings: AIComment[]): this;
|
|
28
40
|
buildSystem(): string;
|
|
29
41
|
buildUser(): string;
|
|
30
42
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/core/prompt.ts"],"names":[],"mappings":"
|
|
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;AAclD,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;IA4BrB,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"}
|
package/dist/core/prompt.js
CHANGED
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SummaryPromptBuilder = exports.PromptBuilder = void 0;
|
|
4
4
|
const diff_1 = require("./diff");
|
|
5
|
+
/** 摘要清单的条目上限:文件数再多,摘要调用的体量也必须有上界 */
|
|
6
|
+
const MAX_SUMMARY_FILES = 80;
|
|
7
|
+
const MAX_SUMMARY_FINDINGS = 30;
|
|
5
8
|
const COMMON_RULES = [
|
|
6
9
|
"重点关注潜在 bug、性能问题、可读性与安全性(如 XSS、注入、敏感信息泄露)",
|
|
7
10
|
"代码要有适当的错误处理",
|
|
@@ -101,17 +104,32 @@ class PromptBuilder {
|
|
|
101
104
|
exports.PromptBuilder = PromptBuilder;
|
|
102
105
|
class SummaryPromptBuilder {
|
|
103
106
|
constructor() {
|
|
104
|
-
this.
|
|
107
|
+
this.digest = { files: [], totalAdded: 0, totalRemoved: 0 };
|
|
108
|
+
this.findings = [];
|
|
105
109
|
}
|
|
106
|
-
|
|
107
|
-
|
|
110
|
+
/**
|
|
111
|
+
* 摘要以「变更文件清单 + 增删行统计」为输入,而不是整份 diff。
|
|
112
|
+
*
|
|
113
|
+
* 此前 `generateSummary` 把过滤后的整份 diff 灌进一次调用,不分片不截断:
|
|
114
|
+
* 2026-08-28 实测出现 62–75 万 token 的单次摘要调用,单项目单日约 $12.5
|
|
115
|
+
* 只花在摘要上。而那个长度本就超出模型有效摘要的范围,中段信息会被稀释。
|
|
116
|
+
*/
|
|
117
|
+
setDigest(digest) {
|
|
118
|
+
this.digest = digest;
|
|
119
|
+
return this;
|
|
120
|
+
}
|
|
121
|
+
/** 本次评审已产出的 findings:让摘要能点出风险,而不必重读源码 */
|
|
122
|
+
setFindings(findings) {
|
|
123
|
+
this.findings = findings;
|
|
108
124
|
return this;
|
|
109
125
|
}
|
|
110
|
-
// 固定指令集中于 system(与评审 prompt
|
|
126
|
+
// 固定指令集中于 system(与评审 prompt 同一缓存策略)
|
|
111
127
|
buildSystem() {
|
|
112
128
|
return [
|
|
113
129
|
"你是一位资深开发工程师,擅长分析代码改动并生成清晰的技术摘要。",
|
|
114
|
-
"
|
|
130
|
+
"你会收到本次改动的【变更文件清单与增删行统计】,以及【本次代码审查已发现的问题】,",
|
|
131
|
+
"而不是完整 diff。请据此推断改动意图并生成中文 Markdown 汇总报告。",
|
|
132
|
+
"对无法从文件清单确定的细节,用概括性描述,不要臆造具体实现。",
|
|
115
133
|
"必须直接输出纯 Markdown 文本,不要返回 JSON,不要用代码块包裹。",
|
|
116
134
|
"",
|
|
117
135
|
"报告结构:",
|
|
@@ -119,17 +137,38 @@ class SummaryPromptBuilder {
|
|
|
119
137
|
"用 1-2 句话说明整体目的和范围。",
|
|
120
138
|
"",
|
|
121
139
|
"## 主要变更",
|
|
122
|
-
"
|
|
140
|
+
"按目录/模块归纳这次改了哪些部分,说明各自的可能意图。",
|
|
123
141
|
"",
|
|
124
142
|
"## 受影响文件",
|
|
125
|
-
"
|
|
143
|
+
"用表格列出文件路径、增删行数、说明。文件较多时按变更量取前若干条并注明省略数量。",
|
|
126
144
|
"",
|
|
127
145
|
"## 注意事项",
|
|
128
|
-
"
|
|
146
|
+
"结合已发现的问题列出需要关注的风险;没有则写\u201C无\u201D。",
|
|
129
147
|
].join("\n");
|
|
130
148
|
}
|
|
131
149
|
buildUser() {
|
|
132
|
-
|
|
150
|
+
const { files, totalAdded, totalRemoved } = this.digest;
|
|
151
|
+
// 文件数极多时截断清单,保证摘要调用的体量始终有上界
|
|
152
|
+
const shown = files.slice(0, MAX_SUMMARY_FILES);
|
|
153
|
+
const parts = [
|
|
154
|
+
`变更规模:${files.length} 个文件,+${totalAdded} / -${totalRemoved} 行。`,
|
|
155
|
+
"",
|
|
156
|
+
"变更文件清单:",
|
|
157
|
+
"| 文件 | 增 | 删 |",
|
|
158
|
+
"|------|----|----|",
|
|
159
|
+
...shown.map((f) => `| ${f.file} | +${f.added} | -${f.removed} |`),
|
|
160
|
+
];
|
|
161
|
+
if (files.length > shown.length) {
|
|
162
|
+
parts.push(`| …另有 ${files.length - shown.length} 个文件 | | |`);
|
|
163
|
+
}
|
|
164
|
+
if (this.findings.length > 0) {
|
|
165
|
+
const shownFindings = this.findings.slice(0, MAX_SUMMARY_FINDINGS);
|
|
166
|
+
parts.push("", "本次代码审查已发现的问题:", ...shownFindings.map((c) => `- [${c.severity}] ${c.file}:${c.line} ${c.message}`));
|
|
167
|
+
if (this.findings.length > shownFindings.length) {
|
|
168
|
+
parts.push(`- …另有 ${this.findings.length - shownFindings.length} 条`);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return parts.join("\n");
|
|
133
172
|
}
|
|
134
173
|
}
|
|
135
174
|
exports.SummaryPromptBuilder = SummaryPromptBuilder;
|