@kevinrabun/judges 3.38.0 → 3.40.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 (331) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/README.md +5 -4
  3. package/dist/api.d.ts +5 -2
  4. package/dist/api.d.ts.map +1 -1
  5. package/dist/api.js +5 -1
  6. package/dist/api.js.map +1 -1
  7. package/dist/ast/structural-parser.js +3 -3
  8. package/dist/ast/structural-parser.js.map +1 -1
  9. package/dist/calibration.d.ts +35 -0
  10. package/dist/calibration.d.ts.map +1 -1
  11. package/dist/calibration.js +52 -0
  12. package/dist/calibration.js.map +1 -1
  13. package/dist/cli.d.ts.map +1 -1
  14. package/dist/cli.js +307 -16
  15. package/dist/cli.js.map +1 -1
  16. package/dist/commands/benchmark-languages.js +4 -4
  17. package/dist/commands/benchmark.d.ts +2 -1
  18. package/dist/commands/benchmark.d.ts.map +1 -1
  19. package/dist/commands/benchmark.js +67 -2
  20. package/dist/commands/benchmark.js.map +1 -1
  21. package/dist/commands/calibration-dashboard.d.ts.map +1 -1
  22. package/dist/commands/calibration-dashboard.js +198 -0
  23. package/dist/commands/calibration-dashboard.js.map +1 -1
  24. package/dist/commands/calibration-share.d.ts +31 -0
  25. package/dist/commands/calibration-share.d.ts.map +1 -0
  26. package/dist/commands/calibration-share.js +183 -0
  27. package/dist/commands/calibration-share.js.map +1 -0
  28. package/dist/commands/compliance-report.d.ts +35 -0
  29. package/dist/commands/compliance-report.d.ts.map +1 -0
  30. package/dist/commands/compliance-report.js +162 -0
  31. package/dist/commands/compliance-report.js.map +1 -0
  32. package/dist/commands/diff.d.ts.map +1 -1
  33. package/dist/commands/diff.js +8 -3
  34. package/dist/commands/diff.js.map +1 -1
  35. package/dist/commands/feedback-rules.d.ts +29 -0
  36. package/dist/commands/feedback-rules.d.ts.map +1 -0
  37. package/dist/commands/feedback-rules.js +174 -0
  38. package/dist/commands/feedback-rules.js.map +1 -0
  39. package/dist/commands/feedback.d.ts +12 -0
  40. package/dist/commands/feedback.d.ts.map +1 -1
  41. package/dist/commands/feedback.js +16 -0
  42. package/dist/commands/feedback.js.map +1 -1
  43. package/dist/commands/fix.d.ts.map +1 -1
  44. package/dist/commands/fix.js +33 -1
  45. package/dist/commands/fix.js.map +1 -1
  46. package/dist/commands/governance.d.ts +32 -0
  47. package/dist/commands/governance.d.ts.map +1 -0
  48. package/dist/commands/governance.js +203 -0
  49. package/dist/commands/governance.js.map +1 -0
  50. package/dist/commands/help.d.ts +8 -0
  51. package/dist/commands/help.d.ts.map +1 -0
  52. package/dist/commands/help.js +303 -0
  53. package/dist/commands/help.js.map +1 -0
  54. package/dist/commands/hook.d.ts.map +1 -1
  55. package/dist/commands/hook.js +17 -20
  56. package/dist/commands/hook.js.map +1 -1
  57. package/dist/commands/llm-benchmark.d.ts +119 -0
  58. package/dist/commands/llm-benchmark.d.ts.map +1 -0
  59. package/dist/commands/llm-benchmark.js +396 -0
  60. package/dist/commands/llm-benchmark.js.map +1 -0
  61. package/dist/commands/metrics-dashboard.d.ts +22 -0
  62. package/dist/commands/metrics-dashboard.d.ts.map +1 -0
  63. package/dist/commands/metrics-dashboard.js +335 -0
  64. package/dist/commands/metrics-dashboard.js.map +1 -0
  65. package/dist/commands/metrics.d.ts +58 -0
  66. package/dist/commands/metrics.d.ts.map +1 -0
  67. package/dist/commands/metrics.js +242 -0
  68. package/dist/commands/metrics.js.map +1 -0
  69. package/dist/commands/onboard.d.ts +13 -0
  70. package/dist/commands/onboard.d.ts.map +1 -0
  71. package/dist/commands/onboard.js +179 -0
  72. package/dist/commands/onboard.js.map +1 -0
  73. package/dist/commands/org-metrics.d.ts +24 -0
  74. package/dist/commands/org-metrics.d.ts.map +1 -0
  75. package/dist/commands/org-metrics.js +238 -0
  76. package/dist/commands/org-metrics.js.map +1 -0
  77. package/dist/commands/override.d.ts +62 -0
  78. package/dist/commands/override.d.ts.map +1 -0
  79. package/dist/commands/override.js +264 -0
  80. package/dist/commands/override.js.map +1 -0
  81. package/dist/commands/parity.d.ts +31 -0
  82. package/dist/commands/parity.d.ts.map +1 -0
  83. package/dist/commands/parity.js +213 -0
  84. package/dist/commands/parity.js.map +1 -0
  85. package/dist/commands/plugin-search.d.ts +40 -0
  86. package/dist/commands/plugin-search.d.ts.map +1 -0
  87. package/dist/commands/plugin-search.js +328 -0
  88. package/dist/commands/plugin-search.js.map +1 -0
  89. package/dist/commands/plugins.d.ts +13 -0
  90. package/dist/commands/plugins.d.ts.map +1 -0
  91. package/dist/commands/plugins.js +105 -0
  92. package/dist/commands/plugins.js.map +1 -0
  93. package/dist/commands/review.js +1 -1
  94. package/dist/commands/review.js.map +1 -1
  95. package/dist/commands/snapshot.d.ts +27 -0
  96. package/dist/commands/snapshot.d.ts.map +1 -1
  97. package/dist/commands/snapshot.js +99 -0
  98. package/dist/commands/snapshot.js.map +1 -1
  99. package/dist/commands/trace.d.ts +65 -0
  100. package/dist/commands/trace.d.ts.map +1 -0
  101. package/dist/commands/trace.js +246 -0
  102. package/dist/commands/trace.js.map +1 -0
  103. package/dist/commands/trust-ramp.d.ts +30 -0
  104. package/dist/commands/trust-ramp.d.ts.map +1 -0
  105. package/dist/commands/trust-ramp.js +190 -0
  106. package/dist/commands/trust-ramp.js.map +1 -0
  107. package/dist/config.d.ts +5 -0
  108. package/dist/config.d.ts.map +1 -1
  109. package/dist/config.js +65 -0
  110. package/dist/config.js.map +1 -1
  111. package/dist/data-adapter.d.ts +124 -0
  112. package/dist/data-adapter.d.ts.map +1 -0
  113. package/dist/data-adapter.js +213 -0
  114. package/dist/data-adapter.js.map +1 -0
  115. package/dist/evaluators/accessibility.js +1 -1
  116. package/dist/evaluators/accessibility.js.map +1 -1
  117. package/dist/evaluators/ai-code-safety.d.ts.map +1 -1
  118. package/dist/evaluators/ai-code-safety.js +1 -4
  119. package/dist/evaluators/ai-code-safety.js.map +1 -1
  120. package/dist/evaluators/cost-effectiveness.js +1 -1
  121. package/dist/evaluators/cost-effectiveness.js.map +1 -1
  122. package/dist/evaluators/false-positive-review.js +4 -4
  123. package/dist/evaluators/false-positive-review.js.map +1 -1
  124. package/dist/evaluators/iac-security.js +1 -1
  125. package/dist/evaluators/iac-security.js.map +1 -1
  126. package/dist/evaluators/index.d.ts.map +1 -1
  127. package/dist/evaluators/index.js +59 -10
  128. package/dist/evaluators/index.js.map +1 -1
  129. package/dist/evaluators/intent-alignment.d.ts +4 -0
  130. package/dist/evaluators/intent-alignment.d.ts.map +1 -1
  131. package/dist/evaluators/intent-alignment.js +163 -0
  132. package/dist/evaluators/intent-alignment.js.map +1 -1
  133. package/dist/evaluators/logic-review.js +1 -1
  134. package/dist/evaluators/logic-review.js.map +1 -1
  135. package/dist/evaluators/maintainability.js +1 -1
  136. package/dist/evaluators/maintainability.js.map +1 -1
  137. package/dist/evaluators/over-engineering.js +3 -3
  138. package/dist/evaluators/over-engineering.js.map +1 -1
  139. package/dist/evaluators/project.d.ts +12 -0
  140. package/dist/evaluators/project.d.ts.map +1 -1
  141. package/dist/evaluators/project.js +86 -0
  142. package/dist/evaluators/project.js.map +1 -1
  143. package/dist/evaluators/security.js +2 -2
  144. package/dist/evaluators/security.js.map +1 -1
  145. package/dist/evaluators/ux.js +1 -1
  146. package/dist/evaluators/ux.js.map +1 -1
  147. package/dist/finding-lifecycle.d.ts +9 -0
  148. package/dist/finding-lifecycle.d.ts.map +1 -1
  149. package/dist/finding-lifecycle.js +15 -0
  150. package/dist/finding-lifecycle.js.map +1 -1
  151. package/dist/fix-history.d.ts +9 -0
  152. package/dist/fix-history.d.ts.map +1 -1
  153. package/dist/fix-history.js +15 -0
  154. package/dist/fix-history.js.map +1 -1
  155. package/dist/formatters/sarif.d.ts +3 -0
  156. package/dist/formatters/sarif.d.ts.map +1 -1
  157. package/dist/formatters/sarif.js +36 -12
  158. package/dist/formatters/sarif.js.map +1 -1
  159. package/dist/github-app.d.ts +16 -1
  160. package/dist/github-app.d.ts.map +1 -1
  161. package/dist/github-app.js +85 -2
  162. package/dist/github-app.js.map +1 -1
  163. package/dist/index.js +5 -0
  164. package/dist/index.js.map +1 -1
  165. package/dist/judge-registry.d.ts +157 -0
  166. package/dist/judge-registry.d.ts.map +1 -0
  167. package/dist/judge-registry.js +273 -0
  168. package/dist/judge-registry.js.map +1 -0
  169. package/dist/judges/accessibility.d.ts.map +1 -1
  170. package/dist/judges/accessibility.js +4 -0
  171. package/dist/judges/accessibility.js.map +1 -1
  172. package/dist/judges/agent-instructions.d.ts.map +1 -1
  173. package/dist/judges/agent-instructions.js +4 -0
  174. package/dist/judges/agent-instructions.js.map +1 -1
  175. package/dist/judges/ai-code-safety.d.ts.map +1 -1
  176. package/dist/judges/ai-code-safety.js +4 -0
  177. package/dist/judges/ai-code-safety.js.map +1 -1
  178. package/dist/judges/api-contract.d.ts.map +1 -1
  179. package/dist/judges/api-contract.js +4 -0
  180. package/dist/judges/api-contract.js.map +1 -1
  181. package/dist/judges/api-design.d.ts.map +1 -1
  182. package/dist/judges/api-design.js +4 -0
  183. package/dist/judges/api-design.js.map +1 -1
  184. package/dist/judges/authentication.d.ts.map +1 -1
  185. package/dist/judges/authentication.js +4 -0
  186. package/dist/judges/authentication.js.map +1 -1
  187. package/dist/judges/backwards-compatibility.d.ts.map +1 -1
  188. package/dist/judges/backwards-compatibility.js +4 -0
  189. package/dist/judges/backwards-compatibility.js.map +1 -1
  190. package/dist/judges/caching.d.ts.map +1 -1
  191. package/dist/judges/caching.js +4 -0
  192. package/dist/judges/caching.js.map +1 -1
  193. package/dist/judges/ci-cd.d.ts.map +1 -1
  194. package/dist/judges/ci-cd.js +4 -0
  195. package/dist/judges/ci-cd.js.map +1 -1
  196. package/dist/judges/cloud-readiness.d.ts.map +1 -1
  197. package/dist/judges/cloud-readiness.js +4 -0
  198. package/dist/judges/cloud-readiness.js.map +1 -1
  199. package/dist/judges/code-structure.d.ts.map +1 -1
  200. package/dist/judges/code-structure.js +4 -0
  201. package/dist/judges/code-structure.js.map +1 -1
  202. package/dist/judges/compliance.d.ts.map +1 -1
  203. package/dist/judges/compliance.js +4 -0
  204. package/dist/judges/compliance.js.map +1 -1
  205. package/dist/judges/concurrency.d.ts.map +1 -1
  206. package/dist/judges/concurrency.js +4 -0
  207. package/dist/judges/concurrency.js.map +1 -1
  208. package/dist/judges/configuration-management.d.ts.map +1 -1
  209. package/dist/judges/configuration-management.js +4 -0
  210. package/dist/judges/configuration-management.js.map +1 -1
  211. package/dist/judges/cost-effectiveness.d.ts.map +1 -1
  212. package/dist/judges/cost-effectiveness.js +4 -0
  213. package/dist/judges/cost-effectiveness.js.map +1 -1
  214. package/dist/judges/cybersecurity.d.ts.map +1 -1
  215. package/dist/judges/cybersecurity.js +4 -0
  216. package/dist/judges/cybersecurity.js.map +1 -1
  217. package/dist/judges/data-security.d.ts.map +1 -1
  218. package/dist/judges/data-security.js +4 -0
  219. package/dist/judges/data-security.js.map +1 -1
  220. package/dist/judges/data-sovereignty.d.ts.map +1 -1
  221. package/dist/judges/data-sovereignty.js +4 -0
  222. package/dist/judges/data-sovereignty.js.map +1 -1
  223. package/dist/judges/database.d.ts.map +1 -1
  224. package/dist/judges/database.js +4 -0
  225. package/dist/judges/database.js.map +1 -1
  226. package/dist/judges/dependency-health.d.ts.map +1 -1
  227. package/dist/judges/dependency-health.js +4 -0
  228. package/dist/judges/dependency-health.js.map +1 -1
  229. package/dist/judges/documentation.d.ts.map +1 -1
  230. package/dist/judges/documentation.js +4 -0
  231. package/dist/judges/documentation.js.map +1 -1
  232. package/dist/judges/error-handling.d.ts.map +1 -1
  233. package/dist/judges/error-handling.js +4 -0
  234. package/dist/judges/error-handling.js.map +1 -1
  235. package/dist/judges/ethics-bias.d.ts.map +1 -1
  236. package/dist/judges/ethics-bias.js +4 -0
  237. package/dist/judges/ethics-bias.js.map +1 -1
  238. package/dist/judges/false-positive-review.d.ts.map +1 -1
  239. package/dist/judges/false-positive-review.js +2 -0
  240. package/dist/judges/false-positive-review.js.map +1 -1
  241. package/dist/judges/framework-safety.d.ts.map +1 -1
  242. package/dist/judges/framework-safety.js +4 -0
  243. package/dist/judges/framework-safety.js.map +1 -1
  244. package/dist/judges/hallucination-detection.d.ts.map +1 -1
  245. package/dist/judges/hallucination-detection.js +4 -0
  246. package/dist/judges/hallucination-detection.js.map +1 -1
  247. package/dist/judges/iac-security.d.ts.map +1 -1
  248. package/dist/judges/iac-security.js +4 -0
  249. package/dist/judges/iac-security.js.map +1 -1
  250. package/dist/judges/index.d.ts +59 -0
  251. package/dist/judges/index.d.ts.map +1 -1
  252. package/dist/judges/index.js +65 -189
  253. package/dist/judges/index.js.map +1 -1
  254. package/dist/judges/intent-alignment.d.ts.map +1 -1
  255. package/dist/judges/intent-alignment.js +4 -0
  256. package/dist/judges/intent-alignment.js.map +1 -1
  257. package/dist/judges/internationalization.d.ts.map +1 -1
  258. package/dist/judges/internationalization.js +4 -0
  259. package/dist/judges/internationalization.js.map +1 -1
  260. package/dist/judges/logging-privacy.d.ts.map +1 -1
  261. package/dist/judges/logging-privacy.js +4 -0
  262. package/dist/judges/logging-privacy.js.map +1 -1
  263. package/dist/judges/logic-review.d.ts.map +1 -1
  264. package/dist/judges/logic-review.js +4 -0
  265. package/dist/judges/logic-review.js.map +1 -1
  266. package/dist/judges/maintainability.d.ts.map +1 -1
  267. package/dist/judges/maintainability.js +4 -0
  268. package/dist/judges/maintainability.js.map +1 -1
  269. package/dist/judges/model-fingerprint.d.ts.map +1 -1
  270. package/dist/judges/model-fingerprint.js +4 -0
  271. package/dist/judges/model-fingerprint.js.map +1 -1
  272. package/dist/judges/multi-turn-coherence.d.ts.map +1 -1
  273. package/dist/judges/multi-turn-coherence.js +4 -0
  274. package/dist/judges/multi-turn-coherence.js.map +1 -1
  275. package/dist/judges/observability.d.ts.map +1 -1
  276. package/dist/judges/observability.js +4 -0
  277. package/dist/judges/observability.js.map +1 -1
  278. package/dist/judges/over-engineering.d.ts.map +1 -1
  279. package/dist/judges/over-engineering.js +4 -0
  280. package/dist/judges/over-engineering.js.map +1 -1
  281. package/dist/judges/performance.d.ts.map +1 -1
  282. package/dist/judges/performance.js +4 -0
  283. package/dist/judges/performance.js.map +1 -1
  284. package/dist/judges/portability.d.ts.map +1 -1
  285. package/dist/judges/portability.js +4 -0
  286. package/dist/judges/portability.js.map +1 -1
  287. package/dist/judges/rate-limiting.d.ts.map +1 -1
  288. package/dist/judges/rate-limiting.js +4 -0
  289. package/dist/judges/rate-limiting.js.map +1 -1
  290. package/dist/judges/reliability.d.ts.map +1 -1
  291. package/dist/judges/reliability.js +4 -0
  292. package/dist/judges/reliability.js.map +1 -1
  293. package/dist/judges/scalability.d.ts.map +1 -1
  294. package/dist/judges/scalability.js +4 -0
  295. package/dist/judges/scalability.js.map +1 -1
  296. package/dist/judges/security.d.ts.map +1 -1
  297. package/dist/judges/security.js +4 -0
  298. package/dist/judges/security.js.map +1 -1
  299. package/dist/judges/software-practices.d.ts.map +1 -1
  300. package/dist/judges/software-practices.js +4 -0
  301. package/dist/judges/software-practices.js.map +1 -1
  302. package/dist/judges/testing.d.ts.map +1 -1
  303. package/dist/judges/testing.js +4 -0
  304. package/dist/judges/testing.js.map +1 -1
  305. package/dist/judges/ux.d.ts.map +1 -1
  306. package/dist/judges/ux.js +4 -0
  307. package/dist/judges/ux.js.map +1 -1
  308. package/dist/plugins.d.ts +8 -51
  309. package/dist/plugins.d.ts.map +1 -1
  310. package/dist/plugins.js +16 -125
  311. package/dist/plugins.js.map +1 -1
  312. package/dist/security-ids.d.ts +24 -0
  313. package/dist/security-ids.d.ts.map +1 -0
  314. package/dist/security-ids.js +240 -0
  315. package/dist/security-ids.js.map +1 -0
  316. package/dist/tools/prompts.d.ts +4 -0
  317. package/dist/tools/prompts.d.ts.map +1 -1
  318. package/dist/tools/prompts.js +6 -4
  319. package/dist/tools/prompts.js.map +1 -1
  320. package/dist/tools/register-scaffold.d.ts +3 -0
  321. package/dist/tools/register-scaffold.d.ts.map +1 -0
  322. package/dist/tools/register-scaffold.js +399 -0
  323. package/dist/tools/register-scaffold.js.map +1 -0
  324. package/dist/tools/register.d.ts +1 -1
  325. package/dist/tools/register.d.ts.map +1 -1
  326. package/dist/tools/register.js +3 -1
  327. package/dist/tools/register.js.map +1 -1
  328. package/dist/types.d.ts +75 -0
  329. package/dist/types.d.ts.map +1 -1
  330. package/package.json +3 -2
  331. package/server.json +2 -2
@@ -0,0 +1,157 @@
1
+ /**
2
+ * Unified Judge Registry — single registration path for built-in and plugin judges.
3
+ *
4
+ * Every judge (built-in or custom) goes through the same `register()` method,
5
+ * ensuring consistent validation and a single source of truth. Built-in judges
6
+ * self-register via side-effect imports; plugins register via `registerPlugin()`.
7
+ *
8
+ * ```ts
9
+ * import { defaultRegistry } from "./judge-registry.js";
10
+ * defaultRegistry.register(myJudge);
11
+ * ```
12
+ */
13
+ import type { Finding, JudgeDefinition, Severity } from "./types.js";
14
+ /** A custom evaluation rule that can be added via plugins */
15
+ export interface CustomRule {
16
+ /** Unique rule ID (e.g., "MYORG-001") */
17
+ id: string;
18
+ /** Human-readable title */
19
+ title: string;
20
+ /** Severity level */
21
+ severity: Severity;
22
+ /** Which judge category this rule belongs to */
23
+ judgeId: string;
24
+ /** Description of what the rule checks */
25
+ description: string;
26
+ /** Languages this rule applies to (empty = all) */
27
+ languages?: string[];
28
+ /** Regex pattern to match (simple pattern-based rule) */
29
+ pattern?: RegExp;
30
+ /** Custom analyze function for complex logic */
31
+ analyze?: (code: string, language: string) => Finding[];
32
+ /** Suggested fix text */
33
+ suggestedFix?: string;
34
+ /** Tags for filtering */
35
+ tags?: string[];
36
+ }
37
+ /** Plugin definition */
38
+ export interface JudgesPlugin {
39
+ /** Unique plugin name */
40
+ name: string;
41
+ /** Plugin version (semver) */
42
+ version: string;
43
+ /** Optional description */
44
+ description?: string;
45
+ /** Custom rules to register */
46
+ rules?: CustomRule[];
47
+ /** Custom judge definitions to add to the tribunal */
48
+ judges?: JudgeDefinition[];
49
+ /** Hook: called before evaluation */
50
+ beforeEvaluate?: (code: string, language: string) => void;
51
+ /** Hook: called after evaluation with findings for post-processing */
52
+ afterEvaluate?: (findings: Finding[]) => Finding[];
53
+ /** Hook: called to transform findings (e.g., add org-specific metadata) */
54
+ transformFindings?: (findings: Finding[]) => Finding[];
55
+ }
56
+ /** Plugin registration result */
57
+ export interface PluginRegistration {
58
+ name: string;
59
+ version: string;
60
+ rulesRegistered: number;
61
+ judgesRegistered: number;
62
+ }
63
+ /**
64
+ * Central registry for all judges and plugins. Both built-in judges and
65
+ * user-supplied plugins register through the same API, ensuring consistent
66
+ * behaviour and a single source of truth.
67
+ */
68
+ export declare class JudgeRegistry {
69
+ private judges;
70
+ private plugins;
71
+ private customRules;
72
+ /**
73
+ * Insertion-order tracking. Map preserves insertion order, but we need
74
+ * to ensure falsePositiveReviewJudge is always last regardless of
75
+ * registration order. We handle this in getJudges().
76
+ */
77
+ private static readonly TAIL_JUDGE_ID;
78
+ /**
79
+ * Register a single judge. Used by both built-in judges (via self-
80
+ * registration in their module) and plugin judges (via registerPlugin).
81
+ *
82
+ * If a judge with the same ID already exists, it is replaced.
83
+ */
84
+ register(judge: JudgeDefinition): void;
85
+ /**
86
+ * Unregister a judge by ID. Returns true if the judge existed.
87
+ */
88
+ unregister(id: string): boolean;
89
+ /**
90
+ * Look up a judge by ID.
91
+ */
92
+ getJudge(id: string): JudgeDefinition | undefined;
93
+ /**
94
+ * Get all registered judges as an array. The false-positive-review
95
+ * judge is always placed last. Plugin judges appear after built-in
96
+ * judges but before the tail judge.
97
+ */
98
+ getJudges(): JudgeDefinition[];
99
+ /**
100
+ * Get a short summary of all judges for display.
101
+ */
102
+ getJudgeSummaries(): Array<{
103
+ id: string;
104
+ name: string;
105
+ domain: string;
106
+ description: string;
107
+ }>;
108
+ /**
109
+ * Register a plugin with the judges system. Plugins can provide
110
+ * custom judges, custom rules, and lifecycle hooks.
111
+ */
112
+ registerPlugin(plugin: JudgesPlugin): PluginRegistration;
113
+ /**
114
+ * Unregister a plugin and remove its rules and judges.
115
+ */
116
+ unregisterPlugin(name: string): boolean;
117
+ /**
118
+ * Get all registered plugins.
119
+ */
120
+ getRegisteredPlugins(): PluginRegistration[];
121
+ /**
122
+ * Get all custom rules from all registered plugins.
123
+ */
124
+ getCustomRules(): CustomRule[];
125
+ /**
126
+ * Get all judges registered via plugins (not built-in).
127
+ * Identified by checking if the judge was brought in by a plugin.
128
+ */
129
+ getPluginJudges(): JudgeDefinition[];
130
+ /**
131
+ * Evaluate custom rules against code and return findings.
132
+ */
133
+ evaluateCustomRules(code: string, language: string): Finding[];
134
+ /**
135
+ * Run all beforeEvaluate hooks from registered plugins.
136
+ */
137
+ runBeforeHooks(code: string, language: string): void;
138
+ /**
139
+ * Run all afterEvaluate hooks from registered plugins.
140
+ */
141
+ runAfterHooks(findings: Finding[]): Finding[];
142
+ /**
143
+ * Run all transformFindings hooks from registered plugins.
144
+ */
145
+ runTransformHooks(findings: Finding[]): Finding[];
146
+ /**
147
+ * Remove all plugins and their associated rules/judges. Built-in judges
148
+ * (registered directly, not through a plugin) are preserved.
149
+ */
150
+ clearPlugins(): void;
151
+ /**
152
+ * Remove all judges, plugins, and custom rules. Primarily for testing.
153
+ */
154
+ clear(): void;
155
+ }
156
+ export declare const defaultRegistry: JudgeRegistry;
157
+ //# sourceMappingURL=judge-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"judge-registry.d.ts","sourceRoot":"","sources":["../src/judge-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,273 @@
1
+ /**
2
+ * Unified Judge Registry — single registration path for built-in and plugin judges.
3
+ *
4
+ * Every judge (built-in or custom) goes through the same `register()` method,
5
+ * ensuring consistent validation and a single source of truth. Built-in judges
6
+ * self-register via side-effect imports; plugins register via `registerPlugin()`.
7
+ *
8
+ * ```ts
9
+ * import { defaultRegistry } from "./judge-registry.js";
10
+ * defaultRegistry.register(myJudge);
11
+ * ```
12
+ */
13
+ // ─── Judge Registry ──────────────────────────────────────────────────────────
14
+ /**
15
+ * Central registry for all judges and plugins. Both built-in judges and
16
+ * user-supplied plugins register through the same API, ensuring consistent
17
+ * behaviour and a single source of truth.
18
+ */
19
+ export class JudgeRegistry {
20
+ judges = new Map();
21
+ plugins = new Map();
22
+ customRules = new Map();
23
+ /**
24
+ * Insertion-order tracking. Map preserves insertion order, but we need
25
+ * to ensure falsePositiveReviewJudge is always last regardless of
26
+ * registration order. We handle this in getJudges().
27
+ */
28
+ static TAIL_JUDGE_ID = "false-positive-review";
29
+ // ── Judge Registration ───────────────────────────────────────────────
30
+ /**
31
+ * Register a single judge. Used by both built-in judges (via self-
32
+ * registration in their module) and plugin judges (via registerPlugin).
33
+ *
34
+ * If a judge with the same ID already exists, it is replaced.
35
+ */
36
+ register(judge) {
37
+ this.judges.set(judge.id, judge);
38
+ }
39
+ /**
40
+ * Unregister a judge by ID. Returns true if the judge existed.
41
+ */
42
+ unregister(id) {
43
+ return this.judges.delete(id);
44
+ }
45
+ /**
46
+ * Look up a judge by ID.
47
+ */
48
+ getJudge(id) {
49
+ return this.judges.get(id);
50
+ }
51
+ /**
52
+ * Get all registered judges as an array. The false-positive-review
53
+ * judge is always placed last. Plugin judges appear after built-in
54
+ * judges but before the tail judge.
55
+ */
56
+ getJudges() {
57
+ const all = [...this.judges.values()];
58
+ const tailIdx = all.findIndex((j) => j.id === JudgeRegistry.TAIL_JUDGE_ID);
59
+ if (tailIdx >= 0) {
60
+ const [tail] = all.splice(tailIdx, 1);
61
+ all.push(tail);
62
+ }
63
+ return all;
64
+ }
65
+ /**
66
+ * Get a short summary of all judges for display.
67
+ */
68
+ getJudgeSummaries() {
69
+ return this.getJudges().map(({ id, name, domain, description }) => ({
70
+ id,
71
+ name,
72
+ domain,
73
+ description,
74
+ }));
75
+ }
76
+ // ── Plugin Registration ──────────────────────────────────────────────
77
+ /**
78
+ * Register a plugin with the judges system. Plugins can provide
79
+ * custom judges, custom rules, and lifecycle hooks.
80
+ */
81
+ registerPlugin(plugin) {
82
+ if (!plugin.name)
83
+ throw new Error("Plugin name is required");
84
+ if (!plugin.version)
85
+ throw new Error("Plugin version is required");
86
+ if (this.plugins.has(plugin.name)) {
87
+ this.unregisterPlugin(plugin.name);
88
+ }
89
+ this.plugins.set(plugin.name, plugin);
90
+ let rulesRegistered = 0;
91
+ let judgesRegistered = 0;
92
+ if (plugin.rules) {
93
+ for (const rule of plugin.rules) {
94
+ if (!rule.id)
95
+ throw new Error(`Rule in plugin "${plugin.name}" is missing an id`);
96
+ this.customRules.set(rule.id, rule);
97
+ rulesRegistered++;
98
+ }
99
+ }
100
+ if (plugin.judges) {
101
+ for (const judge of plugin.judges) {
102
+ this.register(judge);
103
+ judgesRegistered++;
104
+ }
105
+ }
106
+ return { name: plugin.name, version: plugin.version, rulesRegistered, judgesRegistered };
107
+ }
108
+ /**
109
+ * Unregister a plugin and remove its rules and judges.
110
+ */
111
+ unregisterPlugin(name) {
112
+ const plugin = this.plugins.get(name);
113
+ if (!plugin)
114
+ return false;
115
+ if (plugin.rules) {
116
+ for (const rule of plugin.rules) {
117
+ this.customRules.delete(rule.id);
118
+ }
119
+ }
120
+ if (plugin.judges) {
121
+ for (const judge of plugin.judges) {
122
+ this.judges.delete(judge.id);
123
+ }
124
+ }
125
+ this.plugins.delete(name);
126
+ return true;
127
+ }
128
+ /**
129
+ * Get all registered plugins.
130
+ */
131
+ getRegisteredPlugins() {
132
+ return [...this.plugins.entries()].map(([, plugin]) => ({
133
+ name: plugin.name,
134
+ version: plugin.version,
135
+ rulesRegistered: plugin.rules?.length ?? 0,
136
+ judgesRegistered: plugin.judges?.length ?? 0,
137
+ }));
138
+ }
139
+ // ── Custom Rules ─────────────────────────────────────────────────────
140
+ /**
141
+ * Get all custom rules from all registered plugins.
142
+ */
143
+ getCustomRules() {
144
+ return [...this.customRules.values()];
145
+ }
146
+ /**
147
+ * Get all judges registered via plugins (not built-in).
148
+ * Identified by checking if the judge was brought in by a plugin.
149
+ */
150
+ getPluginJudges() {
151
+ const pluginJudgeIds = new Set();
152
+ for (const plugin of this.plugins.values()) {
153
+ if (plugin.judges) {
154
+ for (const j of plugin.judges) {
155
+ pluginJudgeIds.add(j.id);
156
+ }
157
+ }
158
+ }
159
+ return [...this.judges.values()].filter((j) => pluginJudgeIds.has(j.id));
160
+ }
161
+ /**
162
+ * Evaluate custom rules against code and return findings.
163
+ */
164
+ evaluateCustomRules(code, language) {
165
+ const findings = [];
166
+ for (const rule of this.customRules.values()) {
167
+ if (rule.languages && rule.languages.length > 0 && !rule.languages.includes(language)) {
168
+ continue;
169
+ }
170
+ if (rule.analyze) {
171
+ try {
172
+ findings.push(...rule.analyze(code, language));
173
+ }
174
+ catch {
175
+ // Silently skip failed custom rules
176
+ }
177
+ continue;
178
+ }
179
+ if (rule.pattern) {
180
+ const re = new RegExp(rule.pattern.source, rule.pattern.flags);
181
+ let match;
182
+ while ((match = re.exec(code)) !== null) {
183
+ const beforeMatch = code.slice(0, match.index);
184
+ const lineNum = (beforeMatch.match(/\n/g) || []).length + 1;
185
+ findings.push({
186
+ ruleId: rule.id,
187
+ title: rule.title,
188
+ severity: rule.severity,
189
+ description: `${rule.description} (matched: ${match[0].slice(0, 100)})`,
190
+ lineNumbers: [lineNum],
191
+ recommendation: rule.suggestedFix || "Review this pattern.",
192
+ });
193
+ if (!rule.pattern.flags.includes("g"))
194
+ break;
195
+ }
196
+ }
197
+ }
198
+ return findings;
199
+ }
200
+ // ── Lifecycle Hooks ──────────────────────────────────────────────────
201
+ /**
202
+ * Run all beforeEvaluate hooks from registered plugins.
203
+ */
204
+ runBeforeHooks(code, language) {
205
+ for (const plugin of this.plugins.values()) {
206
+ if (plugin.beforeEvaluate) {
207
+ try {
208
+ plugin.beforeEvaluate(code, language);
209
+ }
210
+ catch {
211
+ // Swallow hook errors for resilience
212
+ }
213
+ }
214
+ }
215
+ }
216
+ /**
217
+ * Run all afterEvaluate hooks from registered plugins.
218
+ */
219
+ runAfterHooks(findings) {
220
+ let result = findings;
221
+ for (const plugin of this.plugins.values()) {
222
+ if (plugin.afterEvaluate) {
223
+ try {
224
+ result = plugin.afterEvaluate(result);
225
+ }
226
+ catch {
227
+ // Swallow hook errors for resilience
228
+ }
229
+ }
230
+ }
231
+ return result;
232
+ }
233
+ /**
234
+ * Run all transformFindings hooks from registered plugins.
235
+ */
236
+ runTransformHooks(findings) {
237
+ let result = findings;
238
+ for (const plugin of this.plugins.values()) {
239
+ if (plugin.transformFindings) {
240
+ try {
241
+ result = plugin.transformFindings(result);
242
+ }
243
+ catch {
244
+ // Swallow hook errors for resilience
245
+ }
246
+ }
247
+ }
248
+ return result;
249
+ }
250
+ // ── Utilities ────────────────────────────────────────────────────────
251
+ /**
252
+ * Remove all plugins and their associated rules/judges. Built-in judges
253
+ * (registered directly, not through a plugin) are preserved.
254
+ */
255
+ clearPlugins() {
256
+ for (const name of [...this.plugins.keys()]) {
257
+ this.unregisterPlugin(name);
258
+ }
259
+ }
260
+ /**
261
+ * Remove all judges, plugins, and custom rules. Primarily for testing.
262
+ */
263
+ clear() {
264
+ this.judges.clear();
265
+ this.plugins.clear();
266
+ this.customRules.clear();
267
+ }
268
+ }
269
+ // ─── Default Registry Singleton ──────────────────────────────────────────────
270
+ // All built-in judges self-register here via side-effect imports.
271
+ // Plugins also register here at runtime.
272
+ export const defaultRegistry = new JudgeRegistry();
273
+ //# sourceMappingURL=judge-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"judge-registry.js","sourceRoot":"","sources":["../src/judge-registry.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"accessibility.d.ts","sourceRoot":"","sources":["../../src/judges/accessibility.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,eAAO,MAAM,kBAAkB,EAAE,eAmChC,CAAC"}
1
+ {"version":3,"file":"accessibility.d.ts","sourceRoot":"","sources":["../../src/judges/accessibility.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAInD,eAAO,MAAM,kBAAkB,EAAE,eAoChC,CAAC"}
@@ -1,3 +1,5 @@
1
+ import { analyzeAccessibility } from "../evaluators/accessibility.js";
2
+ import { defaultRegistry } from "../judge-registry.js";
1
3
  export const accessibilityJudge = {
2
4
  id: "accessibility",
3
5
  name: "Judge Accessibility",
@@ -32,5 +34,7 @@ ADVERSARIAL MANDATE:
32
34
  - Never praise or compliment the code. Report only problems, risks, and deficiencies.
33
35
  - If you are uncertain whether something is an issue, flag it only when you can cite specific code evidence (line numbers, patterns, API calls). Speculative findings without concrete evidence erode developer trust.
34
36
  - Absence of findings does not mean the code is accessible. It means your analysis reached its limits. State this explicitly.`,
37
+ analyze: analyzeAccessibility,
35
38
  };
39
+ defaultRegistry.register(accessibilityJudge);
36
40
  //# sourceMappingURL=accessibility.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"accessibility.js","sourceRoot":"","sources":["../../src/judges/accessibility.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,kBAAkB,GAAoB;IACjD,EAAE,EAAE,eAAe;IACnB,IAAI,EAAE,qBAAqB;IAC3B,MAAM,EAAE,sBAAsB;IAC9B,WAAW,EACT,gKAAgK;IAClK,UAAU,EAAE,MAAM;IAClB,gBAAgB,EAAE,mEAAmE;IACrF,iBAAiB,EAAE,gCAAgC;IACnD,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;8HAyB8G;CAC7H,CAAC"}
1
+ {"version":3,"file":"accessibility.js","sourceRoot":"","sources":["../../src/judges/accessibility.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,CAAC,MAAM,kBAAkB,GAAoB;IACjD,EAAE,EAAE,eAAe;IACnB,IAAI,EAAE,qBAAqB;IAC3B,MAAM,EAAE,sBAAsB;IAC9B,WAAW,EACT,gKAAgK;IAClK,UAAU,EAAE,MAAM;IAClB,gBAAgB,EAAE,mEAAmE;IACrF,iBAAiB,EAAE,gCAAgC;IACnD,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;8HAyB8G;IAC5H,OAAO,EAAE,oBAAoB;CAC9B,CAAC;AAEF,eAAe,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"agent-instructions.d.ts","sourceRoot":"","sources":["../../src/judges/agent-instructions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,eAAO,MAAM,sBAAsB,EAAE,eAmCpC,CAAC"}
1
+ {"version":3,"file":"agent-instructions.d.ts","sourceRoot":"","sources":["../../src/judges/agent-instructions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAInD,eAAO,MAAM,sBAAsB,EAAE,eAoCpC,CAAC"}
@@ -1,3 +1,5 @@
1
+ import { analyzeAgentInstructions } from "../evaluators/agent-instructions.js";
2
+ import { defaultRegistry } from "../judge-registry.js";
1
3
  export const agentInstructionsJudge = {
2
4
  id: "agent-instructions",
3
5
  name: "Judge Agent Instructions",
@@ -32,5 +34,7 @@ ADVERSARIAL MANDATE:
32
34
  - Never praise or compliment; report risks, ambiguities, and missing controls.
33
35
  - If uncertain, flag likely ambiguity only when you can cite specific evidence from the instruction file. Speculative findings without concrete evidence erode trust.
34
36
  - Absence of findings does not guarantee execution safety; state analysis limits when relevant.`,
37
+ analyze: analyzeAgentInstructions,
35
38
  };
39
+ defaultRegistry.register(agentInstructionsJudge);
36
40
  //# sourceMappingURL=agent-instructions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-instructions.js","sourceRoot":"","sources":["../../src/judges/agent-instructions.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,sBAAsB,GAAoB;IACrD,EAAE,EAAE,oBAAoB;IACxB,IAAI,EAAE,0BAA0B;IAChC,MAAM,EAAE,6CAA6C;IACrD,WAAW,EACT,oJAAoJ;IACtJ,UAAU,EAAE,OAAO;IACnB,gBAAgB,EAAE,iGAAiG;IACnH,iBAAiB,EAAE,8DAA8D;IACjF,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;gGAyBgF;CAC/F,CAAC"}
1
+ {"version":3,"file":"agent-instructions.js","sourceRoot":"","sources":["../../src/judges/agent-instructions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,CAAC,MAAM,sBAAsB,GAAoB;IACrD,EAAE,EAAE,oBAAoB;IACxB,IAAI,EAAE,0BAA0B;IAChC,MAAM,EAAE,6CAA6C;IACrD,WAAW,EACT,oJAAoJ;IACtJ,UAAU,EAAE,OAAO;IACnB,gBAAgB,EAAE,iGAAiG;IACnH,iBAAiB,EAAE,8DAA8D;IACjF,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;gGAyBgF;IAC9F,OAAO,EAAE,wBAAwB;CAClC,CAAC;AAEF,eAAe,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ai-code-safety.d.ts","sourceRoot":"","sources":["../../src/judges/ai-code-safety.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,eAAO,MAAM,iBAAiB,EAAE,eAgD/B,CAAC"}
1
+ {"version":3,"file":"ai-code-safety.d.ts","sourceRoot":"","sources":["../../src/judges/ai-code-safety.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAInD,eAAO,MAAM,iBAAiB,EAAE,eAiD/B,CAAC"}
@@ -1,3 +1,5 @@
1
+ import { analyzeAiCodeSafety } from "../evaluators/ai-code-safety.js";
2
+ import { defaultRegistry } from "../judge-registry.js";
1
3
  export const aiCodeSafetyJudge = {
2
4
  id: "ai-code-safety",
3
5
  name: "Judge AI Code Safety",
@@ -43,5 +45,7 @@ ADVERSARIAL MANDATE:
43
45
  - Never praise or compliment the code. Report only problems, risks, and deficiencies.
44
46
  - If uncertain, flag the issue only when you can cite specific code evidence (line numbers, patterns, API calls). Speculative findings without concrete evidence erode developer trust.
45
47
  - Absence of findings does not mean the code is safe. It means your analysis reached its limits. State this explicitly.`,
48
+ analyze: analyzeAiCodeSafety,
46
49
  };
50
+ defaultRegistry.register(aiCodeSafetyJudge);
47
51
  //# sourceMappingURL=ai-code-safety.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai-code-safety.js","sourceRoot":"","sources":["../../src/judges/ai-code-safety.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,iBAAiB,GAAoB;IAChD,EAAE,EAAE,gBAAgB;IACpB,IAAI,EAAE,sBAAsB;IAC5B,MAAM,EAAE,sCAAsC;IAC9C,WAAW,EACT,uPAAuP;IACzP,UAAU,EAAE,MAAM;IAClB,gBAAgB,EACd,4HAA4H;IAC9H,iBAAiB,EACf,4HAA4H;IAC9H,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wHAoCwG;CACvH,CAAC"}
1
+ {"version":3,"file":"ai-code-safety.js","sourceRoot":"","sources":["../../src/judges/ai-code-safety.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,CAAC,MAAM,iBAAiB,GAAoB;IAChD,EAAE,EAAE,gBAAgB;IACpB,IAAI,EAAE,sBAAsB;IAC5B,MAAM,EAAE,sCAAsC;IAC9C,WAAW,EACT,uPAAuP;IACzP,UAAU,EAAE,MAAM;IAClB,gBAAgB,EACd,4HAA4H;IAC9H,iBAAiB,EACf,4HAA4H;IAC9H,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wHAoCwG;IACtH,OAAO,EAAE,mBAAmB;CAC7B,CAAC;AAEF,eAAe,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"api-contract.d.ts","sourceRoot":"","sources":["../../src/judges/api-contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,eAAO,MAAM,gBAAgB,EAAE,eA6B9B,CAAC"}
1
+ {"version":3,"file":"api-contract.d.ts","sourceRoot":"","sources":["../../src/judges/api-contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAInD,eAAO,MAAM,gBAAgB,EAAE,eA8B9B,CAAC"}
@@ -1,3 +1,5 @@
1
+ import { analyzeApiContract } from "../evaluators/api-contract.js";
2
+ import { defaultRegistry } from "../judge-registry.js";
1
3
  export const apiContractJudge = {
2
4
  id: "api-contract",
3
5
  name: "Judge API Contract Conformance",
@@ -26,5 +28,7 @@ SEVERITY MAPPING:
26
28
  ADVERSARIAL MANDATE:
27
29
  - Flag every deviation from RESTful best practices.
28
30
  - Do NOT assume middleware handles validation unless explicitly imported and applied.`,
31
+ analyze: analyzeApiContract,
29
32
  };
33
+ defaultRegistry.register(apiContractJudge);
30
34
  //# sourceMappingURL=api-contract.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-contract.js","sourceRoot":"","sources":["../../src/judges/api-contract.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAoB;IAC/C,EAAE,EAAE,cAAc;IAClB,IAAI,EAAE,gCAAgC;IACtC,WAAW,EACT,qFAAqF;QACrF,8FAA8F;IAChG,MAAM,EAAE,kCAAkC;IAC1C,UAAU,EAAE,KAAK;IACjB,gBAAgB,EAAE,wFAAwF;IAC1G,iBAAiB,EAAE,gFAAgF;IACnG,YAAY,EAAE;;;;;;;;;;;;;;;;;;sFAkBsE;CACrF,CAAC"}
1
+ {"version":3,"file":"api-contract.js","sourceRoot":"","sources":["../../src/judges/api-contract.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,CAAC,MAAM,gBAAgB,GAAoB;IAC/C,EAAE,EAAE,cAAc;IAClB,IAAI,EAAE,gCAAgC;IACtC,WAAW,EACT,qFAAqF;QACrF,8FAA8F;IAChG,MAAM,EAAE,kCAAkC;IAC1C,UAAU,EAAE,KAAK;IACjB,gBAAgB,EAAE,wFAAwF;IAC1G,iBAAiB,EAAE,gFAAgF;IACnG,YAAY,EAAE;;;;;;;;;;;;;;;;;;sFAkBsE;IACpF,OAAO,EAAE,kBAAkB;CAC5B,CAAC;AAEF,eAAe,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"api-design.d.ts","sourceRoot":"","sources":["../../src/judges/api-design.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,eAAO,MAAM,cAAc,EAAE,eAqC5B,CAAC"}
1
+ {"version":3,"file":"api-design.d.ts","sourceRoot":"","sources":["../../src/judges/api-design.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAInD,eAAO,MAAM,cAAc,EAAE,eAsC5B,CAAC"}
@@ -1,3 +1,5 @@
1
+ import { analyzeApiDesign } from "../evaluators/api-design.js";
2
+ import { defaultRegistry } from "../judge-registry.js";
1
3
  export const apiDesignJudge = {
2
4
  id: "api-design",
3
5
  name: "Judge API Design",
@@ -34,5 +36,7 @@ ADVERSARIAL MANDATE:
34
36
  - Never praise or compliment the code. Report only problems, risks, and deficiencies.
35
37
  - If you are uncertain whether something is an issue, flag it only when you can cite specific code evidence (line numbers, patterns, API calls). Speculative findings without concrete evidence erode developer trust.
36
38
  - Absence of findings does not mean the API is well-designed. It means your analysis reached its limits. State this explicitly.`,
39
+ analyze: analyzeApiDesign,
37
40
  };
41
+ defaultRegistry.register(apiDesignJudge);
38
42
  //# sourceMappingURL=api-design.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-design.js","sourceRoot":"","sources":["../../src/judges/api-design.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAoB;IAC7C,EAAE,EAAE,YAAY;IAChB,IAAI,EAAE,kBAAkB;IACxB,MAAM,EAAE,wBAAwB;IAChC,WAAW,EACT,6KAA6K;IAC/K,UAAU,EAAE,KAAK;IACjB,gBAAgB,EAAE,2DAA2D;IAC7E,iBAAiB,EAAE,wBAAwB;IAC3C,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;gIA2BgH;CAC/H,CAAC"}
1
+ {"version":3,"file":"api-design.js","sourceRoot":"","sources":["../../src/judges/api-design.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,CAAC,MAAM,cAAc,GAAoB;IAC7C,EAAE,EAAE,YAAY;IAChB,IAAI,EAAE,kBAAkB;IACxB,MAAM,EAAE,wBAAwB;IAChC,WAAW,EACT,6KAA6K;IAC/K,UAAU,EAAE,KAAK;IACjB,gBAAgB,EAAE,2DAA2D;IAC7E,iBAAiB,EAAE,wBAAwB;IAC3C,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;gIA2BgH;IAC9H,OAAO,EAAE,gBAAgB;CAC1B,CAAC;AAEF,eAAe,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"authentication.d.ts","sourceRoot":"","sources":["../../src/judges/authentication.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,eAAO,MAAM,mBAAmB,EAAE,eAmCjC,CAAC"}
1
+ {"version":3,"file":"authentication.d.ts","sourceRoot":"","sources":["../../src/judges/authentication.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAInD,eAAO,MAAM,mBAAmB,EAAE,eAoCjC,CAAC"}
@@ -1,3 +1,5 @@
1
+ import { analyzeAuthentication } from "../evaluators/authentication.js";
2
+ import { defaultRegistry } from "../judge-registry.js";
1
3
  export const authenticationJudge = {
2
4
  id: "authentication",
3
5
  name: "Judge Authentication",
@@ -32,5 +34,7 @@ ADVERSARIAL MANDATE:
32
34
  - Never praise or compliment the code. Report only problems, risks, and deficiencies.
33
35
  - If you are uncertain whether something is an issue, flag it only when you can cite specific code evidence (line numbers, patterns, API calls). Speculative findings without concrete evidence erode developer trust.
34
36
  - Absence of findings does not mean auth is secure. It means your analysis reached its limits. State this explicitly.`,
37
+ analyze: analyzeAuthentication,
35
38
  };
39
+ defaultRegistry.register(authenticationJudge);
36
40
  //# sourceMappingURL=authentication.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"authentication.js","sourceRoot":"","sources":["../../src/judges/authentication.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,mBAAmB,GAAoB;IAClD,EAAE,EAAE,gBAAgB;IACpB,IAAI,EAAE,sBAAsB;IAC5B,MAAM,EAAE,gCAAgC;IACxC,WAAW,EACT,6IAA6I;IAC/I,UAAU,EAAE,MAAM;IAClB,gBAAgB,EAAE,iEAAiE;IACnF,iBAAiB,EAAE,4CAA4C;IAC/D,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;sHAyBsG;CACrH,CAAC"}
1
+ {"version":3,"file":"authentication.js","sourceRoot":"","sources":["../../src/judges/authentication.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,CAAC,MAAM,mBAAmB,GAAoB;IAClD,EAAE,EAAE,gBAAgB;IACpB,IAAI,EAAE,sBAAsB;IAC5B,MAAM,EAAE,gCAAgC;IACxC,WAAW,EACT,6IAA6I;IAC/I,UAAU,EAAE,MAAM;IAClB,gBAAgB,EAAE,iEAAiE;IACnF,iBAAiB,EAAE,4CAA4C;IAC/D,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;sHAyBsG;IACpH,OAAO,EAAE,qBAAqB;CAC/B,CAAC;AAEF,eAAe,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"backwards-compatibility.d.ts","sourceRoot":"","sources":["../../src/judges/backwards-compatibility.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,eAAO,MAAM,2BAA2B,EAAE,eAmCzC,CAAC"}
1
+ {"version":3,"file":"backwards-compatibility.d.ts","sourceRoot":"","sources":["../../src/judges/backwards-compatibility.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAInD,eAAO,MAAM,2BAA2B,EAAE,eAoCzC,CAAC"}
@@ -1,3 +1,5 @@
1
+ import { analyzeBackwardsCompatibility } from "../evaluators/backwards-compatibility.js";
2
+ import { defaultRegistry } from "../judge-registry.js";
1
3
  export const backwardsCompatibilityJudge = {
2
4
  id: "backwards-compatibility",
3
5
  name: "Judge Backwards Compatibility",
@@ -32,5 +34,7 @@ ADVERSARIAL MANDATE:
32
34
  - Never praise or compliment the code. Report only problems, risks, and deficiencies.
33
35
  - If you are uncertain whether something is an issue, flag it only when you can cite specific code evidence (line numbers, patterns, API calls). Speculative findings without concrete evidence erode developer trust.
34
36
  - Absence of findings does not mean compatibility is maintained. It means your analysis reached its limits. State this explicitly.`,
37
+ analyze: analyzeBackwardsCompatibility,
35
38
  };
39
+ defaultRegistry.register(backwardsCompatibilityJudge);
36
40
  //# sourceMappingURL=backwards-compatibility.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"backwards-compatibility.js","sourceRoot":"","sources":["../../src/judges/backwards-compatibility.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,2BAA2B,GAAoB;IAC1D,EAAE,EAAE,yBAAyB;IAC7B,IAAI,EAAE,+BAA+B;IACrC,MAAM,EAAE,sCAAsC;IAC9C,WAAW,EACT,yJAAyJ;IAC3J,UAAU,EAAE,QAAQ;IACpB,gBAAgB,EAAE,wDAAwD;IAC1E,iBAAiB,EAAE,qCAAqC;IACxD,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;mIAyBmH;CAClI,CAAC"}
1
+ {"version":3,"file":"backwards-compatibility.js","sourceRoot":"","sources":["../../src/judges/backwards-compatibility.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,6BAA6B,EAAE,MAAM,0CAA0C,CAAC;AACzF,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,CAAC,MAAM,2BAA2B,GAAoB;IAC1D,EAAE,EAAE,yBAAyB;IAC7B,IAAI,EAAE,+BAA+B;IACrC,MAAM,EAAE,sCAAsC;IAC9C,WAAW,EACT,yJAAyJ;IAC3J,UAAU,EAAE,QAAQ;IACpB,gBAAgB,EAAE,wDAAwD;IAC1E,iBAAiB,EAAE,qCAAqC;IACxD,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;mIAyBmH;IACjI,OAAO,EAAE,6BAA6B;CACvC,CAAC;AAEF,eAAe,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"caching.d.ts","sourceRoot":"","sources":["../../src/judges/caching.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,eAAO,MAAM,YAAY,EAAE,eAmC1B,CAAC"}
1
+ {"version":3,"file":"caching.d.ts","sourceRoot":"","sources":["../../src/judges/caching.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAInD,eAAO,MAAM,YAAY,EAAE,eAoC1B,CAAC"}