@wuyanbin/ai-code-review-cli-remote 1.0.15 → 1.0.17-canary.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.
- package/dist/constants.d.ts +0 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +1 -2
- package/dist/constants.js.map +1 -1
- package/dist/core/default-ignore.d.ts +18 -0
- package/dist/core/default-ignore.d.ts.map +1 -0
- package/dist/core/default-ignore.js +54 -0
- package/dist/core/default-ignore.js.map +1 -0
- package/dist/core/diff.d.ts +6 -0
- package/dist/core/diff.d.ts.map +1 -1
- package/dist/core/diff.js +14 -6
- package/dist/core/diff.js.map +1 -1
- package/dist/core/output.js +2 -2
- package/dist/core/output.js.map +1 -1
- package/dist/core/priority.d.ts +8 -0
- package/dist/core/priority.d.ts.map +1 -0
- package/dist/core/priority.js +48 -0
- package/dist/core/priority.js.map +1 -0
- package/dist/core/prompt.d.ts +3 -0
- package/dist/core/prompt.d.ts.map +1 -1
- package/dist/core/prompt.js +27 -4
- package/dist/core/prompt.js.map +1 -1
- package/dist/core/reviewer.d.ts.map +1 -1
- package/dist/core/reviewer.js +50 -14
- package/dist/core/reviewer.js.map +1 -1
- package/dist/core/sensitive.d.ts +16 -0
- package/dist/core/sensitive.d.ts.map +1 -0
- package/dist/core/sensitive.js +80 -0
- package/dist/core/sensitive.js.map +1 -0
- package/dist/core/summarizer.js +1 -1
- package/dist/core/summarizer.js.map +1 -1
- package/dist/core/verdict.d.ts +4 -0
- package/dist/core/verdict.d.ts.map +1 -0
- package/dist/core/verdict.js +36 -0
- package/dist/core/verdict.js.map +1 -0
- package/dist/gitlab/api.d.ts.map +1 -1
- package/dist/gitlab/api.js +9 -2
- package/dist/gitlab/api.js.map +1 -1
- package/dist/platform/config.d.ts.map +1 -1
- package/dist/platform/config.js +23 -11
- package/dist/platform/config.js.map +1 -1
- package/dist/platform/report.d.ts +8 -0
- package/dist/platform/report.d.ts.map +1 -1
- package/dist/platform/report.js.map +1 -1
- package/dist/runner.d.ts +0 -1
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +42 -22
- package/dist/runner.js.map +1 -1
- package/dist/types.d.ts +21 -12
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
package/dist/constants.d.ts
CHANGED
|
@@ -11,7 +11,6 @@ export declare function resolveMaxPaginationPages(env?: NodeJS.ProcessEnv): numb
|
|
|
11
11
|
export declare const DEFAULT_COMMENT_MESSAGE = "AI Code Review \u63D0\u793A";
|
|
12
12
|
export declare const ENV_PLATFORM_URL = "AICR_PLATFORM_URL";
|
|
13
13
|
export declare const ENV_PROJECT_TOKEN = "AICR_PROJECT_TOKEN";
|
|
14
|
-
export declare const API_REVIEW_PATH = "/api/modules/code-review/analyze";
|
|
15
14
|
export declare const API_CONFIG_PATH = "/api/modules/code-review/ci/config";
|
|
16
15
|
export declare const API_RUNS_PATH = "/api/modules/code-review/ci/runs";
|
|
17
16
|
//# sourceMappingURL=constants.d.ts.map
|
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,4BAA4B,KAAK,CAAC;AAC/C,eAAO,MAAM,wBAAwB,8BAA8B,CAAC;AAEpE;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,CAMR;AAED,eAAO,MAAM,uBAAuB,gCAAsB,CAAC;AAE3D,eAAO,MAAM,gBAAgB,sBAAsB,CAAC;AACpD,eAAO,MAAM,iBAAiB,uBAAuB,CAAC;AAEtD,eAAO,MAAM,eAAe,
|
|
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,4BAA4B,KAAK,CAAC;AAC/C,eAAO,MAAM,wBAAwB,8BAA8B,CAAC;AAEpE;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,CAMR;AAED,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"}
|
package/dist/constants.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.API_RUNS_PATH = exports.API_CONFIG_PATH = exports.
|
|
3
|
+
exports.API_RUNS_PATH = exports.API_CONFIG_PATH = exports.ENV_PROJECT_TOKEN = exports.ENV_PLATFORM_URL = exports.DEFAULT_COMMENT_MESSAGE = exports.ENV_MAX_PAGINATION_PAGES = exports.DEFAULT_MAX_PAGINATION_PAGES = exports.API_TIMEOUT_MS = exports.REQUEST_TIMEOUT_MS = void 0;
|
|
4
4
|
exports.resolveMaxPaginationPages = resolveMaxPaginationPages;
|
|
5
5
|
exports.REQUEST_TIMEOUT_MS = 180000;
|
|
6
6
|
exports.API_TIMEOUT_MS = 60000;
|
|
@@ -21,7 +21,6 @@ function resolveMaxPaginationPages(env = process.env) {
|
|
|
21
21
|
exports.DEFAULT_COMMENT_MESSAGE = "AI Code Review 提示";
|
|
22
22
|
exports.ENV_PLATFORM_URL = "AICR_PLATFORM_URL";
|
|
23
23
|
exports.ENV_PROJECT_TOKEN = "AICR_PROJECT_TOKEN";
|
|
24
|
-
exports.API_REVIEW_PATH = "/api/modules/code-review/analyze";
|
|
25
24
|
exports.API_CONFIG_PATH = "/api/modules/code-review/ci/config";
|
|
26
25
|
exports.API_RUNS_PATH = "/api/modules/code-review/ci/runs";
|
|
27
26
|
//# sourceMappingURL=constants.js.map
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAWA,8DAQC;AAnBY,QAAA,kBAAkB,GAAG,MAAO,CAAC;AAC7B,QAAA,cAAc,GAAG,KAAM,CAAC;AAExB,QAAA,4BAA4B,GAAG,EAAE,CAAC;AAClC,QAAA,wBAAwB,GAAG,2BAA2B,CAAC;AAEpE;;;;GAIG;AACH,SAAgB,yBAAyB,CACvC,MAAyB,OAAO,CAAC,GAAG;IAEpC,MAAM,GAAG,GAAG,GAAG,CAAC,gCAAwB,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC3B,OAAO,GAAG,KAAK,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC;QAChE,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,oCAA4B,CAAC;AACnC,CAAC;AAEY,QAAA,uBAAuB,GAAG,mBAAmB,CAAC;AAE9C,QAAA,gBAAgB,GAAG,mBAAmB,CAAC;AACvC,QAAA,iBAAiB,GAAG,oBAAoB,CAAC;AAEzC,QAAA,eAAe,GAAG,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAWA,8DAQC;AAnBY,QAAA,kBAAkB,GAAG,MAAO,CAAC;AAC7B,QAAA,cAAc,GAAG,KAAM,CAAC;AAExB,QAAA,4BAA4B,GAAG,EAAE,CAAC;AAClC,QAAA,wBAAwB,GAAG,2BAA2B,CAAC;AAEpE;;;;GAIG;AACH,SAAgB,yBAAyB,CACvC,MAAyB,OAAO,CAAC,GAAG;IAEpC,MAAM,GAAG,GAAG,GAAG,CAAC,gCAAwB,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC3B,OAAO,GAAG,KAAK,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC;QAChE,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,oCAA4B,CAAC;AACnC,CAAC;AAEY,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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* System-level default ignore rules applied on every CR run, on top of (and
|
|
3
|
+
* independent from) the project's `review.ignore` globs. These remove files
|
|
4
|
+
* with no code-review value (tests, docs, lockfiles, build output, binary
|
|
5
|
+
* assets, project metadata dotfiles) to cut model token cost and noise.
|
|
6
|
+
*
|
|
7
|
+
* Each rule matches a normalized path (forward slashes, no leading `a/`/`b/`),
|
|
8
|
+
* case-insensitively. Directory rules use `(^|/)<seg>/` strict segment
|
|
9
|
+
* boundaries so same-prefix paths (e.g. `latest/`, `testing/`, `checkout/`)
|
|
10
|
+
* are not falsely matched.
|
|
11
|
+
*/
|
|
12
|
+
export declare const DEFAULT_IGNORE_RULES: readonly RegExp[];
|
|
13
|
+
/**
|
|
14
|
+
* Returns true when the given path matches any built-in default-ignore rule.
|
|
15
|
+
* Always evaluated regardless of project configuration.
|
|
16
|
+
*/
|
|
17
|
+
export declare function isDefaultIgnored(path: string): boolean;
|
|
18
|
+
//# sourceMappingURL=default-ignore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-ignore.d.ts","sourceRoot":"","sources":["../../src/core/default-ignore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAsBjD,CAAC;AAUF;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGtD"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_IGNORE_RULES = void 0;
|
|
4
|
+
exports.isDefaultIgnored = isDefaultIgnored;
|
|
5
|
+
/**
|
|
6
|
+
* System-level default ignore rules applied on every CR run, on top of (and
|
|
7
|
+
* independent from) the project's `review.ignore` globs. These remove files
|
|
8
|
+
* with no code-review value (tests, docs, lockfiles, build output, binary
|
|
9
|
+
* assets, project metadata dotfiles) to cut model token cost and noise.
|
|
10
|
+
*
|
|
11
|
+
* Each rule matches a normalized path (forward slashes, no leading `a/`/`b/`),
|
|
12
|
+
* case-insensitively. Directory rules use `(^|/)<seg>/` strict segment
|
|
13
|
+
* boundaries so same-prefix paths (e.g. `latest/`, `testing/`, `checkout/`)
|
|
14
|
+
* are not falsely matched.
|
|
15
|
+
*/
|
|
16
|
+
exports.DEFAULT_IGNORE_RULES = [
|
|
17
|
+
// 测试
|
|
18
|
+
/(^|\/)(__tests__|__mocks__|__snapshots__|tests?|e2e|cypress)\//i,
|
|
19
|
+
/(^|\/)[^/]+\.(test|spec)\.[^/]+$/i,
|
|
20
|
+
// 文档与文本
|
|
21
|
+
/\.(md|mdx|markdown|txt|rst)$/i,
|
|
22
|
+
/(^|\/)docs?\//i,
|
|
23
|
+
/(^|\/)(license|changelog|contributing|authors|notice|copying)$/i,
|
|
24
|
+
// 锁文件与依赖清单
|
|
25
|
+
/(^|\/)(package-lock\.json|yarn\.lock|pnpm-lock\.yaml|npm-shrinkwrap\.json|composer\.lock|gemfile\.lock|poetry\.lock|cargo\.lock|go\.sum)$/i,
|
|
26
|
+
/\.lock$/i,
|
|
27
|
+
// 构建产物与生成物
|
|
28
|
+
/(^|\/)(dist|build|out|coverage)\//i,
|
|
29
|
+
/\.min\.(js|css)$/i,
|
|
30
|
+
/\.(map|snap)$/i,
|
|
31
|
+
// 二进制与媒体资源
|
|
32
|
+
/\.(png|jpe?g|gif|svg|ico|webp|bmp)$/i,
|
|
33
|
+
/\.(woff2?|ttf|otf|eot)$/i,
|
|
34
|
+
/\.(mp4|mov|avi|mp3|wav|webm)$/i,
|
|
35
|
+
/\.(pdf|zip|tar|gz|rar|7z)$/i,
|
|
36
|
+
// 工程元数据 dotfile
|
|
37
|
+
/(^|\/)\.(gitignore|gitattributes|editorconfig|prettierrc|eslintrc|npmrc|nvmrc|dockerignore|browserslistrc|gitkeep)([^/]*)$/i,
|
|
38
|
+
];
|
|
39
|
+
/**
|
|
40
|
+
* Mirror of diff.normalizePath kept local to avoid a circular import: strips
|
|
41
|
+
* leading `a/`/`b/` diff prefixes and `./`, and trims surrounding whitespace.
|
|
42
|
+
*/
|
|
43
|
+
function normalize(path) {
|
|
44
|
+
return path.trim().replace(/^[ab]\//, "").replace(/^\.\//, "");
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Returns true when the given path matches any built-in default-ignore rule.
|
|
48
|
+
* Always evaluated regardless of project configuration.
|
|
49
|
+
*/
|
|
50
|
+
function isDefaultIgnored(path) {
|
|
51
|
+
const normalized = normalize(path);
|
|
52
|
+
return exports.DEFAULT_IGNORE_RULES.some((rule) => rule.test(normalized));
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=default-ignore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-ignore.js","sourceRoot":"","sources":["../../src/core/default-ignore.ts"],"names":[],"mappings":";;;AA+CA,4CAGC;AAlDD;;;;;;;;;;GAUG;AACU,QAAA,oBAAoB,GAAsB;IACrD,KAAK;IACL,iEAAiE;IACjE,mCAAmC;IACnC,QAAQ;IACR,+BAA+B;IAC/B,gBAAgB;IAChB,iEAAiE;IACjE,WAAW;IACX,4IAA4I;IAC5I,UAAU;IACV,WAAW;IACX,oCAAoC;IACpC,mBAAmB;IACnB,gBAAgB;IAChB,WAAW;IACX,sCAAsC;IACtC,0BAA0B;IAC1B,gCAAgC;IAChC,6BAA6B;IAC7B,gBAAgB;IAChB,6HAA6H;CAC9H,CAAC;AAEF;;;GAGG;AACH,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACjE,CAAC;AAED;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,IAAY;IAC3C,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IACnC,OAAO,4BAAoB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AACpE,CAAC"}
|
package/dist/core/diff.d.ts
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import type { AIComment } from "../types";
|
|
2
|
+
export declare function globToRegExp(pattern: string): RegExp;
|
|
3
|
+
/**
|
|
4
|
+
* Drop a file's whole diff section when it matches either a project `ignore`
|
|
5
|
+
* glob or a system built-in default-ignore rule. Built-in defaults always
|
|
6
|
+
* participate (cannot be disabled by project config).
|
|
7
|
+
*/
|
|
2
8
|
export declare function filterDiffByIgnore(diff: string, ignorePatterns?: string[]): string;
|
|
3
9
|
export interface AddedLine {
|
|
4
10
|
file: string;
|
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;
|
|
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,CA2CxE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAatD;AAoBD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAmB5E;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAO,GAAG,MAAM,CAU9E;AAED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,SAAS,EAAE,GACpB,SAAS,EAAE,CAqBb"}
|
package/dist/core/diff.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.globToRegExp = globToRegExp;
|
|
3
4
|
exports.filterDiffByIgnore = filterDiffByIgnore;
|
|
4
5
|
exports.normalizePath = normalizePath;
|
|
5
6
|
exports.collectAddedLines = collectAddedLines;
|
|
@@ -7,6 +8,7 @@ exports.getChangedFiles = getChangedFiles;
|
|
|
7
8
|
exports.splitDiffByMaxBytes = splitDiffByMaxBytes;
|
|
8
9
|
exports.buildAddedLinesIndexText = buildAddedLinesIndexText;
|
|
9
10
|
exports.alignCommentsToDiffAddedLines = alignCommentsToDiffAddedLines;
|
|
11
|
+
const default_ignore_1 = require("./default-ignore");
|
|
10
12
|
function globToRegExp(pattern) {
|
|
11
13
|
if (pattern.endsWith("/**")) {
|
|
12
14
|
const prefix = pattern.slice(0, -3).replace(/[.+?^${}()|[\]\\]/g, "\\$&");
|
|
@@ -24,9 +26,15 @@ function globToRegExp(pattern) {
|
|
|
24
26
|
.replace(/\*/g, "[^/]*");
|
|
25
27
|
return new RegExp(`^${escaped}$`);
|
|
26
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* Drop a file's whole diff section when it matches either a project `ignore`
|
|
31
|
+
* glob or a system built-in default-ignore rule. Built-in defaults always
|
|
32
|
+
* participate (cannot be disabled by project config).
|
|
33
|
+
*/
|
|
27
34
|
function filterDiffByIgnore(diff, ignorePatterns) {
|
|
28
|
-
if (!
|
|
35
|
+
if (!diff.trim())
|
|
29
36
|
return diff;
|
|
37
|
+
const userPatterns = ignorePatterns ?? [];
|
|
30
38
|
const lines = diff.split("\n");
|
|
31
39
|
const kept = [];
|
|
32
40
|
let ignoreCurrent = false;
|
|
@@ -35,7 +43,10 @@ function filterDiffByIgnore(diff, ignorePatterns) {
|
|
|
35
43
|
ignoreCurrent = false;
|
|
36
44
|
const match = /^diff --git a\/(.+?) b\/(.+)$/.exec(line);
|
|
37
45
|
if (match) {
|
|
38
|
-
|
|
46
|
+
const path = match[2];
|
|
47
|
+
ignoreCurrent =
|
|
48
|
+
(0, default_ignore_1.isDefaultIgnored)(path) ||
|
|
49
|
+
userPatterns.some((pattern) => globToRegExp(pattern).test(path));
|
|
39
50
|
}
|
|
40
51
|
}
|
|
41
52
|
if (!ignoreCurrent)
|
|
@@ -51,7 +62,6 @@ function collectAddedLines(diff) {
|
|
|
51
62
|
let currentFile = null;
|
|
52
63
|
let inHunk = false;
|
|
53
64
|
let newLine = 0;
|
|
54
|
-
let oldLine = 0;
|
|
55
65
|
for (const raw of diff.split("\n")) {
|
|
56
66
|
if (raw.startsWith("diff --git ")) {
|
|
57
67
|
inHunk = false;
|
|
@@ -71,7 +81,6 @@ function collectAddedLines(diff) {
|
|
|
71
81
|
if (raw.startsWith("@@")) {
|
|
72
82
|
const match = /^@@\s+\-(\d+)(?:,\d+)?\s+\+(\d+)(?:,\d+)?\s+@@/.exec(raw);
|
|
73
83
|
inHunk = !!match;
|
|
74
|
-
oldLine = Number(match?.[1] ?? 0);
|
|
75
84
|
newLine = Number(match?.[2] ?? 0);
|
|
76
85
|
continue;
|
|
77
86
|
}
|
|
@@ -86,10 +95,9 @@ function collectAddedLines(diff) {
|
|
|
86
95
|
newLine += 1;
|
|
87
96
|
}
|
|
88
97
|
else if (raw.startsWith("-") && !raw.startsWith("---")) {
|
|
89
|
-
|
|
98
|
+
continue;
|
|
90
99
|
}
|
|
91
100
|
else if (raw.startsWith(" ")) {
|
|
92
|
-
oldLine += 1;
|
|
93
101
|
newLine += 1;
|
|
94
102
|
}
|
|
95
103
|
}
|
package/dist/core/diff.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/core/diff.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/core/diff.ts"],"names":[],"mappings":"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"}
|
package/dist/core/output.js
CHANGED
|
@@ -4,9 +4,9 @@ exports.buildEmptyRdjson = buildEmptyRdjson;
|
|
|
4
4
|
exports.buildRdjson = buildRdjson;
|
|
5
5
|
const constants_1 = require("../constants");
|
|
6
6
|
function toRdjsonSeverity(severity) {
|
|
7
|
-
if (severity === "
|
|
7
|
+
if (severity === "P0")
|
|
8
8
|
return "ERROR";
|
|
9
|
-
if (severity === "
|
|
9
|
+
if (severity === "P2")
|
|
10
10
|
return "INFO";
|
|
11
11
|
return "WARNING";
|
|
12
12
|
}
|
package/dist/core/output.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/core/output.ts"],"names":[],"mappings":";;AASA,4CAEC;AAED,kCAgBC;AA5BD,4CAAuD;AAEvD,SAAS,gBAAgB,CAAC,QAAkB;IAC1C,IAAI,QAAQ,KAAK,
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/core/output.ts"],"names":[],"mappings":";;AASA,4CAEC;AAED,kCAgBC;AA5BD,4CAAuD;AAEvD,SAAS,gBAAgB,CAAC,QAAkB;IAC1C,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,OAAO,CAAC;IACtC,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IACrC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAgB,gBAAgB;IAC9B,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;AACjE,CAAC;AAED,SAAgB,WAAW,CAAC,QAAqB;IAC/C,OAAO;QACL,MAAM,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE;QAClC,WAAW,EAAE,QAAQ;aAClB,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;aACjD,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACjB,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,IAAI,mCAAuB,GACpD,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EACtD,EAAE;YACF,QAAQ,EAAE;gBACR,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE;aACjE;YACD,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC;SAC7C,CAAC,CAAC;KACN,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AIComment, ReviewPriority, Severity } from "../types";
|
|
2
|
+
export declare const PRIORITY_ORDER: Record<ReviewPriority, number>;
|
|
3
|
+
export declare function isReviewPriority(value: unknown): value is ReviewPriority;
|
|
4
|
+
export declare function priorityFromSeverity(severity: Severity): ReviewPriority;
|
|
5
|
+
export declare function severityFromPriority(priority: ReviewPriority): Severity;
|
|
6
|
+
export declare function normalizeAICommentPriority(comment: AIComment): AIComment;
|
|
7
|
+
export declare function priorityLabel(priority?: ReviewPriority): string;
|
|
8
|
+
//# sourceMappingURL=priority.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"priority.d.ts","sourceRoot":"","sources":["../../src/core/priority.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAcpE,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAIzD,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAExE;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,GAAG,cAAc,CAEvE;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,cAAc,GAAG,QAAQ,CAEvE;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,SAAS,GAAG,SAAS,CAOxE;AAED,wBAAgB,aAAa,CAAC,QAAQ,CAAC,EAAE,cAAc,GAAG,MAAM,CAI/D"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PRIORITY_ORDER = void 0;
|
|
4
|
+
exports.isReviewPriority = isReviewPriority;
|
|
5
|
+
exports.priorityFromSeverity = priorityFromSeverity;
|
|
6
|
+
exports.severityFromPriority = severityFromPriority;
|
|
7
|
+
exports.normalizeAICommentPriority = normalizeAICommentPriority;
|
|
8
|
+
exports.priorityLabel = priorityLabel;
|
|
9
|
+
const PRIORITY_TO_SEVERITY = {
|
|
10
|
+
P0: "error",
|
|
11
|
+
P1: "warning",
|
|
12
|
+
P2: "info",
|
|
13
|
+
};
|
|
14
|
+
const SEVERITY_TO_PRIORITY = {
|
|
15
|
+
error: "P0",
|
|
16
|
+
warning: "P1",
|
|
17
|
+
info: "P2",
|
|
18
|
+
};
|
|
19
|
+
exports.PRIORITY_ORDER = {
|
|
20
|
+
P2: 0,
|
|
21
|
+
P1: 1,
|
|
22
|
+
P0: 2,
|
|
23
|
+
};
|
|
24
|
+
function isReviewPriority(value) {
|
|
25
|
+
return value === "P0" || value === "P1" || value === "P2";
|
|
26
|
+
}
|
|
27
|
+
function priorityFromSeverity(severity) {
|
|
28
|
+
return SEVERITY_TO_PRIORITY[severity];
|
|
29
|
+
}
|
|
30
|
+
function severityFromPriority(priority) {
|
|
31
|
+
return PRIORITY_TO_SEVERITY[priority];
|
|
32
|
+
}
|
|
33
|
+
function normalizeAICommentPriority(comment) {
|
|
34
|
+
const priority = comment.priority ?? priorityFromSeverity(comment.severity);
|
|
35
|
+
return {
|
|
36
|
+
...comment,
|
|
37
|
+
priority,
|
|
38
|
+
severity: severityFromPriority(priority),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function priorityLabel(priority) {
|
|
42
|
+
if (priority === "P0")
|
|
43
|
+
return "P0 Critical";
|
|
44
|
+
if (priority === "P2")
|
|
45
|
+
return "P2 Minor";
|
|
46
|
+
return "P1 Major";
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=priority.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"priority.js","sourceRoot":"","sources":["../../src/core/priority.ts"],"names":[],"mappings":";;;AAoBA,4CAEC;AAED,oDAEC;AAED,oDAEC;AAED,gEAOC;AAED,sCAIC;AA3CD,MAAM,oBAAoB,GAAqC;IAC7D,EAAE,EAAE,OAAO;IACX,EAAE,EAAE,SAAS;IACb,EAAE,EAAE,MAAM;CACX,CAAC;AAEF,MAAM,oBAAoB,GAAqC;IAC7D,KAAK,EAAE,IAAI;IACX,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,IAAI;CACX,CAAC;AAEW,QAAA,cAAc,GAAmC;IAC5D,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,CAAC;CACN,CAAC;AAEF,SAAgB,gBAAgB,CAAC,KAAc;IAC7C,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,CAAC;AAC5D,CAAC;AAED,SAAgB,oBAAoB,CAAC,QAAkB;IACrD,OAAO,oBAAoB,CAAC,QAAQ,CAAC,CAAC;AACxC,CAAC;AAED,SAAgB,oBAAoB,CAAC,QAAwB;IAC3D,OAAO,oBAAoB,CAAC,QAAQ,CAAC,CAAC;AACxC,CAAC;AAED,SAAgB,0BAA0B,CAAC,OAAkB;IAC3D,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,oBAAoB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5E,OAAO;QACL,GAAG,OAAO;QACV,QAAQ;QACR,QAAQ,EAAE,oBAAoB,CAAC,QAAQ,CAAC;KACzC,CAAC;AACJ,CAAC;AAED,SAAgB,aAAa,CAAC,QAAyB;IACrD,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,aAAa,CAAC;IAC5C,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,UAAU,CAAC;IACzC,OAAO,UAAU,CAAC;AACpB,CAAC"}
|
package/dist/core/prompt.d.ts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
|
+
import type { SensitiveMatch } from "./sensitive";
|
|
1
2
|
export declare class PromptBuilder {
|
|
2
3
|
private diff;
|
|
3
4
|
private rules;
|
|
4
5
|
private context;
|
|
6
|
+
private sensitiveMatches;
|
|
5
7
|
setDiff(diff: string): this;
|
|
6
8
|
setRules(custom: string[]): this;
|
|
7
9
|
setContext(context: string): this;
|
|
10
|
+
setSensitiveMatches(matches: SensitiveMatch[]): this;
|
|
8
11
|
buildSystem(): string;
|
|
9
12
|
buildUser(): string;
|
|
10
13
|
}
|
|
@@ -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":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAUlD,qBAAa,aAAa;IACxB,OAAO,CAAC,IAAI,CAAM;IAClB,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,gBAAgB,CAAwB;IAEhD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK3B,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAKhC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKjC,mBAAmB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI;IAKpD,WAAW,IAAI,MAAM;IAIrB,SAAS,IAAI,MAAM;CAsDpB;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,IAAI,CAAM;IAElB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK3B,WAAW,IAAI,MAAM;IAQrB,SAAS,IAAI,MAAM;CAoBpB"}
|
package/dist/core/prompt.js
CHANGED
|
@@ -14,6 +14,7 @@ class PromptBuilder {
|
|
|
14
14
|
this.diff = "";
|
|
15
15
|
this.rules = [];
|
|
16
16
|
this.context = "";
|
|
17
|
+
this.sensitiveMatches = [];
|
|
17
18
|
}
|
|
18
19
|
setDiff(diff) {
|
|
19
20
|
this.diff = diff;
|
|
@@ -27,15 +28,25 @@ class PromptBuilder {
|
|
|
27
28
|
this.context = context;
|
|
28
29
|
return this;
|
|
29
30
|
}
|
|
31
|
+
setSensitiveMatches(matches) {
|
|
32
|
+
this.sensitiveMatches = matches;
|
|
33
|
+
return this;
|
|
34
|
+
}
|
|
30
35
|
buildSystem() {
|
|
31
36
|
return "你是一个资深的代码审查助手,需要根据给定的 Git diff 和项目规范,对改动的代码进行严格的 Code Review。";
|
|
32
37
|
}
|
|
33
38
|
buildUser() {
|
|
34
|
-
|
|
39
|
+
const parts = [
|
|
35
40
|
"请你只针对 diff 中【新增或修改】的代码行给出审查意见。",
|
|
36
41
|
"输出格式要求:必须返回严格的 JSON,形如:",
|
|
37
|
-
'{"comments":[{"file":"src/xxx.ts","line":123,"code":"该行完整代码","severity":"
|
|
38
|
-
"
|
|
42
|
+
'{"comments":[{"file":"src/xxx.ts","line":123,"code":"该行完整代码","severity":"P1","message":"问题描述","suggestion":"修复建议"}]}',
|
|
43
|
+
"",
|
|
44
|
+
"severity 分级标准(严格遵循):",
|
|
45
|
+
"- P0 (Critical): 逻辑错误、安全漏洞、潜在 Crash、导致业务异常的 Bug。必须修复。",
|
|
46
|
+
"- P1 (Major): 性能隐患、违反团队核心规范、严重的冗余代码。建议修复。",
|
|
47
|
+
"- P2 (Minor): 代码风格优化、命名建议、更优雅的语法糖实现。参考即可,不强制。",
|
|
48
|
+
"",
|
|
49
|
+
"注意:severity 只能是 P0 / P1 / P2;file 必须使用 diff 中出现的路径;line 必须是 new file 侧真实行号;只能评论新增行。",
|
|
39
50
|
"",
|
|
40
51
|
"可评论行索引:",
|
|
41
52
|
(0, diff_1.buildAddedLinesIndexText)(this.diff),
|
|
@@ -48,7 +59,19 @@ class PromptBuilder {
|
|
|
48
59
|
"",
|
|
49
60
|
"Git diff:",
|
|
50
61
|
this.diff,
|
|
51
|
-
]
|
|
62
|
+
];
|
|
63
|
+
if (this.sensitiveMatches.length > 0) {
|
|
64
|
+
const matchLines = this.sensitiveMatches.map((m) => {
|
|
65
|
+
if (m.matchType === "file") {
|
|
66
|
+
return `- [file] ${m.file} — 匹配规则: "${m.pattern}"`;
|
|
67
|
+
}
|
|
68
|
+
const lineInfo = m.lines?.length ? `:${m.lines[0]}` : "";
|
|
69
|
+
const snippetInfo = m.snippet ? `,代码: \`${m.snippet}\`` : "";
|
|
70
|
+
return `- [keyword] ${m.file}${lineInfo} — 匹配关键词: "${m.pattern}"${snippetInfo}`;
|
|
71
|
+
});
|
|
72
|
+
parts.push("", "## 敏感代码预警", "", "以下文件/代码段命中了敏感规则,请在审查中额外关注:", ...matchLines, "", '请在审查结果的 JSON 中增加 `sensitiveAlerts` 数组,对每个命中项评估:', "1. 该修改是否真正涉及敏感业务逻辑(而非仅变量命名、注释、import 等无关引用)", "2. 如果确认敏感,简要说明风险点和风险等级(high/medium/low)", "", "sensitiveAlerts 格式: [{\"file\":\"path\",\"confirmed\":true,\"reason\":\"风险说明\",\"riskLevel\":\"high\"}]", "如果命中项不涉及真正的敏感逻辑,对应项的 confirmed 设为 false 或返回空数组。");
|
|
73
|
+
}
|
|
74
|
+
return parts.join("\n");
|
|
52
75
|
}
|
|
53
76
|
}
|
|
54
77
|
exports.PromptBuilder = PromptBuilder;
|
package/dist/core/prompt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/core/prompt.ts"],"names":[],"mappings":";;;AAAA,iCAAkD;
|
|
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,
|
|
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;AAuFlB,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,gBAAgB,EACxB,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;CAAO,GACtD,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAyG5B"}
|
package/dist/core/reviewer.js
CHANGED
|
@@ -5,22 +5,31 @@ const jsonrepair_1 = require("jsonrepair");
|
|
|
5
5
|
const zod_1 = require("zod");
|
|
6
6
|
const context_1 = require("./context");
|
|
7
7
|
const diff_1 = require("./diff");
|
|
8
|
+
const default_ignore_1 = require("./default-ignore");
|
|
8
9
|
const identity_1 = require("../shared/identity");
|
|
9
10
|
const concurrency_1 = require("../shared/concurrency");
|
|
10
11
|
const model_1 = require("./model");
|
|
11
12
|
const prompt_1 = require("./prompt");
|
|
12
|
-
const
|
|
13
|
+
const sensitive_1 = require("./sensitive");
|
|
14
|
+
const SEVERITY_ORDER = { P2: 0, P1: 1, P0: 2 };
|
|
13
15
|
const SHARD_CONCURRENCY = 3;
|
|
14
16
|
const aiCommentSchema = zod_1.z.object({
|
|
15
17
|
file: zod_1.z.string().trim().min(1),
|
|
16
18
|
line: zod_1.z.number().int().positive(),
|
|
17
19
|
code: zod_1.z.string().optional(),
|
|
18
|
-
severity: zod_1.z.enum(["
|
|
20
|
+
severity: zod_1.z.enum(["P0", "P1", "P2"]),
|
|
19
21
|
message: zod_1.z.string().trim().min(1),
|
|
20
22
|
suggestion: zod_1.z.string().optional(),
|
|
21
23
|
});
|
|
24
|
+
const aiSensitiveAlertSchema = zod_1.z.object({
|
|
25
|
+
file: zod_1.z.string().trim().min(1),
|
|
26
|
+
confirmed: zod_1.z.boolean(),
|
|
27
|
+
reason: zod_1.z.string().trim().min(1),
|
|
28
|
+
riskLevel: zod_1.z.enum(["high", "medium", "low"]),
|
|
29
|
+
});
|
|
22
30
|
const aiResponseSchema = zod_1.z.object({
|
|
23
31
|
comments: zod_1.z.array(zod_1.z.unknown()).default([]),
|
|
32
|
+
sensitiveAlerts: zod_1.z.array(zod_1.z.unknown()).default([]),
|
|
24
33
|
});
|
|
25
34
|
function stripFences(text) {
|
|
26
35
|
return (text ?? "")
|
|
@@ -49,7 +58,13 @@ function parseAIResponse(content) {
|
|
|
49
58
|
if (comment.success)
|
|
50
59
|
comments.push(comment.data);
|
|
51
60
|
}
|
|
52
|
-
|
|
61
|
+
const sensitiveAlerts = [];
|
|
62
|
+
for (const rawAlert of response.data.sensitiveAlerts) {
|
|
63
|
+
const alert = aiSensitiveAlertSchema.safeParse(rawAlert);
|
|
64
|
+
if (alert.success)
|
|
65
|
+
sensitiveAlerts.push(alert.data);
|
|
66
|
+
}
|
|
67
|
+
return { comments, sensitiveAlerts };
|
|
53
68
|
}
|
|
54
69
|
catch (error) {
|
|
55
70
|
console.error("[reviewer] AI 返回 JSON 解析失败");
|
|
@@ -58,34 +73,45 @@ function parseAIResponse(content) {
|
|
|
58
73
|
}
|
|
59
74
|
}
|
|
60
75
|
async function reviewCode(diff, config, options = {}) {
|
|
61
|
-
const
|
|
76
|
+
const defaultIgnoredCount = (0, diff_1.getChangedFiles)(diff).filter(default_ignore_1.isDefaultIgnored).length;
|
|
77
|
+
if (defaultIgnoredCount > 0) {
|
|
78
|
+
console.error(`[reviewer] default-ignore filtered files=${defaultIgnoredCount}`);
|
|
79
|
+
}
|
|
80
|
+
const effectiveDiff = (0, diff_1.filterDiffByIgnore)(diff, config.ignore);
|
|
62
81
|
if (!effectiveDiff.trim())
|
|
63
82
|
return { comments: [] };
|
|
64
83
|
if (!config.ai.apiKey || !config.ai.endpoint)
|
|
65
84
|
return null;
|
|
85
|
+
const sensitiveMatches = (0, sensitive_1.scanSensitiveMatches)(effectiveDiff, config.sensitive);
|
|
86
|
+
if (sensitiveMatches.length > 0) {
|
|
87
|
+
console.error(`[reviewer] sensitive matches=${sensitiveMatches.length}`);
|
|
88
|
+
}
|
|
89
|
+
const sensitiveOverflow = sensitiveMatches.length > sensitive_1.MAX_SENSITIVE_MATCHES;
|
|
66
90
|
const adapter = (0, model_1.createModelAdapter)(config.ai.endpoint, config.ai.apiKey, config.ai.apiFormat);
|
|
67
|
-
const shards = (0, diff_1.splitDiffByMaxBytes)(effectiveDiff, config.
|
|
68
|
-
const minSeverity = SEVERITY_ORDER[config.
|
|
69
|
-
console.error(`[reviewer] diff shards=${shards.length} shardMaxBytes=${config.
|
|
91
|
+
const shards = (0, diff_1.splitDiffByMaxBytes)(effectiveDiff, config.shardMaxBytes);
|
|
92
|
+
const minSeverity = SEVERITY_ORDER[config.severity];
|
|
93
|
+
console.error(`[reviewer] diff shards=${shards.length} shardMaxBytes=${config.shardMaxBytes} concurrency=${SHARD_CONCURRENCY}`);
|
|
70
94
|
const tasks = shards.map((shard, index) => async () => {
|
|
71
95
|
const context = await (0, context_1.collectReviewContext)(shard, options);
|
|
72
96
|
const prompt = new prompt_1.PromptBuilder()
|
|
73
97
|
.setDiff(shard)
|
|
74
|
-
.setRules(config.rules
|
|
75
|
-
.setContext(context)
|
|
98
|
+
.setRules(config.rules)
|
|
99
|
+
.setContext(context)
|
|
100
|
+
.setSensitiveMatches(sensitiveMatches);
|
|
76
101
|
const raw = await adapter.call(config.ai.model, prompt.buildSystem(), prompt.buildUser());
|
|
77
102
|
if (!raw) {
|
|
78
103
|
console.error(`[reviewer] shard ${index + 1}/${shards.length} returned empty`);
|
|
79
|
-
return { index, comments: [], success: false };
|
|
104
|
+
return { index, comments: [], sensitiveAlerts: [], success: false };
|
|
80
105
|
}
|
|
81
106
|
const parsed = parseAIResponse(raw);
|
|
82
107
|
if (!parsed) {
|
|
83
108
|
console.error(`[reviewer] shard ${index + 1}/${shards.length} parse failed`);
|
|
84
|
-
return { index, comments: [], success: false };
|
|
109
|
+
return { index, comments: [], sensitiveAlerts: [], success: false };
|
|
85
110
|
}
|
|
86
111
|
return {
|
|
87
112
|
index,
|
|
88
113
|
comments: (0, diff_1.alignCommentsToDiffAddedLines)(shard, parsed.comments).filter((c) => SEVERITY_ORDER[c.severity] >= minSeverity),
|
|
114
|
+
sensitiveAlerts: parsed.sensitiveAlerts ?? [],
|
|
89
115
|
success: true,
|
|
90
116
|
};
|
|
91
117
|
});
|
|
@@ -104,9 +130,19 @@ async function reviewCode(diff, config, options = {}) {
|
|
|
104
130
|
return true;
|
|
105
131
|
})
|
|
106
132
|
.sort((a, b) => a.file.localeCompare(b.file) || a.line - b.line);
|
|
107
|
-
if (deduped.length > config.
|
|
108
|
-
deduped = deduped.slice(0, config.
|
|
133
|
+
if (deduped.length > config.maxComments) {
|
|
134
|
+
deduped = deduped.slice(0, config.maxComments);
|
|
109
135
|
}
|
|
110
|
-
|
|
136
|
+
const RISK_ORDER = { high: 2, medium: 1, low: 0 };
|
|
137
|
+
const allAlerts = results
|
|
138
|
+
.flatMap((r) => r.sensitiveAlerts ?? [])
|
|
139
|
+
.filter((a) => a.confirmed)
|
|
140
|
+
.sort((a, b) => (RISK_ORDER[b.riskLevel] ?? 0) - (RISK_ORDER[a.riskLevel] ?? 0))
|
|
141
|
+
.slice(0, sensitive_1.MAX_SENSITIVE_MATCHES);
|
|
142
|
+
return {
|
|
143
|
+
comments: deduped,
|
|
144
|
+
...(allAlerts.length > 0 ? { sensitiveAlerts: allAlerts } : {}),
|
|
145
|
+
...(sensitiveOverflow ? { sensitiveOverflow } : {}),
|
|
146
|
+
};
|
|
111
147
|
}
|
|
112
148
|
//# sourceMappingURL=reviewer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reviewer.js","sourceRoot":"","sources":["../../src/core/reviewer.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"reviewer.js","sourceRoot":"","sources":["../../src/core/reviewer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { SensitiveConfig } from "../types";
|
|
2
|
+
declare const MAX_SENSITIVE_MATCHES = 10;
|
|
3
|
+
export interface SensitiveMatch {
|
|
4
|
+
file: string;
|
|
5
|
+
matchType: "file" | "keyword";
|
|
6
|
+
pattern: string;
|
|
7
|
+
lines?: number[];
|
|
8
|
+
snippet?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Scan diff for sensitive file patterns and keyword matches.
|
|
12
|
+
* Returns empty array if config is empty/undefined (zero overhead).
|
|
13
|
+
*/
|
|
14
|
+
export declare function scanSensitiveMatches(diff: string, config?: Partial<SensitiveConfig>): SensitiveMatch[];
|
|
15
|
+
export { MAX_SENSITIVE_MATCHES };
|
|
16
|
+
//# sourceMappingURL=sensitive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sensitive.d.ts","sourceRoot":"","sources":["../../src/core/sensitive.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD,QAAA,MAAM,qBAAqB,KAAK,CAAC;AAEjC,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAoBD;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAChC,cAAc,EAAE,CAoDlB;AAED,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
|