@kevinrabun/judges 3.73.0 → 3.74.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 (38) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +56 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/finding-confidence-filter.d.ts +5 -0
  6. package/dist/commands/finding-confidence-filter.d.ts.map +1 -0
  7. package/dist/commands/finding-confidence-filter.js +78 -0
  8. package/dist/commands/finding-confidence-filter.js.map +1 -0
  9. package/dist/commands/finding-export-csv.d.ts +5 -0
  10. package/dist/commands/finding-export-csv.d.ts.map +1 -0
  11. package/dist/commands/finding-export-csv.js +79 -0
  12. package/dist/commands/finding-export-csv.js.map +1 -0
  13. package/dist/commands/finding-resolution.d.ts +5 -0
  14. package/dist/commands/finding-resolution.d.ts.map +1 -0
  15. package/dist/commands/finding-resolution.js +143 -0
  16. package/dist/commands/finding-resolution.js.map +1 -0
  17. package/dist/commands/review-note.d.ts +5 -0
  18. package/dist/commands/review-note.d.ts.map +1 -0
  19. package/dist/commands/review-note.js +105 -0
  20. package/dist/commands/review-note.js.map +1 -0
  21. package/dist/commands/review-owner.d.ts +5 -0
  22. package/dist/commands/review-owner.d.ts.map +1 -0
  23. package/dist/commands/review-owner.js +130 -0
  24. package/dist/commands/review-owner.js.map +1 -0
  25. package/dist/commands/review-skip-rule.d.ts +5 -0
  26. package/dist/commands/review-skip-rule.d.ts.map +1 -0
  27. package/dist/commands/review-skip-rule.js +106 -0
  28. package/dist/commands/review-skip-rule.js.map +1 -0
  29. package/dist/commands/review-snapshot-diff.d.ts +5 -0
  30. package/dist/commands/review-snapshot-diff.d.ts.map +1 -0
  31. package/dist/commands/review-snapshot-diff.js +101 -0
  32. package/dist/commands/review-snapshot-diff.js.map +1 -0
  33. package/dist/commands/review-timeline.d.ts +5 -0
  34. package/dist/commands/review-timeline.d.ts.map +1 -0
  35. package/dist/commands/review-timeline.js +77 -0
  36. package/dist/commands/review-timeline.js.map +1 -0
  37. package/package.json +1 -1
  38. package/server.json +2 -2
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Finding-confidence-filter — Filter findings by confidence level.
3
+ */
4
+ import { readFileSync, existsSync } from "fs";
5
+ // ─── CLI ────────────────────────────────────────────────────────────────────
6
+ export function runFindingConfidenceFilter(argv) {
7
+ if (argv.includes("--help") || argv.includes("-h")) {
8
+ console.log(`
9
+ judges finding-confidence-filter — Filter findings by confidence level
10
+
11
+ Usage:
12
+ judges finding-confidence-filter --file results.json --min 0.8
13
+ judges finding-confidence-filter --file results.json --tier high
14
+ judges finding-confidence-filter --file results.json --min 0.5 --max 0.9
15
+
16
+ Options:
17
+ --file <path> Path to review result JSON
18
+ --min <n> Minimum confidence (0.0–1.0)
19
+ --max <n> Maximum confidence (0.0–1.0)
20
+ --tier <level> Filter by tier: high, medium, low
21
+ --format json JSON output
22
+ --help, -h Show this help
23
+
24
+ Filters findings from a review result file based on confidence scores.
25
+ `);
26
+ return;
27
+ }
28
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
29
+ const filePath = argv.find((_a, i) => argv[i - 1] === "--file") || "";
30
+ const minConf = parseFloat(argv.find((_a, i) => argv[i - 1] === "--min") || "0");
31
+ const maxConf = parseFloat(argv.find((_a, i) => argv[i - 1] === "--max") || "1");
32
+ const tier = argv.find((_a, i) => argv[i - 1] === "--tier") || "";
33
+ if (!filePath) {
34
+ console.log("Specify --file <path> to a review result JSON.");
35
+ return;
36
+ }
37
+ if (!existsSync(filePath)) {
38
+ console.log(`File not found: ${filePath}`);
39
+ return;
40
+ }
41
+ let data;
42
+ try {
43
+ data = JSON.parse(readFileSync(filePath, "utf-8"));
44
+ }
45
+ catch {
46
+ console.log(`Failed to parse: ${filePath}`);
47
+ return;
48
+ }
49
+ const findings = Array.isArray(data.findings) ? data.findings : [];
50
+ const filtered = findings.filter((f) => {
51
+ const finding = f;
52
+ const conf = typeof finding.confidence === "number" ? finding.confidence : 0.5;
53
+ if (tier) {
54
+ const fTier = typeof finding.confidenceTier === "string" ? finding.confidenceTier : "";
55
+ return fTier.toLowerCase() === tier.toLowerCase();
56
+ }
57
+ return conf >= minConf && conf <= maxConf;
58
+ });
59
+ if (format === "json") {
60
+ console.log(JSON.stringify({ total: findings.length, filtered: filtered.length, findings: filtered }, null, 2));
61
+ return;
62
+ }
63
+ console.log(`\nConfidence Filter: ${filtered.length} of ${findings.length} findings`);
64
+ if (tier)
65
+ console.log(` Tier: ${tier}`);
66
+ else
67
+ console.log(` Range: ${minConf.toFixed(1)} – ${maxConf.toFixed(1)}`);
68
+ console.log("─".repeat(60));
69
+ for (const f of filtered) {
70
+ const conf = typeof f.confidence === "number" ? f.confidence.toFixed(2) : "?";
71
+ console.log(` [${String(f.severity || "?").toUpperCase()}] ${f.ruleId || ""} — ${f.title || "untitled"} (conf=${conf})`);
72
+ }
73
+ if (filtered.length === 0) {
74
+ console.log(" No findings match the filter.");
75
+ }
76
+ console.log("─".repeat(60));
77
+ }
78
+ //# sourceMappingURL=finding-confidence-filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finding-confidence-filter.js","sourceRoot":"","sources":["../../src/commands/finding-confidence-filter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Finding-export-csv — Export findings as CSV.
3
+ */
4
+ export declare function runFindingExportCsv(argv: string[]): void;
5
+ //# sourceMappingURL=finding-export-csv.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finding-export-csv.d.ts","sourceRoot":"","sources":["../../src/commands/finding-export-csv.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAkFxD"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Finding-export-csv — Export findings as CSV.
3
+ */
4
+ import { readFileSync, writeFileSync, existsSync } from "fs";
5
+ // ─── CLI ────────────────────────────────────────────────────────────────────
6
+ export function runFindingExportCsv(argv) {
7
+ if (argv.includes("--help") || argv.includes("-h")) {
8
+ console.log(`
9
+ judges finding-export-csv — Export findings as CSV
10
+
11
+ Usage:
12
+ judges finding-export-csv --file results.json
13
+ judges finding-export-csv --file results.json --out findings.csv
14
+
15
+ Options:
16
+ --file <path> Path to review result JSON
17
+ --out <path> Output CSV file (default: stdout)
18
+ --format json JSON output (metadata only)
19
+ --help, -h Show this help
20
+
21
+ Exports findings from a review result JSON file as CSV format.
22
+ `);
23
+ return;
24
+ }
25
+ const filePath = argv.find((_a, i) => argv[i - 1] === "--file") || "";
26
+ const outPath = argv.find((_a, i) => argv[i - 1] === "--out") || "";
27
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
28
+ if (!filePath) {
29
+ console.log("Specify --file <path> to a review result JSON.");
30
+ return;
31
+ }
32
+ if (!existsSync(filePath)) {
33
+ console.log(`File not found: ${filePath}`);
34
+ return;
35
+ }
36
+ let data;
37
+ try {
38
+ data = JSON.parse(readFileSync(filePath, "utf-8"));
39
+ }
40
+ catch {
41
+ console.log(`Failed to parse: ${filePath}`);
42
+ return;
43
+ }
44
+ const findings = Array.isArray(data.findings) ? data.findings : [];
45
+ if (findings.length === 0) {
46
+ console.log("No findings to export.");
47
+ return;
48
+ }
49
+ // Build CSV
50
+ const headers = ["ruleId", "severity", "title", "description", "confidence", "recommendation"];
51
+ const rows = [headers.join(",")];
52
+ for (const f of findings) {
53
+ if (typeof f !== "object" || !f)
54
+ continue;
55
+ const record = f;
56
+ const row = headers.map((h) => {
57
+ const val = record[h];
58
+ const str = val !== null && val !== undefined ? String(val) : "";
59
+ // Escape CSV: quote if contains comma, newline, or double-quote
60
+ if (str.includes(",") || str.includes("\n") || str.includes('"')) {
61
+ return `"${str.replace(/"/g, '""')}"`;
62
+ }
63
+ return str;
64
+ });
65
+ rows.push(row.join(","));
66
+ }
67
+ const csv = rows.join("\n");
68
+ if (outPath) {
69
+ writeFileSync(outPath, csv, "utf-8");
70
+ console.log(`Exported ${findings.length} findings to ${outPath}`);
71
+ return;
72
+ }
73
+ if (format === "json") {
74
+ console.log(JSON.stringify({ findingCount: findings.length, columns: headers }, null, 2));
75
+ return;
76
+ }
77
+ console.log(csv);
78
+ }
79
+ //# sourceMappingURL=finding-export-csv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finding-export-csv.js","sourceRoot":"","sources":["../../src/commands/finding-export-csv.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Finding-resolution — Track finding resolution status.
3
+ */
4
+ export declare function runFindingResolution(argv: string[]): void;
5
+ //# sourceMappingURL=finding-resolution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finding-resolution.d.ts","sourceRoot":"","sources":["../../src/commands/finding-resolution.ts"],"names":[],"mappings":"AAAA;;GAEG;AAkDH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA2HzD"}
@@ -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-note — Attach notes to reviews.
3
+ */
4
+ export declare function runReviewNote(argv: string[]): void;
5
+ //# sourceMappingURL=review-note.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-note.d.ts","sourceRoot":"","sources":["../../src/commands/review-note.ts"],"names":[],"mappings":"AAAA;;GAEG;AA4CH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAsFlD"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Review-note — Attach notes to reviews.
3
+ */
4
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
5
+ import { dirname } from "path";
6
+ // ─── Storage ────────────────────────────────────────────────────────────────
7
+ const NOTE_FILE = ".judges/review-notes.json";
8
+ function loadStore() {
9
+ if (!existsSync(NOTE_FILE))
10
+ return { version: "1.0.0", notes: [] };
11
+ try {
12
+ return JSON.parse(readFileSync(NOTE_FILE, "utf-8"));
13
+ }
14
+ catch {
15
+ return { version: "1.0.0", notes: [] };
16
+ }
17
+ }
18
+ function saveStore(store) {
19
+ mkdirSync(dirname(NOTE_FILE), { recursive: true });
20
+ writeFileSync(NOTE_FILE, JSON.stringify(store, null, 2), "utf-8");
21
+ }
22
+ function generateId() {
23
+ return `note-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 6)}`;
24
+ }
25
+ // ─── CLI ────────────────────────────────────────────────────────────────────
26
+ export function runReviewNote(argv) {
27
+ if (argv.includes("--help") || argv.includes("-h")) {
28
+ console.log(`
29
+ judges review-note — Attach notes to reviews
30
+
31
+ Usage:
32
+ judges review-note add --review <id> --text "Needs follow-up"
33
+ judges review-note list
34
+ judges review-note list --review <id>
35
+ judges review-note remove --id <id>
36
+ judges review-note clear
37
+
38
+ Subcommands:
39
+ add Add a note to a review
40
+ list List all notes (or for a specific review)
41
+ remove Remove a note by ID
42
+ clear Clear all notes
43
+
44
+ Options:
45
+ --review <id> Review identifier
46
+ --text <text> Note content
47
+ --author <name> Note author
48
+ --format json JSON output
49
+ --help, -h Show this help
50
+
51
+ Notes stored in .judges/review-notes.json.
52
+ `);
53
+ return;
54
+ }
55
+ const subcommand = argv.find((a) => ["add", "list", "remove", "clear"].includes(a));
56
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
57
+ const store = loadStore();
58
+ if (subcommand === "add") {
59
+ const reviewId = argv.find((_a, i) => argv[i - 1] === "--review") || "";
60
+ const text = argv.find((_a, i) => argv[i - 1] === "--text") || "";
61
+ const author = argv.find((_a, i) => argv[i - 1] === "--author") || "";
62
+ if (!text) {
63
+ console.log("Specify --text for the note content.");
64
+ return;
65
+ }
66
+ const note = { id: generateId(), reviewId, text, author, createdAt: new Date().toISOString() };
67
+ store.notes.push(note);
68
+ saveStore(store);
69
+ console.log(`Note added (${note.id}) to review ${reviewId || "(general)"}.`);
70
+ return;
71
+ }
72
+ if (subcommand === "remove") {
73
+ const id = argv.find((_a, i) => argv[i - 1] === "--id") || "";
74
+ const before = store.notes.length;
75
+ store.notes = store.notes.filter((n) => n.id !== id);
76
+ saveStore(store);
77
+ console.log(before > store.notes.length ? `Removed ${id}.` : `${id} not found.`);
78
+ return;
79
+ }
80
+ if (subcommand === "clear") {
81
+ saveStore({ version: "1.0.0", notes: [] });
82
+ console.log("All notes cleared.");
83
+ return;
84
+ }
85
+ // Default: list
86
+ const reviewFilter = argv.find((_a, i) => argv[i - 1] === "--review") || "";
87
+ const notes = reviewFilter ? store.notes.filter((n) => n.reviewId === reviewFilter) : store.notes;
88
+ if (notes.length === 0) {
89
+ console.log("No notes found.");
90
+ return;
91
+ }
92
+ if (format === "json") {
93
+ console.log(JSON.stringify(notes, null, 2));
94
+ return;
95
+ }
96
+ console.log(`\nReview Notes (${notes.length}):`);
97
+ console.log("─".repeat(60));
98
+ for (const n of notes) {
99
+ const authorTag = n.author ? ` by ${n.author}` : "";
100
+ console.log(` ${n.id} ${n.createdAt.slice(0, 10)}${authorTag} review=${n.reviewId || "(general)"}`);
101
+ console.log(` "${n.text}"`);
102
+ }
103
+ console.log("─".repeat(60));
104
+ }
105
+ //# sourceMappingURL=review-note.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-note.js","sourceRoot":"","sources":["../../src/commands/review-note.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Review-owner — Assign review ownership to team members.
3
+ */
4
+ export declare function runReviewOwner(argv: string[]): void;
5
+ //# sourceMappingURL=review-owner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-owner.d.ts","sourceRoot":"","sources":["../../src/commands/review-owner.ts"],"names":[],"mappings":"AAAA;;GAEG;AA2CH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA+GnD"}
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Review-owner — Assign review ownership to team members.
3
+ */
4
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
5
+ import { dirname } from "path";
6
+ // ─── Storage ────────────────────────────────────────────────────────────────
7
+ const OWNER_FILE = ".judges/review-owners.json";
8
+ function loadStore() {
9
+ if (!existsSync(OWNER_FILE))
10
+ return { version: "1.0.0", assignments: [] };
11
+ try {
12
+ return JSON.parse(readFileSync(OWNER_FILE, "utf-8"));
13
+ }
14
+ catch {
15
+ return { version: "1.0.0", assignments: [] };
16
+ }
17
+ }
18
+ function saveStore(store) {
19
+ mkdirSync(dirname(OWNER_FILE), { recursive: true });
20
+ writeFileSync(OWNER_FILE, JSON.stringify(store, null, 2), "utf-8");
21
+ }
22
+ function generateId() {
23
+ return `own-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 6)}`;
24
+ }
25
+ // ─── CLI ────────────────────────────────────────────────────────────────────
26
+ export function runReviewOwner(argv) {
27
+ if (argv.includes("--help") || argv.includes("-h")) {
28
+ console.log(`
29
+ judges review-owner — Assign review ownership to team members
30
+
31
+ Usage:
32
+ judges review-owner assign --path src/auth --owner alice
33
+ judges review-owner list
34
+ judges review-owner check --path src/auth/login.ts
35
+ judges review-owner remove --id <id>
36
+ judges review-owner clear
37
+
38
+ Subcommands:
39
+ assign Assign an owner to a path
40
+ list List all assignments
41
+ check Check who owns a path
42
+ remove Remove an assignment
43
+ clear Clear all assignments
44
+
45
+ Options:
46
+ --path <path> File or directory path
47
+ --owner <name> Owner name
48
+ --format json JSON output
49
+ --help, -h Show this help
50
+
51
+ Ownership stored in .judges/review-owners.json.
52
+ `);
53
+ return;
54
+ }
55
+ const subcommand = argv.find((a) => ["assign", "list", "check", "remove", "clear"].includes(a));
56
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
57
+ const store = loadStore();
58
+ if (subcommand === "assign") {
59
+ const path = argv.find((_a, i) => argv[i - 1] === "--path") || "";
60
+ const owner = argv.find((_a, i) => argv[i - 1] === "--owner") || "";
61
+ if (!path || !owner) {
62
+ console.log("Specify --path and --owner.");
63
+ return;
64
+ }
65
+ // Update existing or add new
66
+ const existing = store.assignments.find((a) => a.path === path);
67
+ if (existing) {
68
+ existing.owner = owner;
69
+ existing.assignedAt = new Date().toISOString();
70
+ }
71
+ else {
72
+ store.assignments.push({ id: generateId(), path, owner, assignedAt: new Date().toISOString() });
73
+ }
74
+ saveStore(store);
75
+ console.log(`Assigned ${path} → ${owner}`);
76
+ return;
77
+ }
78
+ if (subcommand === "check") {
79
+ const path = argv.find((_a, i) => argv[i - 1] === "--path") || "";
80
+ if (!path) {
81
+ console.log("Specify --path.");
82
+ return;
83
+ }
84
+ // Find best match (longest matching prefix)
85
+ let bestMatch = null;
86
+ for (const a of store.assignments) {
87
+ if (path.startsWith(a.path)) {
88
+ if (!bestMatch || a.path.length > bestMatch.path.length) {
89
+ bestMatch = a;
90
+ }
91
+ }
92
+ }
93
+ if (bestMatch) {
94
+ console.log(`Owner of ${path}: ${bestMatch.owner} (via ${bestMatch.path})`);
95
+ }
96
+ else {
97
+ console.log(`No owner assigned for ${path}.`);
98
+ }
99
+ return;
100
+ }
101
+ if (subcommand === "remove") {
102
+ const id = argv.find((_a, i) => argv[i - 1] === "--id") || "";
103
+ const before = store.assignments.length;
104
+ store.assignments = store.assignments.filter((a) => a.id !== id);
105
+ saveStore(store);
106
+ console.log(before > store.assignments.length ? `Removed ${id}.` : `${id} not found.`);
107
+ return;
108
+ }
109
+ if (subcommand === "clear") {
110
+ saveStore({ version: "1.0.0", assignments: [] });
111
+ console.log("Ownership assignments cleared.");
112
+ return;
113
+ }
114
+ // Default: list
115
+ if (store.assignments.length === 0) {
116
+ console.log("No ownership assignments. Use 'judges review-owner assign' to add one.");
117
+ return;
118
+ }
119
+ if (format === "json") {
120
+ console.log(JSON.stringify(store.assignments, null, 2));
121
+ return;
122
+ }
123
+ console.log(`\nReview Ownership (${store.assignments.length}):`);
124
+ console.log("─".repeat(50));
125
+ for (const a of store.assignments) {
126
+ console.log(` ${a.path} → ${a.owner}`);
127
+ }
128
+ console.log("─".repeat(50));
129
+ }
130
+ //# sourceMappingURL=review-owner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-owner.js","sourceRoot":"","sources":["../../src/commands/review-owner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Review-skip-rule — Quick skip/disable specific rules for a session.
3
+ */
4
+ export declare function runReviewSkipRule(argv: string[]): void;
5
+ //# sourceMappingURL=review-skip-rule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-skip-rule.d.ts","sourceRoot":"","sources":["../../src/commands/review-skip-rule.ts"],"names":[],"mappings":"AAAA;;GAEG;AAgCH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAyFtD"}