@kevinrabun/judges 3.38.0 → 3.41.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 (379) hide show
  1. package/CHANGELOG.md +68 -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 +370 -16
  15. package/dist/cli.js.map +1 -1
  16. package/dist/commands/auto-calibrate.d.ts +15 -0
  17. package/dist/commands/auto-calibrate.d.ts.map +1 -0
  18. package/dist/commands/auto-calibrate.js +107 -0
  19. package/dist/commands/auto-calibrate.js.map +1 -0
  20. package/dist/commands/benchmark-languages.js +4 -4
  21. package/dist/commands/benchmark.d.ts +2 -1
  22. package/dist/commands/benchmark.d.ts.map +1 -1
  23. package/dist/commands/benchmark.js +67 -2
  24. package/dist/commands/benchmark.js.map +1 -1
  25. package/dist/commands/calibration-dashboard.d.ts.map +1 -1
  26. package/dist/commands/calibration-dashboard.js +198 -0
  27. package/dist/commands/calibration-dashboard.js.map +1 -1
  28. package/dist/commands/calibration-share.d.ts +31 -0
  29. package/dist/commands/calibration-share.d.ts.map +1 -0
  30. package/dist/commands/calibration-share.js +183 -0
  31. package/dist/commands/calibration-share.js.map +1 -0
  32. package/dist/commands/compliance-report.d.ts +35 -0
  33. package/dist/commands/compliance-report.d.ts.map +1 -0
  34. package/dist/commands/compliance-report.js +162 -0
  35. package/dist/commands/compliance-report.js.map +1 -0
  36. package/dist/commands/config-migrate.d.ts +44 -0
  37. package/dist/commands/config-migrate.d.ts.map +1 -0
  38. package/dist/commands/config-migrate.js +241 -0
  39. package/dist/commands/config-migrate.js.map +1 -0
  40. package/dist/commands/dedup-report.d.ts +13 -0
  41. package/dist/commands/dedup-report.d.ts.map +1 -0
  42. package/dist/commands/dedup-report.js +138 -0
  43. package/dist/commands/dedup-report.js.map +1 -0
  44. package/dist/commands/dep-audit.d.ts +53 -0
  45. package/dist/commands/dep-audit.d.ts.map +1 -0
  46. package/dist/commands/dep-audit.js +278 -0
  47. package/dist/commands/dep-audit.js.map +1 -0
  48. package/dist/commands/deprecated.d.ts +48 -0
  49. package/dist/commands/deprecated.d.ts.map +1 -0
  50. package/dist/commands/deprecated.js +202 -0
  51. package/dist/commands/deprecated.js.map +1 -0
  52. package/dist/commands/diff.d.ts.map +1 -1
  53. package/dist/commands/diff.js +8 -3
  54. package/dist/commands/diff.js.map +1 -1
  55. package/dist/commands/feedback-rules.d.ts +29 -0
  56. package/dist/commands/feedback-rules.d.ts.map +1 -0
  57. package/dist/commands/feedback-rules.js +174 -0
  58. package/dist/commands/feedback-rules.js.map +1 -0
  59. package/dist/commands/feedback.d.ts +12 -0
  60. package/dist/commands/feedback.d.ts.map +1 -1
  61. package/dist/commands/feedback.js +16 -0
  62. package/dist/commands/feedback.js.map +1 -1
  63. package/dist/commands/fix-pr.d.ts +23 -0
  64. package/dist/commands/fix-pr.d.ts.map +1 -0
  65. package/dist/commands/fix-pr.js +323 -0
  66. package/dist/commands/fix-pr.js.map +1 -0
  67. package/dist/commands/fix.d.ts.map +1 -1
  68. package/dist/commands/fix.js +33 -1
  69. package/dist/commands/fix.js.map +1 -1
  70. package/dist/commands/governance.d.ts +32 -0
  71. package/dist/commands/governance.d.ts.map +1 -0
  72. package/dist/commands/governance.js +203 -0
  73. package/dist/commands/governance.js.map +1 -0
  74. package/dist/commands/help.d.ts +8 -0
  75. package/dist/commands/help.d.ts.map +1 -0
  76. package/dist/commands/help.js +303 -0
  77. package/dist/commands/help.js.map +1 -0
  78. package/dist/commands/hook.d.ts.map +1 -1
  79. package/dist/commands/hook.js +17 -20
  80. package/dist/commands/hook.js.map +1 -1
  81. package/dist/commands/interactive-fix.d.ts +23 -0
  82. package/dist/commands/interactive-fix.d.ts.map +1 -0
  83. package/dist/commands/interactive-fix.js +140 -0
  84. package/dist/commands/interactive-fix.js.map +1 -0
  85. package/dist/commands/llm-benchmark.d.ts +119 -0
  86. package/dist/commands/llm-benchmark.d.ts.map +1 -0
  87. package/dist/commands/llm-benchmark.js +396 -0
  88. package/dist/commands/llm-benchmark.js.map +1 -0
  89. package/dist/commands/metrics-dashboard.d.ts +22 -0
  90. package/dist/commands/metrics-dashboard.d.ts.map +1 -0
  91. package/dist/commands/metrics-dashboard.js +335 -0
  92. package/dist/commands/metrics-dashboard.js.map +1 -0
  93. package/dist/commands/metrics.d.ts +58 -0
  94. package/dist/commands/metrics.d.ts.map +1 -0
  95. package/dist/commands/metrics.js +242 -0
  96. package/dist/commands/metrics.js.map +1 -0
  97. package/dist/commands/monorepo.d.ts +38 -0
  98. package/dist/commands/monorepo.d.ts.map +1 -0
  99. package/dist/commands/monorepo.js +233 -0
  100. package/dist/commands/monorepo.js.map +1 -0
  101. package/dist/commands/notify.d.ts +79 -0
  102. package/dist/commands/notify.d.ts.map +1 -0
  103. package/dist/commands/notify.js +325 -0
  104. package/dist/commands/notify.js.map +1 -0
  105. package/dist/commands/onboard.d.ts +13 -0
  106. package/dist/commands/onboard.d.ts.map +1 -0
  107. package/dist/commands/onboard.js +179 -0
  108. package/dist/commands/onboard.js.map +1 -0
  109. package/dist/commands/org-metrics.d.ts +24 -0
  110. package/dist/commands/org-metrics.d.ts.map +1 -0
  111. package/dist/commands/org-metrics.js +238 -0
  112. package/dist/commands/org-metrics.js.map +1 -0
  113. package/dist/commands/override.d.ts +62 -0
  114. package/dist/commands/override.d.ts.map +1 -0
  115. package/dist/commands/override.js +264 -0
  116. package/dist/commands/override.js.map +1 -0
  117. package/dist/commands/parity.d.ts +31 -0
  118. package/dist/commands/parity.d.ts.map +1 -0
  119. package/dist/commands/parity.js +213 -0
  120. package/dist/commands/parity.js.map +1 -0
  121. package/dist/commands/plugin-search.d.ts +40 -0
  122. package/dist/commands/plugin-search.d.ts.map +1 -0
  123. package/dist/commands/plugin-search.js +328 -0
  124. package/dist/commands/plugin-search.js.map +1 -0
  125. package/dist/commands/plugins.d.ts +13 -0
  126. package/dist/commands/plugins.d.ts.map +1 -0
  127. package/dist/commands/plugins.js +105 -0
  128. package/dist/commands/plugins.js.map +1 -0
  129. package/dist/commands/quality-gate.d.ts +70 -0
  130. package/dist/commands/quality-gate.d.ts.map +1 -0
  131. package/dist/commands/quality-gate.js +264 -0
  132. package/dist/commands/quality-gate.js.map +1 -0
  133. package/dist/commands/review.js +1 -1
  134. package/dist/commands/review.js.map +1 -1
  135. package/dist/commands/snapshot.d.ts +27 -0
  136. package/dist/commands/snapshot.d.ts.map +1 -1
  137. package/dist/commands/snapshot.js +99 -0
  138. package/dist/commands/snapshot.js.map +1 -1
  139. package/dist/commands/trace.d.ts +65 -0
  140. package/dist/commands/trace.d.ts.map +1 -0
  141. package/dist/commands/trace.js +246 -0
  142. package/dist/commands/trace.js.map +1 -0
  143. package/dist/commands/trust-ramp.d.ts +30 -0
  144. package/dist/commands/trust-ramp.d.ts.map +1 -0
  145. package/dist/commands/trust-ramp.js +190 -0
  146. package/dist/commands/trust-ramp.js.map +1 -0
  147. package/dist/config.d.ts +5 -0
  148. package/dist/config.d.ts.map +1 -1
  149. package/dist/config.js +65 -0
  150. package/dist/config.js.map +1 -1
  151. package/dist/data-adapter.d.ts +124 -0
  152. package/dist/data-adapter.d.ts.map +1 -0
  153. package/dist/data-adapter.js +213 -0
  154. package/dist/data-adapter.js.map +1 -0
  155. package/dist/evaluators/accessibility.js +1 -1
  156. package/dist/evaluators/accessibility.js.map +1 -1
  157. package/dist/evaluators/ai-code-safety.d.ts.map +1 -1
  158. package/dist/evaluators/ai-code-safety.js +1 -4
  159. package/dist/evaluators/ai-code-safety.js.map +1 -1
  160. package/dist/evaluators/cost-effectiveness.js +1 -1
  161. package/dist/evaluators/cost-effectiveness.js.map +1 -1
  162. package/dist/evaluators/false-positive-review.js +4 -4
  163. package/dist/evaluators/false-positive-review.js.map +1 -1
  164. package/dist/evaluators/framework-rules.d.ts +59 -0
  165. package/dist/evaluators/framework-rules.d.ts.map +1 -0
  166. package/dist/evaluators/framework-rules.js +292 -0
  167. package/dist/evaluators/framework-rules.js.map +1 -0
  168. package/dist/evaluators/iac-security.js +1 -1
  169. package/dist/evaluators/iac-security.js.map +1 -1
  170. package/dist/evaluators/index.d.ts.map +1 -1
  171. package/dist/evaluators/index.js +59 -10
  172. package/dist/evaluators/index.js.map +1 -1
  173. package/dist/evaluators/intent-alignment.d.ts +4 -0
  174. package/dist/evaluators/intent-alignment.d.ts.map +1 -1
  175. package/dist/evaluators/intent-alignment.js +163 -0
  176. package/dist/evaluators/intent-alignment.js.map +1 -1
  177. package/dist/evaluators/logic-review.js +1 -1
  178. package/dist/evaluators/logic-review.js.map +1 -1
  179. package/dist/evaluators/maintainability.js +1 -1
  180. package/dist/evaluators/maintainability.js.map +1 -1
  181. package/dist/evaluators/over-engineering.js +3 -3
  182. package/dist/evaluators/over-engineering.js.map +1 -1
  183. package/dist/evaluators/project.d.ts +12 -0
  184. package/dist/evaluators/project.d.ts.map +1 -1
  185. package/dist/evaluators/project.js +86 -0
  186. package/dist/evaluators/project.js.map +1 -1
  187. package/dist/evaluators/security.js +2 -2
  188. package/dist/evaluators/security.js.map +1 -1
  189. package/dist/evaluators/ux.js +1 -1
  190. package/dist/evaluators/ux.js.map +1 -1
  191. package/dist/finding-lifecycle.d.ts +9 -0
  192. package/dist/finding-lifecycle.d.ts.map +1 -1
  193. package/dist/finding-lifecycle.js +15 -0
  194. package/dist/finding-lifecycle.js.map +1 -1
  195. package/dist/fix-history.d.ts +9 -0
  196. package/dist/fix-history.d.ts.map +1 -1
  197. package/dist/fix-history.js +15 -0
  198. package/dist/fix-history.js.map +1 -1
  199. package/dist/formatters/sarif.d.ts +3 -0
  200. package/dist/formatters/sarif.d.ts.map +1 -1
  201. package/dist/formatters/sarif.js +36 -12
  202. package/dist/formatters/sarif.js.map +1 -1
  203. package/dist/github-app.d.ts +16 -1
  204. package/dist/github-app.d.ts.map +1 -1
  205. package/dist/github-app.js +85 -2
  206. package/dist/github-app.js.map +1 -1
  207. package/dist/index.js +5 -0
  208. package/dist/index.js.map +1 -1
  209. package/dist/judge-registry.d.ts +157 -0
  210. package/dist/judge-registry.d.ts.map +1 -0
  211. package/dist/judge-registry.js +273 -0
  212. package/dist/judge-registry.js.map +1 -0
  213. package/dist/judges/accessibility.d.ts.map +1 -1
  214. package/dist/judges/accessibility.js +4 -0
  215. package/dist/judges/accessibility.js.map +1 -1
  216. package/dist/judges/agent-instructions.d.ts.map +1 -1
  217. package/dist/judges/agent-instructions.js +4 -0
  218. package/dist/judges/agent-instructions.js.map +1 -1
  219. package/dist/judges/ai-code-safety.d.ts.map +1 -1
  220. package/dist/judges/ai-code-safety.js +4 -0
  221. package/dist/judges/ai-code-safety.js.map +1 -1
  222. package/dist/judges/api-contract.d.ts.map +1 -1
  223. package/dist/judges/api-contract.js +4 -0
  224. package/dist/judges/api-contract.js.map +1 -1
  225. package/dist/judges/api-design.d.ts.map +1 -1
  226. package/dist/judges/api-design.js +4 -0
  227. package/dist/judges/api-design.js.map +1 -1
  228. package/dist/judges/authentication.d.ts.map +1 -1
  229. package/dist/judges/authentication.js +4 -0
  230. package/dist/judges/authentication.js.map +1 -1
  231. package/dist/judges/backwards-compatibility.d.ts.map +1 -1
  232. package/dist/judges/backwards-compatibility.js +4 -0
  233. package/dist/judges/backwards-compatibility.js.map +1 -1
  234. package/dist/judges/caching.d.ts.map +1 -1
  235. package/dist/judges/caching.js +4 -0
  236. package/dist/judges/caching.js.map +1 -1
  237. package/dist/judges/ci-cd.d.ts.map +1 -1
  238. package/dist/judges/ci-cd.js +4 -0
  239. package/dist/judges/ci-cd.js.map +1 -1
  240. package/dist/judges/cloud-readiness.d.ts.map +1 -1
  241. package/dist/judges/cloud-readiness.js +4 -0
  242. package/dist/judges/cloud-readiness.js.map +1 -1
  243. package/dist/judges/code-structure.d.ts.map +1 -1
  244. package/dist/judges/code-structure.js +4 -0
  245. package/dist/judges/code-structure.js.map +1 -1
  246. package/dist/judges/compliance.d.ts.map +1 -1
  247. package/dist/judges/compliance.js +4 -0
  248. package/dist/judges/compliance.js.map +1 -1
  249. package/dist/judges/concurrency.d.ts.map +1 -1
  250. package/dist/judges/concurrency.js +4 -0
  251. package/dist/judges/concurrency.js.map +1 -1
  252. package/dist/judges/configuration-management.d.ts.map +1 -1
  253. package/dist/judges/configuration-management.js +4 -0
  254. package/dist/judges/configuration-management.js.map +1 -1
  255. package/dist/judges/cost-effectiveness.d.ts.map +1 -1
  256. package/dist/judges/cost-effectiveness.js +4 -0
  257. package/dist/judges/cost-effectiveness.js.map +1 -1
  258. package/dist/judges/cybersecurity.d.ts.map +1 -1
  259. package/dist/judges/cybersecurity.js +4 -0
  260. package/dist/judges/cybersecurity.js.map +1 -1
  261. package/dist/judges/data-security.d.ts.map +1 -1
  262. package/dist/judges/data-security.js +4 -0
  263. package/dist/judges/data-security.js.map +1 -1
  264. package/dist/judges/data-sovereignty.d.ts.map +1 -1
  265. package/dist/judges/data-sovereignty.js +4 -0
  266. package/dist/judges/data-sovereignty.js.map +1 -1
  267. package/dist/judges/database.d.ts.map +1 -1
  268. package/dist/judges/database.js +4 -0
  269. package/dist/judges/database.js.map +1 -1
  270. package/dist/judges/dependency-health.d.ts.map +1 -1
  271. package/dist/judges/dependency-health.js +4 -0
  272. package/dist/judges/dependency-health.js.map +1 -1
  273. package/dist/judges/documentation.d.ts.map +1 -1
  274. package/dist/judges/documentation.js +4 -0
  275. package/dist/judges/documentation.js.map +1 -1
  276. package/dist/judges/error-handling.d.ts.map +1 -1
  277. package/dist/judges/error-handling.js +4 -0
  278. package/dist/judges/error-handling.js.map +1 -1
  279. package/dist/judges/ethics-bias.d.ts.map +1 -1
  280. package/dist/judges/ethics-bias.js +4 -0
  281. package/dist/judges/ethics-bias.js.map +1 -1
  282. package/dist/judges/false-positive-review.d.ts.map +1 -1
  283. package/dist/judges/false-positive-review.js +2 -0
  284. package/dist/judges/false-positive-review.js.map +1 -1
  285. package/dist/judges/framework-safety.d.ts.map +1 -1
  286. package/dist/judges/framework-safety.js +4 -0
  287. package/dist/judges/framework-safety.js.map +1 -1
  288. package/dist/judges/hallucination-detection.d.ts.map +1 -1
  289. package/dist/judges/hallucination-detection.js +4 -0
  290. package/dist/judges/hallucination-detection.js.map +1 -1
  291. package/dist/judges/iac-security.d.ts.map +1 -1
  292. package/dist/judges/iac-security.js +4 -0
  293. package/dist/judges/iac-security.js.map +1 -1
  294. package/dist/judges/index.d.ts +59 -0
  295. package/dist/judges/index.d.ts.map +1 -1
  296. package/dist/judges/index.js +65 -189
  297. package/dist/judges/index.js.map +1 -1
  298. package/dist/judges/intent-alignment.d.ts.map +1 -1
  299. package/dist/judges/intent-alignment.js +4 -0
  300. package/dist/judges/intent-alignment.js.map +1 -1
  301. package/dist/judges/internationalization.d.ts.map +1 -1
  302. package/dist/judges/internationalization.js +4 -0
  303. package/dist/judges/internationalization.js.map +1 -1
  304. package/dist/judges/logging-privacy.d.ts.map +1 -1
  305. package/dist/judges/logging-privacy.js +4 -0
  306. package/dist/judges/logging-privacy.js.map +1 -1
  307. package/dist/judges/logic-review.d.ts.map +1 -1
  308. package/dist/judges/logic-review.js +4 -0
  309. package/dist/judges/logic-review.js.map +1 -1
  310. package/dist/judges/maintainability.d.ts.map +1 -1
  311. package/dist/judges/maintainability.js +4 -0
  312. package/dist/judges/maintainability.js.map +1 -1
  313. package/dist/judges/model-fingerprint.d.ts.map +1 -1
  314. package/dist/judges/model-fingerprint.js +4 -0
  315. package/dist/judges/model-fingerprint.js.map +1 -1
  316. package/dist/judges/multi-turn-coherence.d.ts.map +1 -1
  317. package/dist/judges/multi-turn-coherence.js +4 -0
  318. package/dist/judges/multi-turn-coherence.js.map +1 -1
  319. package/dist/judges/observability.d.ts.map +1 -1
  320. package/dist/judges/observability.js +4 -0
  321. package/dist/judges/observability.js.map +1 -1
  322. package/dist/judges/over-engineering.d.ts.map +1 -1
  323. package/dist/judges/over-engineering.js +4 -0
  324. package/dist/judges/over-engineering.js.map +1 -1
  325. package/dist/judges/performance.d.ts.map +1 -1
  326. package/dist/judges/performance.js +4 -0
  327. package/dist/judges/performance.js.map +1 -1
  328. package/dist/judges/portability.d.ts.map +1 -1
  329. package/dist/judges/portability.js +4 -0
  330. package/dist/judges/portability.js.map +1 -1
  331. package/dist/judges/rate-limiting.d.ts.map +1 -1
  332. package/dist/judges/rate-limiting.js +4 -0
  333. package/dist/judges/rate-limiting.js.map +1 -1
  334. package/dist/judges/reliability.d.ts.map +1 -1
  335. package/dist/judges/reliability.js +4 -0
  336. package/dist/judges/reliability.js.map +1 -1
  337. package/dist/judges/scalability.d.ts.map +1 -1
  338. package/dist/judges/scalability.js +4 -0
  339. package/dist/judges/scalability.js.map +1 -1
  340. package/dist/judges/security.d.ts.map +1 -1
  341. package/dist/judges/security.js +4 -0
  342. package/dist/judges/security.js.map +1 -1
  343. package/dist/judges/software-practices.d.ts.map +1 -1
  344. package/dist/judges/software-practices.js +4 -0
  345. package/dist/judges/software-practices.js.map +1 -1
  346. package/dist/judges/testing.d.ts.map +1 -1
  347. package/dist/judges/testing.js +4 -0
  348. package/dist/judges/testing.js.map +1 -1
  349. package/dist/judges/ux.d.ts.map +1 -1
  350. package/dist/judges/ux.js +4 -0
  351. package/dist/judges/ux.js.map +1 -1
  352. package/dist/parallel.d.ts +53 -0
  353. package/dist/parallel.d.ts.map +1 -0
  354. package/dist/parallel.js +170 -0
  355. package/dist/parallel.js.map +1 -0
  356. package/dist/plugins.d.ts +8 -51
  357. package/dist/plugins.d.ts.map +1 -1
  358. package/dist/plugins.js +16 -125
  359. package/dist/plugins.js.map +1 -1
  360. package/dist/security-ids.d.ts +24 -0
  361. package/dist/security-ids.d.ts.map +1 -0
  362. package/dist/security-ids.js +240 -0
  363. package/dist/security-ids.js.map +1 -0
  364. package/dist/tools/prompts.d.ts +4 -0
  365. package/dist/tools/prompts.d.ts.map +1 -1
  366. package/dist/tools/prompts.js +6 -4
  367. package/dist/tools/prompts.js.map +1 -1
  368. package/dist/tools/register-scaffold.d.ts +3 -0
  369. package/dist/tools/register-scaffold.d.ts.map +1 -0
  370. package/dist/tools/register-scaffold.js +399 -0
  371. package/dist/tools/register-scaffold.js.map +1 -0
  372. package/dist/tools/register.d.ts +1 -1
  373. package/dist/tools/register.d.ts.map +1 -1
  374. package/dist/tools/register.js +3 -1
  375. package/dist/tools/register.js.map +1 -1
  376. package/dist/types.d.ts +75 -0
  377. package/dist/types.d.ts.map +1 -1
  378. package/package.json +3 -2
  379. package/server.json +2 -2
package/dist/plugins.js CHANGED
@@ -4,6 +4,10 @@
4
4
  * Allows third-party extensions to add custom judges, rules, and evaluators
5
5
  * that integrate seamlessly with the tribunal evaluation pipeline.
6
6
  *
7
+ * This module is now a thin façade over the unified JudgeRegistry.
8
+ * All state lives in `defaultRegistry`; these functions delegate to it
9
+ * for full backwards compatibility.
10
+ *
7
11
  * ```ts
8
12
  * import { registerPlugin } from "@kevinrabun/judges/api";
9
13
  * registerPlugin({
@@ -14,173 +18,60 @@
14
18
  * });
15
19
  * ```
16
20
  */
17
- // ─── Plugin Registry ─────────────────────────────────────────────────────────
18
- const registeredPlugins = new Map();
19
- const customRules = new Map();
20
- const pluginJudges = new Map();
21
+ import { defaultRegistry } from "./judge-registry.js";
21
22
  /**
22
23
  * Register a plugin with the judges system.
23
24
  */
24
25
  export function registerPlugin(plugin) {
25
- if (!plugin.name)
26
- throw new Error("Plugin name is required");
27
- if (!plugin.version)
28
- throw new Error("Plugin version is required");
29
- if (registeredPlugins.has(plugin.name)) {
30
- // Unregister existing version first
31
- unregisterPlugin(plugin.name);
32
- }
33
- registeredPlugins.set(plugin.name, plugin);
34
- let rulesRegistered = 0;
35
- let judgesRegistered = 0;
36
- // Register custom rules
37
- if (plugin.rules) {
38
- for (const rule of plugin.rules) {
39
- if (!rule.id)
40
- throw new Error(`Rule in plugin "${plugin.name}" is missing an id`);
41
- customRules.set(rule.id, rule);
42
- rulesRegistered++;
43
- }
44
- }
45
- // Register custom judges
46
- if (plugin.judges) {
47
- for (const judge of plugin.judges) {
48
- pluginJudges.set(judge.id, judge);
49
- judgesRegistered++;
50
- }
51
- }
52
- return { name: plugin.name, version: plugin.version, rulesRegistered, judgesRegistered };
26
+ return defaultRegistry.registerPlugin(plugin);
53
27
  }
54
28
  /**
55
29
  * Unregister a plugin and remove its rules/judges.
56
30
  */
57
31
  export function unregisterPlugin(name) {
58
- const plugin = registeredPlugins.get(name);
59
- if (!plugin)
60
- return false;
61
- if (plugin.rules) {
62
- for (const rule of plugin.rules) {
63
- customRules.delete(rule.id);
64
- }
65
- }
66
- if (plugin.judges) {
67
- for (const judge of plugin.judges) {
68
- pluginJudges.delete(judge.id);
69
- }
70
- }
71
- registeredPlugins.delete(name);
72
- return true;
32
+ return defaultRegistry.unregisterPlugin(name);
73
33
  }
74
34
  /**
75
35
  * Get all registered plugins.
76
36
  */
77
37
  export function getRegisteredPlugins() {
78
- return [...registeredPlugins.entries()].map(([, plugin]) => ({
79
- name: plugin.name,
80
- version: plugin.version,
81
- rulesRegistered: plugin.rules?.length ?? 0,
82
- judgesRegistered: plugin.judges?.length ?? 0,
83
- }));
38
+ return defaultRegistry.getRegisteredPlugins();
84
39
  }
85
40
  /**
86
41
  * Get all custom rules from all registered plugins.
87
42
  */
88
43
  export function getCustomRules() {
89
- return [...customRules.values()];
44
+ return defaultRegistry.getCustomRules();
90
45
  }
91
46
  /**
92
47
  * Get all custom judges from all registered plugins.
93
48
  */
94
49
  export function getPluginJudges() {
95
- return [...pluginJudges.values()];
50
+ return defaultRegistry.getPluginJudges();
96
51
  }
97
52
  /**
98
53
  * Evaluate custom rules against code and return findings.
99
54
  */
100
55
  export function evaluateCustomRules(code, language) {
101
- const findings = [];
102
- for (const rule of customRules.values()) {
103
- // Skip if rule doesn't apply to this language
104
- if (rule.languages && rule.languages.length > 0 && !rule.languages.includes(language)) {
105
- continue;
106
- }
107
- // Custom analyze function
108
- if (rule.analyze) {
109
- try {
110
- findings.push(...rule.analyze(code, language));
111
- }
112
- catch {
113
- // Silently skip failed custom rules
114
- }
115
- continue;
116
- }
117
- // Pattern-based rule
118
- if (rule.pattern) {
119
- const re = new RegExp(rule.pattern.source, rule.pattern.flags);
120
- let match;
121
- while ((match = re.exec(code)) !== null) {
122
- const beforeMatch = code.slice(0, match.index);
123
- const lineNum = (beforeMatch.match(/\n/g) || []).length + 1;
124
- findings.push({
125
- ruleId: rule.id,
126
- title: rule.title,
127
- severity: rule.severity,
128
- description: `${rule.description} (matched: ${match[0].slice(0, 100)})`,
129
- lineNumbers: [lineNum],
130
- recommendation: rule.suggestedFix || "",
131
- suggestedFix: rule.suggestedFix,
132
- });
133
- }
134
- }
135
- }
136
- return findings;
56
+ return defaultRegistry.evaluateCustomRules(code, language);
137
57
  }
138
58
  /**
139
59
  * Run all plugin beforeEvaluate hooks.
140
60
  */
141
61
  export function runBeforeHooks(code, language) {
142
- for (const plugin of registeredPlugins.values()) {
143
- if (plugin.beforeEvaluate) {
144
- try {
145
- plugin.beforeEvaluate(code, language);
146
- }
147
- catch {
148
- // Don't let plugin errors crash the evaluation
149
- }
150
- }
151
- }
62
+ defaultRegistry.runBeforeHooks(code, language);
152
63
  }
153
64
  /**
154
- * Run all plugin afterEvaluate hooks.
65
+ * Run all plugin afterEvaluate and transformFindings hooks.
155
66
  */
156
67
  export function runAfterHooks(findings) {
157
- let result = findings;
158
- for (const plugin of registeredPlugins.values()) {
159
- if (plugin.afterEvaluate) {
160
- try {
161
- result = plugin.afterEvaluate(result);
162
- }
163
- catch {
164
- // Don't let plugin errors crash the evaluation
165
- }
166
- }
167
- if (plugin.transformFindings) {
168
- try {
169
- result = plugin.transformFindings(result);
170
- }
171
- catch {
172
- // Don't let plugin errors crash the evaluation
173
- }
174
- }
175
- }
176
- return result;
68
+ const afterResult = defaultRegistry.runAfterHooks(findings);
69
+ return defaultRegistry.runTransformHooks(afterResult);
177
70
  }
178
71
  /**
179
72
  * Clear all registered plugins (useful for testing).
180
73
  */
181
74
  export function clearPlugins() {
182
- registeredPlugins.clear();
183
- customRules.clear();
184
- pluginJudges.clear();
75
+ defaultRegistry.clearPlugins();
185
76
  }
186
77
  //# sourceMappingURL=plugins.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugins.js","sourceRoot":"","sources":["../src/plugins.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugins.js","sourceRoot":"","sources":["../src/plugins.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EAAE,eAAe,EAA+D,MAAM,qBAAqB,CAAC;AAKnH;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,OAAO,eAAe,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,eAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,eAAe,CAAC,oBAAoB,EAAE,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,eAAe,CAAC,cAAc,EAAE,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,eAAe,CAAC,eAAe,EAAE,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY,EAAE,QAAgB;IAChE,OAAO,eAAe,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,QAAgB;IAC3D,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,QAAmB;IAC/C,MAAM,WAAW,GAAG,eAAe,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC5D,OAAO,eAAe,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,eAAe,CAAC,YAAY,EAAE,CAAC;AACjC,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * CWE / OWASP Rule Mapping — Structured Security Identifiers
3
+ *
4
+ * Maps rule prefixes and specific rule IDs to CWE and OWASP identifiers.
5
+ * These are attached to findings so downstream tools (SARIF viewers,
6
+ * compliance dashboards, etc.) can cross-reference industry standards.
7
+ */
8
+ import type { Finding } from "./types.js";
9
+ interface SecurityMapping {
10
+ cweIds?: string[];
11
+ owaspIds?: string[];
12
+ learnMoreUrl?: string;
13
+ }
14
+ /**
15
+ * Enrich findings with structured CWE/OWASP IDs and Learn More URLs.
16
+ * Non-mutating — returns a new array of enriched findings.
17
+ */
18
+ export declare function enrichWithSecurityIds(findings: Finding[]): Finding[];
19
+ /**
20
+ * Get the security mapping for a specific rule or prefix.
21
+ */
22
+ export declare function getSecurityMapping(ruleId: string): SecurityMapping | undefined;
23
+ export {};
24
+ //# sourceMappingURL=security-ids.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security-ids.d.ts","sourceRoot":"","sources":["../src/security-ids.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAI1C,UAAU,eAAe;IACvB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AA+MD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAmBpE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAK9E"}
@@ -0,0 +1,240 @@
1
+ /**
2
+ * CWE / OWASP Rule Mapping — Structured Security Identifiers
3
+ *
4
+ * Maps rule prefixes and specific rule IDs to CWE and OWASP identifiers.
5
+ * These are attached to findings so downstream tools (SARIF viewers,
6
+ * compliance dashboards, etc.) can cross-reference industry standards.
7
+ */
8
+ /**
9
+ * Prefix-level mappings — applies to all rules under a judge.
10
+ */
11
+ const PREFIX_MAP = {
12
+ SEC: {
13
+ cweIds: ["CWE-79", "CWE-89"],
14
+ owaspIds: ["A03:2021"],
15
+ learnMoreUrl: "https://owasp.org/Top10/A03_2021-Injection/",
16
+ },
17
+ AUTH: {
18
+ cweIds: ["CWE-287", "CWE-798"],
19
+ owaspIds: ["A07:2021"],
20
+ learnMoreUrl: "https://owasp.org/Top10/A07_2021-Identification_and_Authentication_Failures/",
21
+ },
22
+ CRYPTO: {
23
+ cweIds: ["CWE-327", "CWE-328"],
24
+ owaspIds: ["A02:2021"],
25
+ learnMoreUrl: "https://owasp.org/Top10/A02_2021-Cryptographic_Failures/",
26
+ },
27
+ DATA: {
28
+ cweIds: ["CWE-200", "CWE-312", "CWE-798"],
29
+ owaspIds: ["A02:2021"],
30
+ learnMoreUrl: "https://owasp.org/Top10/A02_2021-Cryptographic_Failures/",
31
+ },
32
+ CYBER: {
33
+ cweIds: ["CWE-284", "CWE-269"],
34
+ owaspIds: ["A01:2021"],
35
+ learnMoreUrl: "https://owasp.org/Top10/A01_2021-Broken_Access_Control/",
36
+ },
37
+ INJ: {
38
+ cweIds: ["CWE-89", "CWE-78"],
39
+ owaspIds: ["A03:2021"],
40
+ learnMoreUrl: "https://owasp.org/Top10/A03_2021-Injection/",
41
+ },
42
+ XSS: {
43
+ cweIds: ["CWE-79"],
44
+ owaspIds: ["A03:2021"],
45
+ learnMoreUrl: "https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html",
46
+ },
47
+ SSRF: {
48
+ cweIds: ["CWE-918"],
49
+ owaspIds: ["A10:2021"],
50
+ learnMoreUrl: "https://owasp.org/Top10/A10_2021-Server-Side_Request_Forgery_%28SSRF%29/",
51
+ },
52
+ DB: {
53
+ cweIds: ["CWE-89", "CWE-943"],
54
+ owaspIds: ["A03:2021"],
55
+ learnMoreUrl: "https://cheatsheetseries.owasp.org/cheatsheets/Query_Parameterization_Cheat_Sheet.html",
56
+ },
57
+ CFG: {
58
+ cweIds: ["CWE-16", "CWE-1188"],
59
+ owaspIds: ["A05:2021"],
60
+ learnMoreUrl: "https://owasp.org/Top10/A05_2021-Security_Misconfiguration/",
61
+ },
62
+ RATE: {
63
+ cweIds: ["CWE-770"],
64
+ owaspIds: ["A04:2021"],
65
+ learnMoreUrl: "https://cheatsheetseries.owasp.org/cheatsheets/Denial_of_Service_Cheat_Sheet.html",
66
+ },
67
+ LOGPRIV: {
68
+ cweIds: ["CWE-532", "CWE-117"],
69
+ owaspIds: ["A09:2021"],
70
+ learnMoreUrl: "https://owasp.org/Top10/A09_2021-Security_Logging_and_Monitoring_Failures/",
71
+ },
72
+ COMP: {
73
+ cweIds: ["CWE-1059"],
74
+ owaspIds: ["A04:2021"],
75
+ learnMoreUrl: "https://owasp.org/Top10/A04_2021-Insecure_Design/",
76
+ },
77
+ DEPS: {
78
+ cweIds: ["CWE-1104"],
79
+ owaspIds: ["A06:2021"],
80
+ learnMoreUrl: "https://owasp.org/Top10/A06_2021-Vulnerable_and_Outdated_Components/",
81
+ },
82
+ ERR: {
83
+ cweIds: ["CWE-209", "CWE-755"],
84
+ learnMoreUrl: "https://cheatsheetseries.owasp.org/cheatsheets/Error_Handling_Cheat_Sheet.html",
85
+ },
86
+ SOV: {
87
+ learnMoreUrl: "https://gdpr-info.eu/art-44-gdpr/",
88
+ },
89
+ PERF: {
90
+ learnMoreUrl: "https://web.dev/performance/",
91
+ },
92
+ A11Y: {
93
+ learnMoreUrl: "https://www.w3.org/WAI/standards-guidelines/wcag/",
94
+ },
95
+ DOC: {
96
+ learnMoreUrl: "https://jsdoc.app/",
97
+ },
98
+ TEST: {
99
+ learnMoreUrl: "https://martinfowler.com/articles/practical-test-pyramid.html",
100
+ },
101
+ API: {
102
+ learnMoreUrl: "https://swagger.io/resources/articles/best-practices-in-api-design/",
103
+ },
104
+ SCALE: {
105
+ learnMoreUrl: "https://12factor.net/",
106
+ },
107
+ REL: {
108
+ learnMoreUrl: "https://sre.google/sre-book/table-of-contents/",
109
+ },
110
+ OBS: {
111
+ learnMoreUrl: "https://opentelemetry.io/docs/",
112
+ },
113
+ MAINT: {
114
+ learnMoreUrl: "https://refactoring.guru/refactoring",
115
+ },
116
+ CONC: {
117
+ cweIds: ["CWE-362", "CWE-667"],
118
+ learnMoreUrl: "https://cheatsheetseries.owasp.org/cheatsheets/Race_Conditions_Cheat_Sheet.html",
119
+ },
120
+ STRUCT: {
121
+ learnMoreUrl: "https://refactoring.guru/refactoring/smells",
122
+ },
123
+ I18N: {
124
+ learnMoreUrl: "https://developer.mozilla.org/en-US/docs/Mozilla/Localization/Web_Localizability/Creating_localizable_web_applications",
125
+ },
126
+ CLOUD: {
127
+ learnMoreUrl: "https://12factor.net/",
128
+ },
129
+ COST: {
130
+ learnMoreUrl: "https://aws.amazon.com/architecture/cost-optimization/",
131
+ },
132
+ CACHE: {
133
+ learnMoreUrl: "https://redis.io/docs/manual/client-side-caching/",
134
+ },
135
+ COMPAT: {
136
+ learnMoreUrl: "https://semver.org/",
137
+ },
138
+ CICD: {
139
+ learnMoreUrl: "https://docs.github.com/en/actions",
140
+ },
141
+ PORTA: {
142
+ learnMoreUrl: "https://12factor.net/dev-prod-parity",
143
+ },
144
+ UX: {
145
+ learnMoreUrl: "https://www.nngroup.com/articles/usability-heuristics/",
146
+ },
147
+ ETHICS: {
148
+ learnMoreUrl: "https://www.microsoft.com/en-us/ai/responsible-ai",
149
+ },
150
+ AGENT: {
151
+ learnMoreUrl: "https://docs.github.com/en/copilot/customizing-copilot/adding-custom-instructions-for-github-copilot",
152
+ },
153
+ AICS: {
154
+ owaspIds: ["OWASP-AI-Security"],
155
+ learnMoreUrl: "https://owasp.org/www-project-ai-security-and-privacy-guide/",
156
+ },
157
+ IAC: {
158
+ cweIds: ["CWE-1004"],
159
+ learnMoreUrl: "https://cheatsheetseries.owasp.org/cheatsheets/Infrastructure_as_Code_Security_Cheat_Sheet.html",
160
+ },
161
+ INTENT: {
162
+ learnMoreUrl: "https://docs.github.com/en/copilot/using-github-copilot/best-practices-for-using-github-copilot",
163
+ },
164
+ DSEC: {
165
+ cweIds: ["CWE-1104"],
166
+ owaspIds: ["A06:2021"],
167
+ learnMoreUrl: "https://owasp.org/Top10/A06_2021-Vulnerable_and_Outdated_Components/",
168
+ },
169
+ HALLU: {
170
+ learnMoreUrl: "https://owasp.org/www-project-top-10-for-large-language-model-applications/",
171
+ },
172
+ COH: {
173
+ learnMoreUrl: "https://owasp.org/www-project-top-10-for-large-language-model-applications/",
174
+ },
175
+ MFPR: {
176
+ learnMoreUrl: "https://owasp.org/www-project-top-10-for-large-language-model-applications/",
177
+ },
178
+ };
179
+ /**
180
+ * Rule-specific overrides — more precise than prefix-level mappings.
181
+ */
182
+ const RULE_MAP = {
183
+ "SEC-001": { cweIds: ["CWE-89"], owaspIds: ["A03:2021"] },
184
+ "SEC-002": { cweIds: ["CWE-78"], owaspIds: ["A03:2021"] },
185
+ "SEC-003": { cweIds: ["CWE-79"], owaspIds: ["A03:2021"] },
186
+ "AUTH-001": { cweIds: ["CWE-798"], owaspIds: ["A07:2021"] },
187
+ "AUTH-002": { cweIds: ["CWE-287"], owaspIds: ["A07:2021"] },
188
+ "AUTH-003": { cweIds: ["CWE-257"], owaspIds: ["A07:2021"] },
189
+ "DATA-001": { cweIds: ["CWE-312", "CWE-798"], owaspIds: ["A02:2021"] },
190
+ "DATA-002": { cweIds: ["CWE-200"], owaspIds: ["A01:2021"] },
191
+ "CYBER-001": { cweIds: ["CWE-78"], owaspIds: ["A03:2021"] },
192
+ "CYBER-002": { cweIds: ["CWE-94"], owaspIds: ["A03:2021"] },
193
+ "CYBER-003": { cweIds: ["CWE-502"], owaspIds: ["A08:2021"] },
194
+ "CYBER-004": { cweIds: ["CWE-327"], owaspIds: ["A02:2021"] },
195
+ "DB-001": { cweIds: ["CWE-89"], owaspIds: ["A03:2021"] },
196
+ "DB-002": { cweIds: ["CWE-798"], owaspIds: ["A07:2021"] },
197
+ "CFG-001": { cweIds: ["CWE-798"], owaspIds: ["A07:2021"] },
198
+ "CFG-002": { cweIds: ["CWE-16"], owaspIds: ["A05:2021"] },
199
+ "LOGPRIV-001": { cweIds: ["CWE-532"], owaspIds: ["A09:2021"] },
200
+ "LOGPRIV-002": { cweIds: ["CWE-117"], owaspIds: ["A09:2021"] },
201
+ "ERR-001": { cweIds: ["CWE-209"] },
202
+ "ERR-002": { cweIds: ["CWE-755"] },
203
+ "CONC-001": { cweIds: ["CWE-362"] },
204
+ "CONC-002": { cweIds: ["CWE-667"] },
205
+ "RATE-001": { cweIds: ["CWE-770"], owaspIds: ["A04:2021"] },
206
+ };
207
+ // ─── Enrichment Function ────────────────────────────────────────────────────
208
+ /**
209
+ * Enrich findings with structured CWE/OWASP IDs and Learn More URLs.
210
+ * Non-mutating — returns a new array of enriched findings.
211
+ */
212
+ export function enrichWithSecurityIds(findings) {
213
+ return findings.map((f) => {
214
+ const prefix = f.ruleId.replace(/-\d+$/, "");
215
+ const ruleMapping = RULE_MAP[f.ruleId];
216
+ const prefixMapping = PREFIX_MAP[prefix];
217
+ const cweIds = ruleMapping?.cweIds ?? prefixMapping?.cweIds;
218
+ const owaspIds = ruleMapping?.owaspIds ?? prefixMapping?.owaspIds;
219
+ const learnMoreUrl = ruleMapping?.learnMoreUrl ?? prefixMapping?.learnMoreUrl;
220
+ if (!cweIds && !owaspIds && !learnMoreUrl)
221
+ return f;
222
+ return {
223
+ ...f,
224
+ ...(cweIds && !f.cweIds ? { cweIds } : {}),
225
+ ...(owaspIds && !f.owaspIds ? { owaspIds } : {}),
226
+ ...(learnMoreUrl && !f.learnMoreUrl ? { learnMoreUrl } : {}),
227
+ };
228
+ });
229
+ }
230
+ /**
231
+ * Get the security mapping for a specific rule or prefix.
232
+ */
233
+ export function getSecurityMapping(ruleId) {
234
+ const ruleMapping = RULE_MAP[ruleId];
235
+ if (ruleMapping)
236
+ return ruleMapping;
237
+ const prefix = ruleId.replace(/-\d+$/, "");
238
+ return PREFIX_MAP[prefix];
239
+ }
240
+ //# sourceMappingURL=security-ids.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security-ids.js","sourceRoot":"","sources":["../src/security-ids.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,8 @@
1
1
  import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ /** Adversarial evaluation stance — shared across all judges. */
3
+ export declare const SHARED_ADVERSARIAL_MANDATE = "ADVERSARIAL MANDATE (applies to ALL judges):\n- Your role is adversarial: assume the code has problems and actively hunt for them. Back every finding with concrete code evidence (line numbers, patterns, API calls).\n- Never praise or compliment the code. Report only problems, risks, and deficiencies.\n- 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.\n- If no concrete issues are found after thorough analysis, report zero findings. Do not pad the report with speculative issues.";
4
+ /** Precision override — ensures evidence-based findings. */
5
+ export declare const PRECISION_MANDATE = "PRECISION MANDATE (overrides adversarial stance when in conflict):\n- Every finding MUST cite specific code evidence: exact line numbers, API calls, variable names, or patterns. Findings without concrete evidence must be discarded.\n- Do NOT flag the absence of a feature or pattern unless you can identify the specific code location where it SHOULD have been implemented and explain WHY it is required for THIS code.\n- Speculative, hypothetical, or \"just in case\" findings erode developer trust. Only flag issues you are confident exist in the actual code.\n- Prefer fewer, high-confidence findings over many uncertain ones. Quality of findings matters more than quantity.\n- If the code is genuinely well-written with no real issues, reporting ZERO findings is the correct and expected behavior. Do not manufacture findings to avoid an empty report.\n- Clean, well-structured code exists. Acknowledge it by not forcing false issues.";
2
6
  /**
3
7
  * Extract only the unique evaluation criteria from a judge's systemPrompt,
4
8
  * stripping the persona introduction line, the ADVERSARIAL MANDATE block,
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/tools/prompts.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAyBzE;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAyBjE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkFvD"}
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/tools/prompts.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE,gEAAgE;AAChE,eAAO,MAAM,0BAA0B,2oBAIyF,CAAC;AAEjI,4DAA4D;AAC5D,eAAO,MAAM,iBAAiB,86BAMoD,CAAC;AAInF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAyBjE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkFvD"}
@@ -16,17 +16,19 @@ import { JUDGES } from "../judges/index.js";
16
16
  // repeating the text 39 times.
17
17
  // ──────────────────────────────────────────────────────────────────────────────
18
18
  /** Adversarial evaluation stance — shared across all judges. */
19
- const SHARED_ADVERSARIAL_MANDATE = `ADVERSARIAL MANDATE (applies to ALL judges):
19
+ export const SHARED_ADVERSARIAL_MANDATE = `ADVERSARIAL MANDATE (applies to ALL judges):
20
20
  - Your role is adversarial: assume the code has problems and actively hunt for them. Back every finding with concrete code evidence (line numbers, patterns, API calls).
21
21
  - Never praise or compliment the code. Report only problems, risks, and deficiencies.
22
22
  - 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.
23
- - Absence of findings does not mean the code is good. It means your analysis reached its limits. State this explicitly.`;
23
+ - If no concrete issues are found after thorough analysis, report zero findings. Do not pad the report with speculative issues.`;
24
24
  /** Precision override — ensures evidence-based findings. */
25
- const PRECISION_MANDATE = `PRECISION MANDATE (overrides adversarial stance when in conflict):
25
+ export const PRECISION_MANDATE = `PRECISION MANDATE (overrides adversarial stance when in conflict):
26
26
  - Every finding MUST cite specific code evidence: exact line numbers, API calls, variable names, or patterns. Findings without concrete evidence must be discarded.
27
27
  - Do NOT flag the absence of a feature or pattern unless you can identify the specific code location where it SHOULD have been implemented and explain WHY it is required for THIS code.
28
28
  - Speculative, hypothetical, or "just in case" findings erode developer trust. Only flag issues you are confident exist in the actual code.
29
- - Prefer fewer, high-confidence findings over many uncertain ones. Quality of findings matters more than quantity.`;
29
+ - Prefer fewer, high-confidence findings over many uncertain ones. Quality of findings matters more than quantity.
30
+ - If the code is genuinely well-written with no real issues, reporting ZERO findings is the correct and expected behavior. Do not manufacture findings to avoid an empty report.
31
+ - Clean, well-structured code exists. Acknowledge it by not forcing false issues.`;
30
32
  // ─── Criteria Extraction ─────────────────────────────────────────────────────
31
33
  /**
32
34
  * Extract only the unique evaluation criteria from a judge's systemPrompt,
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/tools/prompts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/tools/prompts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerScaffoldTools(server: McpServer): void;
3
+ //# sourceMappingURL=register-scaffold.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-scaffold.d.ts","sourceRoot":"","sources":["../../src/tools/register-scaffold.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAmBzE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAG7D"}