@kevinrabun/judges 3.45.0 → 3.47.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/adoption-report.d.ts +8 -0
  6. package/dist/commands/adoption-report.d.ts.map +1 -0
  7. package/dist/commands/adoption-report.js +219 -0
  8. package/dist/commands/adoption-report.js.map +1 -0
  9. package/dist/commands/ai-model-trust.d.ts +17 -0
  10. package/dist/commands/ai-model-trust.d.ts.map +1 -0
  11. package/dist/commands/ai-model-trust.js +235 -0
  12. package/dist/commands/ai-model-trust.js.map +1 -0
  13. package/dist/commands/ai-prompt-audit.d.ts +23 -0
  14. package/dist/commands/ai-prompt-audit.d.ts.map +1 -0
  15. package/dist/commands/ai-prompt-audit.js +255 -0
  16. package/dist/commands/ai-prompt-audit.js.map +1 -0
  17. package/dist/commands/audit-bundle.d.ts +29 -0
  18. package/dist/commands/audit-bundle.d.ts.map +1 -0
  19. package/dist/commands/audit-bundle.js +235 -0
  20. package/dist/commands/audit-bundle.js.map +1 -0
  21. package/dist/commands/code-owner-suggest.d.ts +17 -0
  22. package/dist/commands/code-owner-suggest.d.ts.map +1 -0
  23. package/dist/commands/code-owner-suggest.js +215 -0
  24. package/dist/commands/code-owner-suggest.js.map +1 -0
  25. package/dist/commands/config-drift.d.ts +25 -0
  26. package/dist/commands/config-drift.d.ts.map +1 -0
  27. package/dist/commands/config-drift.js +214 -0
  28. package/dist/commands/config-drift.js.map +1 -0
  29. package/dist/commands/cost-forecast.d.ts +19 -0
  30. package/dist/commands/cost-forecast.d.ts.map +1 -0
  31. package/dist/commands/cost-forecast.js +194 -0
  32. package/dist/commands/cost-forecast.js.map +1 -0
  33. package/dist/commands/dev-score.d.ts +37 -0
  34. package/dist/commands/dev-score.d.ts.map +1 -0
  35. package/dist/commands/dev-score.js +204 -0
  36. package/dist/commands/dev-score.js.map +1 -0
  37. package/dist/commands/generate.d.ts +8 -0
  38. package/dist/commands/generate.d.ts.map +1 -0
  39. package/dist/commands/generate.js +404 -0
  40. package/dist/commands/generate.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/pr-quality-gate.d.ts +29 -0
  50. package/dist/commands/pr-quality-gate.d.ts.map +1 -0
  51. package/dist/commands/pr-quality-gate.js +208 -0
  52. package/dist/commands/pr-quality-gate.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/team-leaderboard.d.ts +25 -0
  62. package/dist/commands/team-leaderboard.d.ts.map +1 -0
  63. package/dist/commands/team-leaderboard.js +228 -0
  64. package/dist/commands/team-leaderboard.js.map +1 -0
  65. package/dist/commands/team-rules-sync.d.ts +8 -0
  66. package/dist/commands/team-rules-sync.d.ts.map +1 -0
  67. package/dist/commands/team-rules-sync.js +251 -0
  68. package/dist/commands/team-rules-sync.js.map +1 -0
  69. package/package.json +1 -1
  70. package/server.json +2 -2
@@ -0,0 +1,219 @@
1
+ /**
2
+ * Adoption report — team-level adoption metrics dashboard
3
+ * showing PR coverage, remediation velocity, and cost savings.
4
+ *
5
+ * All data sourced from local history files.
6
+ */
7
+ import { readFileSync, existsSync } from "fs";
8
+ import { join } from "path";
9
+ // ─── Data loading ───────────────────────────────────────────────────────────
10
+ function loadJsonSafe(path, fallback) {
11
+ if (!existsSync(path))
12
+ return fallback;
13
+ try {
14
+ return JSON.parse(readFileSync(path, "utf-8"));
15
+ }
16
+ catch {
17
+ return fallback;
18
+ }
19
+ }
20
+ function countDevs() {
21
+ const scoreDir = ".judges-scores";
22
+ if (!existsSync(scoreDir))
23
+ return 0;
24
+ try {
25
+ const { readdirSync } = require("fs");
26
+ return readdirSync(scoreDir).filter((f) => f.endsWith(".json")).length;
27
+ }
28
+ catch {
29
+ return 0;
30
+ }
31
+ }
32
+ function loadLeaderboard() {
33
+ const file = join(".judges-leaderboard", "leaderboard.json");
34
+ const data = loadJsonSafe(file, { developers: [] });
35
+ return data.developers || [];
36
+ }
37
+ function loadDigestData() {
38
+ const file = ".judges-digest.json";
39
+ const data = loadJsonSafe(file, { snapshots: [] });
40
+ return data.snapshots || [];
41
+ }
42
+ function loadCostData() {
43
+ const file = join(".judges-cost-forecast", "history.json");
44
+ return loadJsonSafe(file, { estimatedCost: 0, snapshots: [] });
45
+ }
46
+ function loadGateData() {
47
+ const file = join(".judges-quality-gate", "gate-history.json");
48
+ return loadJsonSafe(file, { results: [] });
49
+ }
50
+ // ─── Core ───────────────────────────────────────────────────────────────────
51
+ function computeMetrics() {
52
+ const devs = loadLeaderboard();
53
+ const digests = loadDigestData();
54
+ const costData = loadCostData();
55
+ const gateData = loadGateData();
56
+ const devCount = Math.max(countDevs(), devs.length);
57
+ const totalScans = devs.reduce((s, d) => s + d.scansRun, 0) || gateData.results.length;
58
+ const totalFindings = devs.reduce((s, d) => s + d.findingsReviewed, 0);
59
+ const findingsFixed = devs.reduce((s, d) => s + d.findingsFixed, 0);
60
+ const fixRate = totalFindings > 0 ? Math.round((findingsFixed / totalFindings) * 100) : 0;
61
+ // Category analysis from digest data
62
+ const categoryMap = new Map();
63
+ for (const d of digests) {
64
+ const count = d.findingCount || 0;
65
+ const existing = categoryMap.get("general") || 0;
66
+ categoryMap.set("general", existing + count);
67
+ }
68
+ const topCategories = [...categoryMap.entries()]
69
+ .map(([category, count]) => ({ category, count }))
70
+ .sort((a, b) => b.count - a.count)
71
+ .slice(0, 5);
72
+ // Weekly trend from gate data
73
+ const weeklyMap = new Map();
74
+ for (const r of gateData.results) {
75
+ const week = r.timestamp.slice(0, 10);
76
+ const entry = weeklyMap.get(week) || { scans: 0, findings: 0 };
77
+ entry.scans++;
78
+ entry.findings += r.total;
79
+ weeklyMap.set(week, entry);
80
+ }
81
+ const weeklyTrend = [...weeklyMap.entries()].map(([week, data]) => ({ week, ...data })).slice(-12);
82
+ // Cost saved estimate
83
+ const costSaved = costData.snapshots.length > 1
84
+ ? Math.max(0, costData.snapshots[0].estimatedCost - costData.snapshots[costData.snapshots.length - 1].estimatedCost)
85
+ : 0;
86
+ // Adoption score: 0-100
87
+ let adoptionScore = 0;
88
+ if (totalScans > 0)
89
+ adoptionScore += 20;
90
+ if (totalScans > 50)
91
+ adoptionScore += 10;
92
+ if (devCount >= 3)
93
+ adoptionScore += 15;
94
+ if (devCount >= 10)
95
+ adoptionScore += 10;
96
+ if (fixRate >= 50)
97
+ adoptionScore += 15;
98
+ if (fixRate >= 80)
99
+ adoptionScore += 10;
100
+ if (gateData.results.length > 0)
101
+ adoptionScore += 10;
102
+ if (costData.snapshots.length > 0)
103
+ adoptionScore += 10;
104
+ return {
105
+ totalScans,
106
+ totalFindings,
107
+ findingsFixed,
108
+ fixRate,
109
+ avgRemediationDays: 0, // Would need timestamp analysis
110
+ activeDevelopers: devCount,
111
+ topCategories,
112
+ weeklyTrend,
113
+ costSaved,
114
+ adoptionScore: Math.min(100, adoptionScore),
115
+ };
116
+ }
117
+ // ─── CLI ────────────────────────────────────────────────────────────────────
118
+ export function runAdoptionReport(argv) {
119
+ if (argv.includes("--help") || argv.includes("-h")) {
120
+ console.log(`
121
+ judges adoption-report — Team adoption metrics dashboard
122
+
123
+ Usage:
124
+ judges adoption-report
125
+ judges adoption-report --summary
126
+ judges adoption-report --trends
127
+ judges adoption-report --executive
128
+
129
+ Options:
130
+ --summary One-line adoption summary
131
+ --trends Show weekly scan/findings trends
132
+ --executive Executive summary (short, formatted for leadership)
133
+ --format json JSON output
134
+ --help, -h Show this help
135
+ `);
136
+ return;
137
+ }
138
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
139
+ const metrics = computeMetrics();
140
+ // Summary
141
+ if (argv.includes("--summary")) {
142
+ if (format === "json") {
143
+ console.log(JSON.stringify({ adoptionScore: metrics.adoptionScore, totalScans: metrics.totalScans, fixRate: metrics.fixRate }, null, 2));
144
+ }
145
+ else {
146
+ console.log(` Adoption: ${metrics.adoptionScore}/100 | Scans: ${metrics.totalScans} | Fix rate: ${metrics.fixRate}% | Devs: ${metrics.activeDevelopers}`);
147
+ }
148
+ return;
149
+ }
150
+ // Trends
151
+ if (argv.includes("--trends")) {
152
+ if (format === "json") {
153
+ console.log(JSON.stringify(metrics.weeklyTrend, null, 2));
154
+ }
155
+ else {
156
+ console.log(`\n Weekly Trends\n ──────────────────────────`);
157
+ if (metrics.weeklyTrend.length === 0) {
158
+ console.log(" No trend data yet. Use pr-quality-gate --check to record gate decisions.");
159
+ }
160
+ else {
161
+ for (const w of metrics.weeklyTrend) {
162
+ const bar = "█".repeat(Math.min(40, w.scans));
163
+ console.log(` ${w.week} ${w.scans.toString().padEnd(4)} scans ${w.findings.toString().padEnd(4)} findings ${bar}`);
164
+ }
165
+ }
166
+ console.log("");
167
+ }
168
+ return;
169
+ }
170
+ // Executive summary
171
+ if (argv.includes("--executive")) {
172
+ if (format === "json") {
173
+ console.log(JSON.stringify(metrics, null, 2));
174
+ }
175
+ else {
176
+ console.log(`
177
+ ╔══════════════════════════════════════════╗
178
+ ║ Judges Adoption — Executive Report ║
179
+ ╠══════════════════════════════════════════╣
180
+ ║ Adoption Score: ${metrics.adoptionScore.toString().padEnd(3)}/100 ║
181
+ ║ Active Devs: ${metrics.activeDevelopers.toString().padEnd(24)}║
182
+ ║ Total Scans: ${metrics.totalScans.toString().padEnd(24)}║
183
+ ║ Findings Caught: ${metrics.totalFindings.toString().padEnd(24)}║
184
+ ║ Fix Rate: ${(metrics.fixRate + "%").padEnd(24)}║
185
+ ║ Cost Saved: $${metrics.costSaved.toLocaleString().padEnd(23)}║
186
+ ╚══════════════════════════════════════════╝
187
+ `);
188
+ }
189
+ return;
190
+ }
191
+ // Full report
192
+ if (format === "json") {
193
+ console.log(JSON.stringify(metrics, null, 2));
194
+ }
195
+ else {
196
+ console.log(`\n Judges Adoption Report\n ──────────────────────────`);
197
+ console.log(` Adoption Score: ${metrics.adoptionScore}/100`);
198
+ console.log(` Active Developers: ${metrics.activeDevelopers}`);
199
+ console.log(` Total Scans: ${metrics.totalScans}`);
200
+ console.log(` Total Findings: ${metrics.totalFindings}`);
201
+ console.log(` Findings Fixed: ${metrics.findingsFixed}`);
202
+ console.log(` Fix Rate: ${metrics.fixRate}%`);
203
+ console.log(` Cost Saved: $${metrics.costSaved.toLocaleString()}`);
204
+ if (metrics.topCategories.length > 0) {
205
+ console.log(`\n Top Categories:`);
206
+ for (const c of metrics.topCategories) {
207
+ console.log(` ${c.category.padEnd(15)} ${c.count} findings`);
208
+ }
209
+ }
210
+ if (metrics.weeklyTrend.length > 0) {
211
+ console.log(`\n Recent Trends:`);
212
+ for (const w of metrics.weeklyTrend.slice(-5)) {
213
+ console.log(` ${w.week} ${w.scans} scans, ${w.findings} findings`);
214
+ }
215
+ }
216
+ console.log("");
217
+ }
218
+ }
219
+ //# sourceMappingURL=adoption-report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adoption-report.js","sourceRoot":"","sources":["../../src/commands/adoption-report.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAiB5B,+EAA+E;AAE/E,SAAS,YAAY,CAAI,IAAY,EAAE,QAAW;IAChD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IACvC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,SAAS;IAChB,MAAM,QAAQ,GAAG,gBAAgB,CAAC;IAClC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,CAAC,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACtC,OAAQ,WAAW,CAAC,QAAQ,CAAc,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IAC/F,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,SAAS,eAAe;IACtB,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,EAAE,kBAAkB,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG,YAAY,CAEtB,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7B,OAAO,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;AAC/B,CAAC;AAED,SAAS,cAAc;IACrB,MAAM,IAAI,GAAG,qBAAqB,CAAC;IACnC,MAAM,IAAI,GAAG,YAAY,CAAoE,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;IACtH,OAAO,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;AAC9B,CAAC;AAED,SAAS,YAAY;IACnB,MAAM,IAAI,GAAG,IAAI,CAAC,uBAAuB,EAAE,cAAc,CAAC,CAAC;IAC3D,OAAO,YAAY,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,YAAY;IACnB,MAAM,IAAI,GAAG,IAAI,CAAC,sBAAsB,EAAE,mBAAmB,CAAC,CAAC;IAC/D,OAAO,YAAY,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED,+EAA+E;AAE/E,SAAS,cAAc;IACrB,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IACjC,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAEpD,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;IACvF,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;IACvE,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,aAAa,GAAG,aAAa,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE1F,qCAAqC;IACrC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC9C,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACjD,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,GAAG,KAAK,CAAC,CAAC;IAC/C,CAAC;IACD,MAAM,aAAa,GAAG,CAAC,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC;SAC7C,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;SACjD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;SACjC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEf,8BAA8B;IAC9B,MAAM,SAAS,GAAG,IAAI,GAAG,EAA+C,CAAC;IACzE,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QAC/D,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC;QAC1B,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IACD,MAAM,WAAW,GAAG,CAAC,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IAEnG,sBAAsB;IACtB,MAAM,SAAS,GACb,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;QAC3B,CAAC,CAAC,IAAI,CAAC,GAAG,CACN,CAAC,EACD,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,aAAa,CACtG;QACH,CAAC,CAAC,CAAC,CAAC;IAER,wBAAwB;IACxB,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,IAAI,UAAU,GAAG,CAAC;QAAE,aAAa,IAAI,EAAE,CAAC;IACxC,IAAI,UAAU,GAAG,EAAE;QAAE,aAAa,IAAI,EAAE,CAAC;IACzC,IAAI,QAAQ,IAAI,CAAC;QAAE,aAAa,IAAI,EAAE,CAAC;IACvC,IAAI,QAAQ,IAAI,EAAE;QAAE,aAAa,IAAI,EAAE,CAAC;IACxC,IAAI,OAAO,IAAI,EAAE;QAAE,aAAa,IAAI,EAAE,CAAC;IACvC,IAAI,OAAO,IAAI,EAAE;QAAE,aAAa,IAAI,EAAE,CAAC;IACvC,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,aAAa,IAAI,EAAE,CAAC;IACrD,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;QAAE,aAAa,IAAI,EAAE,CAAC;IAEvD,OAAO;QACL,UAAU;QACV,aAAa;QACb,aAAa;QACb,OAAO;QACP,kBAAkB,EAAE,CAAC,EAAE,gCAAgC;QACvD,gBAAgB,EAAE,QAAQ;QAC1B,aAAa;QACb,WAAW;QACX,SAAS;QACT,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC;KAC5C,CAAC;AACJ,CAAC;AAED,+EAA+E;AAE/E,MAAM,UAAU,iBAAiB,CAAC,IAAc;IAC9C,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;CAef,CAAC,CAAC;QACC,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAU,EAAE,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,UAAU,CAAC,IAAI,MAAM,CAAC;IAC1F,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IAEjC,UAAU;IACV,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CACZ,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,EAClG,IAAI,EACJ,CAAC,CACF,CACF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CACT,eAAe,OAAO,CAAC,aAAa,iBAAiB,OAAO,CAAC,UAAU,gBAAgB,OAAO,CAAC,OAAO,aAAa,OAAO,CAAC,gBAAgB,EAAE,CAC9I,CAAC;QACJ,CAAC;QACD,OAAO;IACT,CAAC;IAED,SAAS;IACT,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;YAC/D,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrC,OAAO,CAAC,GAAG,CAAC,8EAA8E,CAAC,CAAC;YAC9F,CAAC;iBAAM,CAAC;gBACN,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;oBACpC,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC9C,OAAO,CAAC,GAAG,CACT,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,GAAG,EAAE,CAC5G,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;QACD,OAAO;IACT,CAAC;IAED,oBAAoB;IACpB,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACjC,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC;;;;wBAIM,OAAO,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;wBAC1C,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;wBAC9C,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;wBACxC,OAAO,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;wBAC3C,CAAC,OAAO,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;yBACjC,OAAO,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;;CAErE,CAAC,CAAC;QACC,CAAC;QACD,OAAO;IACT,CAAC;IAED,cAAc;IACd,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,wBAAwB,OAAO,CAAC,aAAa,MAAM,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,wBAAwB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAChE,OAAO,CAAC,GAAG,CAAC,wBAAwB,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,wBAAwB,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,wBAAwB,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,wBAAwB,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,yBAAyB,OAAO,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAC3E,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;YACnC,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;gBACtC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;QACD,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YAClC,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9C,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,QAAQ,WAAW,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * AI model trust — per-model confidence scoring based on
3
+ * LLM source fingerprinting and finding patterns.
4
+ *
5
+ * All analysis is local — no telemetry or data upload.
6
+ */
7
+ interface TrustRecord {
8
+ model: string;
9
+ file: string;
10
+ trustScore: number;
11
+ signals: string[];
12
+ timestamp: string;
13
+ }
14
+ export declare function analyzeFileTrust(filePath: string): TrustRecord;
15
+ export declare function runAiModelTrust(argv: string[]): void;
16
+ export {};
17
+ //# sourceMappingURL=ai-model-trust.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-model-trust.d.ts","sourceRoot":"","sources":["../../src/commands/ai-model-trust.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgBH,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAiHD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAsB9D;AAID,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAiHpD"}
@@ -0,0 +1,235 @@
1
+ /**
2
+ * AI model trust — per-model confidence scoring based on
3
+ * LLM source fingerprinting and finding patterns.
4
+ *
5
+ * All analysis is local — no telemetry or data upload.
6
+ */
7
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
8
+ import { join } from "path";
9
+ const TRUST_DIR = ".judges-model-trust";
10
+ const TRUST_FILE = join(TRUST_DIR, "trust-history.json");
11
+ // ─── Model fingerprint database ─────────────────────────────────────────────
12
+ const MODEL_PROFILES = [
13
+ {
14
+ id: "copilot",
15
+ name: "GitHub Copilot",
16
+ patterns: [
17
+ "// Generated by Copilot",
18
+ "// TODO: implement",
19
+ "function handle",
20
+ "const app = express()",
21
+ "module.exports",
22
+ ],
23
+ trustScore: 72,
24
+ strengths: ["Fast boilerplate", "Good Express/Node patterns", "IDE-integrated"],
25
+ weaknesses: ["Weak input validation", "Often skips error handling", "May leak secrets in config"],
26
+ },
27
+ {
28
+ id: "gpt-4o",
29
+ name: "GPT-4o (ChatGPT)",
30
+ patterns: [
31
+ "// This function",
32
+ "/**\n * @description",
33
+ "try {\n } catch (error)",
34
+ "console.error(error)",
35
+ "// Handle error gracefully",
36
+ ],
37
+ trustScore: 68,
38
+ strengths: ["Verbose documentation", "Comprehensive try-catch", "Good API patterns"],
39
+ weaknesses: ["Over-engineered abstractions", "Inconsistent naming", "Template strings in SQL"],
40
+ },
41
+ {
42
+ id: "claude",
43
+ name: "Claude (Anthropic)",
44
+ patterns: ["// Note:", "// Important:", "// Safety check", "if (!input) throw", "// Validate input"],
45
+ trustScore: 76,
46
+ strengths: ["Input validation awareness", "Security-conscious", "Clear error messages"],
47
+ weaknesses: ["Overly defensive code", "Verbose comments", "Complex type hierarchies"],
48
+ },
49
+ {
50
+ id: "cursor",
51
+ name: "Cursor AI",
52
+ patterns: ["// @cursor", "// cursor:", "export default function", "useEffect(() =>", "'use client'"],
53
+ trustScore: 70,
54
+ strengths: ["React/Next.js patterns", "Modern TypeScript", "Component patterns"],
55
+ weaknesses: ["Client-side secrets risk", "Missing CSP headers", "Weak API validation"],
56
+ },
57
+ {
58
+ id: "gemini",
59
+ name: "Google Gemini",
60
+ patterns: ["// Generated", "async function main()", "const result =", ".then(response =>", "// Process"],
61
+ trustScore: 65,
62
+ strengths: ["Clean async patterns", "Good Promise chains", "Concise code"],
63
+ weaknesses: ["Missing error boundaries", "Weak auth patterns", "No rate limiting"],
64
+ },
65
+ ];
66
+ // ─── Core ───────────────────────────────────────────────────────────────────
67
+ function ensureDir() {
68
+ if (!existsSync(TRUST_DIR))
69
+ mkdirSync(TRUST_DIR, { recursive: true });
70
+ }
71
+ function loadStore() {
72
+ if (!existsSync(TRUST_FILE))
73
+ return { records: [], updatedAt: new Date().toISOString() };
74
+ try {
75
+ return JSON.parse(readFileSync(TRUST_FILE, "utf-8"));
76
+ }
77
+ catch {
78
+ return { records: [], updatedAt: new Date().toISOString() };
79
+ }
80
+ }
81
+ function saveStore(store) {
82
+ ensureDir();
83
+ store.updatedAt = new Date().toISOString();
84
+ writeFileSync(TRUST_FILE, JSON.stringify(store, null, 2));
85
+ }
86
+ function detectModel(content) {
87
+ let bestMatch = MODEL_PROFILES[0];
88
+ let bestScore = 0;
89
+ let bestSignals = [];
90
+ for (const profile of MODEL_PROFILES) {
91
+ const signals = [];
92
+ let matchCount = 0;
93
+ for (const pattern of profile.patterns) {
94
+ if (content.includes(pattern)) {
95
+ matchCount++;
96
+ signals.push(pattern.slice(0, 40));
97
+ }
98
+ }
99
+ const score = matchCount / profile.patterns.length;
100
+ if (score > bestScore) {
101
+ bestScore = score;
102
+ bestMatch = profile;
103
+ bestSignals = signals;
104
+ }
105
+ }
106
+ return { model: bestMatch, confidence: Math.round(bestScore * 100), signals: bestSignals };
107
+ }
108
+ export function analyzeFileTrust(filePath) {
109
+ const content = readFileSync(filePath, "utf-8");
110
+ const { model, confidence, signals } = detectModel(content);
111
+ // Adjust trust based on confidence
112
+ const adjustedTrust = Math.round(model.trustScore * (0.5 + confidence / 200));
113
+ const record = {
114
+ model: model.id,
115
+ file: filePath,
116
+ trustScore: adjustedTrust,
117
+ signals,
118
+ timestamp: new Date().toISOString(),
119
+ };
120
+ // Persist
121
+ const store = loadStore();
122
+ store.records.push(record);
123
+ if (store.records.length > 500)
124
+ store.records = store.records.slice(-500);
125
+ saveStore(store);
126
+ return record;
127
+ }
128
+ // ─── CLI ────────────────────────────────────────────────────────────────────
129
+ export function runAiModelTrust(argv) {
130
+ if (argv.includes("--help") || argv.includes("-h")) {
131
+ console.log(`
132
+ judges ai-model-trust — AI model confidence scoring
133
+
134
+ Usage:
135
+ judges ai-model-trust --file src/app.ts
136
+ judges ai-model-trust --profiles
137
+ judges ai-model-trust --compare copilot claude
138
+ judges ai-model-trust --history
139
+
140
+ Options:
141
+ --file <path> Analyze a file for likely AI model source
142
+ --profiles Show all model profiles and trust scores
143
+ --compare <a> <b> Compare two model profiles side by side
144
+ --history Show trust analysis history
145
+ --format json JSON output
146
+ --help, -h Show this help
147
+ `);
148
+ return;
149
+ }
150
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
151
+ // Profiles
152
+ if (argv.includes("--profiles")) {
153
+ if (format === "json") {
154
+ console.log(JSON.stringify(MODEL_PROFILES, null, 2));
155
+ }
156
+ else {
157
+ console.log(`\n AI Model Trust Profiles\n ──────────────────────────`);
158
+ for (const p of MODEL_PROFILES) {
159
+ console.log(` ${p.name.padEnd(22)} Trust: ${p.trustScore}/100`);
160
+ console.log(` Strengths: ${p.strengths.join(", ")}`);
161
+ console.log(` Weaknesses: ${p.weaknesses.join(", ")}`);
162
+ console.log("");
163
+ }
164
+ }
165
+ return;
166
+ }
167
+ // Compare
168
+ if (argv.includes("--compare")) {
169
+ const idx = argv.indexOf("--compare");
170
+ const a = argv[idx + 1];
171
+ const b = argv[idx + 2];
172
+ const profA = MODEL_PROFILES.find((p) => p.id === a);
173
+ const profB = MODEL_PROFILES.find((p) => p.id === b);
174
+ if (!profA || !profB) {
175
+ console.error(` Model not found. Available: ${MODEL_PROFILES.map((p) => p.id).join(", ")}`);
176
+ return;
177
+ }
178
+ if (format === "json") {
179
+ console.log(JSON.stringify({ a: profA, b: profB }, null, 2));
180
+ }
181
+ else {
182
+ console.log(`\n Model Comparison\n ──────────────────────────`);
183
+ console.log(` ${"".padEnd(20)} ${profA.name.padEnd(25)} ${profB.name}`);
184
+ console.log(` ${"Trust Score".padEnd(20)} ${String(profA.trustScore).padEnd(25)} ${profB.trustScore}`);
185
+ console.log(` ${"Strengths".padEnd(20)} ${profA.strengths.length.toString().padEnd(25)} ${profB.strengths.length}`);
186
+ console.log(` ${"Weaknesses".padEnd(20)} ${profA.weaknesses.length.toString().padEnd(25)} ${profB.weaknesses.length}`);
187
+ console.log("");
188
+ }
189
+ return;
190
+ }
191
+ // History
192
+ if (argv.includes("--history")) {
193
+ const store = loadStore();
194
+ if (format === "json") {
195
+ console.log(JSON.stringify(store, null, 2));
196
+ }
197
+ else {
198
+ console.log(`\n Trust Analysis History (${store.records.length} records)\n ──────────────────────────`);
199
+ for (const r of store.records.slice(-20)) {
200
+ console.log(` ${r.timestamp.slice(0, 10)} ${r.model.padEnd(10)} ${r.trustScore}/100 ${r.file}`);
201
+ }
202
+ console.log("");
203
+ }
204
+ return;
205
+ }
206
+ // Analyze file
207
+ const filePath = argv.find((_a, i) => argv[i - 1] === "--file");
208
+ if (!filePath) {
209
+ console.error(" Use --file <path>, --profiles, or --history. --help for usage.");
210
+ return;
211
+ }
212
+ if (!existsSync(filePath)) {
213
+ console.error(` File not found: ${filePath}`);
214
+ return;
215
+ }
216
+ const result = analyzeFileTrust(filePath);
217
+ const profile = MODEL_PROFILES.find((p) => p.id === result.model);
218
+ if (format === "json") {
219
+ console.log(JSON.stringify({ ...result, profile }, null, 2));
220
+ }
221
+ else {
222
+ console.log(`\n AI Model Trust Analysis — ${filePath}`);
223
+ console.log(` ──────────────────────────`);
224
+ console.log(` Likely model: ${profile?.name || result.model}`);
225
+ console.log(` Trust score: ${result.trustScore}/100`);
226
+ console.log(` Signals: ${result.signals.length > 0 ? result.signals.join("; ") : "No strong signals"}`);
227
+ if (profile) {
228
+ console.log(`\n Model strengths: ${profile.strengths.join(", ")}`);
229
+ console.log(` Model weaknesses: ${profile.weaknesses.join(", ")}`);
230
+ }
231
+ console.log(`\n Recommendation: ${result.trustScore >= 70 ? "Standard review" : "Enhanced review recommended"}`);
232
+ console.log("");
233
+ }
234
+ }
235
+ //# sourceMappingURL=ai-model-trust.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-model-trust.js","sourceRoot":"","sources":["../../src/commands/ai-model-trust.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * AI prompt audit — scans AI-generated code for prompt injection
3
+ * risks: user input echoed into SQL, shell, config, etc.
4
+ *
5
+ * Pattern-based analysis only — no data stored externally.
6
+ */
7
+ interface PromptRisk {
8
+ line: number;
9
+ pattern: string;
10
+ severity: "critical" | "high" | "medium";
11
+ description: string;
12
+ recommendation: string;
13
+ }
14
+ interface AuditResult {
15
+ file: string;
16
+ risks: PromptRisk[];
17
+ riskScore: number;
18
+ timestamp: string;
19
+ }
20
+ export declare function auditFile(filePath: string): AuditResult;
21
+ export declare function runAiPromptAudit(argv: string[]): void;
22
+ export {};
23
+ //# sourceMappingURL=ai-prompt-audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-prompt-audit.d.ts","sourceRoot":"","sources":["../../src/commands/ai-prompt-audit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAqHD,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAyCvD;AAID,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAqHrD"}