frontend-guardian-core 2.8.0 → 3.0.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/bin/fg-core.js +183 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -2
- package/dist/index.js.map +1 -1
- package/dist/utils/ai-fix-suggester.d.ts +85 -0
- package/dist/utils/ai-fix-suggester.d.ts.map +1 -0
- package/dist/utils/ai-fix-suggester.js +295 -0
- package/dist/utils/ai-fix-suggester.js.map +1 -0
- package/dist/utils/monorepo.d.ts +57 -0
- package/dist/utils/monorepo.d.ts.map +1 -0
- package/dist/utils/monorepo.js +298 -0
- package/dist/utils/monorepo.js.map +1 -0
- package/dist/utils/workspace-scanner.d.ts +104 -0
- package/dist/utils/workspace-scanner.d.ts.map +1 -0
- package/dist/utils/workspace-scanner.js +218 -0
- package/dist/utils/workspace-scanner.js.map +1 -0
- package/package.json +1 -1
package/bin/fg-core.js
CHANGED
|
@@ -40,6 +40,12 @@ import {
|
|
|
40
40
|
detectFixBotConfig,
|
|
41
41
|
HistoryReport,
|
|
42
42
|
generateDashboard,
|
|
43
|
+
detectMonorepo,
|
|
44
|
+
scanWorkspace,
|
|
45
|
+
formatWorkspaceReport,
|
|
46
|
+
formatWorkspaceJson,
|
|
47
|
+
AIFixSuggester,
|
|
48
|
+
detectAIConfig,
|
|
43
49
|
} from "../dist/index.js";
|
|
44
50
|
import pc from "picocolors";
|
|
45
51
|
import { runWatchMode } from "./watch-mode.js";
|
|
@@ -72,7 +78,7 @@ const MODULE_RULES = {
|
|
|
72
78
|
|
|
73
79
|
function showHelp() {
|
|
74
80
|
console.log(`
|
|
75
|
-
Frontend Guardian Core
|
|
81
|
+
Frontend Guardian Core v3.0.0
|
|
76
82
|
|
|
77
83
|
Usage:
|
|
78
84
|
fg-core <project-dir> [options]
|
|
@@ -115,6 +121,12 @@ Options:
|
|
|
115
121
|
--history-module <m> 历史记录按模块过滤(配合 --history)
|
|
116
122
|
--history-limit <n> 历史记录显示条数限制(默认 20)
|
|
117
123
|
--generate-dashboard 生成团队趋势看板 HTML 页面
|
|
124
|
+
--monorepo 启用 Monorepo 模式:自动检测 workspace 并扫描所有子包
|
|
125
|
+
--workspace <name> 仅扫描指定 workspace 包(可多次使用,配合 --monorepo)
|
|
126
|
+
--skip-package <name> 跳过指定 workspace 包(可多次使用,配合 --monorepo)
|
|
127
|
+
--no-cross-deps 禁用跨包依赖分析(配合 --monorepo)
|
|
128
|
+
--ai-fix 启用 AI 修复建议(需配置 FG_AI_API_KEY 环境变量)
|
|
129
|
+
--ai-model <model> 指定 AI 模型(如 gpt-4o-mini / claude-3-5-sonnet,配合 --ai-fix)
|
|
118
130
|
--help, -h 显示帮助
|
|
119
131
|
|
|
120
132
|
Examples:
|
|
@@ -174,6 +186,12 @@ async function main() {
|
|
|
174
186
|
historyModule: undefined,
|
|
175
187
|
historyLimit: 20,
|
|
176
188
|
generateDashboard: false,
|
|
189
|
+
monorepo: false,
|
|
190
|
+
workspace: [],
|
|
191
|
+
skipPackage: [],
|
|
192
|
+
crossDeps: true,
|
|
193
|
+
aiFix: false,
|
|
194
|
+
aiModel: undefined,
|
|
177
195
|
};
|
|
178
196
|
|
|
179
197
|
for (let i = 0; i < args.length; i++) {
|
|
@@ -292,6 +310,24 @@ async function main() {
|
|
|
292
310
|
case "--generate-dashboard":
|
|
293
311
|
options.generateDashboard = true;
|
|
294
312
|
break;
|
|
313
|
+
case "--monorepo":
|
|
314
|
+
options.monorepo = true;
|
|
315
|
+
break;
|
|
316
|
+
case "--workspace":
|
|
317
|
+
options.workspace.push(args[++i]);
|
|
318
|
+
break;
|
|
319
|
+
case "--skip-package":
|
|
320
|
+
options.skipPackage.push(args[++i]);
|
|
321
|
+
break;
|
|
322
|
+
case "--no-cross-deps":
|
|
323
|
+
options.crossDeps = false;
|
|
324
|
+
break;
|
|
325
|
+
case "--ai-fix":
|
|
326
|
+
options.aiFix = true;
|
|
327
|
+
break;
|
|
328
|
+
case "--ai-model":
|
|
329
|
+
options.aiModel = args[++i];
|
|
330
|
+
break;
|
|
295
331
|
case "--help":
|
|
296
332
|
case "-h":
|
|
297
333
|
showHelp();
|
|
@@ -404,6 +440,75 @@ async function main() {
|
|
|
404
440
|
process.exit(0);
|
|
405
441
|
}
|
|
406
442
|
|
|
443
|
+
// v2.9.0: Monorepo 模式
|
|
444
|
+
if (options.monorepo) {
|
|
445
|
+
const mono = detectMonorepo(options.projectDir);
|
|
446
|
+
if (!mono.isMonorepo) {
|
|
447
|
+
console.log(pc.yellow(`⚠️ 未检测到 monorepo workspace 配置(pnpm-workspace.yaml / lerna.json / nx.json / package.json workspaces)`));
|
|
448
|
+
console.log(pc.gray(` 将在项目根目录执行常规扫描...`));
|
|
449
|
+
if (options.module === "all") {
|
|
450
|
+
await runAllModules(options);
|
|
451
|
+
} else {
|
|
452
|
+
await runSingleModule(options);
|
|
453
|
+
}
|
|
454
|
+
return;
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
if (!options.json) {
|
|
458
|
+
console.log(pc.cyan("📦 Monorepo Workspace 模式"));
|
|
459
|
+
console.log(pc.gray(` 工具: ${mono.tool}`));
|
|
460
|
+
console.log(pc.gray(` 发现 ${mono.packages.length} 个子包`));
|
|
461
|
+
if (options.workspace.length > 0) {
|
|
462
|
+
console.log(pc.gray(` 仅扫描: ${options.workspace.join(", ")}`));
|
|
463
|
+
}
|
|
464
|
+
if (options.skipPackage.length > 0) {
|
|
465
|
+
console.log(pc.gray(` 跳过: ${options.skipPackage.join(", ")}`));
|
|
466
|
+
}
|
|
467
|
+
console.log("");
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
const workspaceResult = await scanWorkspace({
|
|
471
|
+
projectDir: options.projectDir,
|
|
472
|
+
module: options.module === "all" ? undefined : options.module,
|
|
473
|
+
minSeverity: options.minSeverity,
|
|
474
|
+
noCluster: !options.cluster,
|
|
475
|
+
external: options.external,
|
|
476
|
+
cache: options.cache,
|
|
477
|
+
configFile: options.configFile,
|
|
478
|
+
files: options.files,
|
|
479
|
+
exclude: options.exclude,
|
|
480
|
+
skipLargeFilesThreshold: options.skipLargeFilesThreshold,
|
|
481
|
+
analyzeCrossDeps: options.crossDeps,
|
|
482
|
+
onlyPackages: options.workspace.length > 0 ? options.workspace : undefined,
|
|
483
|
+
skipPackages: options.skipPackage.length > 0 ? options.skipPackage : undefined,
|
|
484
|
+
});
|
|
485
|
+
|
|
486
|
+
if (options.json) {
|
|
487
|
+
console.log(JSON.stringify(formatWorkspaceJson(workspaceResult), null, 2));
|
|
488
|
+
process.exit(workspaceResult.summary.issuesBySeverity.critical > 0 ? 1 : 0);
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
console.log(formatWorkspaceReport(workspaceResult));
|
|
492
|
+
|
|
493
|
+
// 详细输出各包的 issues
|
|
494
|
+
for (const pr of workspaceResult.packageResults) {
|
|
495
|
+
if (!pr.success || pr.result.total === 0) continue;
|
|
496
|
+
|
|
497
|
+
console.log(pc.cyan(`\n📦 ${pr.package.name} (${pr.package.path})`));
|
|
498
|
+
const allIssues = [...pr.result.issues.critical, ...pr.result.issues.warning, ...pr.result.issues.suggestion];
|
|
499
|
+
for (const issue of allIssues) {
|
|
500
|
+
printIssue(issue, issue.severity === "critical" ? pc.red : issue.severity === "warning" ? pc.yellow : pc.blue);
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
console.log(pc.gray(`\n⏱️ 总耗时: ${workspaceResult.summary.totalDuration}ms | 扫描 ${workspaceResult.summary.totalFilesScanned} 个文件`));
|
|
505
|
+
|
|
506
|
+
if (workspaceResult.summary.issuesBySeverity.critical > 0) {
|
|
507
|
+
process.exit(1);
|
|
508
|
+
}
|
|
509
|
+
return;
|
|
510
|
+
}
|
|
511
|
+
|
|
407
512
|
if (options.watch) {
|
|
408
513
|
const scanFn = options.module === "all" ? runAllModules : runSingleModule;
|
|
409
514
|
// v2.6.0: Watch 模式复用 SmartCache,实现缓存预热
|
|
@@ -872,6 +977,45 @@ async function runAllModules(options, cacheInstance) {
|
|
|
872
977
|
}
|
|
873
978
|
}
|
|
874
979
|
|
|
980
|
+
// v3.0.0: AI 修复建议
|
|
981
|
+
if (options.aiFix) {
|
|
982
|
+
const aiConfig = detectAIConfig();
|
|
983
|
+
if (aiConfig) {
|
|
984
|
+
if (options.aiModel) {
|
|
985
|
+
aiConfig.model = options.aiModel;
|
|
986
|
+
}
|
|
987
|
+
console.log(pc.cyan("🤖 正在生成 AI 修复建议..."));
|
|
988
|
+
const suggester = new AIFixSuggester(aiConfig);
|
|
989
|
+
const allIssues = collectAllIssues(allResults, externalResults);
|
|
990
|
+
// 只给没有自动修复的 issue 生成 AI 建议
|
|
991
|
+
const issuesWithoutFix = allIssues.filter((i) => !i.fix);
|
|
992
|
+
if (issuesWithoutFix.length > 0) {
|
|
993
|
+
const suggestions = await suggester.suggestFixes(issuesWithoutFix.slice(0, 5), options.projectDir);
|
|
994
|
+
if (suggestions.length > 0) {
|
|
995
|
+
console.log(pc.cyan(` ✅ 生成 ${suggestions.length} 个 AI 修复建议`));
|
|
996
|
+
for (const s of suggestions) {
|
|
997
|
+
const confidenceIcon = s.confidence === "high" ? pc.green("●") : s.confidence === "medium" ? pc.yellow("●") : pc.red("●");
|
|
998
|
+
console.log(pc.cyan(`\n 📄 ${s.issue.file}:${s.issue.line}`));
|
|
999
|
+
console.log(pc.yellow(` [${s.issue.ruleId}] ${s.issue.title}`));
|
|
1000
|
+
console.log(pc.gray(` AI 置信度: ${confidenceIcon} ${s.confidence}`));
|
|
1001
|
+
if (s.explanation) {
|
|
1002
|
+
console.log(pc.gray(` 说明: ${s.explanation}`));
|
|
1003
|
+
}
|
|
1004
|
+
console.log(pc.gray(` 模型: ${s.model}`));
|
|
1005
|
+
}
|
|
1006
|
+
} else {
|
|
1007
|
+
console.log(pc.gray(" 未生成 AI 修复建议"));
|
|
1008
|
+
}
|
|
1009
|
+
} else {
|
|
1010
|
+
console.log(pc.gray(" 所有问题都有自动修复,无需 AI 建议"));
|
|
1011
|
+
}
|
|
1012
|
+
console.log("");
|
|
1013
|
+
} else {
|
|
1014
|
+
console.log(pc.yellow(" ⚠️ 未检测到 AI 配置。请设置 FG_AI_API_KEY 或 OPENAI_API_KEY 环境变量。"));
|
|
1015
|
+
console.log("");
|
|
1016
|
+
}
|
|
1017
|
+
}
|
|
1018
|
+
|
|
875
1019
|
// v2.8.0: 保存完整扫描报告
|
|
876
1020
|
if (options.saveReport) {
|
|
877
1021
|
const hr = new HistoryReport(options.projectDir);
|
|
@@ -1213,6 +1357,44 @@ async function runSingleModule(options, cacheInstance) {
|
|
|
1213
1357
|
}
|
|
1214
1358
|
}
|
|
1215
1359
|
|
|
1360
|
+
// v3.0.0: AI 修复建议
|
|
1361
|
+
if (options.aiFix) {
|
|
1362
|
+
const aiConfig = detectAIConfig();
|
|
1363
|
+
if (aiConfig) {
|
|
1364
|
+
if (options.aiModel) {
|
|
1365
|
+
aiConfig.model = options.aiModel;
|
|
1366
|
+
}
|
|
1367
|
+
console.log(pc.cyan("\n🤖 正在生成 AI 修复建议..."));
|
|
1368
|
+
const suggester = new AIFixSuggester(aiConfig);
|
|
1369
|
+
const allIssues = [...issues.critical, ...issues.warning, ...issues.suggestion];
|
|
1370
|
+
const issuesWithoutFix = allIssues.filter((i) => !i.fix);
|
|
1371
|
+
if (issuesWithoutFix.length > 0) {
|
|
1372
|
+
const suggestions = await suggester.suggestFixes(issuesWithoutFix.slice(0, 5), options.projectDir);
|
|
1373
|
+
if (suggestions.length > 0) {
|
|
1374
|
+
console.log(pc.cyan(` ✅ 生成 ${suggestions.length} 个 AI 修复建议`));
|
|
1375
|
+
for (const s of suggestions) {
|
|
1376
|
+
const confidenceIcon = s.confidence === "high" ? pc.green("●") : s.confidence === "medium" ? pc.yellow("●") : pc.red("●");
|
|
1377
|
+
console.log(pc.cyan(`\n 📄 ${s.issue.file}:${s.issue.line}`));
|
|
1378
|
+
console.log(pc.yellow(` [${s.issue.ruleId}] ${s.issue.title}`));
|
|
1379
|
+
console.log(pc.gray(` AI 置信度: ${confidenceIcon} ${s.confidence}`));
|
|
1380
|
+
if (s.explanation) {
|
|
1381
|
+
console.log(pc.gray(` 说明: ${s.explanation}`));
|
|
1382
|
+
}
|
|
1383
|
+
console.log(pc.gray(` 模型: ${s.model}`));
|
|
1384
|
+
}
|
|
1385
|
+
} else {
|
|
1386
|
+
console.log(pc.gray(" 未生成 AI 修复建议"));
|
|
1387
|
+
}
|
|
1388
|
+
} else {
|
|
1389
|
+
console.log(pc.gray(" 所有问题都有自动修复,无需 AI 建议"));
|
|
1390
|
+
}
|
|
1391
|
+
console.log("");
|
|
1392
|
+
} else {
|
|
1393
|
+
console.log(pc.yellow(" ⚠️ 未检测到 AI 配置。请设置 FG_AI_API_KEY 或 OPENAI_API_KEY 环境变量。"));
|
|
1394
|
+
console.log("");
|
|
1395
|
+
}
|
|
1396
|
+
}
|
|
1397
|
+
|
|
1216
1398
|
console.log(
|
|
1217
1399
|
pc.gray(
|
|
1218
1400
|
`⏱️ 耗时: ${result.duration}ms | 扫描 ${result.filesScanned} 个文件 | ${result.filesWithIssues} 个文件有问题`
|
package/dist/index.d.ts
CHANGED
|
@@ -19,6 +19,12 @@ export { HistoryReport } from "./utils/history-report.js";
|
|
|
19
19
|
export type { HistoryEntry, TrendAnalysis, FullReport } from "./utils/history-report.js";
|
|
20
20
|
export { generateDashboard } from "./utils/dashboard.js";
|
|
21
21
|
export type { DashboardOptions } from "./utils/dashboard.js";
|
|
22
|
+
export { detectMonorepo, analyzeCrossPackageDeps } from "./utils/monorepo.js";
|
|
23
|
+
export type { MonorepoInfo, WorkspacePackage, CrossPackageIssue, MonorepoTool } from "./utils/monorepo.js";
|
|
24
|
+
export { scanWorkspace, formatWorkspaceReport, formatWorkspaceJson } from "./utils/workspace-scanner.js";
|
|
25
|
+
export type { WorkspaceScanResult, PackageScanResult, WorkspaceSummary, WorkspaceScanOptions } from "./utils/workspace-scanner.js";
|
|
26
|
+
export { AIFixSuggester, detectAIConfig, generateAIFixSuggestions } from "./utils/ai-fix-suggester.js";
|
|
27
|
+
export type { AIConfig, AIProvider, AIFixSuggestion } from "./utils/ai-fix-suggester.js";
|
|
22
28
|
export { uploadReport, detectUploadConfig } from "./utils/report-uploader.js";
|
|
23
29
|
export type { UploadConfig, UploadResult } from "./utils/report-uploader.js";
|
|
24
30
|
export { runFixBot, detectFixBotConfig } from "./utils/fix-bot.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* 导出所有公共 API
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.
|
|
8
|
-
exports.getJSXTagName = exports.getFileExt = exports.svelteRules = exports.platformRules = exports.hooksRules = exports.componentRules = exports.crossFileRules = exports.namingRules = exports.securityRules = exports.a11yRules = exports.performanceRules = exports.i18nRules = exports.runAllExternalTools = exports.stylelintIntegration = void 0;
|
|
7
|
+
exports.isGuardianComment = exports.COMMENT_MARKER = exports.generatePRCommentSummary = exports.generatePRComment = exports.writeJobSummary = exports.isGitHubActions = exports.formatAllAnnotations = exports.formatIssuesAnnotations = exports.formatIssueAnnotation = exports.formatSarif = exports.generateSarif = exports.toBaselineIssue = exports.saveBaseline = exports.loadBaseline = exports.generateBaseline = exports.compareWithBaseline = exports.BaselineManager = exports.detectFixBotConfig = exports.runFixBot = exports.detectUploadConfig = exports.uploadReport = exports.generateAIFixSuggestions = exports.detectAIConfig = exports.AIFixSuggester = exports.formatWorkspaceJson = exports.formatWorkspaceReport = exports.scanWorkspace = exports.analyzeCrossPackageDeps = exports.detectMonorepo = exports.generateDashboard = exports.HistoryReport = exports.detectCIProvider = exports.generateCIConfig = exports.detectHusky = exports.hasGitHook = exports.uninstallGitHooks = exports.installGitHooks = exports.generateDefaultConfig = exports.initConfig = exports.loadConfig = exports.detectProjectMeta = exports.walkAST = exports.hasImport = exports.getImports = exports.parseAST = exports.createRegistry = exports.RuleRegistry = exports.SmartCache = exports.createEngine = exports.RuleEngine = void 0;
|
|
8
|
+
exports.getJSXTagName = exports.getFileExt = exports.svelteRules = exports.platformRules = exports.hooksRules = exports.componentRules = exports.crossFileRules = exports.namingRules = exports.securityRules = exports.a11yRules = exports.performanceRules = exports.i18nRules = exports.runAllExternalTools = exports.stylelintIntegration = exports.typescriptIntegration = exports.eslintIntegration = exports.allExternalTools = exports.autoPublishComment = exports.createPublisher = exports.detectPublisherConfig = exports.GitLabMRPublisher = exports.GitHubPRPublisher = void 0;
|
|
9
9
|
var rule_engine_js_1 = require("./engine/rule-engine.js");
|
|
10
10
|
Object.defineProperty(exports, "RuleEngine", { enumerable: true, get: function () { return rule_engine_js_1.RuleEngine; } });
|
|
11
11
|
Object.defineProperty(exports, "createEngine", { enumerable: true, get: function () { return rule_engine_js_1.createEngine; } });
|
|
@@ -39,6 +39,19 @@ Object.defineProperty(exports, "HistoryReport", { enumerable: true, get: functio
|
|
|
39
39
|
// v2.8.0: 趋势看板
|
|
40
40
|
var dashboard_js_1 = require("./utils/dashboard.js");
|
|
41
41
|
Object.defineProperty(exports, "generateDashboard", { enumerable: true, get: function () { return dashboard_js_1.generateDashboard; } });
|
|
42
|
+
// v2.9.0: Monorepo 工作区支持
|
|
43
|
+
var monorepo_js_1 = require("./utils/monorepo.js");
|
|
44
|
+
Object.defineProperty(exports, "detectMonorepo", { enumerable: true, get: function () { return monorepo_js_1.detectMonorepo; } });
|
|
45
|
+
Object.defineProperty(exports, "analyzeCrossPackageDeps", { enumerable: true, get: function () { return monorepo_js_1.analyzeCrossPackageDeps; } });
|
|
46
|
+
var workspace_scanner_js_1 = require("./utils/workspace-scanner.js");
|
|
47
|
+
Object.defineProperty(exports, "scanWorkspace", { enumerable: true, get: function () { return workspace_scanner_js_1.scanWorkspace; } });
|
|
48
|
+
Object.defineProperty(exports, "formatWorkspaceReport", { enumerable: true, get: function () { return workspace_scanner_js_1.formatWorkspaceReport; } });
|
|
49
|
+
Object.defineProperty(exports, "formatWorkspaceJson", { enumerable: true, get: function () { return workspace_scanner_js_1.formatWorkspaceJson; } });
|
|
50
|
+
// v3.0.0: AI 修复建议
|
|
51
|
+
var ai_fix_suggester_js_1 = require("./utils/ai-fix-suggester.js");
|
|
52
|
+
Object.defineProperty(exports, "AIFixSuggester", { enumerable: true, get: function () { return ai_fix_suggester_js_1.AIFixSuggester; } });
|
|
53
|
+
Object.defineProperty(exports, "detectAIConfig", { enumerable: true, get: function () { return ai_fix_suggester_js_1.detectAIConfig; } });
|
|
54
|
+
Object.defineProperty(exports, "generateAIFixSuggestions", { enumerable: true, get: function () { return ai_fix_suggester_js_1.generateAIFixSuggestions; } });
|
|
42
55
|
// v2.5.0: 报告上传
|
|
43
56
|
var report_uploader_js_1 = require("./utils/report-uploader.js");
|
|
44
57
|
Object.defineProperty(exports, "uploadReport", { enumerable: true, get: function () { return report_uploader_js_1.uploadReport; } });
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;AAEH,0DAAmE;AAA1D,4GAAA,UAAU,OAAA;AAAE,8GAAA,YAAY,OAAA;AAEjC,8CAA+C;AAAtC,sGAAA,UAAU,OAAA;AAEnB,mDAAmE;AAA1D,2GAAA,YAAY,OAAA;AAAE,6GAAA,cAAc,OAAA;AAsBrC,uDAAiF;AAAxE,yGAAA,QAAQ,OAAA;AAAE,2GAAA,UAAU,OAAA;AAAE,0GAAA,SAAS,OAAA;AAAE,wGAAA,OAAO,OAAA;AACjD,mEAAgE;AAAvD,wHAAA,iBAAiB,OAAA;AAC1B,6DAAsD;AAA7C,8GAAA,UAAU,OAAA;AACnB,yDAA2E;AAAlE,4GAAA,UAAU,OAAA;AAAE,uHAAA,qBAAqB,OAAA;AAC1C,qDAAmG;AAA1F,+GAAA,eAAe,OAAA;AAAE,iHAAA,iBAAiB,OAAA;AAAE,0GAAA,UAAU,OAAA;AAAE,2GAAA,WAAW,OAAA;AACpE,2DAA6E;AAApE,mHAAA,gBAAgB,OAAA;AAAE,mHAAA,gBAAgB,OAAA;AAE3C,+DAA0D;AAAjD,kHAAA,aAAa,OAAA;AAGtB,eAAe;AACf,qDAAyD;AAAhD,iHAAA,iBAAiB,OAAA;AAG1B,eAAe;AACf,iEAA8E;AAArE,kHAAA,YAAY,OAAA;AAAE,wHAAA,kBAAkB,OAAA;AAGzC,mBAAmB;AACnB,iDAAmE;AAA1D,uGAAA,SAAS,OAAA;AAAE,gHAAA,kBAAkB,OAAA;AAGtC,4BAA4B;AAC5B,mDAA0I;AAAjI,8GAAA,eAAe,OAAA;AAAE,kHAAA,mBAAmB,OAAA;AAAE,+GAAA,gBAAgB,OAAA;AAAE,2GAAA,YAAY,OAAA;AAAE,2GAAA,YAAY,OAAA;AAAE,8GAAA,eAAe,OAAA;AAG5G,0BAA0B;AAC1B,kDAAmE;AAA1D,yGAAA,aAAa,OAAA;AAAE,uGAAA,WAAW,OAAA;AAGnC,0CAA0C;AAC1C,0EAM2C;AALvC,6HAAA,qBAAqB,OAAA;AACrB,+HAAA,uBAAuB,OAAA;AACvB,4HAAA,oBAAoB,OAAA;AACpB,uHAAA,eAAe,OAAA;AACf,uHAAA,eAAe,OAAA;AAGnB,qBAAqB;AACrB,4DAKoC;AAJhC,kHAAA,iBAAiB,OAAA;AACjB,yHAAA,wBAAwB,OAAA;AACxB,+GAAA,cAAc,OAAA;AACd,kHAAA,iBAAiB,OAAA;AAIrB,2DAMiC;AAL7B,oHAAA,iBAAiB,OAAA;AACjB,oHAAA,iBAAiB,OAAA;AACjB,wHAAA,qBAAqB,OAAA;AACrB,kHAAA,eAAe,OAAA;AACf,qHAAA,kBAAkB,OAAA;AAItB,kBAAkB;AAClB,oDAMiC;AAL7B,4GAAA,gBAAgB,OAAA;AAChB,6GAAA,iBAAiB,OAAA;AACjB,iHAAA,qBAAqB,OAAA;AACrB,gHAAA,oBAAoB,OAAA;AACpB,+GAAA,mBAAmB,OAAA;AAIvB,8DAAuD;AAA9C,4GAAA,SAAS,OAAA;AAElB,4EAAqE;AAA5D,0HAAA,gBAAgB,OAAA;AACzB,8DAAuD;AAA9C,4GAAA,SAAS,OAAA;AAClB,sEAA+D;AAAtD,oHAAA,aAAa,OAAA;AACtB,kEAA2D;AAAlD,gHAAA,WAAW,OAAA;AACpB,0EAAkE;AAAzD,uHAAA,cAAc,OAAA;AACvB,wEAAiE;AAAxD,sHAAA,cAAc,OAAA;AACvB,gEAAyD;AAAhD,8GAAA,UAAU,OAAA;AACnB,sEAA+D;AAAtD,oHAAA,aAAa,OAAA;AACtB,kEAA2D;AAAlD,gHAAA,WAAW,OAAA;AACpB,+CAA8D;AAArD,uGAAA,UAAU,OAAA;AAAE,0GAAA,aAAa,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Fix Suggester — LLM 驱动的 Issue 修复建议
|
|
3
|
+
*
|
|
4
|
+
* v3.0.0 功能:
|
|
5
|
+
* 1. 为无自动修复的 Issue 生成 AI 修复建议
|
|
6
|
+
* 2. 为低置信度修复提供替代方案
|
|
7
|
+
* 3. 支持 OpenAI / Claude API
|
|
8
|
+
* 4. 建议缓存避免重复调用
|
|
9
|
+
*/
|
|
10
|
+
import type { Issue, Fix, FixConfidence } from "../types.js";
|
|
11
|
+
/** AI 提供商 */
|
|
12
|
+
export type AIProvider = "openai" | "claude" | "auto";
|
|
13
|
+
/** AI 修复建议结果 */
|
|
14
|
+
export interface AIFixSuggestion {
|
|
15
|
+
/** 原始 Issue */
|
|
16
|
+
issue: Issue;
|
|
17
|
+
/** AI 生成的修复 */
|
|
18
|
+
fix: Fix;
|
|
19
|
+
/** AI 修复的置信度 */
|
|
20
|
+
confidence: FixConfidence;
|
|
21
|
+
/** AI 对修复的解释 */
|
|
22
|
+
explanation?: string;
|
|
23
|
+
/** 使用的模型 */
|
|
24
|
+
model?: string;
|
|
25
|
+
}
|
|
26
|
+
/** AI 配置 */
|
|
27
|
+
export interface AIConfig {
|
|
28
|
+
/** 提供商 */
|
|
29
|
+
provider: AIProvider;
|
|
30
|
+
/** API Key */
|
|
31
|
+
apiKey: string;
|
|
32
|
+
/** 模型名称 */
|
|
33
|
+
model: string;
|
|
34
|
+
/** API 基础 URL(可选,用于自定义端点) */
|
|
35
|
+
baseUrl?: string;
|
|
36
|
+
/** 最大 token 数 */
|
|
37
|
+
maxTokens?: number;
|
|
38
|
+
/** 温度 */
|
|
39
|
+
temperature?: number;
|
|
40
|
+
/** 是否启用缓存 */
|
|
41
|
+
cacheEnabled?: boolean;
|
|
42
|
+
/** 缓存目录 */
|
|
43
|
+
cacheDir?: string;
|
|
44
|
+
}
|
|
45
|
+
/** 从环境变量检测 AI 配置 */
|
|
46
|
+
export declare function detectAIConfig(): AIConfig | null;
|
|
47
|
+
/**
|
|
48
|
+
* AI 修复建议器
|
|
49
|
+
*/
|
|
50
|
+
export declare class AIFixSuggester {
|
|
51
|
+
private config;
|
|
52
|
+
private cacheDir?;
|
|
53
|
+
constructor(config: AIConfig);
|
|
54
|
+
/**
|
|
55
|
+
* 为单个 Issue 生成 AI 修复建议
|
|
56
|
+
*/
|
|
57
|
+
suggestFix(issue: Issue, projectDir: string): Promise<AIFixSuggestion | null>;
|
|
58
|
+
/**
|
|
59
|
+
* 批量生成 AI 修复建议
|
|
60
|
+
*/
|
|
61
|
+
suggestFixes(issues: Issue[], projectDir: string): Promise<AIFixSuggestion[]>;
|
|
62
|
+
/** 构建给 LLM 的 prompt */
|
|
63
|
+
private buildPrompt;
|
|
64
|
+
/** 调用 LLM API */
|
|
65
|
+
private callLLM;
|
|
66
|
+
/** 调用 Claude API */
|
|
67
|
+
private callClaude;
|
|
68
|
+
/** 调用 OpenAI API */
|
|
69
|
+
private callOpenAI;
|
|
70
|
+
/** 解析 LLM 响应 */
|
|
71
|
+
private parseResponse;
|
|
72
|
+
/** 读取源代码文件 */
|
|
73
|
+
private readSource;
|
|
74
|
+
/** 生成缓存 key */
|
|
75
|
+
private getCacheKey;
|
|
76
|
+
/** 读取缓存 */
|
|
77
|
+
private readCache;
|
|
78
|
+
/** 写入缓存 */
|
|
79
|
+
private writeCache;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* 为 Issue 列表生成 AI 修复建议的便捷函数
|
|
83
|
+
*/
|
|
84
|
+
export declare function generateAIFixSuggestions(issues: Issue[], projectDir: string, config?: Partial<AIConfig>): Promise<AIFixSuggestion[]>;
|
|
85
|
+
//# sourceMappingURL=ai-fix-suggester.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-fix-suggester.d.ts","sourceRoot":"","sources":["../../src/utils/ai-fix-suggester.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE5D,aAAa;AACb,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEtD,gBAAgB;AAChB,MAAM,WAAW,eAAe;IAC5B,eAAe;IACf,KAAK,EAAE,KAAK,CAAC;IACb,eAAe;IACf,GAAG,EAAE,GAAG,CAAC;IACT,gBAAgB;IAChB,UAAU,EAAE,aAAa,CAAC;IAC1B,gBAAgB;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,YAAY;AACZ,MAAM,WAAW,QAAQ;IACrB,UAAU;IACV,QAAQ,EAAE,UAAU,CAAC;IACrB,cAAc;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;IACd,6BAA6B;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS;IACT,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa;IACb,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,oBAAoB;AACpB,wBAAgB,cAAc,IAAI,QAAQ,GAAG,IAAI,CAiChD;AAED;;GAEG;AACH,qBAAa,cAAc;IACvB,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,QAAQ,CAAC,CAAS;gBAEd,MAAM,EAAE,QAAQ;IAO5B;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAmCnF;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAanF,uBAAuB;IACvB,OAAO,CAAC,WAAW;IAgCnB,iBAAiB;YACH,OAAO;IAOrB,oBAAoB;YACN,UAAU;IAyBxB,oBAAoB;YACN,UAAU;IAwBxB,gBAAgB;IAChB,OAAO,CAAC,aAAa;IAiCrB,cAAc;IACd,OAAO,CAAC,UAAU;IAqBlB,eAAe;IACf,OAAO,CAAC,WAAW;IAQnB,WAAW;IACX,OAAO,CAAC,SAAS;IAYjB,WAAW;IACX,OAAO,CAAC,UAAU;CAYrB;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC1C,MAAM,EAAE,KAAK,EAAE,EACf,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,GAC3B,OAAO,CAAC,eAAe,EAAE,CAAC,CAa5B"}
|