@kevinrabun/judges 3.84.0 → 3.85.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-cve-lookup.d.ts +5 -0
  6. package/dist/commands/finding-cve-lookup.d.ts.map +1 -0
  7. package/dist/commands/finding-cve-lookup.js +98 -0
  8. package/dist/commands/finding-cve-lookup.js.map +1 -0
  9. package/dist/commands/finding-dependency-risk.d.ts +5 -0
  10. package/dist/commands/finding-dependency-risk.d.ts.map +1 -0
  11. package/dist/commands/finding-dependency-risk.js +118 -0
  12. package/dist/commands/finding-dependency-risk.js.map +1 -0
  13. package/dist/commands/finding-security-hotspot.d.ts +5 -0
  14. package/dist/commands/finding-security-hotspot.d.ts.map +1 -0
  15. package/dist/commands/finding-security-hotspot.js +176 -0
  16. package/dist/commands/finding-security-hotspot.js.map +1 -0
  17. package/dist/commands/finding-suppression-log.d.ts +5 -0
  18. package/dist/commands/finding-suppression-log.d.ts.map +1 -0
  19. package/dist/commands/finding-suppression-log.js +175 -0
  20. package/dist/commands/finding-suppression-log.js.map +1 -0
  21. package/dist/commands/finding-timeline-view.d.ts +5 -0
  22. package/dist/commands/finding-timeline-view.d.ts.map +1 -0
  23. package/dist/commands/finding-timeline-view.js +99 -0
  24. package/dist/commands/finding-timeline-view.js.map +1 -0
  25. package/dist/commands/review-batch-run.d.ts +5 -0
  26. package/dist/commands/review-batch-run.d.ts.map +1 -0
  27. package/dist/commands/review-batch-run.js +150 -0
  28. package/dist/commands/review-batch-run.js.map +1 -0
  29. package/dist/commands/review-diff-highlight.d.ts +5 -0
  30. package/dist/commands/review-diff-highlight.d.ts.map +1 -0
  31. package/dist/commands/review-diff-highlight.js +180 -0
  32. package/dist/commands/review-diff-highlight.js.map +1 -0
  33. package/dist/commands/review-output-filter.d.ts +5 -0
  34. package/dist/commands/review-output-filter.d.ts.map +1 -0
  35. package/dist/commands/review-output-filter.js +113 -0
  36. package/dist/commands/review-output-filter.js.map +1 -0
  37. package/dist/commands/review-pr-template.d.ts +5 -0
  38. package/dist/commands/review-pr-template.d.ts.map +1 -0
  39. package/dist/commands/review-pr-template.js +105 -0
  40. package/dist/commands/review-pr-template.js.map +1 -0
  41. package/package.json +1 -1
  42. package/server.json +2 -2
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Review-pr-template — Generate pull request templates from review findings.
3
+ */
4
+ import { readFileSync, existsSync } from "fs";
5
+ // ─── Helpers ────────────────────────────────────────────────────────────────
6
+ function generateTemplate(verdict, title) {
7
+ const lines = [];
8
+ lines.push(`## ${title || "Pull Request Review Summary"}`);
9
+ lines.push("");
10
+ lines.push("### Overview");
11
+ lines.push(`- **Verdict:** ${verdict.overallVerdict}`);
12
+ lines.push(`- **Score:** ${verdict.overallScore}`);
13
+ lines.push(`- **Total Findings:** ${verdict.findings.length}`);
14
+ lines.push(`- **Critical:** ${verdict.criticalCount} | **High:** ${verdict.highCount}`);
15
+ lines.push(`- **Date:** ${verdict.timestamp || new Date().toISOString()}`);
16
+ lines.push("");
17
+ if (verdict.findings.length > 0) {
18
+ lines.push("### Findings");
19
+ lines.push("");
20
+ const critical = verdict.findings.filter((f) => (f.severity || "").toLowerCase() === "critical");
21
+ const high = verdict.findings.filter((f) => (f.severity || "").toLowerCase() === "high");
22
+ const medium = verdict.findings.filter((f) => (f.severity || "").toLowerCase() === "medium");
23
+ const low = verdict.findings.filter((f) => !["critical", "high", "medium"].includes((f.severity || "").toLowerCase()));
24
+ const sections = [
25
+ { label: "Critical", items: critical },
26
+ { label: "High", items: high },
27
+ { label: "Medium", items: medium },
28
+ { label: "Low / Info", items: low },
29
+ ];
30
+ for (const sec of sections) {
31
+ if (sec.items.length === 0)
32
+ continue;
33
+ lines.push(`#### ${sec.label} (${sec.items.length})`);
34
+ for (const f of sec.items) {
35
+ lines.push(`- **${f.ruleId}**: ${f.title}`);
36
+ if (f.recommendation)
37
+ lines.push(` - Fix: ${f.recommendation}`);
38
+ }
39
+ lines.push("");
40
+ }
41
+ }
42
+ lines.push("### Checklist");
43
+ lines.push("- [ ] All critical findings addressed");
44
+ lines.push("- [ ] All high findings addressed or accepted");
45
+ lines.push("- [ ] Tests updated if needed");
46
+ lines.push("- [ ] Documentation updated if needed");
47
+ lines.push("");
48
+ if (verdict.summary) {
49
+ lines.push("### Summary");
50
+ lines.push(verdict.summary);
51
+ lines.push("");
52
+ }
53
+ return lines.join("\n");
54
+ }
55
+ // ─── CLI ────────────────────────────────────────────────────────────────────
56
+ export function runReviewPrTemplate(argv) {
57
+ const fileIdx = argv.indexOf("--file");
58
+ const titleIdx = argv.indexOf("--title");
59
+ const formatIdx = argv.indexOf("--format");
60
+ const filePath = fileIdx >= 0 ? argv[fileIdx + 1] : undefined;
61
+ const title = titleIdx >= 0 ? argv[titleIdx + 1] : "Pull Request Review Summary";
62
+ const format = formatIdx >= 0 ? argv[formatIdx + 1] : "markdown";
63
+ if (argv.includes("--help") || argv.includes("-h")) {
64
+ console.log(`
65
+ judges review-pr-template — Generate PR template from findings
66
+
67
+ Usage:
68
+ judges review-pr-template --file <verdict.json> [--title <text>]
69
+ [--format markdown|json]
70
+
71
+ Options:
72
+ --file <path> Path to verdict JSON file (required)
73
+ --title <text> PR title (default: "Pull Request Review Summary")
74
+ --format <fmt> Output format: markdown (default), json
75
+ --help, -h Show this help
76
+ `);
77
+ return;
78
+ }
79
+ if (!filePath) {
80
+ console.error("Error: --file required");
81
+ process.exitCode = 1;
82
+ return;
83
+ }
84
+ if (!existsSync(filePath)) {
85
+ console.error(`Error: not found: ${filePath}`);
86
+ process.exitCode = 1;
87
+ return;
88
+ }
89
+ let verdict;
90
+ try {
91
+ verdict = JSON.parse(readFileSync(filePath, "utf-8"));
92
+ }
93
+ catch {
94
+ console.error("Error: invalid JSON");
95
+ process.exitCode = 1;
96
+ return;
97
+ }
98
+ const template = generateTemplate(verdict, title);
99
+ if (format === "json") {
100
+ console.log(JSON.stringify({ title, template, findingCount: verdict.findings.length, verdict: verdict.overallVerdict }, null, 2));
101
+ return;
102
+ }
103
+ console.log(template);
104
+ }
105
+ //# sourceMappingURL=review-pr-template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-pr-template.js","sourceRoot":"","sources":["../../src/commands/review-pr-template.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.84.0",
3
+ "version": "3.85.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.84.0",
10
+ "version": "3.85.0",
11
11
  "packages": [
12
12
  {
13
13
  "registryType": "npm",
14
14
  "identifier": "@kevinrabun/judges",
15
- "version": "3.84.0",
15
+ "version": "3.85.0",
16
16
  "transport": {
17
17
  "type": "stdio"
18
18
  }