@kevinrabun/judges-cli 3.124.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 (1745) hide show
  1. package/README.md +24 -0
  2. package/agents/accessibility.judge.md +44 -0
  3. package/agents/agent-instructions.judge.md +44 -0
  4. package/agents/ai-code-safety.judge.md +55 -0
  5. package/agents/api-contract.judge.md +37 -0
  6. package/agents/api-design.judge.md +55 -0
  7. package/agents/authentication.judge.md +61 -0
  8. package/agents/backwards-compatibility.judge.md +44 -0
  9. package/agents/caching.judge.md +44 -0
  10. package/agents/ci-cd.judge.md +44 -0
  11. package/agents/cloud-readiness.judge.md +51 -0
  12. package/agents/code-structure.judge.md +48 -0
  13. package/agents/compliance.judge.md +47 -0
  14. package/agents/concurrency.judge.md +46 -0
  15. package/agents/configuration-management.judge.md +44 -0
  16. package/agents/cost-effectiveness.judge.md +40 -0
  17. package/agents/cybersecurity.judge.md +61 -0
  18. package/agents/data-security.judge.md +48 -0
  19. package/agents/data-sovereignty.judge.md +58 -0
  20. package/agents/database.judge.md +49 -0
  21. package/agents/dependency-health.judge.md +46 -0
  22. package/agents/documentation.judge.md +53 -0
  23. package/agents/error-handling.judge.md +53 -0
  24. package/agents/ethics-bias.judge.md +46 -0
  25. package/agents/false-positive-review.judge.md +85 -0
  26. package/agents/framework-safety.judge.md +47 -0
  27. package/agents/hallucination-detection.judge.md +46 -0
  28. package/agents/iac-security.judge.md +45 -0
  29. package/agents/intent-alignment.judge.md +44 -0
  30. package/agents/internationalization.judge.md +42 -0
  31. package/agents/logging-privacy.judge.md +44 -0
  32. package/agents/logic-review.judge.md +34 -0
  33. package/agents/maintainability.judge.md +44 -0
  34. package/agents/model-fingerprint.judge.md +31 -0
  35. package/agents/multi-turn-coherence.judge.md +36 -0
  36. package/agents/observability.judge.md +52 -0
  37. package/agents/over-engineering.judge.md +48 -0
  38. package/agents/performance.judge.md +44 -0
  39. package/agents/portability.judge.md +44 -0
  40. package/agents/rate-limiting.judge.md +53 -0
  41. package/agents/reliability.judge.md +55 -0
  42. package/agents/scalability.judge.md +50 -0
  43. package/agents/security.judge.md +62 -0
  44. package/agents/software-practices.judge.md +54 -0
  45. package/agents/testing.judge.md +52 -0
  46. package/agents/ux.judge.md +44 -0
  47. package/bin/judges.js +8 -0
  48. package/dist/a2a-protocol.d.ts +136 -0
  49. package/dist/a2a-protocol.js +218 -0
  50. package/dist/agent-loader.d.ts +107 -0
  51. package/dist/agent-loader.js +260 -0
  52. package/dist/api.d.ts +169 -0
  53. package/dist/api.js +195 -0
  54. package/dist/ast/cross-file-taint.d.ts +42 -0
  55. package/dist/ast/cross-file-taint.js +679 -0
  56. package/dist/ast/index.d.ts +25 -0
  57. package/dist/ast/index.js +148 -0
  58. package/dist/ast/structural-parser.d.ts +2 -0
  59. package/dist/ast/structural-parser.js +756 -0
  60. package/dist/ast/taint-tracker.d.ts +48 -0
  61. package/dist/ast/taint-tracker.js +1033 -0
  62. package/dist/ast/tree-sitter-ast.d.ts +33 -0
  63. package/dist/ast/tree-sitter-ast.js +1164 -0
  64. package/dist/ast/types.d.ts +50 -0
  65. package/dist/ast/types.js +7 -0
  66. package/dist/audit-trail.d.ts +245 -0
  67. package/dist/audit-trail.js +257 -0
  68. package/dist/auto-tune.d.ts +146 -0
  69. package/dist/auto-tune.js +373 -0
  70. package/dist/cache.d.ts +53 -0
  71. package/dist/cache.js +86 -0
  72. package/dist/calibration.d.ts +108 -0
  73. package/dist/calibration.js +219 -0
  74. package/dist/cli-dispatch.d.ts +7 -0
  75. package/dist/cli-dispatch.js +654 -0
  76. package/dist/cli-formatters.d.ts +6 -0
  77. package/dist/cli-formatters.js +186 -0
  78. package/dist/cli-helpers.d.ts +29 -0
  79. package/dist/cli-helpers.js +129 -0
  80. package/dist/cli.d.ts +30 -0
  81. package/dist/cli.js +1487 -0
  82. package/dist/commands/adoption-report.d.ts +7 -0
  83. package/dist/commands/adoption-report.js +218 -0
  84. package/dist/commands/adoption-track.d.ts +4 -0
  85. package/dist/commands/adoption-track.js +246 -0
  86. package/dist/commands/ai-gate.d.ts +7 -0
  87. package/dist/commands/ai-gate.js +212 -0
  88. package/dist/commands/ai-model-trust.d.ts +16 -0
  89. package/dist/commands/ai-model-trust.js +234 -0
  90. package/dist/commands/ai-output-compare.d.ts +8 -0
  91. package/dist/commands/ai-output-compare.js +202 -0
  92. package/dist/commands/ai-pattern-trend.d.ts +8 -0
  93. package/dist/commands/ai-pattern-trend.js +223 -0
  94. package/dist/commands/ai-prompt-audit.d.ts +22 -0
  95. package/dist/commands/ai-prompt-audit.js +254 -0
  96. package/dist/commands/ai-provenance.d.ts +4 -0
  97. package/dist/commands/ai-provenance.js +247 -0
  98. package/dist/commands/api-audit.d.ts +8 -0
  99. package/dist/commands/api-audit.js +359 -0
  100. package/dist/commands/api-misuse.d.ts +4 -0
  101. package/dist/commands/api-misuse.js +260 -0
  102. package/dist/commands/api-versioning-audit.d.ts +5 -0
  103. package/dist/commands/api-versioning-audit.js +233 -0
  104. package/dist/commands/approve-chain.d.ts +7 -0
  105. package/dist/commands/approve-chain.js +234 -0
  106. package/dist/commands/arch-audit.d.ts +8 -0
  107. package/dist/commands/arch-audit.js +283 -0
  108. package/dist/commands/assertion-density.d.ts +4 -0
  109. package/dist/commands/assertion-density.js +263 -0
  110. package/dist/commands/assign-findings.d.ts +36 -0
  111. package/dist/commands/assign-findings.js +177 -0
  112. package/dist/commands/async-safety.d.ts +4 -0
  113. package/dist/commands/async-safety.js +266 -0
  114. package/dist/commands/audit-bundle.d.ts +28 -0
  115. package/dist/commands/audit-bundle.js +234 -0
  116. package/dist/commands/audit-trail.d.ts +17 -0
  117. package/dist/commands/audit-trail.js +154 -0
  118. package/dist/commands/auto-approve.d.ts +4 -0
  119. package/dist/commands/auto-approve.js +188 -0
  120. package/dist/commands/auto-calibrate.d.ts +14 -0
  121. package/dist/commands/auto-calibrate.js +106 -0
  122. package/dist/commands/auto-detect.d.ts +61 -0
  123. package/dist/commands/auto-detect.js +328 -0
  124. package/dist/commands/auto-fix.d.ts +17 -0
  125. package/dist/commands/auto-fix.js +240 -0
  126. package/dist/commands/auto-triage.d.ts +31 -0
  127. package/dist/commands/auto-triage.js +125 -0
  128. package/dist/commands/baseline.d.ts +47 -0
  129. package/dist/commands/baseline.js +353 -0
  130. package/dist/commands/batch-review.d.ts +4 -0
  131. package/dist/commands/batch-review.js +180 -0
  132. package/dist/commands/benchmark-advanced.d.ts +14 -0
  133. package/dist/commands/benchmark-advanced.js +5057 -0
  134. package/dist/commands/benchmark-ai-agents.d.ts +8 -0
  135. package/dist/commands/benchmark-ai-agents.js +4123 -0
  136. package/dist/commands/benchmark-ai-output.d.ts +9 -0
  137. package/dist/commands/benchmark-ai-output.js +365 -0
  138. package/dist/commands/benchmark-compliance-ethics.d.ts +8 -0
  139. package/dist/commands/benchmark-compliance-ethics.js +3060 -0
  140. package/dist/commands/benchmark-expanded-2.d.ts +12 -0
  141. package/dist/commands/benchmark-expanded-2.js +5530 -0
  142. package/dist/commands/benchmark-expanded.d.ts +12 -0
  143. package/dist/commands/benchmark-expanded.js +2599 -0
  144. package/dist/commands/benchmark-infrastructure.d.ts +8 -0
  145. package/dist/commands/benchmark-infrastructure.js +2882 -0
  146. package/dist/commands/benchmark-languages.d.ts +8 -0
  147. package/dist/commands/benchmark-languages.js +1963 -0
  148. package/dist/commands/benchmark-quality-ops.d.ts +8 -0
  149. package/dist/commands/benchmark-quality-ops.js +3415 -0
  150. package/dist/commands/benchmark-security-deep.d.ts +9 -0
  151. package/dist/commands/benchmark-security-deep.js +2335 -0
  152. package/dist/commands/benchmark.d.ts +233 -0
  153. package/dist/commands/benchmark.js +3214 -0
  154. package/dist/commands/blame-review.d.ts +4 -0
  155. package/dist/commands/blame-review.js +266 -0
  156. package/dist/commands/boundary-enforce.d.ts +5 -0
  157. package/dist/commands/boundary-enforce.js +255 -0
  158. package/dist/commands/build-optimize.d.ts +6 -0
  159. package/dist/commands/build-optimize.js +256 -0
  160. package/dist/commands/burndown.d.ts +26 -0
  161. package/dist/commands/burndown.js +179 -0
  162. package/dist/commands/cache-audit.d.ts +4 -0
  163. package/dist/commands/cache-audit.js +219 -0
  164. package/dist/commands/calibration-dashboard.d.ts +1 -0
  165. package/dist/commands/calibration-dashboard.js +294 -0
  166. package/dist/commands/calibration-share.d.ts +30 -0
  167. package/dist/commands/calibration-share.js +182 -0
  168. package/dist/commands/chat-notify.d.ts +8 -0
  169. package/dist/commands/chat-notify.js +258 -0
  170. package/dist/commands/ci-template.d.ts +14 -0
  171. package/dist/commands/ci-template.js +211 -0
  172. package/dist/commands/ci-templates.d.ts +9 -0
  173. package/dist/commands/ci-templates.js +89 -0
  174. package/dist/commands/clarity-score.d.ts +8 -0
  175. package/dist/commands/clarity-score.js +260 -0
  176. package/dist/commands/clone-detect.d.ts +4 -0
  177. package/dist/commands/clone-detect.js +232 -0
  178. package/dist/commands/coach-mode.d.ts +7 -0
  179. package/dist/commands/coach-mode.js +229 -0
  180. package/dist/commands/code-health.d.ts +4 -0
  181. package/dist/commands/code-health.js +195 -0
  182. package/dist/commands/code-owner-suggest.d.ts +16 -0
  183. package/dist/commands/code-owner-suggest.js +214 -0
  184. package/dist/commands/code-similarity.d.ts +8 -0
  185. package/dist/commands/code-similarity.js +231 -0
  186. package/dist/commands/comment-drift.d.ts +4 -0
  187. package/dist/commands/comment-drift.js +228 -0
  188. package/dist/commands/commit-hygiene.d.ts +5 -0
  189. package/dist/commands/commit-hygiene.js +175 -0
  190. package/dist/commands/community-patterns.d.ts +1 -0
  191. package/dist/commands/community-patterns.js +131 -0
  192. package/dist/commands/compare-runs.d.ts +37 -0
  193. package/dist/commands/compare-runs.js +228 -0
  194. package/dist/commands/completion-audit.d.ts +4 -0
  195. package/dist/commands/completion-audit.js +296 -0
  196. package/dist/commands/completions.d.ts +1 -0
  197. package/dist/commands/completions.js +257 -0
  198. package/dist/commands/compliance-map.d.ts +8 -0
  199. package/dist/commands/compliance-map.js +374 -0
  200. package/dist/commands/compliance-report.d.ts +34 -0
  201. package/dist/commands/compliance-report.js +161 -0
  202. package/dist/commands/compliance-weight.d.ts +8 -0
  203. package/dist/commands/compliance-weight.js +272 -0
  204. package/dist/commands/config-drift.d.ts +24 -0
  205. package/dist/commands/config-drift.js +213 -0
  206. package/dist/commands/config-lint.d.ts +4 -0
  207. package/dist/commands/config-lint.js +187 -0
  208. package/dist/commands/config-migrate.d.ts +43 -0
  209. package/dist/commands/config-migrate.js +240 -0
  210. package/dist/commands/config-share.d.ts +95 -0
  211. package/dist/commands/config-share.js +406 -0
  212. package/dist/commands/context-blind.d.ts +4 -0
  213. package/dist/commands/context-blind.js +272 -0
  214. package/dist/commands/context-inject.d.ts +8 -0
  215. package/dist/commands/context-inject.js +211 -0
  216. package/dist/commands/contract-verify.d.ts +4 -0
  217. package/dist/commands/contract-verify.js +316 -0
  218. package/dist/commands/correlate.d.ts +27 -0
  219. package/dist/commands/correlate.js +241 -0
  220. package/dist/commands/cost-forecast.d.ts +18 -0
  221. package/dist/commands/cost-forecast.js +193 -0
  222. package/dist/commands/coverage-map.d.ts +22 -0
  223. package/dist/commands/coverage-map.js +222 -0
  224. package/dist/commands/coverage.d.ts +40 -0
  225. package/dist/commands/coverage.js +147 -0
  226. package/dist/commands/cross-file-consistency.d.ts +4 -0
  227. package/dist/commands/cross-file-consistency.js +254 -0
  228. package/dist/commands/cross-pr-regression.d.ts +8 -0
  229. package/dist/commands/cross-pr-regression.js +297 -0
  230. package/dist/commands/custom-rule.d.ts +4 -0
  231. package/dist/commands/custom-rule.js +210 -0
  232. package/dist/commands/dead-code-detect.d.ts +4 -0
  233. package/dist/commands/dead-code-detect.js +255 -0
  234. package/dist/commands/dedup-report.d.ts +12 -0
  235. package/dist/commands/dedup-report.js +137 -0
  236. package/dist/commands/dep-audit.d.ts +52 -0
  237. package/dist/commands/dep-audit.js +277 -0
  238. package/dist/commands/dep-correlate.d.ts +8 -0
  239. package/dist/commands/dep-correlate.js +207 -0
  240. package/dist/commands/deploy-readiness.d.ts +5 -0
  241. package/dist/commands/deploy-readiness.js +211 -0
  242. package/dist/commands/deprecated.d.ts +47 -0
  243. package/dist/commands/deprecated.js +201 -0
  244. package/dist/commands/deps.d.ts +5 -0
  245. package/dist/commands/deps.js +122 -0
  246. package/dist/commands/design-audit.d.ts +8 -0
  247. package/dist/commands/design-audit.js +301 -0
  248. package/dist/commands/dev-score.d.ts +36 -0
  249. package/dist/commands/dev-score.js +203 -0
  250. package/dist/commands/diff-explain.d.ts +4 -0
  251. package/dist/commands/diff-explain.js +142 -0
  252. package/dist/commands/diff-only.d.ts +33 -0
  253. package/dist/commands/diff-only.js +151 -0
  254. package/dist/commands/diff-review.d.ts +4 -0
  255. package/dist/commands/diff-review.js +190 -0
  256. package/dist/commands/diff.d.ts +6 -0
  257. package/dist/commands/diff.js +449 -0
  258. package/dist/commands/digest.d.ts +19 -0
  259. package/dist/commands/digest.js +221 -0
  260. package/dist/commands/doc-drift.d.ts +8 -0
  261. package/dist/commands/doc-drift.js +258 -0
  262. package/dist/commands/doc-gen.d.ts +7 -0
  263. package/dist/commands/doc-gen.js +208 -0
  264. package/dist/commands/docs.d.ts +1 -0
  265. package/dist/commands/docs.js +156 -0
  266. package/dist/commands/doctor.d.ts +55 -0
  267. package/dist/commands/doctor.js +362 -0
  268. package/dist/commands/encoding-safety.d.ts +4 -0
  269. package/dist/commands/encoding-safety.js +275 -0
  270. package/dist/commands/error-taxonomy.d.ts +5 -0
  271. package/dist/commands/error-taxonomy.js +226 -0
  272. package/dist/commands/error-ux.d.ts +4 -0
  273. package/dist/commands/error-ux.js +252 -0
  274. package/dist/commands/event-leak.d.ts +4 -0
  275. package/dist/commands/event-leak.js +262 -0
  276. package/dist/commands/evidence-chain.d.ts +4 -0
  277. package/dist/commands/evidence-chain.js +309 -0
  278. package/dist/commands/example-leak.d.ts +4 -0
  279. package/dist/commands/example-leak.js +232 -0
  280. package/dist/commands/exception-consistency.d.ts +6 -0
  281. package/dist/commands/exception-consistency.js +192 -0
  282. package/dist/commands/exec-report.d.ts +8 -0
  283. package/dist/commands/exec-report.js +271 -0
  284. package/dist/commands/explain-finding.d.ts +7 -0
  285. package/dist/commands/explain-finding.js +278 -0
  286. package/dist/commands/false-negatives.d.ts +34 -0
  287. package/dist/commands/false-negatives.js +165 -0
  288. package/dist/commands/feedback-rules.d.ts +28 -0
  289. package/dist/commands/feedback-rules.js +173 -0
  290. package/dist/commands/feedback.d.ts +182 -0
  291. package/dist/commands/feedback.js +550 -0
  292. package/dist/commands/finding-age-analysis.d.ts +4 -0
  293. package/dist/commands/finding-age-analysis.js +144 -0
  294. package/dist/commands/finding-age-report.d.ts +4 -0
  295. package/dist/commands/finding-age-report.js +154 -0
  296. package/dist/commands/finding-age-tracker.d.ts +7 -0
  297. package/dist/commands/finding-age-tracker.js +152 -0
  298. package/dist/commands/finding-age.d.ts +4 -0
  299. package/dist/commands/finding-age.js +145 -0
  300. package/dist/commands/finding-ancestry-trace.d.ts +1 -0
  301. package/dist/commands/finding-ancestry-trace.js +69 -0
  302. package/dist/commands/finding-annotation-export.d.ts +1 -0
  303. package/dist/commands/finding-annotation-export.js +97 -0
  304. package/dist/commands/finding-annotation-layer.d.ts +4 -0
  305. package/dist/commands/finding-annotation-layer.js +128 -0
  306. package/dist/commands/finding-auto-categorize.d.ts +1 -0
  307. package/dist/commands/finding-auto-categorize.js +109 -0
  308. package/dist/commands/finding-auto-fix-suggest.d.ts +1 -0
  309. package/dist/commands/finding-auto-fix-suggest.js +76 -0
  310. package/dist/commands/finding-auto-fix.d.ts +4 -0
  311. package/dist/commands/finding-auto-fix.js +188 -0
  312. package/dist/commands/finding-auto-group.d.ts +4 -0
  313. package/dist/commands/finding-auto-group.js +108 -0
  314. package/dist/commands/finding-auto-label.d.ts +4 -0
  315. package/dist/commands/finding-auto-label.js +220 -0
  316. package/dist/commands/finding-auto-priority.d.ts +1 -0
  317. package/dist/commands/finding-auto-priority.js +100 -0
  318. package/dist/commands/finding-auto-suppress.d.ts +4 -0
  319. package/dist/commands/finding-auto-suppress.js +126 -0
  320. package/dist/commands/finding-auto-tag.d.ts +4 -0
  321. package/dist/commands/finding-auto-tag.js +113 -0
  322. package/dist/commands/finding-auto-triage.d.ts +4 -0
  323. package/dist/commands/finding-auto-triage.js +108 -0
  324. package/dist/commands/finding-autofix-preview.d.ts +4 -0
  325. package/dist/commands/finding-autofix-preview.js +86 -0
  326. package/dist/commands/finding-batch-resolve.d.ts +4 -0
  327. package/dist/commands/finding-batch-resolve.js +165 -0
  328. package/dist/commands/finding-batch-suppress.d.ts +4 -0
  329. package/dist/commands/finding-batch-suppress.js +85 -0
  330. package/dist/commands/finding-batch-triage.d.ts +1 -0
  331. package/dist/commands/finding-batch-triage.js +90 -0
  332. package/dist/commands/finding-blast-radius.d.ts +4 -0
  333. package/dist/commands/finding-blast-radius.js +91 -0
  334. package/dist/commands/finding-budget.d.ts +4 -0
  335. package/dist/commands/finding-budget.js +232 -0
  336. package/dist/commands/finding-category-map.d.ts +4 -0
  337. package/dist/commands/finding-category-map.js +103 -0
  338. package/dist/commands/finding-category-stats.d.ts +4 -0
  339. package/dist/commands/finding-category-stats.js +104 -0
  340. package/dist/commands/finding-category.d.ts +4 -0
  341. package/dist/commands/finding-category.js +109 -0
  342. package/dist/commands/finding-change-impact.d.ts +4 -0
  343. package/dist/commands/finding-change-impact.js +107 -0
  344. package/dist/commands/finding-cluster-analysis.d.ts +4 -0
  345. package/dist/commands/finding-cluster-analysis.js +133 -0
  346. package/dist/commands/finding-cluster-group.d.ts +4 -0
  347. package/dist/commands/finding-cluster-group.js +105 -0
  348. package/dist/commands/finding-cluster-summary.d.ts +1 -0
  349. package/dist/commands/finding-cluster-summary.js +85 -0
  350. package/dist/commands/finding-cluster.d.ts +4 -0
  351. package/dist/commands/finding-cluster.js +157 -0
  352. package/dist/commands/finding-code-context.d.ts +4 -0
  353. package/dist/commands/finding-code-context.js +96 -0
  354. package/dist/commands/finding-code-smell.d.ts +4 -0
  355. package/dist/commands/finding-code-smell.js +113 -0
  356. package/dist/commands/finding-compare-runs.d.ts +4 -0
  357. package/dist/commands/finding-compare-runs.js +105 -0
  358. package/dist/commands/finding-compliance-tag.d.ts +1 -0
  359. package/dist/commands/finding-compliance-tag.js +106 -0
  360. package/dist/commands/finding-confidence-boost.d.ts +1 -0
  361. package/dist/commands/finding-confidence-boost.js +88 -0
  362. package/dist/commands/finding-confidence-calibrate.d.ts +4 -0
  363. package/dist/commands/finding-confidence-calibrate.js +111 -0
  364. package/dist/commands/finding-confidence-filter.d.ts +4 -0
  365. package/dist/commands/finding-confidence-filter.js +77 -0
  366. package/dist/commands/finding-contest.d.ts +7 -0
  367. package/dist/commands/finding-contest.js +192 -0
  368. package/dist/commands/finding-context-enrich.d.ts +4 -0
  369. package/dist/commands/finding-context-enrich.js +89 -0
  370. package/dist/commands/finding-context-expand.d.ts +4 -0
  371. package/dist/commands/finding-context-expand.js +102 -0
  372. package/dist/commands/finding-context-link.d.ts +1 -0
  373. package/dist/commands/finding-context-link.js +94 -0
  374. package/dist/commands/finding-context-summary.d.ts +1 -0
  375. package/dist/commands/finding-context-summary.js +85 -0
  376. package/dist/commands/finding-context-window.d.ts +4 -0
  377. package/dist/commands/finding-context-window.js +126 -0
  378. package/dist/commands/finding-context.d.ts +4 -0
  379. package/dist/commands/finding-context.js +140 -0
  380. package/dist/commands/finding-correlate.d.ts +4 -0
  381. package/dist/commands/finding-correlate.js +88 -0
  382. package/dist/commands/finding-correlation-map.d.ts +4 -0
  383. package/dist/commands/finding-correlation-map.js +101 -0
  384. package/dist/commands/finding-correlation.d.ts +4 -0
  385. package/dist/commands/finding-correlation.js +103 -0
  386. package/dist/commands/finding-cross-file-link.d.ts +1 -0
  387. package/dist/commands/finding-cross-file-link.js +101 -0
  388. package/dist/commands/finding-cross-ref.d.ts +4 -0
  389. package/dist/commands/finding-cross-ref.js +98 -0
  390. package/dist/commands/finding-cve-lookup.d.ts +4 -0
  391. package/dist/commands/finding-cve-lookup.js +97 -0
  392. package/dist/commands/finding-cwe-lookup.d.ts +4 -0
  393. package/dist/commands/finding-cwe-lookup.js +148 -0
  394. package/dist/commands/finding-cwe-map.d.ts +4 -0
  395. package/dist/commands/finding-cwe-map.js +133 -0
  396. package/dist/commands/finding-dedup-cross-file.d.ts +4 -0
  397. package/dist/commands/finding-dedup-cross-file.js +95 -0
  398. package/dist/commands/finding-dedup-cross.d.ts +4 -0
  399. package/dist/commands/finding-dedup-cross.js +90 -0
  400. package/dist/commands/finding-dedup-merge.d.ts +1 -0
  401. package/dist/commands/finding-dedup-merge.js +107 -0
  402. package/dist/commands/finding-dedup-report.d.ts +4 -0
  403. package/dist/commands/finding-dedup-report.js +101 -0
  404. package/dist/commands/finding-dedup-smart.d.ts +1 -0
  405. package/dist/commands/finding-dedup-smart.js +109 -0
  406. package/dist/commands/finding-deduplicate.d.ts +4 -0
  407. package/dist/commands/finding-deduplicate.js +141 -0
  408. package/dist/commands/finding-dependency-check.d.ts +4 -0
  409. package/dist/commands/finding-dependency-check.js +119 -0
  410. package/dist/commands/finding-dependency-impact.d.ts +1 -0
  411. package/dist/commands/finding-dependency-impact.js +97 -0
  412. package/dist/commands/finding-dependency-link.d.ts +4 -0
  413. package/dist/commands/finding-dependency-link.js +73 -0
  414. package/dist/commands/finding-dependency-risk.d.ts +4 -0
  415. package/dist/commands/finding-dependency-risk.js +117 -0
  416. package/dist/commands/finding-dependency-tree.d.ts +4 -0
  417. package/dist/commands/finding-dependency-tree.js +116 -0
  418. package/dist/commands/finding-diff-highlight.d.ts +4 -0
  419. package/dist/commands/finding-diff-highlight.js +107 -0
  420. package/dist/commands/finding-dismiss-workflow.d.ts +4 -0
  421. package/dist/commands/finding-dismiss-workflow.js +119 -0
  422. package/dist/commands/finding-duplicate-detect.d.ts +4 -0
  423. package/dist/commands/finding-duplicate-detect.js +113 -0
  424. package/dist/commands/finding-duplicate-rule.d.ts +4 -0
  425. package/dist/commands/finding-duplicate-rule.js +103 -0
  426. package/dist/commands/finding-effort-rank.d.ts +1 -0
  427. package/dist/commands/finding-effort-rank.js +93 -0
  428. package/dist/commands/finding-evidence-chain.d.ts +4 -0
  429. package/dist/commands/finding-evidence-chain.js +147 -0
  430. package/dist/commands/finding-evidence-collect.d.ts +4 -0
  431. package/dist/commands/finding-evidence-collect.js +114 -0
  432. package/dist/commands/finding-explain.d.ts +4 -0
  433. package/dist/commands/finding-explain.js +93 -0
  434. package/dist/commands/finding-export-csv.d.ts +4 -0
  435. package/dist/commands/finding-export-csv.js +78 -0
  436. package/dist/commands/finding-false-neg-check.d.ts +8 -0
  437. package/dist/commands/finding-false-neg-check.js +139 -0
  438. package/dist/commands/finding-false-positive-learn.d.ts +4 -0
  439. package/dist/commands/finding-false-positive-learn.js +85 -0
  440. package/dist/commands/finding-false-positive-log.d.ts +4 -0
  441. package/dist/commands/finding-false-positive-log.js +150 -0
  442. package/dist/commands/finding-false-positive.d.ts +4 -0
  443. package/dist/commands/finding-false-positive.js +134 -0
  444. package/dist/commands/finding-filter-view.d.ts +4 -0
  445. package/dist/commands/finding-filter-view.js +107 -0
  446. package/dist/commands/finding-fix-chain.d.ts +1 -0
  447. package/dist/commands/finding-fix-chain.js +78 -0
  448. package/dist/commands/finding-fix-estimate.d.ts +1 -0
  449. package/dist/commands/finding-fix-estimate.js +95 -0
  450. package/dist/commands/finding-fix-playbook.d.ts +1 -0
  451. package/dist/commands/finding-fix-playbook.js +110 -0
  452. package/dist/commands/finding-fix-priority.d.ts +4 -0
  453. package/dist/commands/finding-fix-priority.js +98 -0
  454. package/dist/commands/finding-fix-rate.d.ts +4 -0
  455. package/dist/commands/finding-fix-rate.js +141 -0
  456. package/dist/commands/finding-fix-suggest.d.ts +4 -0
  457. package/dist/commands/finding-fix-suggest.js +88 -0
  458. package/dist/commands/finding-fix-validation.d.ts +4 -0
  459. package/dist/commands/finding-fix-validation.js +115 -0
  460. package/dist/commands/finding-fix-verify.d.ts +4 -0
  461. package/dist/commands/finding-fix-verify.js +198 -0
  462. package/dist/commands/finding-group-by.d.ts +4 -0
  463. package/dist/commands/finding-group-by.js +86 -0
  464. package/dist/commands/finding-group.d.ts +15 -0
  465. package/dist/commands/finding-group.js +164 -0
  466. package/dist/commands/finding-groupby-file.d.ts +4 -0
  467. package/dist/commands/finding-groupby-file.js +94 -0
  468. package/dist/commands/finding-hotfix-suggest.d.ts +7 -0
  469. package/dist/commands/finding-hotfix-suggest.js +170 -0
  470. package/dist/commands/finding-hotspot-detect.d.ts +1 -0
  471. package/dist/commands/finding-hotspot-detect.js +120 -0
  472. package/dist/commands/finding-hotspot-map.d.ts +4 -0
  473. package/dist/commands/finding-hotspot-map.js +106 -0
  474. package/dist/commands/finding-hotspot.d.ts +4 -0
  475. package/dist/commands/finding-hotspot.js +115 -0
  476. package/dist/commands/finding-impact-radius.d.ts +1 -0
  477. package/dist/commands/finding-impact-radius.js +94 -0
  478. package/dist/commands/finding-impact-rank.d.ts +4 -0
  479. package/dist/commands/finding-impact-rank.js +85 -0
  480. package/dist/commands/finding-impact-score.d.ts +4 -0
  481. package/dist/commands/finding-impact-score.js +123 -0
  482. package/dist/commands/finding-impact.d.ts +4 -0
  483. package/dist/commands/finding-impact.js +135 -0
  484. package/dist/commands/finding-line-blame.d.ts +7 -0
  485. package/dist/commands/finding-line-blame.js +129 -0
  486. package/dist/commands/finding-link-graph.d.ts +4 -0
  487. package/dist/commands/finding-link-graph.js +144 -0
  488. package/dist/commands/finding-link.d.ts +4 -0
  489. package/dist/commands/finding-link.js +128 -0
  490. package/dist/commands/finding-merge-results.d.ts +4 -0
  491. package/dist/commands/finding-merge-results.js +110 -0
  492. package/dist/commands/finding-merge-strategy.d.ts +1 -0
  493. package/dist/commands/finding-merge-strategy.js +84 -0
  494. package/dist/commands/finding-metadata-enrich.d.ts +4 -0
  495. package/dist/commands/finding-metadata-enrich.js +92 -0
  496. package/dist/commands/finding-noise-filter.d.ts +7 -0
  497. package/dist/commands/finding-noise-filter.js +140 -0
  498. package/dist/commands/finding-noise-reduce.d.ts +1 -0
  499. package/dist/commands/finding-noise-reduce.js +81 -0
  500. package/dist/commands/finding-noise-score.d.ts +1 -0
  501. package/dist/commands/finding-noise-score.js +93 -0
  502. package/dist/commands/finding-owner-assign.d.ts +4 -0
  503. package/dist/commands/finding-owner-assign.js +133 -0
  504. package/dist/commands/finding-owner-notify.d.ts +1 -0
  505. package/dist/commands/finding-owner-notify.js +121 -0
  506. package/dist/commands/finding-ownership-assign.d.ts +4 -0
  507. package/dist/commands/finding-ownership-assign.js +101 -0
  508. package/dist/commands/finding-ownership-map.d.ts +4 -0
  509. package/dist/commands/finding-ownership-map.js +118 -0
  510. package/dist/commands/finding-patch-chain.d.ts +1 -0
  511. package/dist/commands/finding-patch-chain.js +90 -0
  512. package/dist/commands/finding-patch-preview.d.ts +4 -0
  513. package/dist/commands/finding-patch-preview.js +103 -0
  514. package/dist/commands/finding-pattern-detect.d.ts +4 -0
  515. package/dist/commands/finding-pattern-detect.js +127 -0
  516. package/dist/commands/finding-pattern-library.d.ts +4 -0
  517. package/dist/commands/finding-pattern-library.js +145 -0
  518. package/dist/commands/finding-pattern-match.d.ts +4 -0
  519. package/dist/commands/finding-pattern-match.js +165 -0
  520. package/dist/commands/finding-prioritize.d.ts +4 -0
  521. package/dist/commands/finding-prioritize.js +119 -0
  522. package/dist/commands/finding-priority-matrix.d.ts +4 -0
  523. package/dist/commands/finding-priority-matrix.js +102 -0
  524. package/dist/commands/finding-priority-queue.d.ts +4 -0
  525. package/dist/commands/finding-priority-queue.js +131 -0
  526. package/dist/commands/finding-priority-rank.d.ts +1 -0
  527. package/dist/commands/finding-priority-rank.js +82 -0
  528. package/dist/commands/finding-quality-gate.d.ts +4 -0
  529. package/dist/commands/finding-quality-gate.js +107 -0
  530. package/dist/commands/finding-rank.d.ts +4 -0
  531. package/dist/commands/finding-rank.js +138 -0
  532. package/dist/commands/finding-reachability-check.d.ts +4 -0
  533. package/dist/commands/finding-reachability-check.js +102 -0
  534. package/dist/commands/finding-reachability.d.ts +4 -0
  535. package/dist/commands/finding-reachability.js +131 -0
  536. package/dist/commands/finding-recurrence-check.d.ts +1 -0
  537. package/dist/commands/finding-recurrence-check.js +103 -0
  538. package/dist/commands/finding-recurrence-detect.d.ts +4 -0
  539. package/dist/commands/finding-recurrence-detect.js +77 -0
  540. package/dist/commands/finding-recurrence.d.ts +4 -0
  541. package/dist/commands/finding-recurrence.js +135 -0
  542. package/dist/commands/finding-regression-check.d.ts +4 -0
  543. package/dist/commands/finding-regression-check.js +112 -0
  544. package/dist/commands/finding-regression-detect.d.ts +1 -0
  545. package/dist/commands/finding-regression-detect.js +86 -0
  546. package/dist/commands/finding-related-rules.d.ts +4 -0
  547. package/dist/commands/finding-related-rules.js +151 -0
  548. package/dist/commands/finding-remediation-cost.d.ts +1 -0
  549. package/dist/commands/finding-remediation-cost.js +79 -0
  550. package/dist/commands/finding-remediation-plan.d.ts +4 -0
  551. package/dist/commands/finding-remediation-plan.js +107 -0
  552. package/dist/commands/finding-reopen-detect.d.ts +1 -0
  553. package/dist/commands/finding-reopen-detect.js +77 -0
  554. package/dist/commands/finding-repeat-detect.d.ts +1 -0
  555. package/dist/commands/finding-repeat-detect.js +92 -0
  556. package/dist/commands/finding-resolution-track.d.ts +4 -0
  557. package/dist/commands/finding-resolution-track.js +150 -0
  558. package/dist/commands/finding-resolution-tracker.d.ts +4 -0
  559. package/dist/commands/finding-resolution-tracker.js +163 -0
  560. package/dist/commands/finding-resolution-workflow.d.ts +1 -0
  561. package/dist/commands/finding-resolution-workflow.js +91 -0
  562. package/dist/commands/finding-resolution.d.ts +4 -0
  563. package/dist/commands/finding-resolution.js +142 -0
  564. package/dist/commands/finding-risk-label.d.ts +1 -0
  565. package/dist/commands/finding-risk-label.js +72 -0
  566. package/dist/commands/finding-risk-matrix.d.ts +4 -0
  567. package/dist/commands/finding-risk-matrix.js +126 -0
  568. package/dist/commands/finding-risk-score.d.ts +4 -0
  569. package/dist/commands/finding-risk-score.js +95 -0
  570. package/dist/commands/finding-root-cause.d.ts +4 -0
  571. package/dist/commands/finding-root-cause.js +184 -0
  572. package/dist/commands/finding-rule-explain.d.ts +4 -0
  573. package/dist/commands/finding-rule-explain.js +140 -0
  574. package/dist/commands/finding-scope-filter.d.ts +1 -0
  575. package/dist/commands/finding-scope-filter.js +77 -0
  576. package/dist/commands/finding-scope-impact.d.ts +1 -0
  577. package/dist/commands/finding-scope-impact.js +83 -0
  578. package/dist/commands/finding-search-index.d.ts +4 -0
  579. package/dist/commands/finding-search-index.js +99 -0
  580. package/dist/commands/finding-security-hotspot.d.ts +4 -0
  581. package/dist/commands/finding-security-hotspot.js +175 -0
  582. package/dist/commands/finding-severity-dist.d.ts +4 -0
  583. package/dist/commands/finding-severity-dist.js +105 -0
  584. package/dist/commands/finding-severity-drift.d.ts +4 -0
  585. package/dist/commands/finding-severity-drift.js +92 -0
  586. package/dist/commands/finding-severity-heatmap.d.ts +4 -0
  587. package/dist/commands/finding-severity-heatmap.js +108 -0
  588. package/dist/commands/finding-severity-histogram.d.ts +4 -0
  589. package/dist/commands/finding-severity-histogram.js +66 -0
  590. package/dist/commands/finding-severity-override.d.ts +4 -0
  591. package/dist/commands/finding-severity-override.js +131 -0
  592. package/dist/commands/finding-severity-rebalance.d.ts +1 -0
  593. package/dist/commands/finding-severity-rebalance.js +108 -0
  594. package/dist/commands/finding-severity-trend.d.ts +4 -0
  595. package/dist/commands/finding-severity-trend.js +127 -0
  596. package/dist/commands/finding-similar-match.d.ts +1 -0
  597. package/dist/commands/finding-similar-match.js +112 -0
  598. package/dist/commands/finding-snippet.d.ts +4 -0
  599. package/dist/commands/finding-snippet.js +102 -0
  600. package/dist/commands/finding-summary-digest.d.ts +7 -0
  601. package/dist/commands/finding-summary-digest.js +145 -0
  602. package/dist/commands/finding-suppress-pattern.d.ts +4 -0
  603. package/dist/commands/finding-suppress-pattern.js +148 -0
  604. package/dist/commands/finding-suppress.d.ts +4 -0
  605. package/dist/commands/finding-suppress.js +164 -0
  606. package/dist/commands/finding-suppression-audit.d.ts +4 -0
  607. package/dist/commands/finding-suppression-audit.js +137 -0
  608. package/dist/commands/finding-suppression-list.d.ts +4 -0
  609. package/dist/commands/finding-suppression-list.js +119 -0
  610. package/dist/commands/finding-suppression-log.d.ts +4 -0
  611. package/dist/commands/finding-suppression-log.js +174 -0
  612. package/dist/commands/finding-time-to-fix.d.ts +1 -0
  613. package/dist/commands/finding-time-to-fix.js +98 -0
  614. package/dist/commands/finding-timeline-view.d.ts +4 -0
  615. package/dist/commands/finding-timeline-view.js +98 -0
  616. package/dist/commands/finding-timeline.d.ts +4 -0
  617. package/dist/commands/finding-timeline.js +143 -0
  618. package/dist/commands/finding-top-offender.d.ts +1 -0
  619. package/dist/commands/finding-top-offender.js +75 -0
  620. package/dist/commands/finding-trace.d.ts +4 -0
  621. package/dist/commands/finding-trace.js +118 -0
  622. package/dist/commands/finding-trend-alert.d.ts +1 -0
  623. package/dist/commands/finding-trend-alert.js +126 -0
  624. package/dist/commands/finding-trend-analysis.d.ts +4 -0
  625. package/dist/commands/finding-trend-analysis.js +95 -0
  626. package/dist/commands/finding-trend-forecast.d.ts +4 -0
  627. package/dist/commands/finding-trend-forecast.js +106 -0
  628. package/dist/commands/finding-trend-report.d.ts +4 -0
  629. package/dist/commands/finding-trend-report.js +107 -0
  630. package/dist/commands/finding-trend.d.ts +4 -0
  631. package/dist/commands/finding-trend.js +118 -0
  632. package/dist/commands/fix-pr.d.ts +22 -0
  633. package/dist/commands/fix-pr.js +286 -0
  634. package/dist/commands/fix-suggest.d.ts +4 -0
  635. package/dist/commands/fix-suggest.js +171 -0
  636. package/dist/commands/fix-verify.d.ts +4 -0
  637. package/dist/commands/fix-verify.js +123 -0
  638. package/dist/commands/fix.d.ts +117 -0
  639. package/dist/commands/fix.js +445 -0
  640. package/dist/commands/focus-area.d.ts +5 -0
  641. package/dist/commands/focus-area.js +192 -0
  642. package/dist/commands/generate.d.ts +7 -0
  643. package/dist/commands/generate.js +403 -0
  644. package/dist/commands/governance.d.ts +31 -0
  645. package/dist/commands/governance.js +202 -0
  646. package/dist/commands/group-findings.d.ts +22 -0
  647. package/dist/commands/group-findings.js +154 -0
  648. package/dist/commands/guided-tour.d.ts +8 -0
  649. package/dist/commands/guided-tour.js +287 -0
  650. package/dist/commands/habit-tracker.d.ts +7 -0
  651. package/dist/commands/habit-tracker.js +194 -0
  652. package/dist/commands/hallucination-detect.d.ts +4 -0
  653. package/dist/commands/hallucination-detect.js +350 -0
  654. package/dist/commands/hallucination-score.d.ts +8 -0
  655. package/dist/commands/hallucination-score.js +316 -0
  656. package/dist/commands/help.d.ts +7 -0
  657. package/dist/commands/help.js +302 -0
  658. package/dist/commands/hook-install.d.ts +21 -0
  659. package/dist/commands/hook-install.js +142 -0
  660. package/dist/commands/hook.d.ts +8 -0
  661. package/dist/commands/hook.js +145 -0
  662. package/dist/commands/iac-lint.d.ts +7 -0
  663. package/dist/commands/iac-lint.js +312 -0
  664. package/dist/commands/idempotency-audit.d.ts +4 -0
  665. package/dist/commands/idempotency-audit.js +222 -0
  666. package/dist/commands/ignore-list.d.ts +18 -0
  667. package/dist/commands/ignore-list.js +152 -0
  668. package/dist/commands/impact-scan.d.ts +8 -0
  669. package/dist/commands/impact-scan.js +281 -0
  670. package/dist/commands/incident-response.d.ts +7 -0
  671. package/dist/commands/incident-response.js +254 -0
  672. package/dist/commands/incremental-review.d.ts +4 -0
  673. package/dist/commands/incremental-review.js +236 -0
  674. package/dist/commands/init.d.ts +10 -0
  675. package/dist/commands/init.js +265 -0
  676. package/dist/commands/input-guard.d.ts +4 -0
  677. package/dist/commands/input-guard.js +255 -0
  678. package/dist/commands/interactive-fix.d.ts +22 -0
  679. package/dist/commands/interactive-fix.js +139 -0
  680. package/dist/commands/judge-author.d.ts +7 -0
  681. package/dist/commands/judge-author.js +260 -0
  682. package/dist/commands/judge-config.d.ts +4 -0
  683. package/dist/commands/judge-config.js +151 -0
  684. package/dist/commands/judge-learn.d.ts +8 -0
  685. package/dist/commands/judge-learn.js +217 -0
  686. package/dist/commands/judge-reputation.d.ts +28 -0
  687. package/dist/commands/judge-reputation.js +198 -0
  688. package/dist/commands/kb.d.ts +40 -0
  689. package/dist/commands/kb.js +228 -0
  690. package/dist/commands/language-packs.d.ts +42 -0
  691. package/dist/commands/language-packs.js +150 -0
  692. package/dist/commands/learn.d.ts +26 -0
  693. package/dist/commands/learn.js +288 -0
  694. package/dist/commands/learning-path.d.ts +8 -0
  695. package/dist/commands/learning-path.js +325 -0
  696. package/dist/commands/license-scan.d.ts +8 -0
  697. package/dist/commands/license-scan.js +183 -0
  698. package/dist/commands/llm-benchmark-optimizer.d.ts +78 -0
  699. package/dist/commands/llm-benchmark-optimizer.js +241 -0
  700. package/dist/commands/llm-benchmark.d.ts +156 -0
  701. package/dist/commands/llm-benchmark.js +670 -0
  702. package/dist/commands/log-quality.d.ts +5 -0
  703. package/dist/commands/log-quality.js +211 -0
  704. package/dist/commands/logic-lint.d.ts +4 -0
  705. package/dist/commands/logic-lint.js +255 -0
  706. package/dist/commands/lsp.d.ts +23 -0
  707. package/dist/commands/lsp.js +285 -0
  708. package/dist/commands/merge-verdict.d.ts +4 -0
  709. package/dist/commands/merge-verdict.js +287 -0
  710. package/dist/commands/metrics-dashboard.d.ts +21 -0
  711. package/dist/commands/metrics-dashboard.js +334 -0
  712. package/dist/commands/metrics.d.ts +57 -0
  713. package/dist/commands/metrics.js +241 -0
  714. package/dist/commands/migration-safety.d.ts +5 -0
  715. package/dist/commands/migration-safety.js +256 -0
  716. package/dist/commands/model-report.d.ts +8 -0
  717. package/dist/commands/model-report.js +194 -0
  718. package/dist/commands/model-risk.d.ts +27 -0
  719. package/dist/commands/model-risk.js +220 -0
  720. package/dist/commands/monorepo.d.ts +37 -0
  721. package/dist/commands/monorepo.js +232 -0
  722. package/dist/commands/multi-lang-review.d.ts +4 -0
  723. package/dist/commands/multi-lang-review.js +230 -0
  724. package/dist/commands/noise-advisor.d.ts +29 -0
  725. package/dist/commands/noise-advisor.js +170 -0
  726. package/dist/commands/notify.d.ts +78 -0
  727. package/dist/commands/notify.js +324 -0
  728. package/dist/commands/null-safety-audit.d.ts +5 -0
  729. package/dist/commands/null-safety-audit.js +221 -0
  730. package/dist/commands/observability-gap.d.ts +5 -0
  731. package/dist/commands/observability-gap.js +211 -0
  732. package/dist/commands/onboard.d.ts +12 -0
  733. package/dist/commands/onboard.js +178 -0
  734. package/dist/commands/org-metrics.d.ts +23 -0
  735. package/dist/commands/org-metrics.js +237 -0
  736. package/dist/commands/org-policy.d.ts +7 -0
  737. package/dist/commands/org-policy.js +207 -0
  738. package/dist/commands/over-abstraction.d.ts +4 -0
  739. package/dist/commands/over-abstraction.js +307 -0
  740. package/dist/commands/override.d.ts +61 -0
  741. package/dist/commands/override.js +268 -0
  742. package/dist/commands/ownership-map.d.ts +5 -0
  743. package/dist/commands/ownership-map.js +217 -0
  744. package/dist/commands/parity.d.ts +30 -0
  745. package/dist/commands/parity.js +212 -0
  746. package/dist/commands/pattern-registry.d.ts +22 -0
  747. package/dist/commands/pattern-registry.js +226 -0
  748. package/dist/commands/perf-compare.d.ts +8 -0
  749. package/dist/commands/perf-compare.js +245 -0
  750. package/dist/commands/perf-hotspot.d.ts +7 -0
  751. package/dist/commands/perf-hotspot.js +273 -0
  752. package/dist/commands/phantom-import.d.ts +4 -0
  753. package/dist/commands/phantom-import.js +260 -0
  754. package/dist/commands/pii-scan.d.ts +7 -0
  755. package/dist/commands/pii-scan.js +299 -0
  756. package/dist/commands/plugin-search.d.ts +39 -0
  757. package/dist/commands/plugin-search.js +327 -0
  758. package/dist/commands/plugins.d.ts +12 -0
  759. package/dist/commands/plugins.js +104 -0
  760. package/dist/commands/policy-audit.d.ts +52 -0
  761. package/dist/commands/policy-audit.js +160 -0
  762. package/dist/commands/pr-quality-gate.d.ts +28 -0
  763. package/dist/commands/pr-quality-gate.js +207 -0
  764. package/dist/commands/pr-summary.d.ts +25 -0
  765. package/dist/commands/pr-summary.js +187 -0
  766. package/dist/commands/predict.d.ts +7 -0
  767. package/dist/commands/predict.js +218 -0
  768. package/dist/commands/privilege-path.d.ts +4 -0
  769. package/dist/commands/privilege-path.js +233 -0
  770. package/dist/commands/profile.d.ts +37 -0
  771. package/dist/commands/profile.js +101 -0
  772. package/dist/commands/prompt-replay.d.ts +7 -0
  773. package/dist/commands/prompt-replay.js +176 -0
  774. package/dist/commands/quality-gate.d.ts +69 -0
  775. package/dist/commands/quality-gate.js +252 -0
  776. package/dist/commands/query.d.ts +19 -0
  777. package/dist/commands/query.js +229 -0
  778. package/dist/commands/quick-check.d.ts +4 -0
  779. package/dist/commands/quick-check.js +173 -0
  780. package/dist/commands/recommend.d.ts +20 -0
  781. package/dist/commands/recommend.js +282 -0
  782. package/dist/commands/refactor-safety.d.ts +8 -0
  783. package/dist/commands/refactor-safety.js +273 -0
  784. package/dist/commands/reg-watch.d.ts +20 -0
  785. package/dist/commands/reg-watch.js +219 -0
  786. package/dist/commands/regression-alert.d.ts +31 -0
  787. package/dist/commands/regression-alert.js +215 -0
  788. package/dist/commands/remediation-lib.d.ts +8 -0
  789. package/dist/commands/remediation-lib.js +265 -0
  790. package/dist/commands/remediation.d.ts +20 -0
  791. package/dist/commands/remediation.js +256 -0
  792. package/dist/commands/report-template.d.ts +16 -0
  793. package/dist/commands/report-template.js +290 -0
  794. package/dist/commands/report.d.ts +12 -0
  795. package/dist/commands/report.js +139 -0
  796. package/dist/commands/resource-cleanup.d.ts +6 -0
  797. package/dist/commands/resource-cleanup.js +235 -0
  798. package/dist/commands/retro.d.ts +22 -0
  799. package/dist/commands/retro.js +211 -0
  800. package/dist/commands/retry-pattern-audit.d.ts +5 -0
  801. package/dist/commands/retry-pattern-audit.js +215 -0
  802. package/dist/commands/review-ab-test.d.ts +4 -0
  803. package/dist/commands/review-ab-test.js +224 -0
  804. package/dist/commands/review-access-log.d.ts +4 -0
  805. package/dist/commands/review-access-log.js +65 -0
  806. package/dist/commands/review-action-item-gen.d.ts +1 -0
  807. package/dist/commands/review-action-item-gen.js +72 -0
  808. package/dist/commands/review-adoption-metrics.d.ts +4 -0
  809. package/dist/commands/review-adoption-metrics.js +95 -0
  810. package/dist/commands/review-adoption-score.d.ts +1 -0
  811. package/dist/commands/review-adoption-score.js +181 -0
  812. package/dist/commands/review-ai-feedback-loop.d.ts +1 -0
  813. package/dist/commands/review-ai-feedback-loop.js +116 -0
  814. package/dist/commands/review-annotate.d.ts +4 -0
  815. package/dist/commands/review-annotate.js +122 -0
  816. package/dist/commands/review-annotation-export.d.ts +4 -0
  817. package/dist/commands/review-annotation-export.js +105 -0
  818. package/dist/commands/review-annotation.d.ts +4 -0
  819. package/dist/commands/review-annotation.js +133 -0
  820. package/dist/commands/review-api-export.d.ts +4 -0
  821. package/dist/commands/review-api-export.js +98 -0
  822. package/dist/commands/review-approval-criteria.d.ts +1 -0
  823. package/dist/commands/review-approval-criteria.js +99 -0
  824. package/dist/commands/review-approval-gate.d.ts +7 -0
  825. package/dist/commands/review-approval-gate.js +190 -0
  826. package/dist/commands/review-approval.d.ts +4 -0
  827. package/dist/commands/review-approval.js +133 -0
  828. package/dist/commands/review-archive-search.d.ts +4 -0
  829. package/dist/commands/review-archive-search.js +70 -0
  830. package/dist/commands/review-archive.d.ts +4 -0
  831. package/dist/commands/review-archive.js +135 -0
  832. package/dist/commands/review-audit-export.d.ts +4 -0
  833. package/dist/commands/review-audit-export.js +93 -0
  834. package/dist/commands/review-audit-log.d.ts +4 -0
  835. package/dist/commands/review-audit-log.js +140 -0
  836. package/dist/commands/review-audit-trail.d.ts +4 -0
  837. package/dist/commands/review-audit-trail.js +96 -0
  838. package/dist/commands/review-auto-merge.d.ts +4 -0
  839. package/dist/commands/review-auto-merge.js +175 -0
  840. package/dist/commands/review-badge.d.ts +4 -0
  841. package/dist/commands/review-badge.js +152 -0
  842. package/dist/commands/review-batch-files.d.ts +4 -0
  843. package/dist/commands/review-batch-files.js +82 -0
  844. package/dist/commands/review-batch-mode.d.ts +4 -0
  845. package/dist/commands/review-batch-mode.js +97 -0
  846. package/dist/commands/review-batch-run.d.ts +4 -0
  847. package/dist/commands/review-batch-run.js +149 -0
  848. package/dist/commands/review-benchmark-self.d.ts +4 -0
  849. package/dist/commands/review-benchmark-self.js +140 -0
  850. package/dist/commands/review-blame-map.d.ts +4 -0
  851. package/dist/commands/review-blame-map.js +100 -0
  852. package/dist/commands/review-branch-compare.d.ts +4 -0
  853. package/dist/commands/review-branch-compare.js +108 -0
  854. package/dist/commands/review-branch-policy.d.ts +4 -0
  855. package/dist/commands/review-branch-policy.js +102 -0
  856. package/dist/commands/review-bulk-action.d.ts +4 -0
  857. package/dist/commands/review-bulk-action.js +109 -0
  858. package/dist/commands/review-bulk-apply.d.ts +4 -0
  859. package/dist/commands/review-bulk-apply.js +102 -0
  860. package/dist/commands/review-cache-clear.d.ts +4 -0
  861. package/dist/commands/review-cache-clear.js +160 -0
  862. package/dist/commands/review-cache-warm.d.ts +4 -0
  863. package/dist/commands/review-cache-warm.js +70 -0
  864. package/dist/commands/review-cache.d.ts +22 -0
  865. package/dist/commands/review-cache.js +134 -0
  866. package/dist/commands/review-changelog-entry.d.ts +7 -0
  867. package/dist/commands/review-changelog-entry.js +109 -0
  868. package/dist/commands/review-changelog-gen.d.ts +4 -0
  869. package/dist/commands/review-changelog-gen.js +117 -0
  870. package/dist/commands/review-changelog-impact.d.ts +1 -0
  871. package/dist/commands/review-changelog-impact.js +89 -0
  872. package/dist/commands/review-checklist.d.ts +4 -0
  873. package/dist/commands/review-checklist.js +144 -0
  874. package/dist/commands/review-checkpoint.d.ts +4 -0
  875. package/dist/commands/review-checkpoint.js +163 -0
  876. package/dist/commands/review-ci-gate.d.ts +4 -0
  877. package/dist/commands/review-ci-gate.js +114 -0
  878. package/dist/commands/review-ci-insight.d.ts +1 -0
  879. package/dist/commands/review-ci-insight.js +100 -0
  880. package/dist/commands/review-ci-integration.d.ts +4 -0
  881. package/dist/commands/review-ci-integration.js +125 -0
  882. package/dist/commands/review-ci-status.d.ts +4 -0
  883. package/dist/commands/review-ci-status.js +200 -0
  884. package/dist/commands/review-cicd-integrate.d.ts +4 -0
  885. package/dist/commands/review-cicd-integrate.js +122 -0
  886. package/dist/commands/review-code-health-score.d.ts +1 -0
  887. package/dist/commands/review-code-health-score.js +100 -0
  888. package/dist/commands/review-code-owner.d.ts +7 -0
  889. package/dist/commands/review-code-owner.js +164 -0
  890. package/dist/commands/review-code-ownership.d.ts +1 -0
  891. package/dist/commands/review-code-ownership.js +88 -0
  892. package/dist/commands/review-comment.d.ts +4 -0
  893. package/dist/commands/review-comment.js +165 -0
  894. package/dist/commands/review-commit-hook.d.ts +7 -0
  895. package/dist/commands/review-commit-hook.js +134 -0
  896. package/dist/commands/review-commit-quality.d.ts +1 -0
  897. package/dist/commands/review-commit-quality.js +94 -0
  898. package/dist/commands/review-comparative.d.ts +4 -0
  899. package/dist/commands/review-comparative.js +149 -0
  900. package/dist/commands/review-compare-version.d.ts +4 -0
  901. package/dist/commands/review-compare-version.js +108 -0
  902. package/dist/commands/review-compare.d.ts +4 -0
  903. package/dist/commands/review-compare.js +200 -0
  904. package/dist/commands/review-compliance-check.d.ts +4 -0
  905. package/dist/commands/review-compliance-check.js +202 -0
  906. package/dist/commands/review-compliance-gate.d.ts +4 -0
  907. package/dist/commands/review-compliance-gate.js +151 -0
  908. package/dist/commands/review-compliance-map.d.ts +4 -0
  909. package/dist/commands/review-compliance-map.js +110 -0
  910. package/dist/commands/review-compliance-report.d.ts +4 -0
  911. package/dist/commands/review-compliance-report.js +127 -0
  912. package/dist/commands/review-confidence-explain.d.ts +1 -0
  913. package/dist/commands/review-confidence-explain.js +99 -0
  914. package/dist/commands/review-config-diff.d.ts +4 -0
  915. package/dist/commands/review-config-diff.js +108 -0
  916. package/dist/commands/review-config-export.d.ts +4 -0
  917. package/dist/commands/review-config-export.js +124 -0
  918. package/dist/commands/review-config-health.d.ts +1 -0
  919. package/dist/commands/review-config-health.js +172 -0
  920. package/dist/commands/review-config-migrate.d.ts +4 -0
  921. package/dist/commands/review-config-migrate.js +123 -0
  922. package/dist/commands/review-config-template.d.ts +4 -0
  923. package/dist/commands/review-config-template.js +112 -0
  924. package/dist/commands/review-config-validate.d.ts +4 -0
  925. package/dist/commands/review-config-validate.js +110 -0
  926. package/dist/commands/review-contract.d.ts +4 -0
  927. package/dist/commands/review-contract.js +199 -0
  928. package/dist/commands/review-coverage-gap.d.ts +4 -0
  929. package/dist/commands/review-coverage-gap.js +120 -0
  930. package/dist/commands/review-coverage-map.d.ts +4 -0
  931. package/dist/commands/review-coverage-map.js +194 -0
  932. package/dist/commands/review-custom-judge-config.d.ts +4 -0
  933. package/dist/commands/review-custom-judge-config.js +103 -0
  934. package/dist/commands/review-custom-judge.d.ts +4 -0
  935. package/dist/commands/review-custom-judge.js +182 -0
  936. package/dist/commands/review-custom-prompt.d.ts +4 -0
  937. package/dist/commands/review-custom-prompt.js +170 -0
  938. package/dist/commands/review-custom-rule.d.ts +4 -0
  939. package/dist/commands/review-custom-rule.js +169 -0
  940. package/dist/commands/review-dashboard-data.d.ts +4 -0
  941. package/dist/commands/review-dashboard-data.js +142 -0
  942. package/dist/commands/review-dashboard.d.ts +4 -0
  943. package/dist/commands/review-dashboard.js +140 -0
  944. package/dist/commands/review-data-retention.d.ts +4 -0
  945. package/dist/commands/review-data-retention.js +119 -0
  946. package/dist/commands/review-dependency-graph.d.ts +4 -0
  947. package/dist/commands/review-dependency-graph.js +94 -0
  948. package/dist/commands/review-dependency-review.d.ts +1 -0
  949. package/dist/commands/review-dependency-review.js +104 -0
  950. package/dist/commands/review-deployment-gate.d.ts +4 -0
  951. package/dist/commands/review-deployment-gate.js +94 -0
  952. package/dist/commands/review-depth.d.ts +4 -0
  953. package/dist/commands/review-depth.js +142 -0
  954. package/dist/commands/review-diff-annotate.d.ts +4 -0
  955. package/dist/commands/review-diff-annotate.js +104 -0
  956. package/dist/commands/review-diff-context.d.ts +4 -0
  957. package/dist/commands/review-diff-context.js +158 -0
  958. package/dist/commands/review-diff-highlight.d.ts +4 -0
  959. package/dist/commands/review-diff-highlight.js +179 -0
  960. package/dist/commands/review-diff-stats.d.ts +4 -0
  961. package/dist/commands/review-diff-stats.js +90 -0
  962. package/dist/commands/review-diff-summary.d.ts +4 -0
  963. package/dist/commands/review-diff-summary.js +154 -0
  964. package/dist/commands/review-digest-gen.d.ts +1 -0
  965. package/dist/commands/review-digest-gen.js +100 -0
  966. package/dist/commands/review-digest.d.ts +4 -0
  967. package/dist/commands/review-digest.js +265 -0
  968. package/dist/commands/review-dry-run.d.ts +4 -0
  969. package/dist/commands/review-dry-run.js +120 -0
  970. package/dist/commands/review-engagement-score.d.ts +1 -0
  971. package/dist/commands/review-engagement-score.js +111 -0
  972. package/dist/commands/review-env-check.d.ts +4 -0
  973. package/dist/commands/review-env-check.js +115 -0
  974. package/dist/commands/review-environment-config.d.ts +4 -0
  975. package/dist/commands/review-environment-config.js +102 -0
  976. package/dist/commands/review-escalation-path.d.ts +1 -0
  977. package/dist/commands/review-escalation-path.js +86 -0
  978. package/dist/commands/review-exclude-vendor.d.ts +4 -0
  979. package/dist/commands/review-exclude-vendor.js +158 -0
  980. package/dist/commands/review-explain.d.ts +5 -0
  981. package/dist/commands/review-explain.js +194 -0
  982. package/dist/commands/review-export-pdf.d.ts +7 -0
  983. package/dist/commands/review-export-pdf.js +131 -0
  984. package/dist/commands/review-export.d.ts +4 -0
  985. package/dist/commands/review-export.js +179 -0
  986. package/dist/commands/review-feedback-loop.d.ts +4 -0
  987. package/dist/commands/review-feedback-loop.js +113 -0
  988. package/dist/commands/review-feedback-summary.d.ts +1 -0
  989. package/dist/commands/review-feedback-summary.js +130 -0
  990. package/dist/commands/review-feedback.d.ts +4 -0
  991. package/dist/commands/review-feedback.js +145 -0
  992. package/dist/commands/review-file-complexity.d.ts +4 -0
  993. package/dist/commands/review-file-complexity.js +137 -0
  994. package/dist/commands/review-file-filter.d.ts +4 -0
  995. package/dist/commands/review-file-filter.js +121 -0
  996. package/dist/commands/review-file-stats.d.ts +4 -0
  997. package/dist/commands/review-file-stats.js +130 -0
  998. package/dist/commands/review-filter.d.ts +4 -0
  999. package/dist/commands/review-filter.js +161 -0
  1000. package/dist/commands/review-finding-link.d.ts +7 -0
  1001. package/dist/commands/review-finding-link.js +115 -0
  1002. package/dist/commands/review-focus-area.d.ts +1 -0
  1003. package/dist/commands/review-focus-area.js +96 -0
  1004. package/dist/commands/review-focus.d.ts +4 -0
  1005. package/dist/commands/review-focus.js +196 -0
  1006. package/dist/commands/review-gate-config.d.ts +4 -0
  1007. package/dist/commands/review-gate-config.js +153 -0
  1008. package/dist/commands/review-gate.d.ts +4 -0
  1009. package/dist/commands/review-gate.js +212 -0
  1010. package/dist/commands/review-goal-track.d.ts +1 -0
  1011. package/dist/commands/review-goal-track.js +123 -0
  1012. package/dist/commands/review-guardrail.d.ts +4 -0
  1013. package/dist/commands/review-guardrail.js +155 -0
  1014. package/dist/commands/review-handoff.d.ts +4 -0
  1015. package/dist/commands/review-handoff.js +208 -0
  1016. package/dist/commands/review-health-check.d.ts +4 -0
  1017. package/dist/commands/review-health-check.js +148 -0
  1018. package/dist/commands/review-health-trend.d.ts +1 -0
  1019. package/dist/commands/review-health-trend.js +107 -0
  1020. package/dist/commands/review-history-compare.d.ts +4 -0
  1021. package/dist/commands/review-history-compare.js +93 -0
  1022. package/dist/commands/review-history-search.d.ts +4 -0
  1023. package/dist/commands/review-history-search.js +214 -0
  1024. package/dist/commands/review-ide-sync.d.ts +4 -0
  1025. package/dist/commands/review-ide-sync.js +91 -0
  1026. package/dist/commands/review-ignore-path.d.ts +4 -0
  1027. package/dist/commands/review-ignore-path.js +147 -0
  1028. package/dist/commands/review-ignore-pattern.d.ts +5 -0
  1029. package/dist/commands/review-ignore-pattern.js +138 -0
  1030. package/dist/commands/review-incident-link.d.ts +4 -0
  1031. package/dist/commands/review-incident-link.js +93 -0
  1032. package/dist/commands/review-incremental.d.ts +4 -0
  1033. package/dist/commands/review-incremental.js +128 -0
  1034. package/dist/commands/review-integration-health.d.ts +4 -0
  1035. package/dist/commands/review-integration-health.js +84 -0
  1036. package/dist/commands/review-integration-test.d.ts +4 -0
  1037. package/dist/commands/review-integration-test.js +145 -0
  1038. package/dist/commands/review-integration.d.ts +4 -0
  1039. package/dist/commands/review-integration.js +236 -0
  1040. package/dist/commands/review-interactive.d.ts +4 -0
  1041. package/dist/commands/review-interactive.js +85 -0
  1042. package/dist/commands/review-knowledge-capture.d.ts +1 -0
  1043. package/dist/commands/review-knowledge-capture.js +94 -0
  1044. package/dist/commands/review-language-profile.d.ts +4 -0
  1045. package/dist/commands/review-language-profile.js +72 -0
  1046. package/dist/commands/review-language-stats.d.ts +4 -0
  1047. package/dist/commands/review-language-stats.js +152 -0
  1048. package/dist/commands/review-lock-file.d.ts +4 -0
  1049. package/dist/commands/review-lock-file.js +153 -0
  1050. package/dist/commands/review-lock.d.ts +4 -0
  1051. package/dist/commands/review-lock.js +107 -0
  1052. package/dist/commands/review-log.d.ts +22 -0
  1053. package/dist/commands/review-log.js +164 -0
  1054. package/dist/commands/review-mentor-suggest.d.ts +1 -0
  1055. package/dist/commands/review-mentor-suggest.js +112 -0
  1056. package/dist/commands/review-merge-check.d.ts +4 -0
  1057. package/dist/commands/review-merge-check.js +101 -0
  1058. package/dist/commands/review-merge-config.d.ts +4 -0
  1059. package/dist/commands/review-merge-config.js +119 -0
  1060. package/dist/commands/review-merge-readiness.d.ts +1 -0
  1061. package/dist/commands/review-merge-readiness.js +90 -0
  1062. package/dist/commands/review-merge-request.d.ts +4 -0
  1063. package/dist/commands/review-merge-request.js +95 -0
  1064. package/dist/commands/review-merge.d.ts +4 -0
  1065. package/dist/commands/review-merge.js +145 -0
  1066. package/dist/commands/review-metric-export.d.ts +4 -0
  1067. package/dist/commands/review-metric-export.js +62 -0
  1068. package/dist/commands/review-milestone.d.ts +4 -0
  1069. package/dist/commands/review-milestone.js +136 -0
  1070. package/dist/commands/review-multi-repo-sync.d.ts +4 -0
  1071. package/dist/commands/review-multi-repo-sync.js +115 -0
  1072. package/dist/commands/review-multi-repo.d.ts +4 -0
  1073. package/dist/commands/review-multi-repo.js +145 -0
  1074. package/dist/commands/review-note.d.ts +4 -0
  1075. package/dist/commands/review-note.js +104 -0
  1076. package/dist/commands/review-notification-config.d.ts +4 -0
  1077. package/dist/commands/review-notification-config.js +122 -0
  1078. package/dist/commands/review-notification-digest.d.ts +4 -0
  1079. package/dist/commands/review-notification-digest.js +64 -0
  1080. package/dist/commands/review-notification.d.ts +4 -0
  1081. package/dist/commands/review-notification.js +126 -0
  1082. package/dist/commands/review-notify.d.ts +4 -0
  1083. package/dist/commands/review-notify.js +143 -0
  1084. package/dist/commands/review-offline.d.ts +4 -0
  1085. package/dist/commands/review-offline.js +125 -0
  1086. package/dist/commands/review-onboard-checklist.d.ts +4 -0
  1087. package/dist/commands/review-onboard-checklist.js +119 -0
  1088. package/dist/commands/review-onboard-wizard.d.ts +4 -0
  1089. package/dist/commands/review-onboard-wizard.js +92 -0
  1090. package/dist/commands/review-onboard.d.ts +4 -0
  1091. package/dist/commands/review-onboard.js +154 -0
  1092. package/dist/commands/review-onboarding-check.d.ts +1 -0
  1093. package/dist/commands/review-onboarding-check.js +93 -0
  1094. package/dist/commands/review-org-dashboard.d.ts +4 -0
  1095. package/dist/commands/review-org-dashboard.js +68 -0
  1096. package/dist/commands/review-output-filter.d.ts +4 -0
  1097. package/dist/commands/review-output-filter.js +112 -0
  1098. package/dist/commands/review-output-format.d.ts +4 -0
  1099. package/dist/commands/review-output-format.js +144 -0
  1100. package/dist/commands/review-output-transform.d.ts +4 -0
  1101. package/dist/commands/review-output-transform.js +119 -0
  1102. package/dist/commands/review-owner.d.ts +4 -0
  1103. package/dist/commands/review-owner.js +129 -0
  1104. package/dist/commands/review-parallel-diff.d.ts +4 -0
  1105. package/dist/commands/review-parallel-diff.js +146 -0
  1106. package/dist/commands/review-parallel-files.d.ts +7 -0
  1107. package/dist/commands/review-parallel-files.js +134 -0
  1108. package/dist/commands/review-parallel-run.d.ts +4 -0
  1109. package/dist/commands/review-parallel-run.js +116 -0
  1110. package/dist/commands/review-parallel.d.ts +4 -0
  1111. package/dist/commands/review-parallel.js +164 -0
  1112. package/dist/commands/review-perf-profile.d.ts +4 -0
  1113. package/dist/commands/review-perf-profile.js +98 -0
  1114. package/dist/commands/review-permission-model.d.ts +4 -0
  1115. package/dist/commands/review-permission-model.js +149 -0
  1116. package/dist/commands/review-pipeline-status.d.ts +4 -0
  1117. package/dist/commands/review-pipeline-status.js +54 -0
  1118. package/dist/commands/review-plugin-config.d.ts +4 -0
  1119. package/dist/commands/review-plugin-config.js +167 -0
  1120. package/dist/commands/review-plugin-list.d.ts +4 -0
  1121. package/dist/commands/review-plugin-list.js +99 -0
  1122. package/dist/commands/review-plugin-manage.d.ts +4 -0
  1123. package/dist/commands/review-plugin-manage.js +137 -0
  1124. package/dist/commands/review-plugin-status.d.ts +4 -0
  1125. package/dist/commands/review-plugin-status.js +53 -0
  1126. package/dist/commands/review-policy-enforce.d.ts +1 -0
  1127. package/dist/commands/review-policy-enforce.js +92 -0
  1128. package/dist/commands/review-policy-engine.d.ts +4 -0
  1129. package/dist/commands/review-policy-engine.js +135 -0
  1130. package/dist/commands/review-pr-comment-gen.d.ts +4 -0
  1131. package/dist/commands/review-pr-comment-gen.js +62 -0
  1132. package/dist/commands/review-pr-comment.d.ts +4 -0
  1133. package/dist/commands/review-pr-comment.js +106 -0
  1134. package/dist/commands/review-pr-label-suggest.d.ts +1 -0
  1135. package/dist/commands/review-pr-label-suggest.js +77 -0
  1136. package/dist/commands/review-pr-size-check.d.ts +1 -0
  1137. package/dist/commands/review-pr-size-check.js +98 -0
  1138. package/dist/commands/review-pr-template.d.ts +4 -0
  1139. package/dist/commands/review-pr-template.js +104 -0
  1140. package/dist/commands/review-preset-save.d.ts +4 -0
  1141. package/dist/commands/review-preset-save.js +159 -0
  1142. package/dist/commands/review-priority.d.ts +4 -0
  1143. package/dist/commands/review-priority.js +157 -0
  1144. package/dist/commands/review-profile.d.ts +4 -0
  1145. package/dist/commands/review-profile.js +168 -0
  1146. package/dist/commands/review-progress-bar.d.ts +4 -0
  1147. package/dist/commands/review-progress-bar.js +157 -0
  1148. package/dist/commands/review-progress-report.d.ts +1 -0
  1149. package/dist/commands/review-progress-report.js +95 -0
  1150. package/dist/commands/review-progress-track.d.ts +4 -0
  1151. package/dist/commands/review-progress-track.js +94 -0
  1152. package/dist/commands/review-quality-baseline.d.ts +1 -0
  1153. package/dist/commands/review-quality-baseline.js +134 -0
  1154. package/dist/commands/review-quality-gate.d.ts +1 -0
  1155. package/dist/commands/review-quality-gate.js +86 -0
  1156. package/dist/commands/review-quality-score.d.ts +4 -0
  1157. package/dist/commands/review-quality-score.js +127 -0
  1158. package/dist/commands/review-quality-trend.d.ts +4 -0
  1159. package/dist/commands/review-quality-trend.js +57 -0
  1160. package/dist/commands/review-queue.d.ts +33 -0
  1161. package/dist/commands/review-queue.js +225 -0
  1162. package/dist/commands/review-quickstart.d.ts +4 -0
  1163. package/dist/commands/review-quickstart.js +107 -0
  1164. package/dist/commands/review-quota-check.d.ts +4 -0
  1165. package/dist/commands/review-quota-check.js +97 -0
  1166. package/dist/commands/review-quota.d.ts +4 -0
  1167. package/dist/commands/review-quota.js +126 -0
  1168. package/dist/commands/review-rate-limit.d.ts +4 -0
  1169. package/dist/commands/review-rate-limit.js +130 -0
  1170. package/dist/commands/review-readiness-check.d.ts +1 -0
  1171. package/dist/commands/review-readiness-check.js +98 -0
  1172. package/dist/commands/review-receipt.d.ts +4 -0
  1173. package/dist/commands/review-receipt.js +220 -0
  1174. package/dist/commands/review-release-gate.d.ts +1 -0
  1175. package/dist/commands/review-release-gate.js +81 -0
  1176. package/dist/commands/review-replay.d.ts +8 -0
  1177. package/dist/commands/review-replay.js +264 -0
  1178. package/dist/commands/review-repo-onboard.d.ts +4 -0
  1179. package/dist/commands/review-repo-onboard.js +114 -0
  1180. package/dist/commands/review-report-archive.d.ts +4 -0
  1181. package/dist/commands/review-report-archive.js +100 -0
  1182. package/dist/commands/review-report-merge.d.ts +4 -0
  1183. package/dist/commands/review-report-merge.js +90 -0
  1184. package/dist/commands/review-report-pdf.d.ts +4 -0
  1185. package/dist/commands/review-report-pdf.js +163 -0
  1186. package/dist/commands/review-report-schedule.d.ts +4 -0
  1187. package/dist/commands/review-report-schedule.js +96 -0
  1188. package/dist/commands/review-retrospective.d.ts +1 -0
  1189. package/dist/commands/review-retrospective.js +118 -0
  1190. package/dist/commands/review-retry.d.ts +4 -0
  1191. package/dist/commands/review-retry.js +91 -0
  1192. package/dist/commands/review-review-cadence.d.ts +1 -0
  1193. package/dist/commands/review-review-cadence.js +85 -0
  1194. package/dist/commands/review-review-comments.d.ts +4 -0
  1195. package/dist/commands/review-review-comments.js +84 -0
  1196. package/dist/commands/review-reviewer-match.d.ts +1 -0
  1197. package/dist/commands/review-reviewer-match.js +108 -0
  1198. package/dist/commands/review-risk-matrix.d.ts +1 -0
  1199. package/dist/commands/review-risk-matrix.js +96 -0
  1200. package/dist/commands/review-risk-score.d.ts +4 -0
  1201. package/dist/commands/review-risk-score.js +156 -0
  1202. package/dist/commands/review-role-assignment.d.ts +4 -0
  1203. package/dist/commands/review-role-assignment.js +98 -0
  1204. package/dist/commands/review-rollback.d.ts +4 -0
  1205. package/dist/commands/review-rollback.js +171 -0
  1206. package/dist/commands/review-rollout-plan.d.ts +4 -0
  1207. package/dist/commands/review-rollout-plan.js +123 -0
  1208. package/dist/commands/review-rule-filter.d.ts +4 -0
  1209. package/dist/commands/review-rule-filter.js +116 -0
  1210. package/dist/commands/review-rule-stats.d.ts +4 -0
  1211. package/dist/commands/review-rule-stats.js +161 -0
  1212. package/dist/commands/review-sandbox.d.ts +4 -0
  1213. package/dist/commands/review-sandbox.js +191 -0
  1214. package/dist/commands/review-schedule.d.ts +4 -0
  1215. package/dist/commands/review-schedule.js +169 -0
  1216. package/dist/commands/review-scope-limit.d.ts +4 -0
  1217. package/dist/commands/review-scope-limit.js +100 -0
  1218. package/dist/commands/review-scope-lock.d.ts +7 -0
  1219. package/dist/commands/review-scope-lock.js +138 -0
  1220. package/dist/commands/review-scope-select.d.ts +4 -0
  1221. package/dist/commands/review-scope-select.js +98 -0
  1222. package/dist/commands/review-scope-suggest.d.ts +1 -0
  1223. package/dist/commands/review-scope-suggest.js +112 -0
  1224. package/dist/commands/review-scope.d.ts +4 -0
  1225. package/dist/commands/review-scope.js +197 -0
  1226. package/dist/commands/review-score-history.d.ts +4 -0
  1227. package/dist/commands/review-score-history.js +137 -0
  1228. package/dist/commands/review-security-posture.d.ts +1 -0
  1229. package/dist/commands/review-security-posture.js +105 -0
  1230. package/dist/commands/review-session-replay.d.ts +4 -0
  1231. package/dist/commands/review-session-replay.js +81 -0
  1232. package/dist/commands/review-session-save.d.ts +4 -0
  1233. package/dist/commands/review-session-save.js +173 -0
  1234. package/dist/commands/review-session.d.ts +4 -0
  1235. package/dist/commands/review-session.js +150 -0
  1236. package/dist/commands/review-skip-list.d.ts +4 -0
  1237. package/dist/commands/review-skip-list.js +135 -0
  1238. package/dist/commands/review-skip-rule.d.ts +4 -0
  1239. package/dist/commands/review-skip-rule.js +105 -0
  1240. package/dist/commands/review-sla-config.d.ts +4 -0
  1241. package/dist/commands/review-sla-config.js +88 -0
  1242. package/dist/commands/review-slack-format.d.ts +4 -0
  1243. package/dist/commands/review-slack-format.js +113 -0
  1244. package/dist/commands/review-snapshot-diff.d.ts +4 -0
  1245. package/dist/commands/review-snapshot-diff.js +100 -0
  1246. package/dist/commands/review-sprint-plan.d.ts +1 -0
  1247. package/dist/commands/review-sprint-plan.js +79 -0
  1248. package/dist/commands/review-stakeholder-notify.d.ts +1 -0
  1249. package/dist/commands/review-stakeholder-notify.js +134 -0
  1250. package/dist/commands/review-stakeholder-report.d.ts +4 -0
  1251. package/dist/commands/review-stakeholder-report.js +75 -0
  1252. package/dist/commands/review-stale-finding-clean.d.ts +1 -0
  1253. package/dist/commands/review-stale-finding-clean.js +81 -0
  1254. package/dist/commands/review-standup.d.ts +4 -0
  1255. package/dist/commands/review-standup.js +95 -0
  1256. package/dist/commands/review-stats.d.ts +4 -0
  1257. package/dist/commands/review-stats.js +175 -0
  1258. package/dist/commands/review-status-badge.d.ts +4 -0
  1259. package/dist/commands/review-status-badge.js +120 -0
  1260. package/dist/commands/review-streak.d.ts +4 -0
  1261. package/dist/commands/review-streak.js +150 -0
  1262. package/dist/commands/review-summary-dashboard.d.ts +4 -0
  1263. package/dist/commands/review-summary-dashboard.js +96 -0
  1264. package/dist/commands/review-summary-email.d.ts +4 -0
  1265. package/dist/commands/review-summary-email.js +102 -0
  1266. package/dist/commands/review-summary.d.ts +4 -0
  1267. package/dist/commands/review-summary.js +174 -0
  1268. package/dist/commands/review-tag-manager.d.ts +4 -0
  1269. package/dist/commands/review-tag-manager.js +128 -0
  1270. package/dist/commands/review-tag.d.ts +4 -0
  1271. package/dist/commands/review-tag.js +136 -0
  1272. package/dist/commands/review-team-analytics.d.ts +1 -0
  1273. package/dist/commands/review-team-analytics.js +94 -0
  1274. package/dist/commands/review-team-assign.d.ts +7 -0
  1275. package/dist/commands/review-team-assign.js +211 -0
  1276. package/dist/commands/review-team-coverage.d.ts +1 -0
  1277. package/dist/commands/review-team-coverage.js +95 -0
  1278. package/dist/commands/review-team-dashboard.d.ts +4 -0
  1279. package/dist/commands/review-team-dashboard.js +98 -0
  1280. package/dist/commands/review-team-rotation.d.ts +1 -0
  1281. package/dist/commands/review-team-rotation.js +99 -0
  1282. package/dist/commands/review-team-skill-map.d.ts +1 -0
  1283. package/dist/commands/review-team-skill-map.js +102 -0
  1284. package/dist/commands/review-team-stats.d.ts +4 -0
  1285. package/dist/commands/review-team-stats.js +97 -0
  1286. package/dist/commands/review-team-summary.d.ts +4 -0
  1287. package/dist/commands/review-team-summary.js +155 -0
  1288. package/dist/commands/review-team-velocity.d.ts +1 -0
  1289. package/dist/commands/review-team-velocity.js +103 -0
  1290. package/dist/commands/review-template-export.d.ts +4 -0
  1291. package/dist/commands/review-template-export.js +146 -0
  1292. package/dist/commands/review-template-library.d.ts +4 -0
  1293. package/dist/commands/review-template-library.js +155 -0
  1294. package/dist/commands/review-template-suggest.d.ts +1 -0
  1295. package/dist/commands/review-template-suggest.js +119 -0
  1296. package/dist/commands/review-template.d.ts +4 -0
  1297. package/dist/commands/review-template.js +212 -0
  1298. package/dist/commands/review-tenant-config.d.ts +4 -0
  1299. package/dist/commands/review-tenant-config.js +116 -0
  1300. package/dist/commands/review-threshold-tune.d.ts +4 -0
  1301. package/dist/commands/review-threshold-tune.js +135 -0
  1302. package/dist/commands/review-timeline.d.ts +4 -0
  1303. package/dist/commands/review-timeline.js +76 -0
  1304. package/dist/commands/review-token-budget.d.ts +4 -0
  1305. package/dist/commands/review-token-budget.js +117 -0
  1306. package/dist/commands/review-velocity-track.d.ts +1 -0
  1307. package/dist/commands/review-velocity-track.js +94 -0
  1308. package/dist/commands/review-watch-mode.d.ts +7 -0
  1309. package/dist/commands/review-watch-mode.js +132 -0
  1310. package/dist/commands/review-webhook-dispatch.d.ts +4 -0
  1311. package/dist/commands/review-webhook-dispatch.js +99 -0
  1312. package/dist/commands/review-webhook-notify.d.ts +4 -0
  1313. package/dist/commands/review-webhook-notify.js +145 -0
  1314. package/dist/commands/review-webhook.d.ts +4 -0
  1315. package/dist/commands/review-webhook.js +140 -0
  1316. package/dist/commands/review-whitelist.d.ts +4 -0
  1317. package/dist/commands/review-whitelist.js +150 -0
  1318. package/dist/commands/review-workflow-suggest.d.ts +1 -0
  1319. package/dist/commands/review-workflow-suggest.js +129 -0
  1320. package/dist/commands/review-workload-balance.d.ts +1 -0
  1321. package/dist/commands/review-workload-balance.js +86 -0
  1322. package/dist/commands/review-workspace-init.d.ts +4 -0
  1323. package/dist/commands/review-workspace-init.js +104 -0
  1324. package/dist/commands/review-workspace-scan.d.ts +4 -0
  1325. package/dist/commands/review-workspace-scan.js +144 -0
  1326. package/dist/commands/review.d.ts +155 -0
  1327. package/dist/commands/review.js +1114 -0
  1328. package/dist/commands/risk-heatmap.d.ts +7 -0
  1329. package/dist/commands/risk-heatmap.js +223 -0
  1330. package/dist/commands/rollback-safety.d.ts +4 -0
  1331. package/dist/commands/rollback-safety.js +191 -0
  1332. package/dist/commands/rule-catalog.d.ts +4 -0
  1333. package/dist/commands/rule-catalog.js +128 -0
  1334. package/dist/commands/rule-metrics.d.ts +43 -0
  1335. package/dist/commands/rule-metrics.js +113 -0
  1336. package/dist/commands/rule-owner.d.ts +30 -0
  1337. package/dist/commands/rule-owner.js +181 -0
  1338. package/dist/commands/rule-share.d.ts +34 -0
  1339. package/dist/commands/rule-share.js +202 -0
  1340. package/dist/commands/rule-test.d.ts +4 -0
  1341. package/dist/commands/rule-test.js +201 -0
  1342. package/dist/commands/rule.d.ts +114 -0
  1343. package/dist/commands/rule.js +295 -0
  1344. package/dist/commands/sbom-export.d.ts +7 -0
  1345. package/dist/commands/sbom-export.js +161 -0
  1346. package/dist/commands/scaffold-plugin.d.ts +15 -0
  1347. package/dist/commands/scaffold-plugin.js +270 -0
  1348. package/dist/commands/secret-age.d.ts +5 -0
  1349. package/dist/commands/secret-age.js +214 -0
  1350. package/dist/commands/secret-scan.d.ts +7 -0
  1351. package/dist/commands/secret-scan.js +244 -0
  1352. package/dist/commands/security-maturity.d.ts +7 -0
  1353. package/dist/commands/security-maturity.js +312 -0
  1354. package/dist/commands/security-theater.d.ts +4 -0
  1355. package/dist/commands/security-theater.js +278 -0
  1356. package/dist/commands/setup-wizard.d.ts +4 -0
  1357. package/dist/commands/setup-wizard.js +174 -0
  1358. package/dist/commands/severity-tune.d.ts +4 -0
  1359. package/dist/commands/severity-tune.js +208 -0
  1360. package/dist/commands/sla-track.d.ts +56 -0
  1361. package/dist/commands/sla-track.js +268 -0
  1362. package/dist/commands/smart-output.d.ts +38 -0
  1363. package/dist/commands/smart-output.js +175 -0
  1364. package/dist/commands/smart-select.d.ts +26 -0
  1365. package/dist/commands/smart-select.js +345 -0
  1366. package/dist/commands/snapshot.d.ts +139 -0
  1367. package/dist/commands/snapshot.js +478 -0
  1368. package/dist/commands/snippet-eval.d.ts +7 -0
  1369. package/dist/commands/snippet-eval.js +223 -0
  1370. package/dist/commands/spec-conform.d.ts +4 -0
  1371. package/dist/commands/spec-conform.js +304 -0
  1372. package/dist/commands/stale-pattern.d.ts +4 -0
  1373. package/dist/commands/stale-pattern.js +293 -0
  1374. package/dist/commands/state-integrity.d.ts +4 -0
  1375. package/dist/commands/state-integrity.js +283 -0
  1376. package/dist/commands/suppress.d.ts +39 -0
  1377. package/dist/commands/suppress.js +203 -0
  1378. package/dist/commands/team-config.d.ts +4 -0
  1379. package/dist/commands/team-config.js +234 -0
  1380. package/dist/commands/team-leaderboard.d.ts +24 -0
  1381. package/dist/commands/team-leaderboard.js +227 -0
  1382. package/dist/commands/team-rules-sync.d.ts +7 -0
  1383. package/dist/commands/team-rules-sync.js +250 -0
  1384. package/dist/commands/team-trust.d.ts +7 -0
  1385. package/dist/commands/team-trust.js +174 -0
  1386. package/dist/commands/test-correlate.d.ts +7 -0
  1387. package/dist/commands/test-correlate.js +221 -0
  1388. package/dist/commands/test-isolation.d.ts +5 -0
  1389. package/dist/commands/test-isolation.js +234 -0
  1390. package/dist/commands/test-quality.d.ts +5 -0
  1391. package/dist/commands/test-quality.js +160 -0
  1392. package/dist/commands/test-suggest.d.ts +8 -0
  1393. package/dist/commands/test-suggest.js +247 -0
  1394. package/dist/commands/ticket-sync.d.ts +25 -0
  1395. package/dist/commands/ticket-sync.js +235 -0
  1396. package/dist/commands/timeout-audit.d.ts +4 -0
  1397. package/dist/commands/timeout-audit.js +210 -0
  1398. package/dist/commands/trace.d.ts +64 -0
  1399. package/dist/commands/trace.js +245 -0
  1400. package/dist/commands/trend-report.d.ts +4 -0
  1401. package/dist/commands/trend-report.js +148 -0
  1402. package/dist/commands/triage.d.ts +15 -0
  1403. package/dist/commands/triage.js +171 -0
  1404. package/dist/commands/trust-adaptive.d.ts +8 -0
  1405. package/dist/commands/trust-adaptive.js +193 -0
  1406. package/dist/commands/trust-ramp.d.ts +29 -0
  1407. package/dist/commands/trust-ramp.js +189 -0
  1408. package/dist/commands/tune.d.ts +24 -0
  1409. package/dist/commands/tune.js +380 -0
  1410. package/dist/commands/type-boundary.d.ts +4 -0
  1411. package/dist/commands/type-boundary.js +235 -0
  1412. package/dist/commands/upload.d.ts +13 -0
  1413. package/dist/commands/upload.js +172 -0
  1414. package/dist/commands/validate-config.d.ts +16 -0
  1415. package/dist/commands/validate-config.js +267 -0
  1416. package/dist/commands/vendor-lock-detect.d.ts +7 -0
  1417. package/dist/commands/vendor-lock-detect.js +288 -0
  1418. package/dist/commands/vote.d.ts +31 -0
  1419. package/dist/commands/vote.js +200 -0
  1420. package/dist/commands/warm-cache.d.ts +30 -0
  1421. package/dist/commands/warm-cache.js +165 -0
  1422. package/dist/commands/watch-judge.d.ts +7 -0
  1423. package/dist/commands/watch-judge.js +179 -0
  1424. package/dist/commands/watch.d.ts +22 -0
  1425. package/dist/commands/watch.js +147 -0
  1426. package/dist/comparison.d.ts +67 -0
  1427. package/dist/comparison.js +253 -0
  1428. package/dist/config.d.ts +108 -0
  1429. package/dist/config.js +694 -0
  1430. package/dist/context/context-snippets.d.ts +15 -0
  1431. package/dist/context/context-snippets.js +36 -0
  1432. package/dist/context/embedding-cache.d.ts +30 -0
  1433. package/dist/context/embedding-cache.js +48 -0
  1434. package/dist/data-adapter.d.ts +123 -0
  1435. package/dist/data-adapter.js +212 -0
  1436. package/dist/dedup.d.ts +105 -0
  1437. package/dist/dedup.js +606 -0
  1438. package/dist/disk-cache.d.ts +59 -0
  1439. package/dist/disk-cache.js +236 -0
  1440. package/dist/errors.d.ts +43 -0
  1441. package/dist/errors.js +63 -0
  1442. package/dist/escalation.d.ts +100 -0
  1443. package/dist/escalation.js +292 -0
  1444. package/dist/evaluation-session.d.ts +74 -0
  1445. package/dist/evaluation-session.js +152 -0
  1446. package/dist/evaluators/accessibility.d.ts +2 -0
  1447. package/dist/evaluators/accessibility.js +559 -0
  1448. package/dist/evaluators/agent-instructions.d.ts +2 -0
  1449. package/dist/evaluators/agent-instructions.js +214 -0
  1450. package/dist/evaluators/ai-code-safety.d.ts +8 -0
  1451. package/dist/evaluators/ai-code-safety.js +410 -0
  1452. package/dist/evaluators/api-contract.d.ts +9 -0
  1453. package/dist/evaluators/api-contract.js +203 -0
  1454. package/dist/evaluators/api-design.d.ts +2 -0
  1455. package/dist/evaluators/api-design.js +260 -0
  1456. package/dist/evaluators/app-builder.d.ts +33 -0
  1457. package/dist/evaluators/app-builder.js +155 -0
  1458. package/dist/evaluators/authentication.d.ts +2 -0
  1459. package/dist/evaluators/authentication.js +455 -0
  1460. package/dist/evaluators/backwards-compatibility.d.ts +2 -0
  1461. package/dist/evaluators/backwards-compatibility.js +168 -0
  1462. package/dist/evaluators/caching.d.ts +2 -0
  1463. package/dist/evaluators/caching.js +171 -0
  1464. package/dist/evaluators/ci-cd.d.ts +2 -0
  1465. package/dist/evaluators/ci-cd.js +218 -0
  1466. package/dist/evaluators/cloud-readiness.d.ts +2 -0
  1467. package/dist/evaluators/cloud-readiness.js +231 -0
  1468. package/dist/evaluators/code-structure.d.ts +21 -0
  1469. package/dist/evaluators/code-structure.js +195 -0
  1470. package/dist/evaluators/compliance.d.ts +2 -0
  1471. package/dist/evaluators/compliance.js +329 -0
  1472. package/dist/evaluators/concurrency.d.ts +2 -0
  1473. package/dist/evaluators/concurrency.js +307 -0
  1474. package/dist/evaluators/configuration-management.d.ts +2 -0
  1475. package/dist/evaluators/configuration-management.js +232 -0
  1476. package/dist/evaluators/cost-effectiveness.d.ts +2 -0
  1477. package/dist/evaluators/cost-effectiveness.js +418 -0
  1478. package/dist/evaluators/cybersecurity.d.ts +2 -0
  1479. package/dist/evaluators/cybersecurity.js +1197 -0
  1480. package/dist/evaluators/data-security.d.ts +2 -0
  1481. package/dist/evaluators/data-security.js +467 -0
  1482. package/dist/evaluators/data-sovereignty.d.ts +2 -0
  1483. package/dist/evaluators/data-sovereignty.js +495 -0
  1484. package/dist/evaluators/database.d.ts +2 -0
  1485. package/dist/evaluators/database.js +240 -0
  1486. package/dist/evaluators/dependencies.d.ts +5 -0
  1487. package/dist/evaluators/dependencies.js +228 -0
  1488. package/dist/evaluators/dependency-health.d.ts +2 -0
  1489. package/dist/evaluators/dependency-health.js +477 -0
  1490. package/dist/evaluators/documentation.d.ts +2 -0
  1491. package/dist/evaluators/documentation.js +432 -0
  1492. package/dist/evaluators/error-handling.d.ts +2 -0
  1493. package/dist/evaluators/error-handling.js +426 -0
  1494. package/dist/evaluators/ethics-bias.d.ts +2 -0
  1495. package/dist/evaluators/ethics-bias.js +263 -0
  1496. package/dist/evaluators/false-positive-review.d.ts +21 -0
  1497. package/dist/evaluators/false-positive-review.js +1246 -0
  1498. package/dist/evaluators/framework-rules.d.ts +58 -0
  1499. package/dist/evaluators/framework-rules.js +291 -0
  1500. package/dist/evaluators/framework-safety.d.ts +12 -0
  1501. package/dist/evaluators/framework-safety.js +1205 -0
  1502. package/dist/evaluators/hallucination-detection.d.ts +2 -0
  1503. package/dist/evaluators/hallucination-detection.js +1250 -0
  1504. package/dist/evaluators/iac-security.d.ts +8 -0
  1505. package/dist/evaluators/iac-security.js +701 -0
  1506. package/dist/evaluators/index.d.ts +167 -0
  1507. package/dist/evaluators/index.js +994 -0
  1508. package/dist/evaluators/intent-alignment.d.ts +18 -0
  1509. package/dist/evaluators/intent-alignment.js +405 -0
  1510. package/dist/evaluators/internationalization.d.ts +2 -0
  1511. package/dist/evaluators/internationalization.js +287 -0
  1512. package/dist/evaluators/judge-selector.d.ts +19 -0
  1513. package/dist/evaluators/judge-selector.js +141 -0
  1514. package/dist/evaluators/logging-privacy.d.ts +2 -0
  1515. package/dist/evaluators/logging-privacy.js +190 -0
  1516. package/dist/evaluators/logic-review.d.ts +2 -0
  1517. package/dist/evaluators/logic-review.js +289 -0
  1518. package/dist/evaluators/maintainability.d.ts +2 -0
  1519. package/dist/evaluators/maintainability.js +430 -0
  1520. package/dist/evaluators/model-fingerprint.d.ts +2 -0
  1521. package/dist/evaluators/model-fingerprint.js +151 -0
  1522. package/dist/evaluators/multi-turn-coherence.d.ts +13 -0
  1523. package/dist/evaluators/multi-turn-coherence.js +149 -0
  1524. package/dist/evaluators/observability.d.ts +2 -0
  1525. package/dist/evaluators/observability.js +238 -0
  1526. package/dist/evaluators/over-engineering.d.ts +2 -0
  1527. package/dist/evaluators/over-engineering.js +160 -0
  1528. package/dist/evaluators/performance.d.ts +2 -0
  1529. package/dist/evaluators/performance.js +649 -0
  1530. package/dist/evaluators/portability.d.ts +2 -0
  1531. package/dist/evaluators/portability.js +254 -0
  1532. package/dist/evaluators/project.d.ts +48 -0
  1533. package/dist/evaluators/project.js +817 -0
  1534. package/dist/evaluators/rate-limiting.d.ts +2 -0
  1535. package/dist/evaluators/rate-limiting.js +193 -0
  1536. package/dist/evaluators/recall-boost.d.ts +27 -0
  1537. package/dist/evaluators/recall-boost.js +409 -0
  1538. package/dist/evaluators/reliability.d.ts +2 -0
  1539. package/dist/evaluators/reliability.js +245 -0
  1540. package/dist/evaluators/scalability.d.ts +2 -0
  1541. package/dist/evaluators/scalability.js +230 -0
  1542. package/dist/evaluators/security.d.ts +12 -0
  1543. package/dist/evaluators/security.js +1013 -0
  1544. package/dist/evaluators/shared.d.ts +219 -0
  1545. package/dist/evaluators/shared.js +1169 -0
  1546. package/dist/evaluators/software-practices.d.ts +2 -0
  1547. package/dist/evaluators/software-practices.js +395 -0
  1548. package/dist/evaluators/suppressions.d.ts +49 -0
  1549. package/dist/evaluators/suppressions.js +185 -0
  1550. package/dist/evaluators/testing.d.ts +2 -0
  1551. package/dist/evaluators/testing.js +348 -0
  1552. package/dist/evaluators/ux.d.ts +2 -0
  1553. package/dist/evaluators/ux.js +309 -0
  1554. package/dist/evaluators/v2.d.ts +26 -0
  1555. package/dist/evaluators/v2.js +354 -0
  1556. package/dist/ext-to-lang.d.ts +16 -0
  1557. package/dist/ext-to-lang.js +60 -0
  1558. package/dist/feedback-loop.d.ts +62 -0
  1559. package/dist/feedback-loop.js +179 -0
  1560. package/dist/finding-lifecycle.d.ts +215 -0
  1561. package/dist/finding-lifecycle.js +547 -0
  1562. package/dist/fingerprint.d.ts +39 -0
  1563. package/dist/fingerprint.js +179 -0
  1564. package/dist/fix-history.d.ts +103 -0
  1565. package/dist/fix-history.js +164 -0
  1566. package/dist/formatters/badge.d.ts +16 -0
  1567. package/dist/formatters/badge.js +78 -0
  1568. package/dist/formatters/codeclimate.d.ts +24 -0
  1569. package/dist/formatters/codeclimate.js +80 -0
  1570. package/dist/formatters/csv.d.ts +16 -0
  1571. package/dist/formatters/csv.js +53 -0
  1572. package/dist/formatters/diagnostics.d.ts +81 -0
  1573. package/dist/formatters/diagnostics.js +152 -0
  1574. package/dist/formatters/github-actions.d.ts +6 -0
  1575. package/dist/formatters/github-actions.js +68 -0
  1576. package/dist/formatters/html.d.ts +12 -0
  1577. package/dist/formatters/html.js +194 -0
  1578. package/dist/formatters/junit.d.ts +6 -0
  1579. package/dist/formatters/junit.js +68 -0
  1580. package/dist/formatters/pdf.d.ts +12 -0
  1581. package/dist/formatters/pdf.js +114 -0
  1582. package/dist/formatters/sarif.d.ts +92 -0
  1583. package/dist/formatters/sarif.js +256 -0
  1584. package/dist/formatters/shared.d.ts +4 -0
  1585. package/dist/formatters/shared.js +29 -0
  1586. package/dist/git-diff.d.ts +62 -0
  1587. package/dist/git-diff.js +282 -0
  1588. package/dist/github-app.d.ts +152 -0
  1589. package/dist/github-app.js +716 -0
  1590. package/dist/import-resolver.d.ts +51 -0
  1591. package/dist/import-resolver.js +213 -0
  1592. package/dist/index.d.ts +4 -0
  1593. package/dist/index.js +38 -0
  1594. package/dist/judge-registry.d.ts +156 -0
  1595. package/dist/judge-registry.js +272 -0
  1596. package/dist/judges/accessibility.d.ts +2 -0
  1597. package/dist/judges/accessibility.js +46 -0
  1598. package/dist/judges/agent-instructions.d.ts +2 -0
  1599. package/dist/judges/agent-instructions.js +46 -0
  1600. package/dist/judges/ai-code-safety.d.ts +2 -0
  1601. package/dist/judges/ai-code-safety.js +57 -0
  1602. package/dist/judges/api-contract.d.ts +2 -0
  1603. package/dist/judges/api-contract.js +40 -0
  1604. package/dist/judges/api-design.d.ts +2 -0
  1605. package/dist/judges/api-design.js +57 -0
  1606. package/dist/judges/authentication.d.ts +2 -0
  1607. package/dist/judges/authentication.js +63 -0
  1608. package/dist/judges/backwards-compatibility.d.ts +2 -0
  1609. package/dist/judges/backwards-compatibility.js +46 -0
  1610. package/dist/judges/caching.d.ts +2 -0
  1611. package/dist/judges/caching.js +46 -0
  1612. package/dist/judges/ci-cd.d.ts +2 -0
  1613. package/dist/judges/ci-cd.js +46 -0
  1614. package/dist/judges/cloud-readiness.d.ts +2 -0
  1615. package/dist/judges/cloud-readiness.js +53 -0
  1616. package/dist/judges/code-structure.d.ts +2 -0
  1617. package/dist/judges/code-structure.js +50 -0
  1618. package/dist/judges/compliance.d.ts +2 -0
  1619. package/dist/judges/compliance.js +49 -0
  1620. package/dist/judges/concurrency.d.ts +2 -0
  1621. package/dist/judges/concurrency.js +48 -0
  1622. package/dist/judges/configuration-management.d.ts +2 -0
  1623. package/dist/judges/configuration-management.js +46 -0
  1624. package/dist/judges/cost-effectiveness.d.ts +2 -0
  1625. package/dist/judges/cost-effectiveness.js +42 -0
  1626. package/dist/judges/cybersecurity.d.ts +2 -0
  1627. package/dist/judges/cybersecurity.js +63 -0
  1628. package/dist/judges/data-security.d.ts +2 -0
  1629. package/dist/judges/data-security.js +50 -0
  1630. package/dist/judges/data-sovereignty.d.ts +2 -0
  1631. package/dist/judges/data-sovereignty.js +60 -0
  1632. package/dist/judges/database.d.ts +2 -0
  1633. package/dist/judges/database.js +51 -0
  1634. package/dist/judges/dependency-health.d.ts +2 -0
  1635. package/dist/judges/dependency-health.js +48 -0
  1636. package/dist/judges/documentation.d.ts +2 -0
  1637. package/dist/judges/documentation.js +55 -0
  1638. package/dist/judges/error-handling.d.ts +2 -0
  1639. package/dist/judges/error-handling.js +55 -0
  1640. package/dist/judges/ethics-bias.d.ts +2 -0
  1641. package/dist/judges/ethics-bias.js +48 -0
  1642. package/dist/judges/false-positive-review.d.ts +2 -0
  1643. package/dist/judges/false-positive-review.js +85 -0
  1644. package/dist/judges/framework-safety.d.ts +2 -0
  1645. package/dist/judges/framework-safety.js +49 -0
  1646. package/dist/judges/hallucination-detection.d.ts +2 -0
  1647. package/dist/judges/hallucination-detection.js +48 -0
  1648. package/dist/judges/iac-security.d.ts +2 -0
  1649. package/dist/judges/iac-security.js +47 -0
  1650. package/dist/judges/index.d.ts +88 -0
  1651. package/dist/judges/index.js +128 -0
  1652. package/dist/judges/intent-alignment.d.ts +2 -0
  1653. package/dist/judges/intent-alignment.js +46 -0
  1654. package/dist/judges/internationalization.d.ts +2 -0
  1655. package/dist/judges/internationalization.js +44 -0
  1656. package/dist/judges/logging-privacy.d.ts +2 -0
  1657. package/dist/judges/logging-privacy.js +46 -0
  1658. package/dist/judges/logic-review.d.ts +2 -0
  1659. package/dist/judges/logic-review.js +36 -0
  1660. package/dist/judges/maintainability.d.ts +2 -0
  1661. package/dist/judges/maintainability.js +46 -0
  1662. package/dist/judges/model-fingerprint.d.ts +2 -0
  1663. package/dist/judges/model-fingerprint.js +35 -0
  1664. package/dist/judges/multi-turn-coherence.d.ts +2 -0
  1665. package/dist/judges/multi-turn-coherence.js +39 -0
  1666. package/dist/judges/observability.d.ts +2 -0
  1667. package/dist/judges/observability.js +54 -0
  1668. package/dist/judges/over-engineering.d.ts +2 -0
  1669. package/dist/judges/over-engineering.js +50 -0
  1670. package/dist/judges/performance.d.ts +2 -0
  1671. package/dist/judges/performance.js +46 -0
  1672. package/dist/judges/portability.d.ts +2 -0
  1673. package/dist/judges/portability.js +46 -0
  1674. package/dist/judges/rate-limiting.d.ts +2 -0
  1675. package/dist/judges/rate-limiting.js +55 -0
  1676. package/dist/judges/reliability.d.ts +2 -0
  1677. package/dist/judges/reliability.js +57 -0
  1678. package/dist/judges/scalability.d.ts +2 -0
  1679. package/dist/judges/scalability.js +52 -0
  1680. package/dist/judges/security.d.ts +2 -0
  1681. package/dist/judges/security.js +64 -0
  1682. package/dist/judges/software-practices.d.ts +2 -0
  1683. package/dist/judges/software-practices.js +56 -0
  1684. package/dist/judges/testing.d.ts +2 -0
  1685. package/dist/judges/testing.js +54 -0
  1686. package/dist/judges/ux.d.ts +2 -0
  1687. package/dist/judges/ux.js +46 -0
  1688. package/dist/language-patterns.d.ts +653 -0
  1689. package/dist/language-patterns.js +851 -0
  1690. package/dist/parallel.d.ts +52 -0
  1691. package/dist/parallel.js +157 -0
  1692. package/dist/patches/apply.d.ts +15 -0
  1693. package/dist/patches/apply.js +37 -0
  1694. package/dist/patches/index.d.ts +9 -0
  1695. package/dist/patches/index.js +2544 -0
  1696. package/dist/plugins.d.ts +59 -0
  1697. package/dist/plugins.js +76 -0
  1698. package/dist/presets.d.ts +35 -0
  1699. package/dist/presets.js +406 -0
  1700. package/dist/probabilistic/llm-response-validator.d.ts +26 -0
  1701. package/dist/probabilistic/llm-response-validator.js +122 -0
  1702. package/dist/reports/public-repo-report.d.ts +42 -0
  1703. package/dist/reports/public-repo-report.js +579 -0
  1704. package/dist/review-conversation.d.ts +87 -0
  1705. package/dist/review-conversation.js +307 -0
  1706. package/dist/sast-integration.d.ts +112 -0
  1707. package/dist/sast-integration.js +215 -0
  1708. package/dist/scoring.d.ts +36 -0
  1709. package/dist/scoring.js +437 -0
  1710. package/dist/security-ids.d.ts +23 -0
  1711. package/dist/security-ids.js +239 -0
  1712. package/dist/skill-loader.d.ts +33 -0
  1713. package/dist/skill-loader.js +167 -0
  1714. package/dist/tools/command-safety.d.ts +13 -0
  1715. package/dist/tools/command-safety.js +95 -0
  1716. package/dist/tools/deep-review.d.ts +38 -0
  1717. package/dist/tools/deep-review.js +302 -0
  1718. package/dist/tools/prompts.d.ts +27 -0
  1719. package/dist/tools/prompts.js +122 -0
  1720. package/dist/tools/register-evaluation.d.ts +6 -0
  1721. package/dist/tools/register-evaluation.js +587 -0
  1722. package/dist/tools/register-fix.d.ts +5 -0
  1723. package/dist/tools/register-fix.js +175 -0
  1724. package/dist/tools/register-resources.d.ts +6 -0
  1725. package/dist/tools/register-resources.js +177 -0
  1726. package/dist/tools/register-review.d.ts +6 -0
  1727. package/dist/tools/register-review.js +564 -0
  1728. package/dist/tools/register-scaffold.d.ts +2 -0
  1729. package/dist/tools/register-scaffold.js +398 -0
  1730. package/dist/tools/register-workflow.d.ts +6 -0
  1731. package/dist/tools/register-workflow.js +1037 -0
  1732. package/dist/tools/register-workspace.d.ts +2 -0
  1733. package/dist/tools/register-workspace.js +214 -0
  1734. package/dist/tools/register.d.ts +6 -0
  1735. package/dist/tools/register.js +21 -0
  1736. package/dist/tools/schemas.d.ts +25 -0
  1737. package/dist/tools/schemas.js +41 -0
  1738. package/dist/tools/validation.d.ts +13 -0
  1739. package/dist/tools/validation.js +77 -0
  1740. package/dist/types.d.ts +898 -0
  1741. package/dist/types.js +1 -0
  1742. package/package.json +54 -0
  1743. package/skills/ai-code-review.skill.md +57 -0
  1744. package/skills/release-gate.skill.md +27 -0
  1745. package/skills/security-review.skill.md +32 -0
@@ -0,0 +1,2335 @@
1
+ /**
2
+ * Deep security benchmark cases — SSRF, SSTI, NoSQL injection, deserialization,
3
+ * crypto misuse, auth bypass, prototype pollution, XXE, LDAP, open redirect,
4
+ * mass assignment, CORS, CSRF, session management, and clean-security FP checks.
5
+ *
6
+ * ~125 cases covering CYBER, SEC, AUTH, DATA prefixes across multiple languages.
7
+ */
8
+ export const BENCHMARK_SECURITY_DEEP = [
9
+ // ═══════════════════════════════════════════════════════════════════════════
10
+ // SSRF — Server-Side Request Forgery
11
+ // ═══════════════════════════════════════════════════════════════════════════
12
+ {
13
+ id: "sec-deep-ssrf-go-fetch",
14
+ description: "SSRF in Go via user-controlled URL passed to http.Get",
15
+ language: "go",
16
+ code: `package main
17
+ import (
18
+ "net/http"
19
+ "io/ioutil"
20
+ )
21
+ func proxyHandler(w http.ResponseWriter, r *http.Request) {
22
+ targetURL := r.URL.Query().Get("url")
23
+ resp, err := http.Get(targetURL)
24
+ if err != nil {
25
+ http.Error(w, "Failed", 500)
26
+ return
27
+ }
28
+ defer resp.Body.Close()
29
+ body, _ := ioutil.ReadAll(resp.Body)
30
+ w.Write(body)
31
+ }`,
32
+ expectedRuleIds: ["CYBER-001", "SEC-001"],
33
+ category: "security",
34
+ difficulty: "medium",
35
+ },
36
+ {
37
+ id: "sec-deep-ssrf-python-requests",
38
+ description: "SSRF in Python Flask via requests.get with user input",
39
+ language: "python",
40
+ code: `from flask import Flask, request
41
+ import requests
42
+
43
+ app = Flask(__name__)
44
+
45
+ @app.route('/fetch')
46
+ def fetch_url():
47
+ url = request.args.get('url')
48
+ response = requests.get(url)
49
+ return response.text`,
50
+ expectedRuleIds: ["CYBER-001", "SEC-001"],
51
+ category: "security",
52
+ difficulty: "easy",
53
+ },
54
+ {
55
+ id: "sec-deep-ssrf-java-url",
56
+ description: "SSRF in Java servlet via URL connection",
57
+ language: "java",
58
+ code: `import javax.servlet.http.*;
59
+ import java.net.*;
60
+ import java.io.*;
61
+
62
+ public class FetchServlet extends HttpServlet {
63
+ protected void doGet(HttpServletRequest req, HttpServletResponse resp)
64
+ throws IOException {
65
+ String target = req.getParameter("url");
66
+ URL url = new URL(target);
67
+ HttpURLConnection conn = (HttpURLConnection) url.openConnection();
68
+ BufferedReader reader = new BufferedReader(
69
+ new InputStreamReader(conn.getInputStream()));
70
+ String line;
71
+ while ((line = reader.readLine()) != null) {
72
+ resp.getWriter().println(line);
73
+ }
74
+ }
75
+ }`,
76
+ expectedRuleIds: ["SEC-001"],
77
+ category: "security",
78
+ difficulty: "medium",
79
+ },
80
+ // ═══════════════════════════════════════════════════════════════════════════
81
+ // SSTI — Server-Side Template Injection
82
+ // ═══════════════════════════════════════════════════════════════════════════
83
+ {
84
+ id: "sec-deep-ssti-flask",
85
+ description: "SSTI in Flask via render_template_string with user input",
86
+ language: "python",
87
+ code: `from flask import Flask, request, render_template_string
88
+
89
+ app = Flask(__name__)
90
+
91
+ @app.route('/greet')
92
+ def greet():
93
+ name = request.args.get('name', 'World')
94
+ template = f'<h1>Hello {name}!</h1>'
95
+ return render_template_string(template)`,
96
+ expectedRuleIds: ["CYBER-001", "SEC-001"],
97
+ category: "security",
98
+ difficulty: "medium",
99
+ },
100
+ {
101
+ id: "sec-deep-ssti-nunjucks",
102
+ description: "SSTI in Node.js via nunjucks.renderString",
103
+ language: "typescript",
104
+ code: `import express from "express";
105
+ import nunjucks from "nunjucks";
106
+
107
+ const app = express();
108
+ app.get("/render", (req, res) => {
109
+ const template = req.query.template as string;
110
+ const result = nunjucks.renderString(template, { user: req.query.user });
111
+ res.send(result);
112
+ });`,
113
+ expectedRuleIds: ["CYBER-001"],
114
+ category: "security",
115
+ difficulty: "medium",
116
+ },
117
+ {
118
+ id: "sec-deep-ssti-erb-ruby",
119
+ description: "SSTI in Ruby via ERB.new with user input",
120
+ language: "ruby",
121
+ code: `require 'sinatra'
122
+ require 'erb'
123
+
124
+ get '/template' do
125
+ user_template = params[:template]
126
+ result = ERB.new(user_template).result(binding)
127
+ result
128
+ end`,
129
+ expectedRuleIds: ["CYBER-001"],
130
+ category: "security",
131
+ difficulty: "hard",
132
+ },
133
+ // ═══════════════════════════════════════════════════════════════════════════
134
+ // NoSQL Injection
135
+ // ═══════════════════════════════════════════════════════════════════════════
136
+ {
137
+ id: "sec-deep-nosql-mongo-find",
138
+ description: "NoSQL injection via req.body passed directly to MongoDB find",
139
+ language: "typescript",
140
+ code: `import express from "express";
141
+ import { MongoClient } from "mongodb";
142
+
143
+ const app = express();
144
+ app.use(express.json());
145
+
146
+ app.post("/users/search", async (req, res) => {
147
+ const client = new MongoClient("mongodb://localhost:27017");
148
+ const db = client.db("myapp");
149
+ const users = await db.collection("users").find(req.body).toArray();
150
+ res.json(users);
151
+ });`,
152
+ expectedRuleIds: ["CYBER-001"],
153
+ category: "injection",
154
+ difficulty: "medium",
155
+ },
156
+ {
157
+ id: "sec-deep-nosql-deleteMany",
158
+ description: "NoSQL injection via unvalidated query in deleteMany",
159
+ language: "typescript",
160
+ code: `import express from "express";
161
+ const app = express();
162
+ app.use(express.json());
163
+
164
+ app.delete("/items", async (req, res) => {
165
+ const filter = req.body.filter;
166
+ const result = await db.collection("items").deleteMany(filter);
167
+ res.json({ deleted: result.deletedCount });
168
+ });`,
169
+ expectedRuleIds: ["SEC-001"],
170
+ category: "injection",
171
+ difficulty: "medium",
172
+ },
173
+ {
174
+ id: "sec-deep-nosql-aggregation",
175
+ description: "NoSQL injection via user-controlled aggregation pipeline",
176
+ language: "typescript",
177
+ code: `import express from "express";
178
+ const app = express();
179
+ app.use(express.json());
180
+
181
+ app.post("/analytics", async (req, res) => {
182
+ const pipeline = req.body.pipeline;
183
+ const results = await db.collection("events").aggregate(pipeline).toArray();
184
+ res.json(results);
185
+ });`,
186
+ expectedRuleIds: ["COMP-001", "SOV-001"],
187
+ category: "injection",
188
+ difficulty: "hard",
189
+ },
190
+ // ═══════════════════════════════════════════════════════════════════════════
191
+ // Open Redirect
192
+ // ═══════════════════════════════════════════════════════════════════════════
193
+ {
194
+ id: "sec-deep-open-redirect-express",
195
+ description: "Open redirect via req.query parameter in Express",
196
+ language: "typescript",
197
+ code: `import express from "express";
198
+ const app = express();
199
+
200
+ app.get("/login/callback", (req, res) => {
201
+ const returnUrl = req.query.returnUrl as string;
202
+ res.redirect(returnUrl);
203
+ });`,
204
+ expectedRuleIds: ["CYBER-001", "SEC-001"],
205
+ category: "security",
206
+ difficulty: "easy",
207
+ },
208
+ {
209
+ id: "sec-deep-open-redirect-java",
210
+ description: "Open redirect in Java servlet via sendRedirect",
211
+ language: "java",
212
+ code: `import javax.servlet.http.*;
213
+
214
+ public class LoginCallback extends HttpServlet {
215
+ protected void doGet(HttpServletRequest req, HttpServletResponse resp)
216
+ throws java.io.IOException {
217
+ String redirectUrl = req.getParameter("next");
218
+ resp.sendRedirect(redirectUrl);
219
+ }
220
+ }`,
221
+ expectedRuleIds: ["CYBER-001"],
222
+ category: "security",
223
+ difficulty: "easy",
224
+ },
225
+ {
226
+ id: "sec-deep-open-redirect-flask",
227
+ description: "Open redirect in Flask via redirect with user input",
228
+ language: "python",
229
+ code: `from flask import Flask, request, redirect
230
+
231
+ app = Flask(__name__)
232
+
233
+ @app.route('/redirect')
234
+ def handle_redirect():
235
+ target = request.args.get('url', '/')
236
+ return redirect(target)`,
237
+ expectedRuleIds: ["CYBER-001", "SEC-001"],
238
+ category: "security",
239
+ difficulty: "easy",
240
+ },
241
+ // ═══════════════════════════════════════════════════════════════════════════
242
+ // Deserialization
243
+ // ═══════════════════════════════════════════════════════════════════════════
244
+ {
245
+ id: "sec-deep-deserial-python-yaml",
246
+ description: "Unsafe YAML deserialization with yaml.load without SafeLoader",
247
+ language: "python",
248
+ code: `import yaml
249
+ from flask import Flask, request
250
+
251
+ app = Flask(__name__)
252
+
253
+ @app.route('/config', methods=['POST'])
254
+ def upload_config():
255
+ data = yaml.load(request.data)
256
+ return str(data)`,
257
+ expectedRuleIds: ["SEC-001", "CYBER-001"],
258
+ category: "security",
259
+ difficulty: "medium",
260
+ },
261
+ {
262
+ id: "sec-deep-deserial-php-unserialize",
263
+ description: "Unsafe PHP unserialize with user input",
264
+ language: "php",
265
+ code: `<?php
266
+ $data = $_POST['data'];
267
+ $obj = unserialize($data);
268
+ echo $obj->name;
269
+ ?>`,
270
+ expectedRuleIds: ["SEC-001", "CYBER-001"],
271
+ category: "security",
272
+ difficulty: "easy",
273
+ },
274
+ {
275
+ id: "sec-deep-deserial-java-object-stream",
276
+ description: "Java ObjectInputStream deserialization of untrusted data",
277
+ language: "java",
278
+ code: `import java.io.*;
279
+ import javax.servlet.http.*;
280
+
281
+ public class DataServlet extends HttpServlet {
282
+ protected void doPost(HttpServletRequest req, HttpServletResponse resp)
283
+ throws IOException, ClassNotFoundException {
284
+ ObjectInputStream ois = new ObjectInputStream(req.getInputStream());
285
+ Object obj = ois.readObject();
286
+ resp.getWriter().println("Received: " + obj.toString());
287
+ }
288
+ }`,
289
+ expectedRuleIds: ["SEC-001", "CYBER-001"],
290
+ category: "security",
291
+ difficulty: "medium",
292
+ },
293
+ {
294
+ id: "sec-deep-deserial-ruby-marshal",
295
+ description: "Ruby Marshal.load with user-supplied data",
296
+ language: "ruby",
297
+ code: `require 'sinatra'
298
+
299
+ post '/import' do
300
+ data = request.body.read
301
+ obj = Marshal.load(data)
302
+ "Imported: #{obj.inspect}"
303
+ end`,
304
+ expectedRuleIds: ["SEC-001"],
305
+ category: "security",
306
+ difficulty: "medium",
307
+ },
308
+ {
309
+ id: "sec-deep-deserial-csharp-binary",
310
+ description: "C# BinaryFormatter deserialization of untrusted stream",
311
+ language: "csharp",
312
+ code: `using System;
313
+ using System.IO;
314
+ using System.Runtime.Serialization.Formatters.Binary;
315
+ using Microsoft.AspNetCore.Mvc;
316
+
317
+ [ApiController]
318
+ public class ImportController : ControllerBase
319
+ {
320
+ [HttpPost("import")]
321
+ public IActionResult Import()
322
+ {
323
+ var formatter = new BinaryFormatter();
324
+ var obj = formatter.Deserialize(Request.Body);
325
+ return Ok(obj.ToString());
326
+ }
327
+ }`,
328
+ expectedRuleIds: ["SEC-001"],
329
+ category: "security",
330
+ difficulty: "medium",
331
+ },
332
+ // ═══════════════════════════════════════════════════════════════════════════
333
+ // XXE — XML External Entity
334
+ // ═══════════════════════════════════════════════════════════════════════════
335
+ {
336
+ id: "sec-deep-xxe-python-etree",
337
+ description: "Python XXE via ElementTree without defusedxml",
338
+ language: "python",
339
+ code: `import xml.etree.ElementTree as ET
340
+ from flask import Flask, request
341
+
342
+ app = Flask(__name__)
343
+
344
+ @app.route('/parse', methods=['POST'])
345
+ def parse_xml():
346
+ tree = ET.parse(request.stream)
347
+ root = tree.getroot()
348
+ return root.tag`,
349
+ expectedRuleIds: ["SEC-001"],
350
+ category: "security",
351
+ difficulty: "medium",
352
+ },
353
+ {
354
+ id: "sec-deep-xxe-csharp-xmlreader",
355
+ description: "C# XXE via XmlReader without DtdProcessing.Prohibit",
356
+ language: "csharp",
357
+ code: `using System.Xml;
358
+ using Microsoft.AspNetCore.Mvc;
359
+
360
+ [ApiController]
361
+ public class XmlController : ControllerBase
362
+ {
363
+ [HttpPost("parse")]
364
+ public IActionResult ParseXml()
365
+ {
366
+ var settings = new XmlReaderSettings();
367
+ var reader = XmlReader.Create(Request.Body, settings);
368
+ while (reader.Read())
369
+ {
370
+ if (reader.NodeType == XmlNodeType.Element)
371
+ return Ok(reader.Name);
372
+ }
373
+ return NoContent();
374
+ }
375
+ }`,
376
+ expectedRuleIds: ["SEC-001"],
377
+ category: "security",
378
+ difficulty: "hard",
379
+ },
380
+ // ═══════════════════════════════════════════════════════════════════════════
381
+ // LDAP Injection
382
+ // ═══════════════════════════════════════════════════════════════════════════
383
+ {
384
+ id: "sec-deep-ldap-csharp",
385
+ description: "LDAP injection in C# via DirectorySearcher",
386
+ language: "csharp",
387
+ code: `using System.DirectoryServices;
388
+ using Microsoft.AspNetCore.Mvc;
389
+
390
+ [ApiController]
391
+ public class LdapController : ControllerBase
392
+ {
393
+ [HttpGet("user")]
394
+ public IActionResult FindUser([FromQuery] string username)
395
+ {
396
+ var searcher = new DirectorySearcher();
397
+ searcher.Filter = "(uid=" + username + ")";
398
+ var result = searcher.FindOne();
399
+ return Ok(result?.Properties["cn"][0]);
400
+ }
401
+ }`,
402
+ expectedRuleIds: ["CYBER-001"],
403
+ category: "injection",
404
+ difficulty: "hard",
405
+ },
406
+ // ═══════════════════════════════════════════════════════════════════════════
407
+ // Prototype Pollution
408
+ // ═══════════════════════════════════════════════════════════════════════════
409
+ {
410
+ id: "sec-deep-proto-merge-user-input",
411
+ description: "Prototype pollution via deep merge with user input",
412
+ language: "typescript",
413
+ code: `import express from "express";
414
+ import _ from "lodash";
415
+
416
+ const app = express();
417
+ app.use(express.json());
418
+
419
+ const defaults = { theme: "light", lang: "en" };
420
+
421
+ app.post("/settings", (req, res) => {
422
+ const settings = _.merge({}, defaults, req.body);
423
+ res.json(settings);
424
+ });`,
425
+ expectedRuleIds: ["CYBER-001", "SEC-001"],
426
+ category: "security",
427
+ difficulty: "medium",
428
+ },
429
+ {
430
+ id: "sec-deep-proto-recursive-assign",
431
+ description: "Prototype pollution via recursive Object.assign with user keys",
432
+ language: "javascript",
433
+ code: `const express = require("express");
434
+ const app = express();
435
+ app.use(express.json());
436
+
437
+ function deepAssign(target, source) {
438
+ for (const key of Object.keys(source)) {
439
+ if (typeof source[key] === "object" && source[key] !== null) {
440
+ target[key] = target[key] || {};
441
+ deepAssign(target[key], source[key]);
442
+ } else {
443
+ target[key] = source[key];
444
+ }
445
+ }
446
+ return target;
447
+ }
448
+
449
+ app.post("/config", (req, res) => {
450
+ const config = deepAssign({}, req.body);
451
+ res.json(config);
452
+ });`,
453
+ expectedRuleIds: ["SEC-001", "CYBER-001"],
454
+ category: "security",
455
+ difficulty: "hard",
456
+ },
457
+ // ═══════════════════════════════════════════════════════════════════════════
458
+ // CORS Misconfiguration
459
+ // ═══════════════════════════════════════════════════════════════════════════
460
+ {
461
+ id: "sec-deep-cors-reflect-origin",
462
+ description: "CORS reflects Origin header without validation",
463
+ language: "typescript",
464
+ code: `import express from "express";
465
+ const app = express();
466
+
467
+ app.use((req, res, next) => {
468
+ res.setHeader("Access-Control-Allow-Origin", req.headers.origin || "*");
469
+ res.setHeader("Access-Control-Allow-Credentials", "true");
470
+ res.setHeader("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE");
471
+ next();
472
+ });
473
+
474
+ app.get("/api/data", (req, res) => {
475
+ res.json({ secret: "sensitive data" });
476
+ });`,
477
+ expectedRuleIds: ["CYBER-001"],
478
+ category: "security",
479
+ difficulty: "medium",
480
+ },
481
+ {
482
+ id: "sec-deep-cors-wildcard-creds",
483
+ description: "CORS wildcard with credentials in Python Flask",
484
+ language: "python",
485
+ code: `from flask import Flask
486
+ from flask_cors import CORS
487
+
488
+ app = Flask(__name__)
489
+ CORS(app, origins="*", supports_credentials=True)
490
+
491
+ @app.route('/api/profile')
492
+ def profile():
493
+ return {"email": "user@example.com"}`,
494
+ expectedRuleIds: ["SEC-001"],
495
+ category: "security",
496
+ difficulty: "easy",
497
+ },
498
+ // ═══════════════════════════════════════════════════════════════════════════
499
+ // Crypto / TLS Weaknesses
500
+ // ═══════════════════════════════════════════════════════════════════════════
501
+ {
502
+ id: "sec-deep-ecb-mode",
503
+ description: "AES in ECB mode leaks patterns",
504
+ language: "python",
505
+ code: `from Crypto.Cipher import AES
506
+
507
+ def encrypt_data(key, data):
508
+ cipher = AES.new(key, AES.MODE_ECB)
509
+ padded = data.ljust(16)
510
+ return cipher.encrypt(padded.encode())`,
511
+ expectedRuleIds: ["CYBER-001", "SEC-001"],
512
+ category: "security",
513
+ difficulty: "medium",
514
+ },
515
+ {
516
+ id: "sec-deep-static-iv",
517
+ description: "AES with static IV defeats CBC randomization",
518
+ language: "typescript",
519
+ code: `import crypto from "crypto";
520
+
521
+ const STATIC_IV = Buffer.from("0123456789abcdef");
522
+ const KEY = crypto.randomBytes(32);
523
+
524
+ function encrypt(data: string): string {
525
+ const cipher = crypto.createCipheriv("aes-256-cbc", KEY, STATIC_IV);
526
+ let encrypted = cipher.update(data, "utf8", "hex");
527
+ encrypted += cipher.final("hex");
528
+ return encrypted;
529
+ }`,
530
+ expectedRuleIds: ["SEC-001"],
531
+ category: "security",
532
+ difficulty: "hard",
533
+ },
534
+ {
535
+ id: "sec-deep-weak-rng-token",
536
+ description: "Math.random used for generating auth tokens",
537
+ language: "javascript",
538
+ code: `function generateToken() {
539
+ const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
540
+ let token = "";
541
+ for (let i = 0; i < 32; i++) {
542
+ token += chars.charAt(Math.floor(Math.random() * chars.length));
543
+ }
544
+ return token;
545
+ }
546
+
547
+ function createSession(userId) {
548
+ const sessionToken = generateToken();
549
+ sessions[sessionToken] = { userId, createdAt: Date.now() };
550
+ return sessionToken;
551
+ }`,
552
+ expectedRuleIds: ["SEC-001"],
553
+ category: "security",
554
+ difficulty: "medium",
555
+ },
556
+ {
557
+ id: "sec-deep-tls-skip-python",
558
+ description: "Python requests with verify=False disables TLS",
559
+ language: "python",
560
+ code: `import requests
561
+
562
+ def fetch_api_data(url, token):
563
+ response = requests.get(
564
+ url,
565
+ headers={"Authorization": f"Bearer {token}"},
566
+ verify=False
567
+ )
568
+ return response.json()`,
569
+ expectedRuleIds: ["CYBER-001", "SEC-001", "AUTH-001"],
570
+ category: "security",
571
+ difficulty: "easy",
572
+ },
573
+ {
574
+ id: "sec-deep-tls-skip-go",
575
+ description: "Go HTTP client with InsecureSkipVerify",
576
+ language: "go",
577
+ code: `package main
578
+
579
+ import (
580
+ "crypto/tls"
581
+ "net/http"
582
+ )
583
+
584
+ func createClient() *http.Client {
585
+ tr := &http.Transport{
586
+ TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
587
+ }
588
+ return &http.Client{Transport: tr}
589
+ }`,
590
+ expectedRuleIds: ["CYBER-001", "SEC-001"],
591
+ category: "security",
592
+ difficulty: "easy",
593
+ },
594
+ {
595
+ id: "sec-deep-sha1-password",
596
+ description: "SHA-1 for password hashing is cryptographically broken",
597
+ language: "python",
598
+ code: `import hashlib
599
+
600
+ def hash_password(password, salt):
601
+ return hashlib.sha1((salt + password).encode()).hexdigest()
602
+
603
+ def verify_password(password, salt, stored_hash):
604
+ return hash_password(password, salt) == stored_hash`,
605
+ expectedRuleIds: ["AUTH-001", "SEC-001"],
606
+ category: "auth",
607
+ difficulty: "easy",
608
+ },
609
+ {
610
+ id: "sec-deep-des-encryption",
611
+ description: "DES encryption is broken — 56-bit key is brute-forceable",
612
+ language: "java",
613
+ code: `import javax.crypto.Cipher;
614
+ import javax.crypto.spec.SecretKeySpec;
615
+
616
+ public class LegacyCrypto {
617
+ public static byte[] encrypt(byte[] data, byte[] key) throws Exception {
618
+ SecretKeySpec keySpec = new SecretKeySpec(key, "DES");
619
+ Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
620
+ cipher.init(Cipher.ENCRYPT_MODE, keySpec);
621
+ return cipher.doFinal(data);
622
+ }
623
+ }`,
624
+ expectedRuleIds: ["SEC-001", "CYBER-001"],
625
+ category: "security",
626
+ difficulty: "medium",
627
+ },
628
+ // ═══════════════════════════════════════════════════════════════════════════
629
+ // JWT Vulnerabilities
630
+ // ═══════════════════════════════════════════════════════════════════════════
631
+ {
632
+ id: "sec-deep-jwt-decode-no-verify",
633
+ description: "JWT decoded without signature verification",
634
+ language: "typescript",
635
+ code: `import jwt from "jsonwebtoken";
636
+ import express from "express";
637
+
638
+ const app = express();
639
+
640
+ app.get("/profile", (req, res) => {
641
+ const token = req.headers.authorization?.split(" ")[1];
642
+ const payload = jwt.decode(token);
643
+ res.json({ user: payload });
644
+ });`,
645
+ expectedRuleIds: ["AUTH-001", "SEC-001"],
646
+ category: "auth",
647
+ difficulty: "medium",
648
+ },
649
+ {
650
+ id: "sec-deep-jwt-no-algorithm-restrict",
651
+ description: "JWT verify without algorithm restriction",
652
+ language: "typescript",
653
+ code: `import jwt from "jsonwebtoken";
654
+ import express from "express";
655
+
656
+ const app = express();
657
+ const SECRET = "my-secret-key";
658
+
659
+ app.get("/api/data", (req, res) => {
660
+ const token = req.headers.authorization?.split(" ")[1];
661
+ const payload = jwt.verify(token, SECRET);
662
+ res.json(payload);
663
+ });`,
664
+ expectedRuleIds: ["SEC-001"],
665
+ category: "auth",
666
+ difficulty: "hard",
667
+ },
668
+ // ═══════════════════════════════════════════════════════════════════════════
669
+ // Session Management & CSRF
670
+ // ═══════════════════════════════════════════════════════════════════════════
671
+ {
672
+ id: "sec-deep-cookie-no-flags",
673
+ description: "Cookies set without Secure or HttpOnly flags",
674
+ language: "typescript",
675
+ code: `import express from "express";
676
+ const app = express();
677
+
678
+ app.post("/login", (req, res) => {
679
+ const sessionId = generateSessionId();
680
+ res.cookie("session", sessionId);
681
+ res.json({ success: true });
682
+ });`,
683
+ expectedRuleIds: ["AUTH-001"],
684
+ category: "auth",
685
+ difficulty: "easy",
686
+ },
687
+ {
688
+ id: "sec-deep-session-no-regeneration",
689
+ description: "Session not regenerated after authentication",
690
+ language: "typescript",
691
+ code: `import express from "express";
692
+ import session from "express-session";
693
+
694
+ const app = express();
695
+ app.use(session({ secret: "keyboard cat" }));
696
+
697
+ app.post("/login", (req, res) => {
698
+ if (authenticate(req.body.user, req.body.pass)) {
699
+ req.session.userId = req.body.user;
700
+ req.session.isAuthenticated = true;
701
+ res.json({ success: true });
702
+ }
703
+ });`,
704
+ expectedRuleIds: ["AUTH-001", "SEC-001"],
705
+ category: "auth",
706
+ difficulty: "hard",
707
+ },
708
+ {
709
+ id: "sec-deep-csrf-no-protection",
710
+ description: "POST endpoints without CSRF protection",
711
+ language: "typescript",
712
+ code: `import express from "express";
713
+ import session from "express-session";
714
+
715
+ const app = express();
716
+ app.use(express.urlencoded({ extended: true }));
717
+ app.use(session({ secret: "secret123" }));
718
+
719
+ app.post("/transfer", (req, res) => {
720
+ const { to, amount } = req.body;
721
+ transferFunds(req.session.userId, to, amount);
722
+ res.send("Transfer complete");
723
+ });
724
+
725
+ app.post("/change-email", (req, res) => {
726
+ updateEmail(req.session.userId, req.body.email);
727
+ res.send("Email updated");
728
+ });`,
729
+ expectedRuleIds: ["AUTH-001", "SEC-001"],
730
+ category: "auth",
731
+ difficulty: "medium",
732
+ },
733
+ // ═══════════════════════════════════════════════════════════════════════════
734
+ // Mass Assignment
735
+ // ═══════════════════════════════════════════════════════════════════════════
736
+ {
737
+ id: "sec-deep-mass-assign-express",
738
+ description: "Mass assignment via spread of req.body into model create",
739
+ language: "typescript",
740
+ code: `import express from "express";
741
+ const app = express();
742
+ app.use(express.json());
743
+
744
+ app.post("/users", async (req, res) => {
745
+ const user = await User.create({ ...req.body });
746
+ res.json(user);
747
+ });
748
+
749
+ app.put("/users/:id", async (req, res) => {
750
+ await User.update(req.body, { where: { id: req.params.id } });
751
+ res.json({ success: true });
752
+ });`,
753
+ expectedRuleIds: ["CYBER-001", "SEC-001"],
754
+ category: "security",
755
+ difficulty: "medium",
756
+ },
757
+ {
758
+ id: "sec-deep-mass-assign-django",
759
+ description: "Mass assignment in Django via **request.data",
760
+ language: "python",
761
+ code: `from rest_framework.views import APIView
762
+ from rest_framework.response import Response
763
+ from .models import User
764
+
765
+ class UserView(APIView):
766
+ def post(self, request):
767
+ user = User(**request.data)
768
+ user.save()
769
+ return Response({"id": user.id})
770
+
771
+ def put(self, request, pk):
772
+ user = User.objects.get(pk=pk)
773
+ for key, value in request.data.items():
774
+ setattr(user, key, value)
775
+ user.save()
776
+ return Response({"updated": True})`,
777
+ expectedRuleIds: ["CYBER-001", "SEC-001"],
778
+ category: "security",
779
+ difficulty: "medium",
780
+ },
781
+ {
782
+ id: "sec-deep-mass-assign-ruby",
783
+ description: "Mass assignment in Rails without strong parameters",
784
+ language: "ruby",
785
+ code: `class UsersController < ApplicationController
786
+ def create
787
+ user = User.create(params[:user])
788
+ render json: user
789
+ end
790
+
791
+ def update
792
+ user = User.find(params[:id])
793
+ user.update(params[:user])
794
+ render json: user
795
+ end
796
+ end`,
797
+ expectedRuleIds: ["CYBER-001"],
798
+ category: "security",
799
+ difficulty: "easy",
800
+ },
801
+ // ═══════════════════════════════════════════════════════════════════════════
802
+ // ReDoS — Regular Expression DoS
803
+ // ═══════════════════════════════════════════════════════════════════════════
804
+ {
805
+ id: "sec-deep-redos-user-regex",
806
+ description: "User input used directly in RegExp constructor",
807
+ language: "typescript",
808
+ code: `import express from "express";
809
+ const app = express();
810
+
811
+ app.get("/search", (req, res) => {
812
+ const pattern = new RegExp(req.query.q as string, "i");
813
+ const results = items.filter(item => pattern.test(item.name));
814
+ res.json(results);
815
+ });`,
816
+ expectedRuleIds: ["CYBER-001"],
817
+ category: "security",
818
+ difficulty: "medium",
819
+ },
820
+ {
821
+ id: "sec-deep-redos-python-compile",
822
+ description: "Python re.compile with user-controlled pattern",
823
+ language: "python",
824
+ code: `import re
825
+ from flask import Flask, request
826
+
827
+ app = Flask(__name__)
828
+
829
+ @app.route('/search')
830
+ def search():
831
+ pattern = re.compile(request.args.get('regex'))
832
+ results = [item for item in items if pattern.search(item)]
833
+ return {"results": results}`,
834
+ expectedRuleIds: ["CYBER-001"],
835
+ category: "security",
836
+ difficulty: "medium",
837
+ },
838
+ // ═══════════════════════════════════════════════════════════════════════════
839
+ // SQL Injection — advanced patterns
840
+ // ═══════════════════════════════════════════════════════════════════════════
841
+ {
842
+ id: "sec-deep-sqli-format-string-python",
843
+ description: "SQL injection via Python format string",
844
+ language: "python",
845
+ code: `from flask import Flask, request
846
+ import sqlite3
847
+
848
+ app = Flask(__name__)
849
+
850
+ @app.route('/users')
851
+ def get_users():
852
+ conn = sqlite3.connect('app.db')
853
+ sort_col = request.args.get('sort', 'name')
854
+ query = "SELECT * FROM users ORDER BY {}".format(sort_col)
855
+ results = conn.execute(query).fetchall()
856
+ return {"users": results}`,
857
+ expectedRuleIds: ["CYBER-001", "SEC-001", "DB-001"],
858
+ category: "injection",
859
+ difficulty: "medium",
860
+ },
861
+ {
862
+ id: "sec-deep-sqli-csharp-concat",
863
+ description: "SQL injection in C# via string concatenation",
864
+ language: "csharp",
865
+ code: `using Microsoft.AspNetCore.Mvc;
866
+ using System.Data.SqlClient;
867
+
868
+ [ApiController]
869
+ public class SearchController : ControllerBase
870
+ {
871
+ [HttpGet("search")]
872
+ public IActionResult Search([FromQuery] string term)
873
+ {
874
+ var conn = new SqlConnection(connString);
875
+ conn.Open();
876
+ var cmd = new SqlCommand(
877
+ "SELECT * FROM products WHERE name LIKE '%" + term + "%'", conn);
878
+ var reader = cmd.ExecuteReader();
879
+ return Ok(reader);
880
+ }
881
+ }`,
882
+ expectedRuleIds: ["CYBER-001", "SEC-001", "DB-001"],
883
+ category: "injection",
884
+ difficulty: "easy",
885
+ },
886
+ {
887
+ id: "sec-deep-sqli-go-sprintf",
888
+ description: "SQL injection in Go via fmt.Sprintf",
889
+ language: "go",
890
+ code: `package main
891
+
892
+ import (
893
+ "database/sql"
894
+ "fmt"
895
+ "net/http"
896
+ )
897
+
898
+ func searchHandler(w http.ResponseWriter, r *http.Request) {
899
+ term := r.URL.Query().Get("q")
900
+ query := fmt.Sprintf("SELECT * FROM items WHERE name = '%s'", term)
901
+ rows, err := db.Query(query)
902
+ if err != nil {
903
+ http.Error(w, err.Error(), 500)
904
+ return
905
+ }
906
+ defer rows.Close()
907
+ }`,
908
+ expectedRuleIds: ["CYBER-001", "SEC-001", "DB-001"],
909
+ category: "injection",
910
+ difficulty: "easy",
911
+ },
912
+ {
913
+ id: "sec-deep-sqli-ruby-interpolation",
914
+ description: "SQL injection in Ruby via string interpolation",
915
+ language: "ruby",
916
+ code: `class ProductsController < ApplicationController
917
+ def search
918
+ term = params[:q]
919
+ @products = ActiveRecord::Base.connection.execute(
920
+ "SELECT * FROM products WHERE name LIKE '%#{term}%'"
921
+ )
922
+ render json: @products
923
+ end
924
+ end`,
925
+ expectedRuleIds: ["SEC-001"],
926
+ category: "injection",
927
+ difficulty: "easy",
928
+ },
929
+ // ═══════════════════════════════════════════════════════════════════════════
930
+ // Command Injection — multi-language
931
+ // ═══════════════════════════════════════════════════════════════════════════
932
+ {
933
+ id: "sec-deep-cmdi-python-subprocess",
934
+ description: "Command injection via Python subprocess with shell=True",
935
+ language: "python",
936
+ code: `import subprocess
937
+ from flask import Flask, request
938
+
939
+ app = Flask(__name__)
940
+
941
+ @app.route('/ping')
942
+ def ping():
943
+ host = request.args.get('host')
944
+ result = subprocess.run(
945
+ f"ping -c 4 {host}",
946
+ shell=True,
947
+ capture_output=True,
948
+ text=True
949
+ )
950
+ return result.stdout`,
951
+ expectedRuleIds: ["SEC-001"],
952
+ category: "injection",
953
+ difficulty: "easy",
954
+ },
955
+ {
956
+ id: "sec-deep-cmdi-ruby-backtick",
957
+ description: "Command injection via Ruby backtick interpolation",
958
+ language: "ruby",
959
+ code: `require 'sinatra'
960
+
961
+ get '/lookup' do
962
+ domain = params[:domain]
963
+ result = \`nslookup #{domain}\`
964
+ result
965
+ end`,
966
+ expectedRuleIds: ["CYBER-001", "SEC-001"],
967
+ category: "injection",
968
+ difficulty: "easy",
969
+ },
970
+ {
971
+ id: "sec-deep-cmdi-php-system",
972
+ description: "Command injection via PHP system() with GET parameter",
973
+ language: "php",
974
+ code: `<?php
975
+ $filename = $_GET['file'];
976
+ system("cat /var/log/" . $filename);
977
+ ?>`,
978
+ expectedRuleIds: ["CYBER-001", "SEC-001"],
979
+ category: "injection",
980
+ difficulty: "easy",
981
+ },
982
+ // ═══════════════════════════════════════════════════════════════════════════
983
+ // Path Traversal — multi-language
984
+ // ═══════════════════════════════════════════════════════════════════════════
985
+ {
986
+ id: "sec-deep-path-traversal-python",
987
+ description: "Path traversal in Python via os.path.join with user input",
988
+ language: "python",
989
+ code: `import os
990
+ from flask import Flask, request, send_file
991
+
992
+ app = Flask(__name__)
993
+
994
+ @app.route('/download')
995
+ def download():
996
+ filename = request.args.get('file')
997
+ filepath = os.path.join('/var/uploads', filename)
998
+ return send_file(filepath)`,
999
+ expectedRuleIds: ["DATA-001", "CLOUD-001", "SOV-001", "PORTA-001"],
1000
+ category: "security",
1001
+ difficulty: "medium",
1002
+ },
1003
+ {
1004
+ id: "sec-deep-path-traversal-csharp",
1005
+ description: "Path traversal in C# via Path.Combine without validation",
1006
+ language: "csharp",
1007
+ code: `using Microsoft.AspNetCore.Mvc;
1008
+ using System.IO;
1009
+
1010
+ [ApiController]
1011
+ public class FileController : ControllerBase
1012
+ {
1013
+ [HttpGet("download")]
1014
+ public IActionResult Download([FromQuery] string fileName)
1015
+ {
1016
+ var path = Path.Combine("/uploads", fileName);
1017
+ var bytes = System.IO.File.ReadAllBytes(path);
1018
+ return File(bytes, "application/octet-stream");
1019
+ }
1020
+ }`,
1021
+ expectedRuleIds: ["DATA-001", "COST-001"],
1022
+ category: "security",
1023
+ difficulty: "medium",
1024
+ },
1025
+ // ═══════════════════════════════════════════════════════════════════════════
1026
+ // XSS — multi-language
1027
+ // ═══════════════════════════════════════════════════════════════════════════
1028
+ {
1029
+ id: "sec-deep-xss-php-echo",
1030
+ description: "Reflected XSS via PHP echo without htmlspecialchars",
1031
+ language: "php",
1032
+ code: `<?php
1033
+ $name = $_GET['name'];
1034
+ echo "<h1>Welcome, " . $name . "</h1>";
1035
+ echo "<p>Your search: " . $_POST['query'] . "</p>";
1036
+ ?>`,
1037
+ expectedRuleIds: ["CYBER-001"],
1038
+ category: "xss",
1039
+ difficulty: "easy",
1040
+ },
1041
+ {
1042
+ id: "sec-deep-xss-ruby-html-safe",
1043
+ description: "XSS in Ruby via html_safe on user input",
1044
+ language: "ruby",
1045
+ code: `class CommentsController < ApplicationController
1046
+ def show
1047
+ @comment = Comment.find(params[:id])
1048
+ @rendered = @comment.body.html_safe
1049
+ end
1050
+ end`,
1051
+ expectedRuleIds: ["CYBER-001"],
1052
+ category: "xss",
1053
+ difficulty: "medium",
1054
+ },
1055
+ {
1056
+ id: "sec-deep-xss-go-fprintf",
1057
+ description: "XSS in Go via fmt.Fprintf without escaping",
1058
+ language: "go",
1059
+ code: `package main
1060
+
1061
+ import (
1062
+ "fmt"
1063
+ "net/http"
1064
+ )
1065
+
1066
+ func greetHandler(w http.ResponseWriter, r *http.Request) {
1067
+ name := r.URL.Query().Get("name")
1068
+ fmt.Fprintf(w, "<h1>Hello %s</h1>", name)
1069
+ }`,
1070
+ expectedRuleIds: ["SEC-001"],
1071
+ category: "xss",
1072
+ difficulty: "easy",
1073
+ },
1074
+ // ═══════════════════════════════════════════════════════════════════════════
1075
+ // Hardcoded Credentials — multi-language
1076
+ // ═══════════════════════════════════════════════════════════════════════════
1077
+ {
1078
+ id: "sec-deep-hardcoded-creds-env-file",
1079
+ description: "Hardcoded credentials in environment variable assignments",
1080
+ language: "typescript",
1081
+ code: `const config = {
1082
+ DB_HOST: "postgres.internal.company.com",
1083
+ DB_USER: "admin",
1084
+ DB_PASSWORD: "Pr0duct10n_P@ss!",
1085
+ STRIPE_SECRET_KEY: "sk_test_FAKE_KEY_FOR_BENCHMARK_TEST",
1086
+ JWT_SECRET: "my-super-secret-jwt-key-2024",
1087
+ REDIS_PASSWORD: "r3d1s_s3cur3_key",
1088
+ };`,
1089
+ expectedRuleIds: ["AUTH-001", "DATA-001"],
1090
+ category: "auth",
1091
+ difficulty: "easy",
1092
+ },
1093
+ {
1094
+ id: "sec-deep-hardcoded-creds-python-class",
1095
+ description: "Hardcoded credentials in Python class",
1096
+ language: "python",
1097
+ code: `class DatabaseConfig:
1098
+ HOST = "db.production.internal"
1099
+ PORT = 5432
1100
+ USERNAME = "app_user"
1101
+ PASSWORD = "X7k#mP9$vL2nQ"
1102
+ DATABASE = "production_db"
1103
+
1104
+ class AWSConfig:
1105
+ ACCESS_KEY = "AKIAIOSFODNN7EXAMPLE"
1106
+ SECRET_KEY = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
1107
+ REGION = "us-east-1"`,
1108
+ expectedRuleIds: ["AUTH-001", "DATA-001"],
1109
+ category: "auth",
1110
+ difficulty: "easy",
1111
+ },
1112
+ {
1113
+ id: "sec-deep-hardcoded-conn-string",
1114
+ description: "Hardcoded database connection string with credentials",
1115
+ language: "typescript",
1116
+ code: `import { Pool } from "pg";
1117
+
1118
+ const pool = new Pool({
1119
+ connectionString: "postgres://admin:s3cret_pw@db.example.com:5432/myapp"
1120
+ });
1121
+
1122
+ export async function getUsers() {
1123
+ const result = await pool.query("SELECT * FROM users");
1124
+ return result.rows;
1125
+ }`,
1126
+ expectedRuleIds: ["AUTH-001", "DATA-001", "DB-001"],
1127
+ category: "auth",
1128
+ difficulty: "easy",
1129
+ },
1130
+ // ═══════════════════════════════════════════════════════════════════════════
1131
+ // Timing Attacks
1132
+ // ═══════════════════════════════════════════════════════════════════════════
1133
+ {
1134
+ id: "sec-deep-timing-hmac-compare",
1135
+ description: "HMAC verification with === allows timing attack",
1136
+ language: "typescript",
1137
+ code: `import crypto from "crypto";
1138
+ import express from "express";
1139
+
1140
+ const app = express();
1141
+ const WEBHOOK_SECRET = process.env.WEBHOOK_SECRET!;
1142
+
1143
+ app.post("/webhook", express.raw({ type: "application/json" }), (req, res) => {
1144
+ const signature = req.headers["x-signature"] as string;
1145
+ const expected = crypto.createHmac("sha256", WEBHOOK_SECRET)
1146
+ .update(req.body)
1147
+ .digest("hex");
1148
+ if (signature === expected) {
1149
+ processWebhook(req.body);
1150
+ res.sendStatus(200);
1151
+ } else {
1152
+ res.sendStatus(403);
1153
+ }
1154
+ });`,
1155
+ expectedRuleIds: ["CYBER-001", "SEC-001", "AUTH-001"],
1156
+ category: "security",
1157
+ difficulty: "hard",
1158
+ },
1159
+ {
1160
+ id: "sec-deep-timing-api-key",
1161
+ description: "API key comparison with == allows timing attack",
1162
+ language: "python",
1163
+ code: `from flask import Flask, request, abort
1164
+
1165
+ app = Flask(__name__)
1166
+ API_KEY = "sk-prod-abc123xyz789"
1167
+
1168
+ @app.before_request
1169
+ def check_api_key():
1170
+ key = request.headers.get("X-API-Key")
1171
+ if key != API_KEY:
1172
+ abort(403)`,
1173
+ expectedRuleIds: ["AUTH-001"],
1174
+ category: "auth",
1175
+ difficulty: "hard",
1176
+ },
1177
+ // ═══════════════════════════════════════════════════════════════════════════
1178
+ // Insecure HTTP
1179
+ // ═══════════════════════════════════════════════════════════════════════════
1180
+ {
1181
+ id: "sec-deep-http-auth-endpoint",
1182
+ description: "Authentication over insecure HTTP",
1183
+ language: "typescript",
1184
+ code: `async function login(username: string, password: string) {
1185
+ const response = await fetch("http://api.production.com/auth/login", {
1186
+ method: "POST",
1187
+ headers: { "Content-Type": "application/json" },
1188
+ body: JSON.stringify({ username, password }),
1189
+ });
1190
+ return response.json();
1191
+ }`,
1192
+ expectedRuleIds: ["CYBER-001", "SEC-001"],
1193
+ category: "security",
1194
+ difficulty: "easy",
1195
+ },
1196
+ // ═══════════════════════════════════════════════════════════════════════════
1197
+ // Insecure Websocket
1198
+ // ═══════════════════════════════════════════════════════════════════════════
1199
+ {
1200
+ id: "sec-deep-insecure-websocket",
1201
+ description: "WebSocket connection over insecure ws:// protocol",
1202
+ language: "typescript",
1203
+ code: `const socket = new WebSocket("ws://api.example.com/realtime");
1204
+
1205
+ socket.onopen = () => {
1206
+ socket.send(JSON.stringify({ token: authToken, action: "subscribe" }));
1207
+ };
1208
+
1209
+ socket.onmessage = (event) => {
1210
+ const data = JSON.parse(event.data);
1211
+ updateDashboard(data);
1212
+ };`,
1213
+ expectedRuleIds: ["CYBER-001"],
1214
+ category: "security",
1215
+ difficulty: "easy",
1216
+ },
1217
+ // ═══════════════════════════════════════════════════════════════════════════
1218
+ // Debug Mode / Admin Backdoor
1219
+ // ═══════════════════════════════════════════════════════════════════════════
1220
+ {
1221
+ id: "sec-deep-debug-mode-flask",
1222
+ description: "Flask running in debug mode in production",
1223
+ language: "python",
1224
+ code: `from flask import Flask
1225
+
1226
+ app = Flask(__name__)
1227
+
1228
+ @app.route('/')
1229
+ def index():
1230
+ return "Hello World"
1231
+
1232
+ if __name__ == '__main__':
1233
+ app.run(debug=True, host='0.0.0.0', port=80)`,
1234
+ expectedRuleIds: ["CYBER-001"],
1235
+ category: "security",
1236
+ difficulty: "easy",
1237
+ },
1238
+ {
1239
+ id: "sec-deep-admin-backdoor",
1240
+ description: "Hardcoded admin credentials as backdoor",
1241
+ language: "typescript",
1242
+ code: `import express from "express";
1243
+ const app = express();
1244
+ app.use(express.json());
1245
+
1246
+ app.post("/login", (req, res) => {
1247
+ const { username, password } = req.body;
1248
+ if (username === "admin" && password === "admin123!") {
1249
+ res.json({ token: generateToken({ role: "superadmin" }) });
1250
+ return;
1251
+ }
1252
+ const user = authenticateUser(username, password);
1253
+ if (user) {
1254
+ res.json({ token: generateToken(user) });
1255
+ } else {
1256
+ res.status(401).json({ error: "Invalid credentials" });
1257
+ }
1258
+ });`,
1259
+ expectedRuleIds: ["CYBER-001", "AUTH-001"],
1260
+ category: "auth",
1261
+ difficulty: "medium",
1262
+ },
1263
+ // ═══════════════════════════════════════════════════════════════════════════
1264
+ // Weak CSP / Security Headers
1265
+ // ═══════════════════════════════════════════════════════════════════════════
1266
+ {
1267
+ id: "sec-deep-weak-csp",
1268
+ description: "CSP with unsafe-inline and unsafe-eval defeats XSS protection",
1269
+ language: "typescript",
1270
+ code: `import express from "express";
1271
+ const app = express();
1272
+
1273
+ app.use((req, res, next) => {
1274
+ res.setHeader(
1275
+ "Content-Security-Policy",
1276
+ "default-src *; script-src * 'unsafe-inline' 'unsafe-eval'; style-src * 'unsafe-inline'"
1277
+ );
1278
+ next();
1279
+ });
1280
+
1281
+ app.get("/", (req, res) => {
1282
+ res.send("<html><body>Hello</body></html>");
1283
+ });`,
1284
+ expectedRuleIds: ["A11Y-001", "I18N-001", "SEC-001"],
1285
+ category: "security",
1286
+ difficulty: "medium",
1287
+ },
1288
+ // ═══════════════════════════════════════════════════════════════════════════
1289
+ // Insecure Session Config
1290
+ // ═══════════════════════════════════════════════════════════════════════════
1291
+ {
1292
+ id: "sec-deep-insecure-session",
1293
+ description: "Express session with weak secret and no secure cookie flags",
1294
+ language: "typescript",
1295
+ code: `import express from "express";
1296
+ import session from "express-session";
1297
+
1298
+ const app = express();
1299
+ app.use(session({
1300
+ secret: "keyboard cat",
1301
+ resave: false,
1302
+ saveUninitialized: true,
1303
+ }));
1304
+
1305
+ app.get("/dashboard", (req, res) => {
1306
+ if (!req.session.userId) {
1307
+ res.redirect("/login");
1308
+ }
1309
+ res.send("Dashboard");
1310
+ });`,
1311
+ expectedRuleIds: ["CYBER-001", "AUTH-001"],
1312
+ category: "auth",
1313
+ difficulty: "medium",
1314
+ },
1315
+ // ═══════════════════════════════════════════════════════════════════════════
1316
+ // Header Injection / CRLF
1317
+ // ═══════════════════════════════════════════════════════════════════════════
1318
+ {
1319
+ id: "sec-deep-crlf-header-injection",
1320
+ description: "HTTP header injection via user-controlled header value",
1321
+ language: "typescript",
1322
+ code: `import express from "express";
1323
+ const app = express();
1324
+
1325
+ app.get("/redirect", (req, res) => {
1326
+ const location = req.query.url as string;
1327
+ res.setHeader("Location", location);
1328
+ res.status(302).send("Redirecting...");
1329
+ });`,
1330
+ expectedRuleIds: ["CYBER-001"],
1331
+ category: "security",
1332
+ difficulty: "hard",
1333
+ },
1334
+ // ═══════════════════════════════════════════════════════════════════════════
1335
+ // PHP File Inclusion
1336
+ // ═══════════════════════════════════════════════════════════════════════════
1337
+ {
1338
+ id: "sec-deep-php-lfi",
1339
+ description: "PHP local file inclusion via user-controlled include path",
1340
+ language: "php",
1341
+ code: `<?php
1342
+ $page = $_GET['page'];
1343
+ include("pages/" . $page . ".php");
1344
+ ?>`,
1345
+ expectedRuleIds: ["CYBER-001"],
1346
+ category: "injection",
1347
+ difficulty: "easy",
1348
+ },
1349
+ {
1350
+ id: "sec-deep-php-rfi",
1351
+ description: "PHP remote file inclusion via require with user variable",
1352
+ language: "php",
1353
+ code: `<?php
1354
+ $module = $_GET['module'];
1355
+ require($module);
1356
+ ?>`,
1357
+ expectedRuleIds: ["CYBER-001"],
1358
+ category: "injection",
1359
+ difficulty: "easy",
1360
+ },
1361
+ // ═══════════════════════════════════════════════════════════════════════════
1362
+ // Format String Attack
1363
+ // ═══════════════════════════════════════════════════════════════════════════
1364
+ {
1365
+ id: "sec-deep-format-string-python",
1366
+ description: "Format string attack via user-controlled .format() template",
1367
+ language: "python",
1368
+ code: `from flask import Flask, request
1369
+
1370
+ app = Flask(__name__)
1371
+
1372
+ @app.route('/greet')
1373
+ def greet():
1374
+ template = request.args.get('template', 'Hello {name}!')
1375
+ name = request.args.get('name', 'World')
1376
+ return template.format(name=name, config=app.config)`,
1377
+ expectedRuleIds: ["SEC-001"],
1378
+ category: "security",
1379
+ difficulty: "hard",
1380
+ },
1381
+ // ═══════════════════════════════════════════════════════════════════════════
1382
+ // Insecure Encryption Config
1383
+ // ═══════════════════════════════════════════════════════════════════════════
1384
+ {
1385
+ id: "sec-deep-go-cipher-no-gcm",
1386
+ description: "Go AES without GCM mode exposes data integrity risk",
1387
+ language: "go",
1388
+ code: `package main
1389
+
1390
+ import (
1391
+ "crypto/aes"
1392
+ "crypto/cipher"
1393
+ )
1394
+
1395
+ func encrypt(key, plaintext []byte) ([]byte, error) {
1396
+ block, err := aes.NewCipher(key)
1397
+ if err != nil {
1398
+ return nil, err
1399
+ }
1400
+ iv := make([]byte, aes.BlockSize)
1401
+ stream := cipher.NewCFBEncrypter(block, iv)
1402
+ ciphertext := make([]byte, len(plaintext))
1403
+ stream.XORKeyStream(ciphertext, plaintext)
1404
+ return ciphertext, nil
1405
+ }`,
1406
+ expectedRuleIds: ["SEC-001", "CYBER-001"],
1407
+ category: "security",
1408
+ difficulty: "hard",
1409
+ },
1410
+ // ═══════════════════════════════════════════════════════════════════════════
1411
+ // Hardcoded Secrets in Docker/K8s
1412
+ // ═══════════════════════════════════════════════════════════════════════════
1413
+ {
1414
+ id: "sec-deep-dockerfile-secrets",
1415
+ description: "Dockerfile with hardcoded secrets in ENV",
1416
+ language: "dockerfile",
1417
+ code: `FROM node:18-alpine
1418
+ WORKDIR /app
1419
+ COPY . .
1420
+ ENV DATABASE_URL=postgres://admin:secretpass@db:5432/prod
1421
+ ENV JWT_SECRET=my-production-jwt-secret
1422
+ ENV AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
1423
+ ENV AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
1424
+ RUN npm install
1425
+ CMD ["node", "server.js"]`,
1426
+ expectedRuleIds: ["AUTH-001", "DATA-001"],
1427
+ category: "auth",
1428
+ difficulty: "easy",
1429
+ },
1430
+ // ═══════════════════════════════════════════════════════════════════════════
1431
+ // Insecure Mobile Code
1432
+ // ═══════════════════════════════════════════════════════════════════════════
1433
+ {
1434
+ id: "sec-deep-kotlin-webview",
1435
+ description: "Kotlin WebView with JavaScript enabled loading user URL",
1436
+ language: "kotlin",
1437
+ code: `import android.webkit.WebView
1438
+ import android.os.Bundle
1439
+ import android.app.Activity
1440
+
1441
+ class BrowserActivity : Activity() {
1442
+ override fun onCreate(savedInstanceState: Bundle?) {
1443
+ super.onCreate(savedInstanceState)
1444
+ val webView = WebView(this)
1445
+ webView.settings.javaScriptEnabled = true
1446
+ val url = intent.getStringExtra("url") ?: "https://example.com"
1447
+ webView.loadUrl(url)
1448
+ setContentView(webView)
1449
+ }
1450
+ }`,
1451
+ expectedRuleIds: ["CYBER-001"],
1452
+ category: "security",
1453
+ difficulty: "medium",
1454
+ },
1455
+ // ═══════════════════════════════════════════════════════════════════════════
1456
+ // Eval / Dynamic Code Execution
1457
+ // ═══════════════════════════════════════════════════════════════════════════
1458
+ {
1459
+ id: "sec-deep-eval-template-engine",
1460
+ description: "Eval used as template engine with user input",
1461
+ language: "javascript",
1462
+ code: `const express = require("express");
1463
+ const app = express();
1464
+
1465
+ app.get("/calc", (req, res) => {
1466
+ const expression = req.query.expr;
1467
+ try {
1468
+ const result = eval(expression);
1469
+ res.json({ result });
1470
+ } catch (e) {
1471
+ res.status(400).json({ error: "Invalid expression" });
1472
+ }
1473
+ });`,
1474
+ expectedRuleIds: ["CYBER-001", "SEC-001"],
1475
+ category: "injection",
1476
+ difficulty: "easy",
1477
+ },
1478
+ {
1479
+ id: "sec-deep-eval-python-exec",
1480
+ description: "Python exec() with user code — RCE",
1481
+ language: "python",
1482
+ code: `from flask import Flask, request
1483
+
1484
+ app = Flask(__name__)
1485
+
1486
+ @app.route('/run', methods=['POST'])
1487
+ def run_code():
1488
+ code = request.form.get('code')
1489
+ namespace = {}
1490
+ exec(code, namespace)
1491
+ return str(namespace.get('result', 'No result'))`,
1492
+ expectedRuleIds: ["CYBER-001", "SEC-001"],
1493
+ category: "injection",
1494
+ difficulty: "easy",
1495
+ },
1496
+ // ═══════════════════════════════════════════════════════════════════════════
1497
+ // Unsafe Rust
1498
+ // ═══════════════════════════════════════════════════════════════════════════
1499
+ {
1500
+ id: "sec-deep-rust-unsafe-deref",
1501
+ description: "Rust unsafe raw pointer dereference without safety comment",
1502
+ language: "rust",
1503
+ code: `pub fn process_buffer(ptr: *const u8, len: usize) -> Vec<u8> {
1504
+ let mut result = Vec::new();
1505
+ unsafe {
1506
+ let slice = std::slice::from_raw_parts(ptr, len);
1507
+ for &byte in slice {
1508
+ result.push(byte ^ 0xFF);
1509
+ }
1510
+ }
1511
+ result
1512
+ }
1513
+
1514
+ pub fn transmute_cast<T, U>(value: T) -> U {
1515
+ unsafe {
1516
+ std::mem::transmute_copy(&value)
1517
+ }
1518
+ }`,
1519
+ expectedRuleIds: ["CYBER-001", "SEC-001"],
1520
+ category: "security",
1521
+ difficulty: "medium",
1522
+ },
1523
+ // ═══════════════════════════════════════════════════════════════════════════
1524
+ // CLEAN SECURITY CODE — FP Validation
1525
+ // ═══════════════════════════════════════════════════════════════════════════
1526
+ {
1527
+ id: "clean-sec-parameterized-queries",
1528
+ description: "Clean: SQL queries using parameterized statements",
1529
+ language: "typescript",
1530
+ code: `import { Pool } from "pg";
1531
+
1532
+ const pool = new Pool({ connectionString: process.env.DATABASE_URL });
1533
+
1534
+ export async function getUserById(id: string) {
1535
+ const result = await pool.query("SELECT id, name, email FROM users WHERE id = $1", [id]);
1536
+ return result.rows[0];
1537
+ }
1538
+
1539
+ export async function searchUsers(term: string, limit: number) {
1540
+ const result = await pool.query(
1541
+ "SELECT id, name FROM users WHERE name ILIKE $1 LIMIT $2",
1542
+ [\`%\${term}%\`, Math.min(limit, 100)]
1543
+ );
1544
+ return result.rows;
1545
+ }`,
1546
+ expectedRuleIds: [],
1547
+ category: "clean",
1548
+ difficulty: "easy",
1549
+ },
1550
+ {
1551
+ id: "clean-sec-bcrypt-auth",
1552
+ description: "Clean: Authentication with bcrypt and proper session management",
1553
+ language: "typescript",
1554
+ code: `import bcrypt from "bcrypt";
1555
+ import crypto from "crypto";
1556
+
1557
+ const SALT_ROUNDS = 12;
1558
+
1559
+ export async function hashPassword(password: string): Promise<string> {
1560
+ return bcrypt.hash(password, SALT_ROUNDS);
1561
+ }
1562
+
1563
+ export async function verifyPassword(password: string, hash: string): Promise<boolean> {
1564
+ return bcrypt.compare(password, hash);
1565
+ }
1566
+
1567
+ export function generateSecureToken(): string {
1568
+ return crypto.randomBytes(32).toString("hex");
1569
+ }
1570
+
1571
+ export function verifySignature(payload: string, signature: string, secret: string): boolean {
1572
+ const expected = crypto.createHmac("sha256", secret).update(payload).digest("hex");
1573
+ return crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected));
1574
+ }`,
1575
+ expectedRuleIds: [],
1576
+ category: "clean",
1577
+ difficulty: "easy",
1578
+ },
1579
+ {
1580
+ id: "clean-sec-input-validation",
1581
+ description: "Clean: Express routes with Zod input validation",
1582
+ language: "typescript",
1583
+ code: `import express from "express";
1584
+ import { z } from "zod";
1585
+ import helmet from "helmet";
1586
+ import rateLimit from "express-rate-limit";
1587
+
1588
+ const app = express();
1589
+ app.use(helmet());
1590
+ app.use(express.json({ limit: "1mb" }));
1591
+ app.use(rateLimit({ windowMs: 15 * 60 * 1000, max: 100 }));
1592
+
1593
+ const CreateUserSchema = z.object({
1594
+ name: z.string().min(1).max(100),
1595
+ email: z.string().email(),
1596
+ age: z.number().int().min(13).max(150),
1597
+ });
1598
+
1599
+ app.post("/users", async (req, res) => {
1600
+ const parsed = CreateUserSchema.safeParse(req.body);
1601
+ if (!parsed.success) {
1602
+ return res.status(400).json({ errors: parsed.error.issues });
1603
+ }
1604
+ const user = await createUser(parsed.data);
1605
+ res.status(201).json(user);
1606
+ });`,
1607
+ expectedRuleIds: [],
1608
+ category: "clean",
1609
+ difficulty: "easy",
1610
+ },
1611
+ {
1612
+ id: "clean-sec-csrf-protection",
1613
+ description: "Clean: Express with CSRF protection and secure cookies",
1614
+ language: "typescript",
1615
+ code: `import express from "express";
1616
+ import session from "express-session";
1617
+ import csrf from "csurf";
1618
+ import helmet from "helmet";
1619
+
1620
+ const app = express();
1621
+ app.use(helmet());
1622
+ app.use(express.urlencoded({ extended: false }));
1623
+ app.use(session({
1624
+ secret: process.env.SESSION_SECRET!,
1625
+ resave: false,
1626
+ saveUninitialized: false,
1627
+ cookie: { secure: true, httpOnly: true, sameSite: "strict", maxAge: 3600000 },
1628
+ }));
1629
+ app.use(csrf());
1630
+
1631
+ app.post("/transfer", (req, res) => {
1632
+ const { to, amount } = req.body;
1633
+ transferFunds(req.session.userId!, to, Number(amount));
1634
+ res.json({ success: true });
1635
+ });`,
1636
+ expectedRuleIds: [],
1637
+ category: "clean",
1638
+ difficulty: "medium",
1639
+ },
1640
+ {
1641
+ id: "clean-sec-jwt-proper",
1642
+ description: "Clean: JWT with algorithm restriction and proper verification",
1643
+ language: "typescript",
1644
+ code: `import jwt from "jsonwebtoken";
1645
+ import express from "express";
1646
+
1647
+ const app = express();
1648
+ const JWT_SECRET = process.env.JWT_SECRET!;
1649
+
1650
+ function authenticateToken(req: express.Request, res: express.Response, next: express.NextFunction) {
1651
+ const token = req.headers.authorization?.split(" ")[1];
1652
+ if (!token) return res.sendStatus(401);
1653
+ try {
1654
+ const payload = jwt.verify(token, JWT_SECRET, { algorithms: ["HS256"] });
1655
+ req.user = payload;
1656
+ next();
1657
+ } catch {
1658
+ res.sendStatus(403);
1659
+ }
1660
+ }
1661
+
1662
+ app.get("/api/profile", authenticateToken, (req, res) => {
1663
+ res.json(req.user);
1664
+ });`,
1665
+ expectedRuleIds: [],
1666
+ category: "clean",
1667
+ difficulty: "medium",
1668
+ },
1669
+ {
1670
+ id: "clean-sec-python-secure-api",
1671
+ description: "Clean: Python FastAPI with security best practices",
1672
+ language: "python",
1673
+ code: `from fastapi import FastAPI, Depends, HTTPException, status
1674
+ from fastapi.security import OAuth2PasswordBearer
1675
+ from pydantic import BaseModel, EmailStr, constr
1676
+ import bcrypt
1677
+ import secrets
1678
+
1679
+ app = FastAPI()
1680
+ oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
1681
+
1682
+ class UserCreate(BaseModel):
1683
+ email: EmailStr
1684
+ password: constr(min_length=12)
1685
+ name: constr(min_length=1, max_length=100)
1686
+
1687
+ @app.post("/users", status_code=201)
1688
+ async def create_user(user: UserCreate):
1689
+ hashed = bcrypt.hashpw(user.password.encode(), bcrypt.gensalt(12))
1690
+ return await save_user(user.email, user.name, hashed)
1691
+
1692
+ @app.get("/profile")
1693
+ async def get_profile(token: str = Depends(oauth2_scheme)):
1694
+ user = await verify_token(token)
1695
+ if not user:
1696
+ raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED)
1697
+ return {"email": user.email, "name": user.name}`,
1698
+ expectedRuleIds: [],
1699
+ category: "clean",
1700
+ difficulty: "medium",
1701
+ },
1702
+ {
1703
+ id: "clean-sec-go-secure-handler",
1704
+ description: "Clean: Go HTTP handler with input validation and parameterized query",
1705
+ language: "go",
1706
+ code: `package main
1707
+
1708
+ import (
1709
+ "database/sql"
1710
+ "encoding/json"
1711
+ "net/http"
1712
+ "regexp"
1713
+ )
1714
+
1715
+ var emailRegex = regexp.MustCompile("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$")
1716
+
1717
+ type CreateUserRequest struct {
1718
+ Name string \`json:"name"\`
1719
+ Email string \`json:"email"\`
1720
+ }
1721
+
1722
+ func createUserHandler(db *sql.DB) http.HandlerFunc {
1723
+ return func(w http.ResponseWriter, r *http.Request) {
1724
+ var req CreateUserRequest
1725
+ if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
1726
+ http.Error(w, "Invalid JSON", http.StatusBadRequest)
1727
+ return
1728
+ }
1729
+ if len(req.Name) < 1 || len(req.Name) > 100 {
1730
+ http.Error(w, "Invalid name", http.StatusBadRequest)
1731
+ return
1732
+ }
1733
+ if !emailRegex.MatchString(req.Email) {
1734
+ http.Error(w, "Invalid email", http.StatusBadRequest)
1735
+ return
1736
+ }
1737
+ _, err := db.Exec("INSERT INTO users (name, email) VALUES ($1, $2)", req.Name, req.Email)
1738
+ if err != nil {
1739
+ http.Error(w, "Internal error", http.StatusInternalServerError)
1740
+ return
1741
+ }
1742
+ w.WriteHeader(http.StatusCreated)
1743
+ }
1744
+ }`,
1745
+ expectedRuleIds: [],
1746
+ category: "clean",
1747
+ difficulty: "medium",
1748
+ },
1749
+ {
1750
+ id: "clean-sec-rust-safe-crypto",
1751
+ description: "Clean: Rust crypto with ring library — no unsafe blocks",
1752
+ language: "rust",
1753
+ code: `use ring::hmac;
1754
+ use ring::rand::{SecureRandom, SystemRandom};
1755
+
1756
+ pub fn generate_token() -> Result<String, ring::error::Unspecified> {
1757
+ let rng = SystemRandom::new();
1758
+ let mut token = vec![0u8; 32];
1759
+ rng.fill(&mut token)?;
1760
+ Ok(hex::encode(token))
1761
+ }
1762
+
1763
+ pub fn verify_hmac(key: &[u8], message: &[u8], signature: &[u8]) -> bool {
1764
+ let hmac_key = hmac::Key::new(hmac::HMAC_SHA256, key);
1765
+ hmac::verify(&hmac_key, message, signature).is_ok()
1766
+ }`,
1767
+ expectedRuleIds: [],
1768
+ category: "clean",
1769
+ difficulty: "easy",
1770
+ },
1771
+ {
1772
+ id: "clean-sec-java-prepared-stmt",
1773
+ description: "Clean: Java with PreparedStatement and input validation",
1774
+ language: "java",
1775
+ code: `import javax.servlet.http.*;
1776
+ import java.sql.*;
1777
+
1778
+ public class UserServlet extends HttpServlet {
1779
+ private final DataSource dataSource;
1780
+
1781
+ public UserServlet(DataSource ds) { this.dataSource = ds; }
1782
+
1783
+ protected void doGet(HttpServletRequest req, HttpServletResponse resp)
1784
+ throws java.io.IOException {
1785
+ String idParam = req.getParameter("id");
1786
+ if (idParam == null || !idParam.matches("\\\\d+")) {
1787
+ resp.sendError(400, "Invalid ID");
1788
+ return;
1789
+ }
1790
+ try (Connection conn = dataSource.getConnection();
1791
+ PreparedStatement ps = conn.prepareStatement(
1792
+ "SELECT id, name, email FROM users WHERE id = ?")) {
1793
+ ps.setLong(1, Long.parseLong(idParam));
1794
+ ResultSet rs = ps.executeQuery();
1795
+ if (rs.next()) {
1796
+ resp.getWriter().println(rs.getString("name"));
1797
+ } else {
1798
+ resp.sendError(404, "Not found");
1799
+ }
1800
+ } catch (SQLException e) {
1801
+ resp.sendError(500, "Internal error");
1802
+ }
1803
+ }
1804
+ }`,
1805
+ expectedRuleIds: [],
1806
+ category: "clean",
1807
+ difficulty: "medium",
1808
+ },
1809
+ {
1810
+ id: "clean-sec-csharp-ef-core",
1811
+ description: "Clean: C# Entity Framework Core with model validation",
1812
+ language: "csharp",
1813
+ code: `using Microsoft.AspNetCore.Mvc;
1814
+ using Microsoft.EntityFrameworkCore;
1815
+ using System.ComponentModel.DataAnnotations;
1816
+
1817
+ public class CreateUserDto
1818
+ {
1819
+ [Required, StringLength(100, MinimumLength = 1)]
1820
+ public string Name { get; set; }
1821
+
1822
+ [Required, EmailAddress]
1823
+ public string Email { get; set; }
1824
+ }
1825
+
1826
+ [ApiController]
1827
+ [Route("api/users")]
1828
+ public class UsersController : ControllerBase
1829
+ {
1830
+ private readonly AppDbContext _db;
1831
+
1832
+ public UsersController(AppDbContext db) => _db = db;
1833
+
1834
+ [HttpGet("{id}")]
1835
+ public async Task<IActionResult> GetById(int id)
1836
+ {
1837
+ var user = await _db.Users.FindAsync(id);
1838
+ return user is null ? NotFound() : Ok(user);
1839
+ }
1840
+
1841
+ [HttpPost]
1842
+ public async Task<IActionResult> Create([FromBody] CreateUserDto dto)
1843
+ {
1844
+ if (!ModelState.IsValid) return BadRequest(ModelState);
1845
+ var user = new User { Name = dto.Name, Email = dto.Email };
1846
+ _db.Users.Add(user);
1847
+ await _db.SaveChangesAsync();
1848
+ return CreatedAtAction(nameof(GetById), new { id = user.Id }, user);
1849
+ }
1850
+ }`,
1851
+ expectedRuleIds: [],
1852
+ category: "clean",
1853
+ difficulty: "medium",
1854
+ },
1855
+ {
1856
+ id: "clean-sec-ruby-strong-params",
1857
+ description: "Clean: Rails controller with strong parameters and validation",
1858
+ language: "ruby",
1859
+ code: `class UsersController < ApplicationController
1860
+ before_action :authenticate_user!
1861
+
1862
+ def create
1863
+ @user = User.new(user_params)
1864
+ if @user.save
1865
+ render json: @user, status: :created
1866
+ else
1867
+ render json: { errors: @user.errors.full_messages }, status: :unprocessable_entity
1868
+ end
1869
+ end
1870
+
1871
+ def update
1872
+ @user = User.find(params[:id])
1873
+ authorize @user
1874
+ if @user.update(user_params)
1875
+ render json: @user
1876
+ else
1877
+ render json: { errors: @user.errors.full_messages }, status: :unprocessable_entity
1878
+ end
1879
+ end
1880
+
1881
+ private
1882
+
1883
+ def user_params
1884
+ params.require(:user).permit(:name, :email)
1885
+ end
1886
+ end`,
1887
+ expectedRuleIds: [],
1888
+ category: "clean",
1889
+ difficulty: "easy",
1890
+ },
1891
+ {
1892
+ id: "clean-sec-php-pdo-prepared",
1893
+ description: "Clean: PHP with PDO prepared statements and validation",
1894
+ language: "php",
1895
+ code: `<?php
1896
+ declare(strict_types=1);
1897
+
1898
+ function getUserById(PDO $pdo, int $id): ?array {
1899
+ $stmt = $pdo->prepare("SELECT id, name, email FROM users WHERE id = :id");
1900
+ $stmt->execute(['id' => $id]);
1901
+ return $stmt->fetch(PDO::FETCH_ASSOC) ?: null;
1902
+ }
1903
+
1904
+ function createUser(PDO $pdo, string $name, string $email): int {
1905
+ if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
1906
+ throw new InvalidArgumentException("Invalid email");
1907
+ }
1908
+ if (strlen($name) < 1 || strlen($name) > 100) {
1909
+ throw new InvalidArgumentException("Invalid name length");
1910
+ }
1911
+ $stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (:name, :email)");
1912
+ $stmt->execute(['name' => $name, 'email' => $email]);
1913
+ return (int) $pdo->lastInsertId();
1914
+ }
1915
+ ?>`,
1916
+ expectedRuleIds: [],
1917
+ category: "clean",
1918
+ difficulty: "easy",
1919
+ },
1920
+ {
1921
+ id: "clean-sec-python-defusedxml",
1922
+ description: "Clean: Python XML parsing with defusedxml",
1923
+ language: "python",
1924
+ code: `import defusedxml.ElementTree as ET
1925
+ from flask import Flask, request
1926
+
1927
+ app = Flask(__name__)
1928
+
1929
+ @app.route('/parse', methods=['POST'])
1930
+ def parse_xml():
1931
+ try:
1932
+ tree = ET.fromstring(request.data)
1933
+ items = [elem.text for elem in tree.findall('.//item')]
1934
+ return {"items": items}
1935
+ except ET.ParseError:
1936
+ return {"error": "Invalid XML"}, 400`,
1937
+ expectedRuleIds: [],
1938
+ category: "clean",
1939
+ difficulty: "easy",
1940
+ },
1941
+ {
1942
+ id: "clean-sec-go-template-safe",
1943
+ description: "Clean: Go HTML template with auto-escaping",
1944
+ language: "go",
1945
+ code: `package main
1946
+
1947
+ import (
1948
+ "html/template"
1949
+ "net/http"
1950
+ )
1951
+
1952
+ var tmpl = template.Must(template.ParseFiles("templates/greet.html"))
1953
+
1954
+ func greetHandler(w http.ResponseWriter, r *http.Request) {
1955
+ name := r.URL.Query().Get("name")
1956
+ if len(name) > 100 {
1957
+ http.Error(w, "Name too long", http.StatusBadRequest)
1958
+ return
1959
+ }
1960
+ data := struct{ Name string }{Name: name}
1961
+ tmpl.Execute(w, data)
1962
+ }`,
1963
+ expectedRuleIds: [],
1964
+ category: "clean",
1965
+ difficulty: "easy",
1966
+ },
1967
+ {
1968
+ id: "clean-sec-kotlin-secure-app",
1969
+ description: "Clean: Kotlin Spring Boot with security configuration",
1970
+ language: "kotlin",
1971
+ code: `import org.springframework.security.config.annotation.web.builders.HttpSecurity
1972
+ import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity
1973
+ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder
1974
+ import org.springframework.context.annotation.Bean
1975
+ import org.springframework.context.annotation.Configuration
1976
+
1977
+ @Configuration
1978
+ @EnableWebSecurity
1979
+ class SecurityConfig {
1980
+ @Bean
1981
+ fun passwordEncoder() = BCryptPasswordEncoder(12)
1982
+
1983
+ @Bean
1984
+ fun securityFilterChain(http: HttpSecurity) = http
1985
+ .csrf { it.enable() }
1986
+ .authorizeHttpRequests { auth ->
1987
+ auth.requestMatchers("/api/public/**").permitAll()
1988
+ .anyRequest().authenticated()
1989
+ }
1990
+ .sessionManagement { session ->
1991
+ session.maximumSessions(1)
1992
+ }
1993
+ .build()
1994
+ }`,
1995
+ expectedRuleIds: [],
1996
+ category: "clean",
1997
+ difficulty: "medium",
1998
+ },
1999
+ {
2000
+ id: "clean-sec-csharp-anti-forgery",
2001
+ description: "Clean: ASP.NET controller with anti-forgery and authorization",
2002
+ language: "csharp",
2003
+ code: `using Microsoft.AspNetCore.Mvc;
2004
+ using Microsoft.AspNetCore.Authorization;
2005
+ using Microsoft.AspNetCore.Antiforgery;
2006
+
2007
+ [ApiController]
2008
+ [Authorize]
2009
+ [Route("api/[controller]")]
2010
+ public class TransferController : ControllerBase
2011
+ {
2012
+ private readonly ITransferService _service;
2013
+
2014
+ public TransferController(ITransferService service) => _service = service;
2015
+
2016
+ [HttpPost]
2017
+ [ValidateAntiForgeryToken]
2018
+ public async Task<IActionResult> Transfer([FromBody] TransferRequest request)
2019
+ {
2020
+ if (!ModelState.IsValid) return BadRequest(ModelState);
2021
+ var userId = User.FindFirst("sub")?.Value;
2022
+ if (userId == null) return Unauthorized();
2023
+ await _service.Transfer(userId, request.To, request.Amount);
2024
+ return Ok(new { success = true });
2025
+ }
2026
+ }`,
2027
+ expectedRuleIds: [],
2028
+ category: "clean",
2029
+ difficulty: "medium",
2030
+ },
2031
+ {
2032
+ id: "clean-sec-python-safe-redirect",
2033
+ description: "Clean: Python Flask with validated redirect URL",
2034
+ language: "python",
2035
+ code: `from flask import Flask, request, redirect, abort
2036
+ from urllib.parse import urlparse
2037
+
2038
+ app = Flask(__name__)
2039
+
2040
+ ALLOWED_HOSTS = {"example.com", "app.example.com"}
2041
+
2042
+ def is_safe_url(url: str) -> bool:
2043
+ parsed = urlparse(url)
2044
+ if not parsed.scheme or parsed.scheme not in ("http", "https"):
2045
+ return parsed.path.startswith("/")
2046
+ return parsed.hostname in ALLOWED_HOSTS
2047
+
2048
+ @app.route('/redirect')
2049
+ def safe_redirect():
2050
+ target = request.args.get('url', '/')
2051
+ if not is_safe_url(target):
2052
+ abort(400, "Invalid redirect URL")
2053
+ return redirect(target)`,
2054
+ expectedRuleIds: [],
2055
+ category: "clean",
2056
+ difficulty: "medium",
2057
+ },
2058
+ {
2059
+ id: "clean-sec-swift-secure-networking",
2060
+ description: "Clean: Swift with URLSession and certificate pinning",
2061
+ language: "swift",
2062
+ code: `import Foundation
2063
+ import Security
2064
+
2065
+ class SecureNetworkService: NSObject, URLSessionDelegate {
2066
+ private lazy var session: URLSession = {
2067
+ let config = URLSessionConfiguration.default
2068
+ config.tlsMinimumSupportedProtocolVersion = .TLSv12
2069
+ return URLSession(configuration: config, delegate: self, delegateQueue: nil)
2070
+ }()
2071
+
2072
+ func fetchData(from url: URL) async throws -> Data {
2073
+ let (data, response) = try await session.data(from: url)
2074
+ guard let httpResponse = response as? HTTPURLResponse,
2075
+ (200...299).contains(httpResponse.statusCode) else {
2076
+ throw NetworkError.invalidResponse
2077
+ }
2078
+ return data
2079
+ }
2080
+
2081
+ func urlSession(_ session: URLSession,
2082
+ didReceive challenge: URLAuthenticationChallenge,
2083
+ completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
2084
+ guard let trust = challenge.protectionSpace.serverTrust else {
2085
+ completionHandler(.cancelAuthenticationChallenge, nil)
2086
+ return
2087
+ }
2088
+ let policy = SecPolicyCreateSSL(true, challenge.protectionSpace.host as CFString)
2089
+ SecTrustSetPolicies(trust, policy)
2090
+ completionHandler(.useCredential, URLCredential(trust: trust))
2091
+ }
2092
+ }`,
2093
+ expectedRuleIds: [],
2094
+ category: "clean",
2095
+ difficulty: "hard",
2096
+ },
2097
+ {
2098
+ id: "clean-sec-rust-safe-parsing",
2099
+ description: "Clean: Rust safe string parsing without unsafe",
2100
+ language: "rust",
2101
+ code: `use std::collections::HashMap;
2102
+
2103
+ /// Parse query string into key-value pairs safely.
2104
+ pub fn parse_query_string(query: &str) -> HashMap<String, String> {
2105
+ query
2106
+ .split('&')
2107
+ .filter_map(|pair| {
2108
+ let mut parts = pair.splitn(2, '=');
2109
+ let key = parts.next()?.to_string();
2110
+ let value = parts.next().unwrap_or("").to_string();
2111
+ if key.is_empty() { None } else { Some((key, value)) }
2112
+ })
2113
+ .collect()
2114
+ }
2115
+
2116
+ /// Validate and sanitize user name input.
2117
+ pub fn sanitize_name(input: &str) -> Option<String> {
2118
+ let trimmed = input.trim();
2119
+ if trimmed.is_empty() || trimmed.len() > 100 {
2120
+ return None;
2121
+ }
2122
+ if trimmed.chars().all(|c| c.is_alphanumeric() || c == ' ' || c == '-') {
2123
+ Some(trimmed.to_string())
2124
+ } else {
2125
+ None
2126
+ }
2127
+ }`,
2128
+ expectedRuleIds: [],
2129
+ category: "clean",
2130
+ difficulty: "easy",
2131
+ },
2132
+ {
2133
+ id: "clean-sec-python-crypto-proper",
2134
+ description: "Clean: Python with proper cryptography (Fernet symmetric encryption)",
2135
+ language: "python",
2136
+ code: `from cryptography.fernet import Fernet
2137
+ from cryptography.hazmat.primitives import hashes
2138
+ from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
2139
+ import os
2140
+ import base64
2141
+
2142
+ def derive_key(password: str, salt: bytes) -> bytes:
2143
+ kdf = PBKDF2HMAC(
2144
+ algorithm=hashes.SHA256(),
2145
+ length=32,
2146
+ salt=salt,
2147
+ iterations=600_000,
2148
+ )
2149
+ return base64.urlsafe_b64encode(kdf.derive(password.encode()))
2150
+
2151
+ def encrypt_data(data: str, password: str) -> tuple[bytes, bytes]:
2152
+ salt = os.urandom(16)
2153
+ key = derive_key(password, salt)
2154
+ f = Fernet(key)
2155
+ return f.encrypt(data.encode()), salt
2156
+
2157
+ def decrypt_data(token: bytes, password: str, salt: bytes) -> str:
2158
+ key = derive_key(password, salt)
2159
+ f = Fernet(key)
2160
+ return f.decrypt(token).decode()`,
2161
+ expectedRuleIds: [],
2162
+ category: "clean",
2163
+ difficulty: "medium",
2164
+ },
2165
+ {
2166
+ id: "clean-sec-java-spring-security",
2167
+ description: "Clean: Java Spring Security configuration with CORS and CSRF",
2168
+ language: "java",
2169
+ code: `import org.springframework.context.annotation.Bean;
2170
+ import org.springframework.context.annotation.Configuration;
2171
+ import org.springframework.security.config.annotation.web.builders.HttpSecurity;
2172
+ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
2173
+ import org.springframework.security.web.SecurityFilterChain;
2174
+
2175
+ @Configuration
2176
+ public class SecurityConfig {
2177
+ @Bean
2178
+ public BCryptPasswordEncoder passwordEncoder() {
2179
+ return new BCryptPasswordEncoder(12);
2180
+ }
2181
+
2182
+ @Bean
2183
+ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
2184
+ http
2185
+ .csrf(csrf -> csrf.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()))
2186
+ .authorizeHttpRequests(auth -> auth
2187
+ .requestMatchers("/api/public/**").permitAll()
2188
+ .requestMatchers("/api/admin/**").hasRole("ADMIN")
2189
+ .anyRequest().authenticated()
2190
+ )
2191
+ .sessionManagement(session -> session
2192
+ .maximumSessions(1)
2193
+ .sessionFixation().newSession()
2194
+ )
2195
+ .headers(headers -> headers
2196
+ .contentSecurityPolicy(csp -> csp.policyDirectives("default-src 'self'"))
2197
+ );
2198
+ return http.build();
2199
+ }
2200
+ }`,
2201
+ expectedRuleIds: [],
2202
+ category: "clean",
2203
+ difficulty: "hard",
2204
+ },
2205
+ {
2206
+ id: "clean-sec-go-rate-limited-api",
2207
+ description: "Clean: Go API with rate limiting and input validation",
2208
+ language: "go",
2209
+ code: `package main
2210
+
2211
+ import (
2212
+ "encoding/json"
2213
+ "net/http"
2214
+ "sync"
2215
+ "time"
2216
+ "golang.org/x/time/rate"
2217
+ )
2218
+
2219
+ type visitor struct {
2220
+ limiter *rate.Limiter
2221
+ lastSeen time.Time
2222
+ }
2223
+
2224
+ var (
2225
+ mu sync.Mutex
2226
+ visitors = make(map[string]*visitor)
2227
+ )
2228
+
2229
+ func getVisitor(ip string) *rate.Limiter {
2230
+ mu.Lock()
2231
+ defer mu.Unlock()
2232
+ v, exists := visitors[ip]
2233
+ if !exists {
2234
+ limiter := rate.NewLimiter(10, 30)
2235
+ visitors[ip] = &visitor{limiter: limiter, lastSeen: time.Now()}
2236
+ return limiter
2237
+ }
2238
+ v.lastSeen = time.Now()
2239
+ return v.limiter
2240
+ }
2241
+
2242
+ func rateLimitMiddleware(next http.Handler) http.Handler {
2243
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
2244
+ limiter := getVisitor(r.RemoteAddr)
2245
+ if !limiter.Allow() {
2246
+ http.Error(w, "Too many requests", http.StatusTooManyRequests)
2247
+ return
2248
+ }
2249
+ next.ServeHTTP(w, r)
2250
+ })
2251
+ }`,
2252
+ expectedRuleIds: [],
2253
+ category: "clean",
2254
+ difficulty: "hard",
2255
+ },
2256
+ {
2257
+ id: "clean-sec-php-password-hash",
2258
+ description: "Clean: PHP modern password hashing with password_hash",
2259
+ language: "php",
2260
+ code: `<?php
2261
+ declare(strict_types=1);
2262
+
2263
+ function registerUser(PDO $pdo, string $email, string $password): int {
2264
+ if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
2265
+ throw new InvalidArgumentException("Invalid email");
2266
+ }
2267
+ if (strlen($password) < 12) {
2268
+ throw new InvalidArgumentException("Password too short");
2269
+ }
2270
+ $hash = password_hash($password, PASSWORD_ARGON2ID, [
2271
+ 'memory_cost' => 65536,
2272
+ 'time_cost' => 4,
2273
+ 'threads' => 3,
2274
+ ]);
2275
+ $stmt = $pdo->prepare("INSERT INTO users (email, password_hash) VALUES (:email, :hash)");
2276
+ $stmt->execute(['email' => $email, 'hash' => $hash]);
2277
+ return (int) $pdo->lastInsertId();
2278
+ }
2279
+
2280
+ function verifyLogin(PDO $pdo, string $email, string $password): bool {
2281
+ $stmt = $pdo->prepare("SELECT password_hash FROM users WHERE email = :email");
2282
+ $stmt->execute(['email' => $email]);
2283
+ $row = $stmt->fetch(PDO::FETCH_ASSOC);
2284
+ if (!$row) return false;
2285
+ return password_verify($password, $row['password_hash']);
2286
+ }
2287
+ ?>`,
2288
+ expectedRuleIds: [],
2289
+ category: "clean",
2290
+ difficulty: "easy",
2291
+ },
2292
+ {
2293
+ id: "clean-sec-sanitized-template",
2294
+ description: "Clean: Handlebars template with auto-escaping (no raw HTML)",
2295
+ language: "typescript",
2296
+ code: `import Handlebars from "handlebars";
2297
+ import express from "express";
2298
+ import helmet from "helmet";
2299
+ import DOMPurify from "isomorphic-dompurify";
2300
+
2301
+ const app = express();
2302
+ app.use(helmet());
2303
+
2304
+ const template = Handlebars.compile("<h1>Hello {{name}}</h1><p>{{message}}</p>");
2305
+
2306
+ app.get("/greet", (req, res) => {
2307
+ const name = String(req.query.name || "Guest").slice(0, 100);
2308
+ const message = DOMPurify.sanitize(String(req.query.message || "Welcome"));
2309
+ res.send(template({ name, message }));
2310
+ });`,
2311
+ expectedRuleIds: [],
2312
+ category: "clean",
2313
+ difficulty: "medium",
2314
+ },
2315
+ {
2316
+ id: "clean-sec-yaml-safe-load",
2317
+ description: "Clean: Python YAML with safe_load",
2318
+ language: "python",
2319
+ code: `import yaml
2320
+ from pathlib import Path
2321
+
2322
+ def load_config(config_path: str) -> dict:
2323
+ path = Path(config_path)
2324
+ if not path.exists():
2325
+ raise FileNotFoundError(f"Config file not found: {config_path}")
2326
+ with open(path) as f:
2327
+ config = yaml.safe_load(f)
2328
+ if not isinstance(config, dict):
2329
+ raise ValueError("Invalid config format")
2330
+ return config`,
2331
+ expectedRuleIds: [],
2332
+ category: "clean",
2333
+ difficulty: "easy",
2334
+ },
2335
+ ];