@kevinrabun/judges 3.70.0 → 3.72.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-auto-fix.d.ts +5 -0
  6. package/dist/commands/finding-auto-fix.d.ts.map +1 -0
  7. package/dist/commands/finding-auto-fix.js +189 -0
  8. package/dist/commands/finding-auto-fix.js.map +1 -0
  9. package/dist/commands/finding-context.d.ts +5 -0
  10. package/dist/commands/finding-context.d.ts.map +1 -0
  11. package/dist/commands/finding-context.js +141 -0
  12. package/dist/commands/finding-context.js.map +1 -0
  13. package/dist/commands/finding-deduplicate.d.ts +5 -0
  14. package/dist/commands/finding-deduplicate.d.ts.map +1 -0
  15. package/dist/commands/finding-deduplicate.js +142 -0
  16. package/dist/commands/finding-deduplicate.js.map +1 -0
  17. package/dist/commands/finding-severity-override.d.ts +5 -0
  18. package/dist/commands/finding-severity-override.d.ts.map +1 -0
  19. package/dist/commands/finding-severity-override.js +132 -0
  20. package/dist/commands/finding-severity-override.js.map +1 -0
  21. package/dist/commands/review-approval.d.ts +5 -0
  22. package/dist/commands/review-approval.d.ts.map +1 -0
  23. package/dist/commands/review-approval.js +134 -0
  24. package/dist/commands/review-approval.js.map +1 -0
  25. package/dist/commands/review-config-export.d.ts +5 -0
  26. package/dist/commands/review-config-export.d.ts.map +1 -0
  27. package/dist/commands/review-config-export.js +125 -0
  28. package/dist/commands/review-config-export.js.map +1 -0
  29. package/dist/commands/review-coverage-map.d.ts +5 -0
  30. package/dist/commands/review-coverage-map.d.ts.map +1 -0
  31. package/dist/commands/review-coverage-map.js +195 -0
  32. package/dist/commands/review-coverage-map.js.map +1 -0
  33. package/dist/commands/review-feedback.d.ts +5 -0
  34. package/dist/commands/review-feedback.d.ts.map +1 -0
  35. package/dist/commands/review-feedback.js +146 -0
  36. package/dist/commands/review-feedback.js.map +1 -0
  37. package/dist/commands/review-history-search.d.ts +5 -0
  38. package/dist/commands/review-history-search.d.ts.map +1 -0
  39. package/dist/commands/review-history-search.js +215 -0
  40. package/dist/commands/review-history-search.js.map +1 -0
  41. package/dist/commands/review-ignore-path.d.ts +5 -0
  42. package/dist/commands/review-ignore-path.d.ts.map +1 -0
  43. package/dist/commands/review-ignore-path.js +148 -0
  44. package/dist/commands/review-ignore-path.js.map +1 -0
  45. package/dist/commands/review-language-stats.d.ts +5 -0
  46. package/dist/commands/review-language-stats.d.ts.map +1 -0
  47. package/dist/commands/review-language-stats.js +153 -0
  48. package/dist/commands/review-language-stats.js.map +1 -0
  49. package/dist/commands/review-onboard.d.ts +5 -0
  50. package/dist/commands/review-onboard.d.ts.map +1 -0
  51. package/dist/commands/review-onboard.js +155 -0
  52. package/dist/commands/review-onboard.js.map +1 -0
  53. package/dist/commands/review-parallel.d.ts +5 -0
  54. package/dist/commands/review-parallel.d.ts.map +1 -0
  55. package/dist/commands/review-parallel.js +183 -0
  56. package/dist/commands/review-parallel.js.map +1 -0
  57. package/dist/commands/review-pr-comment.d.ts +5 -0
  58. package/dist/commands/review-pr-comment.d.ts.map +1 -0
  59. package/dist/commands/review-pr-comment.js +107 -0
  60. package/dist/commands/review-pr-comment.js.map +1 -0
  61. package/dist/commands/review-rollback.d.ts +5 -0
  62. package/dist/commands/review-rollback.d.ts.map +1 -0
  63. package/dist/commands/review-rollback.js +172 -0
  64. package/dist/commands/review-rollback.js.map +1 -0
  65. package/dist/commands/review-score-history.d.ts +5 -0
  66. package/dist/commands/review-score-history.d.ts.map +1 -0
  67. package/dist/commands/review-score-history.js +138 -0
  68. package/dist/commands/review-score-history.js.map +1 -0
  69. package/package.json +1 -1
  70. package/server.json +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-coverage-map.js","sourceRoot":"","sources":["../../src/commands/review-coverage-map.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Review-feedback — Collect user feedback on review quality.
3
+ */
4
+ export declare function runReviewFeedback(argv: string[]): void;
5
+ //# sourceMappingURL=review-feedback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-feedback.d.ts","sourceRoot":"","sources":["../../src/commands/review-feedback.ts"],"names":[],"mappings":"AAAA;;GAEG;AAuEH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAoHtD"}
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Review-feedback — Collect user feedback on review quality.
3
+ */
4
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
5
+ import { join, dirname } from "path";
6
+ // ─── Storage ────────────────────────────────────────────────────────────────
7
+ const FEEDBACK_FILE = join(".judges", "feedback.json");
8
+ function loadStore() {
9
+ if (!existsSync(FEEDBACK_FILE))
10
+ return { version: "1.0.0", entries: [] };
11
+ try {
12
+ return JSON.parse(readFileSync(FEEDBACK_FILE, "utf-8"));
13
+ }
14
+ catch {
15
+ return { version: "1.0.0", entries: [] };
16
+ }
17
+ }
18
+ function saveStore(store) {
19
+ mkdirSync(dirname(FEEDBACK_FILE), { recursive: true });
20
+ writeFileSync(FEEDBACK_FILE, JSON.stringify(store, null, 2), "utf-8");
21
+ }
22
+ function generateId() {
23
+ return `fb-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 6)}`;
24
+ }
25
+ // ─── Summary ────────────────────────────────────────────────────────────────
26
+ function summarize(entries) {
27
+ if (entries.length === 0) {
28
+ return { totalEntries: 0, avgRating: 0, helpfulPct: 0, recentAvgRating: 0 };
29
+ }
30
+ const ratings = entries.map((e) => e.rating);
31
+ const avgRating = ratings.reduce((a, b) => a + b, 0) / ratings.length;
32
+ const helpfulCount = entries.filter((e) => e.helpful).length;
33
+ const helpfulPct = (helpfulCount / entries.length) * 100;
34
+ const recentCount = Math.min(10, entries.length);
35
+ const recentRatings = entries.slice(-recentCount).map((e) => e.rating);
36
+ const recentAvgRating = recentRatings.reduce((a, b) => a + b, 0) / recentRatings.length;
37
+ return { totalEntries: entries.length, avgRating, helpfulPct, recentAvgRating };
38
+ }
39
+ // ─── CLI ────────────────────────────────────────────────────────────────────
40
+ export function runReviewFeedback(argv) {
41
+ if (argv.includes("--help") || argv.includes("-h")) {
42
+ console.log(`
43
+ judges review-feedback — Collect user feedback on review quality
44
+
45
+ Usage:
46
+ judges review-feedback Show feedback summary
47
+ judges review-feedback add --rating 4 --comment "useful"
48
+ judges review-feedback list
49
+ judges review-feedback remove --id <id>
50
+ judges review-feedback clear
51
+
52
+ Subcommands:
53
+ (default) Show feedback summary
54
+ add Add feedback entry
55
+ list List all feedback
56
+ remove Remove feedback by ID
57
+ clear Clear all feedback
58
+
59
+ Options:
60
+ --rating <1-5> Rating (1=poor, 5=excellent)
61
+ --comment <text> Feedback comment
62
+ --finding <id> Related finding ID
63
+ --helpful Mark finding as helpful (flag)
64
+ --format json JSON output
65
+ --help, -h Show this help
66
+
67
+ Feedback stored locally in .judges/feedback.json.
68
+ `);
69
+ return;
70
+ }
71
+ const subcommand = argv.find((a) => ["add", "list", "remove", "clear"].includes(a));
72
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
73
+ const store = loadStore();
74
+ if (subcommand === "add") {
75
+ const rating = parseInt(argv.find((_a, i) => argv[i - 1] === "--rating") || "3", 10);
76
+ const comment = argv.find((_a, i) => argv[i - 1] === "--comment") || "";
77
+ const findingId = argv.find((_a, i) => argv[i - 1] === "--finding") || "";
78
+ const helpful = argv.includes("--helpful");
79
+ const clampedRating = Math.max(1, Math.min(5, rating));
80
+ const entry = {
81
+ id: generateId(),
82
+ date: new Date().toISOString(),
83
+ rating: clampedRating,
84
+ comment,
85
+ findingId,
86
+ helpful,
87
+ };
88
+ store.entries.push(entry);
89
+ saveStore(store);
90
+ console.log(`Feedback recorded (${entry.id}): rating=${clampedRating}/5`);
91
+ return;
92
+ }
93
+ if (subcommand === "remove") {
94
+ const id = argv.find((_a, i) => argv[i - 1] === "--id") || "";
95
+ const before = store.entries.length;
96
+ store.entries = store.entries.filter((e) => e.id !== id);
97
+ saveStore(store);
98
+ console.log(before > store.entries.length ? `Removed feedback ${id}.` : `Feedback ${id} not found.`);
99
+ return;
100
+ }
101
+ if (subcommand === "clear") {
102
+ saveStore({ version: "1.0.0", entries: [] });
103
+ console.log("Feedback cleared.");
104
+ return;
105
+ }
106
+ if (subcommand === "list") {
107
+ if (store.entries.length === 0) {
108
+ console.log("No feedback entries.");
109
+ return;
110
+ }
111
+ if (format === "json") {
112
+ console.log(JSON.stringify(store.entries, null, 2));
113
+ return;
114
+ }
115
+ console.log("\nFeedback Entries:");
116
+ console.log("─".repeat(60));
117
+ for (const e of store.entries) {
118
+ const stars = "★".repeat(e.rating) + "☆".repeat(5 - e.rating);
119
+ const helpfulTag = e.helpful ? " [helpful]" : "";
120
+ console.log(` ${e.id} ${e.date.slice(0, 10)} ${stars}${helpfulTag}`);
121
+ if (e.comment)
122
+ console.log(` "${e.comment}"`);
123
+ }
124
+ console.log("─".repeat(60));
125
+ return;
126
+ }
127
+ // Default: show summary
128
+ if (store.entries.length === 0) {
129
+ console.log("No feedback collected. Use 'judges review-feedback add' to start.");
130
+ return;
131
+ }
132
+ const summary = summarize(store.entries);
133
+ if (format === "json") {
134
+ console.log(JSON.stringify(summary, null, 2));
135
+ return;
136
+ }
137
+ const stars = "★".repeat(Math.round(summary.avgRating)) + "☆".repeat(5 - Math.round(summary.avgRating));
138
+ console.log("\nFeedback Summary:");
139
+ console.log("═".repeat(50));
140
+ console.log(` Total feedback: ${summary.totalEntries}`);
141
+ console.log(` Avg rating: ${summary.avgRating.toFixed(1)}/5 ${stars}`);
142
+ console.log(` Recent avg: ${summary.recentAvgRating.toFixed(1)}/5`);
143
+ console.log(` Helpful: ${summary.helpfulPct.toFixed(0)}%`);
144
+ console.log("═".repeat(50));
145
+ }
146
+ //# sourceMappingURL=review-feedback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-feedback.js","sourceRoot":"","sources":["../../src/commands/review-feedback.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Review-history-search — Search through past review history.
3
+ */
4
+ export declare function runReviewHistorySearch(argv: string[]): void;
5
+ //# sourceMappingURL=review-history-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-history-search.d.ts","sourceRoot":"","sources":["../../src/commands/review-history-search.ts"],"names":[],"mappings":"AAAA;;GAEG;AAyHH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAoI3D"}
@@ -0,0 +1,215 @@
1
+ /**
2
+ * Review-history-search — Search through past review history.
3
+ */
4
+ import { readFileSync, writeFileSync, existsSync, mkdirSync, readdirSync } from "fs";
5
+ import { join, dirname } from "path";
6
+ // ─── Storage ────────────────────────────────────────────────────────────────
7
+ const HISTORY_FILE = join(".judges", "review-history.json");
8
+ function loadHistory() {
9
+ if (!existsSync(HISTORY_FILE))
10
+ return { version: "1.0.0", entries: [] };
11
+ try {
12
+ return JSON.parse(readFileSync(HISTORY_FILE, "utf-8"));
13
+ }
14
+ catch {
15
+ return { version: "1.0.0", entries: [] };
16
+ }
17
+ }
18
+ function saveHistory(store) {
19
+ mkdirSync(dirname(HISTORY_FILE), { recursive: true });
20
+ writeFileSync(HISTORY_FILE, JSON.stringify(store, null, 2), "utf-8");
21
+ }
22
+ function generateId() {
23
+ return `hist-${Date.now().toString(36)}`;
24
+ }
25
+ // ─── Search ─────────────────────────────────────────────────────────────────
26
+ function searchEntries(entries, query) {
27
+ const lower = query.toLowerCase();
28
+ const results = [];
29
+ for (const entry of entries) {
30
+ if (entry.source.toLowerCase().includes(lower)) {
31
+ results.push({ entry, matchField: "source", matchText: entry.source });
32
+ }
33
+ else if (entry.notes.toLowerCase().includes(lower)) {
34
+ results.push({ entry, matchField: "notes", matchText: entry.notes });
35
+ }
36
+ else if (entry.tags.some((t) => t.toLowerCase().includes(lower))) {
37
+ const tag = entry.tags.find((t) => t.toLowerCase().includes(lower)) || "";
38
+ results.push({ entry, matchField: "tag", matchText: tag });
39
+ }
40
+ else if (entry.id.toLowerCase().includes(lower)) {
41
+ results.push({ entry, matchField: "id", matchText: entry.id });
42
+ }
43
+ }
44
+ return results;
45
+ }
46
+ // ─── Auto-index ─────────────────────────────────────────────────────────────
47
+ function autoIndex() {
48
+ const judgesDir = ".judges";
49
+ if (!existsSync(judgesDir))
50
+ return 0;
51
+ const store = loadHistory();
52
+ const existingIds = new Set(store.entries.map((e) => e.id));
53
+ let added = 0;
54
+ try {
55
+ const files = readdirSync(judgesDir);
56
+ for (const file of files) {
57
+ const fStr = file;
58
+ if (!fStr.endsWith(".json"))
59
+ continue;
60
+ if (fStr === "review-history.json")
61
+ continue;
62
+ const fullPath = join(judgesDir, fStr);
63
+ try {
64
+ const content = JSON.parse(readFileSync(fullPath, "utf-8"));
65
+ if (content.timestamp && content.findings) {
66
+ const id = `hist-${fStr.replace(".json", "")}`;
67
+ if (!existingIds.has(id)) {
68
+ store.entries.push({
69
+ id,
70
+ date: content.timestamp || new Date().toISOString(),
71
+ source: fStr,
72
+ score: content.overallScore || 0,
73
+ findingCount: Array.isArray(content.findings) ? content.findings.length : 0,
74
+ tags: [],
75
+ notes: "",
76
+ });
77
+ added++;
78
+ }
79
+ }
80
+ }
81
+ catch {
82
+ // Skip non-parseable files
83
+ }
84
+ }
85
+ }
86
+ catch {
87
+ // Skip if directory unreadable
88
+ }
89
+ if (added > 0)
90
+ saveHistory(store);
91
+ return added;
92
+ }
93
+ // ─── CLI ────────────────────────────────────────────────────────────────────
94
+ export function runReviewHistorySearch(argv) {
95
+ if (argv.includes("--help") || argv.includes("-h")) {
96
+ console.log(`
97
+ judges review-history-search — Search past review history
98
+
99
+ Usage:
100
+ judges review-history-search --query "sql injection"
101
+ judges review-history-search add --source report.json --score 7.5 --notes "Sprint 42 review"
102
+ judges review-history-search list
103
+ judges review-history-search index Auto-index .judges/ files
104
+ judges review-history-search clear
105
+
106
+ Subcommands:
107
+ (default) Search history
108
+ add Add a history entry
109
+ list List all history entries
110
+ index Auto-index review files in .judges/
111
+ clear Clear history
112
+
113
+ Options:
114
+ --query <text> Search query
115
+ --source <text> Source file or description
116
+ --score <n> Review score
117
+ --notes <text> Notes for the entry
118
+ --tags <t1,t2> Comma-separated tags
119
+ --after <date> Filter entries after date (YYYY-MM-DD)
120
+ --before <date> Filter entries before date (YYYY-MM-DD)
121
+ --format json JSON output
122
+ --help, -h Show this help
123
+
124
+ History stored locally in .judges/review-history.json.
125
+ `);
126
+ return;
127
+ }
128
+ const subcommand = argv.find((a) => ["add", "list", "index", "clear"].includes(a));
129
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
130
+ const store = loadHistory();
131
+ if (subcommand === "index") {
132
+ const added = autoIndex();
133
+ console.log(added > 0 ? `Indexed ${added} new review file(s).` : "No new review files to index.");
134
+ return;
135
+ }
136
+ if (subcommand === "add") {
137
+ const source = argv.find((_a, i) => argv[i - 1] === "--source") || "";
138
+ const score = parseFloat(argv.find((_a, i) => argv[i - 1] === "--score") || "0");
139
+ const notes = argv.find((_a, i) => argv[i - 1] === "--notes") || "";
140
+ const tagsArg = argv.find((_a, i) => argv[i - 1] === "--tags") || "";
141
+ const tags = tagsArg
142
+ ? tagsArg
143
+ .split(",")
144
+ .map((t) => t.trim())
145
+ .filter(Boolean)
146
+ : [];
147
+ if (!source) {
148
+ console.error("Error: --source is required.");
149
+ process.exitCode = 1;
150
+ return;
151
+ }
152
+ const id = generateId();
153
+ store.entries.push({ id, date: new Date().toISOString(), source, score, findingCount: 0, tags, notes });
154
+ saveHistory(store);
155
+ console.log(`Added history entry ${id}.`);
156
+ return;
157
+ }
158
+ if (subcommand === "clear") {
159
+ saveHistory({ version: "1.0.0", entries: [] });
160
+ console.log("Review history cleared.");
161
+ return;
162
+ }
163
+ if (subcommand === "list") {
164
+ const after = argv.find((_a, i) => argv[i - 1] === "--after") || "";
165
+ const before = argv.find((_a, i) => argv[i - 1] === "--before") || "";
166
+ let entries = store.entries;
167
+ if (after)
168
+ entries = entries.filter((e) => e.date >= after);
169
+ if (before)
170
+ entries = entries.filter((e) => e.date <= before);
171
+ if (entries.length === 0) {
172
+ console.log("No history entries.");
173
+ return;
174
+ }
175
+ if (format === "json") {
176
+ console.log(JSON.stringify(entries, null, 2));
177
+ return;
178
+ }
179
+ console.log("\nReview History:");
180
+ console.log("─".repeat(70));
181
+ for (const e of entries) {
182
+ console.log(` ${e.id} ${e.date.slice(0, 10)} score=${e.score.toFixed(1)} findings=${e.findingCount} ${e.source}`);
183
+ if (e.notes)
184
+ console.log(` Note: ${e.notes}`);
185
+ }
186
+ console.log("─".repeat(70));
187
+ console.log(` Total: ${entries.length} entry/entries`);
188
+ return;
189
+ }
190
+ // Default: search
191
+ const query = argv.find((_a, i) => argv[i - 1] === "--query") || "";
192
+ if (!query) {
193
+ console.error("Error: --query is required for search. Use 'list' to see all entries.");
194
+ process.exitCode = 1;
195
+ return;
196
+ }
197
+ const results = searchEntries(store.entries, query);
198
+ if (format === "json") {
199
+ console.log(JSON.stringify(results, null, 2));
200
+ return;
201
+ }
202
+ if (results.length === 0) {
203
+ console.log(`No matches for "${query}".`);
204
+ return;
205
+ }
206
+ console.log(`\nSearch results for "${query}" (${results.length} match(es)):`);
207
+ console.log("─".repeat(70));
208
+ for (const r of results) {
209
+ console.log(` ${r.entry.id} ${r.entry.date.slice(0, 10)} score=${r.entry.score.toFixed(1)} [${r.matchField}]`);
210
+ console.log(` Source: ${r.entry.source}`);
211
+ console.log(` Match: ${r.matchText}`);
212
+ }
213
+ console.log("─".repeat(70));
214
+ }
215
+ //# sourceMappingURL=review-history-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-history-search.js","sourceRoot":"","sources":["../../src/commands/review-history-search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Review-ignore-path — Manage path ignore lists for reviews.
3
+ */
4
+ export declare function runReviewIgnorePath(argv: string[]): void;
5
+ //# sourceMappingURL=review-ignore-path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-ignore-path.d.ts","sourceRoot":"","sources":["../../src/commands/review-ignore-path.ts"],"names":[],"mappings":"AAAA;;GAEG;AAoDH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAsHxD"}
@@ -0,0 +1,148 @@
1
+ /**
2
+ * Review-ignore-path — Manage path ignore lists for reviews.
3
+ */
4
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
5
+ import { join, dirname } from "path";
6
+ // ─── Storage ────────────────────────────────────────────────────────────────
7
+ const IGNORE_FILE = join(".judges", "ignore-paths.json");
8
+ function loadStore() {
9
+ if (!existsSync(IGNORE_FILE))
10
+ return { version: "1.0.0", paths: [] };
11
+ try {
12
+ return JSON.parse(readFileSync(IGNORE_FILE, "utf-8"));
13
+ }
14
+ catch {
15
+ return { version: "1.0.0", paths: [] };
16
+ }
17
+ }
18
+ function saveStore(store) {
19
+ mkdirSync(dirname(IGNORE_FILE), { recursive: true });
20
+ writeFileSync(IGNORE_FILE, JSON.stringify(store, null, 2), "utf-8");
21
+ }
22
+ function matchesPattern(filePath, pattern) {
23
+ // Simple glob matching
24
+ if (pattern.endsWith("/**")) {
25
+ return filePath.startsWith(pattern.slice(0, -3));
26
+ }
27
+ if (pattern.startsWith("**/")) {
28
+ return filePath.includes(pattern.slice(3));
29
+ }
30
+ if (pattern.startsWith("*.")) {
31
+ return filePath.endsWith(pattern.slice(1));
32
+ }
33
+ return filePath === pattern || filePath.includes(pattern);
34
+ }
35
+ // ─── CLI ────────────────────────────────────────────────────────────────────
36
+ export function runReviewIgnorePath(argv) {
37
+ if (argv.includes("--help") || argv.includes("-h")) {
38
+ console.log(`
39
+ judges review-ignore-path — Manage path ignore lists
40
+
41
+ Usage:
42
+ judges review-ignore-path add --pattern "test/**" --reason "Test files"
43
+ judges review-ignore-path add --pattern "*.min.js" --reason "Minified files"
44
+ judges review-ignore-path list
45
+ judges review-ignore-path check --file src/api.ts
46
+ judges review-ignore-path remove --pattern "test/**"
47
+ judges review-ignore-path clear
48
+
49
+ Subcommands:
50
+ add Add an ignore pattern
51
+ list List all ignore patterns
52
+ check Check if a file matches any pattern
53
+ remove Remove an ignore pattern
54
+ clear Clear all ignore patterns
55
+
56
+ Options:
57
+ --pattern <glob> Glob pattern to ignore
58
+ --reason <text> Reason for ignoring
59
+ --file <path> File to check
60
+ --format json JSON output
61
+ --help, -h Show this help
62
+
63
+ Ignore patterns stored in .judges/ignore-paths.json.
64
+ Supported patterns: dir/**, **/file, *.ext, exact/path.
65
+ `);
66
+ return;
67
+ }
68
+ const subcommand = argv.find((a) => ["add", "list", "check", "remove", "clear"].includes(a)) || "list";
69
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
70
+ const store = loadStore();
71
+ if (subcommand === "add") {
72
+ const pattern = argv.find((_a, i) => argv[i - 1] === "--pattern") || "";
73
+ const reason = argv.find((_a, i) => argv[i - 1] === "--reason") || "";
74
+ if (!pattern) {
75
+ console.error("Error: --pattern is required.");
76
+ process.exitCode = 1;
77
+ return;
78
+ }
79
+ if (store.paths.some((p) => p.pattern === pattern)) {
80
+ console.error(`Error: Pattern "${pattern}" already exists.`);
81
+ process.exitCode = 1;
82
+ return;
83
+ }
84
+ store.paths.push({ pattern, reason, addedAt: new Date().toISOString() });
85
+ saveStore(store);
86
+ console.log(`Added ignore pattern: ${pattern}`);
87
+ return;
88
+ }
89
+ if (subcommand === "remove") {
90
+ const pattern = argv.find((_a, i) => argv[i - 1] === "--pattern") || "";
91
+ if (!pattern) {
92
+ console.error("Error: --pattern is required.");
93
+ process.exitCode = 1;
94
+ return;
95
+ }
96
+ const before = store.paths.length;
97
+ store.paths = store.paths.filter((p) => p.pattern !== pattern);
98
+ if (store.paths.length === before) {
99
+ console.error(`Error: Pattern "${pattern}" not found.`);
100
+ process.exitCode = 1;
101
+ return;
102
+ }
103
+ saveStore(store);
104
+ console.log(`Removed ignore pattern: ${pattern}`);
105
+ return;
106
+ }
107
+ if (subcommand === "check") {
108
+ const filePath = argv.find((_a, i) => argv[i - 1] === "--file") || "";
109
+ if (!filePath) {
110
+ console.error("Error: --file is required.");
111
+ process.exitCode = 1;
112
+ return;
113
+ }
114
+ const matches = store.paths.filter((p) => matchesPattern(filePath, p.pattern));
115
+ if (matches.length > 0) {
116
+ console.log(`✓ "${filePath}" is ignored by ${matches.length} pattern(s):`);
117
+ for (const m of matches) {
118
+ console.log(` ${m.pattern}${m.reason ? ` — ${m.reason}` : ""}`);
119
+ }
120
+ }
121
+ else {
122
+ console.log(`✗ "${filePath}" is NOT ignored.`);
123
+ }
124
+ return;
125
+ }
126
+ if (subcommand === "clear") {
127
+ saveStore({ version: "1.0.0", paths: [] });
128
+ console.log("Ignore patterns cleared.");
129
+ return;
130
+ }
131
+ // list
132
+ if (store.paths.length === 0) {
133
+ console.log("No ignore patterns. Use 'judges review-ignore-path add' to start.");
134
+ return;
135
+ }
136
+ if (format === "json") {
137
+ console.log(JSON.stringify(store.paths, null, 2));
138
+ return;
139
+ }
140
+ console.log("\nIgnore Patterns:");
141
+ console.log("─".repeat(60));
142
+ for (const p of store.paths) {
143
+ console.log(` ${p.pattern.padEnd(30)} ${p.addedAt.slice(0, 10)} ${p.reason || ""}`);
144
+ }
145
+ console.log("─".repeat(60));
146
+ console.log(` Total: ${store.paths.length} pattern(s)`);
147
+ }
148
+ //# sourceMappingURL=review-ignore-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-ignore-path.js","sourceRoot":"","sources":["../../src/commands/review-ignore-path.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Review-language-stats — Language-specific review statistics.
3
+ */
4
+ export declare function runReviewLanguageStats(argv: string[]): void;
5
+ //# sourceMappingURL=review-language-stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-language-stats.d.ts","sourceRoot":"","sources":["../../src/commands/review-language-stats.ts"],"names":[],"mappings":"AAAA;;GAEG;AA+FH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAyF3D"}