@kevinrabun/judges 3.119.0 → 3.122.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/README.md +1 -1
- package/dist/api.d.ts +2 -1
- package/dist/api.js +3 -1
- package/dist/cli-dispatch.d.ts +7 -0
- package/dist/cli-dispatch.js +654 -0
- package/dist/cli-formatters.d.ts +6 -0
- package/dist/cli-formatters.js +186 -0
- package/dist/cli.js +69 -4159
- package/dist/commands/baseline.js +2 -42
- package/dist/commands/coverage.js +3 -39
- package/dist/commands/diff.js +2 -38
- package/dist/commands/fix-pr.js +2 -23
- package/dist/commands/fix.js +3 -27
- package/dist/commands/llm-benchmark.d.ts +7 -0
- package/dist/commands/llm-benchmark.js +27 -1
- package/dist/commands/quality-gate.js +1 -12
- package/dist/commands/review-parallel.js +1 -19
- package/dist/commands/review.js +2 -33
- package/dist/commands/rule-test.js +1 -15
- package/dist/commands/tune.js +2 -29
- package/dist/commands/watch.js +3 -42
- package/dist/config.js +1 -1
- package/dist/evaluators/hallucination-detection.js +343 -0
- package/dist/evaluators/index.d.ts +2 -11
- package/dist/evaluators/index.js +3 -181
- package/dist/evaluators/security.js +226 -2
- package/dist/evaluators/suppressions.d.ts +49 -0
- package/dist/evaluators/suppressions.js +185 -0
- package/dist/ext-to-lang.d.ts +16 -0
- package/dist/ext-to-lang.js +60 -0
- package/dist/github-app.d.ts +1 -3
- package/dist/github-app.js +2 -34
- package/dist/parallel.js +2 -14
- package/dist/probabilistic/llm-response-validator.js +1 -1
- package/dist/reports/public-repo-report.js +9 -1
- package/dist/skill-loader.js +9 -6
- package/dist/tools/register-evaluation.js +2 -29
- package/package.json +1 -1
- package/server.json +2 -2
- package/src/skill-loader.ts +9 -6
package/dist/cli.js
CHANGED
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
* judges hook install # install pre-commit
|
|
21
21
|
* judges eval --help # show help
|
|
22
22
|
*/
|
|
23
|
-
import { readFileSync, existsSync, writeFileSync, readdirSync, statSync
|
|
23
|
+
import { readFileSync, existsSync, writeFileSync, readdirSync, statSync } from "fs";
|
|
24
24
|
import { resolve, extname, dirname, join, relative } from "path";
|
|
25
25
|
import { fileURLToPath } from "url";
|
|
26
26
|
import { matchesGlob } from "./cli-helpers.js";
|
|
@@ -29,12 +29,10 @@ export { globToRegex, matchesGlob } from "./cli-helpers.js";
|
|
|
29
29
|
import { evaluateWithTribunal, evaluateWithJudge, formatVerdictAsMarkdown, formatEvaluationAsMarkdown, } from "./evaluators/index.js";
|
|
30
30
|
import { runSkill } from "./skill-loader.js";
|
|
31
31
|
import { getJudge, getJudgeSummaries } from "./judges/index.js";
|
|
32
|
-
import { verdictToSarif } from "./formatters/sarif.js";
|
|
33
32
|
import { verdictToHtml } from "./formatters/html.js";
|
|
34
33
|
import { verdictToJUnit } from "./formatters/junit.js";
|
|
35
34
|
import { verdictToPdfHtml } from "./formatters/pdf.js";
|
|
36
35
|
import { verdictToCodeClimate } from "./formatters/codeclimate.js";
|
|
37
|
-
import { verdictToGitHubActions } from "./formatters/github-actions.js";
|
|
38
36
|
import { loadBaselineData, isBaselined } from "./commands/baseline.js";
|
|
39
37
|
import { getPreset, listPresets, composePresets } from "./presets.js";
|
|
40
38
|
import { parseConfig } from "./config.js";
|
|
@@ -44,50 +42,14 @@ import { contentHash } from "./cache.js";
|
|
|
44
42
|
import { formatComparisonReport, formatFullComparisonMatrix, TOOL_PROFILES } from "./comparison.js";
|
|
45
43
|
import { loadOverrideStore, applyOverrides } from "./commands/override.js";
|
|
46
44
|
import { runGit } from "./tools/command-safety.js";
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
".js": "javascript",
|
|
52
|
-
".jsx": "javascript",
|
|
53
|
-
".mjs": "javascript",
|
|
54
|
-
".cjs": "javascript",
|
|
55
|
-
".py": "python",
|
|
56
|
-
".rs": "rust",
|
|
57
|
-
".go": "go",
|
|
58
|
-
".java": "java",
|
|
59
|
-
".cs": "csharp",
|
|
60
|
-
".rb": "ruby",
|
|
61
|
-
".php": "php",
|
|
62
|
-
".swift": "swift",
|
|
63
|
-
".kt": "kotlin",
|
|
64
|
-
".scala": "scala",
|
|
65
|
-
".c": "c",
|
|
66
|
-
".cpp": "cpp",
|
|
67
|
-
".h": "c",
|
|
68
|
-
".hpp": "cpp",
|
|
69
|
-
".yaml": "yaml",
|
|
70
|
-
".yml": "yaml",
|
|
71
|
-
".json": "json",
|
|
72
|
-
".tf": "terraform",
|
|
73
|
-
".hcl": "terraform",
|
|
74
|
-
".dockerfile": "dockerfile",
|
|
75
|
-
".sh": "bash",
|
|
76
|
-
".bash": "bash",
|
|
77
|
-
".ps1": "powershell",
|
|
78
|
-
".psm1": "powershell",
|
|
79
|
-
".dart": "dart",
|
|
80
|
-
".sql": "sql",
|
|
81
|
-
".bicep": "bicep",
|
|
82
|
-
};
|
|
45
|
+
import { detectLanguageFromPath, SUPPORTED_EXTENSIONS } from "./ext-to-lang.js";
|
|
46
|
+
import { formatTribunalOutput, writeOutputIfSpecified, formatSingleJudgeTextOutput, } from "./cli-formatters.js";
|
|
47
|
+
import { COMMAND_TABLE } from "./cli-dispatch.js";
|
|
48
|
+
// ─── Language Detection ─────────────────────────────────────────────────────
|
|
83
49
|
function detectLanguage(filePath) {
|
|
84
50
|
if (!filePath)
|
|
85
51
|
return undefined;
|
|
86
|
-
|
|
87
|
-
if (base.endsWith("dockerfile") || base.includes("dockerfile."))
|
|
88
|
-
return "dockerfile";
|
|
89
|
-
const ext = extname(base);
|
|
90
|
-
return EXT_TO_LANG[ext];
|
|
52
|
+
return detectLanguageFromPath(filePath);
|
|
91
53
|
}
|
|
92
54
|
function parseCliArgs(argv) {
|
|
93
55
|
const args = {
|
|
@@ -392,7 +354,6 @@ function readCode(filePath) {
|
|
|
392
354
|
}
|
|
393
355
|
// Glob helpers moved to cli-helpers.ts for testability
|
|
394
356
|
// ─── Glob / Multi-File Resolution ───────────────────────────────────────────
|
|
395
|
-
const SUPPORTED_EXTENSIONS = new Set(Object.keys(EXT_TO_LANG));
|
|
396
357
|
const DEFAULT_SKIP_DIRS = new Set([
|
|
397
358
|
"node_modules",
|
|
398
359
|
".git",
|
|
@@ -511,189 +472,6 @@ function getStagedFiles(cwd) {
|
|
|
511
472
|
return [];
|
|
512
473
|
}
|
|
513
474
|
}
|
|
514
|
-
// ─── Format Output ──────────────────────────────────────────────────────────
|
|
515
|
-
function formatTribunalOutput(verdict, format, filePath) {
|
|
516
|
-
switch (format) {
|
|
517
|
-
case "json":
|
|
518
|
-
return JSON.stringify(verdict, null, 2);
|
|
519
|
-
case "sarif": {
|
|
520
|
-
// If filePath is not provided, sarif formatter will still produce a valid log
|
|
521
|
-
const sarif = verdictToSarif(verdict, filePath);
|
|
522
|
-
return JSON.stringify(sarif, null, 2);
|
|
523
|
-
}
|
|
524
|
-
case "markdown":
|
|
525
|
-
return formatVerdictAsMarkdown(verdict);
|
|
526
|
-
case "html":
|
|
527
|
-
// HTML is handled separately in runCli (needs async import)
|
|
528
|
-
return formatTextOutput(verdict);
|
|
529
|
-
case "github-actions":
|
|
530
|
-
return verdictToGitHubActions(verdict, filePath);
|
|
531
|
-
case "text":
|
|
532
|
-
default:
|
|
533
|
-
return formatTextOutput(verdict);
|
|
534
|
-
}
|
|
535
|
-
}
|
|
536
|
-
function writeOutputIfSpecified(outputPath, contents) {
|
|
537
|
-
if (!outputPath)
|
|
538
|
-
return;
|
|
539
|
-
const dir = dirname(outputPath);
|
|
540
|
-
try {
|
|
541
|
-
mkdirSync(dir, { recursive: true });
|
|
542
|
-
}
|
|
543
|
-
catch {
|
|
544
|
-
// directory may already exist
|
|
545
|
-
}
|
|
546
|
-
writeFileSync(outputPath, contents, "utf-8");
|
|
547
|
-
}
|
|
548
|
-
function formatTextOutput(verdict) {
|
|
549
|
-
const lines = [];
|
|
550
|
-
const totalFindings = verdict.evaluations.reduce((s, e) => s + e.findings.length, 0);
|
|
551
|
-
const fixableCount = verdict.evaluations.reduce((s, e) => s + e.findings.filter((f) => f.patch).length, 0);
|
|
552
|
-
lines.push("╔══════════════════════════════════════════════════════════════╗");
|
|
553
|
-
lines.push("║ Judges Panel — Evaluation Result ║");
|
|
554
|
-
lines.push("╚══════════════════════════════════════════════════════════════╝");
|
|
555
|
-
lines.push("");
|
|
556
|
-
lines.push(` Verdict : ${verdict.overallVerdict.toUpperCase()}`);
|
|
557
|
-
lines.push(` Score : ${verdict.overallScore}/100`);
|
|
558
|
-
lines.push(` Critical : ${verdict.criticalCount}`);
|
|
559
|
-
lines.push(` High : ${verdict.highCount}`);
|
|
560
|
-
lines.push(` Findings : ${totalFindings}${fixableCount > 0 ? ` (${fixableCount} auto-fixable)` : ""}`);
|
|
561
|
-
lines.push(` Judges : ${verdict.evaluations.length}`);
|
|
562
|
-
lines.push("");
|
|
563
|
-
// Per-judge table
|
|
564
|
-
lines.push(" Per-Judge Breakdown:");
|
|
565
|
-
lines.push(" " + "─".repeat(60));
|
|
566
|
-
for (const evaluation of verdict.evaluations) {
|
|
567
|
-
const icon = evaluation.verdict === "pass" ? "✅" : evaluation.verdict === "warning" ? "⚠️ " : "❌";
|
|
568
|
-
const name = evaluation.judgeName.padEnd(28);
|
|
569
|
-
const score = String(evaluation.score).padStart(3);
|
|
570
|
-
const findings = String(evaluation.findings.length).padStart(2);
|
|
571
|
-
const timing = evaluation.durationMs !== undefined ? ` ${evaluation.durationMs}ms` : "";
|
|
572
|
-
lines.push(` ${icon} ${name} ${score}/100 ${findings} finding(s)${timing}`);
|
|
573
|
-
}
|
|
574
|
-
lines.push("");
|
|
575
|
-
// Timing summary
|
|
576
|
-
if (verdict.timing) {
|
|
577
|
-
lines.push(` Total evaluation time: ${verdict.timing.totalMs}ms`);
|
|
578
|
-
const sorted = [...verdict.timing.perJudge].sort((a, b) => b.durationMs - a.durationMs);
|
|
579
|
-
const slowest = sorted.slice(0, 5);
|
|
580
|
-
if (slowest.length > 0) {
|
|
581
|
-
lines.push(" Slowest judges:");
|
|
582
|
-
for (const j of slowest) {
|
|
583
|
-
lines.push(` ${j.judgeName.padEnd(28)} ${j.durationMs}ms`);
|
|
584
|
-
}
|
|
585
|
-
}
|
|
586
|
-
lines.push("");
|
|
587
|
-
}
|
|
588
|
-
// Suppression metrics
|
|
589
|
-
if (verdict.suppressions && verdict.suppressions.length > 0) {
|
|
590
|
-
const supps = verdict.suppressions;
|
|
591
|
-
const byKind = { line: 0, "next-line": 0, block: 0, file: 0 };
|
|
592
|
-
const byRule = new Map();
|
|
593
|
-
for (const s of supps) {
|
|
594
|
-
byKind[s.kind] = (byKind[s.kind] || 0) + 1;
|
|
595
|
-
byRule.set(s.ruleId, (byRule.get(s.ruleId) ?? 0) + 1);
|
|
596
|
-
}
|
|
597
|
-
lines.push(` Suppressed Findings: ${supps.length}`);
|
|
598
|
-
const kinds = Object.entries(byKind)
|
|
599
|
-
.filter(([, v]) => v > 0)
|
|
600
|
-
.map(([k, v]) => `${k}: ${v}`);
|
|
601
|
-
lines.push(` By type: ${kinds.join(", ")}`);
|
|
602
|
-
const topRules = [...byRule.entries()].sort((a, b) => b[1] - a[1]).slice(0, 5);
|
|
603
|
-
if (topRules.length > 0) {
|
|
604
|
-
lines.push(` Top suppressed rules: ${topRules.map(([r, c]) => `${r} (${c})`).join(", ")}`);
|
|
605
|
-
}
|
|
606
|
-
lines.push("");
|
|
607
|
-
}
|
|
608
|
-
// Top findings
|
|
609
|
-
const allFindings = verdict.evaluations.flatMap((e) => e.findings);
|
|
610
|
-
const critical = allFindings.filter((f) => f.severity === "critical" || f.severity === "high");
|
|
611
|
-
if (critical.length > 0) {
|
|
612
|
-
lines.push(" Critical & High Findings:");
|
|
613
|
-
lines.push(" " + "─".repeat(60));
|
|
614
|
-
for (const f of critical.slice(0, 20)) {
|
|
615
|
-
const fixTag = f.patch ? " 🔧" : "";
|
|
616
|
-
const confTag = f.confidence !== undefined ? ` (${Math.round(f.confidence * 100)}% confidence)` : "";
|
|
617
|
-
lines.push(` [${f.severity.toUpperCase().padEnd(8)}] ${f.ruleId}: ${f.title}${fixTag}${confTag}`);
|
|
618
|
-
if (f.lineNumbers && f.lineNumbers.length > 0) {
|
|
619
|
-
lines.push(` Line ${f.lineNumbers[0]}: ${f.description.slice(0, 100)}`);
|
|
620
|
-
}
|
|
621
|
-
if (f.provenance) {
|
|
622
|
-
lines.push(` Evidence: ${f.provenance}`);
|
|
623
|
-
}
|
|
624
|
-
if (f.evidenceBasis) {
|
|
625
|
-
lines.push(` Basis: ${f.evidenceBasis}`);
|
|
626
|
-
}
|
|
627
|
-
if (f.evidenceChain && f.evidenceChain.steps.length > 0) {
|
|
628
|
-
lines.push(` Impact: ${f.evidenceChain.impactStatement}`);
|
|
629
|
-
for (const step of f.evidenceChain.steps.slice(0, 3)) {
|
|
630
|
-
const loc = step.line ? ` (L${step.line})` : "";
|
|
631
|
-
lines.push(` → [${step.source}]${loc} ${step.observation}`);
|
|
632
|
-
}
|
|
633
|
-
}
|
|
634
|
-
if (f.cweIds && f.cweIds.length > 0) {
|
|
635
|
-
lines.push(` CWE: ${f.cweIds.join(", ")}`);
|
|
636
|
-
}
|
|
637
|
-
if (f.owaspLlmTop10) {
|
|
638
|
-
lines.push(` OWASP LLM: ${f.owaspLlmTop10}`);
|
|
639
|
-
}
|
|
640
|
-
if (f.learnMoreUrl) {
|
|
641
|
-
lines.push(` 📖 Learn more: ${f.learnMoreUrl}`);
|
|
642
|
-
}
|
|
643
|
-
}
|
|
644
|
-
if (critical.length > 20) {
|
|
645
|
-
lines.push(` ... and ${critical.length - 20} more critical/high findings`);
|
|
646
|
-
}
|
|
647
|
-
lines.push("");
|
|
648
|
-
}
|
|
649
|
-
// Exit guidance
|
|
650
|
-
if (verdict.overallVerdict === "fail") {
|
|
651
|
-
lines.push(" ⛔ FAIL — This code has issues that should be addressed before shipping.");
|
|
652
|
-
}
|
|
653
|
-
else if (verdict.overallVerdict === "warning") {
|
|
654
|
-
lines.push(" ⚠️ WARNING — Review findings above before proceeding.");
|
|
655
|
-
}
|
|
656
|
-
else {
|
|
657
|
-
lines.push(" ✅ PASS — No critical issues detected.");
|
|
658
|
-
}
|
|
659
|
-
if (fixableCount > 0) {
|
|
660
|
-
lines.push(` 🔧 ${fixableCount} finding(s) can be auto-fixed. Run: judges eval <file> --fix`);
|
|
661
|
-
}
|
|
662
|
-
lines.push("");
|
|
663
|
-
return lines.join("\n");
|
|
664
|
-
}
|
|
665
|
-
function formatSingleJudgeTextOutput(evaluation) {
|
|
666
|
-
const lines = [];
|
|
667
|
-
lines.push("╔══════════════════════════════════════════════════════════════╗");
|
|
668
|
-
lines.push(`║ Judge: ${evaluation.judgeName.padEnd(49)}║`);
|
|
669
|
-
lines.push("╚══════════════════════════════════════════════════════════════╝");
|
|
670
|
-
lines.push("");
|
|
671
|
-
lines.push(` Verdict : ${evaluation.verdict.toUpperCase()}`);
|
|
672
|
-
lines.push(` Score : ${evaluation.score}/100`);
|
|
673
|
-
lines.push(` Findings : ${evaluation.findings.length}`);
|
|
674
|
-
lines.push("");
|
|
675
|
-
for (const f of evaluation.findings) {
|
|
676
|
-
const confTag = f.confidence !== undefined ? ` (${Math.round(f.confidence * 100)}%)` : "";
|
|
677
|
-
lines.push(` [${f.severity.toUpperCase().padEnd(8)}] ${f.ruleId}: ${f.title}${confTag}`);
|
|
678
|
-
if (f.lineNumbers && f.lineNumbers.length > 0) {
|
|
679
|
-
lines.push(` Line ${f.lineNumbers[0]}: ${f.description.slice(0, 120)}`);
|
|
680
|
-
}
|
|
681
|
-
if (f.provenance) {
|
|
682
|
-
lines.push(` Evidence: ${f.provenance}`);
|
|
683
|
-
}
|
|
684
|
-
if (f.evidenceChain && f.evidenceChain.steps.length > 0) {
|
|
685
|
-
lines.push(` Impact: ${f.evidenceChain.impactStatement}`);
|
|
686
|
-
}
|
|
687
|
-
if (f.suggestedFix) {
|
|
688
|
-
lines.push(` Fix: ${f.suggestedFix.slice(0, 120)}`);
|
|
689
|
-
}
|
|
690
|
-
if (f.learnMoreUrl) {
|
|
691
|
-
lines.push(` 📖 ${f.learnMoreUrl}`);
|
|
692
|
-
}
|
|
693
|
-
}
|
|
694
|
-
lines.push("");
|
|
695
|
-
return lines.join("\n");
|
|
696
|
-
}
|
|
697
475
|
// ─── List Judges ────────────────────────────────────────────────────────────
|
|
698
476
|
function listJudges() {
|
|
699
477
|
const judges = getJudgeSummaries();
|
|
@@ -785,18 +563,6 @@ export async function runCli(argv) {
|
|
|
785
563
|
await runInit(args.file || ".");
|
|
786
564
|
process.exit(0);
|
|
787
565
|
}
|
|
788
|
-
// ─── Fix Command ──────────────────────────────────────────────────────
|
|
789
|
-
if (args.command === "fix") {
|
|
790
|
-
const { runFix } = await import("./commands/fix.js");
|
|
791
|
-
runFix(argv);
|
|
792
|
-
return; // runFix calls process.exit internally
|
|
793
|
-
}
|
|
794
|
-
// ─── Fix-PR Command ──────────────────────────────────────────────────
|
|
795
|
-
if (args.command === "fix-pr") {
|
|
796
|
-
const { runFixPr } = await import("./commands/fix-pr.js");
|
|
797
|
-
await runFixPr(argv);
|
|
798
|
-
return;
|
|
799
|
-
}
|
|
800
566
|
// ─── Watch Command ────────────────────────────────────────────────────
|
|
801
567
|
if (args.command === "watch") {
|
|
802
568
|
const { runWatch } = await import("./commands/watch.js");
|
|
@@ -814,89 +580,11 @@ export async function runCli(argv) {
|
|
|
814
580
|
runLsp(argv);
|
|
815
581
|
return; // LSP server runs indefinitely
|
|
816
582
|
}
|
|
817
|
-
// ─── Report Command ───────────────────────────────────────────────────
|
|
818
|
-
if (args.command === "report") {
|
|
819
|
-
const { runReport } = await import("./commands/report.js");
|
|
820
|
-
runReport(argv);
|
|
821
|
-
return;
|
|
822
|
-
}
|
|
823
|
-
// ─── Hook Command ────────────────────────────────────────────────────
|
|
824
|
-
if (args.command === "hook") {
|
|
825
|
-
const { runHook } = await import("./commands/hook.js");
|
|
826
|
-
runHook(argv);
|
|
827
|
-
return;
|
|
828
|
-
}
|
|
829
|
-
// ─── Diff Command ────────────────────────────────────────────────────
|
|
830
|
-
if (args.command === "diff") {
|
|
831
|
-
const { runDiff } = await import("./commands/diff.js");
|
|
832
|
-
runDiff(argv);
|
|
833
|
-
return;
|
|
834
|
-
}
|
|
835
|
-
// ─── Deps Command ────────────────────────────────────────────────────
|
|
836
|
-
if (args.command === "deps") {
|
|
837
|
-
const { runDeps } = await import("./commands/deps.js");
|
|
838
|
-
runDeps(argv);
|
|
839
|
-
return;
|
|
840
|
-
}
|
|
841
|
-
// ─── Doctor Command ──────────────────────────────────────────────────
|
|
842
|
-
if (args.command === "doctor") {
|
|
843
|
-
const { runDoctor } = await import("./commands/doctor.js");
|
|
844
|
-
runDoctor(argv);
|
|
845
|
-
return;
|
|
846
|
-
}
|
|
847
|
-
// ─── Baseline Command ────────────────────────────────────────────────
|
|
848
|
-
if (args.command === "baseline") {
|
|
849
|
-
const { runBaseline } = await import("./commands/baseline.js");
|
|
850
|
-
runBaseline(argv);
|
|
851
|
-
return;
|
|
852
|
-
}
|
|
853
583
|
// ─── CI Templates Command ────────────────────────────────────────────
|
|
854
584
|
if (args.command === "ci-templates") {
|
|
855
585
|
await runCiTemplates(argv);
|
|
856
586
|
return;
|
|
857
587
|
}
|
|
858
|
-
// ─── Completions Command ─────────────────────────────────────────────
|
|
859
|
-
if (args.command === "completions") {
|
|
860
|
-
const { runCompletions } = await import("./commands/completions.js");
|
|
861
|
-
runCompletions(argv);
|
|
862
|
-
return;
|
|
863
|
-
}
|
|
864
|
-
// ─── Docs Command ────────────────────────────────────────────────────
|
|
865
|
-
if (args.command === "docs") {
|
|
866
|
-
const { runDocs } = await import("./commands/docs.js");
|
|
867
|
-
runDocs(argv);
|
|
868
|
-
return;
|
|
869
|
-
}
|
|
870
|
-
// ─── Feedback Command ─────────────────────────────────────────────────
|
|
871
|
-
if (args.command === "feedback") {
|
|
872
|
-
const { runFeedback } = await import("./commands/feedback.js");
|
|
873
|
-
runFeedback(argv);
|
|
874
|
-
return;
|
|
875
|
-
}
|
|
876
|
-
// ─── Override Command ─────────────────────────────────────────────────
|
|
877
|
-
if (args.command === "override") {
|
|
878
|
-
const { runOverride } = await import("./commands/override.js");
|
|
879
|
-
runOverride(argv);
|
|
880
|
-
return;
|
|
881
|
-
}
|
|
882
|
-
// ─── Feedback-Rules Command ───────────────────────────────────────────
|
|
883
|
-
if (args.command === "feedback-rules") {
|
|
884
|
-
const { runFeedbackRules } = await import("./commands/feedback-rules.js");
|
|
885
|
-
runFeedbackRules(argv);
|
|
886
|
-
return;
|
|
887
|
-
}
|
|
888
|
-
// ─── Governance Command ───────────────────────────────────────────────
|
|
889
|
-
if (args.command === "governance") {
|
|
890
|
-
const { runGovernance } = await import("./commands/governance.js");
|
|
891
|
-
runGovernance(argv);
|
|
892
|
-
return;
|
|
893
|
-
}
|
|
894
|
-
// ─── Parity Command ──────────────────────────────────────────────────
|
|
895
|
-
if (args.command === "parity") {
|
|
896
|
-
const { runParity } = await import("./commands/parity.js");
|
|
897
|
-
runParity(argv);
|
|
898
|
-
return;
|
|
899
|
-
}
|
|
900
588
|
// ─── Compliance-Report Command ────────────────────────────────────────
|
|
901
589
|
if (args.command === "compliance-report") {
|
|
902
590
|
const { buildComplianceReport, formatComplianceReportText } = await import("./commands/compliance-report.js");
|
|
@@ -918,3857 +606,79 @@ export async function runCli(argv) {
|
|
|
918
606
|
}
|
|
919
607
|
return;
|
|
920
608
|
}
|
|
921
|
-
// ─── Triage Command ───────────────────────────────────────────────────
|
|
922
|
-
if (args.command === "triage") {
|
|
923
|
-
const { runTriage } = await import("./commands/triage.js");
|
|
924
|
-
runTriage(argv);
|
|
925
|
-
return;
|
|
926
|
-
}
|
|
927
|
-
// ─── Quality-Gate Command ─────────────────────────────────────────────
|
|
928
|
-
if (args.command === "quality-gate") {
|
|
929
|
-
const { runQualityGate } = await import("./commands/quality-gate.js");
|
|
930
|
-
runQualityGate(argv);
|
|
931
|
-
return;
|
|
932
|
-
}
|
|
933
|
-
// ─── Notify Command ─────────────────────────────────────────────────
|
|
934
|
-
if (args.command === "notify") {
|
|
935
|
-
const { runNotify } = await import("./commands/notify.js");
|
|
936
|
-
await runNotify(argv);
|
|
937
|
-
return;
|
|
938
|
-
}
|
|
939
|
-
// ─── Benchmark Command ────────────────────────────────────────────────
|
|
940
|
-
if (args.command === "benchmark") {
|
|
941
|
-
const { runBenchmark } = await import("./commands/benchmark.js");
|
|
942
|
-
runBenchmark(argv);
|
|
943
|
-
return;
|
|
944
|
-
}
|
|
945
|
-
// ─── Rule Command ─────────────────────────────────────────────────────
|
|
946
|
-
if (args.command === "rule") {
|
|
947
|
-
const { runRule } = await import("./commands/rule.js");
|
|
948
|
-
runRule(argv);
|
|
949
|
-
return;
|
|
950
|
-
}
|
|
951
|
-
// ─── Pack Command ─────────────────────────────────────────────────────
|
|
952
|
-
if (args.command === "pack") {
|
|
953
|
-
const { runPack } = await import("./commands/language-packs.js");
|
|
954
|
-
runPack(argv);
|
|
955
|
-
return;
|
|
956
|
-
}
|
|
957
|
-
// ─── Config Command ───────────────────────────────────────────────────
|
|
958
|
-
if (args.command === "config") {
|
|
959
|
-
const { runConfig } = await import("./commands/config-share.js");
|
|
960
|
-
runConfig(argv);
|
|
961
|
-
return;
|
|
962
|
-
}
|
|
963
|
-
// ─── Review Command ────────────────────────────────────────────────
|
|
964
|
-
if (args.command === "review") {
|
|
965
|
-
const { runReview } = await import("./commands/review.js");
|
|
966
|
-
await runReview(argv);
|
|
967
|
-
return;
|
|
968
|
-
}
|
|
969
609
|
// ─── App Command (GitHub App) ─────────────────────────────────────
|
|
970
610
|
if (args.command === "app") {
|
|
971
611
|
const { runAppCommand } = await import("./github-app.js");
|
|
972
612
|
runAppCommand(argv.slice(3));
|
|
973
613
|
return;
|
|
974
614
|
}
|
|
975
|
-
// ───
|
|
976
|
-
if (args.command === "
|
|
977
|
-
const
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
return;
|
|
992
|
-
}
|
|
993
|
-
// ─── Config-Migrate Command ───────────────────────────────────────
|
|
994
|
-
if (args.command === "config-migrate") {
|
|
995
|
-
const { runConfigMigrate } = await import("./commands/config-migrate.js");
|
|
996
|
-
runConfigMigrate(argv);
|
|
997
|
-
return;
|
|
998
|
-
}
|
|
999
|
-
// ─── Deprecated Rules Command ─────────────────────────────────────
|
|
1000
|
-
if (args.command === "deprecated") {
|
|
1001
|
-
const { runDeprecatedCommand } = await import("./commands/deprecated.js");
|
|
1002
|
-
runDeprecatedCommand(argv);
|
|
1003
|
-
return;
|
|
1004
|
-
}
|
|
1005
|
-
// ─── Dedup Report Command ─────────────────────────────────────────
|
|
1006
|
-
if (args.command === "dedup-report") {
|
|
1007
|
-
const { runDedupReport } = await import("./commands/dedup-report.js");
|
|
1008
|
-
runDedupReport(argv);
|
|
1009
|
-
return;
|
|
1010
|
-
}
|
|
1011
|
-
// ─── Upload Command ───────────────────────────────────────────────
|
|
1012
|
-
if (args.command === "upload") {
|
|
1013
|
-
const { runUpload } = await import("./commands/upload.js");
|
|
1014
|
-
await runUpload(argv);
|
|
1015
|
-
return;
|
|
1016
|
-
}
|
|
1017
|
-
// ─── Smart Select Command ─────────────────────────────────────────
|
|
1018
|
-
if (args.command === "smart-select") {
|
|
1019
|
-
const { runSmartSelect } = await import("./commands/smart-select.js");
|
|
1020
|
-
runSmartSelect(argv);
|
|
1021
|
-
return;
|
|
1022
|
-
}
|
|
1023
|
-
// ─── PR Summary Command ──────────────────────────────────────────
|
|
1024
|
-
if (args.command === "pr-summary") {
|
|
1025
|
-
const { runPrSummary } = await import("./commands/pr-summary.js");
|
|
1026
|
-
await runPrSummary(argv);
|
|
1027
|
-
return;
|
|
1028
|
-
}
|
|
1029
|
-
// ─── Profile Command ─────────────────────────────────────────────
|
|
1030
|
-
if (args.command === "profile") {
|
|
1031
|
-
const { runProfile } = await import("./commands/profile.js");
|
|
1032
|
-
runProfile(argv);
|
|
1033
|
-
return;
|
|
1034
|
-
}
|
|
1035
|
-
// ─── Group Findings Command ───────────────────────────────────────
|
|
1036
|
-
if (args.command === "group") {
|
|
1037
|
-
const { runGroupFindings } = await import("./commands/group-findings.js");
|
|
1038
|
-
runGroupFindings(argv);
|
|
1039
|
-
return;
|
|
1040
|
-
}
|
|
1041
|
-
// ─── Diff-Only Command ───────────────────────────────────────────
|
|
1042
|
-
if (args.command === "diff-only") {
|
|
1043
|
-
const { runDiffOnly } = await import("./commands/diff-only.js");
|
|
1044
|
-
await runDiffOnly(argv);
|
|
1045
|
-
return;
|
|
1046
|
-
}
|
|
1047
|
-
// ─── Auto-Triage Command ─────────────────────────────────────────
|
|
1048
|
-
if (args.command === "auto-triage") {
|
|
1049
|
-
const { runAutoTriage } = await import("./commands/auto-triage.js");
|
|
1050
|
-
runAutoTriage(argv);
|
|
1051
|
-
return;
|
|
1052
|
-
}
|
|
1053
|
-
// ─── Validate Config Command ─────────────────────────────────────
|
|
1054
|
-
if (args.command === "validate-config") {
|
|
1055
|
-
const { runValidateConfig } = await import("./commands/validate-config.js");
|
|
1056
|
-
runValidateConfig(argv);
|
|
1057
|
-
return;
|
|
1058
|
-
}
|
|
1059
|
-
// ─── Coverage Map Command ────────────────────────────────────────
|
|
1060
|
-
if (args.command === "coverage-map") {
|
|
1061
|
-
const { runCoverageMap } = await import("./commands/coverage-map.js");
|
|
1062
|
-
runCoverageMap(argv);
|
|
1063
|
-
return;
|
|
1064
|
-
}
|
|
1065
|
-
// ─── Warm Cache Command ──────────────────────────────────────────
|
|
1066
|
-
if (args.command === "warm-cache") {
|
|
1067
|
-
const { runWarmCache } = await import("./commands/warm-cache.js");
|
|
1068
|
-
await runWarmCache(argv);
|
|
1069
|
-
return;
|
|
1070
|
-
}
|
|
1071
|
-
// ─── Policy Audit Command ──────────────────────────────────────────
|
|
1072
|
-
if (args.command === "policy-audit") {
|
|
1073
|
-
const { runPolicyAudit } = await import("./commands/policy-audit.js");
|
|
1074
|
-
await runPolicyAudit(argv);
|
|
1075
|
-
return;
|
|
1076
|
-
}
|
|
1077
|
-
// ─── Remediation Command ───────────────────────────────────────────
|
|
1078
|
-
if (args.command === "remediation") {
|
|
1079
|
-
const { runRemediationGuide } = await import("./commands/remediation.js");
|
|
1080
|
-
runRemediationGuide(argv);
|
|
1081
|
-
return;
|
|
1082
|
-
}
|
|
1083
|
-
// ─── Hook Install Command ─────────────────────────────────────────
|
|
1084
|
-
if (args.command === "hook-install") {
|
|
1085
|
-
const { runHookInstall } = await import("./commands/hook-install.js");
|
|
1086
|
-
await runHookInstall(argv);
|
|
1087
|
-
return;
|
|
1088
|
-
}
|
|
1089
|
-
// ─── False Negatives Command ──────────────────────────────────────
|
|
1090
|
-
if (args.command === "false-negatives") {
|
|
1091
|
-
const { runFalseNegativeReport } = await import("./commands/false-negatives.js");
|
|
1092
|
-
await runFalseNegativeReport(argv);
|
|
1093
|
-
return;
|
|
1094
|
-
}
|
|
1095
|
-
// ─── Assign Findings Command ──────────────────────────────────────
|
|
1096
|
-
if (args.command === "assign") {
|
|
1097
|
-
const { runAssignFindings } = await import("./commands/assign-findings.js");
|
|
1098
|
-
await runAssignFindings(argv);
|
|
1099
|
-
return;
|
|
1100
|
-
}
|
|
1101
|
-
// ─── Ticket Sync Command ─────────────────────────────────────────
|
|
1102
|
-
if (args.command === "ticket-sync") {
|
|
1103
|
-
const { runTicketSync } = await import("./commands/ticket-sync.js");
|
|
1104
|
-
await runTicketSync(argv);
|
|
1105
|
-
return;
|
|
1106
|
-
}
|
|
1107
|
-
// ─── SLA Track Command ───────────────────────────────────────────
|
|
1108
|
-
if (args.command === "sla-track") {
|
|
1109
|
-
const { runSlaTrack } = await import("./commands/sla-track.js");
|
|
1110
|
-
await runSlaTrack(argv);
|
|
1111
|
-
return;
|
|
1112
|
-
}
|
|
1113
|
-
// ─── Regression Alert Command ─────────────────────────────────────
|
|
1114
|
-
if (args.command === "regression-alert") {
|
|
1115
|
-
const { runRegressionAlert } = await import("./commands/regression-alert.js");
|
|
1116
|
-
await runRegressionAlert(argv);
|
|
1117
|
-
return;
|
|
1118
|
-
}
|
|
1119
|
-
// ─── Suppress Command ────────────────────────────────────────────
|
|
1120
|
-
if (args.command === "suppress") {
|
|
1121
|
-
const { runSuppress } = await import("./commands/suppress.js");
|
|
1122
|
-
runSuppress(argv);
|
|
1123
|
-
return;
|
|
1124
|
-
}
|
|
1125
|
-
// ─── Rule Owner Command ──────────────────────────────────────────
|
|
1126
|
-
if (args.command === "rule-owner") {
|
|
1127
|
-
const { runRuleOwner } = await import("./commands/rule-owner.js");
|
|
1128
|
-
runRuleOwner(argv);
|
|
1129
|
-
return;
|
|
1130
|
-
}
|
|
1131
|
-
// ─── Noise Advisor Command ───────────────────────────────────────
|
|
1132
|
-
if (args.command === "noise-advisor") {
|
|
1133
|
-
const { runNoiseAdvisor } = await import("./commands/noise-advisor.js");
|
|
1134
|
-
runNoiseAdvisor(argv);
|
|
1135
|
-
return;
|
|
1136
|
-
}
|
|
1137
|
-
// ─── Review Queue Command ────────────────────────────────────────
|
|
1138
|
-
if (args.command === "review-queue") {
|
|
1139
|
-
const { runReviewQueue } = await import("./commands/review-queue.js");
|
|
1140
|
-
await runReviewQueue(argv);
|
|
1141
|
-
return;
|
|
1142
|
-
}
|
|
1143
|
-
// ─── Report Template Command ─────────────────────────────────────
|
|
1144
|
-
if (args.command === "report-template") {
|
|
1145
|
-
const { runReportTemplate } = await import("./commands/report-template.js");
|
|
1146
|
-
runReportTemplate(argv);
|
|
1147
|
-
return;
|
|
1148
|
-
}
|
|
1149
|
-
// ─── Burndown Command ────────────────────────────────────────────
|
|
1150
|
-
if (args.command === "burndown") {
|
|
1151
|
-
const { runBurndown } = await import("./commands/burndown.js");
|
|
1152
|
-
await runBurndown(argv);
|
|
1153
|
-
return;
|
|
1154
|
-
}
|
|
1155
|
-
// ─── Knowledge Base Command ──────────────────────────────────────
|
|
1156
|
-
if (args.command === "kb") {
|
|
1157
|
-
const { runKnowledgeBase } = await import("./commands/kb.js");
|
|
1158
|
-
runKnowledgeBase(argv);
|
|
1159
|
-
return;
|
|
1160
|
-
}
|
|
1161
|
-
// ─── Recommend Command ───────────────────────────────────────────
|
|
1162
|
-
if (args.command === "recommend") {
|
|
1163
|
-
const { runRecommend } = await import("./commands/recommend.js");
|
|
1164
|
-
runRecommend(argv);
|
|
1165
|
-
return;
|
|
1166
|
-
}
|
|
1167
|
-
// ─── Vote Command ────────────────────────────────────────────────
|
|
1168
|
-
if (args.command === "vote") {
|
|
1169
|
-
const { runVote } = await import("./commands/vote.js");
|
|
1170
|
-
runVote(argv);
|
|
1171
|
-
return;
|
|
1172
|
-
}
|
|
1173
|
-
// ─── Query Command ──────────────────────────────────────────────
|
|
1174
|
-
if (args.command === "query") {
|
|
1175
|
-
const { runQuery } = await import("./commands/query.js");
|
|
1176
|
-
runQuery(argv);
|
|
1177
|
-
return;
|
|
1178
|
-
}
|
|
1179
|
-
// ─── Judge Reputation Command ────────────────────────────────────
|
|
1180
|
-
if (args.command === "judge-reputation") {
|
|
1181
|
-
const { runJudgeReputation } = await import("./commands/judge-reputation.js");
|
|
1182
|
-
runJudgeReputation(argv);
|
|
1183
|
-
return;
|
|
1184
|
-
}
|
|
1185
|
-
// ─── Correlate Command ──────────────────────────────────────────
|
|
1186
|
-
if (args.command === "correlate") {
|
|
1187
|
-
const { runCorrelate } = await import("./commands/correlate.js");
|
|
1188
|
-
runCorrelate(argv);
|
|
1189
|
-
return;
|
|
1190
|
-
}
|
|
1191
|
-
// ─── Digest Command ─────────────────────────────────────────────
|
|
1192
|
-
if (args.command === "digest") {
|
|
1193
|
-
const { runDigest } = await import("./commands/digest.js");
|
|
1194
|
-
runDigest(argv);
|
|
1195
|
-
return;
|
|
1196
|
-
}
|
|
1197
|
-
// ─── Rule Share Command ─────────────────────────────────────────
|
|
1198
|
-
if (args.command === "rule-share") {
|
|
1199
|
-
const { runRuleShare } = await import("./commands/rule-share.js");
|
|
1200
|
-
runRuleShare(argv);
|
|
1201
|
-
return;
|
|
1202
|
-
}
|
|
1203
|
-
// ─── Explain Finding Command ────────────────────────────────────
|
|
1204
|
-
if (args.command === "explain-finding") {
|
|
1205
|
-
const { runExplainFinding } = await import("./commands/explain-finding.js");
|
|
1206
|
-
runExplainFinding(argv);
|
|
1207
|
-
return;
|
|
1208
|
-
}
|
|
1209
|
-
// ─── Compare Runs Command ──────────────────────────────────────
|
|
1210
|
-
if (args.command === "compare-runs") {
|
|
1211
|
-
const { runCompareRuns } = await import("./commands/compare-runs.js");
|
|
1212
|
-
runCompareRuns(argv);
|
|
1213
|
-
return;
|
|
1214
|
-
}
|
|
1215
|
-
// ─── Audit Bundle Command ─────────────────────────────────────
|
|
1216
|
-
if (args.command === "audit-bundle") {
|
|
1217
|
-
const { runAuditBundle } = await import("./commands/audit-bundle.js");
|
|
1218
|
-
runAuditBundle(argv);
|
|
1219
|
-
return;
|
|
1220
|
-
}
|
|
1221
|
-
// ─── Dev Score Command ────────────────────────────────────────
|
|
1222
|
-
if (args.command === "dev-score") {
|
|
1223
|
-
const { runDevScore } = await import("./commands/dev-score.js");
|
|
1224
|
-
runDevScore(argv);
|
|
1225
|
-
return;
|
|
1226
|
-
}
|
|
1227
|
-
// ─── Model Risk Command ──────────────────────────────────────
|
|
1228
|
-
if (args.command === "model-risk") {
|
|
1229
|
-
const { runModelRisk } = await import("./commands/model-risk.js");
|
|
1230
|
-
runModelRisk(argv);
|
|
1231
|
-
return;
|
|
1232
|
-
}
|
|
1233
|
-
// ─── Retro Command ───────────────────────────────────────────
|
|
1234
|
-
if (args.command === "retro") {
|
|
1235
|
-
const { runRetro } = await import("./commands/retro.js");
|
|
1236
|
-
runRetro(argv);
|
|
1237
|
-
return;
|
|
1238
|
-
}
|
|
1239
|
-
// ─── Config Drift Command ────────────────────────────────────
|
|
1240
|
-
if (args.command === "config-drift") {
|
|
1241
|
-
const { runConfigDrift } = await import("./commands/config-drift.js");
|
|
1242
|
-
runConfigDrift(argv);
|
|
1243
|
-
return;
|
|
1244
|
-
}
|
|
1245
|
-
// ─── Reg Watch Command ───────────────────────────────────────
|
|
1246
|
-
if (args.command === "reg-watch") {
|
|
1247
|
-
const { runRegWatch } = await import("./commands/reg-watch.js");
|
|
1248
|
-
runRegWatch(argv);
|
|
1249
|
-
return;
|
|
1250
|
-
}
|
|
1251
|
-
// ─── Learn Command ───────────────────────────────────────────
|
|
1252
|
-
if (args.command === "learn") {
|
|
1253
|
-
const { runLearn } = await import("./commands/learn.js");
|
|
1254
|
-
runLearn(argv);
|
|
1255
|
-
return;
|
|
1256
|
-
}
|
|
1257
|
-
// ─── Generate Command ────────────────────────────────────────
|
|
1258
|
-
if (args.command === "generate") {
|
|
1259
|
-
const { runGenerate } = await import("./commands/generate.js");
|
|
1260
|
-
runGenerate(argv);
|
|
1261
|
-
return;
|
|
1262
|
-
}
|
|
1263
|
-
// ─── AI Model Trust Command ──────────────────────────────────
|
|
1264
|
-
if (args.command === "ai-model-trust") {
|
|
1265
|
-
const { runAiModelTrust } = await import("./commands/ai-model-trust.js");
|
|
1266
|
-
runAiModelTrust(argv);
|
|
1267
|
-
return;
|
|
1268
|
-
}
|
|
1269
|
-
// ─── Team Rules Sync Command ─────────────────────────────────
|
|
1270
|
-
if (args.command === "team-rules-sync") {
|
|
1271
|
-
const { runTeamRulesSync } = await import("./commands/team-rules-sync.js");
|
|
1272
|
-
runTeamRulesSync(argv);
|
|
1273
|
-
return;
|
|
1274
|
-
}
|
|
1275
|
-
// ─── Cost Forecast Command ───────────────────────────────────
|
|
1276
|
-
if (args.command === "cost-forecast") {
|
|
1277
|
-
const { runCostForecast } = await import("./commands/cost-forecast.js");
|
|
1278
|
-
runCostForecast(argv);
|
|
1279
|
-
return;
|
|
1280
|
-
}
|
|
1281
|
-
// ─── Team Leaderboard Command ────────────────────────────────
|
|
1282
|
-
if (args.command === "team-leaderboard") {
|
|
1283
|
-
const { runTeamLeaderboard } = await import("./commands/team-leaderboard.js");
|
|
1284
|
-
runTeamLeaderboard(argv);
|
|
1285
|
-
return;
|
|
1286
|
-
}
|
|
1287
|
-
// ─── Code Owner Suggest Command ──────────────────────────────
|
|
1288
|
-
if (args.command === "code-owner-suggest") {
|
|
1289
|
-
const { runCodeOwnerSuggest } = await import("./commands/code-owner-suggest.js");
|
|
1290
|
-
runCodeOwnerSuggest(argv);
|
|
1291
|
-
return;
|
|
1292
|
-
}
|
|
1293
|
-
// ─── PR Quality Gate Command ─────────────────────────────────
|
|
1294
|
-
if (args.command === "pr-quality-gate") {
|
|
1295
|
-
const { runPrQualityGate } = await import("./commands/pr-quality-gate.js");
|
|
1296
|
-
runPrQualityGate(argv);
|
|
1297
|
-
return;
|
|
1298
|
-
}
|
|
1299
|
-
// ─── AI Prompt Audit Command ─────────────────────────────────
|
|
1300
|
-
if (args.command === "ai-prompt-audit") {
|
|
1301
|
-
const { runAiPromptAudit } = await import("./commands/ai-prompt-audit.js");
|
|
1302
|
-
runAiPromptAudit(argv);
|
|
1303
|
-
return;
|
|
615
|
+
// ─── Compare Command ─────────────────────────────────────────────────
|
|
616
|
+
if (args.command === "compare") {
|
|
617
|
+
const toolName = argv[3];
|
|
618
|
+
if (!toolName || toolName === "--help" || toolName === "-h" || toolName === "all") {
|
|
619
|
+
console.log(formatFullComparisonMatrix());
|
|
620
|
+
}
|
|
621
|
+
else {
|
|
622
|
+
const profile = TOOL_PROFILES.find((t) => t.name.toLowerCase() === toolName.toLowerCase());
|
|
623
|
+
if (!profile) {
|
|
624
|
+
console.error(`Unknown tool: ${toolName}`);
|
|
625
|
+
console.error(`Available: ${TOOL_PROFILES.map((t) => t.name).join(", ")}, all`);
|
|
626
|
+
process.exit(1);
|
|
627
|
+
}
|
|
628
|
+
console.log(formatComparisonReport(toolName));
|
|
629
|
+
}
|
|
630
|
+
process.exit(0);
|
|
1304
631
|
}
|
|
1305
|
-
// ───
|
|
1306
|
-
if (args.command === "
|
|
1307
|
-
const {
|
|
1308
|
-
|
|
1309
|
-
|
|
632
|
+
// ─── Trend Command ───────────────────────────────────────────────────
|
|
633
|
+
if (args.command === "trend") {
|
|
634
|
+
const { loadSnapshotStore, computeTrend, formatTrendReport, formatTrendReportHtml, detectRegressions, formatRegressionAlerts, } = await import("./commands/snapshot.js");
|
|
635
|
+
const snapshotFile = argv.find((a, i) => i >= 3 && !a.startsWith("-") && !["html", "json", "text"].includes(a)) ||
|
|
636
|
+
".judges-snapshots.json";
|
|
637
|
+
const formatArg = argv.includes("--format") ? argv[argv.indexOf("--format") + 1] : "text";
|
|
638
|
+
const outputArg = argv.includes("--output") ? argv[argv.indexOf("--output") + 1] : undefined;
|
|
639
|
+
const store = loadSnapshotStore(snapshotFile);
|
|
640
|
+
if (store.snapshots.length === 0) {
|
|
641
|
+
console.log("No snapshot data found. Run evaluations with --snapshot to collect trend data.");
|
|
642
|
+
console.log(` Expected file: ${snapshotFile}`);
|
|
643
|
+
}
|
|
644
|
+
else {
|
|
645
|
+
const report = computeTrend(store);
|
|
646
|
+
let output;
|
|
647
|
+
if (formatArg === "html") {
|
|
648
|
+
output = formatTrendReportHtml(report);
|
|
649
|
+
}
|
|
650
|
+
else if (formatArg === "json") {
|
|
651
|
+
output = JSON.stringify(report, null, 2);
|
|
652
|
+
}
|
|
653
|
+
else {
|
|
654
|
+
output = formatTrendReport(report);
|
|
655
|
+
}
|
|
656
|
+
if (outputArg) {
|
|
657
|
+
writeFileSync(outputArg, output, "utf-8");
|
|
658
|
+
console.log(` ✅ Trend report written to ${outputArg}`);
|
|
659
|
+
}
|
|
660
|
+
else {
|
|
661
|
+
console.log(output);
|
|
662
|
+
}
|
|
663
|
+
// Regression alerts
|
|
664
|
+
const regressions = detectRegressions(store);
|
|
665
|
+
if (regressions.length > 0) {
|
|
666
|
+
console.log(formatRegressionAlerts(regressions));
|
|
667
|
+
if (args.failOnFindings && regressions.some((r) => r.severity === "error")) {
|
|
668
|
+
process.exit(1);
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
}
|
|
672
|
+
process.exit(0);
|
|
1310
673
|
}
|
|
1311
|
-
// ───
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
674
|
+
// ─── Command Table Dispatch ─────────────────────────────────────────────────
|
|
675
|
+
const tableEntry = args.command ? COMMAND_TABLE[args.command] : undefined;
|
|
676
|
+
if (tableEntry) {
|
|
677
|
+
const [modulePath, fnName] = tableEntry;
|
|
678
|
+
const mod = await import(modulePath);
|
|
679
|
+
await mod[fnName](argv);
|
|
1315
680
|
return;
|
|
1316
681
|
}
|
|
1317
|
-
// ─── Audit Trail Command ─────────────────────────────────────
|
|
1318
|
-
if (args.command === "audit-trail") {
|
|
1319
|
-
const { runAuditTrail } = await import("./commands/audit-trail.js");
|
|
1320
|
-
runAuditTrail(argv);
|
|
1321
|
-
return;
|
|
1322
|
-
}
|
|
1323
|
-
// ─── Pattern Registry Command ────────────────────────────────
|
|
1324
|
-
if (args.command === "pattern-registry") {
|
|
1325
|
-
const { runPatternRegistry } = await import("./commands/pattern-registry.js");
|
|
1326
|
-
runPatternRegistry(argv);
|
|
1327
|
-
return;
|
|
1328
|
-
}
|
|
1329
|
-
// ─── Security Maturity Command ───────────────────────────────
|
|
1330
|
-
if (args.command === "security-maturity") {
|
|
1331
|
-
const { runSecurityMaturity } = await import("./commands/security-maturity.js");
|
|
1332
|
-
runSecurityMaturity(argv);
|
|
1333
|
-
return;
|
|
1334
|
-
}
|
|
1335
|
-
// ─── Perf Hotspot Command ────────────────────────────────────
|
|
1336
|
-
if (args.command === "perf-hotspot") {
|
|
1337
|
-
const { runPerfHotspot } = await import("./commands/perf-hotspot.js");
|
|
1338
|
-
runPerfHotspot(argv);
|
|
1339
|
-
return;
|
|
1340
|
-
}
|
|
1341
|
-
// ─── Doc Gen Command ─────────────────────────────────────────
|
|
1342
|
-
if (args.command === "doc-gen") {
|
|
1343
|
-
const { runDocGen } = await import("./commands/doc-gen.js");
|
|
1344
|
-
runDocGen(argv);
|
|
1345
|
-
return;
|
|
1346
|
-
}
|
|
1347
|
-
// ─── Dep Correlate Command ───────────────────────────────────
|
|
1348
|
-
if (args.command === "dep-correlate") {
|
|
1349
|
-
const { runDepCorrelate } = await import("./commands/dep-correlate.js");
|
|
1350
|
-
runDepCorrelate(argv);
|
|
1351
|
-
return;
|
|
1352
|
-
}
|
|
1353
|
-
// ─── Judge Author Command ────────────────────────────────────
|
|
1354
|
-
if (args.command === "judge-author") {
|
|
1355
|
-
const { runJudgeAuthor } = await import("./commands/judge-author.js");
|
|
1356
|
-
runJudgeAuthor(argv);
|
|
1357
|
-
return;
|
|
1358
|
-
}
|
|
1359
|
-
// ─── SBOM Export Command ─────────────────────────────────────
|
|
1360
|
-
if (args.command === "sbom-export") {
|
|
1361
|
-
const { runSbomExport } = await import("./commands/sbom-export.js");
|
|
1362
|
-
runSbomExport(argv);
|
|
1363
|
-
return;
|
|
1364
|
-
}
|
|
1365
|
-
// ─── License Scan Command ───────────────────────────────────
|
|
1366
|
-
if (args.command === "license-scan") {
|
|
1367
|
-
const { runLicenseScan } = await import("./commands/license-scan.js");
|
|
1368
|
-
runLicenseScan(argv);
|
|
1369
|
-
return;
|
|
1370
|
-
}
|
|
1371
|
-
// ─── Test Correlate Command ──────────────────────────────────
|
|
1372
|
-
if (args.command === "test-correlate") {
|
|
1373
|
-
const { runTestCorrelate } = await import("./commands/test-correlate.js");
|
|
1374
|
-
runTestCorrelate(argv);
|
|
1375
|
-
return;
|
|
1376
|
-
}
|
|
1377
|
-
// ─── Predict Command ────────────────────────────────────────
|
|
1378
|
-
if (args.command === "predict") {
|
|
1379
|
-
const { runPredict } = await import("./commands/predict.js");
|
|
1380
|
-
runPredict(argv);
|
|
1381
|
-
return;
|
|
1382
|
-
}
|
|
1383
|
-
// ─── Org Policy Command ─────────────────────────────────────
|
|
1384
|
-
if (args.command === "org-policy") {
|
|
1385
|
-
const { runOrgPolicy } = await import("./commands/org-policy.js");
|
|
1386
|
-
runOrgPolicy(argv);
|
|
1387
|
-
return;
|
|
1388
|
-
}
|
|
1389
|
-
// ─── Incident Response Command ──────────────────────────────
|
|
1390
|
-
if (args.command === "incident-response") {
|
|
1391
|
-
const { runIncidentResponse } = await import("./commands/incident-response.js");
|
|
1392
|
-
runIncidentResponse(argv);
|
|
1393
|
-
return;
|
|
1394
|
-
}
|
|
1395
|
-
// ─── Risk Heatmap Command ───────────────────────────────────
|
|
1396
|
-
if (args.command === "risk-heatmap") {
|
|
1397
|
-
const { runRiskHeatmap } = await import("./commands/risk-heatmap.js");
|
|
1398
|
-
runRiskHeatmap(argv);
|
|
1399
|
-
return;
|
|
1400
|
-
}
|
|
1401
|
-
// ─── Learning Path Command ──────────────────────────────────
|
|
1402
|
-
if (args.command === "learning-path") {
|
|
1403
|
-
const { runLearningPath } = await import("./commands/learning-path.js");
|
|
1404
|
-
runLearningPath(argv);
|
|
1405
|
-
return;
|
|
1406
|
-
}
|
|
1407
|
-
// ─── Secret Scan Command ────────────────────────────────────────
|
|
1408
|
-
if (args.command === "secret-scan") {
|
|
1409
|
-
const { runSecretScan } = await import("./commands/secret-scan.js");
|
|
1410
|
-
runSecretScan(argv);
|
|
1411
|
-
return;
|
|
1412
|
-
}
|
|
1413
|
-
// ─── IaC Lint Command ──────────────────────────────────────────
|
|
1414
|
-
if (args.command === "iac-lint") {
|
|
1415
|
-
const { runIacLint } = await import("./commands/iac-lint.js");
|
|
1416
|
-
runIacLint(argv);
|
|
1417
|
-
return;
|
|
1418
|
-
}
|
|
1419
|
-
// ─── PII Scan Command ─────────────────────────────────────────
|
|
1420
|
-
if (args.command === "pii-scan") {
|
|
1421
|
-
const { runPiiScan } = await import("./commands/pii-scan.js");
|
|
1422
|
-
runPiiScan(argv);
|
|
1423
|
-
return;
|
|
1424
|
-
}
|
|
1425
|
-
// ─── API Audit Command ────────────────────────────────────────
|
|
1426
|
-
if (args.command === "api-audit") {
|
|
1427
|
-
const { runApiAudit } = await import("./commands/api-audit.js");
|
|
1428
|
-
runApiAudit(argv);
|
|
1429
|
-
return;
|
|
1430
|
-
}
|
|
1431
|
-
// ─── Compliance Map Command ───────────────────────────────────
|
|
1432
|
-
if (args.command === "compliance-map") {
|
|
1433
|
-
const { runComplianceMap } = await import("./commands/compliance-map.js");
|
|
1434
|
-
runComplianceMap(argv);
|
|
1435
|
-
return;
|
|
1436
|
-
}
|
|
1437
|
-
// ─── Perf Compare Command ─────────────────────────────────────
|
|
1438
|
-
if (args.command === "perf-compare") {
|
|
1439
|
-
const { runPerfCompare } = await import("./commands/perf-compare.js");
|
|
1440
|
-
runPerfCompare(argv);
|
|
1441
|
-
return;
|
|
1442
|
-
}
|
|
1443
|
-
// ─── Guided Tour Command ──────────────────────────────────────
|
|
1444
|
-
if (args.command === "guided-tour") {
|
|
1445
|
-
const { runGuidedTour } = await import("./commands/guided-tour.js");
|
|
1446
|
-
runGuidedTour(argv);
|
|
1447
|
-
return;
|
|
1448
|
-
}
|
|
1449
|
-
// ─── Exec Report Command ──────────────────────────────────────
|
|
1450
|
-
if (args.command === "exec-report") {
|
|
1451
|
-
const { runExecReport } = await import("./commands/exec-report.js");
|
|
1452
|
-
runExecReport(argv);
|
|
1453
|
-
return;
|
|
1454
|
-
}
|
|
1455
|
-
// ─── AI Output Compare Command ───────────────────────────────
|
|
1456
|
-
if (args.command === "ai-output-compare") {
|
|
1457
|
-
const { runAiOutputCompare } = await import("./commands/ai-output-compare.js");
|
|
1458
|
-
runAiOutputCompare(argv);
|
|
1459
|
-
return;
|
|
1460
|
-
}
|
|
1461
|
-
// ─── Hallucination Score Command ─────────────────────────────
|
|
1462
|
-
if (args.command === "hallucination-score") {
|
|
1463
|
-
const { runHallucinationScore } = await import("./commands/hallucination-score.js");
|
|
1464
|
-
runHallucinationScore(argv);
|
|
1465
|
-
return;
|
|
1466
|
-
}
|
|
1467
|
-
// ─── AI Gate Command ─────────────────────────────────────────
|
|
1468
|
-
if (args.command === "ai-gate") {
|
|
1469
|
-
const { runAiGate } = await import("./commands/ai-gate.js");
|
|
1470
|
-
runAiGate(argv);
|
|
1471
|
-
return;
|
|
1472
|
-
}
|
|
1473
|
-
// ─── AI Pattern Trend Command ────────────────────────────────
|
|
1474
|
-
if (args.command === "ai-pattern-trend") {
|
|
1475
|
-
const { runAiPatternTrend } = await import("./commands/ai-pattern-trend.js");
|
|
1476
|
-
runAiPatternTrend(argv);
|
|
1477
|
-
return;
|
|
1478
|
-
}
|
|
1479
|
-
// ─── Test Suggest Command ────────────────────────────────────
|
|
1480
|
-
if (args.command === "test-suggest") {
|
|
1481
|
-
const { runTestSuggest } = await import("./commands/test-suggest.js");
|
|
1482
|
-
runTestSuggest(argv);
|
|
1483
|
-
return;
|
|
1484
|
-
}
|
|
1485
|
-
// ─── Vendor Lock Detect Command ──────────────────────────────
|
|
1486
|
-
if (args.command === "vendor-lock-detect") {
|
|
1487
|
-
const { runVendorLockDetect } = await import("./commands/vendor-lock-detect.js");
|
|
1488
|
-
runVendorLockDetect(argv);
|
|
1489
|
-
return;
|
|
1490
|
-
}
|
|
1491
|
-
// ─── Clarity Score Command ───────────────────────────────────
|
|
1492
|
-
if (args.command === "clarity-score") {
|
|
1493
|
-
const { runClarityScore } = await import("./commands/clarity-score.js");
|
|
1494
|
-
runClarityScore(argv);
|
|
1495
|
-
return;
|
|
1496
|
-
}
|
|
1497
|
-
// ─── Arch Audit Command ──────────────────────────────────────
|
|
1498
|
-
if (args.command === "arch-audit") {
|
|
1499
|
-
const { runArchAudit } = await import("./commands/arch-audit.js");
|
|
1500
|
-
runArchAudit(argv);
|
|
1501
|
-
return;
|
|
1502
|
-
}
|
|
1503
|
-
// ─── Watch Judge Command ─────────────────────────────────────
|
|
1504
|
-
if (args.command === "watch-judge") {
|
|
1505
|
-
const { runWatchJudge } = await import("./commands/watch-judge.js");
|
|
1506
|
-
runWatchJudge(argv);
|
|
1507
|
-
return;
|
|
1508
|
-
}
|
|
1509
|
-
// ─── Impact Scan Command ─────────────────────────────────────
|
|
1510
|
-
if (args.command === "impact-scan") {
|
|
1511
|
-
const { runImpactScan } = await import("./commands/impact-scan.js");
|
|
1512
|
-
runImpactScan(argv);
|
|
1513
|
-
return;
|
|
1514
|
-
}
|
|
1515
|
-
// ─── Model Report Command ───────────────────────────────────
|
|
1516
|
-
if (args.command === "model-report") {
|
|
1517
|
-
const { runModelReport } = await import("./commands/model-report.js");
|
|
1518
|
-
runModelReport(argv);
|
|
1519
|
-
return;
|
|
1520
|
-
}
|
|
1521
|
-
// ─── Trust Adaptive Command ──────────────────────────────────
|
|
1522
|
-
if (args.command === "trust-adaptive") {
|
|
1523
|
-
const { runTrustAdaptive } = await import("./commands/trust-adaptive.js");
|
|
1524
|
-
runTrustAdaptive(argv);
|
|
1525
|
-
return;
|
|
1526
|
-
}
|
|
1527
|
-
// ─── Judge Learn Command ─────────────────────────────────────
|
|
1528
|
-
if (args.command === "judge-learn") {
|
|
1529
|
-
const { runJudgeLearn } = await import("./commands/judge-learn.js");
|
|
1530
|
-
runJudgeLearn(argv);
|
|
1531
|
-
return;
|
|
1532
|
-
}
|
|
1533
|
-
// ─── Chat Notify Command ─────────────────────────────────────
|
|
1534
|
-
if (args.command === "chat-notify") {
|
|
1535
|
-
const { runChatNotify } = await import("./commands/chat-notify.js");
|
|
1536
|
-
runChatNotify(argv);
|
|
1537
|
-
return;
|
|
1538
|
-
}
|
|
1539
|
-
// ─── Design Audit Command ───────────────────────────────────
|
|
1540
|
-
if (args.command === "design-audit") {
|
|
1541
|
-
const { runDesignAudit } = await import("./commands/design-audit.js");
|
|
1542
|
-
runDesignAudit(argv);
|
|
1543
|
-
return;
|
|
1544
|
-
}
|
|
1545
|
-
// ─── Remediation Lib Command ─────────────────────────────────
|
|
1546
|
-
if (args.command === "remediation-lib") {
|
|
1547
|
-
const { runRemediationLib } = await import("./commands/remediation-lib.js");
|
|
1548
|
-
runRemediationLib(argv);
|
|
1549
|
-
return;
|
|
1550
|
-
}
|
|
1551
|
-
// ─── Doc Drift Command ───────────────────────────────────────
|
|
1552
|
-
if (args.command === "doc-drift") {
|
|
1553
|
-
const { runDocDrift } = await import("./commands/doc-drift.js");
|
|
1554
|
-
runDocDrift(argv);
|
|
1555
|
-
return;
|
|
1556
|
-
}
|
|
1557
|
-
// ─── Cross-PR Regression Command ─────────────────────────────
|
|
1558
|
-
if (args.command === "cross-pr-regression") {
|
|
1559
|
-
const { runCrossPrRegression } = await import("./commands/cross-pr-regression.js");
|
|
1560
|
-
runCrossPrRegression(argv);
|
|
1561
|
-
return;
|
|
1562
|
-
}
|
|
1563
|
-
// ─── Code Similarity Command ─────────────────────────────────
|
|
1564
|
-
if (args.command === "code-similarity") {
|
|
1565
|
-
const { runCodeSimilarity } = await import("./commands/code-similarity.js");
|
|
1566
|
-
runCodeSimilarity(argv);
|
|
1567
|
-
return;
|
|
1568
|
-
}
|
|
1569
|
-
// ─── Team Trust Command ──────────────────────────────────────
|
|
1570
|
-
if (args.command === "team-trust") {
|
|
1571
|
-
const { runTeamTrust } = await import("./commands/team-trust.js");
|
|
1572
|
-
runTeamTrust(argv);
|
|
1573
|
-
return;
|
|
1574
|
-
}
|
|
1575
|
-
// ─── Exception Consistency Command ───────────────────────────
|
|
1576
|
-
if (args.command === "exception-consistency") {
|
|
1577
|
-
const { runExceptionConsistency } = await import("./commands/exception-consistency.js");
|
|
1578
|
-
runExceptionConsistency(argv);
|
|
1579
|
-
return;
|
|
1580
|
-
}
|
|
1581
|
-
// ─── Resource Cleanup Command ────────────────────────────────
|
|
1582
|
-
if (args.command === "resource-cleanup") {
|
|
1583
|
-
const { runResourceCleanup } = await import("./commands/resource-cleanup.js");
|
|
1584
|
-
runResourceCleanup(argv);
|
|
1585
|
-
return;
|
|
1586
|
-
}
|
|
1587
|
-
// ─── Refactor Safety Command ─────────────────────────────────
|
|
1588
|
-
if (args.command === "refactor-safety") {
|
|
1589
|
-
const { runRefactorSafety } = await import("./commands/refactor-safety.js");
|
|
1590
|
-
runRefactorSafety(argv);
|
|
1591
|
-
return;
|
|
1592
|
-
}
|
|
1593
|
-
// ─── Compliance Weight Command ───────────────────────────────
|
|
1594
|
-
if (args.command === "compliance-weight") {
|
|
1595
|
-
const { runComplianceWeight } = await import("./commands/compliance-weight.js");
|
|
1596
|
-
runComplianceWeight(argv);
|
|
1597
|
-
return;
|
|
1598
|
-
}
|
|
1599
|
-
// ─── Prompt Replay Command ──────────────────────────────────
|
|
1600
|
-
if (args.command === "prompt-replay") {
|
|
1601
|
-
const { runPromptReplay } = await import("./commands/prompt-replay.js");
|
|
1602
|
-
runPromptReplay(argv);
|
|
1603
|
-
return;
|
|
1604
|
-
}
|
|
1605
|
-
// ─── Review Replay Command ──────────────────────────────────
|
|
1606
|
-
if (args.command === "review-replay") {
|
|
1607
|
-
const { runReviewReplay } = await import("./commands/review-replay.js");
|
|
1608
|
-
runReviewReplay(argv);
|
|
1609
|
-
return;
|
|
1610
|
-
}
|
|
1611
|
-
// ─── Context Inject Command ─────────────────────────────────
|
|
1612
|
-
if (args.command === "context-inject") {
|
|
1613
|
-
const { runContextInject } = await import("./commands/context-inject.js");
|
|
1614
|
-
runContextInject(argv);
|
|
1615
|
-
return;
|
|
1616
|
-
}
|
|
1617
|
-
// ─── Habit Tracker Command ──────────────────────────────────
|
|
1618
|
-
if (args.command === "habit-tracker") {
|
|
1619
|
-
const { runHabitTracker } = await import("./commands/habit-tracker.js");
|
|
1620
|
-
runHabitTracker(argv);
|
|
1621
|
-
return;
|
|
1622
|
-
}
|
|
1623
|
-
// ─── Finding Contest Command ────────────────────────────────
|
|
1624
|
-
if (args.command === "finding-contest") {
|
|
1625
|
-
const { runFindingContest } = await import("./commands/finding-contest.js");
|
|
1626
|
-
runFindingContest(argv);
|
|
1627
|
-
return;
|
|
1628
|
-
}
|
|
1629
|
-
// ─── Approve Chain Command ──────────────────────────────────
|
|
1630
|
-
if (args.command === "approve-chain") {
|
|
1631
|
-
const { runApproveChain } = await import("./commands/approve-chain.js");
|
|
1632
|
-
runApproveChain(argv);
|
|
1633
|
-
return;
|
|
1634
|
-
}
|
|
1635
|
-
// ─── Snippet Eval Command ──────────────────────────────────
|
|
1636
|
-
if (args.command === "snippet-eval") {
|
|
1637
|
-
const { runSnippetEval } = await import("./commands/snippet-eval.js");
|
|
1638
|
-
runSnippetEval(argv);
|
|
1639
|
-
return;
|
|
1640
|
-
}
|
|
1641
|
-
// ─── Coach Mode Command ────────────────────────────────────
|
|
1642
|
-
if (args.command === "coach-mode") {
|
|
1643
|
-
const { runCoachMode } = await import("./commands/coach-mode.js");
|
|
1644
|
-
runCoachMode(argv);
|
|
1645
|
-
return;
|
|
1646
|
-
}
|
|
1647
|
-
// ─── Commit Hygiene Command ─────────────────────────────────────
|
|
1648
|
-
if (args.command === "commit-hygiene") {
|
|
1649
|
-
const { runCommitHygiene } = await import("./commands/commit-hygiene.js");
|
|
1650
|
-
runCommitHygiene(argv);
|
|
1651
|
-
return;
|
|
1652
|
-
}
|
|
1653
|
-
// ─── Deploy Readiness Command ──────────────────────────────────
|
|
1654
|
-
if (args.command === "deploy-readiness") {
|
|
1655
|
-
const { runDeployReadiness } = await import("./commands/deploy-readiness.js");
|
|
1656
|
-
runDeployReadiness(argv);
|
|
1657
|
-
return;
|
|
1658
|
-
}
|
|
1659
|
-
// ─── Rollback Safety Command ───────────────────────────────────
|
|
1660
|
-
if (args.command === "rollback-safety") {
|
|
1661
|
-
const { runRollbackSafety } = await import("./commands/rollback-safety.js");
|
|
1662
|
-
runRollbackSafety(argv);
|
|
1663
|
-
return;
|
|
1664
|
-
}
|
|
1665
|
-
// ─── Test Quality Command ─────────────────────────────────────
|
|
1666
|
-
if (args.command === "test-quality") {
|
|
1667
|
-
const { runTestQuality } = await import("./commands/test-quality.js");
|
|
1668
|
-
runTestQuality(argv);
|
|
1669
|
-
return;
|
|
1670
|
-
}
|
|
1671
|
-
// ─── Build Optimize Command ───────────────────────────────────
|
|
1672
|
-
if (args.command === "build-optimize") {
|
|
1673
|
-
const { runBuildOptimize } = await import("./commands/build-optimize.js");
|
|
1674
|
-
runBuildOptimize(argv);
|
|
1675
|
-
return;
|
|
1676
|
-
}
|
|
1677
|
-
// ─── Secret Age Command ───────────────────────────────────────
|
|
1678
|
-
if (args.command === "secret-age") {
|
|
1679
|
-
const { runSecretAge } = await import("./commands/secret-age.js");
|
|
1680
|
-
runSecretAge(argv);
|
|
1681
|
-
return;
|
|
1682
|
-
}
|
|
1683
|
-
// ─── Observability Gap Command ────────────────────────────────
|
|
1684
|
-
if (args.command === "observability-gap") {
|
|
1685
|
-
const { runObservabilityGap } = await import("./commands/observability-gap.js");
|
|
1686
|
-
runObservabilityGap(argv);
|
|
1687
|
-
return;
|
|
1688
|
-
}
|
|
1689
|
-
// ─── Migration Safety Command ─────────────────────────────────
|
|
1690
|
-
if (args.command === "migration-safety") {
|
|
1691
|
-
const { runMigrationSafety } = await import("./commands/migration-safety.js");
|
|
1692
|
-
runMigrationSafety(argv);
|
|
1693
|
-
return;
|
|
1694
|
-
}
|
|
1695
|
-
// ─── API Versioning Audit Command ────────────────────────────────
|
|
1696
|
-
if (args.command === "api-versioning-audit") {
|
|
1697
|
-
const { runApiVersioningAudit } = await import("./commands/api-versioning-audit.js");
|
|
1698
|
-
runApiVersioningAudit(argv);
|
|
1699
|
-
return;
|
|
1700
|
-
}
|
|
1701
|
-
// ─── Ownership Map Command ───────────────────────────────────────
|
|
1702
|
-
if (args.command === "ownership-map") {
|
|
1703
|
-
const { runOwnershipMap } = await import("./commands/ownership-map.js");
|
|
1704
|
-
runOwnershipMap(argv);
|
|
1705
|
-
return;
|
|
1706
|
-
}
|
|
1707
|
-
// ─── Retry Pattern Audit Command ─────────────────────────────────
|
|
1708
|
-
if (args.command === "retry-pattern-audit") {
|
|
1709
|
-
const { runRetryPatternAudit } = await import("./commands/retry-pattern-audit.js");
|
|
1710
|
-
runRetryPatternAudit(argv);
|
|
1711
|
-
return;
|
|
1712
|
-
}
|
|
1713
|
-
// ─── Error Taxonomy Command ──────────────────────────────────────
|
|
1714
|
-
if (args.command === "error-taxonomy") {
|
|
1715
|
-
const { runErrorTaxonomy } = await import("./commands/error-taxonomy.js");
|
|
1716
|
-
runErrorTaxonomy(argv);
|
|
1717
|
-
return;
|
|
1718
|
-
}
|
|
1719
|
-
// ─── Boundary Enforce Command ────────────────────────────────────
|
|
1720
|
-
if (args.command === "boundary-enforce") {
|
|
1721
|
-
const { runBoundaryEnforce } = await import("./commands/boundary-enforce.js");
|
|
1722
|
-
runBoundaryEnforce(argv);
|
|
1723
|
-
return;
|
|
1724
|
-
}
|
|
1725
|
-
// ─── Log Quality Command ─────────────────────────────────────────
|
|
1726
|
-
if (args.command === "log-quality") {
|
|
1727
|
-
const { runLogQuality } = await import("./commands/log-quality.js");
|
|
1728
|
-
runLogQuality(argv);
|
|
1729
|
-
return;
|
|
1730
|
-
}
|
|
1731
|
-
// ─── Null Safety Audit Command ───────────────────────────────────
|
|
1732
|
-
if (args.command === "null-safety-audit") {
|
|
1733
|
-
const { runNullSafetyAudit } = await import("./commands/null-safety-audit.js");
|
|
1734
|
-
runNullSafetyAudit(argv);
|
|
1735
|
-
return;
|
|
1736
|
-
}
|
|
1737
|
-
// ─── Test Isolation Command ──────────────────────────────────────
|
|
1738
|
-
if (args.command === "test-isolation") {
|
|
1739
|
-
const { runTestIsolation } = await import("./commands/test-isolation.js");
|
|
1740
|
-
runTestIsolation(argv);
|
|
1741
|
-
return;
|
|
1742
|
-
}
|
|
1743
|
-
// ─── Comment Drift Command ───────────────────────────────────────
|
|
1744
|
-
if (args.command === "comment-drift") {
|
|
1745
|
-
const { runCommentDrift } = await import("./commands/comment-drift.js");
|
|
1746
|
-
runCommentDrift(argv);
|
|
1747
|
-
return;
|
|
1748
|
-
}
|
|
1749
|
-
// ─── Timeout Audit Command ──────────────────────────────────────
|
|
1750
|
-
if (args.command === "timeout-audit") {
|
|
1751
|
-
const { runTimeoutAudit } = await import("./commands/timeout-audit.js");
|
|
1752
|
-
runTimeoutAudit(argv);
|
|
1753
|
-
return;
|
|
1754
|
-
}
|
|
1755
|
-
// ─── Cache Audit Command ────────────────────────────────────────
|
|
1756
|
-
if (args.command === "cache-audit") {
|
|
1757
|
-
const { runCacheAudit } = await import("./commands/cache-audit.js");
|
|
1758
|
-
runCacheAudit(argv);
|
|
1759
|
-
return;
|
|
1760
|
-
}
|
|
1761
|
-
// ─── Idempotency Audit Command ──────────────────────────────────
|
|
1762
|
-
if (args.command === "idempotency-audit") {
|
|
1763
|
-
const { runIdempotencyAudit } = await import("./commands/idempotency-audit.js");
|
|
1764
|
-
runIdempotencyAudit(argv);
|
|
1765
|
-
return;
|
|
1766
|
-
}
|
|
1767
|
-
// ─── Type Boundary Command ──────────────────────────────────────
|
|
1768
|
-
if (args.command === "type-boundary") {
|
|
1769
|
-
const { runTypeBoundary } = await import("./commands/type-boundary.js");
|
|
1770
|
-
runTypeBoundary(argv);
|
|
1771
|
-
return;
|
|
1772
|
-
}
|
|
1773
|
-
// ─── Event Leak Command ─────────────────────────────────────────
|
|
1774
|
-
if (args.command === "event-leak") {
|
|
1775
|
-
const { runEventLeak } = await import("./commands/event-leak.js");
|
|
1776
|
-
runEventLeak(argv);
|
|
1777
|
-
return;
|
|
1778
|
-
}
|
|
1779
|
-
// ─── Privilege Path Command ─────────────────────────────────────
|
|
1780
|
-
if (args.command === "privilege-path") {
|
|
1781
|
-
const { runPrivilegePath } = await import("./commands/privilege-path.js");
|
|
1782
|
-
runPrivilegePath(argv);
|
|
1783
|
-
return;
|
|
1784
|
-
}
|
|
1785
|
-
// ─── Error UX Command ───────────────────────────────────────────
|
|
1786
|
-
if (args.command === "error-ux") {
|
|
1787
|
-
const { runErrorUx } = await import("./commands/error-ux.js");
|
|
1788
|
-
runErrorUx(argv);
|
|
1789
|
-
return;
|
|
1790
|
-
}
|
|
1791
|
-
// ─── Dead Code Detect Command ─────────────────────────────────────
|
|
1792
|
-
if (args.command === "dead-code-detect") {
|
|
1793
|
-
const { runDeadCodeDetect } = await import("./commands/dead-code-detect.js");
|
|
1794
|
-
runDeadCodeDetect(argv);
|
|
1795
|
-
return;
|
|
1796
|
-
}
|
|
1797
|
-
// ─── Async Safety Command ────────────────────────────────────────
|
|
1798
|
-
if (args.command === "async-safety") {
|
|
1799
|
-
const { runAsyncSafety } = await import("./commands/async-safety.js");
|
|
1800
|
-
runAsyncSafety(argv);
|
|
1801
|
-
return;
|
|
1802
|
-
}
|
|
1803
|
-
// ─── Input Guard Command ─────────────────────────────────────────
|
|
1804
|
-
if (args.command === "input-guard") {
|
|
1805
|
-
const { runInputGuard } = await import("./commands/input-guard.js");
|
|
1806
|
-
runInputGuard(argv);
|
|
1807
|
-
return;
|
|
1808
|
-
}
|
|
1809
|
-
// ─── Clone Detect Command ────────────────────────────────────────
|
|
1810
|
-
if (args.command === "clone-detect") {
|
|
1811
|
-
const { runCloneDetect } = await import("./commands/clone-detect.js");
|
|
1812
|
-
runCloneDetect(argv);
|
|
1813
|
-
return;
|
|
1814
|
-
}
|
|
1815
|
-
// ─── Contract Verify Command ─────────────────────────────────────
|
|
1816
|
-
if (args.command === "contract-verify") {
|
|
1817
|
-
const { runContractVerify } = await import("./commands/contract-verify.js");
|
|
1818
|
-
runContractVerify(argv);
|
|
1819
|
-
return;
|
|
1820
|
-
}
|
|
1821
|
-
// ─── Encoding Safety Command ─────────────────────────────────────
|
|
1822
|
-
if (args.command === "encoding-safety") {
|
|
1823
|
-
const { runEncodingSafety } = await import("./commands/encoding-safety.js");
|
|
1824
|
-
runEncodingSafety(argv);
|
|
1825
|
-
return;
|
|
1826
|
-
}
|
|
1827
|
-
// ─── Assertion Density Command ────────────────────────────────────
|
|
1828
|
-
if (args.command === "assertion-density") {
|
|
1829
|
-
const { runAssertionDensity } = await import("./commands/assertion-density.js");
|
|
1830
|
-
runAssertionDensity(argv);
|
|
1831
|
-
return;
|
|
1832
|
-
}
|
|
1833
|
-
// ─── State Integrity Command ──────────────────────────────────────
|
|
1834
|
-
if (args.command === "state-integrity") {
|
|
1835
|
-
const { runStateIntegrity } = await import("./commands/state-integrity.js");
|
|
1836
|
-
runStateIntegrity(argv);
|
|
1837
|
-
return;
|
|
1838
|
-
}
|
|
1839
|
-
// ─── Logic Lint Command ───────────────────────────────────────────
|
|
1840
|
-
if (args.command === "logic-lint") {
|
|
1841
|
-
const { runLogicLint } = await import("./commands/logic-lint.js");
|
|
1842
|
-
runLogicLint(argv);
|
|
1843
|
-
return;
|
|
1844
|
-
}
|
|
1845
|
-
// ─── Phantom Import Command ───────────────────────────────────────
|
|
1846
|
-
if (args.command === "phantom-import") {
|
|
1847
|
-
const { runPhantomImport } = await import("./commands/phantom-import.js");
|
|
1848
|
-
runPhantomImport(argv);
|
|
1849
|
-
return;
|
|
1850
|
-
}
|
|
1851
|
-
// ─── Example Leak Command ────────────────────────────────────────
|
|
1852
|
-
if (args.command === "example-leak") {
|
|
1853
|
-
const { runExampleLeak } = await import("./commands/example-leak.js");
|
|
1854
|
-
runExampleLeak(argv);
|
|
1855
|
-
return;
|
|
1856
|
-
}
|
|
1857
|
-
// ─── Completion Audit Command ─────────────────────────────────────
|
|
1858
|
-
if (args.command === "completion-audit") {
|
|
1859
|
-
const { runCompletionAudit } = await import("./commands/completion-audit.js");
|
|
1860
|
-
runCompletionAudit(argv);
|
|
1861
|
-
return;
|
|
1862
|
-
}
|
|
1863
|
-
// ─── Spec Conform Command ────────────────────────────────────────
|
|
1864
|
-
if (args.command === "spec-conform") {
|
|
1865
|
-
const { runSpecConform } = await import("./commands/spec-conform.js");
|
|
1866
|
-
runSpecConform(argv);
|
|
1867
|
-
return;
|
|
1868
|
-
}
|
|
1869
|
-
// ─── Cross-File Consistency Command ───────────────────────────────
|
|
1870
|
-
if (args.command === "cross-file-consistency") {
|
|
1871
|
-
const { runCrossFileConsistency } = await import("./commands/cross-file-consistency.js");
|
|
1872
|
-
runCrossFileConsistency(argv);
|
|
1873
|
-
return;
|
|
1874
|
-
}
|
|
1875
|
-
// ─── API Misuse Command ──────────────────────────────────────────
|
|
1876
|
-
if (args.command === "api-misuse") {
|
|
1877
|
-
const { runApiMisuse } = await import("./commands/api-misuse.js");
|
|
1878
|
-
runApiMisuse(argv);
|
|
1879
|
-
return;
|
|
1880
|
-
}
|
|
1881
|
-
// ─── Review Focus Command ────────────────────────────────────────
|
|
1882
|
-
if (args.command === "review-focus") {
|
|
1883
|
-
const { runReviewFocus } = await import("./commands/review-focus.js");
|
|
1884
|
-
runReviewFocus(argv);
|
|
1885
|
-
return;
|
|
1886
|
-
}
|
|
1887
|
-
// ─── Hallucination Detect Command ────────────────────────────────
|
|
1888
|
-
if (args.command === "hallucination-detect") {
|
|
1889
|
-
const { runHallucinationDetect } = await import("./commands/hallucination-detect.js");
|
|
1890
|
-
runHallucinationDetect(argv);
|
|
1891
|
-
return;
|
|
1892
|
-
}
|
|
1893
|
-
// ─── Context Blind Command ───────────────────────────────────────
|
|
1894
|
-
if (args.command === "context-blind") {
|
|
1895
|
-
const { runContextBlind } = await import("./commands/context-blind.js");
|
|
1896
|
-
runContextBlind(argv);
|
|
1897
|
-
return;
|
|
1898
|
-
}
|
|
1899
|
-
// ─── Over Abstraction Command ────────────────────────────────────
|
|
1900
|
-
if (args.command === "over-abstraction") {
|
|
1901
|
-
const { runOverAbstraction } = await import("./commands/over-abstraction.js");
|
|
1902
|
-
runOverAbstraction(argv);
|
|
1903
|
-
return;
|
|
1904
|
-
}
|
|
1905
|
-
// ─── Stale Pattern Command ───────────────────────────────────────
|
|
1906
|
-
if (args.command === "stale-pattern") {
|
|
1907
|
-
const { runStalePattern } = await import("./commands/stale-pattern.js");
|
|
1908
|
-
runStalePattern(argv);
|
|
1909
|
-
return;
|
|
1910
|
-
}
|
|
1911
|
-
// ─── Security Theater Command ────────────────────────────────────
|
|
1912
|
-
if (args.command === "security-theater") {
|
|
1913
|
-
const { runSecurityTheater } = await import("./commands/security-theater.js");
|
|
1914
|
-
runSecurityTheater(argv);
|
|
1915
|
-
return;
|
|
1916
|
-
}
|
|
1917
|
-
// ─── Review Digest Command ───────────────────────────────────────
|
|
1918
|
-
if (args.command === "review-digest") {
|
|
1919
|
-
const { runReviewDigest } = await import("./commands/review-digest.js");
|
|
1920
|
-
runReviewDigest(argv);
|
|
1921
|
-
return;
|
|
1922
|
-
}
|
|
1923
|
-
// ─── Adoption Track Command ──────────────────────────────────────
|
|
1924
|
-
if (args.command === "adoption-track") {
|
|
1925
|
-
const { runAdoptionTrack } = await import("./commands/adoption-track.js");
|
|
1926
|
-
runAdoptionTrack(argv);
|
|
1927
|
-
return;
|
|
1928
|
-
}
|
|
1929
|
-
// ─── Finding Budget Command ──────────────────────────────────────
|
|
1930
|
-
if (args.command === "finding-budget") {
|
|
1931
|
-
const { runFindingBudget } = await import("./commands/finding-budget.js");
|
|
1932
|
-
runFindingBudget(argv);
|
|
1933
|
-
return;
|
|
1934
|
-
}
|
|
1935
|
-
// ─── Quick Check Command ─────────────────────────────────────────
|
|
1936
|
-
if (args.command === "quick-check") {
|
|
1937
|
-
const { runQuickCheck } = await import("./commands/quick-check.js");
|
|
1938
|
-
runQuickCheck(argv);
|
|
1939
|
-
return;
|
|
1940
|
-
}
|
|
1941
|
-
// ─── Merge Verdict Command ──────────────────────────────────────
|
|
1942
|
-
if (args.command === "merge-verdict") {
|
|
1943
|
-
const { runMergeVerdict } = await import("./commands/merge-verdict.js");
|
|
1944
|
-
runMergeVerdict(argv);
|
|
1945
|
-
return;
|
|
1946
|
-
}
|
|
1947
|
-
// ─── Review Handoff Command ─────────────────────────────────────
|
|
1948
|
-
if (args.command === "review-handoff") {
|
|
1949
|
-
const { runReviewHandoff } = await import("./commands/review-handoff.js");
|
|
1950
|
-
runReviewHandoff(argv);
|
|
1951
|
-
return;
|
|
1952
|
-
}
|
|
1953
|
-
// ─── Evidence Chain Command ─────────────────────────────────────
|
|
1954
|
-
if (args.command === "evidence-chain") {
|
|
1955
|
-
const { runEvidenceChain } = await import("./commands/evidence-chain.js");
|
|
1956
|
-
runEvidenceChain(argv);
|
|
1957
|
-
return;
|
|
1958
|
-
}
|
|
1959
|
-
// ─── AI Provenance Command ──────────────────────────────────────
|
|
1960
|
-
if (args.command === "ai-provenance") {
|
|
1961
|
-
const { runAiProvenance } = await import("./commands/ai-provenance.js");
|
|
1962
|
-
runAiProvenance(argv);
|
|
1963
|
-
return;
|
|
1964
|
-
}
|
|
1965
|
-
// ─── Review Receipt Command ─────────────────────────────────────
|
|
1966
|
-
if (args.command === "review-receipt") {
|
|
1967
|
-
const { runReviewReceipt } = await import("./commands/review-receipt.js");
|
|
1968
|
-
runReviewReceipt(argv);
|
|
1969
|
-
return;
|
|
1970
|
-
}
|
|
1971
|
-
// ─── Review Contract Command ────────────────────────────────────
|
|
1972
|
-
if (args.command === "review-contract") {
|
|
1973
|
-
const { runReviewContract } = await import("./commands/review-contract.js");
|
|
1974
|
-
runReviewContract(argv);
|
|
1975
|
-
return;
|
|
1976
|
-
}
|
|
1977
|
-
// ─── Blame Review Command ──────────────────────────────────────
|
|
1978
|
-
if (args.command === "blame-review") {
|
|
1979
|
-
const { runBlameReview } = await import("./commands/blame-review.js");
|
|
1980
|
-
runBlameReview(argv);
|
|
1981
|
-
return;
|
|
1982
|
-
}
|
|
1983
|
-
// ─── Review Gate Command ─────────────────────────────────────────
|
|
1984
|
-
if (args.command === "review-gate") {
|
|
1985
|
-
const { runReviewGate } = await import("./commands/review-gate.js");
|
|
1986
|
-
runReviewGate(argv);
|
|
1987
|
-
return;
|
|
1988
|
-
}
|
|
1989
|
-
// ─── Diff Review Command ─────────────────────────────────────────
|
|
1990
|
-
if (args.command === "diff-review") {
|
|
1991
|
-
const { runDiffReview } = await import("./commands/diff-review.js");
|
|
1992
|
-
runDiffReview(argv);
|
|
1993
|
-
return;
|
|
1994
|
-
}
|
|
1995
|
-
// ─── Batch Review Command ───────────────────────────────────────
|
|
1996
|
-
if (args.command === "batch-review") {
|
|
1997
|
-
const { runBatchReview } = await import("./commands/batch-review.js");
|
|
1998
|
-
runBatchReview(argv);
|
|
1999
|
-
return;
|
|
2000
|
-
}
|
|
2001
|
-
// ─── Custom Rule Command ────────────────────────────────────────
|
|
2002
|
-
if (args.command === "custom-rule") {
|
|
2003
|
-
const { runCustomRule } = await import("./commands/custom-rule.js");
|
|
2004
|
-
runCustomRule(argv);
|
|
2005
|
-
return;
|
|
2006
|
-
}
|
|
2007
|
-
// ─── Review Compare Command ─────────────────────────────────────
|
|
2008
|
-
if (args.command === "review-compare") {
|
|
2009
|
-
const { runReviewCompare } = await import("./commands/review-compare.js");
|
|
2010
|
-
runReviewCompare(argv);
|
|
2011
|
-
return;
|
|
2012
|
-
}
|
|
2013
|
-
// ─── Severity Tune Command ──────────────────────────────────────
|
|
2014
|
-
if (args.command === "severity-tune") {
|
|
2015
|
-
const { runSeverityTune } = await import("./commands/severity-tune.js");
|
|
2016
|
-
runSeverityTune(argv);
|
|
2017
|
-
return;
|
|
2018
|
-
}
|
|
2019
|
-
// ─── Review Explain Command ─────────────────────────────────────
|
|
2020
|
-
if (args.command === "review-explain") {
|
|
2021
|
-
const { runReviewExplain } = await import("./commands/review-explain.js");
|
|
2022
|
-
runReviewExplain(argv);
|
|
2023
|
-
return;
|
|
2024
|
-
}
|
|
2025
|
-
// ─── Focus Area Command ─────────────────────────────────────────
|
|
2026
|
-
if (args.command === "focus-area") {
|
|
2027
|
-
const { runFocusArea } = await import("./commands/focus-area.js");
|
|
2028
|
-
runFocusArea(argv);
|
|
2029
|
-
return;
|
|
2030
|
-
}
|
|
2031
|
-
// ─── Review Cache Command ──────────────────────────────────────
|
|
2032
|
-
if (args.command === "review-cache") {
|
|
2033
|
-
const { runReviewCache } = await import("./commands/review-cache.js");
|
|
2034
|
-
runReviewCache(argv);
|
|
2035
|
-
return;
|
|
2036
|
-
}
|
|
2037
|
-
// ─── Ignore List Command ──────────────────────────────────────
|
|
2038
|
-
if (args.command === "ignore-list") {
|
|
2039
|
-
const { runIgnoreList } = await import("./commands/ignore-list.js");
|
|
2040
|
-
runIgnoreList(argv);
|
|
2041
|
-
return;
|
|
2042
|
-
}
|
|
2043
|
-
// ─── Review Log Command ───────────────────────────────────────
|
|
2044
|
-
if (args.command === "review-log") {
|
|
2045
|
-
const { runReviewLog } = await import("./commands/review-log.js");
|
|
2046
|
-
runReviewLog(argv);
|
|
2047
|
-
return;
|
|
2048
|
-
}
|
|
2049
|
-
// ─── Team Config Command ──────────────────────────────────────
|
|
2050
|
-
if (args.command === "team-config") {
|
|
2051
|
-
const { runTeamConfig } = await import("./commands/team-config.js");
|
|
2052
|
-
runTeamConfig(argv);
|
|
2053
|
-
return;
|
|
2054
|
-
}
|
|
2055
|
-
// ─── Finding Group Command ────────────────────────────────────
|
|
2056
|
-
if (args.command === "finding-group") {
|
|
2057
|
-
const { runFindingGroup } = await import("./commands/finding-group.js");
|
|
2058
|
-
runFindingGroup(argv);
|
|
2059
|
-
return;
|
|
2060
|
-
}
|
|
2061
|
-
// ─── Review Summary Command ───────────────────────────────────
|
|
2062
|
-
if (args.command === "review-summary") {
|
|
2063
|
-
const { runReviewSummary } = await import("./commands/review-summary.js");
|
|
2064
|
-
runReviewSummary(argv);
|
|
2065
|
-
return;
|
|
2066
|
-
}
|
|
2067
|
-
// ─── Rule Test Command ────────────────────────────────────────
|
|
2068
|
-
if (args.command === "rule-test") {
|
|
2069
|
-
const { runRuleTest } = await import("./commands/rule-test.js");
|
|
2070
|
-
runRuleTest(argv);
|
|
2071
|
-
return;
|
|
2072
|
-
}
|
|
2073
|
-
// ─── Incremental Review Command ───────────────────────────────
|
|
2074
|
-
if (args.command === "incremental-review") {
|
|
2075
|
-
const { runIncrementalReview } = await import("./commands/incremental-review.js");
|
|
2076
|
-
runIncrementalReview(argv);
|
|
2077
|
-
return;
|
|
2078
|
-
}
|
|
2079
|
-
// ─── Review Profile Command ───────────────────────────────────
|
|
2080
|
-
if (args.command === "review-profile") {
|
|
2081
|
-
const { runReviewProfile } = await import("./commands/review-profile.js");
|
|
2082
|
-
runReviewProfile(argv);
|
|
2083
|
-
return;
|
|
2084
|
-
}
|
|
2085
|
-
// ─── Review Template Command ──────────────────────────────────
|
|
2086
|
-
if (args.command === "review-template") {
|
|
2087
|
-
const { runReviewTemplate } = await import("./commands/review-template.js");
|
|
2088
|
-
runReviewTemplate(argv);
|
|
2089
|
-
return;
|
|
2090
|
-
}
|
|
2091
|
-
// ─── Auto Approve Command ────────────────────────────────────
|
|
2092
|
-
if (args.command === "auto-approve") {
|
|
2093
|
-
const { runAutoApprove } = await import("./commands/auto-approve.js");
|
|
2094
|
-
runAutoApprove(argv);
|
|
2095
|
-
return;
|
|
2096
|
-
}
|
|
2097
|
-
// ─── Diff Explain Command ────────────────────────────────────
|
|
2098
|
-
if (args.command === "diff-explain") {
|
|
2099
|
-
const { runDiffExplain } = await import("./commands/diff-explain.js");
|
|
2100
|
-
runDiffExplain(argv);
|
|
2101
|
-
return;
|
|
2102
|
-
}
|
|
2103
|
-
// ─── Review Stats Command ────────────────────────────────────
|
|
2104
|
-
if (args.command === "review-stats") {
|
|
2105
|
-
const { runReviewStats } = await import("./commands/review-stats.js");
|
|
2106
|
-
runReviewStats(argv);
|
|
2107
|
-
return;
|
|
2108
|
-
}
|
|
2109
|
-
// ─── Fix Suggest Command ─────────────────────────────────────
|
|
2110
|
-
if (args.command === "fix-suggest") {
|
|
2111
|
-
const { runFixSuggest } = await import("./commands/fix-suggest.js");
|
|
2112
|
-
runFixSuggest(argv);
|
|
2113
|
-
return;
|
|
2114
|
-
}
|
|
2115
|
-
// ─── Review Priority Command ─────────────────────────────────
|
|
2116
|
-
if (args.command === "review-priority") {
|
|
2117
|
-
const { runReviewPriority } = await import("./commands/review-priority.js");
|
|
2118
|
-
runReviewPriority(argv);
|
|
2119
|
-
return;
|
|
2120
|
-
}
|
|
2121
|
-
// ─── Multi-Lang Review Command ────────────────────────────────
|
|
2122
|
-
if (args.command === "multi-lang-review") {
|
|
2123
|
-
const { runMultiLangReview } = await import("./commands/multi-lang-review.js");
|
|
2124
|
-
runMultiLangReview(argv);
|
|
2125
|
-
return;
|
|
2126
|
-
}
|
|
2127
|
-
// ─── Review Webhook Command ───────────────────────────────────
|
|
2128
|
-
if (args.command === "review-webhook") {
|
|
2129
|
-
const { runReviewWebhook } = await import("./commands/review-webhook.js");
|
|
2130
|
-
runReviewWebhook(argv);
|
|
2131
|
-
return;
|
|
2132
|
-
}
|
|
2133
|
-
// ─── Finding Suppress Command ─────────────────────────────────
|
|
2134
|
-
if (args.command === "finding-suppress") {
|
|
2135
|
-
const { runFindingSuppress } = await import("./commands/finding-suppress.js");
|
|
2136
|
-
runFindingSuppress(argv);
|
|
2137
|
-
return;
|
|
2138
|
-
}
|
|
2139
|
-
// ─── Review Annotate Command ──────────────────────────────────
|
|
2140
|
-
if (args.command === "review-annotate") {
|
|
2141
|
-
const { runReviewAnnotate } = await import("./commands/review-annotate.js");
|
|
2142
|
-
runReviewAnnotate(argv);
|
|
2143
|
-
return;
|
|
2144
|
-
}
|
|
2145
|
-
// ─── Judge Config Command ─────────────────────────────────────
|
|
2146
|
-
if (args.command === "judge-config") {
|
|
2147
|
-
const { runJudgeConfig } = await import("./commands/judge-config.js");
|
|
2148
|
-
runJudgeConfig(argv);
|
|
2149
|
-
return;
|
|
2150
|
-
}
|
|
2151
|
-
// ─── Review Checkpoint Command ────────────────────────────────
|
|
2152
|
-
if (args.command === "review-checkpoint") {
|
|
2153
|
-
const { runReviewCheckpoint } = await import("./commands/review-checkpoint.js");
|
|
2154
|
-
runReviewCheckpoint(argv);
|
|
2155
|
-
return;
|
|
2156
|
-
}
|
|
2157
|
-
// ─── Review Merge Command ─────────────────────────────────────
|
|
2158
|
-
if (args.command === "review-merge") {
|
|
2159
|
-
const { runReviewMerge } = await import("./commands/review-merge.js");
|
|
2160
|
-
runReviewMerge(argv);
|
|
2161
|
-
return;
|
|
2162
|
-
}
|
|
2163
|
-
// ─── Review Filter Command ────────────────────────────────────
|
|
2164
|
-
if (args.command === "review-filter") {
|
|
2165
|
-
const { runReviewFilter } = await import("./commands/review-filter.js");
|
|
2166
|
-
runReviewFilter(argv);
|
|
2167
|
-
return;
|
|
2168
|
-
}
|
|
2169
|
-
// ─── Code Health Command ──────────────────────────────────────
|
|
2170
|
-
if (args.command === "code-health") {
|
|
2171
|
-
const { runCodeHealth } = await import("./commands/code-health.js");
|
|
2172
|
-
runCodeHealth(argv);
|
|
2173
|
-
return;
|
|
2174
|
-
}
|
|
2175
|
-
// ─── Fix Verify Command ───────────────────────────────────────
|
|
2176
|
-
if (args.command === "fix-verify") {
|
|
2177
|
-
const { runFixVerify } = await import("./commands/fix-verify.js");
|
|
2178
|
-
runFixVerify(argv);
|
|
2179
|
-
return;
|
|
2180
|
-
}
|
|
2181
|
-
// ─── Review Comment Command ───────────────────────────────────
|
|
2182
|
-
if (args.command === "review-comment") {
|
|
2183
|
-
const { runReviewComment } = await import("./commands/review-comment.js");
|
|
2184
|
-
runReviewComment(argv);
|
|
2185
|
-
return;
|
|
2186
|
-
}
|
|
2187
|
-
// ─── Finding Timeline Command ─────────────────────────────────
|
|
2188
|
-
if (args.command === "finding-timeline") {
|
|
2189
|
-
const { runFindingTimeline } = await import("./commands/finding-timeline.js");
|
|
2190
|
-
runFindingTimeline(argv);
|
|
2191
|
-
return;
|
|
2192
|
-
}
|
|
2193
|
-
// ─── Rule Catalog Command ─────────────────────────────────────
|
|
2194
|
-
if (args.command === "rule-catalog") {
|
|
2195
|
-
const { runRuleCatalog } = await import("./commands/rule-catalog.js");
|
|
2196
|
-
runRuleCatalog(argv);
|
|
2197
|
-
return;
|
|
2198
|
-
}
|
|
2199
|
-
// ─── Review Scope Command ─────────────────────────────────────
|
|
2200
|
-
if (args.command === "review-scope") {
|
|
2201
|
-
const { runReviewScope } = await import("./commands/review-scope.js");
|
|
2202
|
-
runReviewScope(argv);
|
|
2203
|
-
return;
|
|
2204
|
-
}
|
|
2205
|
-
// ─── Review Schedule Command ──────────────────────────────────
|
|
2206
|
-
if (args.command === "review-schedule") {
|
|
2207
|
-
const { runReviewSchedule } = await import("./commands/review-schedule.js");
|
|
2208
|
-
runReviewSchedule(argv);
|
|
2209
|
-
return;
|
|
2210
|
-
}
|
|
2211
|
-
// ─── Review Export Command ────────────────────────────────────
|
|
2212
|
-
if (args.command === "review-export") {
|
|
2213
|
-
const { runReviewExport } = await import("./commands/review-export.js");
|
|
2214
|
-
runReviewExport(argv);
|
|
2215
|
-
return;
|
|
2216
|
-
}
|
|
2217
|
-
// ─── Setup Wizard Command ─────────────────────────────────────
|
|
2218
|
-
if (args.command === "setup-wizard") {
|
|
2219
|
-
const { runSetupWizard } = await import("./commands/setup-wizard.js");
|
|
2220
|
-
runSetupWizard(argv);
|
|
2221
|
-
return;
|
|
2222
|
-
}
|
|
2223
|
-
// ─── Finding Age Command ──────────────────────────────────────────
|
|
2224
|
-
if (args.command === "finding-age") {
|
|
2225
|
-
const { runFindingAge } = await import("./commands/finding-age.js");
|
|
2226
|
-
await runFindingAge(argv);
|
|
2227
|
-
return;
|
|
2228
|
-
}
|
|
2229
|
-
// ─── Review Dashboard Command ────────────────────────────────────
|
|
2230
|
-
if (args.command === "review-dashboard") {
|
|
2231
|
-
const { runReviewDashboard } = await import("./commands/review-dashboard.js");
|
|
2232
|
-
await runReviewDashboard(argv);
|
|
2233
|
-
return;
|
|
2234
|
-
}
|
|
2235
|
-
// ─── Config Lint Command ─────────────────────────────────────────
|
|
2236
|
-
if (args.command === "config-lint") {
|
|
2237
|
-
const { runConfigLint } = await import("./commands/config-lint.js");
|
|
2238
|
-
await runConfigLint(argv);
|
|
2239
|
-
return;
|
|
2240
|
-
}
|
|
2241
|
-
// ─── Review Quota Command ────────────────────────────────────────
|
|
2242
|
-
if (args.command === "review-quota") {
|
|
2243
|
-
const { runReviewQuota } = await import("./commands/review-quota.js");
|
|
2244
|
-
await runReviewQuota(argv);
|
|
2245
|
-
return;
|
|
2246
|
-
}
|
|
2247
|
-
// ─── Review Offline Command ──────────────────────────────────────
|
|
2248
|
-
if (args.command === "review-offline") {
|
|
2249
|
-
const { runReviewOffline } = await import("./commands/review-offline.js");
|
|
2250
|
-
await runReviewOffline(argv);
|
|
2251
|
-
return;
|
|
2252
|
-
}
|
|
2253
|
-
// ─── Finding Rank Command ────────────────────────────────────────
|
|
2254
|
-
if (args.command === "finding-rank") {
|
|
2255
|
-
const { runFindingRank } = await import("./commands/finding-rank.js");
|
|
2256
|
-
await runFindingRank(argv);
|
|
2257
|
-
return;
|
|
2258
|
-
}
|
|
2259
|
-
// ─── Review Diff Summary Command ─────────────────────────────────
|
|
2260
|
-
if (args.command === "review-diff-summary") {
|
|
2261
|
-
const { runReviewDiffSummary } = await import("./commands/review-diff-summary.js");
|
|
2262
|
-
await runReviewDiffSummary(argv);
|
|
2263
|
-
return;
|
|
2264
|
-
}
|
|
2265
|
-
// ─── Review Notify Command ───────────────────────────────────────
|
|
2266
|
-
if (args.command === "review-notify") {
|
|
2267
|
-
const { runReviewNotify } = await import("./commands/review-notify.js");
|
|
2268
|
-
await runReviewNotify(argv);
|
|
2269
|
-
return;
|
|
2270
|
-
}
|
|
2271
|
-
// ─── Review Streak Command ───────────────────────────────────────
|
|
2272
|
-
if (args.command === "review-streak") {
|
|
2273
|
-
const { runReviewStreak } = await import("./commands/review-streak.js");
|
|
2274
|
-
await runReviewStreak(argv);
|
|
2275
|
-
return;
|
|
2276
|
-
}
|
|
2277
|
-
// ─── Finding Cluster Command ─────────────────────────────────────
|
|
2278
|
-
if (args.command === "finding-cluster") {
|
|
2279
|
-
const { runFindingCluster } = await import("./commands/finding-cluster.js");
|
|
2280
|
-
await runFindingCluster(argv);
|
|
2281
|
-
return;
|
|
2282
|
-
}
|
|
2283
|
-
// ─── Review Badge Command ────────────────────────────────────────
|
|
2284
|
-
if (args.command === "review-badge") {
|
|
2285
|
-
const { runReviewBadge } = await import("./commands/review-badge.js");
|
|
2286
|
-
await runReviewBadge(argv);
|
|
2287
|
-
return;
|
|
2288
|
-
}
|
|
2289
|
-
// ─── Review Audit Log Command ────────────────────────────────────
|
|
2290
|
-
if (args.command === "review-audit-log") {
|
|
2291
|
-
const { runReviewAuditLog } = await import("./commands/review-audit-log.js");
|
|
2292
|
-
await runReviewAuditLog(argv);
|
|
2293
|
-
return;
|
|
2294
|
-
}
|
|
2295
|
-
// ─── Review Sandbox Command ──────────────────────────────────────
|
|
2296
|
-
if (args.command === "review-sandbox") {
|
|
2297
|
-
const { runReviewSandbox } = await import("./commands/review-sandbox.js");
|
|
2298
|
-
await runReviewSandbox(argv);
|
|
2299
|
-
return;
|
|
2300
|
-
}
|
|
2301
|
-
// ─── Finding Hotspot Command ─────────────────────────────────────
|
|
2302
|
-
if (args.command === "finding-hotspot") {
|
|
2303
|
-
const { runFindingHotspot } = await import("./commands/finding-hotspot.js");
|
|
2304
|
-
await runFindingHotspot(argv);
|
|
2305
|
-
return;
|
|
2306
|
-
}
|
|
2307
|
-
// ─── Review AB Test Command ──────────────────────────────────────
|
|
2308
|
-
if (args.command === "review-ab-test") {
|
|
2309
|
-
const { runReviewAbTest } = await import("./commands/review-ab-test.js");
|
|
2310
|
-
await runReviewAbTest(argv);
|
|
2311
|
-
return;
|
|
2312
|
-
}
|
|
2313
|
-
// ─── Review Integration Command ──────────────────────────────────
|
|
2314
|
-
if (args.command === "review-integration") {
|
|
2315
|
-
const { runReviewIntegration } = await import("./commands/review-integration.js");
|
|
2316
|
-
await runReviewIntegration(argv);
|
|
2317
|
-
return;
|
|
2318
|
-
}
|
|
2319
|
-
// ─── Review Standup Command ──────────────────────────────────────
|
|
2320
|
-
if (args.command === "review-standup") {
|
|
2321
|
-
const { runReviewStandup } = await import("./commands/review-standup.js");
|
|
2322
|
-
await runReviewStandup(argv);
|
|
2323
|
-
return;
|
|
2324
|
-
}
|
|
2325
|
-
// ─── Finding Fix Rate Command ────────────────────────────────────
|
|
2326
|
-
if (args.command === "finding-fix-rate") {
|
|
2327
|
-
const { runFindingFixRate } = await import("./commands/finding-fix-rate.js");
|
|
2328
|
-
await runFindingFixRate(argv);
|
|
2329
|
-
return;
|
|
2330
|
-
}
|
|
2331
|
-
// ─── Review Milestone Command ────────────────────────────────────
|
|
2332
|
-
if (args.command === "review-milestone") {
|
|
2333
|
-
const { runReviewMilestone } = await import("./commands/review-milestone.js");
|
|
2334
|
-
await runReviewMilestone(argv);
|
|
2335
|
-
return;
|
|
2336
|
-
}
|
|
2337
|
-
// ─── Review Risk Score Command ───────────────────────────────────
|
|
2338
|
-
if (args.command === "review-risk-score") {
|
|
2339
|
-
const { runReviewRiskScore } = await import("./commands/review-risk-score.js");
|
|
2340
|
-
await runReviewRiskScore(argv);
|
|
2341
|
-
return;
|
|
2342
|
-
}
|
|
2343
|
-
// ─── Review Changelog Gen Command ────────────────────────────────
|
|
2344
|
-
if (args.command === "review-changelog-gen") {
|
|
2345
|
-
const { runReviewChangelogGen } = await import("./commands/review-changelog-gen.js");
|
|
2346
|
-
await runReviewChangelogGen(argv);
|
|
2347
|
-
return;
|
|
2348
|
-
}
|
|
2349
|
-
// ─── Finding Recurrence Command ──────────────────────────────────
|
|
2350
|
-
if (args.command === "finding-recurrence") {
|
|
2351
|
-
const { runFindingRecurrence } = await import("./commands/finding-recurrence.js");
|
|
2352
|
-
await runFindingRecurrence(argv);
|
|
2353
|
-
return;
|
|
2354
|
-
}
|
|
2355
|
-
// ─── Review Benchmark Self Command ───────────────────────────────
|
|
2356
|
-
if (args.command === "review-benchmark-self") {
|
|
2357
|
-
const { runReviewBenchmarkSelf } = await import("./commands/review-benchmark-self.js");
|
|
2358
|
-
await runReviewBenchmarkSelf(argv);
|
|
2359
|
-
return;
|
|
2360
|
-
}
|
|
2361
|
-
// ─── Review Report PDF Command ───────────────────────────────────
|
|
2362
|
-
if (args.command === "review-report-pdf") {
|
|
2363
|
-
const { runReviewReportPdf } = await import("./commands/review-report-pdf.js");
|
|
2364
|
-
await runReviewReportPdf(argv);
|
|
2365
|
-
return;
|
|
2366
|
-
}
|
|
2367
|
-
// ─── Review Tag Command ─────────────────────────────────────────────
|
|
2368
|
-
if (args.command === "review-tag") {
|
|
2369
|
-
const { runReviewTag } = await import("./commands/review-tag.js");
|
|
2370
|
-
runReviewTag(argv);
|
|
2371
|
-
return;
|
|
2372
|
-
}
|
|
2373
|
-
// ─── Finding Impact Command ─────────────────────────────────────────
|
|
2374
|
-
if (args.command === "finding-impact") {
|
|
2375
|
-
const { runFindingImpact } = await import("./commands/finding-impact.js");
|
|
2376
|
-
runFindingImpact(argv);
|
|
2377
|
-
return;
|
|
2378
|
-
}
|
|
2379
|
-
// ─── Review Archive Command ─────────────────────────────────────────
|
|
2380
|
-
if (args.command === "review-archive") {
|
|
2381
|
-
const { runReviewArchive } = await import("./commands/review-archive.js");
|
|
2382
|
-
runReviewArchive(argv);
|
|
2383
|
-
return;
|
|
2384
|
-
}
|
|
2385
|
-
// ─── Review Whitelist Command ───────────────────────────────────────
|
|
2386
|
-
if (args.command === "review-whitelist") {
|
|
2387
|
-
const { runReviewWhitelist } = await import("./commands/review-whitelist.js");
|
|
2388
|
-
runReviewWhitelist(argv);
|
|
2389
|
-
return;
|
|
2390
|
-
}
|
|
2391
|
-
// ─── Review Custom Prompt Command ───────────────────────────────────
|
|
2392
|
-
if (args.command === "review-custom-prompt") {
|
|
2393
|
-
const { runReviewCustomPrompt } = await import("./commands/review-custom-prompt.js");
|
|
2394
|
-
runReviewCustomPrompt(argv);
|
|
2395
|
-
return;
|
|
2396
|
-
}
|
|
2397
|
-
// ─── Review Diff Context Command ───────────────────────────────────
|
|
2398
|
-
if (args.command === "review-diff-context") {
|
|
2399
|
-
const { runReviewDiffContext } = await import("./commands/review-diff-context.js");
|
|
2400
|
-
runReviewDiffContext(argv);
|
|
2401
|
-
return;
|
|
2402
|
-
}
|
|
2403
|
-
// ─── Review CI Status Command ──────────────────────────────────────
|
|
2404
|
-
if (args.command === "review-ci-status") {
|
|
2405
|
-
const { runReviewCiStatus } = await import("./commands/review-ci-status.js");
|
|
2406
|
-
runReviewCiStatus(argv);
|
|
2407
|
-
return;
|
|
2408
|
-
}
|
|
2409
|
-
// ─── Review Team Summary Command ───────────────────────────────────
|
|
2410
|
-
if (args.command === "review-team-summary") {
|
|
2411
|
-
const { runReviewTeamSummary } = await import("./commands/review-team-summary.js");
|
|
2412
|
-
runReviewTeamSummary(argv);
|
|
2413
|
-
return;
|
|
2414
|
-
}
|
|
2415
|
-
// ─── Finding Auto Fix Command ─────────────────────────────────────
|
|
2416
|
-
if (args.command === "finding-auto-fix") {
|
|
2417
|
-
const { runFindingAutoFix } = await import("./commands/finding-auto-fix.js");
|
|
2418
|
-
runFindingAutoFix(argv);
|
|
2419
|
-
return;
|
|
2420
|
-
}
|
|
2421
|
-
// ─── Review History Search Command ────────────────────────────────
|
|
2422
|
-
if (args.command === "review-history-search") {
|
|
2423
|
-
const { runReviewHistorySearch } = await import("./commands/review-history-search.js");
|
|
2424
|
-
runReviewHistorySearch(argv);
|
|
2425
|
-
return;
|
|
2426
|
-
}
|
|
2427
|
-
// ─── Review Language Stats Command ────────────────────────────────
|
|
2428
|
-
if (args.command === "review-language-stats") {
|
|
2429
|
-
const { runReviewLanguageStats } = await import("./commands/review-language-stats.js");
|
|
2430
|
-
runReviewLanguageStats(argv);
|
|
2431
|
-
return;
|
|
2432
|
-
}
|
|
2433
|
-
// ─── Review Coverage Map Command ──────────────────────────────────
|
|
2434
|
-
if (args.command === "review-coverage-map") {
|
|
2435
|
-
const { runReviewCoverageMap } = await import("./commands/review-coverage-map.js");
|
|
2436
|
-
runReviewCoverageMap(argv);
|
|
2437
|
-
return;
|
|
2438
|
-
}
|
|
2439
|
-
// ─── Review Rollback Command ──────────────────────────────────────
|
|
2440
|
-
if (args.command === "review-rollback") {
|
|
2441
|
-
const { runReviewRollback } = await import("./commands/review-rollback.js");
|
|
2442
|
-
runReviewRollback(argv);
|
|
2443
|
-
return;
|
|
2444
|
-
}
|
|
2445
|
-
// ─── Review Onboard Command ───────────────────────────────────────
|
|
2446
|
-
if (args.command === "review-onboard") {
|
|
2447
|
-
const { runReviewOnboard } = await import("./commands/review-onboard.js");
|
|
2448
|
-
runReviewOnboard(argv);
|
|
2449
|
-
return;
|
|
2450
|
-
}
|
|
2451
|
-
// ─── Review Parallel Command ──────────────────────────────────────
|
|
2452
|
-
if (args.command === "review-parallel") {
|
|
2453
|
-
const { runReviewParallel } = await import("./commands/review-parallel.js");
|
|
2454
|
-
runReviewParallel(argv);
|
|
2455
|
-
return;
|
|
2456
|
-
}
|
|
2457
|
-
// ─── Finding Context Command ──────────────────────────────────────
|
|
2458
|
-
if (args.command === "finding-context") {
|
|
2459
|
-
const { runFindingContext } = await import("./commands/finding-context.js");
|
|
2460
|
-
runFindingContext(argv);
|
|
2461
|
-
return;
|
|
2462
|
-
}
|
|
2463
|
-
// ─── Review Approval Command ──────────────────────────────────────
|
|
2464
|
-
if (args.command === "review-approval") {
|
|
2465
|
-
const { runReviewApproval } = await import("./commands/review-approval.js");
|
|
2466
|
-
runReviewApproval(argv);
|
|
2467
|
-
return;
|
|
2468
|
-
}
|
|
2469
|
-
// ─── Finding Severity Override Command ────────────────────────────
|
|
2470
|
-
if (args.command === "finding-severity-override") {
|
|
2471
|
-
const { runFindingSeverityOverride } = await import("./commands/finding-severity-override.js");
|
|
2472
|
-
runFindingSeverityOverride(argv);
|
|
2473
|
-
return;
|
|
2474
|
-
}
|
|
2475
|
-
// ─── Review Config Export Command ─────────────────────────────────
|
|
2476
|
-
if (args.command === "review-config-export") {
|
|
2477
|
-
const { runReviewConfigExport } = await import("./commands/review-config-export.js");
|
|
2478
|
-
runReviewConfigExport(argv);
|
|
2479
|
-
return;
|
|
2480
|
-
}
|
|
2481
|
-
// ─── Review PR Comment Command ────────────────────────────────────
|
|
2482
|
-
if (args.command === "review-pr-comment") {
|
|
2483
|
-
const { runReviewPrComment } = await import("./commands/review-pr-comment.js");
|
|
2484
|
-
runReviewPrComment(argv);
|
|
2485
|
-
return;
|
|
2486
|
-
}
|
|
2487
|
-
// ─── Review Ignore Path Command ───────────────────────────────────
|
|
2488
|
-
if (args.command === "review-ignore-path") {
|
|
2489
|
-
const { runReviewIgnorePath } = await import("./commands/review-ignore-path.js");
|
|
2490
|
-
runReviewIgnorePath(argv);
|
|
2491
|
-
return;
|
|
2492
|
-
}
|
|
2493
|
-
// ─── Finding Deduplicate Command ──────────────────────────────────
|
|
2494
|
-
if (args.command === "finding-deduplicate") {
|
|
2495
|
-
const { runFindingDeduplicate } = await import("./commands/finding-deduplicate.js");
|
|
2496
|
-
runFindingDeduplicate(argv);
|
|
2497
|
-
return;
|
|
2498
|
-
}
|
|
2499
|
-
// ─── Review Score History Command ─────────────────────────────────
|
|
2500
|
-
if (args.command === "review-score-history") {
|
|
2501
|
-
const { runReviewScoreHistory } = await import("./commands/review-score-history.js");
|
|
2502
|
-
runReviewScoreHistory(argv);
|
|
2503
|
-
return;
|
|
2504
|
-
}
|
|
2505
|
-
// ─── Review Feedback Command ──────────────────────────────────────
|
|
2506
|
-
if (args.command === "review-feedback") {
|
|
2507
|
-
const { runReviewFeedback } = await import("./commands/review-feedback.js");
|
|
2508
|
-
runReviewFeedback(argv);
|
|
2509
|
-
return;
|
|
2510
|
-
}
|
|
2511
|
-
// ─── Finding False Positive Command ───────────────────────────────
|
|
2512
|
-
if (args.command === "finding-false-positive") {
|
|
2513
|
-
const { runFindingFalsePositive } = await import("./commands/finding-false-positive.js");
|
|
2514
|
-
runFindingFalsePositive(argv);
|
|
2515
|
-
return;
|
|
2516
|
-
}
|
|
2517
|
-
// ─── Review Session Command ───────────────────────────────────────
|
|
2518
|
-
if (args.command === "review-session") {
|
|
2519
|
-
const { runReviewSession } = await import("./commands/review-session.js");
|
|
2520
|
-
runReviewSession(argv);
|
|
2521
|
-
return;
|
|
2522
|
-
}
|
|
2523
|
-
// ─── Review Bulk Action Command ───────────────────────────────────
|
|
2524
|
-
if (args.command === "review-bulk-action") {
|
|
2525
|
-
const { runReviewBulkAction } = await import("./commands/review-bulk-action.js");
|
|
2526
|
-
runReviewBulkAction(argv);
|
|
2527
|
-
return;
|
|
2528
|
-
}
|
|
2529
|
-
// ─── Review Retry Command ─────────────────────────────────────────
|
|
2530
|
-
if (args.command === "review-retry") {
|
|
2531
|
-
const { runReviewRetry } = await import("./commands/review-retry.js");
|
|
2532
|
-
runReviewRetry(argv);
|
|
2533
|
-
return;
|
|
2534
|
-
}
|
|
2535
|
-
// ─── Review Depth Command ─────────────────────────────────────────
|
|
2536
|
-
if (args.command === "review-depth") {
|
|
2537
|
-
const { runReviewDepth } = await import("./commands/review-depth.js");
|
|
2538
|
-
runReviewDepth(argv);
|
|
2539
|
-
return;
|
|
2540
|
-
}
|
|
2541
|
-
// ─── Finding Link Command ─────────────────────────────────────────
|
|
2542
|
-
if (args.command === "finding-link") {
|
|
2543
|
-
const { runFindingLink } = await import("./commands/finding-link.js");
|
|
2544
|
-
runFindingLink(argv);
|
|
2545
|
-
return;
|
|
2546
|
-
}
|
|
2547
|
-
// ─── Review Compare Version Command ───────────────────────────────
|
|
2548
|
-
if (args.command === "review-compare-version") {
|
|
2549
|
-
const { runReviewCompareVersion } = await import("./commands/review-compare-version.js");
|
|
2550
|
-
runReviewCompareVersion(argv);
|
|
2551
|
-
return;
|
|
2552
|
-
}
|
|
2553
|
-
// ─── Review Summary Email Command ─────────────────────────────────
|
|
2554
|
-
if (args.command === "review-summary-email") {
|
|
2555
|
-
const { runReviewSummaryEmail } = await import("./commands/review-summary-email.js");
|
|
2556
|
-
runReviewSummaryEmail(argv);
|
|
2557
|
-
return;
|
|
2558
|
-
}
|
|
2559
|
-
// ─── Finding Confidence Filter Command ────────────────────────────
|
|
2560
|
-
if (args.command === "finding-confidence-filter") {
|
|
2561
|
-
const { runFindingConfidenceFilter } = await import("./commands/finding-confidence-filter.js");
|
|
2562
|
-
runFindingConfidenceFilter(argv);
|
|
2563
|
-
return;
|
|
2564
|
-
}
|
|
2565
|
-
// ─── Review Skip Rule Command ─────────────────────────────────────
|
|
2566
|
-
if (args.command === "review-skip-rule") {
|
|
2567
|
-
const { runReviewSkipRule } = await import("./commands/review-skip-rule.js");
|
|
2568
|
-
runReviewSkipRule(argv);
|
|
2569
|
-
return;
|
|
2570
|
-
}
|
|
2571
|
-
// ─── Review Note Command ──────────────────────────────────────────
|
|
2572
|
-
if (args.command === "review-note") {
|
|
2573
|
-
const { runReviewNote } = await import("./commands/review-note.js");
|
|
2574
|
-
runReviewNote(argv);
|
|
2575
|
-
return;
|
|
2576
|
-
}
|
|
2577
|
-
// ─── Finding Export CSV Command ───────────────────────────────────
|
|
2578
|
-
if (args.command === "finding-export-csv") {
|
|
2579
|
-
const { runFindingExportCsv } = await import("./commands/finding-export-csv.js");
|
|
2580
|
-
runFindingExportCsv(argv);
|
|
2581
|
-
return;
|
|
2582
|
-
}
|
|
2583
|
-
// ─── Review Timeline Command ──────────────────────────────────────
|
|
2584
|
-
if (args.command === "review-timeline") {
|
|
2585
|
-
const { runReviewTimeline } = await import("./commands/review-timeline.js");
|
|
2586
|
-
runReviewTimeline(argv);
|
|
2587
|
-
return;
|
|
2588
|
-
}
|
|
2589
|
-
// ─── Review Snapshot Diff Command ─────────────────────────────────
|
|
2590
|
-
if (args.command === "review-snapshot-diff") {
|
|
2591
|
-
const { runReviewSnapshotDiff } = await import("./commands/review-snapshot-diff.js");
|
|
2592
|
-
runReviewSnapshotDiff(argv);
|
|
2593
|
-
return;
|
|
2594
|
-
}
|
|
2595
|
-
// ─── Finding Resolution Command ───────────────────────────────────
|
|
2596
|
-
if (args.command === "finding-resolution") {
|
|
2597
|
-
const { runFindingResolution } = await import("./commands/finding-resolution.js");
|
|
2598
|
-
runFindingResolution(argv);
|
|
2599
|
-
return;
|
|
2600
|
-
}
|
|
2601
|
-
// ─── Review Owner Command ─────────────────────────────────────────
|
|
2602
|
-
if (args.command === "review-owner") {
|
|
2603
|
-
const { runReviewOwner } = await import("./commands/review-owner.js");
|
|
2604
|
-
runReviewOwner(argv);
|
|
2605
|
-
return;
|
|
2606
|
-
}
|
|
2607
|
-
// ─── Review Checklist Command ─────────────────────────────────────
|
|
2608
|
-
if (args.command === "review-checklist") {
|
|
2609
|
-
const { runReviewChecklist } = await import("./commands/review-checklist.js");
|
|
2610
|
-
runReviewChecklist(argv);
|
|
2611
|
-
return;
|
|
2612
|
-
}
|
|
2613
|
-
// ─── Finding Category Command ─────────────────────────────────────
|
|
2614
|
-
if (args.command === "finding-category") {
|
|
2615
|
-
const { runFindingCategory } = await import("./commands/finding-category.js");
|
|
2616
|
-
runFindingCategory(argv);
|
|
2617
|
-
return;
|
|
2618
|
-
}
|
|
2619
|
-
// ─── Review Lock Command ────────────────────────────────────────
|
|
2620
|
-
if (args.command === "review-lock") {
|
|
2621
|
-
const { runReviewLock } = await import("./commands/review-lock.js");
|
|
2622
|
-
runReviewLock(argv);
|
|
2623
|
-
return;
|
|
2624
|
-
}
|
|
2625
|
-
// ─── Finding Priority Queue Command ─────────────────────────────
|
|
2626
|
-
if (args.command === "finding-priority-queue") {
|
|
2627
|
-
const { runFindingPriorityQueue } = await import("./commands/finding-priority-queue.js");
|
|
2628
|
-
runFindingPriorityQueue(argv);
|
|
2629
|
-
return;
|
|
2630
|
-
}
|
|
2631
|
-
// ─── Review Diff Annotate Command ───────────────────────────────
|
|
2632
|
-
if (args.command === "review-diff-annotate") {
|
|
2633
|
-
const { runReviewDiffAnnotate } = await import("./commands/review-diff-annotate.js");
|
|
2634
|
-
runReviewDiffAnnotate(argv);
|
|
2635
|
-
return;
|
|
2636
|
-
}
|
|
2637
|
-
// ─── Finding Remediation Plan Command ───────────────────────────
|
|
2638
|
-
if (args.command === "finding-remediation-plan") {
|
|
2639
|
-
const { runFindingRemediationPlan } = await import("./commands/finding-remediation-plan.js");
|
|
2640
|
-
runFindingRemediationPlan(argv);
|
|
2641
|
-
return;
|
|
2642
|
-
}
|
|
2643
|
-
// ─── Review Config Validate Command ─────────────────────────────
|
|
2644
|
-
if (args.command === "review-config-validate") {
|
|
2645
|
-
const { runReviewConfigValidate } = await import("./commands/review-config-validate.js");
|
|
2646
|
-
runReviewConfigValidate(argv);
|
|
2647
|
-
return;
|
|
2648
|
-
}
|
|
2649
|
-
// ─── Review Rate Limit Command ──────────────────────────────────
|
|
2650
|
-
if (args.command === "review-rate-limit") {
|
|
2651
|
-
const { runReviewRateLimit } = await import("./commands/review-rate-limit.js");
|
|
2652
|
-
runReviewRateLimit(argv);
|
|
2653
|
-
return;
|
|
2654
|
-
}
|
|
2655
|
-
// ─── Finding Trend Command ────────────────────────────────────────
|
|
2656
|
-
if (args.command === "finding-trend") {
|
|
2657
|
-
const { runFindingTrend } = await import("./commands/finding-trend.js");
|
|
2658
|
-
runFindingTrend(argv);
|
|
2659
|
-
return;
|
|
2660
|
-
}
|
|
2661
|
-
// ─── Finding Snippet Command ──────────────────────────────────────
|
|
2662
|
-
if (args.command === "finding-snippet") {
|
|
2663
|
-
const { runFindingSnippet } = await import("./commands/finding-snippet.js");
|
|
2664
|
-
runFindingSnippet(argv);
|
|
2665
|
-
return;
|
|
2666
|
-
}
|
|
2667
|
-
// ─── Review Env Check Command ─────────────────────────────────────
|
|
2668
|
-
if (args.command === "review-env-check") {
|
|
2669
|
-
const { runReviewEnvCheck } = await import("./commands/review-env-check.js");
|
|
2670
|
-
runReviewEnvCheck(argv);
|
|
2671
|
-
return;
|
|
2672
|
-
}
|
|
2673
|
-
// ─── Finding Batch Resolve Command ────────────────────────────────
|
|
2674
|
-
if (args.command === "finding-batch-resolve") {
|
|
2675
|
-
const { runFindingBatchResolve } = await import("./commands/finding-batch-resolve.js");
|
|
2676
|
-
runFindingBatchResolve(argv);
|
|
2677
|
-
return;
|
|
2678
|
-
}
|
|
2679
|
-
// ─── Review Integration Test Command ──────────────────────────────
|
|
2680
|
-
if (args.command === "review-integration-test") {
|
|
2681
|
-
const { runReviewIntegrationTest } = await import("./commands/review-integration-test.js");
|
|
2682
|
-
runReviewIntegrationTest(argv);
|
|
2683
|
-
return;
|
|
2684
|
-
}
|
|
2685
|
-
// ─── Review Health Check Command ──────────────────────────────────
|
|
2686
|
-
if (args.command === "review-health-check") {
|
|
2687
|
-
const { runReviewHealthCheck } = await import("./commands/review-health-check.js");
|
|
2688
|
-
runReviewHealthCheck(argv);
|
|
2689
|
-
return;
|
|
2690
|
-
}
|
|
2691
|
-
// ─── Finding Age Report Command ───────────────────────────────────
|
|
2692
|
-
if (args.command === "finding-age-report") {
|
|
2693
|
-
const { runFindingAgeReport } = await import("./commands/finding-age-report.js");
|
|
2694
|
-
runFindingAgeReport(argv);
|
|
2695
|
-
return;
|
|
2696
|
-
}
|
|
2697
|
-
// ─── Review Rule Stats Command ────────────────────────────────────
|
|
2698
|
-
if (args.command === "review-rule-stats") {
|
|
2699
|
-
const { runReviewRuleStats } = await import("./commands/review-rule-stats.js");
|
|
2700
|
-
runReviewRuleStats(argv);
|
|
2701
|
-
return;
|
|
2702
|
-
}
|
|
2703
|
-
// ─── Review Parallel Diff Command ─────────────────────────────────
|
|
2704
|
-
if (args.command === "review-parallel-diff") {
|
|
2705
|
-
const { runReviewParallelDiff } = await import("./commands/review-parallel-diff.js");
|
|
2706
|
-
runReviewParallelDiff(argv);
|
|
2707
|
-
return;
|
|
2708
|
-
}
|
|
2709
|
-
// ─── Review Auto Merge Command ────────────────────────────────────
|
|
2710
|
-
if (args.command === "review-auto-merge") {
|
|
2711
|
-
const { runReviewAutoMerge } = await import("./commands/review-auto-merge.js");
|
|
2712
|
-
runReviewAutoMerge(argv);
|
|
2713
|
-
return;
|
|
2714
|
-
}
|
|
2715
|
-
// ─── Finding Correlate Command ────────────────────────────────────
|
|
2716
|
-
if (args.command === "finding-correlate") {
|
|
2717
|
-
const { runFindingCorrelate } = await import("./commands/finding-correlate.js");
|
|
2718
|
-
runFindingCorrelate(argv);
|
|
2719
|
-
return;
|
|
2720
|
-
}
|
|
2721
|
-
// ─── Review Dry Run Command ───────────────────────────────────────
|
|
2722
|
-
if (args.command === "review-dry-run") {
|
|
2723
|
-
const { runReviewDryRun } = await import("./commands/review-dry-run.js");
|
|
2724
|
-
runReviewDryRun(argv);
|
|
2725
|
-
return;
|
|
2726
|
-
}
|
|
2727
|
-
// ─── Finding Suppress Pattern Command ─────────────────────────────
|
|
2728
|
-
if (args.command === "finding-suppress-pattern") {
|
|
2729
|
-
const { runFindingSuppressPattern } = await import("./commands/finding-suppress-pattern.js");
|
|
2730
|
-
runFindingSuppressPattern(argv);
|
|
2731
|
-
return;
|
|
2732
|
-
}
|
|
2733
|
-
// ─── Review Cache Clear Command ───────────────────────────────────
|
|
2734
|
-
if (args.command === "review-cache-clear") {
|
|
2735
|
-
const { runReviewCacheClear } = await import("./commands/review-cache-clear.js");
|
|
2736
|
-
runReviewCacheClear(argv);
|
|
2737
|
-
return;
|
|
2738
|
-
}
|
|
2739
|
-
// ─── Finding Impact Score Command ─────────────────────────────────
|
|
2740
|
-
if (args.command === "finding-impact-score") {
|
|
2741
|
-
const { runFindingImpactScore } = await import("./commands/finding-impact-score.js");
|
|
2742
|
-
runFindingImpactScore(argv);
|
|
2743
|
-
return;
|
|
2744
|
-
}
|
|
2745
|
-
// ─── Review Compliance Check Command ──────────────────────────────
|
|
2746
|
-
if (args.command === "review-compliance-check") {
|
|
2747
|
-
const { runReviewComplianceCheck } = await import("./commands/review-compliance-check.js");
|
|
2748
|
-
runReviewComplianceCheck(argv);
|
|
2749
|
-
return;
|
|
2750
|
-
}
|
|
2751
|
-
// ─── Finding Root Cause Command ───────────────────────────────────
|
|
2752
|
-
if (args.command === "finding-root-cause") {
|
|
2753
|
-
const { runFindingRootCause } = await import("./commands/finding-root-cause.js");
|
|
2754
|
-
runFindingRootCause(argv);
|
|
2755
|
-
return;
|
|
2756
|
-
}
|
|
2757
|
-
// ─── Review File Filter Command ──────────────────────────────────
|
|
2758
|
-
if (args.command === "review-file-filter") {
|
|
2759
|
-
const { runReviewFileFilter } = await import("./commands/review-file-filter.js");
|
|
2760
|
-
runReviewFileFilter(argv);
|
|
2761
|
-
return;
|
|
2762
|
-
}
|
|
2763
|
-
// ─── Finding Dependency Check Command ────────────────────────────
|
|
2764
|
-
if (args.command === "finding-dependency-check") {
|
|
2765
|
-
const { runFindingDependencyCheck } = await import("./commands/finding-dependency-check.js");
|
|
2766
|
-
runFindingDependencyCheck(argv);
|
|
2767
|
-
return;
|
|
2768
|
-
}
|
|
2769
|
-
// ─── Review Incremental Command ──────────────────────────────────
|
|
2770
|
-
if (args.command === "review-incremental") {
|
|
2771
|
-
const { runReviewIncremental } = await import("./commands/review-incremental.js");
|
|
2772
|
-
runReviewIncremental(argv);
|
|
2773
|
-
return;
|
|
2774
|
-
}
|
|
2775
|
-
// ─── Finding Severity Histogram Command ──────────────────────────
|
|
2776
|
-
if (args.command === "finding-severity-histogram") {
|
|
2777
|
-
const { runFindingSeverityHistogram } = await import("./commands/finding-severity-histogram.js");
|
|
2778
|
-
runFindingSeverityHistogram(argv);
|
|
2779
|
-
return;
|
|
2780
|
-
}
|
|
2781
|
-
// ─── Review Plugin Manage Command ────────────────────────────────
|
|
2782
|
-
if (args.command === "review-plugin-manage") {
|
|
2783
|
-
const { runReviewPluginManage } = await import("./commands/review-plugin-manage.js");
|
|
2784
|
-
runReviewPluginManage(argv);
|
|
2785
|
-
return;
|
|
2786
|
-
}
|
|
2787
|
-
// ─── Finding Dedup Cross File Command ────────────────────────────
|
|
2788
|
-
if (args.command === "finding-dedup-cross-file") {
|
|
2789
|
-
const { runFindingDedupCrossFile } = await import("./commands/finding-dedup-cross-file.js");
|
|
2790
|
-
runFindingDedupCrossFile(argv);
|
|
2791
|
-
return;
|
|
2792
|
-
}
|
|
2793
|
-
// ─── Review Progress Bar Command ─────────────────────────────────
|
|
2794
|
-
if (args.command === "review-progress-bar") {
|
|
2795
|
-
const { runReviewProgressBar } = await import("./commands/review-progress-bar.js");
|
|
2796
|
-
runReviewProgressBar(argv);
|
|
2797
|
-
return;
|
|
2798
|
-
}
|
|
2799
|
-
// ─── Finding Auto Label Command ──────────────────────────────────
|
|
2800
|
-
if (args.command === "finding-auto-label") {
|
|
2801
|
-
const { runFindingAutoLabel } = await import("./commands/finding-auto-label.js");
|
|
2802
|
-
runFindingAutoLabel(argv);
|
|
2803
|
-
return;
|
|
2804
|
-
}
|
|
2805
|
-
// ─── Finding Group By Command ────────────────────────────────────
|
|
2806
|
-
if (args.command === "finding-group-by") {
|
|
2807
|
-
const { runFindingGroupBy } = await import("./commands/finding-group-by.js");
|
|
2808
|
-
runFindingGroupBy(argv);
|
|
2809
|
-
return;
|
|
2810
|
-
}
|
|
2811
|
-
// ─── Finding Diff Highlight Command ──────────────────────────────
|
|
2812
|
-
if (args.command === "finding-diff-highlight") {
|
|
2813
|
-
const { runFindingDiffHighlight } = await import("./commands/finding-diff-highlight.js");
|
|
2814
|
-
runFindingDiffHighlight(argv);
|
|
2815
|
-
return;
|
|
2816
|
-
}
|
|
2817
|
-
// ─── Finding Fix Verify Command ──────────────────────────────────
|
|
2818
|
-
if (args.command === "finding-fix-verify") {
|
|
2819
|
-
const { runFindingFixVerify } = await import("./commands/finding-fix-verify.js");
|
|
2820
|
-
runFindingFixVerify(argv);
|
|
2821
|
-
return;
|
|
2822
|
-
}
|
|
2823
|
-
// ─── Review Custom Judge Command ─────────────────────────────────
|
|
2824
|
-
if (args.command === "review-custom-judge") {
|
|
2825
|
-
const { runReviewCustomJudge } = await import("./commands/review-custom-judge.js");
|
|
2826
|
-
runReviewCustomJudge(argv);
|
|
2827
|
-
return;
|
|
2828
|
-
}
|
|
2829
|
-
// ─── Finding Prioritize Command ──────────────────────────────────
|
|
2830
|
-
if (args.command === "finding-prioritize") {
|
|
2831
|
-
const { runFindingPrioritize } = await import("./commands/finding-prioritize.js");
|
|
2832
|
-
runFindingPrioritize(argv);
|
|
2833
|
-
return;
|
|
2834
|
-
}
|
|
2835
|
-
// ─── Review Annotation Command ───────────────────────────────────
|
|
2836
|
-
if (args.command === "review-annotation") {
|
|
2837
|
-
const { runReviewAnnotation } = await import("./commands/review-annotation.js");
|
|
2838
|
-
runReviewAnnotation(argv);
|
|
2839
|
-
return;
|
|
2840
|
-
}
|
|
2841
|
-
// ─── Review Multi Repo Command ───────────────────────────────────
|
|
2842
|
-
if (args.command === "review-multi-repo") {
|
|
2843
|
-
const { runReviewMultiRepo } = await import("./commands/review-multi-repo.js");
|
|
2844
|
-
runReviewMultiRepo(argv);
|
|
2845
|
-
return;
|
|
2846
|
-
}
|
|
2847
|
-
// ─── Finding Trace Command ───────────────────────────────────────
|
|
2848
|
-
if (args.command === "finding-trace") {
|
|
2849
|
-
const { runFindingTrace } = await import("./commands/finding-trace.js");
|
|
2850
|
-
runFindingTrace(argv);
|
|
2851
|
-
return;
|
|
2852
|
-
}
|
|
2853
|
-
// ─── Review Preset Save Command ──────────────────────────────────
|
|
2854
|
-
if (args.command === "review-preset-save") {
|
|
2855
|
-
const { runReviewPresetSave } = await import("./commands/review-preset-save.js");
|
|
2856
|
-
runReviewPresetSave(argv);
|
|
2857
|
-
return;
|
|
2858
|
-
}
|
|
2859
|
-
// ─── Review Blame Map Command ────────────────────────────────────
|
|
2860
|
-
if (args.command === "review-blame-map") {
|
|
2861
|
-
const { runReviewBlameMap } = await import("./commands/review-blame-map.js");
|
|
2862
|
-
runReviewBlameMap(argv);
|
|
2863
|
-
return;
|
|
2864
|
-
}
|
|
2865
|
-
// ─── Finding Autofix Preview Command ─────────────────────────────
|
|
2866
|
-
if (args.command === "finding-autofix-preview") {
|
|
2867
|
-
const { runFindingAutofixPreview } = await import("./commands/finding-autofix-preview.js");
|
|
2868
|
-
runFindingAutofixPreview(argv);
|
|
2869
|
-
return;
|
|
2870
|
-
}
|
|
2871
|
-
// ─── Review Config Diff Command ──────────────────────────────────
|
|
2872
|
-
if (args.command === "review-config-diff") {
|
|
2873
|
-
const { runReviewConfigDiff } = await import("./commands/review-config-diff.js");
|
|
2874
|
-
runReviewConfigDiff(argv);
|
|
2875
|
-
return;
|
|
2876
|
-
}
|
|
2877
|
-
// ─── Finding Severity Trend Command ──────────────────────────────
|
|
2878
|
-
if (args.command === "finding-severity-trend") {
|
|
2879
|
-
const { runFindingSeverityTrend } = await import("./commands/finding-severity-trend.js");
|
|
2880
|
-
runFindingSeverityTrend(argv);
|
|
2881
|
-
return;
|
|
2882
|
-
}
|
|
2883
|
-
// ─── Review Batch Files Command ──────────────────────────────────
|
|
2884
|
-
if (args.command === "review-batch-files") {
|
|
2885
|
-
const { runReviewBatchFiles } = await import("./commands/review-batch-files.js");
|
|
2886
|
-
runReviewBatchFiles(argv);
|
|
2887
|
-
return;
|
|
2888
|
-
}
|
|
2889
|
-
// ─── Finding Context Expand Command ──────────────────────────────
|
|
2890
|
-
if (args.command === "finding-context-expand") {
|
|
2891
|
-
const { runFindingContextExpand } = await import("./commands/finding-context-expand.js");
|
|
2892
|
-
runFindingContextExpand(argv);
|
|
2893
|
-
return;
|
|
2894
|
-
}
|
|
2895
|
-
// ─── Review Output Format Command ────────────────────────────────
|
|
2896
|
-
if (args.command === "review-output-format") {
|
|
2897
|
-
const { runReviewOutputFormat } = await import("./commands/review-output-format.js");
|
|
2898
|
-
runReviewOutputFormat(argv);
|
|
2899
|
-
return;
|
|
2900
|
-
}
|
|
2901
|
-
// ─── Finding Merge Results Command ───────────────────────────────
|
|
2902
|
-
if (args.command === "finding-merge-results") {
|
|
2903
|
-
const { runFindingMergeResults } = await import("./commands/finding-merge-results.js");
|
|
2904
|
-
runFindingMergeResults(argv);
|
|
2905
|
-
return;
|
|
2906
|
-
}
|
|
2907
|
-
// ─── Review Dependency Graph Command ─────────────────────────────
|
|
2908
|
-
if (args.command === "review-dependency-graph") {
|
|
2909
|
-
const { runReviewDependencyGraph } = await import("./commands/review-dependency-graph.js");
|
|
2910
|
-
runReviewDependencyGraph(argv);
|
|
2911
|
-
return;
|
|
2912
|
-
}
|
|
2913
|
-
// ─── Finding Pattern Match Command ───────────────────────────────
|
|
2914
|
-
if (args.command === "finding-pattern-match") {
|
|
2915
|
-
const { runFindingPatternMatch } = await import("./commands/finding-pattern-match.js");
|
|
2916
|
-
runFindingPatternMatch(argv);
|
|
2917
|
-
return;
|
|
2918
|
-
}
|
|
2919
|
-
// ─── Review Diff Stats Command ───────────────────────────────────
|
|
2920
|
-
if (args.command === "review-diff-stats") {
|
|
2921
|
-
const { runReviewDiffStats } = await import("./commands/review-diff-stats.js");
|
|
2922
|
-
runReviewDiffStats(argv);
|
|
2923
|
-
return;
|
|
2924
|
-
}
|
|
2925
|
-
// ─── Finding CWE Map Command ─────────────────────────────────────
|
|
2926
|
-
if (args.command === "finding-cwe-map") {
|
|
2927
|
-
const { runFindingCweMap } = await import("./commands/finding-cwe-map.js");
|
|
2928
|
-
runFindingCweMap(argv);
|
|
2929
|
-
return;
|
|
2930
|
-
}
|
|
2931
|
-
// ─── Review Exclude Vendor Command ───────────────────────────────
|
|
2932
|
-
if (args.command === "review-exclude-vendor") {
|
|
2933
|
-
const { runReviewExcludeVendor } = await import("./commands/review-exclude-vendor.js");
|
|
2934
|
-
runReviewExcludeVendor(argv);
|
|
2935
|
-
return;
|
|
2936
|
-
}
|
|
2937
|
-
// ─── Finding Risk Matrix Command ─────────────────────────────────
|
|
2938
|
-
if (args.command === "finding-risk-matrix") {
|
|
2939
|
-
const { runFindingRiskMatrix } = await import("./commands/finding-risk-matrix.js");
|
|
2940
|
-
runFindingRiskMatrix(argv);
|
|
2941
|
-
return;
|
|
2942
|
-
}
|
|
2943
|
-
// ─── Review File Stats Command ───────────────────────────────────
|
|
2944
|
-
if (args.command === "review-file-stats") {
|
|
2945
|
-
const { runReviewFileStats } = await import("./commands/review-file-stats.js");
|
|
2946
|
-
runReviewFileStats(argv);
|
|
2947
|
-
return;
|
|
2948
|
-
}
|
|
2949
|
-
// ─── Finding False Neg Check Command ─────────────────────────────
|
|
2950
|
-
if (args.command === "finding-false-neg-check") {
|
|
2951
|
-
const { runFindingFalseNegCheck } = await import("./commands/finding-false-neg-check.js");
|
|
2952
|
-
runFindingFalseNegCheck(argv);
|
|
2953
|
-
return;
|
|
2954
|
-
}
|
|
2955
|
-
// ─── Review Rule Filter Command ──────────────────────────────────
|
|
2956
|
-
if (args.command === "review-rule-filter") {
|
|
2957
|
-
const { runReviewRuleFilter } = await import("./commands/review-rule-filter.js");
|
|
2958
|
-
runReviewRuleFilter(argv);
|
|
2959
|
-
return;
|
|
2960
|
-
}
|
|
2961
|
-
// ─── Review Scope Lock Command ──────────────────────────────────
|
|
2962
|
-
if (args.command === "review-scope-lock") {
|
|
2963
|
-
const { runReviewScopeLock } = await import("./commands/review-scope-lock.js");
|
|
2964
|
-
runReviewScopeLock(argv);
|
|
2965
|
-
return;
|
|
2966
|
-
}
|
|
2967
|
-
// ─── Finding Duplicate Rule Command ─────────────────────────────
|
|
2968
|
-
if (args.command === "finding-duplicate-rule") {
|
|
2969
|
-
const { runFindingDuplicateRule } = await import("./commands/finding-duplicate-rule.js");
|
|
2970
|
-
runFindingDuplicateRule(argv);
|
|
2971
|
-
return;
|
|
2972
|
-
}
|
|
2973
|
-
// ─── Review Watch Mode Command ──────────────────────────────────
|
|
2974
|
-
if (args.command === "review-watch-mode") {
|
|
2975
|
-
const { runReviewWatchMode } = await import("./commands/review-watch-mode.js");
|
|
2976
|
-
runReviewWatchMode(argv);
|
|
2977
|
-
return;
|
|
2978
|
-
}
|
|
2979
|
-
// ─── Review Export PDF Command ──────────────────────────────────
|
|
2980
|
-
if (args.command === "review-export-pdf") {
|
|
2981
|
-
const { runReviewExportPdf } = await import("./commands/review-export-pdf.js");
|
|
2982
|
-
runReviewExportPdf(argv);
|
|
2983
|
-
return;
|
|
2984
|
-
}
|
|
2985
|
-
// ─── Finding Line Blame Command ─────────────────────────────────
|
|
2986
|
-
if (args.command === "finding-line-blame") {
|
|
2987
|
-
const { runFindingLineBlame } = await import("./commands/finding-line-blame.js");
|
|
2988
|
-
runFindingLineBlame(argv);
|
|
2989
|
-
return;
|
|
2990
|
-
}
|
|
2991
|
-
// ─── Finding Age Tracker Command ────────────────────────────────
|
|
2992
|
-
if (args.command === "finding-age-tracker") {
|
|
2993
|
-
const { runFindingAgeTracker } = await import("./commands/finding-age-tracker.js");
|
|
2994
|
-
runFindingAgeTracker(argv);
|
|
2995
|
-
return;
|
|
2996
|
-
}
|
|
2997
|
-
// ─── Review Parallel Files Command ──────────────────────────────
|
|
2998
|
-
if (args.command === "review-parallel-files") {
|
|
2999
|
-
const { runReviewParallelFiles } = await import("./commands/review-parallel-files.js");
|
|
3000
|
-
runReviewParallelFiles(argv);
|
|
3001
|
-
return;
|
|
3002
|
-
}
|
|
3003
|
-
// ─── Finding Summary Digest Command ─────────────────────────────
|
|
3004
|
-
if (args.command === "finding-summary-digest") {
|
|
3005
|
-
const { runFindingSummaryDigest } = await import("./commands/finding-summary-digest.js");
|
|
3006
|
-
runFindingSummaryDigest(argv);
|
|
3007
|
-
return;
|
|
3008
|
-
}
|
|
3009
|
-
// ─── Review Code Owner Command ──────────────────────────────────
|
|
3010
|
-
if (args.command === "review-code-owner") {
|
|
3011
|
-
const { runReviewCodeOwner } = await import("./commands/review-code-owner.js");
|
|
3012
|
-
runReviewCodeOwner(argv);
|
|
3013
|
-
return;
|
|
3014
|
-
}
|
|
3015
|
-
// ─── Review Finding Link Command ────────────────────────────────
|
|
3016
|
-
if (args.command === "review-finding-link") {
|
|
3017
|
-
const { runReviewFindingLink } = await import("./commands/review-finding-link.js");
|
|
3018
|
-
runReviewFindingLink(argv);
|
|
3019
|
-
return;
|
|
3020
|
-
}
|
|
3021
|
-
// ─── Review Team Assign Command ─────────────────────────────────
|
|
3022
|
-
if (args.command === "review-team-assign") {
|
|
3023
|
-
const { runReviewTeamAssign } = await import("./commands/review-team-assign.js");
|
|
3024
|
-
runReviewTeamAssign(argv);
|
|
3025
|
-
return;
|
|
3026
|
-
}
|
|
3027
|
-
// ─── Finding Compare Runs Command ───────────────────────────────
|
|
3028
|
-
if (args.command === "finding-compare-runs") {
|
|
3029
|
-
const { runFindingCompareRuns } = await import("./commands/finding-compare-runs.js");
|
|
3030
|
-
runFindingCompareRuns(argv);
|
|
3031
|
-
return;
|
|
3032
|
-
}
|
|
3033
|
-
// ─── Review Skip List Command ───────────────────────────────────
|
|
3034
|
-
if (args.command === "review-skip-list") {
|
|
3035
|
-
const { runReviewSkipList } = await import("./commands/review-skip-list.js");
|
|
3036
|
-
runReviewSkipList(argv);
|
|
3037
|
-
return;
|
|
3038
|
-
}
|
|
3039
|
-
// ─── Finding Hotfix Suggest Command ─────────────────────────────
|
|
3040
|
-
if (args.command === "finding-hotfix-suggest") {
|
|
3041
|
-
const { runFindingHotfixSuggest } = await import("./commands/finding-hotfix-suggest.js");
|
|
3042
|
-
runFindingHotfixSuggest(argv);
|
|
3043
|
-
return;
|
|
3044
|
-
}
|
|
3045
|
-
// ─── Review Approval Gate Command ───────────────────────────────
|
|
3046
|
-
if (args.command === "review-approval-gate") {
|
|
3047
|
-
const { runReviewApprovalGate } = await import("./commands/review-approval-gate.js");
|
|
3048
|
-
runReviewApprovalGate(argv);
|
|
3049
|
-
return;
|
|
3050
|
-
}
|
|
3051
|
-
// ─── Review Changelog Entry Command ─────────────────────────────
|
|
3052
|
-
if (args.command === "review-changelog-entry") {
|
|
3053
|
-
const { runReviewChangelogEntry } = await import("./commands/review-changelog-entry.js");
|
|
3054
|
-
runReviewChangelogEntry(argv);
|
|
3055
|
-
return;
|
|
3056
|
-
}
|
|
3057
|
-
// ─── Review Branch Compare Command ──────────────────────────────
|
|
3058
|
-
if (args.command === "review-branch-compare") {
|
|
3059
|
-
const { runReviewBranchCompare } = await import("./commands/review-branch-compare.js");
|
|
3060
|
-
runReviewBranchCompare(argv);
|
|
3061
|
-
return;
|
|
3062
|
-
}
|
|
3063
|
-
// ─── Finding Category Stats Command ─────────────────────────────
|
|
3064
|
-
if (args.command === "finding-category-stats") {
|
|
3065
|
-
const { runFindingCategoryStats } = await import("./commands/finding-category-stats.js");
|
|
3066
|
-
runFindingCategoryStats(argv);
|
|
3067
|
-
return;
|
|
3068
|
-
}
|
|
3069
|
-
// ─── Finding Trend Report Command ─────────────────────────────────
|
|
3070
|
-
if (args.command === "finding-trend-report") {
|
|
3071
|
-
const { runFindingTrendReport } = await import("./commands/finding-trend-report.js");
|
|
3072
|
-
runFindingTrendReport(argv);
|
|
3073
|
-
return;
|
|
3074
|
-
}
|
|
3075
|
-
// ─── Review Commit Hook Command ───────────────────────────────────
|
|
3076
|
-
if (args.command === "review-commit-hook") {
|
|
3077
|
-
const { runReviewCommitHook } = await import("./commands/review-commit-hook.js");
|
|
3078
|
-
runReviewCommitHook(argv);
|
|
3079
|
-
return;
|
|
3080
|
-
}
|
|
3081
|
-
// ─── Finding Noise Filter Command ─────────────────────────────────
|
|
3082
|
-
if (args.command === "finding-noise-filter") {
|
|
3083
|
-
const { runFindingNoiseFilter } = await import("./commands/finding-noise-filter.js");
|
|
3084
|
-
runFindingNoiseFilter(argv);
|
|
3085
|
-
return;
|
|
3086
|
-
}
|
|
3087
|
-
// ─── Finding Fix Priority Command ─────────────────────────────────
|
|
3088
|
-
if (args.command === "finding-fix-priority") {
|
|
3089
|
-
const { runFindingFixPriority } = await import("./commands/finding-fix-priority.js");
|
|
3090
|
-
runFindingFixPriority(argv);
|
|
3091
|
-
return;
|
|
3092
|
-
}
|
|
3093
|
-
// ─── Review Quota Check Command ───────────────────────────────────
|
|
3094
|
-
if (args.command === "review-quota-check") {
|
|
3095
|
-
const { runReviewQuotaCheck } = await import("./commands/review-quota-check.js");
|
|
3096
|
-
runReviewQuotaCheck(argv);
|
|
3097
|
-
return;
|
|
3098
|
-
}
|
|
3099
|
-
// ─── Finding Cluster Analysis Command ─────────────────────────────
|
|
3100
|
-
if (args.command === "finding-cluster-analysis") {
|
|
3101
|
-
const { runFindingClusterAnalysis } = await import("./commands/finding-cluster-analysis.js");
|
|
3102
|
-
runFindingClusterAnalysis(argv);
|
|
3103
|
-
return;
|
|
3104
|
-
}
|
|
3105
|
-
// ─── Review Session Save Command ──────────────────────────────────
|
|
3106
|
-
if (args.command === "review-session-save") {
|
|
3107
|
-
const { runReviewSessionSave } = await import("./commands/review-session-save.js");
|
|
3108
|
-
runReviewSessionSave(argv);
|
|
3109
|
-
return;
|
|
3110
|
-
}
|
|
3111
|
-
// ─── Finding Evidence Chain Command ───────────────────────────────
|
|
3112
|
-
if (args.command === "finding-evidence-chain") {
|
|
3113
|
-
const { runFindingEvidenceChain } = await import("./commands/finding-evidence-chain.js");
|
|
3114
|
-
runFindingEvidenceChain(argv);
|
|
3115
|
-
return;
|
|
3116
|
-
}
|
|
3117
|
-
// ─── Review File Complexity Command ───────────────────────────────
|
|
3118
|
-
if (args.command === "review-file-complexity") {
|
|
3119
|
-
const { runReviewFileComplexity } = await import("./commands/review-file-complexity.js");
|
|
3120
|
-
runReviewFileComplexity(argv);
|
|
3121
|
-
return;
|
|
3122
|
-
}
|
|
3123
|
-
// ─── Finding Dependency Risk Command ──────────────────────────────
|
|
3124
|
-
if (args.command === "finding-dependency-risk") {
|
|
3125
|
-
const { runFindingDependencyRisk } = await import("./commands/finding-dependency-risk.js");
|
|
3126
|
-
runFindingDependencyRisk(argv);
|
|
3127
|
-
return;
|
|
3128
|
-
}
|
|
3129
|
-
// ─── Review PR Template Command ───────────────────────────────────
|
|
3130
|
-
if (args.command === "review-pr-template") {
|
|
3131
|
-
const { runReviewPrTemplate } = await import("./commands/review-pr-template.js");
|
|
3132
|
-
runReviewPrTemplate(argv);
|
|
3133
|
-
return;
|
|
3134
|
-
}
|
|
3135
|
-
// ─── Finding Security Hotspot Command ─────────────────────────────
|
|
3136
|
-
if (args.command === "finding-security-hotspot") {
|
|
3137
|
-
const { runFindingSecurityHotspot } = await import("./commands/finding-security-hotspot.js");
|
|
3138
|
-
runFindingSecurityHotspot(argv);
|
|
3139
|
-
return;
|
|
3140
|
-
}
|
|
3141
|
-
// ─── Finding Suppression Log Command ──────────────────────────────
|
|
3142
|
-
if (args.command === "finding-suppression-log") {
|
|
3143
|
-
const { runFindingSuppressionLog } = await import("./commands/finding-suppression-log.js");
|
|
3144
|
-
runFindingSuppressionLog(argv);
|
|
3145
|
-
return;
|
|
3146
|
-
}
|
|
3147
|
-
// ─── Review Diff Highlight Command ────────────────────────────────
|
|
3148
|
-
if (args.command === "review-diff-highlight") {
|
|
3149
|
-
const { runReviewDiffHighlight } = await import("./commands/review-diff-highlight.js");
|
|
3150
|
-
runReviewDiffHighlight(argv);
|
|
3151
|
-
return;
|
|
3152
|
-
}
|
|
3153
|
-
// ─── Finding CVE Lookup Command ───────────────────────────────────
|
|
3154
|
-
if (args.command === "finding-cve-lookup") {
|
|
3155
|
-
const { runFindingCveLookup } = await import("./commands/finding-cve-lookup.js");
|
|
3156
|
-
runFindingCveLookup(argv);
|
|
3157
|
-
return;
|
|
3158
|
-
}
|
|
3159
|
-
// ─── Review Batch Run Command ─────────────────────────────────────
|
|
3160
|
-
if (args.command === "review-batch-run") {
|
|
3161
|
-
const { runReviewBatchRun } = await import("./commands/review-batch-run.js");
|
|
3162
|
-
runReviewBatchRun(argv);
|
|
3163
|
-
return;
|
|
3164
|
-
}
|
|
3165
|
-
// ─── Review Output Filter Command ────────────────────────────────
|
|
3166
|
-
if (args.command === "review-output-filter") {
|
|
3167
|
-
const { runReviewOutputFilter } = await import("./commands/review-output-filter.js");
|
|
3168
|
-
runReviewOutputFilter(argv);
|
|
3169
|
-
return;
|
|
3170
|
-
}
|
|
3171
|
-
// ─── Finding Timeline View Command ───────────────────────────────
|
|
3172
|
-
if (args.command === "finding-timeline-view") {
|
|
3173
|
-
const { runFindingTimelineView } = await import("./commands/finding-timeline-view.js");
|
|
3174
|
-
runFindingTimelineView(argv);
|
|
3175
|
-
return;
|
|
3176
|
-
}
|
|
3177
|
-
// ─── Review Ignore Pattern Command ────────────────────────────────
|
|
3178
|
-
if (args.command === "review-ignore-pattern") {
|
|
3179
|
-
const { runReviewIgnorePattern } = await import("./commands/review-ignore-pattern.js");
|
|
3180
|
-
runReviewIgnorePattern(argv);
|
|
3181
|
-
return;
|
|
3182
|
-
}
|
|
3183
|
-
// ─── Finding Quality Gate Command ─────────────────────────────────
|
|
3184
|
-
if (args.command === "finding-quality-gate") {
|
|
3185
|
-
const { runFindingQualityGate } = await import("./commands/finding-quality-gate.js");
|
|
3186
|
-
runFindingQualityGate(argv);
|
|
3187
|
-
return;
|
|
3188
|
-
}
|
|
3189
|
-
// ─── Finding Reachability Command ─────────────────────────────────
|
|
3190
|
-
if (args.command === "finding-reachability") {
|
|
3191
|
-
const { runFindingReachability } = await import("./commands/finding-reachability.js");
|
|
3192
|
-
runFindingReachability(argv);
|
|
3193
|
-
return;
|
|
3194
|
-
}
|
|
3195
|
-
// ─── Review Merge Check Command ───────────────────────────────────
|
|
3196
|
-
if (args.command === "review-merge-check") {
|
|
3197
|
-
const { runReviewMergeCheck } = await import("./commands/review-merge-check.js");
|
|
3198
|
-
runReviewMergeCheck(argv);
|
|
3199
|
-
return;
|
|
3200
|
-
}
|
|
3201
|
-
// ─── Review Workspace Scan Command ────────────────────────────────
|
|
3202
|
-
if (args.command === "review-workspace-scan") {
|
|
3203
|
-
const { runReviewWorkspaceScan } = await import("./commands/review-workspace-scan.js");
|
|
3204
|
-
runReviewWorkspaceScan(argv);
|
|
3205
|
-
return;
|
|
3206
|
-
}
|
|
3207
|
-
// ─── Finding Context Window Command ───────────────────────────────
|
|
3208
|
-
if (args.command === "finding-context-window") {
|
|
3209
|
-
const { runFindingContextWindow } = await import("./commands/finding-context-window.js");
|
|
3210
|
-
runFindingContextWindow(argv);
|
|
3211
|
-
return;
|
|
3212
|
-
}
|
|
3213
|
-
// ─── Finding Severity Dist Command ────────────────────────────────
|
|
3214
|
-
if (args.command === "finding-severity-dist") {
|
|
3215
|
-
const { runFindingSeverityDist } = await import("./commands/finding-severity-dist.js");
|
|
3216
|
-
runFindingSeverityDist(argv);
|
|
3217
|
-
return;
|
|
3218
|
-
}
|
|
3219
|
-
// ─── Review Report Merge Command ──────────────────────────────────
|
|
3220
|
-
if (args.command === "review-report-merge") {
|
|
3221
|
-
const { runReviewReportMerge } = await import("./commands/review-report-merge.js");
|
|
3222
|
-
runReviewReportMerge(argv);
|
|
3223
|
-
return;
|
|
3224
|
-
}
|
|
3225
|
-
// ─── Review Plugin Config Command ─────────────────────────────────
|
|
3226
|
-
if (args.command === "review-plugin-config") {
|
|
3227
|
-
const { runReviewPluginConfig } = await import("./commands/review-plugin-config.js");
|
|
3228
|
-
runReviewPluginConfig(argv);
|
|
3229
|
-
return;
|
|
3230
|
-
}
|
|
3231
|
-
// ─── Finding Code Smell Command ───────────────────────────────────
|
|
3232
|
-
if (args.command === "finding-code-smell") {
|
|
3233
|
-
const { runFindingCodeSmell } = await import("./commands/finding-code-smell.js");
|
|
3234
|
-
runFindingCodeSmell(argv);
|
|
3235
|
-
return;
|
|
3236
|
-
}
|
|
3237
|
-
// ─── Finding Related Rules Command ────────────────────────────────
|
|
3238
|
-
if (args.command === "finding-related-rules") {
|
|
3239
|
-
const { runFindingRelatedRules } = await import("./commands/finding-related-rules.js");
|
|
3240
|
-
runFindingRelatedRules(argv);
|
|
3241
|
-
return;
|
|
3242
|
-
}
|
|
3243
|
-
// ─── Review Token Budget Command ──────────────────────────────────
|
|
3244
|
-
if (args.command === "review-token-budget") {
|
|
3245
|
-
const { runReviewTokenBudget } = await import("./commands/review-token-budget.js");
|
|
3246
|
-
runReviewTokenBudget(argv);
|
|
3247
|
-
return;
|
|
3248
|
-
}
|
|
3249
|
-
// ─── Review Plugin List Command ───────────────────────────────────
|
|
3250
|
-
if (args.command === "review-plugin-list") {
|
|
3251
|
-
const { runReviewPluginList } = await import("./commands/review-plugin-list.js");
|
|
3252
|
-
runReviewPluginList(argv);
|
|
3253
|
-
return;
|
|
3254
|
-
}
|
|
3255
|
-
// ─── Finding Owner Assign Command ─────────────────────────────────
|
|
3256
|
-
if (args.command === "finding-owner-assign") {
|
|
3257
|
-
const { runFindingOwnerAssign } = await import("./commands/finding-owner-assign.js");
|
|
3258
|
-
runFindingOwnerAssign(argv);
|
|
3259
|
-
return;
|
|
3260
|
-
}
|
|
3261
|
-
// ─── Review Lock File Command ─────────────────────────────────────
|
|
3262
|
-
if (args.command === "review-lock-file") {
|
|
3263
|
-
const { runReviewLockFile } = await import("./commands/review-lock-file.js");
|
|
3264
|
-
runReviewLockFile(argv);
|
|
3265
|
-
return;
|
|
3266
|
-
}
|
|
3267
|
-
// ─── Finding Pattern Library Command ──────────────────────────────
|
|
3268
|
-
if (args.command === "finding-pattern-library") {
|
|
3269
|
-
const { runFindingPatternLibrary } = await import("./commands/finding-pattern-library.js");
|
|
3270
|
-
runFindingPatternLibrary(argv);
|
|
3271
|
-
return;
|
|
3272
|
-
}
|
|
3273
|
-
// ─── Review Status Badge Command ──────────────────────────────────
|
|
3274
|
-
if (args.command === "review-status-badge") {
|
|
3275
|
-
const { runReviewStatusBadge } = await import("./commands/review-status-badge.js");
|
|
3276
|
-
runReviewStatusBadge(argv);
|
|
3277
|
-
return;
|
|
3278
|
-
}
|
|
3279
|
-
// ─── Finding Rule Explain Command ─────────────────────────────────
|
|
3280
|
-
if (args.command === "finding-rule-explain") {
|
|
3281
|
-
const { runFindingRuleExplain } = await import("./commands/finding-rule-explain.js");
|
|
3282
|
-
runFindingRuleExplain(argv);
|
|
3283
|
-
return;
|
|
3284
|
-
}
|
|
3285
|
-
// ─── Finding Dependency Tree Command ──────────────────────────────
|
|
3286
|
-
if (args.command === "finding-dependency-tree") {
|
|
3287
|
-
const { runFindingDependencyTree } = await import("./commands/finding-dependency-tree.js");
|
|
3288
|
-
runFindingDependencyTree(argv);
|
|
3289
|
-
return;
|
|
3290
|
-
}
|
|
3291
|
-
// ─── Review CI Integration Command ────────────────────────────────
|
|
3292
|
-
if (args.command === "review-ci-integration") {
|
|
3293
|
-
const { runReviewCiIntegration } = await import("./commands/review-ci-integration.js");
|
|
3294
|
-
runReviewCiIntegration(argv);
|
|
3295
|
-
return;
|
|
3296
|
-
}
|
|
3297
|
-
// ─── Review Comparative Command ───────────────────────────────────
|
|
3298
|
-
if (args.command === "review-comparative") {
|
|
3299
|
-
const { runReviewComparative } = await import("./commands/review-comparative.js");
|
|
3300
|
-
runReviewComparative(argv);
|
|
3301
|
-
return;
|
|
3302
|
-
}
|
|
3303
|
-
// ─── Finding Suppression Audit Command ────────────────────────────
|
|
3304
|
-
if (args.command === "finding-suppression-audit") {
|
|
3305
|
-
const { runFindingSuppressionAudit } = await import("./commands/finding-suppression-audit.js");
|
|
3306
|
-
runFindingSuppressionAudit(argv);
|
|
3307
|
-
return;
|
|
3308
|
-
}
|
|
3309
|
-
// ─── Review Custom Rule Command ───────────────────────────────────
|
|
3310
|
-
if (args.command === "review-custom-rule") {
|
|
3311
|
-
const { runReviewCustomRule } = await import("./commands/review-custom-rule.js");
|
|
3312
|
-
runReviewCustomRule(argv);
|
|
3313
|
-
return;
|
|
3314
|
-
}
|
|
3315
|
-
// ─── Review Notification Command ──────────────────────────────────
|
|
3316
|
-
if (args.command === "review-notification") {
|
|
3317
|
-
const { runReviewNotification } = await import("./commands/review-notification.js");
|
|
3318
|
-
runReviewNotification(argv);
|
|
3319
|
-
return;
|
|
3320
|
-
}
|
|
3321
|
-
// ─── Finding Age Analysis Command ─────────────────────────────────
|
|
3322
|
-
if (args.command === "finding-age-analysis") {
|
|
3323
|
-
const { runFindingAgeAnalysis } = await import("./commands/finding-age-analysis.js");
|
|
3324
|
-
runFindingAgeAnalysis(argv);
|
|
3325
|
-
return;
|
|
3326
|
-
}
|
|
3327
|
-
// ─── Review Template Export Command ───────────────────────────────
|
|
3328
|
-
if (args.command === "review-template-export") {
|
|
3329
|
-
const { runReviewTemplateExport } = await import("./commands/review-template-export.js");
|
|
3330
|
-
runReviewTemplateExport(argv);
|
|
3331
|
-
return;
|
|
3332
|
-
}
|
|
3333
|
-
// ─── Finding Correlation Command ──────────────────────────────────
|
|
3334
|
-
if (args.command === "finding-correlation") {
|
|
3335
|
-
const { runFindingCorrelation } = await import("./commands/finding-correlation.js");
|
|
3336
|
-
runFindingCorrelation(argv);
|
|
3337
|
-
return;
|
|
3338
|
-
}
|
|
3339
|
-
// ─── Review Scope Limit Command ───────────────────────────────────
|
|
3340
|
-
if (args.command === "review-scope-limit") {
|
|
3341
|
-
const { runReviewScopeLimit } = await import("./commands/review-scope-limit.js");
|
|
3342
|
-
runReviewScopeLimit(argv);
|
|
3343
|
-
return;
|
|
3344
|
-
}
|
|
3345
|
-
// ─── Finding Regression Check Command ─────────────────────────────
|
|
3346
|
-
if (args.command === "finding-regression-check") {
|
|
3347
|
-
const { runFindingRegressionCheck } = await import("./commands/finding-regression-check.js");
|
|
3348
|
-
runFindingRegressionCheck(argv);
|
|
3349
|
-
return;
|
|
3350
|
-
}
|
|
3351
|
-
// ─── Finding Fix Validation Command ───────────────────────────────
|
|
3352
|
-
if (args.command === "finding-fix-validation") {
|
|
3353
|
-
const { runFindingFixValidation } = await import("./commands/finding-fix-validation.js");
|
|
3354
|
-
runFindingFixValidation(argv);
|
|
3355
|
-
return;
|
|
3356
|
-
}
|
|
3357
|
-
// ─── Review Dashboard Data Command ────────────────────────────────
|
|
3358
|
-
if (args.command === "review-dashboard-data") {
|
|
3359
|
-
const { runReviewDashboardData } = await import("./commands/review-dashboard-data.js");
|
|
3360
|
-
runReviewDashboardData(argv);
|
|
3361
|
-
return;
|
|
3362
|
-
}
|
|
3363
|
-
// ─── Finding Category Map Command ────────────────────────────────
|
|
3364
|
-
if (args.command === "finding-category-map") {
|
|
3365
|
-
const { runFindingCategoryMap } = await import("./commands/finding-category-map.js");
|
|
3366
|
-
runFindingCategoryMap(argv);
|
|
3367
|
-
return;
|
|
3368
|
-
}
|
|
3369
|
-
// ─── Finding Dedup Report Command ─────────────────────────────────
|
|
3370
|
-
if (args.command === "finding-dedup-report") {
|
|
3371
|
-
const { runFindingDedupReport } = await import("./commands/finding-dedup-report.js");
|
|
3372
|
-
runFindingDedupReport(argv);
|
|
3373
|
-
return;
|
|
3374
|
-
}
|
|
3375
|
-
// ─── Review Perf Profile Command ──────────────────────────────────
|
|
3376
|
-
if (args.command === "review-perf-profile") {
|
|
3377
|
-
const { runReviewPerfProfile } = await import("./commands/review-perf-profile.js");
|
|
3378
|
-
runReviewPerfProfile(argv);
|
|
3379
|
-
return;
|
|
3380
|
-
}
|
|
3381
|
-
// ─── Finding False Positive Log Command ───────────────────────────
|
|
3382
|
-
if (args.command === "finding-false-positive-log") {
|
|
3383
|
-
const { runFindingFalsePositiveLog } = await import("./commands/finding-false-positive-log.js");
|
|
3384
|
-
runFindingFalsePositiveLog(argv);
|
|
3385
|
-
return;
|
|
3386
|
-
}
|
|
3387
|
-
// ─── Review Guardrail Command ─────────────────────────────────────
|
|
3388
|
-
if (args.command === "review-guardrail") {
|
|
3389
|
-
const { runReviewGuardrail } = await import("./commands/review-guardrail.js");
|
|
3390
|
-
runReviewGuardrail(argv);
|
|
3391
|
-
return;
|
|
3392
|
-
}
|
|
3393
|
-
// ─── Review Batch Mode Command ────────────────────────────────────
|
|
3394
|
-
if (args.command === "review-batch-mode") {
|
|
3395
|
-
const { runReviewBatchMode } = await import("./commands/review-batch-mode.js");
|
|
3396
|
-
runReviewBatchMode(argv);
|
|
3397
|
-
return;
|
|
3398
|
-
}
|
|
3399
|
-
// ─── Finding Trend Analysis Command ──────────────────────────────
|
|
3400
|
-
if (args.command === "finding-trend-analysis") {
|
|
3401
|
-
const { runFindingTrendAnalysis } = await import("./commands/finding-trend-analysis.js");
|
|
3402
|
-
runFindingTrendAnalysis(argv);
|
|
3403
|
-
return;
|
|
3404
|
-
}
|
|
3405
|
-
// ─── Finding Auto Tag Command ─────────────────────────────────────
|
|
3406
|
-
if (args.command === "finding-auto-tag") {
|
|
3407
|
-
const { runFindingAutoTag } = await import("./commands/finding-auto-tag.js");
|
|
3408
|
-
runFindingAutoTag(argv);
|
|
3409
|
-
return;
|
|
3410
|
-
}
|
|
3411
|
-
// ─── Review Webhook Notify Command ────────────────────────────────
|
|
3412
|
-
if (args.command === "review-webhook-notify") {
|
|
3413
|
-
const { runReviewWebhookNotify } = await import("./commands/review-webhook-notify.js");
|
|
3414
|
-
runReviewWebhookNotify(argv);
|
|
3415
|
-
return;
|
|
3416
|
-
}
|
|
3417
|
-
// ─── Finding Evidence Collect Command ─────────────────────────────
|
|
3418
|
-
if (args.command === "finding-evidence-collect") {
|
|
3419
|
-
const { runFindingEvidenceCollect } = await import("./commands/finding-evidence-collect.js");
|
|
3420
|
-
runFindingEvidenceCollect(argv);
|
|
3421
|
-
return;
|
|
3422
|
-
}
|
|
3423
|
-
// ─── Review Compliance Gate Command ───────────────────────────────
|
|
3424
|
-
if (args.command === "review-compliance-gate") {
|
|
3425
|
-
const { runReviewComplianceGate } = await import("./commands/review-compliance-gate.js");
|
|
3426
|
-
runReviewComplianceGate(argv);
|
|
3427
|
-
return;
|
|
3428
|
-
}
|
|
3429
|
-
// ─── Finding Resolution Tracker Command ───────────────────────────
|
|
3430
|
-
if (args.command === "finding-resolution-tracker") {
|
|
3431
|
-
const { runFindingResolutionTracker } = await import("./commands/finding-resolution-tracker.js");
|
|
3432
|
-
runFindingResolutionTracker(argv);
|
|
3433
|
-
return;
|
|
3434
|
-
}
|
|
3435
|
-
// ─── Review Threshold Tune Command ────────────────────────────────
|
|
3436
|
-
if (args.command === "review-threshold-tune") {
|
|
3437
|
-
const { runReviewThresholdTune } = await import("./commands/review-threshold-tune.js");
|
|
3438
|
-
runReviewThresholdTune(argv);
|
|
3439
|
-
return;
|
|
3440
|
-
}
|
|
3441
|
-
// ─── Finding Cluster Group Command ────────────────────────────────
|
|
3442
|
-
if (args.command === "finding-cluster-group") {
|
|
3443
|
-
const { runFindingClusterGroup } = await import("./commands/finding-cluster-group.js");
|
|
3444
|
-
runFindingClusterGroup(argv);
|
|
3445
|
-
return;
|
|
3446
|
-
}
|
|
3447
|
-
// ─── Review Merge Config Command ──────────────────────────────────
|
|
3448
|
-
if (args.command === "review-merge-config") {
|
|
3449
|
-
const { runReviewMergeConfig } = await import("./commands/review-merge-config.js");
|
|
3450
|
-
runReviewMergeConfig(argv);
|
|
3451
|
-
return;
|
|
3452
|
-
}
|
|
3453
|
-
// ─── Finding Hotspot Map Command ──────────────────────────────────
|
|
3454
|
-
if (args.command === "finding-hotspot-map") {
|
|
3455
|
-
const { runFindingHotspotMap } = await import("./commands/finding-hotspot-map.js");
|
|
3456
|
-
runFindingHotspotMap(argv);
|
|
3457
|
-
return;
|
|
3458
|
-
}
|
|
3459
|
-
// ─── Review Parallel Run Command ──────────────────────────────────
|
|
3460
|
-
if (args.command === "review-parallel-run") {
|
|
3461
|
-
const { runReviewParallelRun } = await import("./commands/review-parallel-run.js");
|
|
3462
|
-
runReviewParallelRun(argv);
|
|
3463
|
-
return;
|
|
3464
|
-
}
|
|
3465
|
-
// ─── Review Annotation Export Command ─────────────────────────────
|
|
3466
|
-
if (args.command === "review-annotation-export") {
|
|
3467
|
-
const { runReviewAnnotationExport } = await import("./commands/review-annotation-export.js");
|
|
3468
|
-
runReviewAnnotationExport(argv);
|
|
3469
|
-
return;
|
|
3470
|
-
}
|
|
3471
|
-
// ─── Finding Blast Radius Command ─────────────────────────────────
|
|
3472
|
-
if (args.command === "finding-blast-radius") {
|
|
3473
|
-
const { runFindingBlastRadius } = await import("./commands/finding-blast-radius.js");
|
|
3474
|
-
runFindingBlastRadius(argv);
|
|
3475
|
-
return;
|
|
3476
|
-
}
|
|
3477
|
-
// ─── Review Quality Score Command ─────────────────────────────────
|
|
3478
|
-
if (args.command === "review-quality-score") {
|
|
3479
|
-
const { runReviewQualityScore } = await import("./commands/review-quality-score.js");
|
|
3480
|
-
runReviewQualityScore(argv);
|
|
3481
|
-
return;
|
|
3482
|
-
}
|
|
3483
|
-
// ─── Review Onboard Wizard Command ────────────────────────────────
|
|
3484
|
-
if (args.command === "review-onboard-wizard") {
|
|
3485
|
-
const { runReviewOnboardWizard } = await import("./commands/review-onboard-wizard.js");
|
|
3486
|
-
runReviewOnboardWizard(argv);
|
|
3487
|
-
return;
|
|
3488
|
-
}
|
|
3489
|
-
// ─── Review Cache Warm Command ────────────────────────────────────
|
|
3490
|
-
if (args.command === "review-cache-warm") {
|
|
3491
|
-
const { runReviewCacheWarm } = await import("./commands/review-cache-warm.js");
|
|
3492
|
-
runReviewCacheWarm(argv);
|
|
3493
|
-
return;
|
|
3494
|
-
}
|
|
3495
|
-
// ─── Finding Metadata Enrich Command ──────────────────────────────
|
|
3496
|
-
if (args.command === "finding-metadata-enrich") {
|
|
3497
|
-
const { runFindingMetadataEnrich } = await import("./commands/finding-metadata-enrich.js");
|
|
3498
|
-
runFindingMetadataEnrich(argv);
|
|
3499
|
-
return;
|
|
3500
|
-
}
|
|
3501
|
-
// ─── Finding Auto Group Command ──────────────────────────────────
|
|
3502
|
-
if (args.command === "finding-auto-group") {
|
|
3503
|
-
const { runFindingAutoGroup } = await import("./commands/finding-auto-group.js");
|
|
3504
|
-
runFindingAutoGroup(argv);
|
|
3505
|
-
return;
|
|
3506
|
-
}
|
|
3507
|
-
// ─── Finding Suppression List Command ─────────────────────────────
|
|
3508
|
-
if (args.command === "finding-suppression-list") {
|
|
3509
|
-
const { runFindingSuppressionList } = await import("./commands/finding-suppression-list.js");
|
|
3510
|
-
runFindingSuppressionList(argv);
|
|
3511
|
-
return;
|
|
3512
|
-
}
|
|
3513
|
-
// ─── Review Plugin Status Command ─────────────────────────────────
|
|
3514
|
-
if (args.command === "review-plugin-status") {
|
|
3515
|
-
const { runReviewPluginStatus } = await import("./commands/review-plugin-status.js");
|
|
3516
|
-
runReviewPluginStatus(argv);
|
|
3517
|
-
return;
|
|
3518
|
-
}
|
|
3519
|
-
// ─── Finding Cross Ref Command ────────────────────────────────────
|
|
3520
|
-
if (args.command === "finding-cross-ref") {
|
|
3521
|
-
const { runFindingCrossRef } = await import("./commands/finding-cross-ref.js");
|
|
3522
|
-
runFindingCrossRef(argv);
|
|
3523
|
-
return;
|
|
3524
|
-
}
|
|
3525
|
-
// ─── Review CI Gate Command ───────────────────────────────────────
|
|
3526
|
-
if (args.command === "review-ci-gate") {
|
|
3527
|
-
const { runReviewCiGate } = await import("./commands/review-ci-gate.js");
|
|
3528
|
-
runReviewCiGate(argv);
|
|
3529
|
-
return;
|
|
3530
|
-
}
|
|
3531
|
-
// ─── Review Team Stats Command ────────────────────────────────────
|
|
3532
|
-
if (args.command === "review-team-stats") {
|
|
3533
|
-
const { runReviewTeamStats } = await import("./commands/review-team-stats.js");
|
|
3534
|
-
runReviewTeamStats(argv);
|
|
3535
|
-
return;
|
|
3536
|
-
}
|
|
3537
|
-
// ─── Finding Pattern Detect Command ───────────────────────────────
|
|
3538
|
-
if (args.command === "finding-pattern-detect") {
|
|
3539
|
-
const { runFindingPatternDetect } = await import("./commands/finding-pattern-detect.js");
|
|
3540
|
-
runFindingPatternDetect(argv);
|
|
3541
|
-
return;
|
|
3542
|
-
}
|
|
3543
|
-
// ─── Review Coverage Gap Command ──────────────────────────────────
|
|
3544
|
-
if (args.command === "review-coverage-gap") {
|
|
3545
|
-
const { runReviewCoverageGap } = await import("./commands/review-coverage-gap.js");
|
|
3546
|
-
runReviewCoverageGap(argv);
|
|
3547
|
-
return;
|
|
3548
|
-
}
|
|
3549
|
-
// ─── Review Feedback Loop Command ─────────────────────────────────
|
|
3550
|
-
if (args.command === "review-feedback-loop") {
|
|
3551
|
-
const { runReviewFeedbackLoop } = await import("./commands/review-feedback-loop.js");
|
|
3552
|
-
runReviewFeedbackLoop(argv);
|
|
3553
|
-
return;
|
|
3554
|
-
}
|
|
3555
|
-
// ─── Review Slack Format Command ──────────────────────────────────
|
|
3556
|
-
if (args.command === "review-slack-format") {
|
|
3557
|
-
const { runReviewSlackFormat } = await import("./commands/review-slack-format.js");
|
|
3558
|
-
runReviewSlackFormat(argv);
|
|
3559
|
-
return;
|
|
3560
|
-
}
|
|
3561
|
-
// ─── Review Config Template Command ───────────────────────────────
|
|
3562
|
-
if (args.command === "review-config-template") {
|
|
3563
|
-
const { runReviewConfigTemplate } = await import("./commands/review-config-template.js");
|
|
3564
|
-
runReviewConfigTemplate(argv);
|
|
3565
|
-
return;
|
|
3566
|
-
}
|
|
3567
|
-
// ─── Finding Fix Suggest Command ──────────────────────────────────
|
|
3568
|
-
if (args.command === "finding-fix-suggest") {
|
|
3569
|
-
const { runFindingFixSuggest } = await import("./commands/finding-fix-suggest.js");
|
|
3570
|
-
runFindingFixSuggest(argv);
|
|
3571
|
-
return;
|
|
3572
|
-
}
|
|
3573
|
-
// ─── Review Progress Track Command ────────────────────────────────
|
|
3574
|
-
if (args.command === "review-progress-track") {
|
|
3575
|
-
const { runReviewProgressTrack } = await import("./commands/review-progress-track.js");
|
|
3576
|
-
runReviewProgressTrack(argv);
|
|
3577
|
-
return;
|
|
3578
|
-
}
|
|
3579
|
-
// ─── Finding Ownership Map Command ────────────────────────────────
|
|
3580
|
-
if (args.command === "finding-ownership-map") {
|
|
3581
|
-
const { runFindingOwnershipMap } = await import("./commands/finding-ownership-map.js");
|
|
3582
|
-
runFindingOwnershipMap(argv);
|
|
3583
|
-
return;
|
|
3584
|
-
}
|
|
3585
|
-
// ─── Review Report Schedule Command ───────────────────────────────
|
|
3586
|
-
if (args.command === "review-report-schedule") {
|
|
3587
|
-
const { runReviewReportSchedule } = await import("./commands/review-report-schedule.js");
|
|
3588
|
-
runReviewReportSchedule(argv);
|
|
3589
|
-
return;
|
|
3590
|
-
}
|
|
3591
|
-
// ─── Finding Link Graph Command ───────────────────────────────────
|
|
3592
|
-
if (args.command === "finding-link-graph") {
|
|
3593
|
-
const { runFindingLinkGraph } = await import("./commands/finding-link-graph.js");
|
|
3594
|
-
runFindingLinkGraph(argv);
|
|
3595
|
-
return;
|
|
3596
|
-
}
|
|
3597
|
-
// ─── Review Audit Trail Command ───────────────────────────────────
|
|
3598
|
-
if (args.command === "review-audit-trail") {
|
|
3599
|
-
const { runReviewAuditTrail } = await import("./commands/review-audit-trail.js");
|
|
3600
|
-
runReviewAuditTrail(argv);
|
|
3601
|
-
return;
|
|
3602
|
-
}
|
|
3603
|
-
// ─── Review Compliance Report Command ─────────────────────────────
|
|
3604
|
-
if (args.command === "review-compliance-report") {
|
|
3605
|
-
const { runReviewComplianceReport } = await import("./commands/review-compliance-report.js");
|
|
3606
|
-
runReviewComplianceReport(argv);
|
|
3607
|
-
return;
|
|
3608
|
-
}
|
|
3609
|
-
// ─── Review Quickstart Command ────────────────────────────────────
|
|
3610
|
-
if (args.command === "review-quickstart") {
|
|
3611
|
-
const { runReviewQuickstart } = await import("./commands/review-quickstart.js");
|
|
3612
|
-
runReviewQuickstart(argv);
|
|
3613
|
-
return;
|
|
3614
|
-
}
|
|
3615
|
-
// ─── Review Interactive Command ───────────────────────────────────
|
|
3616
|
-
if (args.command === "review-interactive") {
|
|
3617
|
-
const { runReviewInteractive } = await import("./commands/review-interactive.js");
|
|
3618
|
-
runReviewInteractive(argv);
|
|
3619
|
-
return;
|
|
3620
|
-
}
|
|
3621
|
-
// ─── Finding Explain Command ──────────────────────────────────────
|
|
3622
|
-
if (args.command === "finding-explain") {
|
|
3623
|
-
const { runFindingExplain } = await import("./commands/finding-explain.js");
|
|
3624
|
-
runFindingExplain(argv);
|
|
3625
|
-
return;
|
|
3626
|
-
}
|
|
3627
|
-
// ─── Review IDE Sync Command ──────────────────────────────────────
|
|
3628
|
-
if (args.command === "review-ide-sync") {
|
|
3629
|
-
const { runReviewIdeSync } = await import("./commands/review-ide-sync.js");
|
|
3630
|
-
runReviewIdeSync(argv);
|
|
3631
|
-
return;
|
|
3632
|
-
}
|
|
3633
|
-
// ─── Finding Filter View Command ──────────────────────────────────
|
|
3634
|
-
if (args.command === "finding-filter-view") {
|
|
3635
|
-
const { runFindingFilterView } = await import("./commands/finding-filter-view.js");
|
|
3636
|
-
runFindingFilterView(argv);
|
|
3637
|
-
return;
|
|
3638
|
-
}
|
|
3639
|
-
// ─── Review Tenant Config Command ─────────────────────────────────
|
|
3640
|
-
if (args.command === "review-tenant-config") {
|
|
3641
|
-
const { runReviewTenantConfig } = await import("./commands/review-tenant-config.js");
|
|
3642
|
-
runReviewTenantConfig(argv);
|
|
3643
|
-
return;
|
|
3644
|
-
}
|
|
3645
|
-
// ─── Finding Code Context Command ─────────────────────────────────
|
|
3646
|
-
if (args.command === "finding-code-context") {
|
|
3647
|
-
const { runFindingCodeContext } = await import("./commands/finding-code-context.js");
|
|
3648
|
-
runFindingCodeContext(argv);
|
|
3649
|
-
return;
|
|
3650
|
-
}
|
|
3651
|
-
// ─── Finding Resolution Track Command ─────────────────────────────
|
|
3652
|
-
if (args.command === "finding-resolution-track") {
|
|
3653
|
-
const { runFindingResolutionTrack } = await import("./commands/finding-resolution-track.js");
|
|
3654
|
-
runFindingResolutionTrack(argv);
|
|
3655
|
-
return;
|
|
3656
|
-
}
|
|
3657
|
-
// ─── Review Onboard Checklist Command ─────────────────────────────
|
|
3658
|
-
if (args.command === "review-onboard-checklist") {
|
|
3659
|
-
const { runReviewOnboardChecklist } = await import("./commands/review-onboard-checklist.js");
|
|
3660
|
-
runReviewOnboardChecklist(argv);
|
|
3661
|
-
return;
|
|
3662
|
-
}
|
|
3663
|
-
// ─── Review Summary Dashboard Command ─────────────────────────────
|
|
3664
|
-
if (args.command === "review-summary-dashboard") {
|
|
3665
|
-
const { runReviewSummaryDashboard } = await import("./commands/review-summary-dashboard.js");
|
|
3666
|
-
runReviewSummaryDashboard(argv);
|
|
3667
|
-
return;
|
|
3668
|
-
}
|
|
3669
|
-
// ─── Review Merge Request Command ─────────────────────────────────
|
|
3670
|
-
if (args.command === "review-merge-request") {
|
|
3671
|
-
const { runReviewMergeRequest } = await import("./commands/review-merge-request.js");
|
|
3672
|
-
runReviewMergeRequest(argv);
|
|
3673
|
-
return;
|
|
3674
|
-
}
|
|
3675
|
-
// ─── Finding Groupby File Command ─────────────────────────────────
|
|
3676
|
-
if (args.command === "finding-groupby-file") {
|
|
3677
|
-
const { runFindingGroupbyFile } = await import("./commands/finding-groupby-file.js");
|
|
3678
|
-
runFindingGroupbyFile(argv);
|
|
3679
|
-
return;
|
|
3680
|
-
}
|
|
3681
|
-
// ─── Finding Dedup Cross Command ──────────────────────────────────
|
|
3682
|
-
if (args.command === "finding-dedup-cross") {
|
|
3683
|
-
const { runFindingDedupCross } = await import("./commands/finding-dedup-cross.js");
|
|
3684
|
-
runFindingDedupCross(argv);
|
|
3685
|
-
return;
|
|
3686
|
-
}
|
|
3687
|
-
// ─── Review Scope Select Command ──────────────────────────────────
|
|
3688
|
-
if (args.command === "review-scope-select") {
|
|
3689
|
-
const { runReviewScopeSelect } = await import("./commands/review-scope-select.js");
|
|
3690
|
-
runReviewScopeSelect(argv);
|
|
3691
|
-
return;
|
|
3692
|
-
}
|
|
3693
|
-
// ─── Review API Export Command ────────────────────────────────────
|
|
3694
|
-
if (args.command === "review-api-export") {
|
|
3695
|
-
const { runReviewApiExport } = await import("./commands/review-api-export.js");
|
|
3696
|
-
runReviewApiExport(argv);
|
|
3697
|
-
return;
|
|
3698
|
-
}
|
|
3699
|
-
// ─── Finding Correlation Map Command ──────────────────────────────
|
|
3700
|
-
if (args.command === "finding-correlation-map") {
|
|
3701
|
-
const { runFindingCorrelationMap } = await import("./commands/finding-correlation-map.js");
|
|
3702
|
-
runFindingCorrelationMap(argv);
|
|
3703
|
-
return;
|
|
3704
|
-
}
|
|
3705
|
-
// ─── Review Template Library Command ──────────────────────────────
|
|
3706
|
-
if (args.command === "review-template-library") {
|
|
3707
|
-
const { runReviewTemplateLibrary } = await import("./commands/review-template-library.js");
|
|
3708
|
-
runReviewTemplateLibrary(argv);
|
|
3709
|
-
return;
|
|
3710
|
-
}
|
|
3711
|
-
// ─── Review Notification Config Command ───────────────────────────
|
|
3712
|
-
if (args.command === "review-notification-config") {
|
|
3713
|
-
const { runReviewNotificationConfig } = await import("./commands/review-notification-config.js");
|
|
3714
|
-
runReviewNotificationConfig(argv);
|
|
3715
|
-
return;
|
|
3716
|
-
}
|
|
3717
|
-
// ─── Review Bulk Apply Command ────────────────────────────────────
|
|
3718
|
-
if (args.command === "review-bulk-apply") {
|
|
3719
|
-
const { runReviewBulkApply } = await import("./commands/review-bulk-apply.js");
|
|
3720
|
-
runReviewBulkApply(argv);
|
|
3721
|
-
return;
|
|
3722
|
-
}
|
|
3723
|
-
// ─── Finding Severity Heatmap Command ─────────────────────────────
|
|
3724
|
-
if (args.command === "finding-severity-heatmap") {
|
|
3725
|
-
const { runFindingSeverityHeatmap } = await import("./commands/finding-severity-heatmap.js");
|
|
3726
|
-
runFindingSeverityHeatmap(argv);
|
|
3727
|
-
return;
|
|
3728
|
-
}
|
|
3729
|
-
// ─── Review Config Migrate Command ────────────────────────────────
|
|
3730
|
-
if (args.command === "review-config-migrate") {
|
|
3731
|
-
const { runReviewConfigMigrate } = await import("./commands/review-config-migrate.js");
|
|
3732
|
-
runReviewConfigMigrate(argv);
|
|
3733
|
-
return;
|
|
3734
|
-
}
|
|
3735
|
-
// ─── Review History Compare Command ───────────────────────────────
|
|
3736
|
-
if (args.command === "review-history-compare") {
|
|
3737
|
-
const { runReviewHistoryCompare } = await import("./commands/review-history-compare.js");
|
|
3738
|
-
runReviewHistoryCompare(argv);
|
|
3739
|
-
return;
|
|
3740
|
-
}
|
|
3741
|
-
// ─── Review Team Dashboard Command ────────────────────────────────
|
|
3742
|
-
if (args.command === "review-team-dashboard") {
|
|
3743
|
-
const { runReviewTeamDashboard } = await import("./commands/review-team-dashboard.js");
|
|
3744
|
-
runReviewTeamDashboard(argv);
|
|
3745
|
-
return;
|
|
3746
|
-
}
|
|
3747
|
-
// ─── Finding Confidence Calibrate Command ─────────────────────────
|
|
3748
|
-
if (args.command === "finding-confidence-calibrate") {
|
|
3749
|
-
const { runFindingConfidenceCalibrate } = await import("./commands/finding-confidence-calibrate.js");
|
|
3750
|
-
runFindingConfidenceCalibrate(argv);
|
|
3751
|
-
return;
|
|
3752
|
-
}
|
|
3753
|
-
// ─── Review Output Transform Command ──────────────────────────────
|
|
3754
|
-
if (args.command === "review-output-transform") {
|
|
3755
|
-
const { runReviewOutputTransform } = await import("./commands/review-output-transform.js");
|
|
3756
|
-
runReviewOutputTransform(argv);
|
|
3757
|
-
return;
|
|
3758
|
-
}
|
|
3759
|
-
// ─── Review Adoption Metrics Command ──────────────────────────────
|
|
3760
|
-
if (args.command === "review-adoption-metrics") {
|
|
3761
|
-
const { runReviewAdoptionMetrics } = await import("./commands/review-adoption-metrics.js");
|
|
3762
|
-
runReviewAdoptionMetrics(argv);
|
|
3763
|
-
return;
|
|
3764
|
-
}
|
|
3765
|
-
// ─── Review Workspace Init Command ────────────────────────────────
|
|
3766
|
-
if (args.command === "review-workspace-init") {
|
|
3767
|
-
const { runReviewWorkspaceInit } = await import("./commands/review-workspace-init.js");
|
|
3768
|
-
runReviewWorkspaceInit(argv);
|
|
3769
|
-
return;
|
|
3770
|
-
}
|
|
3771
|
-
// ─── Review Policy Engine Command ────────────────────────────────
|
|
3772
|
-
if (args.command === "review-policy-engine") {
|
|
3773
|
-
const { runReviewPolicyEngine } = await import("./commands/review-policy-engine.js");
|
|
3774
|
-
runReviewPolicyEngine(argv);
|
|
3775
|
-
return;
|
|
3776
|
-
}
|
|
3777
|
-
// ─── Review Webhook Dispatch Command ─────────────────────────────
|
|
3778
|
-
if (args.command === "review-webhook-dispatch") {
|
|
3779
|
-
const { runReviewWebhookDispatch } = await import("./commands/review-webhook-dispatch.js");
|
|
3780
|
-
runReviewWebhookDispatch(argv);
|
|
3781
|
-
return;
|
|
3782
|
-
}
|
|
3783
|
-
// ─── Finding Risk Score Command ──────────────────────────────────
|
|
3784
|
-
if (args.command === "finding-risk-score") {
|
|
3785
|
-
const { runFindingRiskScore } = await import("./commands/finding-risk-score.js");
|
|
3786
|
-
runFindingRiskScore(argv);
|
|
3787
|
-
return;
|
|
3788
|
-
}
|
|
3789
|
-
// ─── Review Compliance Map Command ───────────────────────────────
|
|
3790
|
-
if (args.command === "review-compliance-map") {
|
|
3791
|
-
const { runReviewComplianceMap } = await import("./commands/review-compliance-map.js");
|
|
3792
|
-
runReviewComplianceMap(argv);
|
|
3793
|
-
return;
|
|
3794
|
-
}
|
|
3795
|
-
// ─── Finding Trend Forecast Command ──────────────────────────────
|
|
3796
|
-
if (args.command === "finding-trend-forecast") {
|
|
3797
|
-
const { runFindingTrendForecast } = await import("./commands/finding-trend-forecast.js");
|
|
3798
|
-
runFindingTrendForecast(argv);
|
|
3799
|
-
return;
|
|
3800
|
-
}
|
|
3801
|
-
// ─── Finding Impact Rank Command ─────────────────────────────────
|
|
3802
|
-
if (args.command === "finding-impact-rank") {
|
|
3803
|
-
const { runFindingImpactRank } = await import("./commands/finding-impact-rank.js");
|
|
3804
|
-
runFindingImpactRank(argv);
|
|
3805
|
-
return;
|
|
3806
|
-
}
|
|
3807
|
-
// ─── Review Rollout Plan Command ─────────────────────────────────
|
|
3808
|
-
if (args.command === "review-rollout-plan") {
|
|
3809
|
-
const { runReviewRolloutPlan } = await import("./commands/review-rollout-plan.js");
|
|
3810
|
-
runReviewRolloutPlan(argv);
|
|
3811
|
-
return;
|
|
3812
|
-
}
|
|
3813
|
-
// ─── Finding Annotation Layer Command ────────────────────────────
|
|
3814
|
-
if (args.command === "finding-annotation-layer") {
|
|
3815
|
-
const { runFindingAnnotationLayer } = await import("./commands/finding-annotation-layer.js");
|
|
3816
|
-
runFindingAnnotationLayer(argv);
|
|
3817
|
-
return;
|
|
3818
|
-
}
|
|
3819
|
-
// ─── Review Gate Config Command ──────────────────────────────────
|
|
3820
|
-
if (args.command === "review-gate-config") {
|
|
3821
|
-
const { runReviewGateConfig } = await import("./commands/review-gate-config.js");
|
|
3822
|
-
runReviewGateConfig(argv);
|
|
3823
|
-
return;
|
|
3824
|
-
}
|
|
3825
|
-
// ─── Review Language Profile Command ─────────────────────────────
|
|
3826
|
-
if (args.command === "review-language-profile") {
|
|
3827
|
-
const { runReviewLanguageProfile } = await import("./commands/review-language-profile.js");
|
|
3828
|
-
runReviewLanguageProfile(argv);
|
|
3829
|
-
return;
|
|
3830
|
-
}
|
|
3831
|
-
// ─── Finding CWE Lookup Command ─────────────────────────────────
|
|
3832
|
-
if (args.command === "finding-cwe-lookup") {
|
|
3833
|
-
const { runFindingCweLookup } = await import("./commands/finding-cwe-lookup.js");
|
|
3834
|
-
runFindingCweLookup(argv);
|
|
3835
|
-
return;
|
|
3836
|
-
}
|
|
3837
|
-
// ─── Review CICD Integrate Command ──────────────────────────────
|
|
3838
|
-
if (args.command === "review-cicd-integrate") {
|
|
3839
|
-
const { runReviewCicdIntegrate } = await import("./commands/review-cicd-integrate.js");
|
|
3840
|
-
runReviewCicdIntegrate(argv);
|
|
3841
|
-
return;
|
|
3842
|
-
}
|
|
3843
|
-
// ─── Finding Patch Preview Command ──────────────────────────────
|
|
3844
|
-
if (args.command === "finding-patch-preview") {
|
|
3845
|
-
const { runFindingPatchPreview } = await import("./commands/finding-patch-preview.js");
|
|
3846
|
-
runFindingPatchPreview(argv);
|
|
3847
|
-
return;
|
|
3848
|
-
}
|
|
3849
|
-
// ─── Review Org Dashboard Command ───────────────────────────────
|
|
3850
|
-
if (args.command === "review-org-dashboard") {
|
|
3851
|
-
const { runReviewOrgDashboard } = await import("./commands/review-org-dashboard.js");
|
|
3852
|
-
runReviewOrgDashboard(argv);
|
|
3853
|
-
return;
|
|
3854
|
-
}
|
|
3855
|
-
// ─── Finding Duplicate Detect Command ───────────────────────────
|
|
3856
|
-
if (args.command === "finding-duplicate-detect") {
|
|
3857
|
-
const { runFindingDuplicateDetect } = await import("./commands/finding-duplicate-detect.js");
|
|
3858
|
-
runFindingDuplicateDetect(argv);
|
|
3859
|
-
return;
|
|
3860
|
-
}
|
|
3861
|
-
// ─── Finding Priority Matrix Command ────────────────────────────
|
|
3862
|
-
if (args.command === "finding-priority-matrix") {
|
|
3863
|
-
const { runFindingPriorityMatrix } = await import("./commands/finding-priority-matrix.js");
|
|
3864
|
-
runFindingPriorityMatrix(argv);
|
|
3865
|
-
return;
|
|
3866
|
-
}
|
|
3867
|
-
// ─── Review SLA Config Command ──────────────────────────────────
|
|
3868
|
-
if (args.command === "review-sla-config") {
|
|
3869
|
-
const { runReviewSlaConfig } = await import("./commands/review-sla-config.js");
|
|
3870
|
-
runReviewSlaConfig(argv);
|
|
3871
|
-
return;
|
|
3872
|
-
}
|
|
3873
|
-
// ─── Review Report Archive Command ──────────────────────────────
|
|
3874
|
-
if (args.command === "review-report-archive") {
|
|
3875
|
-
const { runReviewReportArchive } = await import("./commands/review-report-archive.js");
|
|
3876
|
-
runReviewReportArchive(argv);
|
|
3877
|
-
return;
|
|
3878
|
-
}
|
|
3879
|
-
// ─── Finding Auto Suppress Command ─────────────────────────────────
|
|
3880
|
-
if (args.command === "finding-auto-suppress") {
|
|
3881
|
-
const { runFindingAutoSuppress } = await import("./commands/finding-auto-suppress.js");
|
|
3882
|
-
runFindingAutoSuppress(argv);
|
|
3883
|
-
return;
|
|
3884
|
-
}
|
|
3885
|
-
// ─── Review Review Comments Command ─────────────────────────────────
|
|
3886
|
-
if (args.command === "review-review-comments") {
|
|
3887
|
-
const { runReviewReviewComments } = await import("./commands/review-review-comments.js");
|
|
3888
|
-
runReviewReviewComments(argv);
|
|
3889
|
-
return;
|
|
3890
|
-
}
|
|
3891
|
-
// ─── Review Permission Model Command ─────────────────────────────────
|
|
3892
|
-
if (args.command === "review-permission-model") {
|
|
3893
|
-
const { runReviewPermissionModel } = await import("./commands/review-permission-model.js");
|
|
3894
|
-
runReviewPermissionModel(argv);
|
|
3895
|
-
return;
|
|
3896
|
-
}
|
|
3897
|
-
// ─── Review Repo Onboard Command ─────────────────────────────────
|
|
3898
|
-
if (args.command === "review-repo-onboard") {
|
|
3899
|
-
const { runReviewRepoOnboard } = await import("./commands/review-repo-onboard.js");
|
|
3900
|
-
runReviewRepoOnboard(argv);
|
|
3901
|
-
return;
|
|
3902
|
-
}
|
|
3903
|
-
// ─── Finding Dismiss Workflow Command ─────────────────────────────────
|
|
3904
|
-
if (args.command === "finding-dismiss-workflow") {
|
|
3905
|
-
const { runFindingDismissWorkflow } = await import("./commands/finding-dismiss-workflow.js");
|
|
3906
|
-
runFindingDismissWorkflow(argv);
|
|
3907
|
-
return;
|
|
3908
|
-
}
|
|
3909
|
-
// ─── Review Data Retention Command ─────────────────────────────────
|
|
3910
|
-
if (args.command === "review-data-retention") {
|
|
3911
|
-
const { runReviewDataRetention } = await import("./commands/review-data-retention.js");
|
|
3912
|
-
runReviewDataRetention(argv);
|
|
3913
|
-
return;
|
|
3914
|
-
}
|
|
3915
|
-
// ─── Finding Reachability Check Command ─────────────────────────────────
|
|
3916
|
-
if (args.command === "finding-reachability-check") {
|
|
3917
|
-
const { runFindingReachabilityCheck } = await import("./commands/finding-reachability-check.js");
|
|
3918
|
-
runFindingReachabilityCheck(argv);
|
|
3919
|
-
return;
|
|
3920
|
-
}
|
|
3921
|
-
// ─── Review Audit Export Command ─────────────────────────────────
|
|
3922
|
-
if (args.command === "review-audit-export") {
|
|
3923
|
-
const { runReviewAuditExport } = await import("./commands/review-audit-export.js");
|
|
3924
|
-
runReviewAuditExport(argv);
|
|
3925
|
-
return;
|
|
3926
|
-
}
|
|
3927
|
-
// ─── Review Pipeline Status Command ─────────────────────────────────
|
|
3928
|
-
if (args.command === "review-pipeline-status") {
|
|
3929
|
-
const { runReviewPipelineStatus } = await import("./commands/review-pipeline-status.js");
|
|
3930
|
-
runReviewPipelineStatus(argv);
|
|
3931
|
-
return;
|
|
3932
|
-
}
|
|
3933
|
-
// ─── Finding Auto Triage Command ────────────────────────────────────
|
|
3934
|
-
if (args.command === "finding-auto-triage") {
|
|
3935
|
-
const { runFindingAutoTriage } = await import("./commands/finding-auto-triage.js");
|
|
3936
|
-
runFindingAutoTriage(argv);
|
|
3937
|
-
return;
|
|
3938
|
-
}
|
|
3939
|
-
// ─── Review Stakeholder Report Command ──────────────────────────────
|
|
3940
|
-
if (args.command === "review-stakeholder-report") {
|
|
3941
|
-
const { runReviewStakeholderReport } = await import("./commands/review-stakeholder-report.js");
|
|
3942
|
-
runReviewStakeholderReport(argv);
|
|
3943
|
-
return;
|
|
3944
|
-
}
|
|
3945
|
-
// ─── Finding Change Impact Command ──────────────────────────────────
|
|
3946
|
-
if (args.command === "finding-change-impact") {
|
|
3947
|
-
const { runFindingChangeImpact } = await import("./commands/finding-change-impact.js");
|
|
3948
|
-
runFindingChangeImpact(argv);
|
|
3949
|
-
return;
|
|
3950
|
-
}
|
|
3951
|
-
// ─── Review Deployment Gate Command ─────────────────────────────────
|
|
3952
|
-
if (args.command === "review-deployment-gate") {
|
|
3953
|
-
const { runReviewDeploymentGate } = await import("./commands/review-deployment-gate.js");
|
|
3954
|
-
runReviewDeploymentGate(argv);
|
|
3955
|
-
return;
|
|
3956
|
-
}
|
|
3957
|
-
// ─── Review Environment Config Command ──────────────────────────────
|
|
3958
|
-
if (args.command === "review-environment-config") {
|
|
3959
|
-
const { runReviewEnvironmentConfig } = await import("./commands/review-environment-config.js");
|
|
3960
|
-
runReviewEnvironmentConfig(argv);
|
|
3961
|
-
return;
|
|
3962
|
-
}
|
|
3963
|
-
// ─── Finding False Positive Learn Command ───────────────────────────
|
|
3964
|
-
if (args.command === "finding-false-positive-learn") {
|
|
3965
|
-
const { runFindingFalsePositiveLearn } = await import("./commands/finding-false-positive-learn.js");
|
|
3966
|
-
runFindingFalsePositiveLearn(argv);
|
|
3967
|
-
return;
|
|
3968
|
-
}
|
|
3969
|
-
// ─── Review Multi Repo Sync Command ─────────────────────────────────
|
|
3970
|
-
if (args.command === "review-multi-repo-sync") {
|
|
3971
|
-
const { runReviewMultiRepoSync } = await import("./commands/review-multi-repo-sync.js");
|
|
3972
|
-
runReviewMultiRepoSync(argv);
|
|
3973
|
-
return;
|
|
3974
|
-
}
|
|
3975
|
-
// ─── Review Session Replay Command ──────────────────────────────────
|
|
3976
|
-
if (args.command === "review-session-replay") {
|
|
3977
|
-
const { runReviewSessionReplay } = await import("./commands/review-session-replay.js");
|
|
3978
|
-
runReviewSessionReplay(argv);
|
|
3979
|
-
return;
|
|
3980
|
-
}
|
|
3981
|
-
// ─── Finding Context Enrich Command ─────────────────────────────────
|
|
3982
|
-
if (args.command === "finding-context-enrich") {
|
|
3983
|
-
const { runFindingContextEnrich } = await import("./commands/finding-context-enrich.js");
|
|
3984
|
-
runFindingContextEnrich(argv);
|
|
3985
|
-
return;
|
|
3986
|
-
}
|
|
3987
|
-
// ─── Review Custom Judge Config Command ─────────────────────────────
|
|
3988
|
-
if (args.command === "review-custom-judge-config") {
|
|
3989
|
-
const { runReviewCustomJudgeConfig } = await import("./commands/review-custom-judge-config.js");
|
|
3990
|
-
runReviewCustomJudgeConfig(argv);
|
|
3991
|
-
return;
|
|
3992
|
-
}
|
|
3993
|
-
// ─── Review Branch Policy Command ───────────────────────────────────
|
|
3994
|
-
if (args.command === "review-branch-policy") {
|
|
3995
|
-
const { runReviewBranchPolicy } = await import("./commands/review-branch-policy.js");
|
|
3996
|
-
runReviewBranchPolicy(argv);
|
|
3997
|
-
return;
|
|
3998
|
-
}
|
|
3999
|
-
// ─── Finding Recurrence Detect Command ──────────────────────────────
|
|
4000
|
-
if (args.command === "finding-recurrence-detect") {
|
|
4001
|
-
const { runFindingRecurrenceDetect } = await import("./commands/finding-recurrence-detect.js");
|
|
4002
|
-
runFindingRecurrenceDetect(argv);
|
|
4003
|
-
return;
|
|
4004
|
-
}
|
|
4005
|
-
// ─── Review Integration Health Command ──────────────────────────────
|
|
4006
|
-
if (args.command === "review-integration-health") {
|
|
4007
|
-
const { runReviewIntegrationHealth } = await import("./commands/review-integration-health.js");
|
|
4008
|
-
runReviewIntegrationHealth(argv);
|
|
4009
|
-
return;
|
|
4010
|
-
}
|
|
4011
|
-
// ─── Review Metric Export Command ───────────────────────────────────
|
|
4012
|
-
if (args.command === "review-metric-export") {
|
|
4013
|
-
const { runReviewMetricExport } = await import("./commands/review-metric-export.js");
|
|
4014
|
-
runReviewMetricExport(argv);
|
|
4015
|
-
return;
|
|
4016
|
-
}
|
|
4017
|
-
// ─── Finding Ownership Assign Command ───────────────────────────────
|
|
4018
|
-
if (args.command === "finding-ownership-assign") {
|
|
4019
|
-
const { runFindingOwnershipAssign } = await import("./commands/finding-ownership-assign.js");
|
|
4020
|
-
runFindingOwnershipAssign(argv);
|
|
4021
|
-
return;
|
|
4022
|
-
}
|
|
4023
|
-
// ─── Review Notification Digest Command ─────────────────────────────
|
|
4024
|
-
if (args.command === "review-notification-digest") {
|
|
4025
|
-
const { runReviewNotificationDigest } = await import("./commands/review-notification-digest.js");
|
|
4026
|
-
runReviewNotificationDigest(argv);
|
|
4027
|
-
return;
|
|
4028
|
-
}
|
|
4029
|
-
// ─── Review Access Log Command ─────────────────────────────────────
|
|
4030
|
-
if (args.command === "review-access-log") {
|
|
4031
|
-
const { runReviewAccessLog } = await import("./commands/review-access-log.js");
|
|
4032
|
-
runReviewAccessLog(argv);
|
|
4033
|
-
return;
|
|
4034
|
-
}
|
|
4035
|
-
// ─── Review Tag Manager Command ────────────────────────────────────
|
|
4036
|
-
if (args.command === "review-tag-manager") {
|
|
4037
|
-
const { runReviewTagManager } = await import("./commands/review-tag-manager.js");
|
|
4038
|
-
runReviewTagManager(argv);
|
|
4039
|
-
return;
|
|
4040
|
-
}
|
|
4041
|
-
// ─── Review Quality Trend Command ───────────────────────────────────
|
|
4042
|
-
if (args.command === "review-quality-trend") {
|
|
4043
|
-
const { runReviewQualityTrend } = await import("./commands/review-quality-trend.js");
|
|
4044
|
-
runReviewQualityTrend(argv);
|
|
4045
|
-
return;
|
|
4046
|
-
}
|
|
4047
|
-
// ─── Finding Batch Suppress Command ─────────────────────────────────
|
|
4048
|
-
if (args.command === "finding-batch-suppress") {
|
|
4049
|
-
const { runFindingBatchSuppress } = await import("./commands/finding-batch-suppress.js");
|
|
4050
|
-
runFindingBatchSuppress(argv);
|
|
4051
|
-
return;
|
|
4052
|
-
}
|
|
4053
|
-
// ─── Finding Severity Drift Command ─────────────────────────────────
|
|
4054
|
-
if (args.command === "finding-severity-drift") {
|
|
4055
|
-
const { runFindingSeverityDrift } = await import("./commands/finding-severity-drift.js");
|
|
4056
|
-
runFindingSeverityDrift(argv);
|
|
4057
|
-
return;
|
|
4058
|
-
}
|
|
4059
|
-
// ─── Review PR Comment Gen Command ──────────────────────────────────
|
|
4060
|
-
if (args.command === "review-pr-comment-gen") {
|
|
4061
|
-
const { runReviewPrCommentGen } = await import("./commands/review-pr-comment-gen.js");
|
|
4062
|
-
runReviewPrCommentGen(argv);
|
|
4063
|
-
return;
|
|
4064
|
-
}
|
|
4065
|
-
// ─── Finding Dependency Link Command ────────────────────────────────
|
|
4066
|
-
if (args.command === "finding-dependency-link") {
|
|
4067
|
-
const { runFindingDependencyLink } = await import("./commands/finding-dependency-link.js");
|
|
4068
|
-
runFindingDependencyLink(argv);
|
|
4069
|
-
return;
|
|
4070
|
-
}
|
|
4071
|
-
// ─── Review Role Assignment Command ─────────────────────────────────
|
|
4072
|
-
if (args.command === "review-role-assignment") {
|
|
4073
|
-
const { runReviewRoleAssignment } = await import("./commands/review-role-assignment.js");
|
|
4074
|
-
runReviewRoleAssignment(argv);
|
|
4075
|
-
return;
|
|
4076
|
-
}
|
|
4077
|
-
// ─── Review Archive Search Command ──────────────────────────────────
|
|
4078
|
-
if (args.command === "review-archive-search") {
|
|
4079
|
-
const { runReviewArchiveSearch } = await import("./commands/review-archive-search.js");
|
|
4080
|
-
runReviewArchiveSearch(argv);
|
|
4081
|
-
return;
|
|
4082
|
-
}
|
|
4083
|
-
// ─── Review Incident Link Command ───────────────────────────────────
|
|
4084
|
-
if (args.command === "review-incident-link") {
|
|
4085
|
-
const { runReviewIncidentLink } = await import("./commands/review-incident-link.js");
|
|
4086
|
-
runReviewIncidentLink(argv);
|
|
4087
|
-
return;
|
|
4088
|
-
}
|
|
4089
|
-
// ─── Finding Search Index Command ───────────────────────────────────
|
|
4090
|
-
if (args.command === "finding-search-index") {
|
|
4091
|
-
const { runFindingSearchIndex } = await import("./commands/finding-search-index.js");
|
|
4092
|
-
runFindingSearchIndex(argv);
|
|
4093
|
-
return;
|
|
4094
|
-
}
|
|
4095
|
-
// ─── Review Confidence Explain Command ────────────────────────────
|
|
4096
|
-
if (args.command === "review-confidence-explain") {
|
|
4097
|
-
const { runReviewConfidenceExplain } = await import("./commands/review-confidence-explain.js");
|
|
4098
|
-
runReviewConfidenceExplain(argv);
|
|
4099
|
-
return;
|
|
4100
|
-
}
|
|
4101
|
-
// ─── Finding Merge Strategy Command ───────────────────────────────
|
|
4102
|
-
if (args.command === "finding-merge-strategy") {
|
|
4103
|
-
const { runFindingMergeStrategy } = await import("./commands/finding-merge-strategy.js");
|
|
4104
|
-
runFindingMergeStrategy(argv);
|
|
4105
|
-
return;
|
|
4106
|
-
}
|
|
4107
|
-
// ─── Review Scope Suggest Command ─────────────────────────────────
|
|
4108
|
-
if (args.command === "review-scope-suggest") {
|
|
4109
|
-
const { runReviewScopeSuggest } = await import("./commands/review-scope-suggest.js");
|
|
4110
|
-
runReviewScopeSuggest(argv);
|
|
4111
|
-
return;
|
|
4112
|
-
}
|
|
4113
|
-
// ─── Review AI Feedback Loop Command ──────────────────────────────
|
|
4114
|
-
if (args.command === "review-ai-feedback-loop") {
|
|
4115
|
-
const { runReviewAiFeedbackLoop } = await import("./commands/review-ai-feedback-loop.js");
|
|
4116
|
-
runReviewAiFeedbackLoop(argv);
|
|
4117
|
-
return;
|
|
4118
|
-
}
|
|
4119
|
-
// ─── Finding Trend Alert Command ──────────────────────────────────
|
|
4120
|
-
if (args.command === "finding-trend-alert") {
|
|
4121
|
-
const { runFindingTrendAlert } = await import("./commands/finding-trend-alert.js");
|
|
4122
|
-
runFindingTrendAlert(argv);
|
|
4123
|
-
return;
|
|
4124
|
-
}
|
|
4125
|
-
// ─── Review Workload Balance Command ──────────────────────────────
|
|
4126
|
-
if (args.command === "review-workload-balance") {
|
|
4127
|
-
const { runReviewWorkloadBalance } = await import("./commands/review-workload-balance.js");
|
|
4128
|
-
runReviewWorkloadBalance(argv);
|
|
4129
|
-
return;
|
|
4130
|
-
}
|
|
4131
|
-
// ─── Finding Dedup Smart Command ──────────────────────────────────
|
|
4132
|
-
if (args.command === "finding-dedup-smart") {
|
|
4133
|
-
const { runFindingDedupSmart } = await import("./commands/finding-dedup-smart.js");
|
|
4134
|
-
runFindingDedupSmart(argv);
|
|
4135
|
-
return;
|
|
4136
|
-
}
|
|
4137
|
-
// ─── Finding Annotation Export Command ────────────────────────────
|
|
4138
|
-
if (args.command === "finding-annotation-export") {
|
|
4139
|
-
const { runFindingAnnotationExport } = await import("./commands/finding-annotation-export.js");
|
|
4140
|
-
runFindingAnnotationExport(argv);
|
|
4141
|
-
return;
|
|
4142
|
-
}
|
|
4143
|
-
// ─── Review CI Insight Command ────────────────────────────────────
|
|
4144
|
-
if (args.command === "review-ci-insight") {
|
|
4145
|
-
const { runReviewCiInsight } = await import("./commands/review-ci-insight.js");
|
|
4146
|
-
runReviewCiInsight(argv);
|
|
4147
|
-
return;
|
|
4148
|
-
}
|
|
4149
|
-
// ─── Review Template Suggest Command ──────────────────────────────
|
|
4150
|
-
if (args.command === "review-template-suggest") {
|
|
4151
|
-
const { runReviewTemplateSuggest } = await import("./commands/review-template-suggest.js");
|
|
4152
|
-
runReviewTemplateSuggest(argv);
|
|
4153
|
-
return;
|
|
4154
|
-
}
|
|
4155
|
-
// ─── Finding Hotspot Detect Command ───────────────────────────────
|
|
4156
|
-
if (args.command === "finding-hotspot-detect") {
|
|
4157
|
-
const { runFindingHotspotDetect } = await import("./commands/finding-hotspot-detect.js");
|
|
4158
|
-
runFindingHotspotDetect(argv);
|
|
4159
|
-
return;
|
|
4160
|
-
}
|
|
4161
|
-
// ─── Review Code Health Score Command ─────────────────────────────
|
|
4162
|
-
if (args.command === "review-code-health-score") {
|
|
4163
|
-
const { runReviewCodeHealthScore } = await import("./commands/review-code-health-score.js");
|
|
4164
|
-
runReviewCodeHealthScore(argv);
|
|
4165
|
-
return;
|
|
4166
|
-
}
|
|
4167
|
-
// ─── Review Velocity Track Command ────────────────────────────────
|
|
4168
|
-
if (args.command === "review-velocity-track") {
|
|
4169
|
-
const { runReviewVelocityTrack } = await import("./commands/review-velocity-track.js");
|
|
4170
|
-
runReviewVelocityTrack(argv);
|
|
4171
|
-
return;
|
|
4172
|
-
}
|
|
4173
|
-
// ─── Finding Cross File Link Command ───────────────────────────────
|
|
4174
|
-
if (args.command === "finding-cross-file-link") {
|
|
4175
|
-
const { runFindingCrossFileLink } = await import("./commands/finding-cross-file-link.js");
|
|
4176
|
-
runFindingCrossFileLink(argv);
|
|
4177
|
-
return;
|
|
4178
|
-
}
|
|
4179
|
-
// ─── Review PR Size Check Command ─────────────────────────────────
|
|
4180
|
-
if (args.command === "review-pr-size-check") {
|
|
4181
|
-
const { runReviewPrSizeCheck } = await import("./commands/review-pr-size-check.js");
|
|
4182
|
-
runReviewPrSizeCheck(argv);
|
|
4183
|
-
return;
|
|
4184
|
-
}
|
|
4185
|
-
// ─── Review Focus Area Command ────────────────────────────────────
|
|
4186
|
-
if (args.command === "review-focus-area") {
|
|
4187
|
-
const { runReviewFocusArea } = await import("./commands/review-focus-area.js");
|
|
4188
|
-
runReviewFocusArea(argv);
|
|
4189
|
-
return;
|
|
4190
|
-
}
|
|
4191
|
-
// ─── Review Team Analytics Command ────────────────────────────────
|
|
4192
|
-
if (args.command === "review-team-analytics") {
|
|
4193
|
-
const { runReviewTeamAnalytics } = await import("./commands/review-team-analytics.js");
|
|
4194
|
-
runReviewTeamAnalytics(argv);
|
|
4195
|
-
return;
|
|
4196
|
-
}
|
|
4197
|
-
// ─── Finding Similar Match Command ─────────────────────────────────
|
|
4198
|
-
if (args.command === "finding-similar-match") {
|
|
4199
|
-
const { runFindingSimilarMatch } = await import("./commands/finding-similar-match.js");
|
|
4200
|
-
runFindingSimilarMatch(argv);
|
|
4201
|
-
return;
|
|
4202
|
-
}
|
|
4203
|
-
// ─── Review Risk Matrix Command ───────────────────────────────────
|
|
4204
|
-
if (args.command === "review-risk-matrix") {
|
|
4205
|
-
const { runReviewRiskMatrix } = await import("./commands/review-risk-matrix.js");
|
|
4206
|
-
runReviewRiskMatrix(argv);
|
|
4207
|
-
return;
|
|
4208
|
-
}
|
|
4209
|
-
// ─── Review Approval Criteria Command ─────────────────────────────
|
|
4210
|
-
if (args.command === "review-approval-criteria") {
|
|
4211
|
-
const { runReviewApprovalCriteria } = await import("./commands/review-approval-criteria.js");
|
|
4212
|
-
runReviewApprovalCriteria(argv);
|
|
4213
|
-
return;
|
|
4214
|
-
}
|
|
4215
|
-
// ─── Finding Context Summary Command ──────────────────────────────
|
|
4216
|
-
if (args.command === "finding-context-summary") {
|
|
4217
|
-
const { runFindingContextSummary } = await import("./commands/finding-context-summary.js");
|
|
4218
|
-
runFindingContextSummary(argv);
|
|
4219
|
-
return;
|
|
4220
|
-
}
|
|
4221
|
-
// ─── Review Changelog Impact Command ──────────────────────────────
|
|
4222
|
-
if (args.command === "review-changelog-impact") {
|
|
4223
|
-
const { runReviewChangelogImpact } = await import("./commands/review-changelog-impact.js");
|
|
4224
|
-
runReviewChangelogImpact(argv);
|
|
4225
|
-
return;
|
|
4226
|
-
}
|
|
4227
|
-
// ─── Review Commit Quality Command ────────────────────────────────
|
|
4228
|
-
if (args.command === "review-commit-quality") {
|
|
4229
|
-
const { runReviewCommitQuality } = await import("./commands/review-commit-quality.js");
|
|
4230
|
-
runReviewCommitQuality(argv);
|
|
4231
|
-
return;
|
|
4232
|
-
}
|
|
4233
|
-
// ─── Finding Auto-Categorize Command ──────────────────────────────
|
|
4234
|
-
if (args.command === "finding-auto-categorize") {
|
|
4235
|
-
const { runFindingAutoCategorize } = await import("./commands/finding-auto-categorize.js");
|
|
4236
|
-
runFindingAutoCategorize(argv);
|
|
4237
|
-
return;
|
|
4238
|
-
}
|
|
4239
|
-
// ─── Review Stale Finding Clean Command ───────────────────────────
|
|
4240
|
-
if (args.command === "review-stale-finding-clean") {
|
|
4241
|
-
const { runReviewStaleFindingClean } = await import("./commands/review-stale-finding-clean.js");
|
|
4242
|
-
runReviewStaleFindingClean(argv);
|
|
4243
|
-
return;
|
|
4244
|
-
}
|
|
4245
|
-
// ─── Finding Impact Radius Command ────────────────────────────────
|
|
4246
|
-
if (args.command === "finding-impact-radius") {
|
|
4247
|
-
const { runFindingImpactRadius } = await import("./commands/finding-impact-radius.js");
|
|
4248
|
-
runFindingImpactRadius(argv);
|
|
4249
|
-
return;
|
|
4250
|
-
}
|
|
4251
|
-
// ─── Review Reviewer Match Command ────────────────────────────────
|
|
4252
|
-
if (args.command === "review-reviewer-match") {
|
|
4253
|
-
const { runReviewReviewerMatch } = await import("./commands/review-reviewer-match.js");
|
|
4254
|
-
runReviewReviewerMatch(argv);
|
|
4255
|
-
return;
|
|
4256
|
-
}
|
|
4257
|
-
// ─── Review Quality Gate Command ──────────────────────────────────
|
|
4258
|
-
if (args.command === "review-quality-gate") {
|
|
4259
|
-
const { runReviewQualityGate } = await import("./commands/review-quality-gate.js");
|
|
4260
|
-
runReviewQualityGate(argv);
|
|
4261
|
-
return;
|
|
4262
|
-
}
|
|
4263
|
-
// ─── Finding Reopen Detect Command ────────────────────────────────
|
|
4264
|
-
if (args.command === "finding-reopen-detect") {
|
|
4265
|
-
const { runFindingReopenDetect } = await import("./commands/finding-reopen-detect.js");
|
|
4266
|
-
runFindingReopenDetect(argv);
|
|
4267
|
-
return;
|
|
4268
|
-
}
|
|
4269
|
-
// ─── Finding Priority Rank Command ────────────────────────────────
|
|
4270
|
-
if (args.command === "finding-priority-rank") {
|
|
4271
|
-
const { runFindingPriorityRank } = await import("./commands/finding-priority-rank.js");
|
|
4272
|
-
runFindingPriorityRank(argv);
|
|
4273
|
-
return;
|
|
4274
|
-
}
|
|
4275
|
-
// ─── Review Dependency Review Command ─────────────────────────────
|
|
4276
|
-
if (args.command === "review-dependency-review") {
|
|
4277
|
-
const { runReviewDependencyReview } = await import("./commands/review-dependency-review.js");
|
|
4278
|
-
runReviewDependencyReview(argv);
|
|
4279
|
-
return;
|
|
4280
|
-
}
|
|
4281
|
-
// ─── Review Merge Readiness Command ───────────────────────────────
|
|
4282
|
-
if (args.command === "review-merge-readiness") {
|
|
4283
|
-
const { runReviewMergeReadiness } = await import("./commands/review-merge-readiness.js");
|
|
4284
|
-
runReviewMergeReadiness(argv);
|
|
4285
|
-
return;
|
|
4286
|
-
}
|
|
4287
|
-
// ─── Review Security Posture Command ──────────────────────────────
|
|
4288
|
-
if (args.command === "review-security-posture") {
|
|
4289
|
-
const { runReviewSecurityPosture } = await import("./commands/review-security-posture.js");
|
|
4290
|
-
runReviewSecurityPosture(argv);
|
|
4291
|
-
return;
|
|
4292
|
-
}
|
|
4293
|
-
// ─── Review Knowledge Capture Command ─────────────────────────────
|
|
4294
|
-
if (args.command === "review-knowledge-capture") {
|
|
4295
|
-
const { runReviewKnowledgeCapture } = await import("./commands/review-knowledge-capture.js");
|
|
4296
|
-
runReviewKnowledgeCapture(argv);
|
|
4297
|
-
return;
|
|
4298
|
-
}
|
|
4299
|
-
// ─── Review Onboarding Check Command ──────────────────────────────
|
|
4300
|
-
if (args.command === "review-onboarding-check") {
|
|
4301
|
-
const { runReviewOnboardingCheck } = await import("./commands/review-onboarding-check.js");
|
|
4302
|
-
runReviewOnboardingCheck(argv);
|
|
4303
|
-
return;
|
|
4304
|
-
}
|
|
4305
|
-
// ─── Finding Regression Detect Command ────────────────────────────
|
|
4306
|
-
if (args.command === "finding-regression-detect") {
|
|
4307
|
-
const { runFindingRegressionDetect } = await import("./commands/finding-regression-detect.js");
|
|
4308
|
-
runFindingRegressionDetect(argv);
|
|
4309
|
-
return;
|
|
4310
|
-
}
|
|
4311
|
-
// ─── Finding Auto-Fix Suggest Command ─────────────────────────────
|
|
4312
|
-
if (args.command === "finding-auto-fix-suggest") {
|
|
4313
|
-
const { runFindingAutoFixSuggest } = await import("./commands/finding-auto-fix-suggest.js");
|
|
4314
|
-
runFindingAutoFixSuggest(argv);
|
|
4315
|
-
return;
|
|
4316
|
-
}
|
|
4317
|
-
// ─── Finding Scope Filter Command ────────────────────────────────
|
|
4318
|
-
if (args.command === "finding-scope-filter") {
|
|
4319
|
-
const { runFindingScopeFilter } = await import("./commands/finding-scope-filter.js");
|
|
4320
|
-
runFindingScopeFilter(argv);
|
|
4321
|
-
return;
|
|
4322
|
-
}
|
|
4323
|
-
// ─── Finding Noise Reduce Command ────────────────────────────────
|
|
4324
|
-
if (args.command === "finding-noise-reduce") {
|
|
4325
|
-
const { runFindingNoiseReduce } = await import("./commands/finding-noise-reduce.js");
|
|
4326
|
-
runFindingNoiseReduce(argv);
|
|
4327
|
-
return;
|
|
4328
|
-
}
|
|
4329
|
-
// ─── Review Release Gate Command ─────────────────────────────────
|
|
4330
|
-
if (args.command === "review-release-gate") {
|
|
4331
|
-
const { runReviewReleaseGate } = await import("./commands/review-release-gate.js");
|
|
4332
|
-
runReviewReleaseGate(argv);
|
|
4333
|
-
return;
|
|
4334
|
-
}
|
|
4335
|
-
// ─── Review Code Ownership Command ───────────────────────────────
|
|
4336
|
-
if (args.command === "review-code-ownership") {
|
|
4337
|
-
const { runReviewCodeOwnership } = await import("./commands/review-code-ownership.js");
|
|
4338
|
-
runReviewCodeOwnership(argv);
|
|
4339
|
-
return;
|
|
4340
|
-
}
|
|
4341
|
-
// ─── Finding Batch Triage Command ────────────────────────────────
|
|
4342
|
-
if (args.command === "finding-batch-triage") {
|
|
4343
|
-
const { runFindingBatchTriage } = await import("./commands/finding-batch-triage.js");
|
|
4344
|
-
runFindingBatchTriage(argv);
|
|
4345
|
-
return;
|
|
4346
|
-
}
|
|
4347
|
-
// ─── Review PR Label Suggest Command ─────────────────────────────
|
|
4348
|
-
if (args.command === "review-pr-label-suggest") {
|
|
4349
|
-
const { runReviewPrLabelSuggest } = await import("./commands/review-pr-label-suggest.js");
|
|
4350
|
-
runReviewPrLabelSuggest(argv);
|
|
4351
|
-
return;
|
|
4352
|
-
}
|
|
4353
|
-
// ─── Finding Confidence Boost Command ─────────────────────────────
|
|
4354
|
-
if (args.command === "finding-confidence-boost") {
|
|
4355
|
-
const { runFindingConfidenceBoost } = await import("./commands/finding-confidence-boost.js");
|
|
4356
|
-
runFindingConfidenceBoost(argv);
|
|
4357
|
-
return;
|
|
4358
|
-
}
|
|
4359
|
-
// ─── Review Review Cadence Command ───────────────────────────────
|
|
4360
|
-
if (args.command === "review-review-cadence") {
|
|
4361
|
-
const { runReviewReviewCadence } = await import("./commands/review-review-cadence.js");
|
|
4362
|
-
runReviewReviewCadence(argv);
|
|
4363
|
-
return;
|
|
4364
|
-
}
|
|
4365
|
-
// ─── Review Action Item Gen Command ──────────────────────────────
|
|
4366
|
-
if (args.command === "review-action-item-gen") {
|
|
4367
|
-
const { runReviewActionItemGen } = await import("./commands/review-action-item-gen.js");
|
|
4368
|
-
runReviewActionItemGen(argv);
|
|
4369
|
-
return;
|
|
4370
|
-
}
|
|
4371
|
-
// ─── Review Policy Enforce Command ───────────────────────────────
|
|
4372
|
-
if (args.command === "review-policy-enforce") {
|
|
4373
|
-
const { runReviewPolicyEnforce } = await import("./commands/review-policy-enforce.js");
|
|
4374
|
-
runReviewPolicyEnforce(argv);
|
|
4375
|
-
return;
|
|
4376
|
-
}
|
|
4377
|
-
// ─── Finding Time-to-Fix Command ─────────────────────────────────
|
|
4378
|
-
if (args.command === "finding-time-to-fix") {
|
|
4379
|
-
const { runFindingTimeToFix } = await import("./commands/finding-time-to-fix.js");
|
|
4380
|
-
runFindingTimeToFix(argv);
|
|
4381
|
-
return;
|
|
4382
|
-
}
|
|
4383
|
-
// ─── Review Sprint Plan Command ──────────────────────────────────
|
|
4384
|
-
if (args.command === "review-sprint-plan") {
|
|
4385
|
-
const { runReviewSprintPlan } = await import("./commands/review-sprint-plan.js");
|
|
4386
|
-
runReviewSprintPlan(argv);
|
|
4387
|
-
return;
|
|
4388
|
-
}
|
|
4389
|
-
// ─── Finding Ancestry Trace Command ──────────────────────────────
|
|
4390
|
-
if (args.command === "finding-ancestry-trace") {
|
|
4391
|
-
const { runFindingAncestryTrace } = await import("./commands/finding-ancestry-trace.js");
|
|
4392
|
-
runFindingAncestryTrace(argv);
|
|
4393
|
-
return;
|
|
4394
|
-
}
|
|
4395
|
-
// ─── Review Escalation Path Command ──────────────────────────────
|
|
4396
|
-
if (args.command === "review-escalation-path") {
|
|
4397
|
-
const { runReviewEscalationPath } = await import("./commands/review-escalation-path.js");
|
|
4398
|
-
runReviewEscalationPath(argv);
|
|
4399
|
-
return;
|
|
4400
|
-
}
|
|
4401
|
-
// ─── Finding Remediation Cost Command ────────────────────────────
|
|
4402
|
-
if (args.command === "finding-remediation-cost") {
|
|
4403
|
-
const { runFindingRemediationCost } = await import("./commands/finding-remediation-cost.js");
|
|
4404
|
-
runFindingRemediationCost(argv);
|
|
4405
|
-
return;
|
|
4406
|
-
}
|
|
4407
|
-
// ─── Review Digest Gen Command ───────────────────────────────────
|
|
4408
|
-
if (args.command === "review-digest-gen") {
|
|
4409
|
-
const { runReviewDigestGen } = await import("./commands/review-digest-gen.js");
|
|
4410
|
-
runReviewDigestGen(argv);
|
|
4411
|
-
return;
|
|
4412
|
-
}
|
|
4413
|
-
// ─── Finding Recurrence Check Command ────────────────────────────
|
|
4414
|
-
if (args.command === "finding-recurrence-check") {
|
|
4415
|
-
const { runFindingRecurrenceCheck } = await import("./commands/finding-recurrence-check.js");
|
|
4416
|
-
runFindingRecurrenceCheck(argv);
|
|
4417
|
-
return;
|
|
4418
|
-
}
|
|
4419
|
-
// ─── Finding Compliance Tag Command ──────────────────────────────
|
|
4420
|
-
if (args.command === "finding-compliance-tag") {
|
|
4421
|
-
const { runFindingComplianceTag } = await import("./commands/finding-compliance-tag.js");
|
|
4422
|
-
runFindingComplianceTag(argv);
|
|
4423
|
-
return;
|
|
4424
|
-
}
|
|
4425
|
-
// ─── Review Team Coverage Command ────────────────────────────────
|
|
4426
|
-
if (args.command === "review-team-coverage") {
|
|
4427
|
-
const { runReviewTeamCoverage } = await import("./commands/review-team-coverage.js");
|
|
4428
|
-
runReviewTeamCoverage(argv);
|
|
4429
|
-
return;
|
|
4430
|
-
}
|
|
4431
|
-
// ─── Finding Severity Rebalance Command ──────────────────────────
|
|
4432
|
-
if (args.command === "finding-severity-rebalance") {
|
|
4433
|
-
const { runFindingSeverityRebalance } = await import("./commands/finding-severity-rebalance.js");
|
|
4434
|
-
runFindingSeverityRebalance(argv);
|
|
4435
|
-
return;
|
|
4436
|
-
}
|
|
4437
|
-
// ─── Review Stakeholder Notify Command ───────────────────────────
|
|
4438
|
-
if (args.command === "review-stakeholder-notify") {
|
|
4439
|
-
const { runReviewStakeholderNotify } = await import("./commands/review-stakeholder-notify.js");
|
|
4440
|
-
runReviewStakeholderNotify(argv);
|
|
4441
|
-
return;
|
|
4442
|
-
}
|
|
4443
|
-
// ─── Finding Fix Playbook Command ────────────────────────────────
|
|
4444
|
-
if (args.command === "finding-fix-playbook") {
|
|
4445
|
-
const { runFindingFixPlaybook } = await import("./commands/finding-fix-playbook.js");
|
|
4446
|
-
runFindingFixPlaybook(argv);
|
|
4447
|
-
return;
|
|
4448
|
-
}
|
|
4449
|
-
// ─── Review Adoption Score Command ───────────────────────────────
|
|
4450
|
-
if (args.command === "review-adoption-score") {
|
|
4451
|
-
const { runReviewAdoptionScore } = await import("./commands/review-adoption-score.js");
|
|
4452
|
-
runReviewAdoptionScore(argv);
|
|
4453
|
-
return;
|
|
4454
|
-
}
|
|
4455
|
-
// ─── Finding Dedup Merge Command ─────────────────────────────────
|
|
4456
|
-
if (args.command === "finding-dedup-merge") {
|
|
4457
|
-
const { runFindingDedupMerge } = await import("./commands/finding-dedup-merge.js");
|
|
4458
|
-
runFindingDedupMerge(argv);
|
|
4459
|
-
return;
|
|
4460
|
-
}
|
|
4461
|
-
// ─── Review Team Rotation Command ────────────────────────────────
|
|
4462
|
-
if (args.command === "review-team-rotation") {
|
|
4463
|
-
const { runReviewTeamRotation } = await import("./commands/review-team-rotation.js");
|
|
4464
|
-
runReviewTeamRotation(argv);
|
|
4465
|
-
return;
|
|
4466
|
-
}
|
|
4467
|
-
// ─── Review Goal Track Command ───────────────────────────────────
|
|
4468
|
-
if (args.command === "review-goal-track") {
|
|
4469
|
-
const { runReviewGoalTrack } = await import("./commands/review-goal-track.js");
|
|
4470
|
-
runReviewGoalTrack(argv);
|
|
4471
|
-
return;
|
|
4472
|
-
}
|
|
4473
|
-
// ─── Finding Risk Label Command ──────────────────────────────────
|
|
4474
|
-
if (args.command === "finding-risk-label") {
|
|
4475
|
-
const { runFindingRiskLabel } = await import("./commands/finding-risk-label.js");
|
|
4476
|
-
runFindingRiskLabel(argv);
|
|
4477
|
-
return;
|
|
4478
|
-
}
|
|
4479
|
-
// ─── Review Feedback Summary Command ─────────────────────────────
|
|
4480
|
-
if (args.command === "review-feedback-summary") {
|
|
4481
|
-
const { runReviewFeedbackSummary } = await import("./commands/review-feedback-summary.js");
|
|
4482
|
-
runReviewFeedbackSummary(argv);
|
|
4483
|
-
return;
|
|
4484
|
-
}
|
|
4485
|
-
// ─── Finding Fix Chain Command ───────────────────────────────────
|
|
4486
|
-
if (args.command === "finding-fix-chain") {
|
|
4487
|
-
const { runFindingFixChain } = await import("./commands/finding-fix-chain.js");
|
|
4488
|
-
runFindingFixChain(argv);
|
|
4489
|
-
return;
|
|
4490
|
-
}
|
|
4491
|
-
// ─── Review Config Health Command ────────────────────────────────
|
|
4492
|
-
if (args.command === "review-config-health") {
|
|
4493
|
-
const { runReviewConfigHealth } = await import("./commands/review-config-health.js");
|
|
4494
|
-
runReviewConfigHealth(argv);
|
|
4495
|
-
return;
|
|
4496
|
-
}
|
|
4497
|
-
// ─── Finding Owner Notify Command ────────────────────────────────
|
|
4498
|
-
if (args.command === "finding-owner-notify") {
|
|
4499
|
-
const { runFindingOwnerNotify } = await import("./commands/finding-owner-notify.js");
|
|
4500
|
-
runFindingOwnerNotify(argv);
|
|
4501
|
-
return;
|
|
4502
|
-
}
|
|
4503
|
-
// ─── Review Progress Report Command ──────────────────────────────
|
|
4504
|
-
if (args.command === "review-progress-report") {
|
|
4505
|
-
const { runReviewProgressReport } = await import("./commands/review-progress-report.js");
|
|
4506
|
-
runReviewProgressReport(argv);
|
|
4507
|
-
return;
|
|
4508
|
-
}
|
|
4509
|
-
// ─── Finding Patch Chain Command ─────────────────────────────────
|
|
4510
|
-
if (args.command === "finding-patch-chain") {
|
|
4511
|
-
const { runFindingPatchChain } = await import("./commands/finding-patch-chain.js");
|
|
4512
|
-
runFindingPatchChain(argv);
|
|
4513
|
-
return;
|
|
4514
|
-
}
|
|
4515
|
-
// ─── Review Engagement Score Command ─────────────────────────────
|
|
4516
|
-
if (args.command === "review-engagement-score") {
|
|
4517
|
-
const { runReviewEngagementScore } = await import("./commands/review-engagement-score.js");
|
|
4518
|
-
runReviewEngagementScore(argv);
|
|
4519
|
-
return;
|
|
4520
|
-
}
|
|
4521
|
-
// ─── Finding Effort Rank Command ─────────────────────────────────
|
|
4522
|
-
if (args.command === "finding-effort-rank") {
|
|
4523
|
-
const { runFindingEffortRank } = await import("./commands/finding-effort-rank.js");
|
|
4524
|
-
runFindingEffortRank(argv);
|
|
4525
|
-
return;
|
|
4526
|
-
}
|
|
4527
|
-
// ─── Finding Resolution Workflow Command ─────────────────────────
|
|
4528
|
-
if (args.command === "finding-resolution-workflow") {
|
|
4529
|
-
const { runFindingResolutionWorkflow } = await import("./commands/finding-resolution-workflow.js");
|
|
4530
|
-
runFindingResolutionWorkflow(argv);
|
|
4531
|
-
return;
|
|
4532
|
-
}
|
|
4533
|
-
// ─── Review Quality Baseline Command ─────────────────────────────
|
|
4534
|
-
if (args.command === "review-quality-baseline") {
|
|
4535
|
-
const { runReviewQualityBaseline } = await import("./commands/review-quality-baseline.js");
|
|
4536
|
-
runReviewQualityBaseline(argv);
|
|
4537
|
-
return;
|
|
4538
|
-
}
|
|
4539
|
-
// ─── Finding Context Link Command ────────────────────────────────
|
|
4540
|
-
if (args.command === "finding-context-link") {
|
|
4541
|
-
const { runFindingContextLink } = await import("./commands/finding-context-link.js");
|
|
4542
|
-
runFindingContextLink(argv);
|
|
4543
|
-
return;
|
|
4544
|
-
}
|
|
4545
|
-
// ─── Review Team Velocity Command ────────────────────────────────
|
|
4546
|
-
if (args.command === "review-team-velocity") {
|
|
4547
|
-
const { runReviewTeamVelocity } = await import("./commands/review-team-velocity.js");
|
|
4548
|
-
runReviewTeamVelocity(argv);
|
|
4549
|
-
return;
|
|
4550
|
-
}
|
|
4551
|
-
// ─── Finding Auto Priority Command ───────────────────────────────
|
|
4552
|
-
if (args.command === "finding-auto-priority") {
|
|
4553
|
-
const { runFindingAutoPriority } = await import("./commands/finding-auto-priority.js");
|
|
4554
|
-
runFindingAutoPriority(argv);
|
|
4555
|
-
return;
|
|
4556
|
-
}
|
|
4557
|
-
// ─── Review Retrospective Command ────────────────────────────────
|
|
4558
|
-
if (args.command === "review-retrospective") {
|
|
4559
|
-
const { runReviewRetrospective } = await import("./commands/review-retrospective.js");
|
|
4560
|
-
runReviewRetrospective(argv);
|
|
4561
|
-
return;
|
|
4562
|
-
}
|
|
4563
|
-
// ─── Finding Dependency Impact Command ───────────────────────────
|
|
4564
|
-
if (args.command === "finding-dependency-impact") {
|
|
4565
|
-
const { runFindingDependencyImpact } = await import("./commands/finding-dependency-impact.js");
|
|
4566
|
-
runFindingDependencyImpact(argv);
|
|
4567
|
-
return;
|
|
4568
|
-
}
|
|
4569
|
-
// ─── Review Mentor Suggest Command ───────────────────────────────
|
|
4570
|
-
if (args.command === "review-mentor-suggest") {
|
|
4571
|
-
const { runReviewMentorSuggest } = await import("./commands/review-mentor-suggest.js");
|
|
4572
|
-
runReviewMentorSuggest(argv);
|
|
4573
|
-
return;
|
|
4574
|
-
}
|
|
4575
|
-
// ─── Finding Cluster Summary Command ─────────────────────────────
|
|
4576
|
-
if (args.command === "finding-cluster-summary") {
|
|
4577
|
-
const { runFindingClusterSummary } = await import("./commands/finding-cluster-summary.js");
|
|
4578
|
-
runFindingClusterSummary(argv);
|
|
4579
|
-
return;
|
|
4580
|
-
}
|
|
4581
|
-
// ─── Finding Scope Impact Command ────────────────────────────────
|
|
4582
|
-
if (args.command === "finding-scope-impact") {
|
|
4583
|
-
const { runFindingScopeImpact } = await import("./commands/finding-scope-impact.js");
|
|
4584
|
-
runFindingScopeImpact(argv);
|
|
4585
|
-
return;
|
|
4586
|
-
}
|
|
4587
|
-
// ─── Review Health Trend Command ─────────────────────────────────
|
|
4588
|
-
if (args.command === "review-health-trend") {
|
|
4589
|
-
const { runReviewHealthTrend } = await import("./commands/review-health-trend.js");
|
|
4590
|
-
runReviewHealthTrend(argv);
|
|
4591
|
-
return;
|
|
4592
|
-
}
|
|
4593
|
-
// ─── Finding Fix Estimate Command ────────────────────────────────
|
|
4594
|
-
if (args.command === "finding-fix-estimate") {
|
|
4595
|
-
const { runFindingFixEstimate } = await import("./commands/finding-fix-estimate.js");
|
|
4596
|
-
runFindingFixEstimate(argv);
|
|
4597
|
-
return;
|
|
4598
|
-
}
|
|
4599
|
-
// ─── Review Readiness Check Command ──────────────────────────────
|
|
4600
|
-
if (args.command === "review-readiness-check") {
|
|
4601
|
-
const { runReviewReadinessCheck } = await import("./commands/review-readiness-check.js");
|
|
4602
|
-
runReviewReadinessCheck(argv);
|
|
4603
|
-
return;
|
|
4604
|
-
}
|
|
4605
|
-
// ─── Finding Noise Score Command ─────────────────────────────────
|
|
4606
|
-
if (args.command === "finding-noise-score") {
|
|
4607
|
-
const { runFindingNoiseScore } = await import("./commands/finding-noise-score.js");
|
|
4608
|
-
runFindingNoiseScore(argv);
|
|
4609
|
-
return;
|
|
4610
|
-
}
|
|
4611
|
-
// ─── Review Workflow Suggest Command ──────────────────────────────
|
|
4612
|
-
if (args.command === "review-workflow-suggest") {
|
|
4613
|
-
const { runReviewWorkflowSuggest } = await import("./commands/review-workflow-suggest.js");
|
|
4614
|
-
runReviewWorkflowSuggest(argv);
|
|
4615
|
-
return;
|
|
4616
|
-
}
|
|
4617
|
-
// ─── Finding Top Offender Command ────────────────────────────────
|
|
4618
|
-
if (args.command === "finding-top-offender") {
|
|
4619
|
-
const { runFindingTopOffender } = await import("./commands/finding-top-offender.js");
|
|
4620
|
-
runFindingTopOffender(argv);
|
|
4621
|
-
return;
|
|
4622
|
-
}
|
|
4623
|
-
// ─── Review Team Skill Map Command ───────────────────────────────
|
|
4624
|
-
if (args.command === "review-team-skill-map") {
|
|
4625
|
-
const { runReviewTeamSkillMap } = await import("./commands/review-team-skill-map.js");
|
|
4626
|
-
runReviewTeamSkillMap(argv);
|
|
4627
|
-
return;
|
|
4628
|
-
}
|
|
4629
|
-
// ─── Finding Repeat Detect Command ───────────────────────────────
|
|
4630
|
-
if (args.command === "finding-repeat-detect") {
|
|
4631
|
-
const { runFindingRepeatDetect } = await import("./commands/finding-repeat-detect.js");
|
|
4632
|
-
runFindingRepeatDetect(argv);
|
|
4633
|
-
return;
|
|
4634
|
-
}
|
|
4635
|
-
// ─── Tune Command ─────────────────────────────────────────────────
|
|
4636
|
-
if (args.command === "tune") {
|
|
4637
|
-
const { runTune } = await import("./commands/tune.js");
|
|
4638
|
-
await runTune(argv);
|
|
4639
|
-
return;
|
|
4640
|
-
}
|
|
4641
|
-
// ─── Calibration Dashboard Command ────────────────────────────────
|
|
4642
|
-
if (args.command === "calibration-dashboard") {
|
|
4643
|
-
const { runCalibrationDashboard } = await import("./commands/calibration-dashboard.js");
|
|
4644
|
-
await runCalibrationDashboard(argv);
|
|
4645
|
-
process.exit(0);
|
|
4646
|
-
}
|
|
4647
|
-
// ─── Community Patterns Command ───────────────────────────────────────
|
|
4648
|
-
if (args.command === "community-patterns") {
|
|
4649
|
-
const { runCommunityPatterns } = await import("./commands/community-patterns.js");
|
|
4650
|
-
await runCommunityPatterns(argv);
|
|
4651
|
-
process.exit(0);
|
|
4652
|
-
}
|
|
4653
|
-
// ─── Calibration Share Command ───────────────────────────────────────
|
|
4654
|
-
if (args.command === "calibration-share") {
|
|
4655
|
-
const { runCalibrationShare } = await import("./commands/calibration-share.js");
|
|
4656
|
-
runCalibrationShare(argv);
|
|
4657
|
-
process.exit(0);
|
|
4658
|
-
}
|
|
4659
|
-
// ─── Compare Command ─────────────────────────────────────────────────
|
|
4660
|
-
if (args.command === "compare") {
|
|
4661
|
-
const toolName = argv[3];
|
|
4662
|
-
if (!toolName || toolName === "--help" || toolName === "-h" || toolName === "all") {
|
|
4663
|
-
console.log(formatFullComparisonMatrix());
|
|
4664
|
-
}
|
|
4665
|
-
else {
|
|
4666
|
-
const profile = TOOL_PROFILES.find((t) => t.name.toLowerCase() === toolName.toLowerCase());
|
|
4667
|
-
if (!profile) {
|
|
4668
|
-
console.error(`Unknown tool: ${toolName}`);
|
|
4669
|
-
console.error(`Available: ${TOOL_PROFILES.map((t) => t.name).join(", ")}, all`);
|
|
4670
|
-
process.exit(1);
|
|
4671
|
-
}
|
|
4672
|
-
console.log(formatComparisonReport(toolName));
|
|
4673
|
-
}
|
|
4674
|
-
process.exit(0);
|
|
4675
|
-
}
|
|
4676
|
-
// ─── Trend Command ───────────────────────────────────────────────────
|
|
4677
|
-
if (args.command === "trend") {
|
|
4678
|
-
const { loadSnapshotStore, computeTrend, formatTrendReport, formatTrendReportHtml, detectRegressions, formatRegressionAlerts, } = await import("./commands/snapshot.js");
|
|
4679
|
-
const snapshotFile = argv.find((a, i) => i >= 3 && !a.startsWith("-") && !["html", "json", "text"].includes(a)) ||
|
|
4680
|
-
".judges-snapshots.json";
|
|
4681
|
-
const formatArg = argv.includes("--format") ? argv[argv.indexOf("--format") + 1] : "text";
|
|
4682
|
-
const outputArg = argv.includes("--output") ? argv[argv.indexOf("--output") + 1] : undefined;
|
|
4683
|
-
const store = loadSnapshotStore(snapshotFile);
|
|
4684
|
-
if (store.snapshots.length === 0) {
|
|
4685
|
-
console.log("No snapshot data found. Run evaluations with --snapshot to collect trend data.");
|
|
4686
|
-
console.log(` Expected file: ${snapshotFile}`);
|
|
4687
|
-
}
|
|
4688
|
-
else {
|
|
4689
|
-
const report = computeTrend(store);
|
|
4690
|
-
let output;
|
|
4691
|
-
if (formatArg === "html") {
|
|
4692
|
-
output = formatTrendReportHtml(report);
|
|
4693
|
-
}
|
|
4694
|
-
else if (formatArg === "json") {
|
|
4695
|
-
output = JSON.stringify(report, null, 2);
|
|
4696
|
-
}
|
|
4697
|
-
else {
|
|
4698
|
-
output = formatTrendReport(report);
|
|
4699
|
-
}
|
|
4700
|
-
if (outputArg) {
|
|
4701
|
-
writeFileSync(outputArg, output, "utf-8");
|
|
4702
|
-
console.log(` ✅ Trend report written to ${outputArg}`);
|
|
4703
|
-
}
|
|
4704
|
-
else {
|
|
4705
|
-
console.log(output);
|
|
4706
|
-
}
|
|
4707
|
-
// Regression alerts
|
|
4708
|
-
const regressions = detectRegressions(store);
|
|
4709
|
-
if (regressions.length > 0) {
|
|
4710
|
-
console.log(formatRegressionAlerts(regressions));
|
|
4711
|
-
if (args.failOnFindings && regressions.some((r) => r.severity === "error")) {
|
|
4712
|
-
process.exit(1);
|
|
4713
|
-
}
|
|
4714
|
-
}
|
|
4715
|
-
}
|
|
4716
|
-
process.exit(0);
|
|
4717
|
-
}
|
|
4718
|
-
// ─── Scaffold Plugin Command ─────────────────────────────────────────
|
|
4719
|
-
if (args.command === "scaffold-plugin") {
|
|
4720
|
-
const { runScaffoldPlugin } = await import("./commands/scaffold-plugin.js");
|
|
4721
|
-
runScaffoldPlugin(argv);
|
|
4722
|
-
process.exit(0);
|
|
4723
|
-
}
|
|
4724
|
-
// ─── Plugin Search Command ───────────────────────────────────────────
|
|
4725
|
-
if (args.command === "plugin") {
|
|
4726
|
-
const { runPluginSearch } = await import("./commands/plugin-search.js");
|
|
4727
|
-
runPluginSearch(argv);
|
|
4728
|
-
process.exit(0);
|
|
4729
|
-
}
|
|
4730
|
-
// ─── Trust Ramp Command ──────────────────────────────────────────────
|
|
4731
|
-
if (args.command === "trust-ramp") {
|
|
4732
|
-
const { runTrustRamp } = await import("./commands/trust-ramp.js");
|
|
4733
|
-
runTrustRamp(argv);
|
|
4734
|
-
process.exit(0);
|
|
4735
|
-
}
|
|
4736
|
-
// ─── Metrics Command ────────────────────────────────────────────────
|
|
4737
|
-
if (args.command === "metrics") {
|
|
4738
|
-
const { runMetrics } = await import("./commands/metrics.js");
|
|
4739
|
-
runMetrics(argv);
|
|
4740
|
-
process.exit(0);
|
|
4741
|
-
}
|
|
4742
|
-
// ─── Metrics Dashboard Command ────────────────────────────────────────
|
|
4743
|
-
if (args.command === "metrics-dashboard") {
|
|
4744
|
-
const { runMetricsDashboard } = await import("./commands/metrics-dashboard.js");
|
|
4745
|
-
runMetricsDashboard(argv);
|
|
4746
|
-
process.exit(0);
|
|
4747
|
-
}
|
|
4748
|
-
// ─── Help Command ────────────────────────────────────────────────────
|
|
4749
|
-
if (args.command === "help") {
|
|
4750
|
-
const { runHelp } = await import("./commands/help.js");
|
|
4751
|
-
runHelp(argv);
|
|
4752
|
-
process.exit(0);
|
|
4753
|
-
}
|
|
4754
|
-
// ─── Onboard Command ─────────────────────────────────────────────────
|
|
4755
|
-
if (args.command === "onboard") {
|
|
4756
|
-
const { runOnboard } = await import("./commands/onboard.js");
|
|
4757
|
-
await runOnboard(argv);
|
|
4758
|
-
process.exit(0);
|
|
4759
|
-
}
|
|
4760
|
-
// ─── Org Metrics Command ──────────────────────────────────────────────
|
|
4761
|
-
if (args.command === "org-metrics") {
|
|
4762
|
-
const { runOrgMetrics } = await import("./commands/org-metrics.js");
|
|
4763
|
-
runOrgMetrics(argv);
|
|
4764
|
-
process.exit(0);
|
|
4765
|
-
}
|
|
4766
|
-
// ─── Plugins Command ──────────────────────────────────────────────────
|
|
4767
|
-
if (args.command === "plugins") {
|
|
4768
|
-
const { runPlugins } = await import("./commands/plugins.js");
|
|
4769
|
-
runPlugins(argv);
|
|
4770
|
-
process.exit(0);
|
|
4771
|
-
}
|
|
4772
682
|
// ─── List Command ────────────────────────────────────────────────────
|
|
4773
683
|
if (args.command === "list") {
|
|
4774
684
|
listJudges();
|