mc-ai-code-review 1.1.24
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 +28 -0
- package/dist/config.d.ts +14 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +68 -0
- package/dist/config.js.map +1 -0
- package/dist/formatters/index.d.ts +5 -0
- package/dist/formatters/index.d.ts.map +1 -0
- package/dist/formatters/index.js +21 -0
- package/dist/formatters/index.js.map +1 -0
- package/dist/formatters/rdjson.d.ts +17 -0
- package/dist/formatters/rdjson.d.ts.map +1 -0
- package/dist/formatters/rdjson.js +65 -0
- package/dist/formatters/rdjson.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +134 -0
- package/dist/index.js.map +1 -0
- package/dist/performanceReviewer/index.d.ts +17 -0
- package/dist/performanceReviewer/index.d.ts.map +1 -0
- package/dist/performanceReviewer/index.js +251 -0
- package/dist/performanceReviewer/index.js.map +1 -0
- package/dist/reviewer/index.d.ts +10 -0
- package/dist/reviewer/index.d.ts.map +1 -0
- package/dist/reviewer/index.js +115 -0
- package/dist/reviewer/index.js.map +1 -0
- package/dist/reviewer/modelAdapters/base.d.ts +14 -0
- package/dist/reviewer/modelAdapters/base.d.ts.map +1 -0
- package/dist/reviewer/modelAdapters/base.js +3 -0
- package/dist/reviewer/modelAdapters/base.js.map +1 -0
- package/dist/reviewer/modelAdapters/factory.d.ts +13 -0
- package/dist/reviewer/modelAdapters/factory.d.ts.map +1 -0
- package/dist/reviewer/modelAdapters/factory.js +21 -0
- package/dist/reviewer/modelAdapters/factory.js.map +1 -0
- package/dist/reviewer/modelAdapters/gemini.d.ts +11 -0
- package/dist/reviewer/modelAdapters/gemini.d.ts.map +1 -0
- package/dist/reviewer/modelAdapters/gemini.js +61 -0
- package/dist/reviewer/modelAdapters/gemini.js.map +1 -0
- package/dist/reviewer/modelAdapters/openai.d.ts +12 -0
- package/dist/reviewer/modelAdapters/openai.d.ts.map +1 -0
- package/dist/reviewer/modelAdapters/openai.js +54 -0
- package/dist/reviewer/modelAdapters/openai.js.map +1 -0
- package/dist/reviewer/parseResponse.d.ts +10 -0
- package/dist/reviewer/parseResponse.d.ts.map +1 -0
- package/dist/reviewer/parseResponse.js +97 -0
- package/dist/reviewer/parseResponse.js.map +1 -0
- package/dist/reviewer/utils.d.ts +44 -0
- package/dist/reviewer/utils.d.ts.map +1 -0
- package/dist/reviewer/utils.js +392 -0
- package/dist/reviewer/utils.js.map +1 -0
- package/dist/summarizer/index.d.ts +10 -0
- package/dist/summarizer/index.d.ts.map +1 -0
- package/dist/summarizer/index.js +142 -0
- package/dist/summarizer/index.js.map +1 -0
- package/dist/types.d.ts +92 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +5 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +21 -0
- package/dist/utils.js.map +1 -0
- package/package.json +44 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 代码改动汇总模块
|
|
4
|
+
* 基于 git diff 生成结构化的 Markdown 改动摘要,输出纯文本供 CI 脚本发布到 GitLab MR
|
|
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
|
+
"",
|
|
16
|
+
"【输出格式要求 - 极其重要】",
|
|
17
|
+
"- 你必须直接输出纯 Markdown 文本",
|
|
18
|
+
'- 禁止返回 JSON 对象(如 {"markdown": "..."})',
|
|
19
|
+
"- 禁止用代码块(```)包裹整个输出",
|
|
20
|
+
"- 输出的第一个字符必须是 # 号(即以 Markdown 标题开头)",
|
|
21
|
+
].join("\n");
|
|
22
|
+
};
|
|
23
|
+
const buildSummaryUserPrompt = (diff) => {
|
|
24
|
+
return [
|
|
25
|
+
"请根据以下 Git diff 生成一份代码改动汇总报告。",
|
|
26
|
+
"",
|
|
27
|
+
"要求:",
|
|
28
|
+
"1. 直接输出 Markdown 文本,不要包裹在代码块中;",
|
|
29
|
+
"2. 按以下结构组织内容:",
|
|
30
|
+
"",
|
|
31
|
+
"## 概述",
|
|
32
|
+
"用 1-2 句话简要说明本次改动的整体目的和范围。",
|
|
33
|
+
"",
|
|
34
|
+
"## 主要变更",
|
|
35
|
+
"按以下类别分类列出(跳过没有对应改动的类别):",
|
|
36
|
+
"- **新功能**:新增的组件、页面、服务等",
|
|
37
|
+
"- **Bug 修复**:修复的问题及修复方案",
|
|
38
|
+
"- **重构优化**:代码结构调整、性能优化等",
|
|
39
|
+
"- **依赖更新**:package.json 等依赖变更",
|
|
40
|
+
"- **配置调整**:配置文件的修改",
|
|
41
|
+
"",
|
|
42
|
+
"每个变更项用简短的描述说明改了什么、为什么改。",
|
|
43
|
+
"",
|
|
44
|
+
"## 受影响文件",
|
|
45
|
+
"用表格列出所有改动文件:",
|
|
46
|
+
"| 文件路径 | 变更类型 | 说明 |",
|
|
47
|
+
"| --- | --- | --- |",
|
|
48
|
+
"",
|
|
49
|
+
"变更类型为:新增 / 修改 / 删除。",
|
|
50
|
+
"",
|
|
51
|
+
"## 注意事项",
|
|
52
|
+
'列出需要关注的点,例如 breaking changes、需要额外测试的地方、潜在风险等。如果没有则写"无"。',
|
|
53
|
+
"",
|
|
54
|
+
"---",
|
|
55
|
+
"",
|
|
56
|
+
"下面是 Git diff:",
|
|
57
|
+
diff,
|
|
58
|
+
].join("\n");
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* 从 AI 返回的内容中提取纯 Markdown
|
|
62
|
+
* 先去代码块外壳,再解 JSON 包裹,不依赖固定 key 名
|
|
63
|
+
*/
|
|
64
|
+
const cleanMarkdownResponse = (content) => {
|
|
65
|
+
let text = content.trim();
|
|
66
|
+
// 1. 去除代码块包裹(可能套在 JSON 外层)
|
|
67
|
+
if (text.startsWith("```markdown")) {
|
|
68
|
+
text = text.slice("```markdown".length);
|
|
69
|
+
}
|
|
70
|
+
else if (text.startsWith("```md")) {
|
|
71
|
+
text = text.slice("```md".length);
|
|
72
|
+
}
|
|
73
|
+
else if (text.startsWith("```json")) {
|
|
74
|
+
text = text.slice("```json".length);
|
|
75
|
+
}
|
|
76
|
+
else if (text.startsWith("```")) {
|
|
77
|
+
text = text.slice(3);
|
|
78
|
+
}
|
|
79
|
+
if (text.endsWith("```")) {
|
|
80
|
+
text = text.slice(0, -3);
|
|
81
|
+
}
|
|
82
|
+
text = text.trim();
|
|
83
|
+
// 2. JSON 包裹:对象取首个 string 值,纯 JSON 字符串直接解包
|
|
84
|
+
if (text.startsWith("{") || text.startsWith('"')) {
|
|
85
|
+
try {
|
|
86
|
+
const parsed = JSON.parse(text);
|
|
87
|
+
if (typeof parsed === "string") {
|
|
88
|
+
text = parsed.trim();
|
|
89
|
+
}
|
|
90
|
+
else if (typeof parsed === "object" &&
|
|
91
|
+
parsed !== null &&
|
|
92
|
+
!Array.isArray(parsed)) {
|
|
93
|
+
const firstString = Object.values(parsed).find((v) => typeof v === "string");
|
|
94
|
+
if (firstString) {
|
|
95
|
+
text = firstString.trim();
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
// 不是合法 JSON,继续按纯文本处理
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// 3. 还原字面转义的换行符
|
|
104
|
+
// 某些模型会返回字面 \n 而非真实换行,导致 GitLab 无法渲染 Markdown
|
|
105
|
+
const realNewlines = (text.match(/\n/g) || []).length;
|
|
106
|
+
const literalNewlines = (text.match(/\\n/g) || []).length;
|
|
107
|
+
if (literalNewlines > 0 && literalNewlines > realNewlines) {
|
|
108
|
+
text = text
|
|
109
|
+
.replace(/\\n/g, "\n")
|
|
110
|
+
.replace(/\\t/g, "\t")
|
|
111
|
+
.replace(/\\"/g, '"');
|
|
112
|
+
}
|
|
113
|
+
return text.trim();
|
|
114
|
+
};
|
|
115
|
+
/**
|
|
116
|
+
* 生成代码改动汇总,返回纯 Markdown 文本(由 CI 脚本通过 GitLab API 发布)
|
|
117
|
+
*/
|
|
118
|
+
const generateSummary = async (diff, config) => {
|
|
119
|
+
const effectiveDiff = (0, utils_1.filterDiffByIgnore)(diff, config.review?.ignore);
|
|
120
|
+
if (!effectiveDiff || !effectiveDiff.trim()) {
|
|
121
|
+
console.error("[summarizer] diff 为空,跳过汇总");
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
if (!config.ai.apiKey || !config.ai.endpoint) {
|
|
125
|
+
console.error("[summarizer] 缺少 API 配置");
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
const systemPrompt = buildSummarySystemPrompt();
|
|
129
|
+
const userPrompt = buildSummaryUserPrompt(effectiveDiff);
|
|
130
|
+
const modelAdapter = (0, factory_1.createModelAdapterFactory)(config.ai.endpoint, config.ai.apiKey);
|
|
131
|
+
console.error("[summarizer] 正在调用 AI 生成汇总报告...");
|
|
132
|
+
const rawContent = await modelAdapter.call(config.ai.model, systemPrompt, userPrompt);
|
|
133
|
+
if (!rawContent) {
|
|
134
|
+
console.error("[summarizer] AI 未返回有效内容");
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
const markdown = cleanMarkdownResponse(rawContent);
|
|
138
|
+
console.error("[summarizer] 汇总报告生成完成");
|
|
139
|
+
return markdown;
|
|
140
|
+
};
|
|
141
|
+
exports.generateSummary = generateSummary;
|
|
142
|
+
//# 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
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Code Review 类型定义
|
|
3
|
+
*/
|
|
4
|
+
export type Severity = "info" | "warning" | "error";
|
|
5
|
+
/**
|
|
6
|
+
* AI 模型配置(对用户暴露的最小必要字段)
|
|
7
|
+
* - model: 模型名称,如 deepseek-chat
|
|
8
|
+
* - endpoint: 模型对应的 HTTP 接口地址
|
|
9
|
+
* - apiKey: 调用该模型所需的密钥
|
|
10
|
+
*/
|
|
11
|
+
export interface AIConfig {
|
|
12
|
+
model: string;
|
|
13
|
+
endpoint: string;
|
|
14
|
+
apiKey: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* 规则配置
|
|
18
|
+
*/
|
|
19
|
+
export interface RulesConfig {
|
|
20
|
+
custom?: string[];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* 审查策略配置
|
|
24
|
+
*/
|
|
25
|
+
export interface ReviewConfig {
|
|
26
|
+
severity?: Severity;
|
|
27
|
+
ignore?: string[];
|
|
28
|
+
maxComments?: number;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* 汇总报告配置
|
|
32
|
+
*/
|
|
33
|
+
export interface SummaryConfig {
|
|
34
|
+
enabled?: boolean;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* 完整配置接口
|
|
38
|
+
*/
|
|
39
|
+
export interface CodeReviewConfig {
|
|
40
|
+
ai: AIConfig;
|
|
41
|
+
rules?: RulesConfig;
|
|
42
|
+
review?: ReviewConfig;
|
|
43
|
+
summary?: SummaryConfig;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* AI 返回的评论
|
|
47
|
+
*/
|
|
48
|
+
export interface AIComment {
|
|
49
|
+
file: string;
|
|
50
|
+
line: number;
|
|
51
|
+
/**
|
|
52
|
+
* 用于将 AI 评论与 diff 行做精确对齐:
|
|
53
|
+
* - 期望为被评论“目标行”的完整行内容(不包含 diff 前缀 +/-/空格)
|
|
54
|
+
* - 允许为空字符串(表示空行)
|
|
55
|
+
*/
|
|
56
|
+
code?: string;
|
|
57
|
+
severity: Severity;
|
|
58
|
+
message: string;
|
|
59
|
+
suggestion?: string;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* AI 响应
|
|
63
|
+
*/
|
|
64
|
+
export interface AIResponse {
|
|
65
|
+
comments: AIComment[];
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Reviewdog JSON 格式 - 诊断信息
|
|
69
|
+
*/
|
|
70
|
+
export interface RdjsonDiagnostic {
|
|
71
|
+
message: string;
|
|
72
|
+
location: {
|
|
73
|
+
path: string;
|
|
74
|
+
range: {
|
|
75
|
+
start: {
|
|
76
|
+
line: number;
|
|
77
|
+
column: number;
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
};
|
|
81
|
+
severity: "ERROR" | "WARNING" | "INFO";
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Reviewdog JSON 格式 - 完整输出
|
|
85
|
+
*/
|
|
86
|
+
export interface RdjsonOutput {
|
|
87
|
+
source: {
|
|
88
|
+
name: string;
|
|
89
|
+
};
|
|
90
|
+
diagnostics: RdjsonDiagnostic[];
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +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,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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,SAAS,QAAO,OAAO,CAAC,MAAM,CAavC,CAAC"}
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.readStdin = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* 读取 stdin
|
|
6
|
+
*/
|
|
7
|
+
const readStdin = () => new Promise((resolve, reject) => {
|
|
8
|
+
let data = "";
|
|
9
|
+
process.stdin.setEncoding("utf8");
|
|
10
|
+
process.stdin.on("data", (chunk) => {
|
|
11
|
+
data += chunk;
|
|
12
|
+
});
|
|
13
|
+
process.stdin.on("end", () => {
|
|
14
|
+
resolve(data);
|
|
15
|
+
});
|
|
16
|
+
process.stdin.on("error", (err) => {
|
|
17
|
+
reject(err);
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
exports.readStdin = readStdin;
|
|
21
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACI,MAAM,SAAS,GAAG,GAAoB,EAAE,CAC7C,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;IAC9B,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;QACjC,IAAI,IAAI,KAAK,CAAC;IAChB,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;QAC3B,OAAO,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QAChC,MAAM,CAAC,GAAG,CAAC,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAbQ,QAAA,SAAS,aAajB"}
|
package/package.json
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "mc-ai-code-review",
|
|
3
|
+
"version": "1.1.24",
|
|
4
|
+
"description": "AI-powered code review tool for GitLab CI/CD",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"publishConfig": {
|
|
8
|
+
"access": "public"
|
|
9
|
+
},
|
|
10
|
+
"bin": {
|
|
11
|
+
"ai-code-review": "bin/ai-code-review.js"
|
|
12
|
+
},
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "tsc",
|
|
15
|
+
"dev": "tsc --watch",
|
|
16
|
+
"prepublishOnly": "npm run build"
|
|
17
|
+
},
|
|
18
|
+
"keywords": [
|
|
19
|
+
"ai",
|
|
20
|
+
"code-review",
|
|
21
|
+
"gitlab",
|
|
22
|
+
"ci-cd",
|
|
23
|
+
"reviewdog"
|
|
24
|
+
],
|
|
25
|
+
"author": "binn <binn@micous.com>",
|
|
26
|
+
"license": "MIT",
|
|
27
|
+
"files": [
|
|
28
|
+
"dist",
|
|
29
|
+
"bin",
|
|
30
|
+
"README.md"
|
|
31
|
+
],
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"cosmiconfig": "^9.0.0",
|
|
34
|
+
"minimist": "^1.2.8"
|
|
35
|
+
},
|
|
36
|
+
"devDependencies": {
|
|
37
|
+
"@types/minimist": "^1.2.5",
|
|
38
|
+
"@types/node": "^20.0.0",
|
|
39
|
+
"typescript": "^5.6.3"
|
|
40
|
+
},
|
|
41
|
+
"engines": {
|
|
42
|
+
"node": ">=18.0.0"
|
|
43
|
+
}
|
|
44
|
+
}
|