@wuyanbin/ai-code-review-cli-remote 1.0.28 → 1.0.30
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/constants.d.ts +7 -6
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +8 -14
- package/dist/constants.js.map +1 -1
- package/dist/core/context.d.ts +7 -1
- package/dist/core/context.d.ts.map +1 -1
- package/dist/core/context.js +34 -16
- package/dist/core/context.js.map +1 -1
- package/dist/core/diff.d.ts +58 -1
- package/dist/core/diff.d.ts.map +1 -1
- package/dist/core/diff.js +202 -57
- package/dist/core/diff.js.map +1 -1
- package/dist/core/incremental.d.ts +68 -1
- package/dist/core/incremental.d.ts.map +1 -1
- package/dist/core/incremental.js +396 -69
- package/dist/core/incremental.js.map +1 -1
- package/dist/core/model.d.ts +23 -1
- package/dist/core/model.d.ts.map +1 -1
- package/dist/core/model.js +107 -10
- package/dist/core/model.js.map +1 -1
- package/dist/core/prompt.d.ts +10 -2
- package/dist/core/prompt.d.ts.map +1 -1
- package/dist/core/prompt.js +39 -24
- package/dist/core/prompt.js.map +1 -1
- package/dist/core/revalidation.d.ts +23 -0
- package/dist/core/revalidation.d.ts.map +1 -0
- package/dist/core/revalidation.js +150 -0
- package/dist/core/revalidation.js.map +1 -0
- package/dist/core/reviewer.d.ts +11 -2
- package/dist/core/reviewer.d.ts.map +1 -1
- package/dist/core/reviewer.js +116 -14
- package/dist/core/reviewer.js.map +1 -1
- package/dist/core/semantic-match.d.ts +29 -0
- package/dist/core/semantic-match.d.ts.map +1 -0
- package/dist/core/semantic-match.js +150 -0
- package/dist/core/semantic-match.js.map +1 -0
- package/dist/core/summarizer.d.ts.map +1 -1
- package/dist/core/summarizer.js +1 -1
- package/dist/core/summarizer.js.map +1 -1
- package/dist/gitlab/api.d.ts +42 -0
- package/dist/gitlab/api.d.ts.map +1 -1
- package/dist/gitlab/api.js +120 -23
- package/dist/gitlab/api.js.map +1 -1
- package/dist/platform/report.d.ts +3 -0
- package/dist/platform/report.d.ts.map +1 -1
- package/dist/platform/report.js.map +1 -1
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +121 -28
- package/dist/runner.js.map +1 -1
- package/dist/shared/identity.d.ts +5 -0
- package/dist/shared/identity.d.ts.map +1 -1
- package/dist/shared/identity.js +11 -0
- package/dist/shared/identity.js.map +1 -1
- package/dist/shared/model-json.d.ts +6 -0
- package/dist/shared/model-json.d.ts.map +1 -0
- package/dist/shared/model-json.js +19 -0
- package/dist/shared/model-json.js.map +1 -0
- package/dist/types.d.ts +12 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -3
package/dist/constants.d.ts
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
export declare const REQUEST_TIMEOUT_MS = 180000;
|
|
2
2
|
export declare const API_TIMEOUT_MS = 60000;
|
|
3
|
-
export declare const DEFAULT_MAX_PAGINATION_PAGES = 20;
|
|
4
|
-
export declare const ENV_MAX_PAGINATION_PAGES = "AICR_MAX_PAGINATION_PAGES";
|
|
5
3
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
4
|
+
* GitLab discussions 翻页上限。取一个足以覆盖 bot 评论场景的小值,
|
|
5
|
+
* 同时避免深度顺序翻页冲击 GitLab。
|
|
6
|
+
*
|
|
7
|
+
* 本 CLI 刻意不提供 per-project 行为开关:单一行为路径才能保证各项目表现
|
|
8
|
+
* 一致、排查问题时无需先确认对方开了哪些开关;需要回滚时锁定
|
|
9
|
+
* `AICR_CLI_VERSION` 即可整体回退。
|
|
9
10
|
*/
|
|
10
|
-
export declare
|
|
11
|
+
export declare const MAX_PAGINATION_PAGES = 20;
|
|
11
12
|
export declare const DEFAULT_COMMENT_MESSAGE = "AI Code Review \u63D0\u793A";
|
|
12
13
|
export declare const ENV_PLATFORM_URL = "AICR_PLATFORM_URL";
|
|
13
14
|
export declare const ENV_PROJECT_TOKEN = "AICR_PROJECT_TOKEN";
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,SAAU,CAAC;AAC1C,eAAO,MAAM,cAAc,QAAS,CAAC;AAErC,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,SAAU,CAAC;AAC1C,eAAO,MAAM,cAAc,QAAS,CAAC;AAErC;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAEvC,eAAO,MAAM,uBAAuB,gCAAsB,CAAC;AAE3D,eAAO,MAAM,gBAAgB,sBAAsB,CAAC;AACpD,eAAO,MAAM,iBAAiB,uBAAuB,CAAC;AAEtD,eAAO,MAAM,eAAe,uCAAuC,CAAC;AACpE,eAAO,MAAM,aAAa,qCAAqC,CAAC;AAChE,eAAO,MAAM,iBAAiB,yCAAyC,CAAC"}
|
package/dist/constants.js
CHANGED
|
@@ -1,23 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.API_FINDINGS_PATH = exports.API_RUNS_PATH = exports.API_CONFIG_PATH = exports.ENV_PROJECT_TOKEN = exports.ENV_PLATFORM_URL = exports.DEFAULT_COMMENT_MESSAGE = exports.
|
|
4
|
-
exports.resolveMaxPaginationPages = resolveMaxPaginationPages;
|
|
3
|
+
exports.API_FINDINGS_PATH = exports.API_RUNS_PATH = exports.API_CONFIG_PATH = exports.ENV_PROJECT_TOKEN = exports.ENV_PLATFORM_URL = exports.DEFAULT_COMMENT_MESSAGE = exports.MAX_PAGINATION_PAGES = exports.API_TIMEOUT_MS = exports.REQUEST_TIMEOUT_MS = void 0;
|
|
5
4
|
exports.REQUEST_TIMEOUT_MS = 180000;
|
|
6
5
|
exports.API_TIMEOUT_MS = 60000;
|
|
7
|
-
exports.DEFAULT_MAX_PAGINATION_PAGES = 20;
|
|
8
|
-
exports.ENV_MAX_PAGINATION_PAGES = "AICR_MAX_PAGINATION_PAGES";
|
|
9
6
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
7
|
+
* GitLab discussions 翻页上限。取一个足以覆盖 bot 评论场景的小值,
|
|
8
|
+
* 同时避免深度顺序翻页冲击 GitLab。
|
|
9
|
+
*
|
|
10
|
+
* 本 CLI 刻意不提供 per-project 行为开关:单一行为路径才能保证各项目表现
|
|
11
|
+
* 一致、排查问题时无需先确认对方开了哪些开关;需要回滚时锁定
|
|
12
|
+
* `AICR_CLI_VERSION` 即可整体回退。
|
|
13
13
|
*/
|
|
14
|
-
|
|
15
|
-
const raw = env[exports.ENV_MAX_PAGINATION_PAGES];
|
|
16
|
-
const parsed = Number(raw);
|
|
17
|
-
return raw !== undefined && Number.isInteger(parsed) && parsed > 0
|
|
18
|
-
? parsed
|
|
19
|
-
: exports.DEFAULT_MAX_PAGINATION_PAGES;
|
|
20
|
-
}
|
|
14
|
+
exports.MAX_PAGINATION_PAGES = 20;
|
|
21
15
|
exports.DEFAULT_COMMENT_MESSAGE = "AI Code Review 提示";
|
|
22
16
|
exports.ENV_PLATFORM_URL = "AICR_PLATFORM_URL";
|
|
23
17
|
exports.ENV_PROJECT_TOKEN = "AICR_PROJECT_TOKEN";
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,kBAAkB,GAAG,MAAO,CAAC;AAC7B,QAAA,cAAc,GAAG,KAAM,CAAC;AAErC;;;;;;;GAOG;AACU,QAAA,oBAAoB,GAAG,EAAE,CAAC;AAE1B,QAAA,uBAAuB,GAAG,mBAAmB,CAAC;AAE9C,QAAA,gBAAgB,GAAG,mBAAmB,CAAC;AACvC,QAAA,iBAAiB,GAAG,oBAAoB,CAAC;AAEzC,QAAA,eAAe,GAAG,oCAAoC,CAAC;AACvD,QAAA,aAAa,GAAG,kCAAkC,CAAC;AACnD,QAAA,iBAAiB,GAAG,sCAAsC,CAAC"}
|
package/dist/core/context.d.ts
CHANGED
|
@@ -2,5 +2,11 @@ export interface ReviewContextOptions {
|
|
|
2
2
|
cwd?: string;
|
|
3
3
|
env?: NodeJS.ProcessEnv;
|
|
4
4
|
}
|
|
5
|
-
|
|
5
|
+
/**
|
|
6
|
+
* run 内稳定的审查背景(MR 元信息 + 项目规则文档):每 run 只需计算一次,
|
|
7
|
+
* 进入 system prompt 参与缓存,避免按 shard 重复读盘与重复计费。
|
|
8
|
+
*/
|
|
9
|
+
export declare function collectStableReviewContext(options?: ReviewContextOptions): Promise<string>;
|
|
10
|
+
/** 每 shard 变化的变更附近源码窗口([ADD]/[CTX] 标注):进入 user prompt */
|
|
11
|
+
export declare function collectShardSourceContext(diff: string, options?: ReviewContextOptions): Promise<string>;
|
|
6
12
|
//# sourceMappingURL=context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"AAyBA,MAAM,WAAW,oBAAoB;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AA8ID;;;GAGG;AACH,wBAAsB,0BAA0B,CAC9C,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,MAAM,CAAC,CAKjB;AAED,yDAAyD;AACzD,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,MAAM,CAAC,CAKjB"}
|
package/dist/core/context.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.collectStableReviewContext = collectStableReviewContext;
|
|
4
|
+
exports.collectShardSourceContext = collectShardSourceContext;
|
|
4
5
|
const node_fs_1 = require("node:fs");
|
|
5
6
|
const promises_1 = require("node:fs/promises");
|
|
6
7
|
const node_path_1 = require("node:path");
|
|
@@ -15,8 +16,13 @@ const RULE_FILES = [
|
|
|
15
16
|
"docs/architecture.md",
|
|
16
17
|
];
|
|
17
18
|
const MAX_RULE_BYTES = 16000;
|
|
18
|
-
|
|
19
|
-
const
|
|
19
|
+
// 每行 `[ADD] ` / `[CTX] ` 标记额外占用约 6 字节,预算相应上调以保持注入的源码行数
|
|
20
|
+
const MAX_SOURCE_BYTES = 40000;
|
|
21
|
+
/**
|
|
22
|
+
* 源码窗口的上下文半径。注解 diff 已自带 ±3 行上下文与行号,窗口的独有价值
|
|
23
|
+
* 是更远处的守卫与签名,8 行足够;不提供 per-project 调参以避免行为漂移。
|
|
24
|
+
*/
|
|
25
|
+
const SOURCE_WINDOW_RADIUS = 8;
|
|
20
26
|
const MAX_CONTEXT_FILES = 8;
|
|
21
27
|
function truncateByBytes(value, maxBytes) {
|
|
22
28
|
if (Buffer.byteLength(value) <= maxBytes)
|
|
@@ -89,12 +95,13 @@ async function readRuleContext(cwd) {
|
|
|
89
95
|
}
|
|
90
96
|
return sections.length ? ["## 项目规则文档", ...sections] : [];
|
|
91
97
|
}
|
|
92
|
-
function buildLineWindow(file, content, changedLines) {
|
|
98
|
+
function buildLineWindow(file, content, changedLines, radius) {
|
|
93
99
|
const lines = content.split("\n");
|
|
100
|
+
const addedLines = new Set(changedLines);
|
|
94
101
|
const windows = [];
|
|
95
102
|
for (const line of changedLines.slice(0, 12)) {
|
|
96
|
-
const start = Math.max(1, line -
|
|
97
|
-
const end = Math.min(lines.length, line +
|
|
103
|
+
const start = Math.max(1, line - radius);
|
|
104
|
+
const end = Math.min(lines.length, line + radius);
|
|
98
105
|
const last = windows[windows.length - 1];
|
|
99
106
|
if (last && start <= last.end + 3) {
|
|
100
107
|
last.end = Math.max(last.end, end);
|
|
@@ -108,13 +115,17 @@ function buildLineWindow(file, content, changedLines) {
|
|
|
108
115
|
const chunks = windows.map(({ start, end }) => {
|
|
109
116
|
const numbered = lines
|
|
110
117
|
.slice(start - 1, end)
|
|
111
|
-
.map((line, index) =>
|
|
118
|
+
.map((line, index) => {
|
|
119
|
+
const lineNumber = start + index;
|
|
120
|
+
const kind = addedLines.has(lineNumber) ? "[ADD]" : "[CTX]";
|
|
121
|
+
return `${kind} ${String(lineNumber).padStart(4, " ")} | ${line}`;
|
|
122
|
+
})
|
|
112
123
|
.join("\n");
|
|
113
124
|
return `lines ${start}-${end}\n${numbered}`;
|
|
114
125
|
});
|
|
115
126
|
return `### ${file}\n${chunks.join("\n---\n")}`;
|
|
116
127
|
}
|
|
117
|
-
async function readSourceContext(cwd, diff) {
|
|
128
|
+
async function readSourceContext(cwd, diff, radius) {
|
|
118
129
|
const added = (0, diff_1.collectAddedLines)(diff);
|
|
119
130
|
const changedFiles = (0, diff_1.getChangedFiles)(diff).slice(0, MAX_CONTEXT_FILES);
|
|
120
131
|
const sections = [];
|
|
@@ -126,7 +137,7 @@ async function readSourceContext(cwd, diff) {
|
|
|
126
137
|
continue;
|
|
127
138
|
try {
|
|
128
139
|
const content = await (0, promises_1.readFile)(path, "utf8");
|
|
129
|
-
const section = buildLineWindow(file, content, changedLines);
|
|
140
|
+
const section = buildLineWindow(file, content, changedLines, radius);
|
|
130
141
|
if (!section)
|
|
131
142
|
continue;
|
|
132
143
|
const remaining = MAX_SOURCE_BYTES - usedBytes;
|
|
@@ -142,14 +153,21 @@ async function readSourceContext(cwd, diff) {
|
|
|
142
153
|
}
|
|
143
154
|
return sections.length ? ["## 变更附近源码", ...sections] : [];
|
|
144
155
|
}
|
|
145
|
-
|
|
156
|
+
/**
|
|
157
|
+
* run 内稳定的审查背景(MR 元信息 + 项目规则文档):每 run 只需计算一次,
|
|
158
|
+
* 进入 system prompt 参与缓存,避免按 shard 重复读盘与重复计费。
|
|
159
|
+
*/
|
|
160
|
+
async function collectStableReviewContext(options = {}) {
|
|
146
161
|
const cwd = options.cwd ?? process.cwd();
|
|
147
162
|
const env = options.env ?? process.env;
|
|
148
|
-
const sections = [
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
163
|
+
const sections = [...buildMrContext(env), ...(await readRuleContext(cwd))];
|
|
164
|
+
return sections.length ? sections.join("\n\n") : "(无额外背景)";
|
|
165
|
+
}
|
|
166
|
+
/** 每 shard 变化的变更附近源码窗口([ADD]/[CTX] 标注):进入 user prompt */
|
|
167
|
+
async function collectShardSourceContext(diff, options = {}) {
|
|
168
|
+
const cwd = options.cwd ?? process.cwd();
|
|
169
|
+
const env = options.env ?? process.env;
|
|
170
|
+
const sections = await readSourceContext(cwd, diff, SOURCE_WINDOW_RADIUS);
|
|
171
|
+
return sections.length ? sections.join("\n\n") : "(无源码上下文)";
|
|
154
172
|
}
|
|
155
173
|
//# sourceMappingURL=context.js.map
|
package/dist/core/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"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"}
|
package/dist/core/diff.d.ts
CHANGED
|
@@ -12,9 +12,66 @@ export interface AddedLine {
|
|
|
12
12
|
content: string;
|
|
13
13
|
}
|
|
14
14
|
export declare function normalizePath(path: string): string;
|
|
15
|
+
export type DiffEvent = {
|
|
16
|
+
kind: "file";
|
|
17
|
+
newPath: string | null;
|
|
18
|
+
oldPath: string | null;
|
|
19
|
+
} | {
|
|
20
|
+
kind: "hunk";
|
|
21
|
+
newStart: number;
|
|
22
|
+
newCount: number;
|
|
23
|
+
} | {
|
|
24
|
+
kind: "add";
|
|
25
|
+
file: string | null;
|
|
26
|
+
line: number;
|
|
27
|
+
content: string;
|
|
28
|
+
} | {
|
|
29
|
+
kind: "del";
|
|
30
|
+
file: string | null;
|
|
31
|
+
content: string;
|
|
32
|
+
} | {
|
|
33
|
+
kind: "ctx";
|
|
34
|
+
file: string | null;
|
|
35
|
+
line: number;
|
|
36
|
+
content: string;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* 单一 unified diff 解析器:hunk 内容按 `@@` 声明的行数预算消费,而不是靠
|
|
40
|
+
* 行前缀判断文件头 —— 否则以 `+++ ` / `--- ` 开头的**代码内容**(markdown、
|
|
41
|
+
* SQL 注释、diff 片段等)会被误判为文件头,造成伪造文件归属与整段 hunk 丢失。
|
|
42
|
+
* 所有需要逐行语义的消费方共用它,保证注解 diff 与对齐层对同一行结论一致。
|
|
43
|
+
*/
|
|
44
|
+
export declare function walkDiff(diff: string): Generator<DiffEvent>;
|
|
15
45
|
export declare function collectAddedLines(diff: string): Map<string, AddedLine[]>;
|
|
16
46
|
export declare function getChangedFiles(diff: string): string[];
|
|
17
47
|
export declare function splitDiffByMaxBytes(diff: string, maxBytes: number): string[];
|
|
18
|
-
|
|
48
|
+
/**
|
|
49
|
+
* 紧凑模式的注解 diff:以新文件侧行号就地标注每一行,一份结构同时承载
|
|
50
|
+
* 「可评论锚定表」与「变更展示」(替代行索引 + 原始 diff 两块)。
|
|
51
|
+
* 仅是渲染层——评论对齐仍以原始 diff 的 collectAddedLines 为唯一证据来源。
|
|
52
|
+
*/
|
|
53
|
+
export declare function buildAnnotatedDiff(diff: string): string;
|
|
54
|
+
export interface CommentAlignmentStats {
|
|
55
|
+
acceptedByLine: number;
|
|
56
|
+
repairedByCode: number;
|
|
57
|
+
rejectedMissingCode: number;
|
|
58
|
+
rejectedNoAddedLines: number;
|
|
59
|
+
rejectedConflictingEvidence: number;
|
|
60
|
+
rejectedAmbiguousCode: number;
|
|
61
|
+
rejectedUngroundedCode: number;
|
|
62
|
+
}
|
|
63
|
+
export interface CommentAlignmentResult {
|
|
64
|
+
comments: AIComment[];
|
|
65
|
+
stats: CommentAlignmentStats;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Align model comments only when file, line, and code provide enough evidence.
|
|
69
|
+
*
|
|
70
|
+
* A valid added line plus matching code is accepted. An invalid line may be
|
|
71
|
+
* repaired only when code uniquely matches one added line. Every other case is
|
|
72
|
+
* rejected rather than moved to an arbitrary nearby line.
|
|
73
|
+
*/
|
|
74
|
+
export declare function alignCommentsToDiffAddedLinesDetailed(diff: string, comments: AIComment[]): CommentAlignmentResult;
|
|
75
|
+
/** Compatibility wrapper for callers that only need accepted comments. */
|
|
19
76
|
export declare function alignCommentsToDiffAddedLines(diff: string, comments: AIComment[]): AIComment[];
|
|
20
77
|
//# sourceMappingURL=diff.d.ts.map
|
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,CAgBpD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAqBlF;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,
|
|
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,CAgBpD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAqBlF;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAChE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACnE;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAExE;;;;;GAKG;AACH,wBAAiB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,CAgE5D;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAaxE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAatD;AAyBD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAuB5E;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAuCvD;AAED,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,2BAA2B,EAAE,MAAM,CAAC;IACpC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,KAAK,EAAE,qBAAqB,CAAC;CAC9B;AAoCD;;;;;;GAMG;AACH,wBAAgB,qCAAqC,CACnD,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,SAAS,EAAE,GACpB,sBAAsB,CA0DxB;AAED,0EAA0E;AAC1E,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,SAAS,EAAE,GACpB,SAAS,EAAE,CAEb"}
|
package/dist/core/diff.js
CHANGED
|
@@ -3,10 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.globToRegExp = globToRegExp;
|
|
4
4
|
exports.filterDiffByIgnore = filterDiffByIgnore;
|
|
5
5
|
exports.normalizePath = normalizePath;
|
|
6
|
+
exports.walkDiff = walkDiff;
|
|
6
7
|
exports.collectAddedLines = collectAddedLines;
|
|
7
8
|
exports.getChangedFiles = getChangedFiles;
|
|
8
9
|
exports.splitDiffByMaxBytes = splitDiffByMaxBytes;
|
|
9
|
-
exports.
|
|
10
|
+
exports.buildAnnotatedDiff = buildAnnotatedDiff;
|
|
11
|
+
exports.alignCommentsToDiffAddedLinesDetailed = alignCommentsToDiffAddedLinesDetailed;
|
|
10
12
|
exports.alignCommentsToDiffAddedLines = alignCommentsToDiffAddedLines;
|
|
11
13
|
const default_ignore_1 = require("./default-ignore");
|
|
12
14
|
function globToRegExp(pattern) {
|
|
@@ -57,49 +59,91 @@ function filterDiffByIgnore(diff, ignorePatterns) {
|
|
|
57
59
|
function normalizePath(path) {
|
|
58
60
|
return path.trim().replace(/^[ab]\//, "").replace(/^\.\//, "");
|
|
59
61
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
62
|
+
/**
|
|
63
|
+
* 单一 unified diff 解析器:hunk 内容按 `@@` 声明的行数预算消费,而不是靠
|
|
64
|
+
* 行前缀判断文件头 —— 否则以 `+++ ` / `--- ` 开头的**代码内容**(markdown、
|
|
65
|
+
* SQL 注释、diff 片段等)会被误判为文件头,造成伪造文件归属与整段 hunk 丢失。
|
|
66
|
+
* 所有需要逐行语义的消费方共用它,保证注解 diff 与对齐层对同一行结论一致。
|
|
67
|
+
*/
|
|
68
|
+
function* walkDiff(diff) {
|
|
69
|
+
let newPath = null;
|
|
70
|
+
let oldPath = null;
|
|
64
71
|
let newLine = 0;
|
|
72
|
+
let remainingOld = 0;
|
|
73
|
+
let remainingNew = 0;
|
|
74
|
+
const inHunk = () => remainingOld > 0 || remainingNew > 0;
|
|
65
75
|
for (const raw of diff.split("\n")) {
|
|
66
|
-
if (
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
76
|
+
if (!inHunk()) {
|
|
77
|
+
if (raw.startsWith("diff --git ")) {
|
|
78
|
+
oldPath = null;
|
|
79
|
+
newPath = null;
|
|
80
|
+
const match = /^diff --git a\/(.+?) b\/(.+)$/.exec(raw);
|
|
81
|
+
if (match) {
|
|
82
|
+
oldPath = normalizePath(match[1]);
|
|
83
|
+
newPath = normalizePath(match[2]);
|
|
84
|
+
yield { kind: "file", newPath, oldPath };
|
|
85
|
+
}
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
if (raw.startsWith("--- ")) {
|
|
89
|
+
oldPath = raw.startsWith("--- a/")
|
|
90
|
+
? normalizePath(raw.slice("--- a/".length))
|
|
91
|
+
: null;
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
if (raw.startsWith("+++ ")) {
|
|
95
|
+
newPath = raw.startsWith("+++ b/")
|
|
96
|
+
? normalizePath(raw.slice("+++ b/".length))
|
|
97
|
+
: null;
|
|
98
|
+
yield { kind: "file", newPath, oldPath };
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
if (raw.startsWith("@@")) {
|
|
102
|
+
const match = /^@@\s+-(\d+)(?:,(\d+))?\s+\+(\d+)(?:,(\d+))?\s+@@/.exec(raw);
|
|
103
|
+
if (!match)
|
|
104
|
+
continue;
|
|
105
|
+
remainingOld = match[2] === undefined ? 1 : Number(match[2]);
|
|
106
|
+
remainingNew = match[4] === undefined ? 1 : Number(match[4]);
|
|
107
|
+
newLine = Number(match[3]);
|
|
108
|
+
yield { kind: "hunk", newStart: newLine, newCount: remainingNew };
|
|
109
|
+
continue;
|
|
73
110
|
}
|
|
74
111
|
continue;
|
|
75
112
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
files.set(currentFile, files.get(currentFile) ?? []);
|
|
113
|
+
// hunk 内容:no-newline 标记不消耗任何一侧预算
|
|
114
|
+
if (raw.startsWith("\\"))
|
|
79
115
|
continue;
|
|
116
|
+
if (raw.startsWith("+")) {
|
|
117
|
+
yield { kind: "add", file: newPath, line: newLine, content: raw.slice(1) };
|
|
118
|
+
newLine += 1;
|
|
119
|
+
remainingNew -= 1;
|
|
80
120
|
}
|
|
81
|
-
if (raw.startsWith("
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
newLine = Number(match?.[2] ?? 0);
|
|
85
|
-
continue;
|
|
121
|
+
else if (raw.startsWith("-")) {
|
|
122
|
+
yield { kind: "del", file: newPath, content: raw.slice(1) };
|
|
123
|
+
remainingOld -= 1;
|
|
86
124
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
files.get(currentFile)?.push({
|
|
91
|
-
file: currentFile,
|
|
92
|
-
line: newLine,
|
|
93
|
-
content: raw.slice(1),
|
|
94
|
-
});
|
|
125
|
+
else {
|
|
126
|
+
const content = raw.startsWith(" ") ? raw.slice(1) : raw;
|
|
127
|
+
yield { kind: "ctx", file: newPath, line: newLine, content };
|
|
95
128
|
newLine += 1;
|
|
129
|
+
remainingOld -= 1;
|
|
130
|
+
remainingNew -= 1;
|
|
96
131
|
}
|
|
97
|
-
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
function collectAddedLines(diff) {
|
|
135
|
+
const files = new Map();
|
|
136
|
+
for (const event of walkDiff(diff)) {
|
|
137
|
+
if (event.kind === "file") {
|
|
138
|
+
if (event.newPath)
|
|
139
|
+
files.set(event.newPath, files.get(event.newPath) ?? []);
|
|
98
140
|
continue;
|
|
99
141
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
142
|
+
if (event.kind !== "add" || !event.file)
|
|
143
|
+
continue;
|
|
144
|
+
const bucket = files.get(event.file) ?? [];
|
|
145
|
+
bucket.push({ file: event.file, line: event.line, content: event.content });
|
|
146
|
+
files.set(event.file, bucket);
|
|
103
147
|
}
|
|
104
148
|
return files;
|
|
105
149
|
}
|
|
@@ -158,38 +202,139 @@ function splitDiffByMaxBytes(diff, maxBytes) {
|
|
|
158
202
|
shards.push(current.join("\n"));
|
|
159
203
|
return shards;
|
|
160
204
|
}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
205
|
+
/**
|
|
206
|
+
* 紧凑模式的注解 diff:以新文件侧行号就地标注每一行,一份结构同时承载
|
|
207
|
+
* 「可评论锚定表」与「变更展示」(替代行索引 + 原始 diff 两块)。
|
|
208
|
+
* 仅是渲染层——评论对齐仍以原始 diff 的 collectAddedLines 为唯一证据来源。
|
|
209
|
+
*/
|
|
210
|
+
function buildAnnotatedDiff(diff) {
|
|
211
|
+
const out = [];
|
|
212
|
+
let lastTitle = null;
|
|
213
|
+
for (const event of walkDiff(diff)) {
|
|
214
|
+
switch (event.kind) {
|
|
215
|
+
case "file": {
|
|
216
|
+
// +++ /dev/null:整文件删除,无可评论行,仅保留标题供理解
|
|
217
|
+
const title = event.newPath
|
|
218
|
+
? `### ${event.newPath}`
|
|
219
|
+
: event.oldPath
|
|
220
|
+
? `### ${event.oldPath}(文件已删除)`
|
|
221
|
+
: null;
|
|
222
|
+
// `diff --git` 与 `+++` 会各产生一次 file 事件,标题去重
|
|
223
|
+
if (title && title !== lastTitle) {
|
|
224
|
+
out.push(title);
|
|
225
|
+
lastTitle = title;
|
|
226
|
+
}
|
|
227
|
+
break;
|
|
228
|
+
}
|
|
229
|
+
case "hunk":
|
|
230
|
+
out.push(`@@ +${event.newStart},${event.newCount} @@`);
|
|
231
|
+
break;
|
|
232
|
+
case "add":
|
|
233
|
+
out.push(`[ADD] ${String(event.line).padStart(4, " ")} | ${event.content}`);
|
|
234
|
+
break;
|
|
235
|
+
case "del":
|
|
236
|
+
out.push(`[DEL] | ${event.content}`);
|
|
237
|
+
break;
|
|
238
|
+
case "ctx":
|
|
239
|
+
out.push(`[CTX] ${String(event.line).padStart(4, " ")} | ${event.content}`);
|
|
166
240
|
break;
|
|
167
|
-
rows.push(`[${file}:${item.line}] ${item.content}`);
|
|
168
241
|
}
|
|
169
|
-
if (rows.length >= maxLines)
|
|
170
|
-
break;
|
|
171
242
|
}
|
|
172
|
-
return
|
|
243
|
+
return out.join("\n");
|
|
173
244
|
}
|
|
174
|
-
function
|
|
245
|
+
function emptyAlignmentStats() {
|
|
246
|
+
return {
|
|
247
|
+
acceptedByLine: 0,
|
|
248
|
+
repairedByCode: 0,
|
|
249
|
+
rejectedMissingCode: 0,
|
|
250
|
+
rejectedNoAddedLines: 0,
|
|
251
|
+
rejectedConflictingEvidence: 0,
|
|
252
|
+
rejectedAmbiguousCode: 0,
|
|
253
|
+
rejectedUngroundedCode: 0,
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* 模型经常把 prompt 里渲染出的行前缀一并复制进 `code`(diff 的 `+`、源码窗口的
|
|
258
|
+
* `[ADD] 12 | `、可评论行索引的 `[file:12] `)。这里只反解析本 CLI 自己渲染的
|
|
259
|
+
* 已知前缀,逐级产出候选串;原样匹配始终优先,因此不会放宽精度语义。
|
|
260
|
+
*/
|
|
261
|
+
function modelCodeVariants(code) {
|
|
262
|
+
const variants = new Set();
|
|
263
|
+
const base = code.trim();
|
|
264
|
+
if (base)
|
|
265
|
+
variants.add(base);
|
|
266
|
+
const withoutRenderPrefix = base
|
|
267
|
+
.replace(/^\[(?:ADD|CTX)\]\s*\d+\s*\|\s?/, "")
|
|
268
|
+
.replace(/^\[[^\]\s]+:\d+\]\s?/, "")
|
|
269
|
+
.trim();
|
|
270
|
+
if (withoutRenderPrefix)
|
|
271
|
+
variants.add(withoutRenderPrefix);
|
|
272
|
+
const withoutDiffMarker = withoutRenderPrefix.replace(/^\+/, "").trim();
|
|
273
|
+
if (withoutDiffMarker)
|
|
274
|
+
variants.add(withoutDiffMarker);
|
|
275
|
+
return [...variants];
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Align model comments only when file, line, and code provide enough evidence.
|
|
279
|
+
*
|
|
280
|
+
* A valid added line plus matching code is accepted. An invalid line may be
|
|
281
|
+
* repaired only when code uniquely matches one added line. Every other case is
|
|
282
|
+
* rejected rather than moved to an arbitrary nearby line.
|
|
283
|
+
*/
|
|
284
|
+
function alignCommentsToDiffAddedLinesDetailed(diff, comments) {
|
|
175
285
|
const added = collectAddedLines(diff);
|
|
176
|
-
|
|
286
|
+
const aligned = [];
|
|
287
|
+
const stats = emptyAlignmentStats();
|
|
288
|
+
for (const comment of comments) {
|
|
177
289
|
const file = normalizePath(comment.file);
|
|
290
|
+
const code = comment.code?.trim();
|
|
291
|
+
if (!code) {
|
|
292
|
+
stats.rejectedMissingCode += 1;
|
|
293
|
+
continue;
|
|
294
|
+
}
|
|
178
295
|
const candidates = added.get(file);
|
|
179
|
-
if (!candidates?.length)
|
|
180
|
-
|
|
296
|
+
if (!candidates?.length) {
|
|
297
|
+
stats.rejectedNoAddedLines += 1;
|
|
298
|
+
continue;
|
|
299
|
+
}
|
|
300
|
+
const variants = modelCodeVariants(code);
|
|
181
301
|
const exact = candidates.find((item) => item.line === comment.line);
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
302
|
+
if (exact) {
|
|
303
|
+
if (!variants.includes(exact.content.trim())) {
|
|
304
|
+
stats.rejectedConflictingEvidence += 1;
|
|
305
|
+
continue;
|
|
306
|
+
}
|
|
307
|
+
stats.acceptedByLine += 1;
|
|
308
|
+
aligned.push({
|
|
309
|
+
...comment,
|
|
310
|
+
file,
|
|
311
|
+
line: exact.line,
|
|
312
|
+
code: exact.content,
|
|
313
|
+
});
|
|
314
|
+
continue;
|
|
315
|
+
}
|
|
316
|
+
const codeMatches = candidates.filter((item) => variants.includes(item.content.trim()));
|
|
317
|
+
if (codeMatches.length === 1) {
|
|
318
|
+
const [chosen] = codeMatches;
|
|
319
|
+
stats.repairedByCode += 1;
|
|
320
|
+
aligned.push({
|
|
321
|
+
...comment,
|
|
322
|
+
file,
|
|
323
|
+
line: chosen.line,
|
|
324
|
+
code: chosen.content,
|
|
325
|
+
});
|
|
326
|
+
continue;
|
|
327
|
+
}
|
|
328
|
+
if (codeMatches.length > 1) {
|
|
329
|
+
stats.rejectedAmbiguousCode += 1;
|
|
330
|
+
continue;
|
|
331
|
+
}
|
|
332
|
+
stats.rejectedUngroundedCode += 1;
|
|
333
|
+
}
|
|
334
|
+
return { comments: aligned, stats };
|
|
335
|
+
}
|
|
336
|
+
/** Compatibility wrapper for callers that only need accepted comments. */
|
|
337
|
+
function alignCommentsToDiffAddedLines(diff, comments) {
|
|
338
|
+
return alignCommentsToDiffAddedLinesDetailed(diff, comments).comments;
|
|
194
339
|
}
|
|
195
340
|
//# sourceMappingURL=diff.js.map
|
package/dist/core/diff.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/core/diff.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/core/diff.ts"],"names":[],"mappings":"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"}
|