@kevinrabun/judges 3.64.0 → 3.66.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 (70) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +112 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/code-health.d.ts +5 -0
  6. package/dist/commands/code-health.d.ts.map +1 -0
  7. package/dist/commands/code-health.js +196 -0
  8. package/dist/commands/code-health.js.map +1 -0
  9. package/dist/commands/finding-suppress.d.ts +5 -0
  10. package/dist/commands/finding-suppress.d.ts.map +1 -0
  11. package/dist/commands/finding-suppress.js +165 -0
  12. package/dist/commands/finding-suppress.js.map +1 -0
  13. package/dist/commands/finding-timeline.d.ts +5 -0
  14. package/dist/commands/finding-timeline.d.ts.map +1 -0
  15. package/dist/commands/finding-timeline.js +144 -0
  16. package/dist/commands/finding-timeline.js.map +1 -0
  17. package/dist/commands/fix-verify.d.ts +5 -0
  18. package/dist/commands/fix-verify.d.ts.map +1 -0
  19. package/dist/commands/fix-verify.js +124 -0
  20. package/dist/commands/fix-verify.js.map +1 -0
  21. package/dist/commands/judge-config.d.ts +5 -0
  22. package/dist/commands/judge-config.d.ts.map +1 -0
  23. package/dist/commands/judge-config.js +152 -0
  24. package/dist/commands/judge-config.js.map +1 -0
  25. package/dist/commands/review-annotate.d.ts +5 -0
  26. package/dist/commands/review-annotate.d.ts.map +1 -0
  27. package/dist/commands/review-annotate.js +123 -0
  28. package/dist/commands/review-annotate.js.map +1 -0
  29. package/dist/commands/review-checkpoint.d.ts +5 -0
  30. package/dist/commands/review-checkpoint.d.ts.map +1 -0
  31. package/dist/commands/review-checkpoint.js +164 -0
  32. package/dist/commands/review-checkpoint.js.map +1 -0
  33. package/dist/commands/review-comment.d.ts +5 -0
  34. package/dist/commands/review-comment.d.ts.map +1 -0
  35. package/dist/commands/review-comment.js +166 -0
  36. package/dist/commands/review-comment.js.map +1 -0
  37. package/dist/commands/review-export.d.ts +5 -0
  38. package/dist/commands/review-export.d.ts.map +1 -0
  39. package/dist/commands/review-export.js +180 -0
  40. package/dist/commands/review-export.js.map +1 -0
  41. package/dist/commands/review-filter.d.ts +5 -0
  42. package/dist/commands/review-filter.d.ts.map +1 -0
  43. package/dist/commands/review-filter.js +166 -0
  44. package/dist/commands/review-filter.js.map +1 -0
  45. package/dist/commands/review-merge.d.ts +5 -0
  46. package/dist/commands/review-merge.d.ts.map +1 -0
  47. package/dist/commands/review-merge.js +146 -0
  48. package/dist/commands/review-merge.js.map +1 -0
  49. package/dist/commands/review-schedule.d.ts +5 -0
  50. package/dist/commands/review-schedule.d.ts.map +1 -0
  51. package/dist/commands/review-schedule.js +170 -0
  52. package/dist/commands/review-schedule.js.map +1 -0
  53. package/dist/commands/review-scope.d.ts +5 -0
  54. package/dist/commands/review-scope.d.ts.map +1 -0
  55. package/dist/commands/review-scope.js +198 -0
  56. package/dist/commands/review-scope.js.map +1 -0
  57. package/dist/commands/review-webhook.d.ts +5 -0
  58. package/dist/commands/review-webhook.d.ts.map +1 -0
  59. package/dist/commands/review-webhook.js +141 -0
  60. package/dist/commands/review-webhook.js.map +1 -0
  61. package/dist/commands/rule-catalog.d.ts +5 -0
  62. package/dist/commands/rule-catalog.d.ts.map +1 -0
  63. package/dist/commands/rule-catalog.js +129 -0
  64. package/dist/commands/rule-catalog.js.map +1 -0
  65. package/dist/commands/setup-wizard.d.ts +5 -0
  66. package/dist/commands/setup-wizard.d.ts.map +1 -0
  67. package/dist/commands/setup-wizard.js +175 -0
  68. package/dist/commands/setup-wizard.js.map +1 -0
  69. package/package.json +1 -1
  70. package/server.json +2 -2
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Fix-verify — Re-run review on fixed code to confirm findings are resolved.
3
+ */
4
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
5
+ import { dirname } from "path";
6
+ // ─── Matching ───────────────────────────────────────────────────────────────
7
+ function findingKey(f) {
8
+ return [f.ruleId || "", f.title || "", String(f.severity || "")].join("|").toLowerCase();
9
+ }
10
+ function compareVerdicts(original, updated) {
11
+ const origFindings = original.findings || [];
12
+ const updFindings = updated.findings || [];
13
+ const origKeys = new Set(origFindings.map(findingKey));
14
+ const updKeys = new Set(updFindings.map(findingKey));
15
+ const resolved = origFindings.filter((f) => !updKeys.has(findingKey(f)));
16
+ const remaining = origFindings.filter((f) => updKeys.has(findingKey(f)));
17
+ const newFindings = updFindings.filter((f) => !origKeys.has(findingKey(f)));
18
+ const resolutionRate = origFindings.length > 0 ? Math.round((resolved.length / origFindings.length) * 100) : 100;
19
+ return {
20
+ timestamp: new Date().toISOString(),
21
+ originalFile: "",
22
+ originalCount: origFindings.length,
23
+ resolvedCount: resolved.length,
24
+ remainingCount: remaining.length,
25
+ newCount: newFindings.length,
26
+ resolved,
27
+ remaining,
28
+ newFindings,
29
+ resolutionRate,
30
+ };
31
+ }
32
+ // ─── CLI ────────────────────────────────────────────────────────────────────
33
+ export function runFixVerify(argv) {
34
+ if (argv.includes("--help") || argv.includes("-h")) {
35
+ console.log(`
36
+ judges fix-verify — Verify that fixes resolved findings
37
+
38
+ Usage:
39
+ judges fix-verify --original before.json --updated after.json
40
+ judges fix-verify --original before.json --updated after.json --output report.json
41
+
42
+ Options:
43
+ --original <path> Original verdict JSON (before fixes)
44
+ --updated <path> Updated verdict JSON (after fixes)
45
+ --output <path> Write verification report to file
46
+ --format json JSON output
47
+ --help, -h Show this help
48
+
49
+ Compares two verdict files to show which findings were resolved,
50
+ which remain, and whether new findings were introduced.
51
+ `);
52
+ return;
53
+ }
54
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
55
+ const originalFile = argv.find((_a, i) => argv[i - 1] === "--original");
56
+ const updatedFile = argv.find((_a, i) => argv[i - 1] === "--updated");
57
+ const outputFile = argv.find((_a, i) => argv[i - 1] === "--output");
58
+ if (!originalFile || !updatedFile) {
59
+ console.error("Error: Both --original and --updated are required.");
60
+ process.exitCode = 1;
61
+ return;
62
+ }
63
+ if (!existsSync(originalFile)) {
64
+ console.error(`Error: File not found: ${originalFile}`);
65
+ process.exitCode = 1;
66
+ return;
67
+ }
68
+ if (!existsSync(updatedFile)) {
69
+ console.error(`Error: File not found: ${updatedFile}`);
70
+ process.exitCode = 1;
71
+ return;
72
+ }
73
+ let original;
74
+ let updated;
75
+ try {
76
+ original = JSON.parse(readFileSync(originalFile, "utf-8"));
77
+ updated = JSON.parse(readFileSync(updatedFile, "utf-8"));
78
+ }
79
+ catch {
80
+ console.error("Error: Could not parse verdict files.");
81
+ process.exitCode = 1;
82
+ return;
83
+ }
84
+ const result = compareVerdicts(original, updated);
85
+ result.originalFile = originalFile;
86
+ if (outputFile) {
87
+ mkdirSync(dirname(outputFile), { recursive: true });
88
+ writeFileSync(outputFile, JSON.stringify(result, null, 2), "utf-8");
89
+ console.log(`Verification report written to ${outputFile}`);
90
+ }
91
+ if (format === "json") {
92
+ console.log(JSON.stringify(result, null, 2));
93
+ return;
94
+ }
95
+ console.log(`\n Fix Verification Report\n ═════════════════════════════`);
96
+ console.log(` Original findings: ${result.originalCount}`);
97
+ console.log(` Resolved: ${result.resolvedCount} ✅`);
98
+ console.log(` Remaining: ${result.remainingCount} ⚠️`);
99
+ console.log(` New findings: ${result.newCount} ${result.newCount > 0 ? "🆕" : ""}`);
100
+ console.log(` Resolution rate: ${result.resolutionRate}%`);
101
+ console.log();
102
+ if (result.resolved.length > 0) {
103
+ console.log(" Resolved Findings:");
104
+ for (const f of result.resolved) {
105
+ console.log(` ✅ [${(f.severity || "").toUpperCase()}] ${f.title || f.ruleId}`);
106
+ }
107
+ console.log();
108
+ }
109
+ if (result.remaining.length > 0) {
110
+ console.log(" Remaining Findings:");
111
+ for (const f of result.remaining) {
112
+ console.log(` ⚠️ [${(f.severity || "").toUpperCase()}] ${f.title || f.ruleId}`);
113
+ }
114
+ console.log();
115
+ }
116
+ if (result.newFindings.length > 0) {
117
+ console.log(" New Findings (introduced by fixes):");
118
+ for (const f of result.newFindings) {
119
+ console.log(` 🆕 [${(f.severity || "").toUpperCase()}] ${f.title || f.ruleId}`);
120
+ }
121
+ console.log();
122
+ }
123
+ }
124
+ //# sourceMappingURL=fix-verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fix-verify.js","sourceRoot":"","sources":["../../src/commands/fix-verify.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Judge-config — Per-judge sensitivity and configuration overrides.
3
+ */
4
+ export declare function runJudgeConfig(argv: string[]): void;
5
+ //# sourceMappingURL=judge-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"judge-config.d.ts","sourceRoot":"","sources":["../../src/commands/judge-config.ts"],"names":[],"mappings":"AAAA;;GAEG;AA0CH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAkJnD"}
@@ -0,0 +1,152 @@
1
+ /**
2
+ * Judge-config — Per-judge sensitivity and configuration overrides.
3
+ */
4
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
5
+ import { join, dirname } from "path";
6
+ import { defaultRegistry } from "../judge-registry.js";
7
+ // ─── Storage ────────────────────────────────────────────────────────────────
8
+ const CONFIG_FILE = join(".judges", "judge-config.json");
9
+ function loadJudgeConfig() {
10
+ if (!existsSync(CONFIG_FILE))
11
+ return { version: "1.0.0", overrides: [] };
12
+ try {
13
+ return JSON.parse(readFileSync(CONFIG_FILE, "utf-8"));
14
+ }
15
+ catch {
16
+ return { version: "1.0.0", overrides: [] };
17
+ }
18
+ }
19
+ function saveJudgeConfig(config) {
20
+ mkdirSync(dirname(CONFIG_FILE), { recursive: true });
21
+ writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2), "utf-8");
22
+ }
23
+ // ─── CLI ────────────────────────────────────────────────────────────────────
24
+ export function runJudgeConfig(argv) {
25
+ if (argv.includes("--help") || argv.includes("-h")) {
26
+ console.log(`
27
+ judges judge-config — Per-judge configuration overrides
28
+
29
+ Usage:
30
+ judges judge-config list List judge configs
31
+ judges judge-config show --judge data-security Show judge settings
32
+ judges judge-config set --judge data-security --sensitivity 1.5
33
+ judges judge-config reset --judge data-security Reset to defaults
34
+ judges judge-config --format json JSON output
35
+
36
+ Subcommands:
37
+ list List all judges with override status
38
+ show Show configuration for a specific judge
39
+ set Set override values for a judge
40
+ reset Reset a judge to default settings
41
+
42
+ Options:
43
+ --judge <id> Judge ID (required for show/set/reset)
44
+ --sensitivity <n> Sensitivity multiplier (0.1-3.0, default: 1.0)
45
+ --min-severity <s> Minimum severity: critical, high, medium, low
46
+ --enabled <bool> Enable/disable judge (true/false)
47
+ --notes <text> Notes about override reason
48
+ --format json JSON output
49
+ --help, -h Show this help
50
+
51
+ Judge configs are stored locally in .judges/judge-config.json.
52
+ Higher sensitivity catches more issues but may produce more false positives.
53
+ `);
54
+ return;
55
+ }
56
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
57
+ const judgeId = argv.find((_a, i) => argv[i - 1] === "--judge");
58
+ const subcommand = argv.find((a) => ["list", "show", "set", "reset"].includes(a)) || "list";
59
+ const config = loadJudgeConfig();
60
+ if (subcommand === "list") {
61
+ const judges = defaultRegistry.getJudges();
62
+ const overrideMap = new Map(config.overrides.map((o) => [o.judgeId, o]));
63
+ if (format === "json") {
64
+ console.log(JSON.stringify({
65
+ judges: judges.map((j) => ({
66
+ id: j.id,
67
+ hasOverride: overrideMap.has(j.id),
68
+ override: overrideMap.get(j.id) || null,
69
+ })),
70
+ }, null, 2));
71
+ return;
72
+ }
73
+ console.log(`\n Judge Configuration (${judges.length} judges)\n ─────────────────────────────`);
74
+ for (const j of judges) {
75
+ const override = overrideMap.get(j.id);
76
+ if (override) {
77
+ const icon = override.enabled ? "⚙️" : "⬜";
78
+ console.log(` ${icon} ${j.id} — sensitivity: ${override.sensitivityMultiplier}x, min: ${override.minSeverity}`);
79
+ }
80
+ else {
81
+ console.log(` ✅ ${j.id} — defaults`);
82
+ }
83
+ }
84
+ console.log();
85
+ return;
86
+ }
87
+ if (!judgeId) {
88
+ console.error("Error: --judge is required.");
89
+ process.exitCode = 1;
90
+ return;
91
+ }
92
+ if (subcommand === "reset") {
93
+ const idx = config.overrides.findIndex((o) => o.judgeId === judgeId);
94
+ if (idx >= 0) {
95
+ config.overrides.splice(idx, 1);
96
+ saveJudgeConfig(config);
97
+ console.log(`Reset '${judgeId}' to defaults.`);
98
+ }
99
+ else {
100
+ console.log(`No override found for '${judgeId}'.`);
101
+ }
102
+ return;
103
+ }
104
+ if (subcommand === "set") {
105
+ const sensitivityStr = argv.find((_a, i) => argv[i - 1] === "--sensitivity");
106
+ const minSeverity = argv.find((_a, i) => argv[i - 1] === "--min-severity");
107
+ const enabledStr = argv.find((_a, i) => argv[i - 1] === "--enabled");
108
+ const notes = argv.find((_a, i) => argv[i - 1] === "--notes");
109
+ let override = config.overrides.find((o) => o.judgeId === judgeId);
110
+ if (!override) {
111
+ override = {
112
+ judgeId,
113
+ enabled: true,
114
+ sensitivityMultiplier: 1.0,
115
+ minSeverity: "low",
116
+ customThresholds: {},
117
+ notes: "",
118
+ };
119
+ config.overrides.push(override);
120
+ }
121
+ if (sensitivityStr)
122
+ override.sensitivityMultiplier = parseFloat(sensitivityStr);
123
+ if (minSeverity)
124
+ override.minSeverity = minSeverity;
125
+ if (enabledStr)
126
+ override.enabled = enabledStr === "true";
127
+ if (notes)
128
+ override.notes = notes;
129
+ saveJudgeConfig(config);
130
+ console.log(`Updated '${judgeId}': sensitivity=${override.sensitivityMultiplier}x, min=${override.minSeverity}, enabled=${override.enabled}`);
131
+ return;
132
+ }
133
+ // Show
134
+ const override = config.overrides.find((o) => o.judgeId === judgeId);
135
+ if (format === "json") {
136
+ console.log(JSON.stringify({ judgeId, hasOverride: !!override, override: override || null }, null, 2));
137
+ return;
138
+ }
139
+ console.log(`\n Judge: ${judgeId}\n ─────────────────────────────`);
140
+ if (override) {
141
+ console.log(` Enabled: ${override.enabled}`);
142
+ console.log(` Sensitivity: ${override.sensitivityMultiplier}x`);
143
+ console.log(` Min severity: ${override.minSeverity}`);
144
+ if (override.notes)
145
+ console.log(` Notes: ${override.notes}`);
146
+ }
147
+ else {
148
+ console.log(` Using defaults (no overrides set)`);
149
+ }
150
+ console.log();
151
+ }
152
+ //# sourceMappingURL=judge-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"judge-config.js","sourceRoot":"","sources":["../../src/commands/judge-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Review-annotate — Generate GitHub-compatible PR annotations from findings.
3
+ */
4
+ export declare function runReviewAnnotate(argv: string[]): void;
5
+ //# sourceMappingURL=review-annotate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-annotate.d.ts","sourceRoot":"","sources":["../../src/commands/review-annotate.ts"],"names":[],"mappings":"AAAA;;GAEG;AA4EH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA8EtD"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Review-annotate — Generate GitHub-compatible PR annotations from findings.
3
+ */
4
+ import { readFileSync } from "fs";
5
+ // ─── Severity mapping ──────────────────────────────────────────────────────
6
+ function severityToLevel(severity) {
7
+ switch (severity) {
8
+ case "critical":
9
+ case "high":
10
+ return "failure";
11
+ case "medium":
12
+ return "warning";
13
+ default:
14
+ return "notice";
15
+ }
16
+ }
17
+ // ─── Annotation generation ─────────────────────────────────────────────────
18
+ function findingToAnnotation(finding, defaultPath) {
19
+ const line = finding.lineNumbers?.[0] || 1;
20
+ return {
21
+ path: defaultPath,
22
+ start_line: line,
23
+ end_line: line,
24
+ annotation_level: severityToLevel(finding.severity || "low"),
25
+ title: `[${finding.severity || "low"}] ${finding.ruleId || "unknown"}`,
26
+ message: `${finding.title}\n\n${finding.description || ""}\n\nRecommendation: ${finding.recommendation || "Review this finding."}`.trim(),
27
+ };
28
+ }
29
+ // ─── Output formatters ─────────────────────────────────────────────────────
30
+ function formatGitHubActions(annotations) {
31
+ return annotations
32
+ .map((a) => {
33
+ const level = a.annotation_level === "failure" ? "error" : a.annotation_level;
34
+ const msg = a.message.replace(/\n/g, "%0A");
35
+ return `::${level} file=${a.path},line=${a.start_line},title=${a.title}::${msg}`;
36
+ })
37
+ .join("\n");
38
+ }
39
+ function formatCheckRun(annotations) {
40
+ return JSON.stringify({
41
+ name: "Judges Panel Review",
42
+ conclusion: annotations.some((a) => a.annotation_level === "failure") ? "failure" : "success",
43
+ output: {
44
+ title: "Judges Panel Review",
45
+ summary: `${annotations.length} annotation(s) from Judges Panel review`,
46
+ annotations: annotations.slice(0, 50),
47
+ },
48
+ }, null, 2);
49
+ }
50
+ // ─── CLI ────────────────────────────────────────────────────────────────────
51
+ export function runReviewAnnotate(argv) {
52
+ if (argv.includes("--help") || argv.includes("-h")) {
53
+ console.log(`
54
+ judges review-annotate — Generate PR annotations from findings
55
+
56
+ Usage:
57
+ judges review-annotate --input verdict.json --file src/app.ts
58
+ judges review-annotate --input verdict.json --style github-actions
59
+ judges review-annotate --input verdict.json --style check-run
60
+ judges review-annotate --format json
61
+
62
+ Options:
63
+ --input <file> TribunalVerdict JSON file (required)
64
+ --file <path> Source file path for annotations (default: "unknown")
65
+ --style <type> Output style: github-actions, check-run, json (default: github-actions)
66
+ --min-severity <s> Minimum severity to annotate (default: low)
67
+ --limit <n> Maximum annotations (default: 50, GitHub limit)
68
+ --format json Raw JSON annotations
69
+ --help, -h Show this help
70
+
71
+ Styles:
72
+ github-actions ::error/::warning/::notice workflow commands
73
+ check-run Check Run API payload format
74
+ json Raw annotation JSON array
75
+
76
+ Generates annotations compatible with GitHub Actions workflow commands
77
+ or Check Run API payloads.
78
+ `);
79
+ return;
80
+ }
81
+ const inputPath = argv.find((_a, i) => argv[i - 1] === "--input");
82
+ const filePath = argv.find((_a, i) => argv[i - 1] === "--file") || "unknown";
83
+ const style = argv.find((_a, i) => argv[i - 1] === "--style") || "github-actions";
84
+ const minSev = argv.find((_a, i) => argv[i - 1] === "--min-severity") || "low";
85
+ const limitStr = argv.find((_a, i) => argv[i - 1] === "--limit");
86
+ const limit = limitStr ? parseInt(limitStr, 10) : 50;
87
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
88
+ if (!inputPath) {
89
+ console.error("Error: --input is required. Provide a verdict JSON file.");
90
+ process.exitCode = 1;
91
+ return;
92
+ }
93
+ let verdict;
94
+ try {
95
+ verdict = JSON.parse(readFileSync(inputPath, "utf-8"));
96
+ }
97
+ catch {
98
+ console.error(`Error: Cannot read or parse ${inputPath}`);
99
+ process.exitCode = 1;
100
+ return;
101
+ }
102
+ const sevOrder = { critical: 0, high: 1, medium: 2, low: 3 };
103
+ const minLevel = sevOrder[minSev] ?? 3;
104
+ let findings = (verdict.findings || []).filter((f) => (sevOrder[f.severity || "low"] ?? 3) <= minLevel);
105
+ findings = findings.slice(0, limit);
106
+ const annotations = findings.map((f) => findingToAnnotation(f, filePath));
107
+ if (format === "json") {
108
+ console.log(JSON.stringify(annotations, null, 2));
109
+ return;
110
+ }
111
+ switch (style) {
112
+ case "check-run":
113
+ console.log(formatCheckRun(annotations));
114
+ break;
115
+ case "json":
116
+ console.log(JSON.stringify(annotations, null, 2));
117
+ break;
118
+ default:
119
+ console.log(formatGitHubActions(annotations));
120
+ break;
121
+ }
122
+ }
123
+ //# sourceMappingURL=review-annotate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-annotate.js","sourceRoot":"","sources":["../../src/commands/review-annotate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Review-checkpoint — Save and restore review state checkpoints.
3
+ */
4
+ export declare function runReviewCheckpoint(argv: string[]): void;
5
+ //# sourceMappingURL=review-checkpoint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-checkpoint.d.ts","sourceRoot":"","sources":["../../src/commands/review-checkpoint.ts"],"names":[],"mappings":"AAAA;;GAEG;AAqDH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA2JxD"}
@@ -0,0 +1,164 @@
1
+ /**
2
+ * Review-checkpoint — Save and restore review state checkpoints.
3
+ */
4
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
5
+ import { execSync } from "child_process";
6
+ import { join, dirname } from "path";
7
+ // ─── Storage ────────────────────────────────────────────────────────────────
8
+ const CHECKPOINT_DIR = join(".judges", "checkpoints");
9
+ const INDEX_FILE = join(CHECKPOINT_DIR, "index.json");
10
+ function loadCheckpoints() {
11
+ if (!existsSync(INDEX_FILE))
12
+ return { version: "1.0.0", checkpoints: [] };
13
+ try {
14
+ return JSON.parse(readFileSync(INDEX_FILE, "utf-8"));
15
+ }
16
+ catch {
17
+ return { version: "1.0.0", checkpoints: [] };
18
+ }
19
+ }
20
+ function saveCheckpoints(store) {
21
+ mkdirSync(dirname(INDEX_FILE), { recursive: true });
22
+ writeFileSync(INDEX_FILE, JSON.stringify(store, null, 2), "utf-8");
23
+ }
24
+ function getCurrentCommit() {
25
+ try {
26
+ return execSync("git rev-parse HEAD", { encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"] }).trim();
27
+ }
28
+ catch {
29
+ return "unknown";
30
+ }
31
+ }
32
+ // ─── CLI ────────────────────────────────────────────────────────────────────
33
+ export function runReviewCheckpoint(argv) {
34
+ if (argv.includes("--help") || argv.includes("-h")) {
35
+ console.log(`
36
+ judges review-checkpoint — Save and restore review state
37
+
38
+ Usage:
39
+ judges review-checkpoint list List checkpoints
40
+ judges review-checkpoint save --name before-refactor Save checkpoint
41
+ judges review-checkpoint show --id cp-xxx Show checkpoint details
42
+ judges review-checkpoint compare --a cp-xxx --b cp-yyy Compare two checkpoints
43
+ judges review-checkpoint --format json JSON output
44
+
45
+ Subcommands:
46
+ list List all checkpoints
47
+ save Save current review state as checkpoint
48
+ show Show checkpoint details
49
+ compare Compare two checkpoints
50
+
51
+ Options:
52
+ --name <name> Checkpoint name (for save)
53
+ --id <id> Checkpoint ID (for show)
54
+ --a <id> First checkpoint (for compare)
55
+ --b <id> Second checkpoint (for compare)
56
+ --score <n> Score to record (for save)
57
+ --findings <n> Findings count (for save)
58
+ --notes <text> Notes about checkpoint
59
+ --format json JSON output
60
+ --help, -h Show this help
61
+
62
+ Checkpoints track review state over time, letting you compare
63
+ how code quality has changed between milestones.
64
+ `);
65
+ return;
66
+ }
67
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
68
+ const subcommand = argv.find((a) => ["list", "save", "show", "compare"].includes(a)) || "list";
69
+ const store = loadCheckpoints();
70
+ if (subcommand === "save") {
71
+ const name = argv.find((_a, i) => argv[i - 1] === "--name") || `checkpoint-${store.checkpoints.length + 1}`;
72
+ const scoreStr = argv.find((_a, i) => argv[i - 1] === "--score");
73
+ const findingsStr = argv.find((_a, i) => argv[i - 1] === "--findings");
74
+ const notes = argv.find((_a, i) => argv[i - 1] === "--notes") || "";
75
+ const cp = {
76
+ id: `cp-${Date.now().toString(36)}`,
77
+ name,
78
+ timestamp: new Date().toISOString(),
79
+ commit: getCurrentCommit(),
80
+ verdictFile: "",
81
+ score: parseInt(scoreStr || "0", 10),
82
+ findingsCount: parseInt(findingsStr || "0", 10),
83
+ notes,
84
+ };
85
+ store.checkpoints.push(cp);
86
+ saveCheckpoints(store);
87
+ console.log(`Saved checkpoint '${name}' (${cp.id})`);
88
+ return;
89
+ }
90
+ if (subcommand === "show") {
91
+ const id = argv.find((_a, i) => argv[i - 1] === "--id");
92
+ if (!id) {
93
+ console.error("Error: --id is required.");
94
+ process.exitCode = 1;
95
+ return;
96
+ }
97
+ const cp = store.checkpoints.find((c) => c.id === id);
98
+ if (!cp) {
99
+ console.error(`Error: Checkpoint '${id}' not found.`);
100
+ process.exitCode = 1;
101
+ return;
102
+ }
103
+ if (format === "json") {
104
+ console.log(JSON.stringify(cp, null, 2));
105
+ return;
106
+ }
107
+ console.log(`\n Checkpoint: ${cp.name}\n ─────────────────────────────`);
108
+ console.log(` ID: ${cp.id}`);
109
+ console.log(` Date: ${cp.timestamp}`);
110
+ console.log(` Commit: ${cp.commit.slice(0, 8)}`);
111
+ console.log(` Score: ${cp.score}/100`);
112
+ console.log(` Findings: ${cp.findingsCount}`);
113
+ if (cp.notes)
114
+ console.log(` Notes: ${cp.notes}`);
115
+ console.log();
116
+ return;
117
+ }
118
+ if (subcommand === "compare") {
119
+ const idA = argv.find((_a, i) => argv[i - 1] === "--a");
120
+ const idB = argv.find((_a, i) => argv[i - 1] === "--b");
121
+ if (!idA || !idB) {
122
+ console.error("Error: Both --a and --b checkpoint IDs are required.");
123
+ process.exitCode = 1;
124
+ return;
125
+ }
126
+ const cpA = store.checkpoints.find((c) => c.id === idA);
127
+ const cpB = store.checkpoints.find((c) => c.id === idB);
128
+ if (!cpA || !cpB) {
129
+ console.error("Error: One or both checkpoints not found.");
130
+ process.exitCode = 1;
131
+ return;
132
+ }
133
+ const scoreDelta = cpB.score - cpA.score;
134
+ const findingsDelta = cpB.findingsCount - cpA.findingsCount;
135
+ if (format === "json") {
136
+ console.log(JSON.stringify({ a: cpA, b: cpB, scoreDelta, findingsDelta }, null, 2));
137
+ return;
138
+ }
139
+ console.log(`\n Checkpoint Comparison\n ─────────────────────────────`);
140
+ console.log(` A: ${cpA.name} (${cpA.timestamp.slice(0, 10)})`);
141
+ console.log(` B: ${cpB.name} (${cpB.timestamp.slice(0, 10)})`);
142
+ console.log();
143
+ console.log(` Score: ${cpA.score} → ${cpB.score} (${scoreDelta >= 0 ? "+" : ""}${scoreDelta})`);
144
+ console.log(` Findings: ${cpA.findingsCount} → ${cpB.findingsCount} (${findingsDelta >= 0 ? "+" : ""}${findingsDelta})`);
145
+ const icon = scoreDelta > 0 ? "📈" : scoreDelta < 0 ? "📉" : "➡️";
146
+ console.log(`\n Trend: ${icon} ${scoreDelta > 0 ? "Improving" : scoreDelta < 0 ? "Declining" : "Stable"}`);
147
+ console.log();
148
+ return;
149
+ }
150
+ // List
151
+ if (format === "json") {
152
+ console.log(JSON.stringify(store, null, 2));
153
+ return;
154
+ }
155
+ console.log(`\n Checkpoints (${store.checkpoints.length})\n ─────────────────────────────`);
156
+ if (store.checkpoints.length === 0) {
157
+ console.log(" No checkpoints. Save one with: judges review-checkpoint save --name <name> --score <n>");
158
+ }
159
+ for (const cp of store.checkpoints) {
160
+ console.log(` 📌 ${cp.id} — ${cp.name} (${cp.timestamp.slice(0, 10)}) score: ${cp.score}, findings: ${cp.findingsCount}`);
161
+ }
162
+ console.log();
163
+ }
164
+ //# sourceMappingURL=review-checkpoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-checkpoint.js","sourceRoot":"","sources":["../../src/commands/review-checkpoint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Review-comment — Generate inline source code comments from review findings.
3
+ */
4
+ export declare function runReviewComment(argv: string[]): void;
5
+ //# sourceMappingURL=review-comment.d.ts.map