@kevinrabun/judges 3.88.0 → 3.89.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 (42) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +63 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/finding-category-map.d.ts +5 -0
  6. package/dist/commands/finding-category-map.d.ts.map +1 -0
  7. package/dist/commands/finding-category-map.js +104 -0
  8. package/dist/commands/finding-category-map.js.map +1 -0
  9. package/dist/commands/finding-dedup-report.d.ts +5 -0
  10. package/dist/commands/finding-dedup-report.d.ts.map +1 -0
  11. package/dist/commands/finding-dedup-report.js +102 -0
  12. package/dist/commands/finding-dedup-report.js.map +1 -0
  13. package/dist/commands/finding-false-positive-log.d.ts +5 -0
  14. package/dist/commands/finding-false-positive-log.d.ts.map +1 -0
  15. package/dist/commands/finding-false-positive-log.js +151 -0
  16. package/dist/commands/finding-false-positive-log.js.map +1 -0
  17. package/dist/commands/finding-fix-validation.d.ts +5 -0
  18. package/dist/commands/finding-fix-validation.d.ts.map +1 -0
  19. package/dist/commands/finding-fix-validation.js +116 -0
  20. package/dist/commands/finding-fix-validation.js.map +1 -0
  21. package/dist/commands/finding-regression-check.d.ts +5 -0
  22. package/dist/commands/finding-regression-check.d.ts.map +1 -0
  23. package/dist/commands/finding-regression-check.js +113 -0
  24. package/dist/commands/finding-regression-check.js.map +1 -0
  25. package/dist/commands/review-dashboard-data.d.ts +5 -0
  26. package/dist/commands/review-dashboard-data.d.ts.map +1 -0
  27. package/dist/commands/review-dashboard-data.js +143 -0
  28. package/dist/commands/review-dashboard-data.js.map +1 -0
  29. package/dist/commands/review-guardrail.d.ts +5 -0
  30. package/dist/commands/review-guardrail.d.ts.map +1 -0
  31. package/dist/commands/review-guardrail.js +156 -0
  32. package/dist/commands/review-guardrail.js.map +1 -0
  33. package/dist/commands/review-perf-profile.d.ts +5 -0
  34. package/dist/commands/review-perf-profile.d.ts.map +1 -0
  35. package/dist/commands/review-perf-profile.js +99 -0
  36. package/dist/commands/review-perf-profile.js.map +1 -0
  37. package/dist/commands/review-scope-limit.d.ts +5 -0
  38. package/dist/commands/review-scope-limit.d.ts.map +1 -0
  39. package/dist/commands/review-scope-limit.js +101 -0
  40. package/dist/commands/review-scope-limit.js.map +1 -0
  41. package/package.json +1 -1
  42. package/server.json +2 -2
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Review-scope-limit — Limit review scope to specific files, directories, or rules.
3
+ */
4
+ import { readFileSync, existsSync } from "fs";
5
+ // ─── Analysis ───────────────────────────────────────────────────────────────
6
+ function applyScope(verdict, filters) {
7
+ const original = verdict.findings;
8
+ let filtered = [...original];
9
+ for (const filter of filters) {
10
+ if (filter.type === "rule-prefix") {
11
+ filtered = filtered.filter((f) => f.ruleId.startsWith(filter.value));
12
+ }
13
+ else if (filter.type === "severity") {
14
+ filtered = filtered.filter((f) => (f.severity || "medium").toLowerCase() === filter.value.toLowerCase());
15
+ }
16
+ }
17
+ return {
18
+ originalCount: original.length,
19
+ filteredCount: filtered.length,
20
+ removedCount: original.length - filtered.length,
21
+ filters,
22
+ findings: filtered.map((f) => ({
23
+ ruleId: f.ruleId,
24
+ title: f.title,
25
+ severity: (f.severity || "medium").toLowerCase(),
26
+ })),
27
+ };
28
+ }
29
+ // ─── CLI ────────────────────────────────────────────────────────────────────
30
+ export function runReviewScopeLimit(argv) {
31
+ const fileIdx = argv.indexOf("--file");
32
+ const prefixIdx = argv.indexOf("--prefix");
33
+ const severityIdx = argv.indexOf("--severity");
34
+ const formatIdx = argv.indexOf("--format");
35
+ const filePath = fileIdx >= 0 ? argv[fileIdx + 1] : undefined;
36
+ const prefix = prefixIdx >= 0 ? argv[prefixIdx + 1] : undefined;
37
+ const severity = severityIdx >= 0 ? argv[severityIdx + 1] : undefined;
38
+ const format = formatIdx >= 0 ? argv[formatIdx + 1] : "table";
39
+ if (argv.includes("--help") || argv.includes("-h")) {
40
+ console.log(`
41
+ judges review-scope-limit — Limit review scope
42
+
43
+ Usage:
44
+ judges review-scope-limit --file <verdict.json> [--prefix <RULE-PREFIX>]
45
+ [--severity <level>] [--format table|json]
46
+
47
+ Options:
48
+ --file <path> Path to verdict JSON file (required)
49
+ --prefix <prefix> Filter by rule prefix (e.g., AUTH, CYBER)
50
+ --severity <level> Filter by severity (critical, high, medium, low)
51
+ --format <fmt> Output format: table (default), json
52
+ --help, -h Show this help
53
+ `);
54
+ return;
55
+ }
56
+ if (!filePath) {
57
+ console.error("Error: --file required");
58
+ process.exitCode = 1;
59
+ return;
60
+ }
61
+ if (!existsSync(filePath)) {
62
+ console.error(`Error: not found: ${filePath}`);
63
+ process.exitCode = 1;
64
+ return;
65
+ }
66
+ let verdict;
67
+ try {
68
+ verdict = JSON.parse(readFileSync(filePath, "utf-8"));
69
+ }
70
+ catch {
71
+ console.error("Error: invalid JSON");
72
+ process.exitCode = 1;
73
+ return;
74
+ }
75
+ const filters = [];
76
+ if (prefix !== undefined)
77
+ filters.push({ type: "rule-prefix", value: prefix });
78
+ if (severity !== undefined)
79
+ filters.push({ type: "severity", value: severity });
80
+ const result = applyScope(verdict, filters);
81
+ if (format === "json") {
82
+ console.log(JSON.stringify(result, null, 2));
83
+ return;
84
+ }
85
+ console.log(`\nScope-Limited Review`);
86
+ console.log("═".repeat(65));
87
+ console.log(` Original: ${result.originalCount} → Filtered: ${result.filteredCount} (removed: ${result.removedCount})`);
88
+ if (filters.length > 0) {
89
+ console.log(` Filters: ${filters.map((f) => `${f.type}=${f.value}`).join(", ")}`);
90
+ }
91
+ console.log("─".repeat(65));
92
+ console.log(`${"Rule".padEnd(20)} ${"Severity".padEnd(10)} Title`);
93
+ console.log("─".repeat(65));
94
+ for (const f of result.findings) {
95
+ const rule = f.ruleId.length > 18 ? f.ruleId.slice(0, 18) + "…" : f.ruleId;
96
+ const title = f.title.length > 30 ? f.title.slice(0, 30) + "…" : f.title;
97
+ console.log(`${rule.padEnd(20)} ${f.severity.padEnd(10)} ${title}`);
98
+ }
99
+ console.log("═".repeat(65));
100
+ }
101
+ //# sourceMappingURL=review-scope-limit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-scope-limit.js","sourceRoot":"","sources":["../../src/commands/review-scope-limit.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.88.0",
3
+ "version": "3.89.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.88.0",
10
+ "version": "3.89.0",
11
11
  "packages": [
12
12
  {
13
13
  "registryType": "npm",
14
14
  "identifier": "@kevinrabun/judges",
15
- "version": "3.88.0",
15
+ "version": "3.89.0",
16
16
  "transport": {
17
17
  "type": "stdio"
18
18
  }