@kevinrabun/judges 3.75.0 → 3.77.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 (74) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +119 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/finding-age-report.d.ts +5 -0
  6. package/dist/commands/finding-age-report.d.ts.map +1 -0
  7. package/dist/commands/finding-age-report.js +155 -0
  8. package/dist/commands/finding-age-report.js.map +1 -0
  9. package/dist/commands/finding-batch-resolve.d.ts +5 -0
  10. package/dist/commands/finding-batch-resolve.d.ts.map +1 -0
  11. package/dist/commands/finding-batch-resolve.js +166 -0
  12. package/dist/commands/finding-batch-resolve.js.map +1 -0
  13. package/dist/commands/finding-correlate.d.ts +5 -0
  14. package/dist/commands/finding-correlate.d.ts.map +1 -0
  15. package/dist/commands/finding-correlate.js +89 -0
  16. package/dist/commands/finding-correlate.js.map +1 -0
  17. package/dist/commands/finding-impact-score.d.ts +5 -0
  18. package/dist/commands/finding-impact-score.d.ts.map +1 -0
  19. package/dist/commands/finding-impact-score.js +124 -0
  20. package/dist/commands/finding-impact-score.js.map +1 -0
  21. package/dist/commands/finding-root-cause.d.ts +5 -0
  22. package/dist/commands/finding-root-cause.d.ts.map +1 -0
  23. package/dist/commands/finding-root-cause.js +185 -0
  24. package/dist/commands/finding-root-cause.js.map +1 -0
  25. package/dist/commands/finding-snippet.d.ts +5 -0
  26. package/dist/commands/finding-snippet.d.ts.map +1 -0
  27. package/dist/commands/finding-snippet.js +103 -0
  28. package/dist/commands/finding-snippet.js.map +1 -0
  29. package/dist/commands/finding-suppress-pattern.d.ts +5 -0
  30. package/dist/commands/finding-suppress-pattern.d.ts.map +1 -0
  31. package/dist/commands/finding-suppress-pattern.js +149 -0
  32. package/dist/commands/finding-suppress-pattern.js.map +1 -0
  33. package/dist/commands/finding-trend.d.ts +5 -0
  34. package/dist/commands/finding-trend.d.ts.map +1 -0
  35. package/dist/commands/finding-trend.js +119 -0
  36. package/dist/commands/finding-trend.js.map +1 -0
  37. package/dist/commands/review-auto-merge.d.ts +5 -0
  38. package/dist/commands/review-auto-merge.d.ts.map +1 -0
  39. package/dist/commands/review-auto-merge.js +176 -0
  40. package/dist/commands/review-auto-merge.js.map +1 -0
  41. package/dist/commands/review-cache-clear.d.ts +5 -0
  42. package/dist/commands/review-cache-clear.d.ts.map +1 -0
  43. package/dist/commands/review-cache-clear.js +161 -0
  44. package/dist/commands/review-cache-clear.js.map +1 -0
  45. package/dist/commands/review-compliance-check.d.ts +5 -0
  46. package/dist/commands/review-compliance-check.d.ts.map +1 -0
  47. package/dist/commands/review-compliance-check.js +203 -0
  48. package/dist/commands/review-compliance-check.js.map +1 -0
  49. package/dist/commands/review-dry-run.d.ts +5 -0
  50. package/dist/commands/review-dry-run.d.ts.map +1 -0
  51. package/dist/commands/review-dry-run.js +121 -0
  52. package/dist/commands/review-dry-run.js.map +1 -0
  53. package/dist/commands/review-env-check.d.ts +5 -0
  54. package/dist/commands/review-env-check.d.ts.map +1 -0
  55. package/dist/commands/review-env-check.js +116 -0
  56. package/dist/commands/review-env-check.js.map +1 -0
  57. package/dist/commands/review-health-check.d.ts +5 -0
  58. package/dist/commands/review-health-check.d.ts.map +1 -0
  59. package/dist/commands/review-health-check.js +149 -0
  60. package/dist/commands/review-health-check.js.map +1 -0
  61. package/dist/commands/review-integration-test.d.ts +5 -0
  62. package/dist/commands/review-integration-test.d.ts.map +1 -0
  63. package/dist/commands/review-integration-test.js +146 -0
  64. package/dist/commands/review-integration-test.js.map +1 -0
  65. package/dist/commands/review-parallel-diff.d.ts +5 -0
  66. package/dist/commands/review-parallel-diff.d.ts.map +1 -0
  67. package/dist/commands/review-parallel-diff.js +147 -0
  68. package/dist/commands/review-parallel-diff.js.map +1 -0
  69. package/dist/commands/review-rule-stats.d.ts +5 -0
  70. package/dist/commands/review-rule-stats.d.ts.map +1 -0
  71. package/dist/commands/review-rule-stats.js +162 -0
  72. package/dist/commands/review-rule-stats.js.map +1 -0
  73. package/package.json +1 -1
  74. package/server.json +2 -2
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Review-dry-run — Simulate a review without persisting results.
3
+ */
4
+ import { readFileSync, existsSync } from "fs";
5
+ // ─── CLI ────────────────────────────────────────────────────────────────────
6
+ export function runReviewDryRun(argv) {
7
+ if (argv.includes("--help") || argv.includes("-h")) {
8
+ console.log(`
9
+ judges review-dry-run — Simulate a review without persisting results
10
+
11
+ Usage:
12
+ judges review-dry-run --file <source> [options]
13
+
14
+ Options:
15
+ --file <path> Source file to simulate review for (required)
16
+ --config <path> Config file to use
17
+ --show-config Show effective config without running
18
+ --format json JSON output
19
+ --help, -h Show this help
20
+
21
+ Runs analysis in simulation mode — no files written, no caches updated.
22
+ `);
23
+ return;
24
+ }
25
+ const sourceFile = argv.find((_a, i) => argv[i - 1] === "--file");
26
+ const configFile = argv.find((_a, i) => argv[i - 1] === "--config");
27
+ const showConfig = argv.includes("--show-config");
28
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
29
+ if (!sourceFile && !showConfig) {
30
+ console.error("Error: --file required (or use --show-config)");
31
+ process.exitCode = 1;
32
+ return;
33
+ }
34
+ // Load config if specified
35
+ let config = {};
36
+ if (configFile) {
37
+ if (!existsSync(configFile)) {
38
+ console.error(`Error: config file not found: ${configFile}`);
39
+ process.exitCode = 1;
40
+ return;
41
+ }
42
+ try {
43
+ config = JSON.parse(readFileSync(configFile, "utf-8"));
44
+ }
45
+ catch {
46
+ console.error("Error: could not parse config file");
47
+ process.exitCode = 1;
48
+ return;
49
+ }
50
+ }
51
+ if (showConfig) {
52
+ if (format === "json") {
53
+ console.log(JSON.stringify({ mode: "dry-run", config }, null, 2));
54
+ }
55
+ else {
56
+ console.log("\nDry-Run Config:");
57
+ console.log("═".repeat(40));
58
+ console.log(JSON.stringify(config, null, 2));
59
+ console.log("═".repeat(40));
60
+ }
61
+ return;
62
+ }
63
+ if (!existsSync(sourceFile)) {
64
+ console.error(`Error: source file not found: ${sourceFile}`);
65
+ process.exitCode = 1;
66
+ return;
67
+ }
68
+ // Read source and simulate analysis
69
+ const source = readFileSync(sourceFile, "utf-8");
70
+ const lineCount = source.split("\n").length;
71
+ const ext = sourceFile.split(".").pop() || "unknown";
72
+ // Simple dry-run simulation — estimate what a full review would produce
73
+ const simulation = {
74
+ mode: "dry-run",
75
+ sourceFile: sourceFile,
76
+ language: ext,
77
+ lineCount,
78
+ estimatedJudges: getEstimatedJudgeCount(ext),
79
+ estimatedDuration: `${Math.max(1, Math.round(lineCount / 100))}s`,
80
+ configApplied: Object.keys(config).length > 0,
81
+ wouldPersist: false,
82
+ wouldUpdateCache: false,
83
+ };
84
+ if (format === "json") {
85
+ console.log(JSON.stringify(simulation, null, 2));
86
+ return;
87
+ }
88
+ console.log("\nDry-Run Simulation:");
89
+ console.log("═".repeat(50));
90
+ console.log(` File: ${sourceFile}`);
91
+ console.log(` Language: ${ext}`);
92
+ console.log(` Lines: ${lineCount}`);
93
+ console.log(` Est. judges: ${simulation.estimatedJudges}`);
94
+ console.log(` Est. duration: ${simulation.estimatedDuration}`);
95
+ console.log(` Config applied: ${simulation.configApplied ? "yes" : "no (defaults)"}`);
96
+ console.log(` Would persist: no (dry-run)`);
97
+ console.log(` Would cache: no (dry-run)`);
98
+ console.log("═".repeat(50));
99
+ console.log(" No files were written. Use 'judges eval' for a real review.");
100
+ }
101
+ function getEstimatedJudgeCount(ext) {
102
+ const langMap = {
103
+ ts: 45,
104
+ js: 45,
105
+ tsx: 45,
106
+ jsx: 45,
107
+ py: 40,
108
+ java: 40,
109
+ cs: 38,
110
+ go: 35,
111
+ rs: 30,
112
+ cpp: 30,
113
+ c: 28,
114
+ rb: 32,
115
+ php: 35,
116
+ swift: 28,
117
+ kt: 28,
118
+ };
119
+ return langMap[ext] || 25;
120
+ }
121
+ //# sourceMappingURL=review-dry-run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-dry-run.js","sourceRoot":"","sources":["../../src/commands/review-dry-run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Review-env-check — Verify review environment prerequisites.
3
+ */
4
+ export declare function runReviewEnvCheck(argv: string[]): void;
5
+ //# sourceMappingURL=review-env-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-env-check.d.ts","sourceRoot":"","sources":["../../src/commands/review-env-check.ts"],"names":[],"mappings":"AAAA;;GAEG;AA2EH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAoDtD"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Review-env-check — Verify review environment prerequisites.
3
+ */
4
+ import { existsSync } from "fs";
5
+ import { execSync } from "child_process";
6
+ function checkNode() {
7
+ try {
8
+ const ver = process.version;
9
+ const major = parseInt(ver.slice(1).split(".")[0], 10);
10
+ if (major >= 18)
11
+ return { name: "Node.js", status: "pass", message: `${ver} (>= 18 required)` };
12
+ return { name: "Node.js", status: "fail", message: `${ver} — upgrade to >= 18` };
13
+ }
14
+ catch {
15
+ return { name: "Node.js", status: "fail", message: "Not found" };
16
+ }
17
+ }
18
+ function checkGit() {
19
+ try {
20
+ const ver = execSync("git --version", { encoding: "utf-8", timeout: 5000 }).trim();
21
+ return { name: "Git", status: "pass", message: ver };
22
+ }
23
+ catch {
24
+ return { name: "Git", status: "warn", message: "Not found (optional for diff features)" };
25
+ }
26
+ }
27
+ function checkConfigFile() {
28
+ const candidates = [".judgesrc", ".judgesrc.json", ".judgesrc.yaml", "judgesrc.config.js"];
29
+ for (const c of candidates) {
30
+ if (existsSync(c))
31
+ return { name: "Config file", status: "pass", message: c };
32
+ }
33
+ return { name: "Config file", status: "warn", message: "No config found (using defaults)" };
34
+ }
35
+ function checkCacheDir() {
36
+ if (existsSync(".judges"))
37
+ return { name: "Cache directory", status: "pass", message: ".judges/ exists" };
38
+ return { name: "Cache directory", status: "warn", message: ".judges/ not found (will be created on first run)" };
39
+ }
40
+ function checkDiskSpace() {
41
+ try {
42
+ const os = process.platform;
43
+ if (os === "win32") {
44
+ const out = execSync("wmic logicaldisk get freespace", { encoding: "utf-8", timeout: 5000 });
45
+ const lines = out
46
+ .trim()
47
+ .split("\n")
48
+ .filter((l) => l.trim().length > 0);
49
+ if (lines.length > 1) {
50
+ const free = parseInt(lines[1].trim(), 10);
51
+ const mb = Math.round(free / 1024 / 1024);
52
+ if (mb > 100)
53
+ return { name: "Disk space", status: "pass", message: `${mb} MB free` };
54
+ return { name: "Disk space", status: "warn", message: `${mb} MB free (low)` };
55
+ }
56
+ }
57
+ return { name: "Disk space", status: "pass", message: "Check skipped" };
58
+ }
59
+ catch {
60
+ return { name: "Disk space", status: "pass", message: "Check skipped" };
61
+ }
62
+ }
63
+ function checkPackageJson() {
64
+ if (existsSync("package.json"))
65
+ return { name: "package.json", status: "pass", message: "Found" };
66
+ return { name: "package.json", status: "warn", message: "Not found" };
67
+ }
68
+ // ─── CLI ────────────────────────────────────────────────────────────────────
69
+ export function runReviewEnvCheck(argv) {
70
+ if (argv.includes("--help") || argv.includes("-h")) {
71
+ console.log(`
72
+ judges review-env-check — Verify review environment prerequisites
73
+
74
+ Usage:
75
+ judges review-env-check [options]
76
+
77
+ Options:
78
+ --strict Fail on warnings too
79
+ --format json JSON output
80
+ --help, -h Show this help
81
+
82
+ Checks: Node.js version, Git, config file, cache dir, disk space, package.json.
83
+ `);
84
+ return;
85
+ }
86
+ const strict = argv.includes("--strict");
87
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
88
+ const checks = [
89
+ checkNode(),
90
+ checkGit(),
91
+ checkConfigFile(),
92
+ checkCacheDir(),
93
+ checkDiskSpace(),
94
+ checkPackageJson(),
95
+ ];
96
+ const failures = checks.filter((c) => c.status === "fail");
97
+ const warnings = checks.filter((c) => c.status === "warn");
98
+ const ok = failures.length === 0 && (!strict || warnings.length === 0);
99
+ if (format === "json") {
100
+ console.log(JSON.stringify({ checks, ok, failures: failures.length, warnings: warnings.length }, null, 2));
101
+ if (!ok)
102
+ process.exitCode = 1;
103
+ return;
104
+ }
105
+ console.log("\nEnvironment Check:");
106
+ console.log("═".repeat(55));
107
+ for (const c of checks) {
108
+ const icon = c.status === "pass" ? "PASS" : c.status === "warn" ? "WARN" : "FAIL";
109
+ console.log(` [${icon}] ${c.name.padEnd(18)} ${c.message}`);
110
+ }
111
+ console.log("═".repeat(55));
112
+ console.log(` Result: ${ok ? "Environment ready" : "Issues found"} (${failures.length} failures, ${warnings.length} warnings)`);
113
+ if (!ok)
114
+ process.exitCode = 1;
115
+ }
116
+ //# sourceMappingURL=review-env-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-env-check.js","sourceRoot":"","sources":["../../src/commands/review-env-check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Review-health-check — Diagnose review system health and readiness.
3
+ */
4
+ export declare function runReviewHealthCheck(argv: string[]): void;
5
+ //# sourceMappingURL=review-health-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-health-check.d.ts","sourceRoot":"","sources":["../../src/commands/review-health-check.ts"],"names":[],"mappings":"AAAA;;GAEG;AAiHH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAgDzD"}
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Review-health-check — Diagnose review system health and readiness.
3
+ */
4
+ import { existsSync, readFileSync, statSync, readdirSync } from "fs";
5
+ // ─── Checks ─────────────────────────────────────────────────────────────────
6
+ function checkCacheHealth() {
7
+ if (!existsSync(".judges")) {
8
+ return { component: "Cache", status: "healthy", message: "No cache dir (will be created)" };
9
+ }
10
+ try {
11
+ const files = readdirSync(".judges");
12
+ const jsonFiles = files.filter((f) => f.endsWith(".json"));
13
+ const totalSize = jsonFiles.reduce((sum, f) => {
14
+ try {
15
+ return sum + statSync(`.judges/${f}`).size;
16
+ }
17
+ catch {
18
+ return sum;
19
+ }
20
+ }, 0);
21
+ const mb = (totalSize / 1024 / 1024).toFixed(1);
22
+ if (totalSize > 100 * 1024 * 1024) {
23
+ return { component: "Cache", status: "degraded", message: `${mb} MB — consider cleanup` };
24
+ }
25
+ return { component: "Cache", status: "healthy", message: `${jsonFiles.length} files, ${mb} MB` };
26
+ }
27
+ catch {
28
+ return { component: "Cache", status: "unhealthy", message: "Cannot read .judges/" };
29
+ }
30
+ }
31
+ function checkConfigHealth() {
32
+ const candidates = [".judgesrc", ".judgesrc.json", ".judgesrc.yaml"];
33
+ for (const c of candidates) {
34
+ if (existsSync(c)) {
35
+ try {
36
+ const content = readFileSync(c, "utf-8");
37
+ if (c.endsWith(".json") || c === ".judgesrc") {
38
+ JSON.parse(content);
39
+ }
40
+ return { component: "Config", status: "healthy", message: `Valid config: ${c}` };
41
+ }
42
+ catch {
43
+ return { component: "Config", status: "unhealthy", message: `Invalid config: ${c}` };
44
+ }
45
+ }
46
+ }
47
+ return { component: "Config", status: "healthy", message: "Using defaults (no config file)" };
48
+ }
49
+ function checkRuntimeHealth() {
50
+ const memUsage = process.memoryUsage();
51
+ const heapMb = Math.round(memUsage.heapUsed / 1024 / 1024);
52
+ if (heapMb > 500) {
53
+ return { component: "Runtime", status: "degraded", message: `Heap: ${heapMb} MB (high)` };
54
+ }
55
+ return { component: "Runtime", status: "healthy", message: `Node ${process.version}, heap: ${heapMb} MB` };
56
+ }
57
+ function checkDependenciesHealth() {
58
+ if (!existsSync("node_modules")) {
59
+ return { component: "Dependencies", status: "unhealthy", message: "node_modules not found" };
60
+ }
61
+ if (existsSync("package-lock.json") && existsSync("package.json")) {
62
+ try {
63
+ const pkg = JSON.parse(readFileSync("package.json", "utf-8"));
64
+ const lockContent = readFileSync("package-lock.json", "utf-8");
65
+ const lock = JSON.parse(lockContent);
66
+ if (pkg.version !== lock.version) {
67
+ return { component: "Dependencies", status: "degraded", message: "Lock file version mismatch" };
68
+ }
69
+ }
70
+ catch {
71
+ /* ignore parse errors */
72
+ }
73
+ }
74
+ return { component: "Dependencies", status: "healthy", message: "node_modules present" };
75
+ }
76
+ function checkRecentResults() {
77
+ const resultPaths = [".judges/last-results.json", "results.json", ".judges/results.json"];
78
+ for (const p of resultPaths) {
79
+ if (existsSync(p)) {
80
+ try {
81
+ const stat = statSync(p);
82
+ const ageHours = (Date.now() - stat.mtimeMs) / 1000 / 60 / 60;
83
+ if (ageHours > 168) {
84
+ return {
85
+ component: "Results",
86
+ status: "degraded",
87
+ message: `Last results ${Math.round(ageHours / 24)} days old`,
88
+ };
89
+ }
90
+ return {
91
+ component: "Results",
92
+ status: "healthy",
93
+ message: `Last run: ${stat.mtime.toISOString().slice(0, 19)}`,
94
+ };
95
+ }
96
+ catch {
97
+ /* ignore */
98
+ }
99
+ }
100
+ }
101
+ return { component: "Results", status: "healthy", message: "No previous results found" };
102
+ }
103
+ // ─── CLI ────────────────────────────────────────────────────────────────────
104
+ export function runReviewHealthCheck(argv) {
105
+ if (argv.includes("--help") || argv.includes("-h")) {
106
+ console.log(`
107
+ judges review-health-check — Diagnose review system health
108
+
109
+ Usage:
110
+ judges review-health-check [options]
111
+
112
+ Options:
113
+ --format json JSON output
114
+ --help, -h Show this help
115
+
116
+ Checks: cache, config, runtime, dependencies, recent results.
117
+ `);
118
+ return;
119
+ }
120
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
121
+ const checks = [
122
+ checkCacheHealth(),
123
+ checkConfigHealth(),
124
+ checkRuntimeHealth(),
125
+ checkDependenciesHealth(),
126
+ checkRecentResults(),
127
+ ];
128
+ const healthy = checks.filter((c) => c.status === "healthy").length;
129
+ const degraded = checks.filter((c) => c.status === "degraded").length;
130
+ const unhealthy = checks.filter((c) => c.status === "unhealthy").length;
131
+ const overall = unhealthy > 0 ? "unhealthy" : degraded > 0 ? "degraded" : "healthy";
132
+ if (format === "json") {
133
+ console.log(JSON.stringify({ overall, checks, healthy, degraded, unhealthy }, null, 2));
134
+ if (overall === "unhealthy")
135
+ process.exitCode = 1;
136
+ return;
137
+ }
138
+ console.log("\nSystem Health Check:");
139
+ console.log("═".repeat(60));
140
+ for (const c of checks) {
141
+ const icon = c.status === "healthy" ? " OK " : c.status === "degraded" ? "WARN" : "FAIL";
142
+ console.log(` [${icon}] ${c.component.padEnd(16)} ${c.message}`);
143
+ }
144
+ console.log("═".repeat(60));
145
+ console.log(` Overall: ${overall.toUpperCase()} (${healthy} ok, ${degraded} degraded, ${unhealthy} unhealthy)`);
146
+ if (overall === "unhealthy")
147
+ process.exitCode = 1;
148
+ }
149
+ //# sourceMappingURL=review-health-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-health-check.js","sourceRoot":"","sources":["../../src/commands/review-health-check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Review-integration-test — Validate review integration with CI/CD pipelines.
3
+ */
4
+ export declare function runReviewIntegrationTest(argv: string[]): void;
5
+ //# sourceMappingURL=review-integration-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-integration-test.d.ts","sourceRoot":"","sources":["../../src/commands/review-integration-test.ts"],"names":[],"mappings":"AAAA;;GAEG;AA4GH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA2D7D"}
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Review-integration-test — Validate review integration with CI/CD pipelines.
3
+ */
4
+ import { existsSync, readFileSync } from "fs";
5
+ // ─── Checks ─────────────────────────────────────────────────────────────────
6
+ function checkGitHubActions() {
7
+ const paths = [".github/workflows", ".github/workflows/judges.yml", ".github/workflows/judges.yaml"];
8
+ for (const p of paths) {
9
+ if (existsSync(p)) {
10
+ if (p.endsWith(".yml") || p.endsWith(".yaml")) {
11
+ try {
12
+ const content = readFileSync(p, "utf-8");
13
+ if (content.includes("judges")) {
14
+ return { name: "GitHub Actions", status: "pass", detail: `Found judges integration in ${p}` };
15
+ }
16
+ }
17
+ catch {
18
+ /* ignore */
19
+ }
20
+ }
21
+ return { name: "GitHub Actions", status: "warn", detail: `Workflows dir exists but no judges step found` };
22
+ }
23
+ }
24
+ return { name: "GitHub Actions", status: "warn", detail: "No GitHub Actions workflow found" };
25
+ }
26
+ function checkGitLabCI() {
27
+ if (existsSync(".gitlab-ci.yml")) {
28
+ try {
29
+ const content = readFileSync(".gitlab-ci.yml", "utf-8");
30
+ if (content.includes("judges")) {
31
+ return { name: "GitLab CI", status: "pass", detail: "Found judges integration" };
32
+ }
33
+ return { name: "GitLab CI", status: "warn", detail: ".gitlab-ci.yml exists but no judges step" };
34
+ }
35
+ catch {
36
+ /* ignore */
37
+ }
38
+ }
39
+ return { name: "GitLab CI", status: "warn", detail: "No .gitlab-ci.yml found" };
40
+ }
41
+ function checkPreCommit() {
42
+ const hooks = [".husky/pre-commit", ".git/hooks/pre-commit"];
43
+ for (const h of hooks) {
44
+ if (existsSync(h)) {
45
+ try {
46
+ const content = readFileSync(h, "utf-8");
47
+ if (content.includes("judges")) {
48
+ return { name: "Pre-commit hook", status: "pass", detail: `Found judges in ${h}` };
49
+ }
50
+ return { name: "Pre-commit hook", status: "warn", detail: `Hook exists at ${h} but no judges integration` };
51
+ }
52
+ catch {
53
+ /* ignore */
54
+ }
55
+ }
56
+ }
57
+ return { name: "Pre-commit hook", status: "warn", detail: "No pre-commit hook found" };
58
+ }
59
+ function checkPackageScripts() {
60
+ if (!existsSync("package.json")) {
61
+ return { name: "npm scripts", status: "warn", detail: "No package.json found" };
62
+ }
63
+ try {
64
+ const pkg = JSON.parse(readFileSync("package.json", "utf-8"));
65
+ const scripts = pkg.scripts || {};
66
+ const judgesScripts = Object.entries(scripts).filter(([, v]) => String(v).includes("judges"));
67
+ if (judgesScripts.length > 0) {
68
+ return { name: "npm scripts", status: "pass", detail: `Found: ${judgesScripts.map(([k]) => k).join(", ")}` };
69
+ }
70
+ return { name: "npm scripts", status: "warn", detail: "No judges-related npm scripts" };
71
+ }
72
+ catch {
73
+ return { name: "npm scripts", status: "warn", detail: "Could not parse package.json" };
74
+ }
75
+ }
76
+ function checkOutputFormats() {
77
+ const sarifFiles = ["results.sarif", "results.sarif.json", ".judges/results.sarif"];
78
+ for (const f of sarifFiles) {
79
+ if (existsSync(f)) {
80
+ return { name: "SARIF output", status: "pass", detail: `Found ${f}` };
81
+ }
82
+ }
83
+ return {
84
+ name: "SARIF output",
85
+ status: "warn",
86
+ detail: "No SARIF output found (use --format sarif for GitHub code scanning)",
87
+ };
88
+ }
89
+ function checkBaselineFile() {
90
+ const candidates = [".judges-baseline.json", ".judges/baseline.json", "judges-baseline.json"];
91
+ for (const c of candidates) {
92
+ if (existsSync(c))
93
+ return { name: "Baseline file", status: "pass", detail: c };
94
+ }
95
+ return { name: "Baseline file", status: "warn", detail: "No baseline file (use 'judges baseline' to set one)" };
96
+ }
97
+ // ─── CLI ────────────────────────────────────────────────────────────────────
98
+ export function runReviewIntegrationTest(argv) {
99
+ if (argv.includes("--help") || argv.includes("-h")) {
100
+ console.log(`
101
+ judges review-integration-test — Validate CI/CD integration
102
+
103
+ Usage:
104
+ judges review-integration-test [options]
105
+
106
+ Options:
107
+ --strict Fail on warnings
108
+ --format json JSON output
109
+ --help, -h Show this help
110
+
111
+ Checks: GitHub Actions, GitLab CI, pre-commit hooks, npm scripts, SARIF output, baseline.
112
+ `);
113
+ return;
114
+ }
115
+ const strict = argv.includes("--strict");
116
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
117
+ const checks = [
118
+ checkGitHubActions(),
119
+ checkGitLabCI(),
120
+ checkPreCommit(),
121
+ checkPackageScripts(),
122
+ checkOutputFormats(),
123
+ checkBaselineFile(),
124
+ ];
125
+ const failures = checks.filter((c) => c.status === "fail");
126
+ const warnings = checks.filter((c) => c.status === "warn");
127
+ const passes = checks.filter((c) => c.status === "pass");
128
+ const ok = failures.length === 0 && (!strict || warnings.length === 0);
129
+ if (format === "json") {
130
+ console.log(JSON.stringify({ checks, ok, passes: passes.length, warnings: warnings.length, failures: failures.length }, null, 2));
131
+ if (!ok)
132
+ process.exitCode = 1;
133
+ return;
134
+ }
135
+ console.log("\nCI/CD Integration Check:");
136
+ console.log("═".repeat(65));
137
+ for (const c of checks) {
138
+ const icon = c.status === "pass" ? "PASS" : c.status === "warn" ? "WARN" : "FAIL";
139
+ console.log(` [${icon}] ${c.name.padEnd(20)} ${c.detail}`);
140
+ }
141
+ console.log("═".repeat(65));
142
+ console.log(` ${passes.length} pass, ${warnings.length} warn, ${failures.length} fail — ${ok ? "Ready" : "Issues found"}`);
143
+ if (!ok)
144
+ process.exitCode = 1;
145
+ }
146
+ //# sourceMappingURL=review-integration-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-integration-test.js","sourceRoot":"","sources":["../../src/commands/review-integration-test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Review-parallel-diff — Run reviews on multiple diff hunks in parallel.
3
+ */
4
+ export declare function runReviewParallelDiff(argv: string[]): void;
5
+ //# sourceMappingURL=review-parallel-diff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-parallel-diff.d.ts","sourceRoot":"","sources":["../../src/commands/review-parallel-diff.ts"],"names":[],"mappings":"AAAA;;GAEG;AA+FH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA8F1D"}