@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
@@ -0,0 +1,241 @@
1
+ /**
2
+ * `judges config-migrate` — Configuration migration assistant.
3
+ *
4
+ * Helps users upgrade their .judgesrc configs between Judges versions.
5
+ * Detects deprecated fields, renamed keys, and structural changes,
6
+ * then applies automatic or guided migrations.
7
+ *
8
+ * Usage:
9
+ * judges config-migrate # Analyze current .judgesrc
10
+ * judges config-migrate --apply # Apply migrations in place
11
+ * judges config-migrate --dry-run # Show changes without writing
12
+ * judges config-migrate --config path # Specify config path
13
+ */
14
+ import { existsSync, readFileSync, writeFileSync } from "fs";
15
+ import { resolve } from "path";
16
+ // ─── Migration Rules ────────────────────────────────────────────────────────
17
+ const MIGRATIONS = [
18
+ {
19
+ id: "M001-severity-rename",
20
+ since: "3.0.0",
21
+ description: 'Rename "warning" severity to "medium" (severity levels: critical, high, medium, low, info)',
22
+ level: "error",
23
+ detect: (config) => {
24
+ const overrides = config.ruleOverrides;
25
+ if (!overrides)
26
+ return false;
27
+ return Object.values(overrides).some((o) => o.severity === "warning");
28
+ },
29
+ apply: (config) => {
30
+ const overrides = config.ruleOverrides;
31
+ for (const [key, val] of Object.entries(overrides)) {
32
+ if (val.severity === "warning") {
33
+ overrides[key] = { ...val, severity: "medium" };
34
+ }
35
+ }
36
+ return { ...config, ruleOverrides: overrides };
37
+ },
38
+ },
39
+ {
40
+ id: "M002-min-severity-string",
41
+ since: "3.0.0",
42
+ description: "Numeric minSeverity (1-5) should be replaced with string value (critical/high/medium/low/info)",
43
+ level: "error",
44
+ detect: (config) => typeof config.minSeverity === "number",
45
+ apply: (config) => {
46
+ const mapping = { 5: "critical", 4: "high", 3: "medium", 2: "low", 1: "info" };
47
+ const newSev = mapping[config.minSeverity] || "medium";
48
+ return { ...config, minSeverity: newSev };
49
+ },
50
+ },
51
+ {
52
+ id: "M003-disabled-rules-object",
53
+ since: "3.10.0",
54
+ description: "disabledRules should be an array of strings, not an object",
55
+ level: "error",
56
+ detect: (config) => config.disabledRules !== undefined && !Array.isArray(config.disabledRules),
57
+ apply: (config) => {
58
+ const obj = config.disabledRules;
59
+ return { ...config, disabledRules: Object.keys(obj) };
60
+ },
61
+ },
62
+ {
63
+ id: "M004-ignorePatterns-to-exclude",
64
+ since: "3.15.0",
65
+ description: 'Renamed "ignorePatterns" to "exclude" for consistency',
66
+ level: "warning",
67
+ detect: (config) => "ignorePatterns" in config,
68
+ apply: (config) => {
69
+ const { ignorePatterns, ...rest } = config;
70
+ const existing = rest.exclude || [];
71
+ const patterns = Array.isArray(ignorePatterns) ? ignorePatterns : [ignorePatterns];
72
+ return { ...rest, exclude: [...existing, ...patterns] };
73
+ },
74
+ },
75
+ {
76
+ id: "M005-level-to-preset",
77
+ since: "3.20.0",
78
+ description: 'Renamed "level" to "preset" for config profiles',
79
+ level: "warning",
80
+ detect: (config) => "level" in config && !("preset" in config),
81
+ apply: (config) => {
82
+ const { level, ...rest } = config;
83
+ return { ...rest, preset: level };
84
+ },
85
+ },
86
+ {
87
+ id: "M006-whitelist-to-include",
88
+ since: "3.15.0",
89
+ description: 'Renamed "whitelist" to "include" for inclusive terminology',
90
+ level: "warning",
91
+ detect: (config) => "whitelist" in config,
92
+ apply: (config) => {
93
+ const { whitelist, ...rest } = config;
94
+ const existing = rest.include || [];
95
+ const patterns = Array.isArray(whitelist) ? whitelist : [whitelist];
96
+ return { ...rest, include: [...existing, ...patterns] };
97
+ },
98
+ },
99
+ {
100
+ id: "M007-output-to-format",
101
+ since: "3.20.0",
102
+ description: 'Renamed "output" to "format" for output format specification',
103
+ level: "warning",
104
+ detect: (config) => "output" in config && !("format" in config),
105
+ apply: (config) => {
106
+ const { output, ...rest } = config;
107
+ return { ...rest, format: output };
108
+ },
109
+ },
110
+ {
111
+ id: "M008-judges-to-disabledJudges",
112
+ since: "3.25.0",
113
+ description: '"skipJudges" array should be "disabledJudges"',
114
+ level: "warning",
115
+ detect: (config) => "skipJudges" in config,
116
+ apply: (config) => {
117
+ const { skipJudges, ...rest } = config;
118
+ const existing = rest.disabledJudges || [];
119
+ const skip = Array.isArray(skipJudges) ? skipJudges : [skipJudges];
120
+ return { ...rest, disabledJudges: [...existing, ...skip] };
121
+ },
122
+ },
123
+ {
124
+ id: "M009-data-adapter-string",
125
+ since: "3.35.0",
126
+ description: "dataAdapter should be an object { type, url?, headers? }, not a string",
127
+ level: "warning",
128
+ detect: (config) => typeof config.dataAdapter === "string",
129
+ apply: (config) => {
130
+ const da = config.dataAdapter;
131
+ if (da.startsWith("http")) {
132
+ return { ...config, dataAdapter: { type: "http", url: da } };
133
+ }
134
+ return { ...config, dataAdapter: { type: "filesystem" } };
135
+ },
136
+ },
137
+ {
138
+ id: "M010-custom-rules-flat",
139
+ since: "3.30.0",
140
+ description: 'customRules entries require "id" field (previously auto-generated from index)',
141
+ level: "info",
142
+ detect: (config) => {
143
+ const rules = config.customRules;
144
+ if (!rules || !Array.isArray(rules))
145
+ return false;
146
+ return rules.some((r) => !r.id);
147
+ },
148
+ apply: (config) => {
149
+ const rules = config.customRules;
150
+ const patched = rules.map((r, i) => (r.id ? r : { ...r, id: `CUSTOM-${String(i + 1).padStart(3, "0")}` }));
151
+ return { ...config, customRules: patched };
152
+ },
153
+ },
154
+ ];
155
+ // ─── Analysis ───────────────────────────────────────────────────────────────
156
+ export function analyzeConfig(config) {
157
+ const applied = [];
158
+ let migratedConfig = { ...config };
159
+ let hasChanges = false;
160
+ for (const rule of MIGRATIONS) {
161
+ if (rule.detect(config)) {
162
+ applied.push({ id: rule.id, description: rule.description, level: rule.level });
163
+ migratedConfig = rule.apply(migratedConfig);
164
+ hasChanges = true;
165
+ }
166
+ }
167
+ return { configPath: "", applied, hasChanges, migratedConfig: hasChanges ? migratedConfig : undefined };
168
+ }
169
+ // ─── CLI Runner ─────────────────────────────────────────────────────────────
170
+ export function runConfigMigrate(argv) {
171
+ if (argv.includes("--help") || argv.includes("-h")) {
172
+ console.log(`
173
+ judges config-migrate — Configuration migration assistant
174
+
175
+ Usage:
176
+ judges config-migrate Analyze .judgesrc for issues
177
+ judges config-migrate --apply Apply migrations in place
178
+ judges config-migrate --dry-run Show changes without writing
179
+ judges config-migrate --config <path> Specify config file path
180
+
181
+ Detects and fixes:
182
+ • Renamed fields (ignorePatterns→exclude, output→format, etc.)
183
+ • Deprecated value types (numeric severity → string)
184
+ • Structural changes (object → array for disabledRules)
185
+ • Missing required fields (customRules.id)
186
+ • Terminology updates (whitelist→include, skipJudges→disabledJudges)
187
+
188
+ Options:
189
+ --apply Apply migrations and write updated config
190
+ --dry-run Show what would change (default behavior)
191
+ --config <path> Path to .judgesrc file (default: ./.judgesrc)
192
+ --format json JSON output
193
+ --help, -h Show this help
194
+ `);
195
+ return;
196
+ }
197
+ const configPath = resolve(argv.find((_a, i) => argv[i - 1] === "--config") || ".judgesrc");
198
+ const shouldApply = argv.includes("--apply");
199
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
200
+ if (!existsSync(configPath)) {
201
+ console.log(`\n No config file found at ${configPath}\n`);
202
+ console.log(" Run 'judges init' to create a .judgesrc, or specify --config <path>\n");
203
+ return;
204
+ }
205
+ let config;
206
+ try {
207
+ config = JSON.parse(readFileSync(configPath, "utf-8"));
208
+ }
209
+ catch (err) {
210
+ console.error(`\n Error parsing ${configPath}: ${err instanceof Error ? err.message : String(err)}\n`);
211
+ return;
212
+ }
213
+ const result = analyzeConfig(config);
214
+ result.configPath = configPath;
215
+ if (format === "json") {
216
+ console.log(JSON.stringify(result, null, 2));
217
+ return;
218
+ }
219
+ console.log(`\n Config Migration Analysis: ${configPath}\n`);
220
+ if (result.applied.length === 0) {
221
+ console.log(" ✅ No migrations needed — config is up to date.\n");
222
+ return;
223
+ }
224
+ const icons = { error: "❌", warning: "⚠️", info: "ℹ️" };
225
+ for (const m of result.applied) {
226
+ const icon = icons[m.level] || "•";
227
+ console.log(` ${icon} [${m.id}] ${m.description}`);
228
+ }
229
+ const errors = result.applied.filter((m) => m.level === "error").length;
230
+ const warnings = result.applied.filter((m) => m.level === "warning").length;
231
+ const infos = result.applied.filter((m) => m.level === "info").length;
232
+ console.log(`\n Summary: ${errors} error(s), ${warnings} warning(s), ${infos} info(s)\n`);
233
+ if (shouldApply && result.migratedConfig) {
234
+ writeFileSync(configPath, JSON.stringify(result.migratedConfig, null, 2) + "\n", "utf-8");
235
+ console.log(` ✅ Migrated config written to ${configPath}\n`);
236
+ }
237
+ else if (result.hasChanges) {
238
+ console.log(" Run with --apply to write the migrated config.\n");
239
+ }
240
+ }
241
+ //# sourceMappingURL=config-migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-migrate.js","sourceRoot":"","sources":["../../src/commands/config-migrate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * `judges dedup-report` — Cross-run finding deduplication report.
3
+ *
4
+ * Shows which findings are new vs recurring vs fixed across runs.
5
+ * Built on the existing finding-lifecycle tracking infrastructure.
6
+ *
7
+ * Usage:
8
+ * judges dedup-report # Show finding delta report
9
+ * judges dedup-report --format json # JSON output
10
+ * judges dedup-report --stats # Summary statistics only
11
+ */
12
+ export declare function runDedupReport(argv: string[]): void;
13
+ //# sourceMappingURL=dedup-report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dedup-report.d.ts","sourceRoot":"","sources":["../../src/commands/dedup-report.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAQH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA0HnD"}
@@ -0,0 +1,138 @@
1
+ /**
2
+ * `judges dedup-report` — Cross-run finding deduplication report.
3
+ *
4
+ * Shows which findings are new vs recurring vs fixed across runs.
5
+ * Built on the existing finding-lifecycle tracking infrastructure.
6
+ *
7
+ * Usage:
8
+ * judges dedup-report # Show finding delta report
9
+ * judges dedup-report --format json # JSON output
10
+ * judges dedup-report --stats # Summary statistics only
11
+ */
12
+ import { loadFindingStore, getFindingStats } from "../finding-lifecycle.js";
13
+ import { resolve } from "path";
14
+ // ─── CLI Runner ─────────────────────────────────────────────────────────────
15
+ export function runDedupReport(argv) {
16
+ if (argv.includes("--help") || argv.includes("-h")) {
17
+ console.log(`
18
+ judges dedup-report — Cross-run finding deduplication report
19
+
20
+ Usage:
21
+ judges dedup-report [dir] Show finding delta report
22
+ judges dedup-report --stats Summary statistics only
23
+ judges dedup-report --recurring Show only recurring findings
24
+ judges dedup-report --new Show only new findings since last run
25
+ judges dedup-report --fixed Show recently fixed findings
26
+ judges dedup-report --format json JSON output
27
+
28
+ Reads .judges-findings.json from the project directory to show:
29
+ • New findings introduced since last run
30
+ • Recurring findings (persistent across runs)
31
+ • Fixed findings (no longer detected)
32
+ • Trend analysis (improving / stable / degrading)
33
+
34
+ Options:
35
+ --dir <path> Project directory (default: current)
36
+ --stats Show summary statistics only
37
+ --recurring Filter to recurring findings
38
+ --new Filter to newly introduced findings
39
+ --fixed Filter to fixed findings
40
+ --format <fmt> Output format: text, json
41
+ --help, -h Show this help
42
+ `);
43
+ return;
44
+ }
45
+ const dir = resolve(argv.find((_a, i) => argv[i - 1] === "--dir") ||
46
+ argv.find((a, i) => i > 1 && !a.startsWith("-") && argv[i - 1] !== "--format" && argv[i - 1] !== "--dir") ||
47
+ ".");
48
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
49
+ const statsOnly = argv.includes("--stats");
50
+ const showRecurring = argv.includes("--recurring");
51
+ const showNew = argv.includes("--new");
52
+ const showFixed = argv.includes("--fixed");
53
+ const store = loadFindingStore(dir);
54
+ if (store.findings.length === 0) {
55
+ console.log("\n No finding history found. Run 'judges eval' first to build the finding store.\n");
56
+ return;
57
+ }
58
+ const stats = getFindingStats(store);
59
+ if (format === "json") {
60
+ const data = { stats, runNumber: store.runNumber, lastRunAt: store.lastRunAt };
61
+ if (!statsOnly) {
62
+ const openFindings = store.findings.filter((f) => f.status === "open");
63
+ const fixedFindings = store.findings.filter((f) => f.status === "fixed");
64
+ const newFindings = openFindings.filter((f) => f.runCount === 1);
65
+ const recurringFindings = openFindings.filter((f) => f.runCount > 1);
66
+ if (showNew)
67
+ data.findings = newFindings;
68
+ else if (showRecurring)
69
+ data.findings = recurringFindings;
70
+ else if (showFixed)
71
+ data.findings = fixedFindings;
72
+ else
73
+ data.findings = { new: newFindings, recurring: recurringFindings, fixed: fixedFindings };
74
+ }
75
+ console.log(JSON.stringify(data, null, 2));
76
+ return;
77
+ }
78
+ // Text output
79
+ console.log(`\n Finding Deduplication Report — Run #${store.runNumber} (${store.lastRunAt})\n`);
80
+ // Stats
81
+ console.log(` Total tracked: ${stats.totalOpen + stats.totalFixed}`);
82
+ console.log(` Open: ${stats.totalOpen}`);
83
+ console.log(` Fixed: ${stats.totalFixed}`);
84
+ console.log(` Triaged: ${stats.totalTriaged}`);
85
+ console.log(` Avg age (days): ${Math.round(stats.avgAge)}`);
86
+ console.log("");
87
+ // Severity breakdown
88
+ console.log(" By severity:");
89
+ for (const [sev, count] of Object.entries(stats.bySeverity)) {
90
+ if (count > 0) {
91
+ console.log(` ${sev.toUpperCase().padEnd(10)} ${count}`);
92
+ }
93
+ }
94
+ console.log("");
95
+ if (statsOnly)
96
+ return;
97
+ const openFindings = store.findings.filter((f) => f.status === "open");
98
+ const fixedFindings = store.findings.filter((f) => f.status === "fixed");
99
+ const newFindings = openFindings.filter((f) => f.runCount === 1);
100
+ const recurringFindings = openFindings.filter((f) => f.runCount > 1);
101
+ // New findings
102
+ if (!showRecurring && !showFixed && newFindings.length > 0) {
103
+ console.log(` ─── New Findings (${newFindings.length}) ───\n`);
104
+ printFindings(newFindings);
105
+ }
106
+ // Recurring
107
+ if (!showNew && !showFixed && recurringFindings.length > 0) {
108
+ console.log(` ─── Recurring Findings (${recurringFindings.length}) ───\n`);
109
+ printFindings(recurringFindings, true);
110
+ }
111
+ // Fixed
112
+ if (!showNew && !showRecurring && fixedFindings.length > 0) {
113
+ const recentFixed = fixedFindings.filter((f) => {
114
+ if (!f.fixedAt)
115
+ return false;
116
+ const fixedDate = new Date(f.fixedAt);
117
+ const weekAgo = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000);
118
+ return fixedDate >= weekAgo;
119
+ });
120
+ if (recentFixed.length > 0) {
121
+ console.log(` ─── Recently Fixed (${recentFixed.length}) ───\n`);
122
+ printFindings(recentFixed);
123
+ }
124
+ }
125
+ console.log("");
126
+ }
127
+ function printFindings(findings, showRunCount = false) {
128
+ for (const f of findings.slice(0, 20)) {
129
+ const runInfo = showRunCount ? ` (${f.runCount} runs)` : "";
130
+ console.log(` • [${f.severity.toUpperCase()}] ${f.ruleId}: ${f.title}${runInfo}`);
131
+ console.log(` ${f.filePath}`);
132
+ }
133
+ if (findings.length > 20) {
134
+ console.log(` ... and ${findings.length - 20} more`);
135
+ }
136
+ console.log("");
137
+ }
138
+ //# sourceMappingURL=dedup-report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dedup-report.js","sourceRoot":"","sources":["../../src/commands/dedup-report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * `judges dep-audit` — Dependency vulnerability correlation.
3
+ *
4
+ * Correlates code-level findings with known vulnerabilities in project
5
+ * dependencies. Uses npm audit / pip audit output to enrich findings
6
+ * with CVE data, adding urgency context to code review.
7
+ *
8
+ * Usage:
9
+ * judges dep-audit # Audit current directory
10
+ * judges dep-audit --format json # JSON output
11
+ * judges dep-audit --correlate results.json # Correlate with findings
12
+ */
13
+ import type { Finding, Severity } from "../types.js";
14
+ export interface VulnerablePackage {
15
+ /** Package name */
16
+ name: string;
17
+ /** Installed version */
18
+ version: string;
19
+ /** Vulnerability severity */
20
+ severity: Severity;
21
+ /** CVE identifier(s) */
22
+ cves: string[];
23
+ /** CWE identifier(s) */
24
+ cwes: string[];
25
+ /** Advisory title */
26
+ title: string;
27
+ /** URL for more information */
28
+ url?: string;
29
+ /** Fixed version (if known) */
30
+ fixedIn?: string;
31
+ }
32
+ export interface DepAuditResult {
33
+ /** Detected package manager */
34
+ packageManager: "npm" | "pip" | "unknown";
35
+ /** Vulnerable packages found */
36
+ vulnerabilities: VulnerablePackage[];
37
+ /** Total vulnerability count */
38
+ totalVulnerabilities: number;
39
+ /** Counts by severity */
40
+ severityCounts: Record<Severity, number>;
41
+ /** Correlations with code findings */
42
+ correlations: Array<{
43
+ vulnerability: VulnerablePackage;
44
+ relatedFindings: Array<{
45
+ ruleId: string;
46
+ title: string;
47
+ reason: string;
48
+ }>;
49
+ }>;
50
+ }
51
+ export declare function runDepAudit(dir: string, findings?: Finding[]): DepAuditResult;
52
+ export declare function runDepAuditCommand(argv: string[]): void;
53
+ //# sourceMappingURL=dep-audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dep-audit.d.ts","sourceRoot":"","sources":["../../src/commands/dep-audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAIrD,MAAM,WAAW,iBAAiB;IAChC,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,wBAAwB;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,QAAQ,EAAE,QAAQ,CAAC;IACnB,wBAAwB;IACxB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,wBAAwB;IACxB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,+BAA+B;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,+BAA+B;IAC/B,cAAc,EAAE,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC;IAC1C,gCAAgC;IAChC,eAAe,EAAE,iBAAiB,EAAE,CAAC;IACrC,gCAAgC;IAChC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,yBAAyB;IACzB,cAAc,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACzC,sCAAsC;IACtC,YAAY,EAAE,KAAK,CAAC;QAClB,aAAa,EAAE,iBAAiB,CAAC;QACjC,eAAe,EAAE,KAAK,CAAC;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC3E,CAAC,CAAC;CACJ;AA0KD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,cAAc,CA+B7E;AAID,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAgGvD"}