@wuyanbin/ai-code-review 1.1.17 → 1.1.18
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/bin/ai-code-review.js +8 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +3 -0
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +45 -8
- package/dist/index.js.map +1 -1
- package/dist/summarizer/index.d.ts +10 -0
- package/dist/summarizer/index.d.ts.map +1 -0
- package/dist/summarizer/index.js +117 -0
- package/dist/summarizer/index.js.map +1 -0
- package/dist/types.d.ts +7 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/bin/ai-code-review.js
CHANGED
|
@@ -2,11 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* AI Code Review CLI 入口
|
|
5
|
+
* 用法:
|
|
6
|
+
* git diff ... | ai-code-review # 逐行 review
|
|
7
|
+
* git diff ... | ai-code-review --summary # 改动汇总
|
|
5
8
|
*/
|
|
6
9
|
|
|
7
|
-
const { main } = require("../dist/index");
|
|
10
|
+
const { main, summaryMain } = require("../dist/index");
|
|
8
11
|
|
|
9
|
-
|
|
12
|
+
const isSummary = process.argv.includes("--summary");
|
|
13
|
+
const run = isSummary ? summaryMain : main;
|
|
14
|
+
|
|
15
|
+
run().catch((error) => {
|
|
10
16
|
console.error("[ai-code-review] CLI 执行错误:", error);
|
|
11
17
|
process.exit(1);
|
|
12
18
|
});
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAW3C;;GAEG;AACH,eAAO,MAAM,UAAU,QAAa,OAAO,CAAC,gBAAgB,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAW3C;;GAEG;AACH,eAAO,MAAM,UAAU,QAAa,OAAO,CAAC,gBAAgB,CAiC3D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,gBAAgB,KAAG,OAczD,CAAC"}
|
package/dist/config.js
CHANGED
|
@@ -42,6 +42,9 @@ const loadConfig = async () => {
|
|
|
42
42
|
ignore: fileConfig.review?.ignore || [],
|
|
43
43
|
maxComments: fileConfig.review?.maxComments || 100,
|
|
44
44
|
},
|
|
45
|
+
summary: {
|
|
46
|
+
enabled: fileConfig.summary?.enabled ?? false,
|
|
47
|
+
},
|
|
45
48
|
};
|
|
46
49
|
console.error("[config] final config:", JSON.stringify(config));
|
|
47
50
|
return config;
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,6CAA8C;AAG9C,MAAM,QAAQ,GAAG,IAAA,6BAAe,EAAC,MAAM,EAAE;IACvC,YAAY,EAAE;QACZ,gBAAgB;QAChB,gBAAgB;QAChB,iBAAiB;QACjB,iBAAiB;KAClB;CACF,CAAC,CAAC;AAEH;;GAEG;AACI,MAAM,UAAU,GAAG,KAAK,IAA+B,EAAE;IAC9D,YAAY;IACZ,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;IACjC,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,gCAAgC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IACnE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,UAAU,GAA8B,MAAM,EAAE,MAAM,IAAI,EAAE,CAAC;IAEnE,6BAA6B;IAC7B,MAAM,MAAM,GAAqB;QAC/B,EAAE,EAAE;YACF,KAAK,EAAE,UAAU,CAAC,EAAE,EAAE,KAAK,IAAI,eAAe;YAC9C,QAAQ,EACN,UAAU,CAAC,EAAE,EAAE,QAAQ,IAAI,2CAA2C;YACxE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,UAAU,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE;SACjE;QACD,KAAK,EAAE;YACL,MAAM,EAAE,UAAU,CAAC,KAAK,EAAE,MAAM,IAAI,EAAE;SACvC;QACD,MAAM,EAAE;YACN,QAAQ,EAAG,UAAU,CAAC,MAAM,EAAE,QAAgB,IAAI,SAAS;YAC3D,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE;YACvC,WAAW,EAAE,UAAU,CAAC,MAAM,EAAE,WAAW,IAAI,GAAG;SACnD;KACF,CAAC;IACF,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAChE,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,6CAA8C;AAG9C,MAAM,QAAQ,GAAG,IAAA,6BAAe,EAAC,MAAM,EAAE;IACvC,YAAY,EAAE;QACZ,gBAAgB;QAChB,gBAAgB;QAChB,iBAAiB;QACjB,iBAAiB;KAClB;CACF,CAAC,CAAC;AAEH;;GAEG;AACI,MAAM,UAAU,GAAG,KAAK,IAA+B,EAAE;IAC9D,YAAY;IACZ,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;IACjC,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,gCAAgC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IACnE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,UAAU,GAA8B,MAAM,EAAE,MAAM,IAAI,EAAE,CAAC;IAEnE,6BAA6B;IAC7B,MAAM,MAAM,GAAqB;QAC/B,EAAE,EAAE;YACF,KAAK,EAAE,UAAU,CAAC,EAAE,EAAE,KAAK,IAAI,eAAe;YAC9C,QAAQ,EACN,UAAU,CAAC,EAAE,EAAE,QAAQ,IAAI,2CAA2C;YACxE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,UAAU,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE;SACjE;QACD,KAAK,EAAE;YACL,MAAM,EAAE,UAAU,CAAC,KAAK,EAAE,MAAM,IAAI,EAAE;SACvC;QACD,MAAM,EAAE;YACN,QAAQ,EAAG,UAAU,CAAC,MAAM,EAAE,QAAgB,IAAI,SAAS;YAC3D,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE;YACvC,WAAW,EAAE,UAAU,CAAC,MAAM,EAAE,WAAW,IAAI,GAAG;SACnD;QACD,OAAO,EAAE;YACP,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,IAAI,KAAK;SAC9C;KACF,CAAC;IACF,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAChE,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAjCW,QAAA,UAAU,cAiCrB;AAEF;;GAEG;AACI,MAAM,cAAc,GAAG,CAAC,MAAwB,EAAW,EAAE;IAClE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CACX,yCAAyC,CAC1C,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAdW,QAAA,cAAc,kBAczB"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,11 @@
|
|
|
2
2
|
* AI Code Review 主入口
|
|
3
3
|
*/
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
5
|
+
* Review 模式:逐行代码审查,输出 rdjson
|
|
6
6
|
*/
|
|
7
|
-
export declare const
|
|
7
|
+
export declare const reviewMain: () => Promise<void>;
|
|
8
|
+
/**
|
|
9
|
+
* Summary 模式:生成改动汇总报告,输出 rdjson(单条 diagnostic 包含 Markdown)
|
|
10
|
+
*/
|
|
11
|
+
export declare const summaryMain: () => Promise<void>;
|
|
8
12
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH;;GAEG;AACH,eAAO,MAAM,UAAU,QAAa,OAAO,CAAC,IAAI,CAoC/C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,QAAa,OAAO,CAAC,IAAI,CA6BhD,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,16 +2,21 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* AI Code Review 主入口
|
|
4
4
|
*/
|
|
5
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
|
+
};
|
|
5
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
9
|
+
exports.summaryMain = exports.reviewMain = void 0;
|
|
10
|
+
const minimist_1 = __importDefault(require("minimist"));
|
|
7
11
|
const config_1 = require("./config");
|
|
8
12
|
const formatters_1 = require("./formatters");
|
|
9
13
|
const reviewer_1 = require("./reviewer");
|
|
14
|
+
const summarizer_1 = require("./summarizer");
|
|
10
15
|
const utils_1 = require("./utils");
|
|
11
16
|
/**
|
|
12
|
-
*
|
|
17
|
+
* Review 模式:逐行代码审查,输出 rdjson
|
|
13
18
|
*/
|
|
14
|
-
const
|
|
19
|
+
const reviewMain = async () => {
|
|
15
20
|
try {
|
|
16
21
|
// 1. 加载配置
|
|
17
22
|
const config = await (0, config_1.loadConfig)();
|
|
@@ -43,16 +48,48 @@ const main = async () => {
|
|
|
43
48
|
process.exit(1);
|
|
44
49
|
}
|
|
45
50
|
};
|
|
46
|
-
exports.
|
|
51
|
+
exports.reviewMain = reviewMain;
|
|
52
|
+
/**
|
|
53
|
+
* Summary 模式:生成改动汇总报告,输出 rdjson(单条 diagnostic 包含 Markdown)
|
|
54
|
+
*/
|
|
55
|
+
const summaryMain = async () => {
|
|
56
|
+
const emptySummaryRdjson = {
|
|
57
|
+
source: { name: "ai-code-review-summary" },
|
|
58
|
+
diagnostics: [],
|
|
59
|
+
};
|
|
60
|
+
try {
|
|
61
|
+
const config = await (0, config_1.loadConfig)();
|
|
62
|
+
if (!(0, config_1.validateConfig)(config)) {
|
|
63
|
+
console.log(JSON.stringify(emptySummaryRdjson));
|
|
64
|
+
process.exit(0);
|
|
65
|
+
}
|
|
66
|
+
const diff = await (0, utils_1.readStdin)();
|
|
67
|
+
if (!diff || !diff.trim()) {
|
|
68
|
+
console.error("[ai-code-review] 未读取到 diff,跳过汇总");
|
|
69
|
+
console.log(JSON.stringify(emptySummaryRdjson));
|
|
70
|
+
process.exit(0);
|
|
71
|
+
}
|
|
72
|
+
const output = await (0, summarizer_1.generateSummary)(diff, config);
|
|
73
|
+
console.log(JSON.stringify(output));
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
console.error("[ai-code-review] 汇总生成错误:", error);
|
|
77
|
+
console.log(JSON.stringify(emptySummaryRdjson));
|
|
78
|
+
process.exit(1);
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
exports.summaryMain = summaryMain;
|
|
47
82
|
/**
|
|
48
83
|
* CLI 入口
|
|
49
|
-
*
|
|
50
|
-
* git diff ... |
|
|
84
|
+
* 用法:
|
|
85
|
+
* git diff ... | ai-code-review # 逐行 review
|
|
86
|
+
* git diff ... | ai-code-review --summary # 改动汇总
|
|
51
87
|
*/
|
|
52
88
|
if (require.main === module) {
|
|
53
|
-
(0,
|
|
89
|
+
const args = (0, minimist_1.default)(process.argv.slice(2));
|
|
90
|
+
const run = args.summary ? exports.summaryMain : exports.reviewMain;
|
|
91
|
+
run().catch((error) => {
|
|
54
92
|
console.error("[ai-code-review] CLI 执行错误:", error);
|
|
55
|
-
console.log(JSON.stringify((0, formatters_1.buildEmptyRdjson)()));
|
|
56
93
|
process.exit(1);
|
|
57
94
|
});
|
|
58
95
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 代码改动汇总模块
|
|
3
|
+
* 基于 git diff 生成结构化的 Markdown 改动摘要,输出 rdjson 供 reviewdog 发布
|
|
4
|
+
*/
|
|
5
|
+
import { CodeReviewConfig, RdjsonOutput } from "../types";
|
|
6
|
+
/**
|
|
7
|
+
* 生成代码改动汇总,返回 rdjson 格式输出
|
|
8
|
+
*/
|
|
9
|
+
export declare const generateSummary: (diff: string, config: CodeReviewConfig) => Promise<RdjsonOutput>;
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/summarizer/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAuF1D;;GAEG;AACH,eAAO,MAAM,eAAe,GAC1B,MAAM,MAAM,EACZ,QAAQ,gBAAgB,KACvB,OAAO,CAAC,YAAY,CAoCtB,CAAC"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 代码改动汇总模块
|
|
4
|
+
* 基于 git diff 生成结构化的 Markdown 改动摘要,输出 rdjson 供 reviewdog 发布
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.generateSummary = void 0;
|
|
8
|
+
const utils_1 = require("../reviewer/utils");
|
|
9
|
+
const factory_1 = require("../reviewer/modelAdapters/factory");
|
|
10
|
+
const buildSummarySystemPrompt = () => {
|
|
11
|
+
return [
|
|
12
|
+
"你是一位资深开发工程师,擅长分析代码改动并生成清晰的技术摘要。",
|
|
13
|
+
"你需要根据给定的 Git diff,生成一份结构化的代码改动汇总报告。",
|
|
14
|
+
"报告使用 Markdown 格式,语言为中文,内容简洁准确。",
|
|
15
|
+
].join("");
|
|
16
|
+
};
|
|
17
|
+
const buildSummaryUserPrompt = (diff) => {
|
|
18
|
+
return [
|
|
19
|
+
"请根据以下 Git diff 生成一份代码改动汇总报告。",
|
|
20
|
+
"",
|
|
21
|
+
"要求:",
|
|
22
|
+
"1. 直接输出 Markdown 文本,不要包裹在代码块中;",
|
|
23
|
+
"2. 按以下结构组织内容:",
|
|
24
|
+
"",
|
|
25
|
+
"## 概述",
|
|
26
|
+
"用 1-2 句话简要说明本次改动的整体目的和范围。",
|
|
27
|
+
"",
|
|
28
|
+
"## 主要变更",
|
|
29
|
+
"按以下类别分类列出(跳过没有对应改动的类别):",
|
|
30
|
+
"- **新功能**:新增的组件、页面、服务等",
|
|
31
|
+
"- **Bug 修复**:修复的问题及修复方案",
|
|
32
|
+
"- **重构优化**:代码结构调整、性能优化等",
|
|
33
|
+
"- **依赖更新**:package.json 等依赖变更",
|
|
34
|
+
"- **配置调整**:配置文件的修改",
|
|
35
|
+
"",
|
|
36
|
+
"每个变更项用简短的描述说明改了什么、为什么改。",
|
|
37
|
+
"",
|
|
38
|
+
"## 受影响文件",
|
|
39
|
+
"用表格列出所有改动文件:",
|
|
40
|
+
"| 文件路径 | 变更类型 | 说明 |",
|
|
41
|
+
"| --- | --- | --- |",
|
|
42
|
+
"",
|
|
43
|
+
"变更类型为:新增 / 修改 / 删除。",
|
|
44
|
+
"",
|
|
45
|
+
"## 注意事项",
|
|
46
|
+
'列出需要关注的点,例如 breaking changes、需要额外测试的地方、潜在风险等。如果没有则写"无"。',
|
|
47
|
+
"",
|
|
48
|
+
"---",
|
|
49
|
+
"",
|
|
50
|
+
"下面是 Git diff:",
|
|
51
|
+
diff,
|
|
52
|
+
].join("\n");
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* 从 AI 返回的内容中清理 Markdown(去除可能的代码块包裹)
|
|
56
|
+
*/
|
|
57
|
+
const cleanMarkdownResponse = (content) => {
|
|
58
|
+
let text = content.trim();
|
|
59
|
+
if (text.startsWith("```markdown")) {
|
|
60
|
+
text = text.slice("```markdown".length);
|
|
61
|
+
}
|
|
62
|
+
else if (text.startsWith("```md")) {
|
|
63
|
+
text = text.slice("```md".length);
|
|
64
|
+
}
|
|
65
|
+
else if (text.startsWith("```")) {
|
|
66
|
+
text = text.slice(3);
|
|
67
|
+
}
|
|
68
|
+
if (text.endsWith("```")) {
|
|
69
|
+
text = text.slice(0, -3);
|
|
70
|
+
}
|
|
71
|
+
return text.trim();
|
|
72
|
+
};
|
|
73
|
+
const buildSummaryRdjson = (markdown) => ({
|
|
74
|
+
source: { name: "ai-code-review-summary" },
|
|
75
|
+
diagnostics: [
|
|
76
|
+
{
|
|
77
|
+
message: markdown,
|
|
78
|
+
location: {
|
|
79
|
+
path: "__summary__",
|
|
80
|
+
range: { start: { line: 0, column: 0 } },
|
|
81
|
+
},
|
|
82
|
+
severity: "INFO",
|
|
83
|
+
},
|
|
84
|
+
],
|
|
85
|
+
});
|
|
86
|
+
const buildEmptySummaryRdjson = () => ({
|
|
87
|
+
source: { name: "ai-code-review-summary" },
|
|
88
|
+
diagnostics: [],
|
|
89
|
+
});
|
|
90
|
+
/**
|
|
91
|
+
* 生成代码改动汇总,返回 rdjson 格式输出
|
|
92
|
+
*/
|
|
93
|
+
const generateSummary = async (diff, config) => {
|
|
94
|
+
const effectiveDiff = (0, utils_1.filterDiffByIgnore)(diff, config.review?.ignore);
|
|
95
|
+
if (!effectiveDiff || !effectiveDiff.trim()) {
|
|
96
|
+
console.error("[summarizer] diff 为空,跳过汇总");
|
|
97
|
+
return buildEmptySummaryRdjson();
|
|
98
|
+
}
|
|
99
|
+
if (!config.ai.apiKey || !config.ai.endpoint) {
|
|
100
|
+
console.error("[summarizer] 缺少 API 配置");
|
|
101
|
+
return buildEmptySummaryRdjson();
|
|
102
|
+
}
|
|
103
|
+
const systemPrompt = buildSummarySystemPrompt();
|
|
104
|
+
const userPrompt = buildSummaryUserPrompt(effectiveDiff);
|
|
105
|
+
const modelAdapter = (0, factory_1.createModelAdapterFactory)(config.ai.endpoint, config.ai.apiKey);
|
|
106
|
+
console.error("[summarizer] 正在调用 AI 生成汇总报告...");
|
|
107
|
+
const rawContent = await modelAdapter.call(config.ai.model, systemPrompt, userPrompt);
|
|
108
|
+
if (!rawContent) {
|
|
109
|
+
console.error("[summarizer] AI 未返回有效内容");
|
|
110
|
+
return buildEmptySummaryRdjson();
|
|
111
|
+
}
|
|
112
|
+
const markdown = cleanMarkdownResponse(rawContent);
|
|
113
|
+
console.error("[summarizer] 汇总报告生成完成");
|
|
114
|
+
return buildSummaryRdjson(markdown);
|
|
115
|
+
};
|
|
116
|
+
exports.generateSummary = generateSummary;
|
|
117
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/summarizer/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -27,6 +27,12 @@ export interface ReviewConfig {
|
|
|
27
27
|
ignore?: string[];
|
|
28
28
|
maxComments?: number;
|
|
29
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* 汇总报告配置
|
|
32
|
+
*/
|
|
33
|
+
export interface SummaryConfig {
|
|
34
|
+
enabled?: boolean;
|
|
35
|
+
}
|
|
30
36
|
/**
|
|
31
37
|
* 完整配置接口
|
|
32
38
|
*/
|
|
@@ -34,6 +40,7 @@ export interface CodeReviewConfig {
|
|
|
34
40
|
ai: AIConfig;
|
|
35
41
|
rules?: RulesConfig;
|
|
36
42
|
review?: ReviewConfig;
|
|
43
|
+
summary?: SummaryConfig;
|
|
37
44
|
}
|
|
38
45
|
/**
|
|
39
46
|
* AI 返回的评论
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAEpD;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,QAAQ,CAAC;IACb,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAEpD;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,QAAQ,CAAC;IACb,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,SAAS,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE;YACL,KAAK,EAAE;gBACL,IAAI,EAAE,MAAM,CAAC;gBACb,MAAM,EAAE,MAAM,CAAC;aAChB,CAAC;SACH,CAAC;KACH,CAAC;IACF,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,WAAW,EAAE,gBAAgB,EAAE,CAAC;CACjC"}
|