@wuyanbin/ai-code-review-cli-remote 1.0.35 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/core/context.d.ts +14 -3
  2. package/dist/core/context.d.ts.map +1 -1
  3. package/dist/core/context.js +47 -83
  4. package/dist/core/context.js.map +1 -1
  5. package/dist/core/diff.d.ts +12 -1
  6. package/dist/core/diff.d.ts.map +1 -1
  7. package/dist/core/diff.js +54 -17
  8. package/dist/core/diff.js.map +1 -1
  9. package/dist/core/import-resolve.d.ts +51 -0
  10. package/dist/core/import-resolve.d.ts.map +1 -0
  11. package/dist/core/import-resolve.js +389 -0
  12. package/dist/core/import-resolve.js.map +1 -0
  13. package/dist/core/prompt.d.ts.map +1 -1
  14. package/dist/core/prompt.js +3 -1
  15. package/dist/core/prompt.js.map +1 -1
  16. package/dist/core/reviewer.d.ts.map +1 -1
  17. package/dist/core/reviewer.js +54 -3
  18. package/dist/core/reviewer.js.map +1 -1
  19. package/dist/core/symbol-context.d.ts +56 -0
  20. package/dist/core/symbol-context.d.ts.map +1 -0
  21. package/dist/core/symbol-context.js +451 -0
  22. package/dist/core/symbol-context.js.map +1 -0
  23. package/dist/core/symbols.d.ts +65 -0
  24. package/dist/core/symbols.d.ts.map +1 -0
  25. package/dist/core/symbols.js +627 -0
  26. package/dist/core/symbols.js.map +1 -0
  27. package/dist/core/text-budget.d.ts +3 -0
  28. package/dist/core/text-budget.d.ts.map +1 -0
  29. package/dist/core/text-budget.js +14 -0
  30. package/dist/core/text-budget.js.map +1 -0
  31. package/dist/core/tree-sitter.d.ts +38 -0
  32. package/dist/core/tree-sitter.d.ts.map +1 -0
  33. package/dist/core/tree-sitter.js +151 -0
  34. package/dist/core/tree-sitter.js.map +1 -0
  35. package/dist/tree-sitter/tree-sitter-go.wasm +0 -0
  36. package/dist/tree-sitter/tree-sitter-java.wasm +0 -0
  37. package/dist/tree-sitter/tree-sitter-javascript.wasm +0 -0
  38. package/dist/tree-sitter/tree-sitter-tsx.wasm +0 -0
  39. package/dist/tree-sitter/tree-sitter-typescript.wasm +0 -0
  40. package/dist/tree-sitter/tree-sitter.js +4075 -0
  41. package/dist/tree-sitter/tree-sitter.wasm +0 -0
  42. package/package.json +4 -3
@@ -0,0 +1,389 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ImportResolver = void 0;
4
+ exports.isInsideRepo = isInsideRepo;
5
+ exports.matchPathPattern = matchPathPattern;
6
+ const node_child_process_1 = require("node:child_process");
7
+ const node_fs_1 = require("node:fs");
8
+ const node_path_1 = require("node:path");
9
+ const jsonrepair_1 = require("jsonrepair");
10
+ const tree_sitter_1 = require("./tree-sitter");
11
+ const TS_EXTENSIONS = [".ts", ".tsx", ".d.ts", ".js", ".jsx", ".mjs", ".cjs"];
12
+ const MAX_GO_PACKAGE_FILES = 40;
13
+ const GIT_LS_FILES_TIMEOUT_MS = 3000;
14
+ function safeRealpath(path) {
15
+ try {
16
+ return (0, node_fs_1.realpathSync)(path);
17
+ }
18
+ catch {
19
+ return null;
20
+ }
21
+ }
22
+ function isWithin(root, path) {
23
+ const rel = (0, node_path_1.relative)(root, path);
24
+ return rel !== "" && !rel.startsWith("..") && !(0, node_path_1.isAbsolute)(rel);
25
+ }
26
+ /**
27
+ * 路径的**真实位置**是否在仓库内。字符串前缀检查挡不住软链接:仓库内一个指向
28
+ * /etc 或同事家目录的链接,字面路径合法、真实内容却在仓库外。
29
+ */
30
+ function isInsideRepo(cwd, path) {
31
+ const realRoot = safeRealpath(cwd);
32
+ const real = safeRealpath(path);
33
+ return realRoot !== null && real !== null && isWithin(realRoot, real);
34
+ }
35
+ class ImportResolver {
36
+ constructor(cwd) {
37
+ this.tsconfigCache = new Map();
38
+ this.goModCache = new Map();
39
+ this.workspacePackages = null;
40
+ this.javaSourceRoots = [];
41
+ this.cwd = (0, node_path_1.resolve)(cwd);
42
+ }
43
+ resolve(input) {
44
+ try {
45
+ if (input.language === "go")
46
+ return this.resolveGo(input.binding.source, input.fromFile);
47
+ if (input.language === "java")
48
+ return this.resolveJava(input);
49
+ return this.resolveTs(input.binding.source, input.fromFile);
50
+ }
51
+ catch {
52
+ return [];
53
+ }
54
+ }
55
+ /**
56
+ * 仓库内 + 可读边界内 + 是普通文件。字面路径与真实路径(解开软链接后)都要过
57
+ * 两道检查:链接本身在 src/ 下、目标却在 node_modules/ 或仓库外,一样拒绝。
58
+ */
59
+ admit(paths) {
60
+ const realRoot = safeRealpath(this.cwd);
61
+ if (!realRoot)
62
+ return [];
63
+ const seen = new Set();
64
+ const out = [];
65
+ for (const raw of paths) {
66
+ const abs = (0, node_path_1.resolve)(raw);
67
+ const real = safeRealpath(abs);
68
+ if (!real || seen.has(real))
69
+ continue;
70
+ seen.add(real);
71
+ if (!isWithin(this.cwd, abs) || !isWithin(realRoot, real))
72
+ continue;
73
+ const apparent = (0, node_path_1.relative)(this.cwd, abs).split(node_path_1.sep).join("/");
74
+ const actual = (0, node_path_1.relative)(realRoot, real).split(node_path_1.sep).join("/");
75
+ if (!(0, tree_sitter_1.isReadableSourcePath)(apparent) || !(0, tree_sitter_1.isReadableSourcePath)(actual))
76
+ continue;
77
+ try {
78
+ if (!(0, node_fs_1.statSync)(real).isFile())
79
+ continue;
80
+ }
81
+ catch {
82
+ continue;
83
+ }
84
+ out.push(abs);
85
+ }
86
+ return out;
87
+ }
88
+ // —— TypeScript / JavaScript ——
89
+ resolveTs(source, fromFile) {
90
+ if (!source || source.startsWith("/"))
91
+ return [];
92
+ if (source.startsWith(".")) {
93
+ return this.admit(tsCandidates((0, node_path_1.resolve)((0, node_path_1.dirname)(fromFile), source)));
94
+ }
95
+ const candidates = [];
96
+ const config = this.tsconfigFor((0, node_path_1.dirname)(fromFile));
97
+ if (config) {
98
+ for (const [pattern, targets] of Object.entries(config.paths)) {
99
+ const star = matchPathPattern(pattern, source);
100
+ if (star === null)
101
+ continue;
102
+ for (const target of targets) {
103
+ candidates.push(...tsCandidates((0, node_path_1.resolve)(config.baseDir, target.replace("*", star))));
104
+ }
105
+ }
106
+ }
107
+ const workspace = this.workspacePackageFor(source);
108
+ if (workspace) {
109
+ const { dir, subpath } = workspace;
110
+ if (subpath) {
111
+ candidates.push(...tsCandidates((0, node_path_1.join)(dir, subpath)), ...tsCandidates((0, node_path_1.join)(dir, "src", subpath)));
112
+ }
113
+ else {
114
+ candidates.push(...tsCandidates((0, node_path_1.join)(dir, "src", "index")), ...tsCandidates((0, node_path_1.join)(dir, "index")));
115
+ const entry = packageEntry(dir);
116
+ if (entry)
117
+ candidates.push(...tsCandidates((0, node_path_1.resolve)(dir, entry)));
118
+ }
119
+ }
120
+ return this.admit(candidates);
121
+ }
122
+ /** 从引用文件所在目录向上找最近的 tsconfig.json / jsconfig.json,合并 extends 链的 paths */
123
+ tsconfigFor(dir) {
124
+ const cached = this.tsconfigCache.get(dir);
125
+ if (cached !== undefined)
126
+ return cached;
127
+ let result = null;
128
+ let current = dir;
129
+ for (let depth = 0; depth < 12; depth++) {
130
+ for (const name of ["tsconfig.json", "jsconfig.json"]) {
131
+ const file = (0, node_path_1.join)(current, name);
132
+ if ((0, node_fs_1.existsSync)(file)) {
133
+ result = readTsPaths(file, 0);
134
+ break;
135
+ }
136
+ }
137
+ if (result || current === this.cwd || !current.startsWith(this.cwd))
138
+ break;
139
+ const parent = (0, node_path_1.dirname)(current);
140
+ if (parent === current)
141
+ break;
142
+ current = parent;
143
+ }
144
+ this.tsconfigCache.set(dir, result);
145
+ return result;
146
+ }
147
+ workspacePackageFor(source) {
148
+ if (!this.workspacePackages)
149
+ this.workspacePackages = readWorkspacePackages(this.cwd);
150
+ let best = null;
151
+ for (const [name, dir] of this.workspacePackages) {
152
+ if (source === name)
153
+ return { dir, subpath: "" };
154
+ if (source.startsWith(`${name}/`) && (!best || name.length > best.dir.length)) {
155
+ best = { dir, subpath: source.slice(name.length + 1) };
156
+ }
157
+ }
158
+ return best;
159
+ }
160
+ // —— Go ——
161
+ resolveGo(importPath, fromFile) {
162
+ const modules = [];
163
+ const nearest = this.goModuleFor((0, node_path_1.dirname)(fromFile));
164
+ if (nearest)
165
+ modules.push(nearest);
166
+ const root = this.goModuleFor(this.cwd);
167
+ if (root && (!nearest || root.dir !== nearest.dir))
168
+ modules.push(root);
169
+ for (const mod of modules) {
170
+ let dir = null;
171
+ if (importPath === mod.path)
172
+ dir = mod.dir;
173
+ else if (importPath.startsWith(`${mod.path}/`)) {
174
+ dir = (0, node_path_1.join)(mod.dir, importPath.slice(mod.path.length + 1));
175
+ }
176
+ if (!dir || !(0, node_fs_1.existsSync)(dir))
177
+ continue;
178
+ let entries;
179
+ try {
180
+ entries = (0, node_fs_1.readdirSync)(dir);
181
+ }
182
+ catch {
183
+ continue;
184
+ }
185
+ const files = entries
186
+ .filter((f) => f.endsWith(".go") && !f.endsWith("_test.go"))
187
+ .sort()
188
+ .slice(0, MAX_GO_PACKAGE_FILES)
189
+ .map((f) => (0, node_path_1.join)(dir, f));
190
+ const admitted = this.admit(files);
191
+ if (admitted.length > 0)
192
+ return admitted;
193
+ }
194
+ return [];
195
+ }
196
+ goModuleFor(dir) {
197
+ const cached = this.goModCache.get(dir);
198
+ if (cached !== undefined)
199
+ return cached;
200
+ let result = null;
201
+ let current = dir;
202
+ for (let depth = 0; depth < 12; depth++) {
203
+ const file = (0, node_path_1.join)(current, "go.mod");
204
+ if ((0, node_fs_1.existsSync)(file)) {
205
+ const match = /^\s*module\s+(\S+)/m.exec((0, node_fs_1.readFileSync)(file, "utf8"));
206
+ if (match)
207
+ result = { path: match[1].replace(/^"|"$/g, ""), dir: current };
208
+ break;
209
+ }
210
+ if (current === this.cwd || !current.startsWith(this.cwd))
211
+ break;
212
+ const parent = (0, node_path_1.dirname)(current);
213
+ if (parent === current)
214
+ break;
215
+ current = parent;
216
+ }
217
+ this.goModCache.set(dir, result);
218
+ return result;
219
+ }
220
+ // —— Java ——
221
+ resolveJava(input) {
222
+ const { binding, fromFile, fromPackage, className } = input;
223
+ let fqcn = null;
224
+ if (binding.kind === "class")
225
+ fqcn = binding.source;
226
+ else if (binding.kind === "wildcard" && className) {
227
+ fqcn = binding.source ? `${binding.source}.${className}` : className;
228
+ }
229
+ if (!fqcn)
230
+ return [];
231
+ const relPath = `${fqcn.split(".").join("/")}.java`;
232
+ const roots = this.javaSourceRootsFor(fromFile, fromPackage);
233
+ const direct = this.admit(roots.map((root) => (0, node_path_1.join)(root, relPath)));
234
+ if (direct.length > 0)
235
+ return direct;
236
+ // 源码根推不出来(多模块、非常规布局)时用 git 索引兜底:一次子进程、3 秒超时
237
+ try {
238
+ const out = (0, node_child_process_1.execFileSync)("git", ["ls-files", "-z", "--", `:(glob)**/${relPath}`, relPath], { cwd: this.cwd, timeout: GIT_LS_FILES_TIMEOUT_MS, encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] });
239
+ const hits = out.split("\0").filter(Boolean).map((p) => (0, node_path_1.join)(this.cwd, p));
240
+ return this.admit(hits);
241
+ }
242
+ catch {
243
+ return [];
244
+ }
245
+ }
246
+ /** `<root>/com/a/b/Bar.java` 且 package com.a.b → root;跨文件累积,当前文件的根优先 */
247
+ javaSourceRootsFor(fromFile, fromPackage) {
248
+ const roots = [];
249
+ const dir = (0, node_path_1.dirname)(fromFile);
250
+ if (fromPackage) {
251
+ const pkgDir = fromPackage.split(".").join(node_path_1.sep);
252
+ if (dir === pkgDir || dir.endsWith(`${node_path_1.sep}${pkgDir}`)) {
253
+ const root = dir.slice(0, dir.length - pkgDir.length).replace(/[\\/]+$/, "") || node_path_1.sep;
254
+ roots.push(root);
255
+ if (!this.javaSourceRoots.includes(root))
256
+ this.javaSourceRoots.push(root);
257
+ }
258
+ }
259
+ else {
260
+ roots.push(dir);
261
+ }
262
+ for (const known of this.javaSourceRoots)
263
+ if (!roots.includes(known))
264
+ roots.push(known);
265
+ return roots;
266
+ }
267
+ }
268
+ exports.ImportResolver = ImportResolver;
269
+ /** `@/*` 对 `@/lib/fmt` → "lib/fmt";无 `*` 时要求全等 → "";不匹配 → null */
270
+ function matchPathPattern(pattern, source) {
271
+ const star = pattern.indexOf("*");
272
+ if (star < 0)
273
+ return pattern === source ? "" : null;
274
+ const prefix = pattern.slice(0, star);
275
+ const suffix = pattern.slice(star + 1);
276
+ if (!source.startsWith(prefix) || !source.endsWith(suffix))
277
+ return null;
278
+ if (source.length < prefix.length + suffix.length)
279
+ return null;
280
+ return source.slice(prefix.length, source.length - suffix.length);
281
+ }
282
+ /** 无扩展名基路径展开为各扩展名与 index 文件;带 `.js` 的 ESM 写法同时试 `.ts` */
283
+ function tsCandidates(base) {
284
+ const out = [];
285
+ const ext = (0, node_path_1.extname)(base);
286
+ if (ext) {
287
+ out.push(base);
288
+ const swapped = base
289
+ .replace(/\.mjs$/, ".mts")
290
+ .replace(/\.cjs$/, ".cts")
291
+ .replace(/\.jsx$/, ".tsx")
292
+ .replace(/\.js$/, ".ts");
293
+ if (swapped !== base)
294
+ out.push(swapped);
295
+ }
296
+ for (const e of TS_EXTENSIONS)
297
+ out.push(`${base}${e}`);
298
+ for (const e of TS_EXTENSIONS)
299
+ out.push((0, node_path_1.join)(base, `index${e}`));
300
+ return out;
301
+ }
302
+ function readJsonLoose(file) {
303
+ try {
304
+ const parsed = JSON.parse((0, jsonrepair_1.jsonrepair)((0, node_fs_1.readFileSync)(file, "utf8")));
305
+ return parsed && typeof parsed === "object" ? parsed : null;
306
+ }
307
+ catch {
308
+ return null;
309
+ }
310
+ }
311
+ function readTsPaths(file, depth) {
312
+ const json = readJsonLoose(file);
313
+ if (!json)
314
+ return null;
315
+ const dir = (0, node_path_1.dirname)(file);
316
+ const options = (json.compilerOptions ?? {});
317
+ let parent = null;
318
+ const extendsValue = json.extends;
319
+ if (depth < 3 && typeof extendsValue === "string" && extendsValue.startsWith(".")) {
320
+ const parentFile = (0, node_path_1.resolve)(dir, extendsValue.endsWith(".json") ? extendsValue : `${extendsValue}.json`);
321
+ if ((0, node_fs_1.existsSync)(parentFile))
322
+ parent = readTsPaths(parentFile, depth + 1);
323
+ }
324
+ const baseUrl = typeof options.baseUrl === "string" ? options.baseUrl : null;
325
+ const paths = options.paths && typeof options.paths === "object"
326
+ ? options.paths
327
+ : null;
328
+ const normalized = {};
329
+ if (paths) {
330
+ for (const [pattern, targets] of Object.entries(paths)) {
331
+ if (Array.isArray(targets)) {
332
+ normalized[pattern] = targets.filter((t) => typeof t === "string");
333
+ }
334
+ }
335
+ }
336
+ if (!paths && !baseUrl)
337
+ return parent;
338
+ return {
339
+ baseDir: baseUrl ? (0, node_path_1.resolve)(dir, baseUrl) : parent?.baseDir ?? dir,
340
+ paths: { ...(parent?.paths ?? {}), ...normalized },
341
+ };
342
+ }
343
+ function readWorkspacePackages(cwd) {
344
+ const result = new Map();
345
+ const root = readJsonLoose((0, node_path_1.join)(cwd, "package.json"));
346
+ if (!root)
347
+ return result;
348
+ const raw = root.workspaces;
349
+ const globs = Array.isArray(raw)
350
+ ? raw.filter((g) => typeof g === "string")
351
+ : raw && typeof raw === "object" && Array.isArray(raw.packages)
352
+ ? (raw.packages.filter((g) => typeof g === "string"))
353
+ : [];
354
+ const dirs = [];
355
+ for (const glob of globs) {
356
+ if (glob.endsWith("/*")) {
357
+ const parent = (0, node_path_1.join)(cwd, glob.slice(0, -2));
358
+ try {
359
+ for (const entry of (0, node_fs_1.readdirSync)(parent))
360
+ dirs.push((0, node_path_1.join)(parent, entry));
361
+ }
362
+ catch {
363
+ // 目录不存在则跳过
364
+ }
365
+ }
366
+ else if (!glob.includes("*")) {
367
+ dirs.push((0, node_path_1.join)(cwd, glob));
368
+ }
369
+ }
370
+ for (const dir of dirs) {
371
+ const pkg = readJsonLoose((0, node_path_1.join)(dir, "package.json"));
372
+ if (pkg && typeof pkg.name === "string")
373
+ result.set(pkg.name, dir);
374
+ }
375
+ return result;
376
+ }
377
+ /** workspace 包的入口:只认指向 .ts/.tsx 源码的 types / main */
378
+ function packageEntry(dir) {
379
+ const pkg = readJsonLoose((0, node_path_1.join)(dir, "package.json"));
380
+ if (!pkg)
381
+ return null;
382
+ for (const key of ["types", "typings", "main"]) {
383
+ const value = pkg[key];
384
+ if (typeof value === "string" && /\.(ts|tsx)$/.test(value))
385
+ return value;
386
+ }
387
+ return null;
388
+ }
389
+ //# sourceMappingURL=import-resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-resolve.js","sourceRoot":"","sources":["../../src/core/import-resolve.ts"],"names":[],"mappings":"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"}
@@ -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;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"}
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;IA8BrB,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"}
@@ -70,6 +70,8 @@ class PromptBuilder {
70
70
  "每条评论的 code 必填;code 取该 [ADD] 行竖线 | 之后的源码原样复制,line 与 code 必须指向同一行。",
71
71
  "code 只填源码本身,不要带 [ADD] / [CTX] / [DEL] 标记、行号、竖线分隔符。",
72
72
  "[CTX] 行与 [DEL] 行(已删除代码)仅用于理解,禁止作为评论目标。",
73
+ "「引用定义」段与「未送审的改动文件」清单来自 diff 之外的仓库文件,由工具自动抽取、可能不完整:只用于理解,禁止评论其中的行;" +
74
+ "不要因为某个符号、常量或生成代码未出现在 diff 中就断定它不存在或未重新生成。",
73
75
  "",
74
76
  "项目规范:",
75
77
  [...this.rules, ...this.repoRules].join("\n"),
@@ -84,7 +86,7 @@ class PromptBuilder {
84
86
  "变更内容(带新文件侧行号的注解 diff,[ADD] 行可评论):",
85
87
  (0, diff_1.buildAnnotatedDiff)(this.diff),
86
88
  "",
87
- "变更附近源码:",
89
+ "变更源码上下文(变更附近源码 / 引用定义):",
88
90
  this.shardContext || "(无源码上下文)",
89
91
  ];
90
92
  if (this.sensitiveMatches.length > 0) {
@@ -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 +1 @@
1
- {"version":3,"file":"reviewer.d.ts","sourceRoot":"","sources":["../../src/core/reviewer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,UAAU,EACV,gBAAgB,EAEjB,MAAM,UAAU,CAAC;AA0BlB,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAEnC;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,eAAe;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,wCAAwC;IACxC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,gBAAgB;IAChB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,kCAAkC;IAClC,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,wBAAgB,cAAc,CAAC,QAAQ,CAAC,EAAE,cAAc,GAAG,OAAO,CAOjE;AAED,8CAA8C;AAC9C,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,OAAO,GAAG,OAAO,CAE1E;AAiPD,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,qDAAqD;IACrD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,gBAAgB,EACxB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAoU5B;AAWD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,UAAU,EAAE,EACvB,WAAW,EAAE,MAAM,GAClB,UAAU,CAmCZ"}
1
+ {"version":3,"file":"reviewer.d.ts","sourceRoot":"","sources":["../../src/core/reviewer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,UAAU,EACV,gBAAgB,EAEjB,MAAM,UAAU,CAAC;AA2BlB,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAEnC;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,eAAe;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,wCAAwC;IACxC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,gBAAgB;IAChB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,kCAAkC;IAClC,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,wBAAgB,cAAc,CAAC,QAAQ,CAAC,EAAE,cAAc,GAAG,OAAO,CAOjE;AAED,8CAA8C;AAC9C,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,OAAO,GAAG,OAAO,CAE1E;AAiPD,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,qDAAqD;IACrD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,gBAAgB,EACxB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CA+U5B;AA2DD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,UAAU,EAAE,EACvB,WAAW,EAAE,MAAM,GAClB,UAAU,CAmCZ"}
@@ -272,8 +272,12 @@ async function reviewCode(diff, config, options = {}) {
272
272
  if (config.useRepoRules) {
273
273
  console.error(`[reviewer] repo cursor rules merged=${repoRuleStrings.length}`);
274
274
  }
275
- // run 内稳定背景先算,因为它决定 system 体量,而 system 要计入分片投影
276
- const stableContext = await (0, context_1.collectStableReviewContext)(options);
275
+ // run 内稳定背景先算,因为它决定 system 体量,而 system 要计入分片投影。
276
+ // 被 ignore 规则排除的改动文件清单也在这里进 system:它们确实改过,只是不送审。
277
+ const stableContext = await (0, context_1.collectStableReviewContext)({
278
+ ...options,
279
+ excludedFiles: preliminary.ignoredFiles,
280
+ });
277
281
  const systemPromptBytes = Buffer.byteLength(new prompt_1.PromptBuilder()
278
282
  .setRules(config.rules)
279
283
  .setRepoRules(repoRuleStrings)
@@ -300,8 +304,11 @@ async function reviewCode(diff, config, options = {}) {
300
304
  console.error(`[reviewer] skipped by shard budget files=${plan.budgetSkippedFiles.length}`);
301
305
  }
302
306
  console.error(`[reviewer] diff shards=${shards.length} shardMaxBytes=${config.shardMaxBytes} concurrency=${exports.SHARD_CONCURRENCY}`);
307
+ const contextStats = [];
303
308
  const tasks = shards.map((shard, index) => async () => {
304
- const shardContext = await (0, context_1.collectShardSourceContext)(shard, options);
309
+ const { text: shardContext, stats: ctx } = await (0, context_1.collectShardSourceContextDetailed)(shard, options);
310
+ contextStats.push(ctx);
311
+ console.error(`[context] shard ${index + 1}/${shards.length} ${formatContextStats(ctx)}`);
305
312
  const prompt = new prompt_1.PromptBuilder()
306
313
  .setDiff(shard)
307
314
  .setRules(config.rules)
@@ -401,6 +408,7 @@ async function reviewCode(diff, config, options = {}) {
401
408
  failedShardFiles,
402
409
  };
403
410
  // 固定输出一行全量汇总,便于监控无需按 shard 人工加总
411
+ console.error(`[context] total ${formatContextStats(sumContextStats(contextStats))}`);
404
412
  console.error(`[reviewer] alignment total ${formatAlignmentStats(sumShardAlignmentStats(results.map((r) => r.alignmentStats)))}`);
405
413
  if (successCount === 0)
406
414
  return null;
@@ -444,6 +452,49 @@ async function reviewCode(diff, config, options = {}) {
444
452
  ...(sensitiveOverflow ? { sensitiveOverflow } : {}),
445
453
  };
446
454
  }
455
+ /** 只输出计数,不含任何源码 */
456
+ function formatContextStats(s) {
457
+ return [
458
+ `files=${s.files}`,
459
+ `bodies=${s.bodies}`,
460
+ `headers=${s.headers}`,
461
+ `windows=${s.windows}`,
462
+ `refs=${s.refs}`,
463
+ `unresolved=${s.unresolved}`,
464
+ `parseFailed=${s.parseFailures}`,
465
+ `errors=${s.errors}`,
466
+ `bytes=${s.bytes}`,
467
+ `truncated=${s.truncated}`,
468
+ `timedOut=${s.timedOut}`,
469
+ ].join(" ");
470
+ }
471
+ function sumContextStats(items) {
472
+ return items.reduce((total, s) => ({
473
+ files: total.files + s.files,
474
+ bodies: total.bodies + s.bodies,
475
+ headers: total.headers + s.headers,
476
+ windows: total.windows + s.windows,
477
+ refs: total.refs + s.refs,
478
+ unresolved: total.unresolved + s.unresolved,
479
+ parseFailures: total.parseFailures + s.parseFailures,
480
+ errors: total.errors + s.errors,
481
+ bytes: total.bytes + s.bytes,
482
+ truncated: total.truncated || s.truncated,
483
+ timedOut: total.timedOut || s.timedOut,
484
+ }), {
485
+ files: 0,
486
+ bodies: 0,
487
+ headers: 0,
488
+ windows: 0,
489
+ refs: 0,
490
+ unresolved: 0,
491
+ parseFailures: 0,
492
+ errors: 0,
493
+ bytes: 0,
494
+ truncated: false,
495
+ timedOut: false,
496
+ });
497
+ }
447
498
  function emptyCoverage() {
448
499
  return {
449
500
  reviewedFiles: 0,