@kevinrabun/judges 3.43.0 → 3.44.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/burndown.d.ts +27 -0
  6. package/dist/commands/burndown.d.ts.map +1 -0
  7. package/dist/commands/burndown.js +180 -0
  8. package/dist/commands/burndown.js.map +1 -0
  9. package/dist/commands/kb.d.ts +41 -0
  10. package/dist/commands/kb.d.ts.map +1 -0
  11. package/dist/commands/kb.js +231 -0
  12. package/dist/commands/kb.js.map +1 -0
  13. package/dist/commands/noise-advisor.d.ts +30 -0
  14. package/dist/commands/noise-advisor.d.ts.map +1 -0
  15. package/dist/commands/noise-advisor.js +171 -0
  16. package/dist/commands/noise-advisor.js.map +1 -0
  17. package/dist/commands/recommend.d.ts +21 -0
  18. package/dist/commands/recommend.d.ts.map +1 -0
  19. package/dist/commands/recommend.js +283 -0
  20. package/dist/commands/recommend.js.map +1 -0
  21. package/dist/commands/report-template.d.ts +17 -0
  22. package/dist/commands/report-template.d.ts.map +1 -0
  23. package/dist/commands/report-template.js +291 -0
  24. package/dist/commands/report-template.js.map +1 -0
  25. package/dist/commands/review-queue.d.ts +34 -0
  26. package/dist/commands/review-queue.d.ts.map +1 -0
  27. package/dist/commands/review-queue.js +226 -0
  28. package/dist/commands/review-queue.js.map +1 -0
  29. package/dist/commands/rule-owner.d.ts +31 -0
  30. package/dist/commands/rule-owner.d.ts.map +1 -0
  31. package/dist/commands/rule-owner.js +182 -0
  32. package/dist/commands/rule-owner.js.map +1 -0
  33. package/dist/commands/suppress.d.ts +40 -0
  34. package/dist/commands/suppress.d.ts.map +1 -0
  35. package/dist/commands/suppress.js +209 -0
  36. package/dist/commands/suppress.js.map +1 -0
  37. package/package.json +1 -1
  38. package/server.json +2 -2
@@ -0,0 +1,209 @@
1
+ /**
2
+ * Batch false-positive suppression — suppress findings by glob, rule
3
+ * prefix, severity, or pattern with a full audit trail.
4
+ *
5
+ * Suppressions stored locally in .judges-suppressions.json.
6
+ */
7
+ import { readFileSync, writeFileSync, existsSync } from "fs";
8
+ const SUPPRESSION_FILE = ".judges-suppressions.json";
9
+ // ─── Core ───────────────────────────────────────────────────────────────────
10
+ function loadDb(file = SUPPRESSION_FILE) {
11
+ if (!existsSync(file))
12
+ return { version: 1, rules: [] };
13
+ return JSON.parse(readFileSync(file, "utf-8"));
14
+ }
15
+ function saveDb(db, file = SUPPRESSION_FILE) {
16
+ writeFileSync(file, JSON.stringify(db, null, 2));
17
+ }
18
+ function generateId() {
19
+ return `sup-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 6)}`;
20
+ }
21
+ function matchesGlob(filePath, glob) {
22
+ const regex = glob
23
+ .replace(/\./g, "\\.")
24
+ .replace(/\*\*/g, "§DOUBLESTAR§")
25
+ .replace(/\*/g, "[^/]*")
26
+ .replace(/§DOUBLESTAR§/g, ".*")
27
+ .replace(/\?/g, ".");
28
+ return new RegExp(`^${regex}$`).test(filePath);
29
+ }
30
+ export function addSuppression(opts) {
31
+ const db = loadDb();
32
+ const rule = {
33
+ id: generateId(),
34
+ fileGlob: opts.fileGlob,
35
+ rulePrefix: opts.rulePrefix,
36
+ ruleIds: opts.ruleIds,
37
+ maxSeverity: opts.maxSeverity,
38
+ reason: opts.reason,
39
+ author: opts.author || process.env.USER || process.env.USERNAME || "unknown",
40
+ createdIso: new Date().toISOString(),
41
+ active: true,
42
+ };
43
+ if (opts.expiresIn) {
44
+ const exp = new Date();
45
+ exp.setDate(exp.getDate() + opts.expiresIn);
46
+ rule.expiresIso = exp.toISOString();
47
+ }
48
+ db.rules.push(rule);
49
+ saveDb(db);
50
+ return rule;
51
+ }
52
+ export function removeSuppression(id) {
53
+ const db = loadDb();
54
+ const idx = db.rules.findIndex((r) => r.id === id);
55
+ if (idx < 0)
56
+ return false;
57
+ db.rules[idx].active = false;
58
+ saveDb(db);
59
+ return true;
60
+ }
61
+ export function isFindiingSuppressed(ruleId, severity, filePath) {
62
+ const db = loadDb();
63
+ const now = Date.now();
64
+ const severityOrder = ["critical", "high", "medium", "low", "info"];
65
+ for (const rule of db.rules) {
66
+ if (!rule.active)
67
+ continue;
68
+ if (rule.expiresIso && new Date(rule.expiresIso).getTime() < now)
69
+ continue;
70
+ // Check file glob
71
+ if (rule.fileGlob && filePath && !matchesGlob(filePath, rule.fileGlob))
72
+ continue;
73
+ if (rule.fileGlob && !filePath)
74
+ continue;
75
+ // Check rule prefix
76
+ if (rule.rulePrefix && !ruleId.startsWith(rule.rulePrefix))
77
+ continue;
78
+ // Check exact rule IDs
79
+ if (rule.ruleIds && rule.ruleIds.length > 0 && !rule.ruleIds.includes(ruleId))
80
+ continue;
81
+ // Check severity
82
+ if (rule.maxSeverity) {
83
+ const maxIdx = severityOrder.indexOf(rule.maxSeverity);
84
+ const sevIdx = severityOrder.indexOf(severity);
85
+ if (maxIdx >= 0 && sevIdx >= 0 && sevIdx < maxIdx)
86
+ continue;
87
+ }
88
+ // If no criteria were specified besides reason/author, it matches nothing
89
+ if (!rule.fileGlob && !rule.rulePrefix && (!rule.ruleIds || rule.ruleIds.length === 0) && !rule.maxSeverity)
90
+ continue;
91
+ return true;
92
+ }
93
+ return false;
94
+ }
95
+ // ─── CLI ────────────────────────────────────────────────────────────────────
96
+ export function runSuppress(argv) {
97
+ if (argv.includes("--help") || argv.includes("-h")) {
98
+ console.log(`
99
+ judges suppress — Batch false-positive suppression with audit trail
100
+
101
+ Usage:
102
+ judges suppress --glob "**/*.test.ts" --rule-prefix AUTH --reason "Test files"
103
+ judges suppress --rule SEC-001,SEC-002 --reason "Not applicable to internal APIs"
104
+ judges suppress --max-severity low --reason "Low severity not actionable"
105
+ judges suppress --list Show all suppression rules
106
+ judges suppress --remove <id> Deactivate a suppression rule
107
+ judges suppress --stats Show suppression statistics
108
+
109
+ Options:
110
+ --glob <pattern> File glob pattern
111
+ --rule-prefix <pfx> Rule ID prefix (e.g., AUTH, SEC, PERF)
112
+ --rule <ids> Comma-separated rule IDs
113
+ --max-severity <sev> Suppress this severity and below
114
+ --reason <text> Reason for suppression (required for new rules)
115
+ --author <name> Who created this suppression
116
+ --expires-in <days> Auto-expire after N days
117
+ --list List suppression rules
118
+ --remove <id> Deactivate a suppression rule
119
+ --stats Show suppression statistics
120
+ --help, -h Show this help
121
+ `);
122
+ return;
123
+ }
124
+ if (argv.includes("--list")) {
125
+ const db = loadDb();
126
+ const active = db.rules.filter((r) => r.active);
127
+ const inactive = db.rules.filter((r) => !r.active);
128
+ console.log(`\n Suppression Rules (${active.length} active, ${inactive.length} inactive)\n ─────────────────`);
129
+ for (const r of active) {
130
+ const parts = [];
131
+ if (r.fileGlob)
132
+ parts.push(`glob: ${r.fileGlob}`);
133
+ if (r.rulePrefix)
134
+ parts.push(`prefix: ${r.rulePrefix}`);
135
+ if (r.ruleIds?.length)
136
+ parts.push(`rules: ${r.ruleIds.join(",")}`);
137
+ if (r.maxSeverity)
138
+ parts.push(`max-sev: ${r.maxSeverity}`);
139
+ const exp = r.expiresIso ? ` (expires ${r.expiresIso.split("T")[0]})` : "";
140
+ console.log(` ${r.id} ${parts.join(" | ")}${exp}`);
141
+ console.log(` Reason: ${r.reason} — by ${r.author} on ${r.createdIso.split("T")[0]}`);
142
+ }
143
+ console.log("");
144
+ return;
145
+ }
146
+ const removeId = argv.find((_a, i) => argv[i - 1] === "--remove");
147
+ if (removeId) {
148
+ if (removeSuppression(removeId)) {
149
+ console.log(` Deactivated: ${removeId}`);
150
+ }
151
+ else {
152
+ console.error(` Error: not found: ${removeId}`);
153
+ }
154
+ return;
155
+ }
156
+ if (argv.includes("--stats")) {
157
+ const db = loadDb();
158
+ const active = db.rules.filter((r) => r.active);
159
+ const byPrefix = {};
160
+ for (const r of active) {
161
+ const key = r.rulePrefix || r.ruleIds?.[0]?.split("-")[0] || "other";
162
+ byPrefix[key] = (byPrefix[key] || 0) + 1;
163
+ }
164
+ console.log(`\n Total rules: ${db.rules.length} (${active.length} active)`);
165
+ for (const [k, v] of Object.entries(byPrefix)) {
166
+ console.log(` ${k.padEnd(12)} ${v}`);
167
+ }
168
+ console.log("");
169
+ return;
170
+ }
171
+ // Add new suppression
172
+ const glob = argv.find((_a, i) => argv[i - 1] === "--glob");
173
+ const rulePrefix = argv.find((_a, i) => argv[i - 1] === "--rule-prefix");
174
+ const ruleStr = argv.find((_a, i) => argv[i - 1] === "--rule");
175
+ const maxSeverity = argv.find((_a, i) => argv[i - 1] === "--max-severity");
176
+ const reason = argv.find((_a, i) => argv[i - 1] === "--reason");
177
+ const author = argv.find((_a, i) => argv[i - 1] === "--author");
178
+ const expiresStr = argv.find((_a, i) => argv[i - 1] === "--expires-in");
179
+ if (!reason) {
180
+ console.error("Error: --reason is required");
181
+ process.exit(1);
182
+ }
183
+ if (!glob && !rulePrefix && !ruleStr && !maxSeverity) {
184
+ console.error("Error: At least one of --glob, --rule-prefix, --rule, or --max-severity required");
185
+ process.exit(1);
186
+ }
187
+ const rule = addSuppression({
188
+ fileGlob: glob,
189
+ rulePrefix,
190
+ ruleIds: ruleStr ? ruleStr.split(",").map((s) => s.trim()) : undefined,
191
+ maxSeverity,
192
+ reason,
193
+ author,
194
+ expiresIn: expiresStr ? parseInt(expiresStr, 10) : undefined,
195
+ });
196
+ console.log(` ✅ Suppression created: ${rule.id}`);
197
+ const parts = [];
198
+ if (rule.fileGlob)
199
+ parts.push(`glob: ${rule.fileGlob}`);
200
+ if (rule.rulePrefix)
201
+ parts.push(`prefix: ${rule.rulePrefix}`);
202
+ if (rule.ruleIds?.length)
203
+ parts.push(`rules: ${rule.ruleIds.join(",")}`);
204
+ if (rule.maxSeverity)
205
+ parts.push(`max-sev: ${rule.maxSeverity}`);
206
+ console.log(` ${parts.join(" | ")}`);
207
+ console.log(` Reason: ${rule.reason}`);
208
+ }
209
+ //# sourceMappingURL=suppress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suppress.js","sourceRoot":"","sources":["../../src/commands/suppress.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kevinrabun/judges",
3
- "version": "3.43.0",
3
+ "version": "3.44.0",
4
4
  "description": "45 specialized judges that evaluate AI-generated code for security, cost, and quality.",
5
5
  "mcpName": "io.github.KevinRabun/judges",
6
6
  "type": "module",
package/server.json CHANGED
@@ -7,12 +7,12 @@
7
7
  "url": "https://github.com/kevinrabun/judges",
8
8
  "source": "github"
9
9
  },
10
- "version": "3.43.0",
10
+ "version": "3.44.0",
11
11
  "packages": [
12
12
  {
13
13
  "registryType": "npm",
14
14
  "identifier": "@kevinrabun/judges",
15
- "version": "3.43.0",
15
+ "version": "3.44.0",
16
16
  "transport": {
17
17
  "type": "stdio"
18
18
  }