@kevinrabun/judges 3.44.0 → 3.46.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/audit-bundle.d.ts +29 -0
  6. package/dist/commands/audit-bundle.d.ts.map +1 -0
  7. package/dist/commands/audit-bundle.js +235 -0
  8. package/dist/commands/audit-bundle.js.map +1 -0
  9. package/dist/commands/compare-runs.d.ts +38 -0
  10. package/dist/commands/compare-runs.d.ts.map +1 -0
  11. package/dist/commands/compare-runs.js +229 -0
  12. package/dist/commands/compare-runs.js.map +1 -0
  13. package/dist/commands/config-drift.d.ts +25 -0
  14. package/dist/commands/config-drift.d.ts.map +1 -0
  15. package/dist/commands/config-drift.js +214 -0
  16. package/dist/commands/config-drift.js.map +1 -0
  17. package/dist/commands/correlate.d.ts +28 -0
  18. package/dist/commands/correlate.d.ts.map +1 -0
  19. package/dist/commands/correlate.js +242 -0
  20. package/dist/commands/correlate.js.map +1 -0
  21. package/dist/commands/dev-score.d.ts +37 -0
  22. package/dist/commands/dev-score.d.ts.map +1 -0
  23. package/dist/commands/dev-score.js +204 -0
  24. package/dist/commands/dev-score.js.map +1 -0
  25. package/dist/commands/digest.d.ts +20 -0
  26. package/dist/commands/digest.d.ts.map +1 -0
  27. package/dist/commands/digest.js +222 -0
  28. package/dist/commands/digest.js.map +1 -0
  29. package/dist/commands/explain-finding.d.ts +8 -0
  30. package/dist/commands/explain-finding.d.ts.map +1 -0
  31. package/dist/commands/explain-finding.js +279 -0
  32. package/dist/commands/explain-finding.js.map +1 -0
  33. package/dist/commands/generate.d.ts +8 -0
  34. package/dist/commands/generate.d.ts.map +1 -0
  35. package/dist/commands/generate.js +404 -0
  36. package/dist/commands/generate.js.map +1 -0
  37. package/dist/commands/judge-reputation.d.ts +29 -0
  38. package/dist/commands/judge-reputation.d.ts.map +1 -0
  39. package/dist/commands/judge-reputation.js +199 -0
  40. package/dist/commands/judge-reputation.js.map +1 -0
  41. package/dist/commands/learn.d.ts +27 -0
  42. package/dist/commands/learn.d.ts.map +1 -0
  43. package/dist/commands/learn.js +289 -0
  44. package/dist/commands/learn.js.map +1 -0
  45. package/dist/commands/model-risk.d.ts +28 -0
  46. package/dist/commands/model-risk.d.ts.map +1 -0
  47. package/dist/commands/model-risk.js +221 -0
  48. package/dist/commands/model-risk.js.map +1 -0
  49. package/dist/commands/query.d.ts +20 -0
  50. package/dist/commands/query.d.ts.map +1 -0
  51. package/dist/commands/query.js +230 -0
  52. package/dist/commands/query.js.map +1 -0
  53. package/dist/commands/reg-watch.d.ts +21 -0
  54. package/dist/commands/reg-watch.d.ts.map +1 -0
  55. package/dist/commands/reg-watch.js +220 -0
  56. package/dist/commands/reg-watch.js.map +1 -0
  57. package/dist/commands/retro.d.ts +23 -0
  58. package/dist/commands/retro.d.ts.map +1 -0
  59. package/dist/commands/retro.js +217 -0
  60. package/dist/commands/retro.js.map +1 -0
  61. package/dist/commands/rule-share.d.ts +35 -0
  62. package/dist/commands/rule-share.d.ts.map +1 -0
  63. package/dist/commands/rule-share.js +203 -0
  64. package/dist/commands/rule-share.js.map +1 -0
  65. package/dist/commands/vote.d.ts +32 -0
  66. package/dist/commands/vote.d.ts.map +1 -0
  67. package/dist/commands/vote.js +201 -0
  68. package/dist/commands/vote.js.map +1 -0
  69. package/package.json +1 -1
  70. package/server.json +2 -2
@@ -0,0 +1,201 @@
1
+ /**
2
+ * Consensus voting — multi-developer voting on findings.
3
+ * Aggregate team confidence in whether a finding is a true positive.
4
+ *
5
+ * Stored locally in .judges-votes.json.
6
+ */
7
+ import { readFileSync, writeFileSync, existsSync } from "fs";
8
+ const VOTE_FILE = ".judges-votes.json";
9
+ // ─── Core ───────────────────────────────────────────────────────────────────
10
+ function loadDb(file = VOTE_FILE) {
11
+ if (!existsSync(file))
12
+ return { findings: [] };
13
+ return JSON.parse(readFileSync(file, "utf-8"));
14
+ }
15
+ function saveDb(db, file = VOTE_FILE) {
16
+ writeFileSync(file, JSON.stringify(db, null, 2));
17
+ }
18
+ function computeConsensus(votes) {
19
+ if (votes.length === 0)
20
+ return { consensus: "pending", score: 0 };
21
+ const weights = { agree: 1, disagree: -1, unsure: 0 };
22
+ const totalWeight = votes.reduce((sum, v) => sum + weights[v.verdict], 0);
23
+ const score = Math.round((totalWeight / votes.length) * 100) / 100;
24
+ if (votes.length < 2)
25
+ return { consensus: "pending", score };
26
+ if (score > 0.5)
27
+ return { consensus: "true-positive", score };
28
+ if (score < -0.5)
29
+ return { consensus: "false-positive", score };
30
+ return { consensus: "disputed", score };
31
+ }
32
+ export function castVote(findingId, ruleId, title, voter, verdict, comment) {
33
+ const db = loadDb();
34
+ let finding = db.findings.find((f) => f.findingId === findingId);
35
+ if (!finding) {
36
+ finding = { findingId, ruleId, title, votes: [], consensusScore: 0 };
37
+ db.findings.push(finding);
38
+ }
39
+ // Update or add vote
40
+ const existing = finding.votes.findIndex((v) => v.voter === voter);
41
+ const vote = { voter, verdict, comment, timestamp: new Date().toISOString() };
42
+ if (existing >= 0) {
43
+ finding.votes[existing] = vote;
44
+ }
45
+ else {
46
+ finding.votes.push(vote);
47
+ }
48
+ const { consensus, score } = computeConsensus(finding.votes);
49
+ finding.consensus = consensus;
50
+ finding.consensusScore = score;
51
+ saveDb(db);
52
+ return finding;
53
+ }
54
+ export function getVoteStats() {
55
+ const db = loadDb();
56
+ const voters = new Set();
57
+ for (const f of db.findings) {
58
+ for (const v of f.votes)
59
+ voters.add(v.voter);
60
+ }
61
+ return {
62
+ total: db.findings.length,
63
+ truePositive: db.findings.filter((f) => f.consensus === "true-positive").length,
64
+ falsePositive: db.findings.filter((f) => f.consensus === "false-positive").length,
65
+ disputed: db.findings.filter((f) => f.consensus === "disputed").length,
66
+ pending: db.findings.filter((f) => f.consensus === "pending").length,
67
+ totalVotes: db.findings.reduce((s, f) => s + f.votes.length, 0),
68
+ uniqueVoters: voters.size,
69
+ };
70
+ }
71
+ // ─── CLI ────────────────────────────────────────────────────────────────────
72
+ export function runVote(argv) {
73
+ if (argv.includes("--help") || argv.includes("-h")) {
74
+ console.log(`
75
+ judges vote — Consensus voting on findings
76
+
77
+ Usage:
78
+ judges vote --finding <id> --voter "Alice" --verdict agree
79
+ judges vote --finding <id> --voter "Bob" --verdict disagree --comment "FP in test code"
80
+ judges vote --list Show all voted findings
81
+ judges vote --consensus Show findings with consensus
82
+ judges vote --disputed Show disputed findings
83
+ judges vote --stats Voting statistics
84
+
85
+ Options:
86
+ --finding <id> Finding ID (ruleId:title format)
87
+ --rule <id> Rule ID for the finding
88
+ --title <text> Finding title
89
+ --voter <name> Voter name
90
+ --verdict <v> agree | disagree | unsure
91
+ --comment <text> Optional comment
92
+ --list List all voted findings
93
+ --consensus Show findings with clear consensus
94
+ --disputed Show disputed findings
95
+ --stats Show statistics
96
+ --format json JSON output
97
+ --help, -h Show this help
98
+ `);
99
+ return;
100
+ }
101
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
102
+ // Cast vote
103
+ const findingId = argv.find((_a, i) => argv[i - 1] === "--finding");
104
+ const voter = argv.find((_a, i) => argv[i - 1] === "--voter");
105
+ const verdict = argv.find((_a, i) => argv[i - 1] === "--verdict");
106
+ if (findingId && voter && verdict) {
107
+ const ruleId = argv.find((_a, i) => argv[i - 1] === "--rule") || findingId.split(":")[0];
108
+ const title = argv.find((_a, i) => argv[i - 1] === "--title") || findingId;
109
+ const comment = argv.find((_a, i) => argv[i - 1] === "--comment");
110
+ const result = castVote(findingId, ruleId, title, voter, verdict, comment);
111
+ if (format === "json") {
112
+ console.log(JSON.stringify(result, null, 2));
113
+ }
114
+ else {
115
+ console.log(` ✅ Vote recorded: ${voter} → ${verdict} on ${findingId}`);
116
+ console.log(` Consensus: ${result.consensus} (score: ${result.consensusScore}, ${result.votes.length} vote(s))`);
117
+ }
118
+ return;
119
+ }
120
+ const db = loadDb();
121
+ // List disputed
122
+ if (argv.includes("--disputed")) {
123
+ const disputed = db.findings.filter((f) => f.consensus === "disputed");
124
+ if (format === "json") {
125
+ console.log(JSON.stringify(disputed, null, 2));
126
+ }
127
+ else if (disputed.length === 0) {
128
+ console.log("\n No disputed findings.\n");
129
+ }
130
+ else {
131
+ console.log(`\n Disputed Findings (${disputed.length})\n ──────────────────`);
132
+ for (const f of disputed) {
133
+ const agree = f.votes.filter((v) => v.verdict === "agree").length;
134
+ const disagree = f.votes.filter((v) => v.verdict === "disagree").length;
135
+ console.log(` ${f.ruleId.padEnd(12)} ${f.title.slice(0, 40)} — ${agree} agree, ${disagree} disagree`);
136
+ }
137
+ console.log("");
138
+ }
139
+ return;
140
+ }
141
+ // Consensus view
142
+ if (argv.includes("--consensus")) {
143
+ const decided = db.findings.filter((f) => f.consensus === "true-positive" || f.consensus === "false-positive");
144
+ if (format === "json") {
145
+ console.log(JSON.stringify(decided, null, 2));
146
+ }
147
+ else {
148
+ console.log(`\n Consensus Findings (${decided.length})\n ────────────────────`);
149
+ for (const f of decided) {
150
+ const icon = f.consensus === "true-positive" ? "✅" : "❌";
151
+ console.log(` ${icon} ${f.ruleId.padEnd(12)} ${f.consensus?.padEnd(16)} score: ${f.consensusScore} (${f.votes.length} votes)`);
152
+ }
153
+ console.log("");
154
+ }
155
+ return;
156
+ }
157
+ // Stats
158
+ if (argv.includes("--stats")) {
159
+ const s = getVoteStats();
160
+ if (format === "json") {
161
+ console.log(JSON.stringify(s, null, 2));
162
+ }
163
+ else {
164
+ console.log(`
165
+ Voting Statistics
166
+ ─────────────────
167
+ Findings voted on: ${s.total}
168
+ True positives: ${s.truePositive}
169
+ False positives: ${s.falsePositive}
170
+ Disputed: ${s.disputed}
171
+ Pending: ${s.pending}
172
+ Total votes cast: ${s.totalVotes}
173
+ Unique voters: ${s.uniqueVoters}
174
+ `);
175
+ }
176
+ return;
177
+ }
178
+ // Default: list all
179
+ if (db.findings.length === 0) {
180
+ console.log("\n No votes recorded. Use --finding and --voter to cast a vote.\n");
181
+ return;
182
+ }
183
+ if (format === "json") {
184
+ console.log(JSON.stringify(db.findings, null, 2));
185
+ }
186
+ else {
187
+ console.log(`\n All Voted Findings (${db.findings.length})\n ───────────────────────`);
188
+ for (const f of db.findings) {
189
+ const icon = f.consensus === "true-positive"
190
+ ? "✅"
191
+ : f.consensus === "false-positive"
192
+ ? "❌"
193
+ : f.consensus === "disputed"
194
+ ? "⚠️"
195
+ : "⏳";
196
+ console.log(` ${icon} ${f.ruleId.padEnd(12)} ${f.consensus?.padEnd(16) || "pending".padEnd(16)} ${f.votes.length} vote(s) — ${f.title.slice(0, 40)}`);
197
+ }
198
+ console.log("");
199
+ }
200
+ }
201
+ //# sourceMappingURL=vote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vote.js","sourceRoot":"","sources":["../../src/commands/vote.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.44.0",
3
+ "version": "3.46.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.44.0",
10
+ "version": "3.46.0",
11
11
  "packages": [
12
12
  {
13
13
  "registryType": "npm",
14
14
  "identifier": "@kevinrabun/judges",
15
- "version": "3.44.0",
15
+ "version": "3.46.0",
16
16
  "transport": {
17
17
  "type": "stdio"
18
18
  }