@kevinrabun/judges 3.73.0 → 3.75.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 +24 -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/finding-category.d.ts +5 -0
  6. package/dist/commands/finding-category.d.ts.map +1 -0
  7. package/dist/commands/finding-category.js +110 -0
  8. package/dist/commands/finding-category.js.map +1 -0
  9. package/dist/commands/finding-confidence-filter.d.ts +5 -0
  10. package/dist/commands/finding-confidence-filter.d.ts.map +1 -0
  11. package/dist/commands/finding-confidence-filter.js +78 -0
  12. package/dist/commands/finding-confidence-filter.js.map +1 -0
  13. package/dist/commands/finding-export-csv.d.ts +5 -0
  14. package/dist/commands/finding-export-csv.d.ts.map +1 -0
  15. package/dist/commands/finding-export-csv.js +79 -0
  16. package/dist/commands/finding-export-csv.js.map +1 -0
  17. package/dist/commands/finding-priority-queue.d.ts +5 -0
  18. package/dist/commands/finding-priority-queue.d.ts.map +1 -0
  19. package/dist/commands/finding-priority-queue.js +132 -0
  20. package/dist/commands/finding-priority-queue.js.map +1 -0
  21. package/dist/commands/finding-remediation-plan.d.ts +5 -0
  22. package/dist/commands/finding-remediation-plan.d.ts.map +1 -0
  23. package/dist/commands/finding-remediation-plan.js +108 -0
  24. package/dist/commands/finding-remediation-plan.js.map +1 -0
  25. package/dist/commands/finding-resolution.d.ts +5 -0
  26. package/dist/commands/finding-resolution.d.ts.map +1 -0
  27. package/dist/commands/finding-resolution.js +143 -0
  28. package/dist/commands/finding-resolution.js.map +1 -0
  29. package/dist/commands/review-checklist.d.ts +5 -0
  30. package/dist/commands/review-checklist.d.ts.map +1 -0
  31. package/dist/commands/review-checklist.js +145 -0
  32. package/dist/commands/review-checklist.js.map +1 -0
  33. package/dist/commands/review-config-validate.d.ts +5 -0
  34. package/dist/commands/review-config-validate.d.ts.map +1 -0
  35. package/dist/commands/review-config-validate.js +111 -0
  36. package/dist/commands/review-config-validate.js.map +1 -0
  37. package/dist/commands/review-diff-annotate.d.ts +5 -0
  38. package/dist/commands/review-diff-annotate.d.ts.map +1 -0
  39. package/dist/commands/review-diff-annotate.js +105 -0
  40. package/dist/commands/review-diff-annotate.js.map +1 -0
  41. package/dist/commands/review-lock.d.ts +5 -0
  42. package/dist/commands/review-lock.d.ts.map +1 -0
  43. package/dist/commands/review-lock.js +108 -0
  44. package/dist/commands/review-lock.js.map +1 -0
  45. package/dist/commands/review-note.d.ts +5 -0
  46. package/dist/commands/review-note.d.ts.map +1 -0
  47. package/dist/commands/review-note.js +105 -0
  48. package/dist/commands/review-note.js.map +1 -0
  49. package/dist/commands/review-owner.d.ts +5 -0
  50. package/dist/commands/review-owner.d.ts.map +1 -0
  51. package/dist/commands/review-owner.js +130 -0
  52. package/dist/commands/review-owner.js.map +1 -0
  53. package/dist/commands/review-rate-limit.d.ts +5 -0
  54. package/dist/commands/review-rate-limit.d.ts.map +1 -0
  55. package/dist/commands/review-rate-limit.js +131 -0
  56. package/dist/commands/review-rate-limit.js.map +1 -0
  57. package/dist/commands/review-skip-rule.d.ts +5 -0
  58. package/dist/commands/review-skip-rule.d.ts.map +1 -0
  59. package/dist/commands/review-skip-rule.js +106 -0
  60. package/dist/commands/review-skip-rule.js.map +1 -0
  61. package/dist/commands/review-snapshot-diff.d.ts +5 -0
  62. package/dist/commands/review-snapshot-diff.d.ts.map +1 -0
  63. package/dist/commands/review-snapshot-diff.js +101 -0
  64. package/dist/commands/review-snapshot-diff.js.map +1 -0
  65. package/dist/commands/review-timeline.d.ts +5 -0
  66. package/dist/commands/review-timeline.d.ts.map +1 -0
  67. package/dist/commands/review-timeline.js +77 -0
  68. package/dist/commands/review-timeline.js.map +1 -0
  69. package/package.json +1 -1
  70. package/server.json +2 -2
@@ -0,0 +1,143 @@
1
+ /**
2
+ * Finding-resolution — Track finding resolution status.
3
+ */
4
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
5
+ import { dirname } from "path";
6
+ // ─── Storage ────────────────────────────────────────────────────────────────
7
+ const RES_FILE = ".judges/finding-resolutions.json";
8
+ function loadStore() {
9
+ if (!existsSync(RES_FILE))
10
+ return { version: "1.0.0", entries: [] };
11
+ try {
12
+ return JSON.parse(readFileSync(RES_FILE, "utf-8"));
13
+ }
14
+ catch {
15
+ return { version: "1.0.0", entries: [] };
16
+ }
17
+ }
18
+ function saveStore(store) {
19
+ mkdirSync(dirname(RES_FILE), { recursive: true });
20
+ writeFileSync(RES_FILE, JSON.stringify(store, null, 2), "utf-8");
21
+ }
22
+ function generateId() {
23
+ return `res-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 6)}`;
24
+ }
25
+ const VALID_STATUSES = ["open", "fixed", "wont-fix", "deferred", "false-positive"];
26
+ // ─── CLI ────────────────────────────────────────────────────────────────────
27
+ export function runFindingResolution(argv) {
28
+ if (argv.includes("--help") || argv.includes("-h")) {
29
+ console.log(`
30
+ judges finding-resolution — Track finding resolution status
31
+
32
+ Usage:
33
+ judges finding-resolution set --rule SEC-001 --status fixed --by "dev"
34
+ judges finding-resolution list
35
+ judges finding-resolution list --status open
36
+ judges finding-resolution stats
37
+ judges finding-resolution remove --id <id>
38
+ judges finding-resolution clear
39
+
40
+ Subcommands:
41
+ set Set resolution status for a finding
42
+ list List resolutions (optionally filter by status)
43
+ stats Show resolution statistics
44
+ remove Remove a resolution entry
45
+ clear Clear all resolutions
46
+
47
+ Status values: open, fixed, wont-fix, deferred, false-positive
48
+
49
+ Options:
50
+ --rule <id> Rule ID
51
+ --title <text> Finding title
52
+ --status <status> Resolution status
53
+ --by <name> Who resolved it
54
+ --note <text> Resolution note
55
+ --format json JSON output
56
+ --help, -h Show this help
57
+
58
+ Resolutions stored in .judges/finding-resolutions.json.
59
+ `);
60
+ return;
61
+ }
62
+ const subcommand = argv.find((a) => ["set", "list", "stats", "remove", "clear"].includes(a));
63
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
64
+ const store = loadStore();
65
+ if (subcommand === "set") {
66
+ const ruleId = argv.find((_a, i) => argv[i - 1] === "--rule") || "";
67
+ const title = argv.find((_a, i) => argv[i - 1] === "--title") || "";
68
+ const status = argv.find((_a, i) => argv[i - 1] === "--status");
69
+ const resolvedBy = argv.find((_a, i) => argv[i - 1] === "--by") || "";
70
+ const note = argv.find((_a, i) => argv[i - 1] === "--note") || "";
71
+ if (!status || !VALID_STATUSES.includes(status)) {
72
+ console.log(`Invalid status. Use: ${VALID_STATUSES.join(", ")}`);
73
+ return;
74
+ }
75
+ const entry = {
76
+ id: generateId(),
77
+ ruleId,
78
+ title,
79
+ status,
80
+ resolvedBy,
81
+ resolvedAt: new Date().toISOString(),
82
+ note,
83
+ };
84
+ store.entries.push(entry);
85
+ saveStore(store);
86
+ console.log(`Resolution set: ${ruleId} → ${status}`);
87
+ return;
88
+ }
89
+ if (subcommand === "remove") {
90
+ const id = argv.find((_a, i) => argv[i - 1] === "--id") || "";
91
+ const before = store.entries.length;
92
+ store.entries = store.entries.filter((e) => e.id !== id);
93
+ saveStore(store);
94
+ console.log(before > store.entries.length ? `Removed ${id}.` : `${id} not found.`);
95
+ return;
96
+ }
97
+ if (subcommand === "clear") {
98
+ saveStore({ version: "1.0.0", entries: [] });
99
+ console.log("Resolutions cleared.");
100
+ return;
101
+ }
102
+ if (subcommand === "stats") {
103
+ if (store.entries.length === 0) {
104
+ console.log("No resolutions tracked.");
105
+ return;
106
+ }
107
+ const byStatus = new Map();
108
+ for (const e of store.entries) {
109
+ byStatus.set(e.status, (byStatus.get(e.status) || 0) + 1);
110
+ }
111
+ if (format === "json") {
112
+ console.log(JSON.stringify({ total: store.entries.length, byStatus: Object.fromEntries(byStatus) }, null, 2));
113
+ return;
114
+ }
115
+ console.log(`\nResolution Stats: ${store.entries.length} total`);
116
+ console.log("─".repeat(40));
117
+ for (const [s, c] of [...byStatus.entries()].sort((a, b) => b[1] - a[1])) {
118
+ const pct = ((c / store.entries.length) * 100).toFixed(0);
119
+ console.log(` ${s.padEnd(16)} ${c} (${pct}%)`);
120
+ }
121
+ return;
122
+ }
123
+ // Default: list
124
+ const statusFilter = argv.find((_a, i) => argv[i - 1] === "--status") || "";
125
+ const entries = statusFilter ? store.entries.filter((e) => e.status === statusFilter) : store.entries;
126
+ if (entries.length === 0) {
127
+ console.log("No resolutions found.");
128
+ return;
129
+ }
130
+ if (format === "json") {
131
+ console.log(JSON.stringify(entries, null, 2));
132
+ return;
133
+ }
134
+ console.log(`\nFinding Resolutions (${entries.length}):`);
135
+ console.log("─".repeat(60));
136
+ for (const e of entries) {
137
+ console.log(` ${e.id} ${e.ruleId} [${e.status}] ${e.title}`);
138
+ if (e.note)
139
+ console.log(` note: ${e.note}`);
140
+ }
141
+ console.log("─".repeat(60));
142
+ }
143
+ //# sourceMappingURL=finding-resolution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finding-resolution.js","sourceRoot":"","sources":["../../src/commands/finding-resolution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Review-checklist — Pre/post-review checklists for consistency.
3
+ */
4
+ export declare function runReviewChecklist(argv: string[]): void;
5
+ //# sourceMappingURL=review-checklist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-checklist.d.ts","sourceRoot":"","sources":["../../src/commands/review-checklist.ts"],"names":[],"mappings":"AAAA;;GAEG;AA2CH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA+HvD"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Review-checklist — Pre/post-review checklists for consistency.
3
+ */
4
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
5
+ import { dirname } from "path";
6
+ // ─── Storage ────────────────────────────────────────────────────────────────
7
+ const CL_FILE = ".judges/checklists.json";
8
+ function loadStore() {
9
+ if (!existsSync(CL_FILE))
10
+ return { version: "1.0.0", checklists: [] };
11
+ try {
12
+ return JSON.parse(readFileSync(CL_FILE, "utf-8"));
13
+ }
14
+ catch {
15
+ return { version: "1.0.0", checklists: [] };
16
+ }
17
+ }
18
+ function saveStore(store) {
19
+ mkdirSync(dirname(CL_FILE), { recursive: true });
20
+ writeFileSync(CL_FILE, JSON.stringify(store, null, 2), "utf-8");
21
+ }
22
+ // ─── CLI ────────────────────────────────────────────────────────────────────
23
+ export function runReviewChecklist(argv) {
24
+ if (argv.includes("--help") || argv.includes("-h")) {
25
+ console.log(`
26
+ judges review-checklist — Pre/post-review checklists
27
+
28
+ Usage:
29
+ judges review-checklist create --name pre-review --items "check tests,check lint,check types"
30
+ judges review-checklist show --name pre-review
31
+ judges review-checklist check --name pre-review --item 0
32
+ judges review-checklist reset --name pre-review
33
+ judges review-checklist list
34
+ judges review-checklist remove --name pre-review
35
+
36
+ Subcommands:
37
+ create Create a checklist
38
+ show Show a checklist
39
+ check Toggle a checklist item
40
+ reset Reset all items to unchecked
41
+ list List all checklists
42
+ remove Remove a checklist
43
+
44
+ Options:
45
+ --name <text> Checklist name
46
+ --items <csv> Comma-separated checklist items
47
+ --item <n> Item index (0-based)
48
+ --format json JSON output
49
+ --help, -h Show this help
50
+
51
+ Checklists stored in .judges/checklists.json.
52
+ `);
53
+ return;
54
+ }
55
+ const subcommand = argv.find((a) => ["create", "show", "check", "reset", "list", "remove"].includes(a));
56
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
57
+ const store = loadStore();
58
+ const name = argv.find((_a, i) => argv[i - 1] === "--name") || "";
59
+ if (subcommand === "create") {
60
+ const itemsRaw = argv.find((_a, i) => argv[i - 1] === "--items") || "";
61
+ const items = itemsRaw
62
+ .split(",")
63
+ .map((s) => s.trim())
64
+ .filter(Boolean)
65
+ .map((label) => ({ label, checked: false }));
66
+ if (!name || items.length === 0) {
67
+ console.log("Specify --name and --items.");
68
+ return;
69
+ }
70
+ store.checklists = store.checklists.filter((c) => c.name !== name);
71
+ store.checklists.push({ version: "1.0.0", name, items });
72
+ saveStore(store);
73
+ console.log(`Checklist "${name}" created with ${items.length} items.`);
74
+ return;
75
+ }
76
+ if (subcommand === "show") {
77
+ const cl = store.checklists.find((c) => c.name === name);
78
+ if (!cl) {
79
+ console.log(`Checklist "${name}" not found.`);
80
+ return;
81
+ }
82
+ if (format === "json") {
83
+ console.log(JSON.stringify(cl, null, 2));
84
+ return;
85
+ }
86
+ console.log(`\nChecklist: ${cl.name}`);
87
+ console.log("─".repeat(40));
88
+ cl.items.forEach((item, i) => {
89
+ console.log(` ${i}. [${item.checked ? "x" : " "}] ${item.label}`);
90
+ });
91
+ const done = cl.items.filter((i) => i.checked).length;
92
+ console.log(`\n ${done}/${cl.items.length} complete`);
93
+ return;
94
+ }
95
+ if (subcommand === "check") {
96
+ const cl = store.checklists.find((c) => c.name === name);
97
+ if (!cl) {
98
+ console.log(`Checklist "${name}" not found.`);
99
+ return;
100
+ }
101
+ const idx = parseInt(argv.find((_a, i) => argv[i - 1] === "--item") || "-1", 10);
102
+ if (idx < 0 || idx >= cl.items.length) {
103
+ console.log(`Invalid item index.`);
104
+ return;
105
+ }
106
+ cl.items[idx].checked = !cl.items[idx].checked;
107
+ saveStore(store);
108
+ console.log(`${cl.items[idx].checked ? "Checked" : "Unchecked"}: ${cl.items[idx].label}`);
109
+ return;
110
+ }
111
+ if (subcommand === "reset") {
112
+ const cl = store.checklists.find((c) => c.name === name);
113
+ if (!cl) {
114
+ console.log(`Checklist "${name}" not found.`);
115
+ return;
116
+ }
117
+ for (const item of cl.items)
118
+ item.checked = false;
119
+ saveStore(store);
120
+ console.log(`Checklist "${name}" reset.`);
121
+ return;
122
+ }
123
+ if (subcommand === "remove") {
124
+ const before = store.checklists.length;
125
+ store.checklists = store.checklists.filter((c) => c.name !== name);
126
+ saveStore(store);
127
+ console.log(before > store.checklists.length ? `Removed "${name}".` : `"${name}" not found.`);
128
+ return;
129
+ }
130
+ // Default: list
131
+ if (store.checklists.length === 0) {
132
+ console.log("No checklists. Use 'judges review-checklist create' to add one.");
133
+ return;
134
+ }
135
+ if (format === "json") {
136
+ console.log(JSON.stringify(store.checklists, null, 2));
137
+ return;
138
+ }
139
+ console.log("\nChecklists:");
140
+ for (const cl of store.checklists) {
141
+ const done = cl.items.filter((i) => i.checked).length;
142
+ console.log(` ${cl.name}: ${done}/${cl.items.length} complete`);
143
+ }
144
+ }
145
+ //# sourceMappingURL=review-checklist.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-checklist.js","sourceRoot":"","sources":["../../src/commands/review-checklist.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Review-config-validate — Validate review configuration files.
3
+ */
4
+ export declare function runReviewConfigValidate(argv: string[]): void;
5
+ //# sourceMappingURL=review-config-validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-config-validate.d.ts","sourceRoot":"","sources":["../../src/commands/review-config-validate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAcH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAyH5D"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Review-config-validate — Validate review configuration files.
3
+ */
4
+ import { readFileSync, existsSync } from "fs";
5
+ // ─── CLI ────────────────────────────────────────────────────────────────────
6
+ export function runReviewConfigValidate(argv) {
7
+ if (argv.includes("--help") || argv.includes("-h")) {
8
+ console.log(`
9
+ judges review-config-validate — Validate review configuration files
10
+
11
+ Usage:
12
+ judges review-config-validate
13
+ judges review-config-validate --file .judgesrc
14
+ judges review-config-validate --strict
15
+
16
+ Options:
17
+ --file <path> Config file to validate (default: .judgesrc)
18
+ --strict Enable strict validation
19
+ --format json JSON output
20
+ --help, -h Show this help
21
+
22
+ Checks configuration for common errors and best practices.
23
+ `);
24
+ return;
25
+ }
26
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
27
+ const configPath = argv.find((_a, i) => argv[i - 1] === "--file") || ".judgesrc";
28
+ const strict = argv.includes("--strict");
29
+ if (!existsSync(configPath)) {
30
+ console.log(`Config file not found: ${configPath}`);
31
+ console.log("Create one with 'judges init' or specify --file.");
32
+ return;
33
+ }
34
+ let config;
35
+ try {
36
+ config = JSON.parse(readFileSync(configPath, "utf-8"));
37
+ }
38
+ catch {
39
+ console.log(`Failed to parse config: ${configPath}`);
40
+ return;
41
+ }
42
+ const issues = [];
43
+ // Check preset
44
+ const validPresets = [
45
+ "strict",
46
+ "lenient",
47
+ "security-only",
48
+ "startup",
49
+ "compliance",
50
+ "performance",
51
+ "react",
52
+ "express",
53
+ "fastapi",
54
+ "django",
55
+ "spring-boot",
56
+ "rails",
57
+ "nextjs",
58
+ ];
59
+ if (config.preset && typeof config.preset === "string" && !validPresets.includes(config.preset)) {
60
+ issues.push({ field: "preset", message: `Unknown preset "${config.preset}"`, severity: "warning" });
61
+ }
62
+ // Check disabledJudges
63
+ if (config.disabledJudges && !Array.isArray(config.disabledJudges)) {
64
+ issues.push({ field: "disabledJudges", message: "Should be an array of judge IDs", severity: "error" });
65
+ }
66
+ // Check disabledRules
67
+ if (config.disabledRules && !Array.isArray(config.disabledRules)) {
68
+ issues.push({ field: "disabledRules", message: "Should be an array of rule IDs", severity: "error" });
69
+ }
70
+ // Check minSeverity
71
+ const validSeverities = ["critical", "high", "medium", "low", "info"];
72
+ if (config.minSeverity && typeof config.minSeverity === "string" && !validSeverities.includes(config.minSeverity)) {
73
+ issues.push({ field: "minSeverity", message: `Invalid severity "${config.minSeverity}"`, severity: "error" });
74
+ }
75
+ // Check ruleOverrides
76
+ if (config.ruleOverrides && typeof config.ruleOverrides !== "object") {
77
+ issues.push({ field: "ruleOverrides", message: "Should be an object", severity: "error" });
78
+ }
79
+ // Strict checks
80
+ if (strict) {
81
+ if (!config.preset) {
82
+ issues.push({ field: "preset", message: "No preset specified (recommended)", severity: "warning" });
83
+ }
84
+ if (Array.isArray(config.disabledJudges) && config.disabledJudges.length > 10) {
85
+ issues.push({
86
+ field: "disabledJudges",
87
+ message: "Many judges disabled — consider using a preset instead",
88
+ severity: "warning",
89
+ });
90
+ }
91
+ }
92
+ const errors = issues.filter((i) => i.severity === "error");
93
+ const warnings = issues.filter((i) => i.severity === "warning");
94
+ if (format === "json") {
95
+ console.log(JSON.stringify({ valid: errors.length === 0, errors: errors.length, warnings: warnings.length, issues }, null, 2));
96
+ return;
97
+ }
98
+ if (issues.length === 0) {
99
+ console.log(`Config valid: ${configPath}`);
100
+ return;
101
+ }
102
+ console.log(`\nConfig Validation: ${configPath}`);
103
+ console.log("─".repeat(50));
104
+ for (const i of issues) {
105
+ const icon = i.severity === "error" ? "ERROR" : "WARN";
106
+ console.log(` [${icon}] ${i.field}: ${i.message}`);
107
+ }
108
+ console.log("─".repeat(50));
109
+ console.log(`${errors.length} error(s), ${warnings.length} warning(s).`);
110
+ }
111
+ //# sourceMappingURL=review-config-validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-config-validate.js","sourceRoot":"","sources":["../../src/commands/review-config-validate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Review-diff-annotate — Annotate diff hunks with review findings.
3
+ */
4
+ export declare function runReviewDiffAnnotate(argv: string[]): void;
5
+ //# sourceMappingURL=review-diff-annotate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-diff-annotate.d.ts","sourceRoot":"","sources":["../../src/commands/review-diff-annotate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA0H1D"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Review-diff-annotate — Annotate diff hunks with review findings.
3
+ */
4
+ import { readFileSync, existsSync } from "fs";
5
+ // ─── CLI ────────────────────────────────────────────────────────────────────
6
+ export function runReviewDiffAnnotate(argv) {
7
+ if (argv.includes("--help") || argv.includes("-h")) {
8
+ console.log(`
9
+ judges review-diff-annotate — Annotate diff hunks with review findings
10
+
11
+ Usage:
12
+ judges review-diff-annotate --diff changes.diff --results results.json
13
+
14
+ Options:
15
+ --diff <path> Path to unified diff file
16
+ --results <path> Path to review result JSON
17
+ --format json JSON output
18
+ --help, -h Show this help
19
+
20
+ Overlays review findings onto diff output, showing which changed
21
+ lines have associated findings.
22
+ `);
23
+ return;
24
+ }
25
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
26
+ const diffPath = argv.find((_a, i) => argv[i - 1] === "--diff") || "";
27
+ const resultsPath = argv.find((_a, i) => argv[i - 1] === "--results") || "";
28
+ if (!diffPath || !resultsPath) {
29
+ console.log("Specify --diff and --results paths.");
30
+ return;
31
+ }
32
+ if (!existsSync(diffPath)) {
33
+ console.log(`Diff file not found: ${diffPath}`);
34
+ return;
35
+ }
36
+ if (!existsSync(resultsPath)) {
37
+ console.log(`Results file not found: ${resultsPath}`);
38
+ return;
39
+ }
40
+ const diffContent = readFileSync(diffPath, "utf-8");
41
+ let data;
42
+ try {
43
+ data = JSON.parse(readFileSync(resultsPath, "utf-8"));
44
+ }
45
+ catch {
46
+ console.log(`Failed to parse results: ${resultsPath}`);
47
+ return;
48
+ }
49
+ const findings = Array.isArray(data.findings) ? data.findings : [];
50
+ const lineMap = new Map();
51
+ for (const f of findings) {
52
+ if (Array.isArray(f.lineNumbers)) {
53
+ for (const ln of f.lineNumbers) {
54
+ const existing = lineMap.get(ln) || [];
55
+ existing.push(f);
56
+ lineMap.set(ln, existing);
57
+ }
58
+ }
59
+ }
60
+ // Parse diff and annotate
61
+ const diffLines = diffContent.split("\n");
62
+ const annotated = [];
63
+ let currentLine = 0;
64
+ for (const line of diffLines) {
65
+ // Parse hunk header for line numbers
66
+ const hunkMatch = line.match(/^@@\s+-\d+(?:,\d+)?\s+\+(\d+)/);
67
+ if (hunkMatch) {
68
+ currentLine = parseInt(hunkMatch[1], 10) - 1;
69
+ }
70
+ if (line.startsWith("+") && !line.startsWith("+++")) {
71
+ currentLine++;
72
+ const matched = lineMap.get(currentLine) || [];
73
+ annotated.push({ line, findings: matched });
74
+ }
75
+ else if (line.startsWith("-") && !line.startsWith("---")) {
76
+ annotated.push({ line, findings: [] });
77
+ }
78
+ else {
79
+ if (!line.startsWith("---") && !line.startsWith("+++") && !line.startsWith("@@")) {
80
+ currentLine++;
81
+ }
82
+ annotated.push({ line, findings: [] });
83
+ }
84
+ }
85
+ const annotatedCount = annotated.filter((a) => a.findings.length > 0).length;
86
+ if (format === "json") {
87
+ console.log(JSON.stringify({ totalLines: diffLines.length, annotatedLines: annotatedCount, findings: findings.length }, null, 2));
88
+ return;
89
+ }
90
+ console.log(`\nAnnotated Diff (${annotatedCount} lines with findings):`);
91
+ console.log("═".repeat(70));
92
+ for (const a of annotated) {
93
+ if (a.findings.length > 0) {
94
+ console.log(a.line);
95
+ for (const f of a.findings) {
96
+ console.log(` >>> [${String(f.severity || "?").toUpperCase()}] ${f.ruleId || ""}: ${f.title || ""}`);
97
+ }
98
+ }
99
+ else {
100
+ console.log(a.line);
101
+ }
102
+ }
103
+ console.log("═".repeat(70));
104
+ }
105
+ //# sourceMappingURL=review-diff-annotate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-diff-annotate.js","sourceRoot":"","sources":["../../src/commands/review-diff-annotate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Review-lock — Lock reviews to prevent accidental re-runs.
3
+ */
4
+ export declare function runReviewLock(argv: string[]): void;
5
+ //# sourceMappingURL=review-lock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-lock.d.ts","sourceRoot":"","sources":["../../src/commands/review-lock.ts"],"names":[],"mappings":"AAAA;;GAEG;AAsCH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAyFlD"}