@kevinrabun/judges 3.40.0 → 3.42.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.
Files changed (94) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +133 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/auto-calibrate.d.ts +15 -0
  6. package/dist/commands/auto-calibrate.d.ts.map +1 -0
  7. package/dist/commands/auto-calibrate.js +107 -0
  8. package/dist/commands/auto-calibrate.js.map +1 -0
  9. package/dist/commands/auto-triage.d.ts +32 -0
  10. package/dist/commands/auto-triage.d.ts.map +1 -0
  11. package/dist/commands/auto-triage.js +126 -0
  12. package/dist/commands/auto-triage.js.map +1 -0
  13. package/dist/commands/config-migrate.d.ts +44 -0
  14. package/dist/commands/config-migrate.d.ts.map +1 -0
  15. package/dist/commands/config-migrate.js +241 -0
  16. package/dist/commands/config-migrate.js.map +1 -0
  17. package/dist/commands/coverage-map.d.ts +23 -0
  18. package/dist/commands/coverage-map.d.ts.map +1 -0
  19. package/dist/commands/coverage-map.js +223 -0
  20. package/dist/commands/coverage-map.js.map +1 -0
  21. package/dist/commands/dedup-report.d.ts +13 -0
  22. package/dist/commands/dedup-report.d.ts.map +1 -0
  23. package/dist/commands/dedup-report.js +138 -0
  24. package/dist/commands/dedup-report.js.map +1 -0
  25. package/dist/commands/dep-audit.d.ts +53 -0
  26. package/dist/commands/dep-audit.d.ts.map +1 -0
  27. package/dist/commands/dep-audit.js +278 -0
  28. package/dist/commands/dep-audit.js.map +1 -0
  29. package/dist/commands/deprecated.d.ts +48 -0
  30. package/dist/commands/deprecated.d.ts.map +1 -0
  31. package/dist/commands/deprecated.js +202 -0
  32. package/dist/commands/deprecated.js.map +1 -0
  33. package/dist/commands/diff-only.d.ts +34 -0
  34. package/dist/commands/diff-only.d.ts.map +1 -0
  35. package/dist/commands/diff-only.js +152 -0
  36. package/dist/commands/diff-only.js.map +1 -0
  37. package/dist/commands/fix-pr.d.ts +23 -0
  38. package/dist/commands/fix-pr.d.ts.map +1 -0
  39. package/dist/commands/fix-pr.js +323 -0
  40. package/dist/commands/fix-pr.js.map +1 -0
  41. package/dist/commands/group-findings.d.ts +23 -0
  42. package/dist/commands/group-findings.d.ts.map +1 -0
  43. package/dist/commands/group-findings.js +155 -0
  44. package/dist/commands/group-findings.js.map +1 -0
  45. package/dist/commands/interactive-fix.d.ts +23 -0
  46. package/dist/commands/interactive-fix.d.ts.map +1 -0
  47. package/dist/commands/interactive-fix.js +140 -0
  48. package/dist/commands/interactive-fix.js.map +1 -0
  49. package/dist/commands/monorepo.d.ts +38 -0
  50. package/dist/commands/monorepo.d.ts.map +1 -0
  51. package/dist/commands/monorepo.js +233 -0
  52. package/dist/commands/monorepo.js.map +1 -0
  53. package/dist/commands/notify.d.ts +79 -0
  54. package/dist/commands/notify.d.ts.map +1 -0
  55. package/dist/commands/notify.js +325 -0
  56. package/dist/commands/notify.js.map +1 -0
  57. package/dist/commands/pr-summary.d.ts +26 -0
  58. package/dist/commands/pr-summary.d.ts.map +1 -0
  59. package/dist/commands/pr-summary.js +188 -0
  60. package/dist/commands/pr-summary.js.map +1 -0
  61. package/dist/commands/profile.d.ts +38 -0
  62. package/dist/commands/profile.d.ts.map +1 -0
  63. package/dist/commands/profile.js +102 -0
  64. package/dist/commands/profile.js.map +1 -0
  65. package/dist/commands/quality-gate.d.ts +70 -0
  66. package/dist/commands/quality-gate.d.ts.map +1 -0
  67. package/dist/commands/quality-gate.js +264 -0
  68. package/dist/commands/quality-gate.js.map +1 -0
  69. package/dist/commands/smart-select.d.ts +27 -0
  70. package/dist/commands/smart-select.d.ts.map +1 -0
  71. package/dist/commands/smart-select.js +346 -0
  72. package/dist/commands/smart-select.js.map +1 -0
  73. package/dist/commands/upload.d.ts +14 -0
  74. package/dist/commands/upload.d.ts.map +1 -0
  75. package/dist/commands/upload.js +173 -0
  76. package/dist/commands/upload.js.map +1 -0
  77. package/dist/commands/validate-config.d.ts +17 -0
  78. package/dist/commands/validate-config.d.ts.map +1 -0
  79. package/dist/commands/validate-config.js +268 -0
  80. package/dist/commands/validate-config.js.map +1 -0
  81. package/dist/commands/warm-cache.d.ts +31 -0
  82. package/dist/commands/warm-cache.d.ts.map +1 -0
  83. package/dist/commands/warm-cache.js +166 -0
  84. package/dist/commands/warm-cache.js.map +1 -0
  85. package/dist/evaluators/framework-rules.d.ts +59 -0
  86. package/dist/evaluators/framework-rules.d.ts.map +1 -0
  87. package/dist/evaluators/framework-rules.js +292 -0
  88. package/dist/evaluators/framework-rules.js.map +1 -0
  89. package/dist/parallel.d.ts +53 -0
  90. package/dist/parallel.d.ts.map +1 -0
  91. package/dist/parallel.js +170 -0
  92. package/dist/parallel.js.map +1 -0
  93. package/package.json +1 -1
  94. package/server.json +2 -2
@@ -0,0 +1,107 @@
1
+ /**
2
+ * `judges auto-calibrate` — Automatic threshold calibration from feedback.
3
+ *
4
+ * Analyzes accumulated feedback data (FP/TP verdicts) and generates
5
+ * optimized calibration profiles. Shows what rules to suppress, downgrade,
6
+ * or boost — and can apply changes automatically to .judgesrc.
7
+ *
8
+ * Usage:
9
+ * judges auto-calibrate # Show calibration report
10
+ * judges auto-calibrate --apply # Apply changes to .judgesrc
11
+ * judges auto-calibrate --json # JSON output
12
+ * judges auto-calibrate --min-samples 10 # Require more data before acting
13
+ */
14
+ import { existsSync, readFileSync, writeFileSync } from "fs";
15
+ import { loadFeedbackStore } from "./feedback.js";
16
+ import { generateAutoTuneReport, formatAutoTuneReport } from "../auto-tune.js";
17
+ // ─── CLI Runner ─────────────────────────────────────────────────────────────
18
+ export function runAutoCalibrate(argv) {
19
+ if (argv.includes("--help") || argv.includes("-h")) {
20
+ console.log(`
21
+ judges auto-calibrate — Auto-tune confidence thresholds from feedback data
22
+
23
+ Usage:
24
+ judges auto-calibrate Show calibration recommendations
25
+ judges auto-calibrate --apply Apply changes to .judgesrc
26
+ judges auto-calibrate --json JSON output
27
+ judges auto-calibrate --min-samples <n> Minimum feedback samples per rule (default: 5)
28
+ judges auto-calibrate --threshold <n> FP rate threshold for suppression (default: 0.8)
29
+
30
+ The auto-calibrator analyzes your feedback history (from 'judges feedback submit')
31
+ and recommends:
32
+ • Suppress: rules with FP rate ≥ 80% (too noisy)
33
+ • Downgrade: rules with FP rate 50-80% (reduce severity)
34
+ • Boost: rules with FP rate ≤ 20% (increase confidence)
35
+ • Monitor: rules approaching thresholds (watch for trend)
36
+
37
+ When --apply is used, suppressions and downgrades are written to .judgesrc
38
+ as ruleOverrides.
39
+ `);
40
+ return;
41
+ }
42
+ const apply = argv.includes("--apply");
43
+ const json = argv.includes("--json");
44
+ const minSamples = parseInt(argv.find((_a, i) => argv[i - 1] === "--min-samples") || "5", 10);
45
+ const threshold = parseFloat(argv.find((_a, i) => argv[i - 1] === "--threshold") || "0.8");
46
+ // Load feedback data
47
+ const store = loadFeedbackStore();
48
+ if (store.entries.length === 0) {
49
+ console.log("\n No feedback data found. Use 'judges feedback submit' to build history.\n");
50
+ return;
51
+ }
52
+ // Generate auto-tune report
53
+ const report = generateAutoTuneReport(store, {
54
+ suppressionThreshold: threshold,
55
+ minSamples,
56
+ });
57
+ if (json) {
58
+ console.log(JSON.stringify(report, null, 2));
59
+ return;
60
+ }
61
+ // Display report
62
+ console.log(formatAutoTuneReport(report));
63
+ // Summary
64
+ const total = report.suppressions.length + report.downgrades.length + report.boosts.length;
65
+ if (total === 0) {
66
+ console.log(" No calibration changes recommended yet. Continue providing feedback.\n");
67
+ return;
68
+ }
69
+ console.log(`\n Recommendations: ${report.suppressions.length} suppress, ${report.downgrades.length} downgrade, ${report.boosts.length} boost`);
70
+ // Apply changes to .judgesrc if requested
71
+ if (apply) {
72
+ applyCalibrationToConfig(report);
73
+ }
74
+ else {
75
+ console.log(" Run with --apply to write changes to .judgesrc\n");
76
+ }
77
+ }
78
+ // ─── Apply to Config ────────────────────────────────────────────────────────
79
+ function applyCalibrationToConfig(report) {
80
+ const configPath = existsSync(".judgesrc") ? ".judgesrc" : existsSync(".judgesrc.json") ? ".judgesrc.json" : null;
81
+ let config = {};
82
+ if (configPath) {
83
+ try {
84
+ config = JSON.parse(readFileSync(configPath, "utf-8"));
85
+ }
86
+ catch {
87
+ console.error(" Error reading existing config. Creating new .judgesrc.\n");
88
+ }
89
+ }
90
+ // Build ruleOverrides
91
+ const overrides = config.ruleOverrides || {};
92
+ // Apply suppressions
93
+ for (const action of report.suppressions) {
94
+ overrides[action.ruleId] = { ...overrides[action.ruleId], disabled: true };
95
+ }
96
+ // Apply downgrades
97
+ for (const action of report.downgrades) {
98
+ if (action.newSeverity) {
99
+ overrides[action.ruleId] = { ...overrides[action.ruleId], severity: action.newSeverity };
100
+ }
101
+ }
102
+ config.ruleOverrides = overrides;
103
+ const outPath = configPath || ".judgesrc";
104
+ writeFileSync(outPath, JSON.stringify(config, null, 2) + "\n", "utf-8");
105
+ console.log(`\n ✅ Applied ${report.suppressions.length + report.downgrades.length} calibration change(s) to ${outPath}\n`);
106
+ }
107
+ //# sourceMappingURL=auto-calibrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-calibrate.js","sourceRoot":"","sources":["../../src/commands/auto-calibrate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Confidence auto-triage — automatically suppress findings below
3
+ * a configurable confidence threshold, reducing noise for teams
4
+ * that want higher-signal reviews.
5
+ *
6
+ * Findings below the threshold are marked as "auto-suppressed"
7
+ * rather than removed, preserving auditability.
8
+ */
9
+ import type { Finding } from "../types.js";
10
+ export interface TriageConfig {
11
+ /** Minimum confidence to keep (0-1). Default: 0.7 */
12
+ minConfidence: number;
13
+ /** Per-severity overrides: e.g., { critical: 0.3, high: 0.5 } */
14
+ severityThresholds?: Record<string, number>;
15
+ /** Never suppress these rule IDs */
16
+ alwaysKeep?: string[];
17
+ /** Always suppress these rule IDs */
18
+ alwaysSuppress?: string[];
19
+ }
20
+ export interface TriageResult {
21
+ kept: Finding[];
22
+ suppressed: Finding[];
23
+ stats: {
24
+ total: number;
25
+ kept: number;
26
+ suppressed: number;
27
+ byReason: Record<string, number>;
28
+ };
29
+ }
30
+ export declare function autoTriage(findings: Finding[], config?: Partial<TriageConfig>): TriageResult;
31
+ export declare function runAutoTriage(argv: string[]): void;
32
+ //# sourceMappingURL=auto-triage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-triage.d.ts","sourceRoot":"","sources":["../../src/commands/auto-triage.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAI3C,MAAM,WAAW,YAAY;IAC3B,qDAAqD;IACrD,aAAa,EAAE,MAAM,CAAC;IACtB,iEAAiE;IACjE,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,oCAAoC;IACpC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,qCAAqC;IACrC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,UAAU,EAAE,OAAO,EAAE,CAAC;IACtB,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAClC,CAAC;CACH;AAMD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,MAAM,GAAE,OAAO,CAAC,YAAY,CAAM,GAAG,YAAY,CA8ChG;AAID,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA6ElD"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Confidence auto-triage — automatically suppress findings below
3
+ * a configurable confidence threshold, reducing noise for teams
4
+ * that want higher-signal reviews.
5
+ *
6
+ * Findings below the threshold are marked as "auto-suppressed"
7
+ * rather than removed, preserving auditability.
8
+ */
9
+ // ─── Triage Logic ───────────────────────────────────────────────────────────
10
+ const DEFAULT_THRESHOLD = 0.7;
11
+ export function autoTriage(findings, config = {}) {
12
+ const minConfidence = config.minConfidence ?? DEFAULT_THRESHOLD;
13
+ const severityThresholds = config.severityThresholds || {};
14
+ const alwaysKeep = new Set(config.alwaysKeep || []);
15
+ const alwaysSuppress = new Set(config.alwaysSuppress || []);
16
+ const kept = [];
17
+ const suppressed = [];
18
+ const byReason = {};
19
+ for (const f of findings) {
20
+ // Always-keep rules bypass all thresholds
21
+ if (alwaysKeep.has(f.ruleId)) {
22
+ kept.push(f);
23
+ continue;
24
+ }
25
+ // Always-suppress rules
26
+ if (alwaysSuppress.has(f.ruleId)) {
27
+ suppressed.push(f);
28
+ byReason["always-suppress"] = (byReason["always-suppress"] || 0) + 1;
29
+ continue;
30
+ }
31
+ // Determine threshold for this finding
32
+ const threshold = severityThresholds[f.severity] ?? minConfidence;
33
+ const confidence = f.confidence ?? 1.0;
34
+ if (confidence < threshold) {
35
+ suppressed.push(f);
36
+ byReason["below-threshold"] = (byReason["below-threshold"] || 0) + 1;
37
+ }
38
+ else {
39
+ kept.push(f);
40
+ }
41
+ }
42
+ return {
43
+ kept,
44
+ suppressed,
45
+ stats: {
46
+ total: findings.length,
47
+ kept: kept.length,
48
+ suppressed: suppressed.length,
49
+ byReason,
50
+ },
51
+ };
52
+ }
53
+ // ─── CLI ────────────────────────────────────────────────────────────────────
54
+ export function runAutoTriage(argv) {
55
+ if (argv.includes("--help") || argv.includes("-h")) {
56
+ console.log(`
57
+ judges auto-triage — Automatically suppress low-confidence findings
58
+
59
+ Usage:
60
+ judges auto-triage --input results.json Triage with default threshold (0.7)
61
+ judges auto-triage --input results.json --threshold 0.5 Custom threshold
62
+ judges auto-triage --input results.json --keep SEC-001 Always keep specific rules
63
+
64
+ Options:
65
+ --input <path> JSON results file (required)
66
+ --threshold <0-1> Minimum confidence to keep (default: 0.7)
67
+ --keep <rules> Comma-separated rules to always keep
68
+ --suppress <rules> Comma-separated rules to always suppress
69
+ --format json JSON output
70
+ --help, -h Show this help
71
+
72
+ Findings below the confidence threshold are marked as suppressed
73
+ rather than removed, preserving audit trail.
74
+ `);
75
+ return;
76
+ }
77
+ const { readFileSync, existsSync } = require("fs");
78
+ const inputPath = argv.find((_a, i) => argv[i - 1] === "--input");
79
+ if (!inputPath || !existsSync(inputPath)) {
80
+ console.error("Error: --input <path> required");
81
+ process.exit(1);
82
+ }
83
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
84
+ const thresholdStr = argv.find((_a, i) => argv[i - 1] === "--threshold");
85
+ const keepStr = argv.find((_a, i) => argv[i - 1] === "--keep");
86
+ const suppressStr = argv.find((_a, i) => argv[i - 1] === "--suppress");
87
+ const data = JSON.parse(readFileSync(inputPath, "utf-8"));
88
+ const findings = data.evaluations
89
+ ? data.evaluations.flatMap((e) => e.findings || [])
90
+ : data.findings || data;
91
+ const config = {};
92
+ if (thresholdStr)
93
+ config.minConfidence = parseFloat(thresholdStr);
94
+ if (keepStr)
95
+ config.alwaysKeep = keepStr.split(",").map((s) => s.trim());
96
+ if (suppressStr)
97
+ config.alwaysSuppress = suppressStr.split(",").map((s) => s.trim());
98
+ const result = autoTriage(findings, config);
99
+ if (format === "json") {
100
+ console.log(JSON.stringify(result, null, 2));
101
+ return;
102
+ }
103
+ console.log(`\n Auto-Triage Results\n`);
104
+ console.log(` Total: ${result.stats.total}`);
105
+ console.log(` Kept: ${result.stats.kept}`);
106
+ console.log(` Suppressed: ${result.stats.suppressed}\n`);
107
+ if (Object.keys(result.stats.byReason).length > 0) {
108
+ console.log(` By reason:`);
109
+ for (const [reason, count] of Object.entries(result.stats.byReason)) {
110
+ console.log(` ${reason}: ${count}`);
111
+ }
112
+ console.log("");
113
+ }
114
+ if (result.kept.length > 0) {
115
+ console.log(` Kept findings:`);
116
+ for (const f of result.kept.slice(0, 20)) {
117
+ const conf = f.confidence;
118
+ const confStr = conf !== undefined ? ` (${(conf * 100).toFixed(0)}%)` : "";
119
+ console.log(` ${f.severity.padEnd(8)} ${f.ruleId}: ${f.title.slice(0, 70)}${confStr}`);
120
+ }
121
+ if (result.kept.length > 20)
122
+ console.log(` ... and ${result.kept.length - 20} more`);
123
+ console.log("");
124
+ }
125
+ }
126
+ //# sourceMappingURL=auto-triage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-triage.js","sourceRoot":"","sources":["../../src/commands/auto-triage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * `judges config-migrate` — Configuration migration assistant.
3
+ *
4
+ * Helps users upgrade their .judgesrc configs between Judges versions.
5
+ * Detects deprecated fields, renamed keys, and structural changes,
6
+ * then applies automatic or guided migrations.
7
+ *
8
+ * Usage:
9
+ * judges config-migrate # Analyze current .judgesrc
10
+ * judges config-migrate --apply # Apply migrations in place
11
+ * judges config-migrate --dry-run # Show changes without writing
12
+ * judges config-migrate --config path # Specify config path
13
+ */
14
+ export interface MigrationRule {
15
+ /** Unique migration ID */
16
+ id: string;
17
+ /** Version that introduced the change */
18
+ since: string;
19
+ /** Description of what changed */
20
+ description: string;
21
+ /** Severity: "error" = will break, "warning" = deprecated, "info" = suggestion */
22
+ level: "error" | "warning" | "info";
23
+ /** Detect function — returns true if this migration applies */
24
+ detect: (config: Record<string, unknown>) => boolean;
25
+ /** Apply function — returns mutated config */
26
+ apply: (config: Record<string, unknown>) => Record<string, unknown>;
27
+ }
28
+ export interface MigrationResult {
29
+ /** Path to config file */
30
+ configPath: string;
31
+ /** Migrations that matched */
32
+ applied: Array<{
33
+ id: string;
34
+ description: string;
35
+ level: string;
36
+ }>;
37
+ /** Whether any changes were made */
38
+ hasChanges: boolean;
39
+ /** Migrated config (if changes exist) */
40
+ migratedConfig?: Record<string, unknown>;
41
+ }
42
+ export declare function analyzeConfig(config: Record<string, unknown>): MigrationResult;
43
+ export declare function runConfigMigrate(argv: string[]): void;
44
+ //# sourceMappingURL=config-migrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-migrate.d.ts","sourceRoot":"","sources":["../../src/commands/config-migrate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,MAAM,WAAW,aAAa;IAC5B,0BAA0B;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,kFAAkF;IAClF,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACpC,+DAA+D;IAC/D,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC;IACrD,8CAA8C;IAC9C,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrE;AAED,MAAM,WAAW,eAAe;IAC9B,0BAA0B;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,8BAA8B;IAC9B,OAAO,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnE,oCAAoC;IACpC,UAAU,EAAE,OAAO,CAAC;IACpB,yCAAyC;IACzC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C;AA+ID,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,eAAe,CAc9E;AAID,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAgFrD"}
@@ -0,0 +1,241 @@
1
+ /**
2
+ * `judges config-migrate` — Configuration migration assistant.
3
+ *
4
+ * Helps users upgrade their .judgesrc configs between Judges versions.
5
+ * Detects deprecated fields, renamed keys, and structural changes,
6
+ * then applies automatic or guided migrations.
7
+ *
8
+ * Usage:
9
+ * judges config-migrate # Analyze current .judgesrc
10
+ * judges config-migrate --apply # Apply migrations in place
11
+ * judges config-migrate --dry-run # Show changes without writing
12
+ * judges config-migrate --config path # Specify config path
13
+ */
14
+ import { existsSync, readFileSync, writeFileSync } from "fs";
15
+ import { resolve } from "path";
16
+ // ─── Migration Rules ────────────────────────────────────────────────────────
17
+ const MIGRATIONS = [
18
+ {
19
+ id: "M001-severity-rename",
20
+ since: "3.0.0",
21
+ description: 'Rename "warning" severity to "medium" (severity levels: critical, high, medium, low, info)',
22
+ level: "error",
23
+ detect: (config) => {
24
+ const overrides = config.ruleOverrides;
25
+ if (!overrides)
26
+ return false;
27
+ return Object.values(overrides).some((o) => o.severity === "warning");
28
+ },
29
+ apply: (config) => {
30
+ const overrides = config.ruleOverrides;
31
+ for (const [key, val] of Object.entries(overrides)) {
32
+ if (val.severity === "warning") {
33
+ overrides[key] = { ...val, severity: "medium" };
34
+ }
35
+ }
36
+ return { ...config, ruleOverrides: overrides };
37
+ },
38
+ },
39
+ {
40
+ id: "M002-min-severity-string",
41
+ since: "3.0.0",
42
+ description: "Numeric minSeverity (1-5) should be replaced with string value (critical/high/medium/low/info)",
43
+ level: "error",
44
+ detect: (config) => typeof config.minSeverity === "number",
45
+ apply: (config) => {
46
+ const mapping = { 5: "critical", 4: "high", 3: "medium", 2: "low", 1: "info" };
47
+ const newSev = mapping[config.minSeverity] || "medium";
48
+ return { ...config, minSeverity: newSev };
49
+ },
50
+ },
51
+ {
52
+ id: "M003-disabled-rules-object",
53
+ since: "3.10.0",
54
+ description: "disabledRules should be an array of strings, not an object",
55
+ level: "error",
56
+ detect: (config) => config.disabledRules !== undefined && !Array.isArray(config.disabledRules),
57
+ apply: (config) => {
58
+ const obj = config.disabledRules;
59
+ return { ...config, disabledRules: Object.keys(obj) };
60
+ },
61
+ },
62
+ {
63
+ id: "M004-ignorePatterns-to-exclude",
64
+ since: "3.15.0",
65
+ description: 'Renamed "ignorePatterns" to "exclude" for consistency',
66
+ level: "warning",
67
+ detect: (config) => "ignorePatterns" in config,
68
+ apply: (config) => {
69
+ const { ignorePatterns, ...rest } = config;
70
+ const existing = rest.exclude || [];
71
+ const patterns = Array.isArray(ignorePatterns) ? ignorePatterns : [ignorePatterns];
72
+ return { ...rest, exclude: [...existing, ...patterns] };
73
+ },
74
+ },
75
+ {
76
+ id: "M005-level-to-preset",
77
+ since: "3.20.0",
78
+ description: 'Renamed "level" to "preset" for config profiles',
79
+ level: "warning",
80
+ detect: (config) => "level" in config && !("preset" in config),
81
+ apply: (config) => {
82
+ const { level, ...rest } = config;
83
+ return { ...rest, preset: level };
84
+ },
85
+ },
86
+ {
87
+ id: "M006-whitelist-to-include",
88
+ since: "3.15.0",
89
+ description: 'Renamed "whitelist" to "include" for inclusive terminology',
90
+ level: "warning",
91
+ detect: (config) => "whitelist" in config,
92
+ apply: (config) => {
93
+ const { whitelist, ...rest } = config;
94
+ const existing = rest.include || [];
95
+ const patterns = Array.isArray(whitelist) ? whitelist : [whitelist];
96
+ return { ...rest, include: [...existing, ...patterns] };
97
+ },
98
+ },
99
+ {
100
+ id: "M007-output-to-format",
101
+ since: "3.20.0",
102
+ description: 'Renamed "output" to "format" for output format specification',
103
+ level: "warning",
104
+ detect: (config) => "output" in config && !("format" in config),
105
+ apply: (config) => {
106
+ const { output, ...rest } = config;
107
+ return { ...rest, format: output };
108
+ },
109
+ },
110
+ {
111
+ id: "M008-judges-to-disabledJudges",
112
+ since: "3.25.0",
113
+ description: '"skipJudges" array should be "disabledJudges"',
114
+ level: "warning",
115
+ detect: (config) => "skipJudges" in config,
116
+ apply: (config) => {
117
+ const { skipJudges, ...rest } = config;
118
+ const existing = rest.disabledJudges || [];
119
+ const skip = Array.isArray(skipJudges) ? skipJudges : [skipJudges];
120
+ return { ...rest, disabledJudges: [...existing, ...skip] };
121
+ },
122
+ },
123
+ {
124
+ id: "M009-data-adapter-string",
125
+ since: "3.35.0",
126
+ description: "dataAdapter should be an object { type, url?, headers? }, not a string",
127
+ level: "warning",
128
+ detect: (config) => typeof config.dataAdapter === "string",
129
+ apply: (config) => {
130
+ const da = config.dataAdapter;
131
+ if (da.startsWith("http")) {
132
+ return { ...config, dataAdapter: { type: "http", url: da } };
133
+ }
134
+ return { ...config, dataAdapter: { type: "filesystem" } };
135
+ },
136
+ },
137
+ {
138
+ id: "M010-custom-rules-flat",
139
+ since: "3.30.0",
140
+ description: 'customRules entries require "id" field (previously auto-generated from index)',
141
+ level: "info",
142
+ detect: (config) => {
143
+ const rules = config.customRules;
144
+ if (!rules || !Array.isArray(rules))
145
+ return false;
146
+ return rules.some((r) => !r.id);
147
+ },
148
+ apply: (config) => {
149
+ const rules = config.customRules;
150
+ const patched = rules.map((r, i) => (r.id ? r : { ...r, id: `CUSTOM-${String(i + 1).padStart(3, "0")}` }));
151
+ return { ...config, customRules: patched };
152
+ },
153
+ },
154
+ ];
155
+ // ─── Analysis ───────────────────────────────────────────────────────────────
156
+ export function analyzeConfig(config) {
157
+ const applied = [];
158
+ let migratedConfig = { ...config };
159
+ let hasChanges = false;
160
+ for (const rule of MIGRATIONS) {
161
+ if (rule.detect(config)) {
162
+ applied.push({ id: rule.id, description: rule.description, level: rule.level });
163
+ migratedConfig = rule.apply(migratedConfig);
164
+ hasChanges = true;
165
+ }
166
+ }
167
+ return { configPath: "", applied, hasChanges, migratedConfig: hasChanges ? migratedConfig : undefined };
168
+ }
169
+ // ─── CLI Runner ─────────────────────────────────────────────────────────────
170
+ export function runConfigMigrate(argv) {
171
+ if (argv.includes("--help") || argv.includes("-h")) {
172
+ console.log(`
173
+ judges config-migrate — Configuration migration assistant
174
+
175
+ Usage:
176
+ judges config-migrate Analyze .judgesrc for issues
177
+ judges config-migrate --apply Apply migrations in place
178
+ judges config-migrate --dry-run Show changes without writing
179
+ judges config-migrate --config <path> Specify config file path
180
+
181
+ Detects and fixes:
182
+ • Renamed fields (ignorePatterns→exclude, output→format, etc.)
183
+ • Deprecated value types (numeric severity → string)
184
+ • Structural changes (object → array for disabledRules)
185
+ • Missing required fields (customRules.id)
186
+ • Terminology updates (whitelist→include, skipJudges→disabledJudges)
187
+
188
+ Options:
189
+ --apply Apply migrations and write updated config
190
+ --dry-run Show what would change (default behavior)
191
+ --config <path> Path to .judgesrc file (default: ./.judgesrc)
192
+ --format json JSON output
193
+ --help, -h Show this help
194
+ `);
195
+ return;
196
+ }
197
+ const configPath = resolve(argv.find((_a, i) => argv[i - 1] === "--config") || ".judgesrc");
198
+ const shouldApply = argv.includes("--apply");
199
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
200
+ if (!existsSync(configPath)) {
201
+ console.log(`\n No config file found at ${configPath}\n`);
202
+ console.log(" Run 'judges init' to create a .judgesrc, or specify --config <path>\n");
203
+ return;
204
+ }
205
+ let config;
206
+ try {
207
+ config = JSON.parse(readFileSync(configPath, "utf-8"));
208
+ }
209
+ catch (err) {
210
+ console.error(`\n Error parsing ${configPath}: ${err instanceof Error ? err.message : String(err)}\n`);
211
+ return;
212
+ }
213
+ const result = analyzeConfig(config);
214
+ result.configPath = configPath;
215
+ if (format === "json") {
216
+ console.log(JSON.stringify(result, null, 2));
217
+ return;
218
+ }
219
+ console.log(`\n Config Migration Analysis: ${configPath}\n`);
220
+ if (result.applied.length === 0) {
221
+ console.log(" ✅ No migrations needed — config is up to date.\n");
222
+ return;
223
+ }
224
+ const icons = { error: "❌", warning: "⚠️", info: "ℹ️" };
225
+ for (const m of result.applied) {
226
+ const icon = icons[m.level] || "•";
227
+ console.log(` ${icon} [${m.id}] ${m.description}`);
228
+ }
229
+ const errors = result.applied.filter((m) => m.level === "error").length;
230
+ const warnings = result.applied.filter((m) => m.level === "warning").length;
231
+ const infos = result.applied.filter((m) => m.level === "info").length;
232
+ console.log(`\n Summary: ${errors} error(s), ${warnings} warning(s), ${infos} info(s)\n`);
233
+ if (shouldApply && result.migratedConfig) {
234
+ writeFileSync(configPath, JSON.stringify(result.migratedConfig, null, 2) + "\n", "utf-8");
235
+ console.log(` ✅ Migrated config written to ${configPath}\n`);
236
+ }
237
+ else if (result.hasChanges) {
238
+ console.log(" Run with --apply to write the migrated config.\n");
239
+ }
240
+ }
241
+ //# sourceMappingURL=config-migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-migrate.js","sourceRoot":"","sources":["../../src/commands/config-migrate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Rule coverage map — show which rules apply to which languages,
3
+ * helping teams understand their coverage and identify gaps.
4
+ */
5
+ export interface RuleCoverage {
6
+ ruleId: string;
7
+ languages: string[];
8
+ severity: string;
9
+ judge: string;
10
+ }
11
+ export interface CoverageMap {
12
+ languages: string[];
13
+ rules: RuleCoverage[];
14
+ matrix: Record<string, Record<string, boolean>>;
15
+ stats: {
16
+ totalRules: number;
17
+ byLanguage: Record<string, number>;
18
+ byJudge: Record<string, number>;
19
+ };
20
+ }
21
+ export declare function buildCoverageMap(languages?: string[]): CoverageMap;
22
+ export declare function runCoverageMap(argv: string[]): void;
23
+ //# sourceMappingURL=coverage-map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage-map.d.ts","sourceRoot":"","sources":["../../src/commands/coverage-map.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAChD,KAAK,EAAE;QACL,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACnC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACjC,CAAC;CACH;AA2HD,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,WAAW,CAiDlE;AAID,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA8DnD"}