@kevinrabun/judges 3.87.0 → 3.88.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 +16 -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-age-analysis.d.ts +5 -0
  6. package/dist/commands/finding-age-analysis.d.ts.map +1 -0
  7. package/dist/commands/finding-age-analysis.js +145 -0
  8. package/dist/commands/finding-age-analysis.js.map +1 -0
  9. package/dist/commands/finding-correlation.d.ts +5 -0
  10. package/dist/commands/finding-correlation.d.ts.map +1 -0
  11. package/dist/commands/finding-correlation.js +104 -0
  12. package/dist/commands/finding-correlation.js.map +1 -0
  13. package/dist/commands/finding-dependency-tree.d.ts +5 -0
  14. package/dist/commands/finding-dependency-tree.d.ts.map +1 -0
  15. package/dist/commands/finding-dependency-tree.js +117 -0
  16. package/dist/commands/finding-dependency-tree.js.map +1 -0
  17. package/dist/commands/finding-suppression-audit.d.ts +5 -0
  18. package/dist/commands/finding-suppression-audit.d.ts.map +1 -0
  19. package/dist/commands/finding-suppression-audit.js +138 -0
  20. package/dist/commands/finding-suppression-audit.js.map +1 -0
  21. package/dist/commands/review-ci-integration.d.ts +5 -0
  22. package/dist/commands/review-ci-integration.d.ts.map +1 -0
  23. package/dist/commands/review-ci-integration.js +126 -0
  24. package/dist/commands/review-ci-integration.js.map +1 -0
  25. package/dist/commands/review-comparative.d.ts +5 -0
  26. package/dist/commands/review-comparative.d.ts.map +1 -0
  27. package/dist/commands/review-comparative.js +150 -0
  28. package/dist/commands/review-comparative.js.map +1 -0
  29. package/dist/commands/review-custom-rule.d.ts +5 -0
  30. package/dist/commands/review-custom-rule.d.ts.map +1 -0
  31. package/dist/commands/review-custom-rule.js +170 -0
  32. package/dist/commands/review-custom-rule.js.map +1 -0
  33. package/dist/commands/review-notification.d.ts +5 -0
  34. package/dist/commands/review-notification.d.ts.map +1 -0
  35. package/dist/commands/review-notification.js +127 -0
  36. package/dist/commands/review-notification.js.map +1 -0
  37. package/dist/commands/review-template-export.d.ts +5 -0
  38. package/dist/commands/review-template-export.d.ts.map +1 -0
  39. package/dist/commands/review-template-export.js +147 -0
  40. package/dist/commands/review-template-export.js.map +1 -0
  41. package/package.json +1 -1
  42. package/server.json +2 -2
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Review-template-export — Export review templates for reuse.
3
+ */
4
+ import { readFileSync, writeFileSync, existsSync } from "fs";
5
+ import { defaultRegistry } from "../judge-registry.js";
6
+ // ─── Helpers ────────────────────────────────────────────────────────────────
7
+ function generateTemplate(name, verdict) {
8
+ const judges = defaultRegistry.getJudges();
9
+ const activeJudges = judges.map((j) => j.id);
10
+ const ruleOverrides = {};
11
+ if (verdict !== undefined) {
12
+ for (const f of verdict.findings) {
13
+ if (!ruleOverrides[f.ruleId]) {
14
+ ruleOverrides[f.ruleId] = (f.severity || "medium").toLowerCase();
15
+ }
16
+ }
17
+ }
18
+ return {
19
+ name,
20
+ version: 1,
21
+ judges: activeJudges,
22
+ ruleOverrides,
23
+ minSeverity: "low",
24
+ description: `Review template: ${name}`,
25
+ createdAt: new Date().toISOString(),
26
+ };
27
+ }
28
+ function presetTemplates() {
29
+ return [
30
+ {
31
+ name: "security-focused",
32
+ version: 1,
33
+ judges: ["cybersecurity", "data-security", "authentication", "api-security"],
34
+ ruleOverrides: {},
35
+ minSeverity: "medium",
36
+ description: "Security-focused review — only security judges active",
37
+ createdAt: new Date().toISOString(),
38
+ },
39
+ {
40
+ name: "full-review",
41
+ version: 1,
42
+ judges: defaultRegistry.getJudges().map((j) => j.id),
43
+ ruleOverrides: {},
44
+ minSeverity: "low",
45
+ description: "Full review with all judges active",
46
+ createdAt: new Date().toISOString(),
47
+ },
48
+ {
49
+ name: "quick-scan",
50
+ version: 1,
51
+ judges: ["cybersecurity", "code-quality"],
52
+ ruleOverrides: {},
53
+ minSeverity: "high",
54
+ description: "Quick scan — critical and high severity only",
55
+ createdAt: new Date().toISOString(),
56
+ },
57
+ ];
58
+ }
59
+ // ─── CLI ────────────────────────────────────────────────────────────────────
60
+ export function runReviewTemplateExport(argv) {
61
+ const actionIdx = argv.indexOf("--action");
62
+ const nameIdx = argv.indexOf("--name");
63
+ const fileIdx = argv.indexOf("--file");
64
+ const outputIdx = argv.indexOf("--output");
65
+ const formatIdx = argv.indexOf("--format");
66
+ const action = actionIdx >= 0 ? argv[actionIdx + 1] : "list";
67
+ const name = nameIdx >= 0 ? argv[nameIdx + 1] : "default";
68
+ const filePath = fileIdx >= 0 ? argv[fileIdx + 1] : undefined;
69
+ const outputPath = outputIdx >= 0 ? argv[outputIdx + 1] : undefined;
70
+ const format = formatIdx >= 0 ? argv[formatIdx + 1] : "table";
71
+ if (argv.includes("--help") || argv.includes("-h")) {
72
+ console.log(`
73
+ judges review-template-export — Export review templates
74
+
75
+ Usage:
76
+ judges review-template-export --action <action> [options]
77
+
78
+ Actions:
79
+ list Show preset templates (default)
80
+ create Create template from verdict
81
+ export Export template to file
82
+
83
+ Options:
84
+ --action <act> Action: list, create, export
85
+ --name <name> Template name (for create)
86
+ --file <path> Verdict JSON file (for create)
87
+ --output <path> Output file path (for export)
88
+ --format <fmt> Output format: table (default), json
89
+ --help, -h Show this help
90
+ `);
91
+ return;
92
+ }
93
+ if (action === "create") {
94
+ let verdict;
95
+ if (filePath && existsSync(filePath)) {
96
+ try {
97
+ verdict = JSON.parse(readFileSync(filePath, "utf-8"));
98
+ }
99
+ catch {
100
+ console.error("Error: invalid JSON");
101
+ process.exitCode = 1;
102
+ return;
103
+ }
104
+ }
105
+ const template = generateTemplate(name, verdict);
106
+ if (outputPath) {
107
+ writeFileSync(outputPath, JSON.stringify(template, null, 2));
108
+ console.log(`Template exported to ${outputPath}`);
109
+ return;
110
+ }
111
+ console.log(JSON.stringify(template, null, 2));
112
+ return;
113
+ }
114
+ if (action === "export") {
115
+ const presets = presetTemplates();
116
+ const target = presets.find((p) => p.name === name);
117
+ if (target === undefined) {
118
+ console.error(`Error: preset not found: ${name}`);
119
+ console.error(`Available: ${presets.map((p) => p.name).join(", ")}`);
120
+ process.exitCode = 1;
121
+ return;
122
+ }
123
+ if (outputPath) {
124
+ writeFileSync(outputPath, JSON.stringify(target, null, 2));
125
+ console.log(`Template "${name}" exported to ${outputPath}`);
126
+ return;
127
+ }
128
+ console.log(JSON.stringify(target, null, 2));
129
+ return;
130
+ }
131
+ // default: list
132
+ const presets = presetTemplates();
133
+ if (format === "json") {
134
+ console.log(JSON.stringify(presets, null, 2));
135
+ return;
136
+ }
137
+ console.log(`\nReview Templates`);
138
+ console.log("═".repeat(70));
139
+ console.log(`${"Name".padEnd(22)} ${"Judges".padEnd(8)} ${"Min Sev".padEnd(10)} Description`);
140
+ console.log("─".repeat(70));
141
+ for (const t of presets) {
142
+ const desc = t.description.length > 30 ? t.description.slice(0, 30) + "…" : t.description;
143
+ console.log(`${t.name.padEnd(22)} ${String(t.judges.length).padEnd(8)} ${t.minSeverity.padEnd(10)} ${desc}`);
144
+ }
145
+ console.log("═".repeat(70));
146
+ }
147
+ //# sourceMappingURL=review-template-export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-template-export.js","sourceRoot":"","sources":["../../src/commands/review-template-export.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.87.0",
3
+ "version": "3.88.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.87.0",
10
+ "version": "3.88.0",
11
11
  "packages": [
12
12
  {
13
13
  "registryType": "npm",
14
14
  "identifier": "@kevinrabun/judges",
15
- "version": "3.87.0",
15
+ "version": "3.88.0",
16
16
  "transport": {
17
17
  "type": "stdio"
18
18
  }