@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,1197 @@
1
+ import { getLineNumbers, getLangLineNumbers, getLangFamily, isIaCTemplate, testCode, isLikelyAnalysisCode, } from "./shared.js";
2
+ import * as LP from "../language-patterns.js";
3
+ export function analyzeCybersecurity(code, language, context) {
4
+ const findings = [];
5
+ let ruleNum = 1;
6
+ const prefix = "CYBER";
7
+ const lang = getLangFamily(language);
8
+ // Analysis code references XSS, innerHTML, and credential patterns in regex
9
+ // for detection purposes — these are not actual vulnerabilities.
10
+ if (isLikelyAnalysisCode(code))
11
+ return findings;
12
+ // ── AST context (optional — makes detection scope-aware) ──────────────────
13
+ const ast = context?.ast;
14
+ const astImports = new Set((ast?.imports ?? []).map((i) => {
15
+ const parts = i.split("/");
16
+ return (i.startsWith("@") ? parts.slice(0, 2).join("/") : parts[0]).toLowerCase();
17
+ }));
18
+ const astFunctions = ast?.functions ?? [];
19
+ // eval() / exec() usage (multi-language)
20
+ const evalLines = getLangLineNumbers(code, language, LP.EVAL_USAGE);
21
+ if (evalLines.length > 0) {
22
+ // AST scope analysis: lower confidence when eval is inside a build/config/codegen
23
+ // utility function with no user-input parameters
24
+ let evalConfidence = 0.95;
25
+ if (astFunctions.length > 0) {
26
+ const evalInSafe = evalLines.every((ln) => {
27
+ const fn = astFunctions.find((f) => ln >= f.startLine && ln <= f.endLine);
28
+ if (!fn)
29
+ return false;
30
+ return /^(?:compile|codegen|build|generate|transform|transpile|parse|serialize)/i.test(fn.name);
31
+ });
32
+ if (evalInSafe)
33
+ evalConfidence = 0.7;
34
+ }
35
+ findings.push({
36
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
37
+ severity: "critical",
38
+ title: "Dangerous eval()/exec() usage",
39
+ description: "eval(), exec(), or dynamic code compilation executes arbitrary code and is a primary vector for code injection attacks.",
40
+ lineNumbers: evalLines,
41
+ recommendation: "Remove eval() entirely. Use JSON.parse() for data parsing (JS/TS), ast.literal_eval (Python), or a proper expression parser.",
42
+ reference: "OWASP Code Injection — CWE-94",
43
+ suggestedFix: LP.isJsTs(lang) ? "Replace eval(expr) with JSON.parse(expr) or a safe parser." : undefined,
44
+ confidence: evalConfidence,
45
+ });
46
+ }
47
+ // innerHTML / dangerouslySetInnerHTML / v-html / [innerHTML]
48
+ const innerHTMLPattern = /\.innerHTML\s*=|dangerouslySetInnerHTML|v-html\s*=|\[innerHTML\]\s*=/gi;
49
+ const innerHTMLLines = getLineNumbers(code, innerHTMLPattern);
50
+ if (innerHTMLLines.length > 0) {
51
+ findings.push({
52
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
53
+ severity: "high",
54
+ title: "Potential XSS via innerHTML",
55
+ description: "Setting innerHTML, dangerouslySetInnerHTML, v-html, or [innerHTML] can lead to Cross-Site Scripting (XSS) if the content includes unsanitized user input.",
56
+ lineNumbers: innerHTMLLines,
57
+ recommendation: "Use textContent for plain text, or use a sanitization library (DOMPurify) before inserting HTML. In React, avoid dangerouslySetInnerHTML unless content is sanitized.",
58
+ reference: "OWASP XSS Prevention — CWE-79",
59
+ suggestedFix: "Sanitize with DOMPurify: el.innerHTML = DOMPurify.sanitize(untrustedHtml); or use textContent for plain text.",
60
+ confidence: 0.9,
61
+ });
62
+ }
63
+ // Command injection risk (multi-language)
64
+ const cmdLines = getLangLineNumbers(code, language, LP.COMMAND_INJECTION);
65
+ const filteredCmdLines = cmdLines.filter((lineNumber) => {
66
+ const index = lineNumber - 1;
67
+ const context = code
68
+ .split("\n")
69
+ .slice(Math.max(0, index - 3), index + 4)
70
+ .join("\n");
71
+ const dangerousSink = /\b(?:exec|execSync|spawn|spawnSync|system|popen|passthru|shell_exec|proc_open|Runtime\.getRuntime\(\)\.exec|subprocess\.(?:Popen|run|call)|os\.system|exec\.Command|ProcessBuilder)\s*\(|`[^`]*#\{/i;
72
+ const safeSink = /\bexecFile\s*\(/i;
73
+ const untrustedInput = /(?:req\.|request\.|params[\[.]|query\.|body\.|argv|input|user|prompt|command|\$_(?:GET|POST|REQUEST|COOKIE|SERVER|FILES)\[|call\.(?:parameters|receive)|r\.(?:URL|FormValue|Body|Form))/i;
74
+ const unsafeConstruction = /(?:\+\s*\w|\$\{[^}]+\}|#\{[^}]+\}|\.concat\s*\(|\.join\s*\(|shell\s*:\s*true|\.\s*\$\w+|%[sdvq]|fmt\.Sprintf)/i;
75
+ return (dangerousSink.test(context) &&
76
+ !safeSink.test(context) &&
77
+ untrustedInput.test(context) &&
78
+ unsafeConstruction.test(context));
79
+ });
80
+ if (filteredCmdLines.length > 0) {
81
+ // AST: boost confidence when the command injection is inside a route handler
82
+ // (function with decorators like @app.route or HTTP method names)
83
+ let cmdConfidence = 0.9;
84
+ if (astFunctions.length > 0) {
85
+ const inRouteHandler = filteredCmdLines.some((ln) => {
86
+ const fn = astFunctions.find((f) => ln >= f.startLine && ln <= f.endLine);
87
+ if (!fn)
88
+ return false;
89
+ return (fn.decorators?.some((d) => /route|get|post|put|delete|patch|api_view/i.test(d)) ||
90
+ /handler|controller|endpoint|route/i.test(fn.name));
91
+ });
92
+ if (inRouteHandler)
93
+ cmdConfidence = 0.95;
94
+ }
95
+ findings.push({
96
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
97
+ severity: "critical",
98
+ title: "Potential command injection",
99
+ description: "Shell commands are constructed with string concatenation/interpolation, allowing an attacker to inject arbitrary OS commands if user input is included.",
100
+ lineNumbers: filteredCmdLines,
101
+ recommendation: "Use execFile() with an argument array instead of exec(). Never concatenate user input into shell commands. Validate and sanitize all inputs.",
102
+ reference: "OWASP Command Injection — CWE-78",
103
+ suggestedFix: "Replace exec(cmd) with execFile('program', [arg1, arg2]) to prevent shell interpretation of user input.",
104
+ confidence: cmdConfidence,
105
+ });
106
+ }
107
+ // Disabled TLS / certificate validation (multi-language)
108
+ const tlsLines = getLangLineNumbers(code, language, LP.TLS_DISABLED);
109
+ if (tlsLines.length > 0) {
110
+ findings.push({
111
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
112
+ severity: "critical",
113
+ title: "TLS certificate validation disabled",
114
+ description: "TLS certificate verification is explicitly disabled, making the application vulnerable to man-in-the-middle (MITM) attacks.",
115
+ lineNumbers: tlsLines,
116
+ recommendation: "Never disable TLS certificate validation in production. Use proper CA certificates. If using self-signed certs in development, use a CA bundle instead.",
117
+ reference: "CWE-295: Improper Certificate Validation",
118
+ suggestedFix: "Remove rejectUnauthorized: false and NODE_TLS_REJECT_UNAUTHORIZED='0'. Use valid CA certificates instead.",
119
+ confidence: 0.9,
120
+ });
121
+ }
122
+ // Insecure CORS (multi-language)
123
+ const corsLines = getLangLineNumbers(code, language, LP.CORS_WILDCARD);
124
+ // Also detect CORS origin reflection: setting Access-Control-Allow-Origin to the request origin
125
+ const corsReflectionLines = [];
126
+ {
127
+ const codeLines = code.split("\n");
128
+ for (let i = 0; i < codeLines.length; i++) {
129
+ const line = codeLines[i];
130
+ if (/Access-Control-Allow-Origin/i.test(line) &&
131
+ /(?:req\.headers\.origin|request\.headers|origin|headers\[)/i.test(line) &&
132
+ !/["']\*["']/.test(line) // not a wildcard (already handled)
133
+ ) {
134
+ corsReflectionLines.push(i + 1);
135
+ }
136
+ }
137
+ }
138
+ const allCorsLines = [...new Set([...corsLines, ...corsReflectionLines])].sort((a, b) => a - b);
139
+ if (allCorsLines.length > 0) {
140
+ findings.push({
141
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
142
+ severity: "medium",
143
+ title: "Overly permissive CORS configuration",
144
+ description: "CORS is configured to allow all origins ('*') or reflects the request origin, which may allow malicious websites to make cross-origin requests to your API.",
145
+ lineNumbers: allCorsLines,
146
+ recommendation: "Restrict CORS to specific trusted origins. If credentials are used, '*' is not allowed by browsers anyway — be explicit about allowed origins.",
147
+ reference: "OWASP CORS Misconfiguration — CWE-942",
148
+ suggestedFix: "Restrict CORS origins: app.use(cors({ origin: ['https://app.example.com'], credentials: true })); never use origin: '*' with credentials.",
149
+ confidence: 0.85,
150
+ });
151
+ }
152
+ // Prototype pollution risk
153
+ // NOTE: Object.assign({}, ...) is intentionally excluded — creating a new
154
+ // empty object as the target is a safe shallow-clone pattern, not pollution.
155
+ const protoPattern = /\.__proto__|lodash\.merge|_\.merge|deepmerge|Object\.keys[^\n]*forEach[^\n]*\[/gi;
156
+ const protoLines = getLineNumbers(code, protoPattern);
157
+ if (protoLines.length > 0) {
158
+ findings.push({
159
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
160
+ severity: "medium",
161
+ title: "Potential prototype pollution risk",
162
+ description: "Direct __proto__ access or unchecked Object.assign/deep merge with user-controlled data can lead to prototype pollution attacks.",
163
+ lineNumbers: protoLines,
164
+ recommendation: "Use Object.create(null) for map-like objects, validate keys against a whitelist, and use Map instead of plain objects for dynamic keys.",
165
+ reference: "CWE-1321: Improperly Controlled Modification of Object Prototype Attributes",
166
+ suggestedFix: "Prevent prototype pollution: use Map for dynamic keys, or validate: if (key === '__proto__' || key === 'constructor') throw new Error('invalid key');",
167
+ confidence: 0.85,
168
+ });
169
+ }
170
+ // Disabled linter/type-checker rules (multi-language)
171
+ const disableLines = getLangLineNumbers(code, language, LP.LINTER_DISABLE, { skipComments: false });
172
+ if (disableLines.length > 0) {
173
+ findings.push({
174
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
175
+ severity: "low",
176
+ title: "Linter/type-checker suppression directives found",
177
+ description: "Code contains directives to suppress linter or type-checker warnings. While sometimes necessary, these can mask real security or quality issues.",
178
+ lineNumbers: disableLines,
179
+ recommendation: "Review each suppression directive to ensure it's justified. Add a comment explaining why the suppression is necessary. Remove any that were added simply to silence warnings.",
180
+ reference: "Secure Coding Best Practices",
181
+ suggestedFix: "Add justification comments: // eslint-disable-next-line no-explicit-any -- legacy API returns untyped response, tracked in JIRA-1234.",
182
+ confidence: 0.85,
183
+ });
184
+ }
185
+ // XML External Entity (XXE) injection
186
+ const xxePatterns = /DocumentBuilder|SAXParser(?:Factory)?|XMLReader|DOMParser|etree\.(?:parse|XML|fromstring|XMLParser)|xml\.sax|parseXML|lxml\.etree|XmlReader|XmlDocument|LIBXML_NOENT/gi;
187
+ const xxeLines = getLineNumbers(code, xxePatterns);
188
+ if (xxeLines.length > 0) {
189
+ // Strip comments before checking for protection to avoid false positives
190
+ // from comments like "// Missing: FEATURE_SECURE_PROCESSING"
191
+ const codeWithoutComments = code
192
+ .replace(/\/\/[^\n]*/g, "")
193
+ .replace(/\/\*[\s\S]*?\*\//g, "")
194
+ .replace(/#[^\n]*/g, "");
195
+ const hasProtection = /disallow-doctype-decl|FEATURE_SECURE_PROCESSING|resolve_entities\s*=\s*False|DtdProcessing\.Prohibit|LIBXML_NONET|defusedxml/gi.test(codeWithoutComments);
196
+ if (!hasProtection) {
197
+ findings.push({
198
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
199
+ severity: "high",
200
+ title: "XML parsing without XXE protection",
201
+ description: "XML is parsed without visible protection against XML External Entity (XXE) injection, which can lead to file disclosure, SSRF, or denial of service.",
202
+ lineNumbers: xxeLines,
203
+ recommendation: "Disable external entity resolution and DTD processing in your XML parser. Use defusedxml in Python. Set FEATURE_SECURE_PROCESSING in Java.",
204
+ reference: "OWASP XXE — CWE-611",
205
+ suggestedFix: "Disable DTDs: factory.setFeature('http://apache.org/xml/features/disallow-doctype-decl', true); or use defusedxml in Python.",
206
+ confidence: 0.85,
207
+ });
208
+ }
209
+ }
210
+ // LDAP injection (multi-language)
211
+ const ldapPatterns = /ldap\.search|ldap_search|DirectorySearcher|LdapTemplate|ldap\.bind|python-ldap|go-ldap|novell\.directory|DirContext|InitialDirContext|NamingEnumeration/gi;
212
+ const ldapLines = getLineNumbers(code, ldapPatterns);
213
+ // Also detect LDAP filter string concatenation: "(uid=" + username + ")"
214
+ const ldapFilterConcat = [];
215
+ {
216
+ const codeLines = code.split("\n");
217
+ for (let i = 0; i < codeLines.length; i++) {
218
+ const line = codeLines[i];
219
+ if (/["']\s*\(\s*&?\s*\(\s*(?:uid|cn|sAMAccountName|userPassword|mail)\s*=\s*["']\s*\+/i.test(line)) {
220
+ ldapFilterConcat.push(i + 1);
221
+ }
222
+ // Also match ctx.search with string concatenation for filter
223
+ if (/\.search\s*\(/i.test(line) && /\+\s*\w/.test(line)) {
224
+ const ctx = codeLines.slice(Math.max(0, i - 5), Math.min(codeLines.length, i + 2)).join("\n");
225
+ if (/(?:ldap|DirContext|InitialDirContext|NamingContext|uid|dn|filter)/i.test(ctx)) {
226
+ ldapFilterConcat.push(i + 1);
227
+ }
228
+ }
229
+ }
230
+ }
231
+ const allLdapLines = [...new Set([...ldapLines, ...ldapFilterConcat])].sort((a, b) => a - b);
232
+ if (allLdapLines.length > 0) {
233
+ const hasLdapSanitation = testCode(code, /escape|sanitize|ldap_escape|filter_format/gi);
234
+ if (!hasLdapSanitation) {
235
+ findings.push({
236
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
237
+ severity: "high",
238
+ title: "Potential LDAP injection",
239
+ description: "LDAP queries are constructed without visible input sanitization, potentially allowing LDAP injection attacks.",
240
+ lineNumbers: allLdapLines,
241
+ recommendation: "Escape special LDAP characters in user input. Use parameterized LDAP queries or the ldap_escape function.",
242
+ reference: "OWASP LDAP Injection — CWE-90",
243
+ suggestedFix: "Escape LDAP input: const safe = input.replace(/[\\*()\\\\\x00]/g, c => '\\\\' + c.charCodeAt(0).toString(16)); use ldap_escape or parameterized filters.",
244
+ confidence: 0.85,
245
+ });
246
+ }
247
+ }
248
+ // Server-Side Request Forgery (SSRF) (multi-language)
249
+ const ssrfPatterns = /(?:fetch|axios|http\.get|requests\.get|urllib|HttpClient|WebClient|curl|reqwest|http\.NewRequest|httpx|aiohttp)\s*\(.*(?:req\.|request\.|params\.|query\.|body\.|input|url\s*=)/gi;
250
+ const ssrfLines = getLineNumbers(code, ssrfPatterns);
251
+ if (ssrfLines.length > 0) {
252
+ findings.push({
253
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
254
+ severity: "high",
255
+ title: "Potential Server-Side Request Forgery (SSRF)",
256
+ description: "User input is used to construct a URL for server-side requests, allowing attackers to access internal services, cloud metadata endpoints, or arbitrary external resources.",
257
+ lineNumbers: ssrfLines,
258
+ recommendation: "Validate and whitelist allowed URLs/domains. Block access to internal IP ranges (10.x, 172.16-31.x, 192.168.x, 169.254.169.254). Use a URL parser to verify the host.",
259
+ reference: "OWASP SSRF — CWE-918",
260
+ suggestedFix: "Validate URLs against an allowlist: const url = new URL(input); if (!ALLOWED_HOSTS.includes(url.hostname)) throw new Error('blocked');",
261
+ confidence: 0.85,
262
+ });
263
+ }
264
+ // Open redirect (multi-language)
265
+ const redirectPatterns = /(?:res\.redirect|Response\.Redirect|redirect|HttpResponseRedirect|header\s*\(\s*["']Location|http\.Redirect|c\.Redirect)\s*\(.*(?:req\.|request\.|params\.|query\.|body\.|input|url\s*=)/gi;
266
+ const redirectLines = getLineNumbers(code, redirectPatterns);
267
+ if (redirectLines.length > 0) {
268
+ findings.push({
269
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
270
+ severity: "medium",
271
+ title: "Potential open redirect",
272
+ description: "User-controlled input is used in a redirect URL, which can be exploited for phishing attacks by redirecting users to malicious sites.",
273
+ lineNumbers: redirectLines,
274
+ recommendation: "Validate redirect URLs against a whitelist of allowed domains. Use relative paths or map redirect targets to predefined safe URLs.",
275
+ reference: "OWASP Open Redirect — CWE-601",
276
+ suggestedFix: "Validate redirect target: const url = new URL(target, req.baseUrl); if (!ALLOWED_HOSTS.includes(url.hostname)) return res.redirect('/'); res.redirect(url.toString());",
277
+ confidence: 0.85,
278
+ });
279
+ }
280
+ // ReDoS (Regular Expression Denial of Service) (multi-language)
281
+ const regexPatterns = /(?:new\s+RegExp|re\.compile|Regex\.new|Pattern\.compile|regexp\.Compile|Regex\()\s*\(.*(?:req\.|request\.|params\.|query\.|body\.|input|user)/gi;
282
+ const regexLines = getLineNumbers(code, regexPatterns);
283
+ if (regexLines.length > 0) {
284
+ findings.push({
285
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
286
+ severity: "high",
287
+ title: "User input in RegExp — ReDoS risk",
288
+ description: "User input is used to construct a regular expression, which can cause catastrophic backtracking (ReDoS) with crafted input, hanging the server.",
289
+ lineNumbers: regexLines,
290
+ recommendation: "Never use user input in RegExp without escaping. Use safe-regex or re2 for untrusted patterns. Set timeouts on regex operations.",
291
+ reference: "CWE-1333: Inefficient Regular Expression Complexity",
292
+ suggestedFix: "Escape user input for regex: const escaped = input.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'); or use the re2 library for safe regex execution.",
293
+ confidence: 0.85,
294
+ });
295
+ }
296
+ // Template injection (SSTI)
297
+ const templatePatterns = /render_template_string|nunjucks\.renderString|Handlebars\.compile\s*\(|ERB\.new\s*\(/gi;
298
+ const templateLines = getLineNumbers(code, templatePatterns);
299
+ const filteredTemplateLines = templateLines.filter((lineNumber) => {
300
+ const index = lineNumber - 1;
301
+ const context = code
302
+ .split("\n")
303
+ .slice(Math.max(0, index - 3), index + 4)
304
+ .join("\n");
305
+ const templateSink = /(?:render_template_string|nunjucks\.renderString|Handlebars\.compile\s*\(|ERB\.new\s*\()/i;
306
+ const untrustedInput = /(?:req\.|request\.|params\.|query\.|body\.|input|user)/i;
307
+ return templateSink.test(context) && untrustedInput.test(context);
308
+ });
309
+ if (filteredTemplateLines.length > 0) {
310
+ findings.push({
311
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
312
+ severity: "critical",
313
+ title: "Potential Server-Side Template Injection (SSTI)",
314
+ description: "User input appears to be passed directly to template rendering, allowing attackers to execute arbitrary code via template syntax.",
315
+ lineNumbers: filteredTemplateLines,
316
+ recommendation: "Never pass user input as template source. Use templates only from trusted files with parameterized data. Enable sandboxing if available.",
317
+ reference: "OWASP SSTI — CWE-1336",
318
+ suggestedFix: "Use precompiled templates from files: nunjucks.render('template.njk', { data }) instead of renderString(userInput).",
319
+ confidence: 0.9,
320
+ });
321
+ }
322
+ // CRLF injection / HTTP header injection
323
+ const crlfPatterns = /(?:setHeader|writeHead|res\.set|response\.header|header\s*\()\s*\(.*(?:req\.|request\.|params\.|query\.|body\.|input)/gi;
324
+ const crlfLines = getLineNumbers(code, crlfPatterns);
325
+ if (crlfLines.length > 0) {
326
+ findings.push({
327
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
328
+ severity: "medium",
329
+ title: "Potential HTTP header injection",
330
+ description: "User input may be used in HTTP response headers, allowing CRLF injection to set arbitrary headers or split responses.",
331
+ lineNumbers: crlfLines,
332
+ recommendation: "Strip \\r\\n characters from any user input used in headers. Validate and encode header values.",
333
+ reference: "CWE-113: Improper Neutralization of CRLF Sequences",
334
+ suggestedFix: "Sanitize header values: const safe = value.replace(/[\\r\\n]/g, ''); res.setHeader('X-Custom', safe);",
335
+ confidence: 0.8,
336
+ });
337
+ }
338
+ // Missing security headers (multi-language)
339
+ const hasHelmet = /helmet|X-Content-Type-Options|Content-Security-Policy|X-Frame-Options|Strict-Transport-Security|X-XSS-Protection|SecurityHeaders|secure_headers/gi.test(code);
340
+ // AST: also check imports for security header libraries
341
+ const hasSecurityHeaderImport = astImports.has("helmet") ||
342
+ astImports.has("secure-headers") ||
343
+ astImports.has("django-security") ||
344
+ astImports.has("flask-talisman") ||
345
+ astImports.has("fastify-helmet");
346
+ const hasServer = /app\.(listen|use)|createServer|express\(\)|Flask\(|Django|WebApplication|Startup|actix.web|gin\.Default|SpringBoot|@RestController|http\.ListenAndServe/gi.test(code);
347
+ if (hasServer && !hasHelmet && !hasSecurityHeaderImport) {
348
+ findings.push({
349
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
350
+ severity: "medium",
351
+ title: "No security headers configured",
352
+ description: "HTTP server code does not configure security headers (CSP, X-Frame-Options, HSTS, etc.), leaving it vulnerable to clickjacking, XSS, and other attacks.",
353
+ recommendation: "Use helmet (Express), django-security middleware, or manually set: Content-Security-Policy, X-Frame-Options, X-Content-Type-Options, Strict-Transport-Security.",
354
+ reference: "OWASP Security Headers — CWE-693",
355
+ suggestedFix: "Add helmet middleware: import helmet from 'helmet'; app.use(helmet()); — sets CSP, HSTS, X-Frame-Options, and other security headers automatically.",
356
+ confidence: 0.7,
357
+ isAbsenceBased: true,
358
+ });
359
+ }
360
+ // Insecure session configuration (multi-language)
361
+ const sessionPatterns = /session\s*\(\s*\{|express-session|SessionMiddleware|session_config|SessionOptions|gorilla\/sessions|actix.session|HttpSession/gi;
362
+ const sessionLines = getLineNumbers(code, sessionPatterns);
363
+ if (sessionLines.length > 0) {
364
+ const hasSecureSession = testCode(code, /secure\s*:\s*true|HttpOnly|sameSite/gi);
365
+ if (!hasSecureSession) {
366
+ findings.push({
367
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
368
+ severity: "high",
369
+ title: "Insecure session configuration",
370
+ description: "Session middleware is configured without secure cookie settings, making sessions vulnerable to hijacking.",
371
+ lineNumbers: sessionLines,
372
+ recommendation: "Configure sessions with secure: true, httpOnly: true, sameSite: 'strict', and a reasonable maxAge. Use a server-side session store.",
373
+ reference: "OWASP Session Management — CWE-614",
374
+ suggestedFix: "Set secure cookie flags: session({ cookie: { secure: true, httpOnly: true, sameSite: 'strict', maxAge: 3600000 } })",
375
+ confidence: 0.8,
376
+ });
377
+ }
378
+ }
379
+ // Weak password requirements
380
+ const passwordValidation = /password.*(?:length|min|max|regex|pattern|require)/gi;
381
+ const hasPasswordInput = testCode(code, /password|passwd|pwd/gi);
382
+ const hasAuthRoutes = testCode(code, /(?:register|signup|sign-up|createUser|changePassword|resetPassword)/gi);
383
+ if (hasAuthRoutes && hasPasswordInput && !passwordValidation.test(code)) {
384
+ findings.push({
385
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
386
+ severity: "medium",
387
+ title: "No password complexity validation",
388
+ description: "Authentication endpoints handle passwords but no password complexity rules (minimum length, character requirements) are visible.",
389
+ recommendation: "Enforce minimum 8-character passwords with complexity requirements. Use NIST SP 800-63B guidelines. Check against breached password databases (Have I Been Pwned).",
390
+ reference: "NIST SP 800-63B — CWE-521",
391
+ suggestedFix: "Add password validation: if (password.length < 8 || !/[A-Z]/.test(password) || !/[0-9]/.test(password)) throw new Error('Password too weak'); check HaveIBeenPwned API.",
392
+ confidence: 0.7,
393
+ });
394
+ }
395
+ // Hardcoded admin/backdoor accounts
396
+ const backdoorPatterns = /(?:admin|root|superuser|backdoor)\s*[:=]\s*["'][^"']+["'].*(?:password|passwd|pwd)|(?:password|passwd|pwd)\s*[:=]\s*["'][^"']+["'].*(?:admin|root|superuser)/gi;
397
+ const backdoorLines = getLineNumbers(code, backdoorPatterns);
398
+ if (backdoorLines.length > 0) {
399
+ findings.push({
400
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
401
+ severity: "critical",
402
+ title: "Hardcoded admin/backdoor credentials",
403
+ description: "Hardcoded admin or superuser credentials create a permanent backdoor. These are trivially discovered by examining the source code.",
404
+ lineNumbers: backdoorLines,
405
+ recommendation: "Remove hardcoded credentials. Use environment-based configuration and initial setup scripts for admin accounts.",
406
+ reference: "CWE-798: Use of Hard-coded Credentials",
407
+ suggestedFix: "Move credentials to environment variables: const adminPass = process.env.ADMIN_PASSWORD; and provision via secrets manager.",
408
+ confidence: 0.95,
409
+ });
410
+ }
411
+ // Missing rate limiting on auth endpoints
412
+ // Suppress when the file is primarily code-analysis / evaluator logic (many regex .test() calls)
413
+ const authAnalysisTestCount = (code.match(/\.test\s*\(/g) || []).length;
414
+ const isAuthAnalysisCode = authAnalysisTestCount >= 8;
415
+ const authEndpoints = getLineNumbers(code, /(?:login|signin|sign-in|authenticate|password|token)\s*['",:]/gi).filter((ln) => {
416
+ // Exclude middleware/facade/decorator patterns that use auth keywords safely
417
+ const line = code.split("\n")[ln - 1] || "";
418
+ return !/middleware\s*\(|Auth::|@auth|->auth\(\)|auth_required|authorize|authorization|authenticated|authenticate_user/i.test(line);
419
+ });
420
+ const hasRateLimit = testCode(code, /rate.?limit|throttle|limiter|brute/gi);
421
+ if (authEndpoints.length > 0 && !hasRateLimit && !isIaCTemplate(code) && !isAuthAnalysisCode) {
422
+ findings.push({
423
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
424
+ severity: "high",
425
+ title: "Authentication endpoints without rate limiting",
426
+ description: "Authentication-related code exists without visible rate limiting, making it vulnerable to brute-force and credential stuffing attacks.",
427
+ lineNumbers: authEndpoints.slice(0, 5),
428
+ recommendation: "Implement rate limiting on login/auth endpoints. Use progressive delays, account lockouts, or CAPTCHA after failed attempts.",
429
+ reference: "OWASP Brute Force — CWE-307",
430
+ suggestedFix: "Add auth rate limiting: app.use('/login', rateLimit({ windowMs: 15 * 60 * 1000, max: 5 })); lock account after 10 failures.",
431
+ confidence: 0.7,
432
+ });
433
+ }
434
+ // Weak Content-Security-Policy directives
435
+ const cspValuePattern = /Content-Security-Policy|contentSecurityPolicy|csp\s*[:=]/gi;
436
+ const cspPresent = testCode(code, cspValuePattern);
437
+ if (cspPresent) {
438
+ const cspWeakDirectives = /unsafe-inline|unsafe-eval|script-src\s+['"]?\s*\*/gi;
439
+ const cspWeakLines = getLineNumbers(code, cspWeakDirectives);
440
+ if (cspWeakLines.length > 0) {
441
+ findings.push({
442
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
443
+ severity: "high",
444
+ title: "Weak Content-Security-Policy directives",
445
+ description: "CSP includes 'unsafe-inline', 'unsafe-eval', or wildcard script-src which significantly weakens XSS protection. These permissive directives are often added to suppress browser warnings during development.",
446
+ lineNumbers: cspWeakLines,
447
+ recommendation: "Remove 'unsafe-inline' and 'unsafe-eval'. Use nonce or hash-based CSP for inline scripts (e.g. 'nonce-<random>'). Restrict script-src to explicitly trusted domains.",
448
+ reference: "OWASP CSP Cheat Sheet — CWE-693",
449
+ suggestedFix: "Strengthen CSP: Content-Security-Policy: default-src 'self'; script-src 'nonce-{random}'; style-src 'self'; img-src 'self' data:; — remove unsafe-inline/unsafe-eval.",
450
+ confidence: 0.85,
451
+ });
452
+ }
453
+ }
454
+ // Insecure WebSocket (ws://) connections
455
+ const wsInsecurePattern = /["'`]ws:\/\//gi;
456
+ const wsInsecureLines = getLineNumbers(code, wsInsecurePattern);
457
+ if (wsInsecureLines.length > 0) {
458
+ findings.push({
459
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
460
+ severity: "medium",
461
+ title: "Insecure WebSocket connection (ws://)",
462
+ description: "WebSocket connections use unencrypted ws:// protocol. Data transmitted over ws:// can be intercepted or tampered with by network adversaries.",
463
+ lineNumbers: wsInsecureLines,
464
+ recommendation: "Use wss:// (WebSocket Secure) for all WebSocket connections. Ensure the server has a valid TLS certificate.",
465
+ reference: "CWE-319: Cleartext Transmission of Sensitive Information",
466
+ suggestedFix: "Replace ws:// with wss://: const socket = new WebSocket('wss://api.example.com/ws'); ensure your server has TLS configured.",
467
+ confidence: 0.9,
468
+ });
469
+ }
470
+ // NoSQL injection via direct user input in database queries
471
+ const nosqlDirectPattern = /(?:\.find|\.findOne|\.deleteOne|\.deleteMany|\.updateOne|\.updateMany|\.aggregate|\.countDocuments)\s*\(\s*(?:req\.body|req\.query|request\.body|request\.json|request\.data)/gi;
472
+ const nosqlDirectLines = getLineNumbers(code, nosqlDirectPattern);
473
+ if (nosqlDirectLines.length > 0) {
474
+ // AST: boost confidence when inside a request handler function
475
+ let nosqlConfidence = 0.9;
476
+ if (astFunctions.length > 0) {
477
+ const inHandler = nosqlDirectLines.some((ln) => {
478
+ const fn = astFunctions.find((f) => ln >= f.startLine && ln <= f.endLine);
479
+ if (!fn)
480
+ return false;
481
+ return (fn.decorators?.some((d) => /route|get|post|put|delete|api_view/i.test(d)) ||
482
+ /handler|controller|endpoint|route|api/i.test(fn.name));
483
+ });
484
+ if (inHandler)
485
+ nosqlConfidence = 0.95;
486
+ }
487
+ findings.push({
488
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
489
+ severity: "critical",
490
+ title: "NoSQL injection via unsanitized user input",
491
+ description: "Database query methods receive raw request body/query parameters directly. Attackers can inject MongoDB operators ($gt, $ne, $regex) to bypass authentication or exfiltrate data.",
492
+ lineNumbers: nosqlDirectLines,
493
+ recommendation: "Never pass req.body or req.query directly to database queries. Validate and sanitize input fields individually. Use a schema validator (Joi, Zod) or ORM methods that parameterize queries.",
494
+ reference: "OWASP NoSQL Injection — CWE-943",
495
+ suggestedFix: "Validate input with a schema: const { email } = schema.parse(req.body); db.collection.find({ email });",
496
+ confidence: nosqlConfidence,
497
+ });
498
+ }
499
+ // Mass assignment / over-posting — passing raw request body to ORM create/update
500
+ // Use [^,)]* instead of .* to avoid O(n²) backtracking; drop \s* after , to avoid overlap with [^,)]*
501
+ const massAssignPattern = /(?:\.create|\.update|\.findOneAndUpdate|\.findByIdAndUpdate|\.insertOne|Object\.assign)\s*\(\s*(?:[^,)]*,)*(?:req\.body|request\.body|request\.data|request\.json)/gi;
502
+ const massAssignLines = getLineNumbers(code, massAssignPattern);
503
+ if (massAssignLines.length > 0) {
504
+ const hasFieldWhitelist = testCode(code, /(?:pick|allowedFields|whitelist|permit|only|pluck|select)\s*\(|\{\s*\w+\s*:\s*req\.body\.\w+/gi);
505
+ if (!hasFieldWhitelist) {
506
+ findings.push({
507
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
508
+ severity: "high",
509
+ title: "Mass assignment via raw request body",
510
+ description: "Raw request body is passed directly to ORM create/update methods without field whitelisting. Attackers can set unintended fields (e.g., isAdmin, role) by including extra properties in the request.",
511
+ lineNumbers: massAssignLines,
512
+ recommendation: "Destructure only allowed fields from req.body: const { name, email } = req.body. Use DTOs, Zod schemas, or pick() utilities to whitelist fields before database operations.",
513
+ reference: "OWASP Mass Assignment — CWE-915",
514
+ suggestedFix: "Destructure allowed fields: const { name, email } = req.body; await Model.create({ name, email });",
515
+ confidence: 0.85,
516
+ });
517
+ }
518
+ }
519
+ // Cloud metadata endpoints and hardcoded internal IPs
520
+ const cloudMetaPattern = /169\.254\.169\.254|metadata\.google\.internal|100\.100\.100\.200/gi;
521
+ const cloudMetaLines = getLineNumbers(code, cloudMetaPattern);
522
+ if (cloudMetaLines.length > 0) {
523
+ findings.push({
524
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
525
+ severity: "critical",
526
+ title: "Cloud metadata endpoint reference",
527
+ description: "Code references cloud provider metadata endpoints (169.254.169.254, metadata.google.internal). These are primary SSRF exploitation targets that can leak instance credentials and secrets.",
528
+ lineNumbers: cloudMetaLines,
529
+ recommendation: "Remove hardcoded metadata URLs. Use cloud SDK methods to retrieve credentials and metadata. Enable IMDSv2 (AWS) to require session tokens for metadata access.",
530
+ reference: "CWE-918: Server-Side Request Forgery (SSRF)",
531
+ suggestedFix: "Block metadata IPs in SSRF guards: if (resolvedHost === '169.254.169.254') throw new Error('metadata endpoint blocked');",
532
+ confidence: 0.95,
533
+ });
534
+ }
535
+ // Insecure cryptographic mode (ECB)
536
+ const ecbPattern = /aes[_-]?\d*[_-]?ecb|AES\.MODE_ECB|CipherMode\.ECB|Cipher\.getInstance\s*\(\s*["']AES\/ECB|\.Mode\s*=\s*CipherMode\.ECB|modes\.ECB/gi;
537
+ const ecbLines = getLineNumbers(code, ecbPattern);
538
+ if (ecbLines.length > 0) {
539
+ findings.push({
540
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
541
+ severity: "high",
542
+ title: "Insecure encryption mode (ECB)",
543
+ description: "ECB (Electronic Codebook) mode preserves patterns in plaintext — identical blocks produce identical ciphertext, making it unsuitable for secure encryption.",
544
+ lineNumbers: ecbLines,
545
+ recommendation: "Use AES-GCM (authenticated encryption) or AES-CBC with HMAC. GCM is preferred as it provides both confidentiality and integrity. Always use a unique IV/nonce per encryption.",
546
+ reference: "CWE-327: Use of Broken Crypto Algorithm",
547
+ suggestedFix: "Replace ECB with AES-GCM: crypto.createCipheriv('aes-256-gcm', key, crypto.randomBytes(12)) with a unique IV per encryption.",
548
+ confidence: 0.9,
549
+ });
550
+ }
551
+ // ── SQL Injection (multi-language) — string concatenation / interpolation in SQL context ──
552
+ const sqlInjLines = getLangLineNumbers(code, language, LP.SQL_INJECTION);
553
+ if (sqlInjLines.length > 0) {
554
+ findings.push({
555
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
556
+ severity: "critical",
557
+ title: "Potential SQL injection via string concatenation",
558
+ description: "SQL queries are constructed using string concatenation or interpolation with potentially untrusted input, allowing attackers to manipulate queries.",
559
+ lineNumbers: sqlInjLines,
560
+ recommendation: "Use parameterized queries or prepared statements. Never concatenate user input into SQL strings.",
561
+ reference: "OWASP SQL Injection — CWE-89",
562
+ suggestedFix: "Use parameterized queries: db.query('SELECT * FROM users WHERE id = $1', [userId]) instead of string concatenation.",
563
+ confidence: 0.95,
564
+ });
565
+ }
566
+ else {
567
+ // Fallback: detect SQL string construction via template interpolation or concatenation
568
+ // Catches both direct patterns (query(`SELECT ${x}`)) and indirect ones (const sql = `SELECT ${x}`)
569
+ const sqlFallbackLines = [];
570
+ const codeLines = code.split("\n");
571
+ for (let i = 0; i < codeLines.length; i++) {
572
+ const line = codeLines[i];
573
+ // Skip comment lines
574
+ if (/^\s*(?:\/\/|\/\*|\*[\s/]|\*$|#(?![![])|"""|'''|<!--)/.test(line))
575
+ continue;
576
+ const sqlKeywords = line.match(/\b(?:SELECT|INSERT|UPDATE|DELETE|FROM|WHERE|JOIN|INTO|VALUES|SET)\b/gi) || [];
577
+ // Require 2+ SQL keywords to distinguish real SQL from UI labels like "Select ${user.name}"
578
+ if (sqlKeywords.length < 2)
579
+ continue;
580
+ const hasInterpolation = /\$\{/.test(line) || // JS/TS template literal interpolation
581
+ /\$"[^"]*\{/.test(line) || // C# string interpolation ($"...{var}...")
582
+ /\+\s*\w/.test(line) || // String concatenation
583
+ /f["']/.test(line) || // Python f-string
584
+ /\.format\s*\(/.test(line) || // Python .format() / C# String.Format
585
+ /String\.format/i.test(line) || // Java String.format
586
+ /fmt\.Sprintf/i.test(line) || // Go fmt.Sprintf
587
+ /%[sdvq]/.test(line) || // printf-style
588
+ /#\{[^}]+\}/.test(line) || // Ruby string interpolation
589
+ /["'].*\$[a-zA-Z_]\w*/.test(line) || // Kotlin/PHP $var inside string (excludes PostgreSQL $1)
590
+ /\\\([^)]+\)/.test(line) || // Swift string interpolation \(var)
591
+ /format!\s*\(\s*["'].*\b(?:SELECT|INSERT|UPDATE|DELETE)\b/i.test(line); // Rust format! building SQL
592
+ if (hasInterpolation) {
593
+ sqlFallbackLines.push(i + 1);
594
+ }
595
+ }
596
+ if (sqlFallbackLines.length > 0) {
597
+ findings.push({
598
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
599
+ severity: "critical",
600
+ title: "Potential SQL injection via string concatenation",
601
+ description: "SQL queries appear to include dynamically concatenated or interpolated values, which may allow SQL injection if user input is included.",
602
+ lineNumbers: sqlFallbackLines,
603
+ recommendation: "Use parameterized queries or prepared statements. Never concatenate variables into SQL strings.",
604
+ reference: "OWASP SQL Injection — CWE-89",
605
+ suggestedFix: "Use parameterized queries: db.query('SELECT * FROM users WHERE id = $1', [userId]) instead of string concatenation.",
606
+ confidence: 0.9,
607
+ });
608
+ }
609
+ }
610
+ // ── Server-side XSS — unsanitized output in HTTP responses ──
611
+ {
612
+ const ssXssPattern = /(?:res\.send|res\.write|response\.write|response\.send|resp\.getWriter|fmt\.Fprint|HttpResponse)\s*\(.*(?:\+\s*(?:req\.|request\.|params\.|query\.)|\$\{.*(?:req\.|request\.|query|params))/gi;
613
+ const ssXssLines = getLineNumbers(code, ssXssPattern);
614
+ // Also check multi-line: response method on one line with user input concat
615
+ const lines = code.split("\n");
616
+ const multiLineXssLines = [];
617
+ for (let i = 0; i < lines.length; i++) {
618
+ const line = lines[i];
619
+ if (/(?:res\.send|res\.write|response\.write|fmt\.Fprint)\s*\(/i.test(line)) {
620
+ const ctx = lines.slice(Math.max(0, i - 3), i + 1).join("\n");
621
+ if (/(?:req\.|request\.|params\.|query\.)/i.test(ctx) && /\+|`[^`]*\$\{|\.format\s*\(|Sprintf/i.test(ctx)) {
622
+ multiLineXssLines.push(i + 1);
623
+ }
624
+ }
625
+ }
626
+ const allXssLines = [...new Set([...ssXssLines, ...multiLineXssLines])].sort((a, b) => a - b);
627
+ if (allXssLines.length > 0) {
628
+ findings.push({
629
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
630
+ severity: "high",
631
+ title: "Potential server-side XSS via unsanitized response output",
632
+ description: "User input is concatenated into an HTTP response without sanitization, allowing reflected Cross-Site Scripting (XSS) attacks.",
633
+ lineNumbers: allXssLines,
634
+ recommendation: "Sanitize all user input before including in responses. Use template engines with auto-escaping or HTML encoding functions.",
635
+ reference: "OWASP XSS Prevention — CWE-79",
636
+ suggestedFix: "Encode output: res.send(escapeHtml(userInput)) or use a template engine with auto-escaping enabled.",
637
+ confidence: 0.9,
638
+ });
639
+ }
640
+ }
641
+ // ── Path Traversal — file operations with user input ──
642
+ {
643
+ const pathTravPattern = /(?:readFile|readFileSync|createReadStream|readdir|stat|access|open|unlink|writeFile|writeFileSync|os\.ReadFile|os\.Open|ioutil\.ReadFile|File\.read|file_get_contents)\s*\(.*(?:\+\s*(?:req\.|request\.|params\.|query\.)|`[^`]*\$\{.*(?:req\.|request\.|params\.|query\.))/gi;
644
+ const pathTravLines = getLineNumbers(code, pathTravPattern);
645
+ // Also multi-line: file read with user input in context
646
+ const pathTravMultiLines = [];
647
+ const codeLines = code.split("\n");
648
+ for (let i = 0; i < codeLines.length; i++) {
649
+ const line = codeLines[i];
650
+ // Standard Node.js / Go file operations with user input on same line
651
+ if (/(?:readFile|readFileSync|createReadStream|open|os\.ReadFile|os\.Open|ioutil\.ReadFile)\s*\(/i.test(line) &&
652
+ /(?:req\.|request\.|params\.|query\.)/i.test(line) &&
653
+ /\+/i.test(line)) {
654
+ pathTravMultiLines.push(i + 1);
655
+ continue;
656
+ }
657
+ // Multi-language path traversal: file operations with user-controlled path in context
658
+ const ctx = codeLines.slice(Math.max(0, i - 3), i + 4).join("\n");
659
+ const hasFileOp = /(?:File\.(?:join|read|new|open)|send_file|filepath\.Join|http\.ServeFile|Path\.Combine|File\.ReadAll|respondFile|ServeContent|file_get_contents|os\.path\.join)\s*\(/i.test(line) ||
660
+ /\bnew\s+File\s*\(/i.test(line) ||
661
+ /File\s*\(\s*[""][^""]*\$/i.test(line); // Kotlin File("/path/$var")
662
+ const hasUserInput = /(?:params\[|params\.|request\.|req\.|query\.|call\.parameters|\$_(?:GET|POST|REQUEST)\[|r\.URL|r\.FormValue|\[Http(?:Get|Post|Put|Delete|Patch)\s*\(|ResponseWriter|flask\.request)/i.test(ctx);
663
+ if (hasFileOp && hasUserInput) {
664
+ pathTravMultiLines.push(i + 1);
665
+ }
666
+ }
667
+ const allPathTravLines = [...new Set([...pathTravLines, ...pathTravMultiLines])].sort((a, b) => a - b);
668
+ if (allPathTravLines.length > 0) {
669
+ findings.push({
670
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
671
+ severity: "critical",
672
+ title: "Potential path traversal via user input in file operations",
673
+ description: "File system operations use paths that include user-controlled input, allowing attackers to read or write arbitrary files using ../sequences.",
674
+ lineNumbers: allPathTravLines,
675
+ recommendation: "Validate and sanitize file paths. Use path.resolve() or path.normalize() and ensure the resolved path is within an allowed directory. Reject paths containing '..'.",
676
+ reference: "OWASP Path Traversal — CWE-22",
677
+ suggestedFix: "Validate paths: const safePath = path.resolve(BASE_DIR, userInput); if (!safePath.startsWith(BASE_DIR)) throw new Error('path traversal blocked');",
678
+ confidence: 0.9,
679
+ });
680
+ }
681
+ }
682
+ // ── Unsafe Deserialization (multi-language) ──
683
+ const deserLines = getLangLineNumbers(code, language, LP.UNSAFE_DESERIALIZATION);
684
+ if (deserLines.length > 0) {
685
+ findings.push({
686
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
687
+ severity: "critical",
688
+ title: "Unsafe deserialization of untrusted data",
689
+ description: "Deserializing data from untrusted sources can lead to remote code execution (RCE). Attackers can craft malicious serialized payloads to execute arbitrary code.",
690
+ lineNumbers: deserLines,
691
+ recommendation: "Never deserialize untrusted data. Use safe alternatives: JSON for data exchange, schema validation before processing. Avoid pickle, ObjectInputStream, Marshal with untrusted input.",
692
+ reference: "OWASP Deserialization — CWE-502",
693
+ suggestedFix: "Replace unsafe deserialization with JSON parsing and schema validation. Python: use json.loads() instead of pickle.loads(). Java: use JSON libraries instead of ObjectInputStream.",
694
+ confidence: 0.9,
695
+ });
696
+ }
697
+ // ── Enhanced SSRF — multi-line variable tracking ──
698
+ if (ssrfLines.length === 0) {
699
+ // If the single-line SSRF regex didn't match, check multi-line patterns:
700
+ // fetch(variable) where variable was assigned from req.* in surrounding lines
701
+ const cLines = code.split("\n");
702
+ const ssrfMultiLines = [];
703
+ for (let i = 0; i < cLines.length; i++) {
704
+ const line = cLines[i];
705
+ const fetchMatch = line.match(/(?:fetch|axios|http\.get|requests\.get|urllib|HttpClient|WebClient|reqwest|http\.NewRequest|httpx|aiohttp)\s*\(\s*(\w+)/i);
706
+ if (fetchMatch) {
707
+ const varName = fetchMatch[1];
708
+ // Check surrounding lines for assignment from user input
709
+ const start = Math.max(0, i - 10);
710
+ const ctx = cLines.slice(start, i).join("\n");
711
+ const assignPattern = new RegExp(`(?:const|let|var|:=)?\\s*${varName}\\s*[:=]\\s*.*(?:req\\.|request\\.|params\\.|query\\.|body\\.|input|url)`, "i");
712
+ if (assignPattern.test(ctx)) {
713
+ ssrfMultiLines.push(i + 1);
714
+ }
715
+ }
716
+ }
717
+ if (ssrfMultiLines.length > 0) {
718
+ findings.push({
719
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
720
+ severity: "high",
721
+ title: "Potential Server-Side Request Forgery (SSRF)",
722
+ description: "A URL from user input is passed to a server-side HTTP client via a variable, allowing attackers to access internal services or cloud metadata endpoints.",
723
+ lineNumbers: ssrfMultiLines,
724
+ recommendation: "Validate and whitelist allowed URLs/domains. Block access to internal IP ranges (10.x, 172.16-31.x, 192.168.x, 169.254.169.254). Use a URL parser to verify the host.",
725
+ reference: "OWASP SSRF — CWE-918",
726
+ suggestedFix: "Validate URLs against an allowlist: const url = new URL(input); if (!ALLOWED_HOSTS.includes(url.hostname)) throw new Error('blocked');",
727
+ confidence: 0.85,
728
+ });
729
+ }
730
+ }
731
+ // ── Timing attack — non-constant-time comparison of secrets ──
732
+ {
733
+ const timingLines = [];
734
+ const codeLines = code.split("\n");
735
+ for (let i = 0; i < codeLines.length; i++) {
736
+ const line = codeLines[i];
737
+ // Check for string comparison (===, ==) involving secret/signature/token/hmac/hash
738
+ if (/(?:signature|secret|token|hmac|hash|digest|apikey|api_key)\s*(?:===?|!==?)\s*\w+|^\s*if\s*\(.*(?:signature|secret|token|hmac|hash|digest)\s*(?:===?|!==?)/i.test(line)) {
739
+ const ctx = codeLines.slice(Math.max(0, i - 5), Math.min(codeLines.length, i + 6)).join("\n");
740
+ // Only flag if no constant-time comparison (crypto.timingSafeEqual, hmac.equal, etc.)
741
+ if (!/timingSafeEqual|constantTimeCompare|hmac\.Equal|secure_compare|constant_time_compare|compare_digest/i.test(ctx)) {
742
+ timingLines.push(i + 1);
743
+ }
744
+ }
745
+ }
746
+ if (timingLines.length > 0) {
747
+ findings.push({
748
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
749
+ severity: "high",
750
+ title: "Non-constant-time comparison of secrets",
751
+ description: "Secrets, signatures, or tokens are compared using standard equality operators (===, ==) which are vulnerable to timing attacks. An attacker can determine the correct value byte-by-byte by measuring response time.",
752
+ lineNumbers: timingLines,
753
+ recommendation: "Use constant-time comparison: crypto.timingSafeEqual() (Node.js), hmac.Equal() (Go), hmac.compare_digest() (Python), or MessageDigest.isEqual() (Java).",
754
+ reference: "CWE-208: Observable Timing Discrepancy",
755
+ suggestedFix: "Replace === comparison with: crypto.timingSafeEqual(Buffer.from(a), Buffer.from(b));",
756
+ confidence: 0.85,
757
+ });
758
+ }
759
+ }
760
+ // ── Unsafe Rust code — unsafe blocks without safety documentation ──
761
+ if (lang === "rust") {
762
+ const unsafeLines = getLineNumbers(code, /\bunsafe\s*\{/g);
763
+ if (unsafeLines.length > 0) {
764
+ // Check raw code (not comment-stripped) because SAFETY docs ARE comments
765
+ const safetyDocRe = /\/\/\s*SAFETY:|\/\/\s*UNSAFE:|#\[allow\(unsafe_code\)\]/gi;
766
+ safetyDocRe.lastIndex = 0;
767
+ const hasSafetyDoc = safetyDocRe.test(code);
768
+ if (!hasSafetyDoc) {
769
+ findings.push({
770
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
771
+ severity: "high",
772
+ title: "Unsafe code block without safety documentation",
773
+ description: "Unsafe code bypasses Rust's safety guarantees (bounds checking, lifetime tracking). Undocumented unsafe blocks are high-risk for memory safety bugs.",
774
+ lineNumbers: unsafeLines,
775
+ recommendation: "Minimize unsafe code. Document safety invariants with // SAFETY: comments. Consider safe alternatives. Review for buffer overflows and dangling pointers.",
776
+ reference: "CWE-119 / CWE-787: Buffer Overflow / Out-of-bounds Write",
777
+ suggestedFix: "Add safety documentation: // SAFETY: <explain why this is safe> above each unsafe block, and minimize the scope of unsafe.",
778
+ confidence: 0.85,
779
+ });
780
+ }
781
+ }
782
+ }
783
+ // ── Insecure HTTP URLs for sensitive operations ──
784
+ {
785
+ const httpUrlLines = getLineNumbers(code, /["'`]http:\/\/(?!localhost|127\.0\.0\.1|0\.0\.0\.0)[^"'`\s]+(?:auth|login|password|token|payment|charge|api|secret)/gi);
786
+ if (httpUrlLines.length > 0) {
787
+ findings.push({
788
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
789
+ severity: "high",
790
+ title: "Sensitive operations over insecure HTTP",
791
+ description: "Sensitive operations (authentication, payment, API calls) use unencrypted HTTP URLs, exposing data to network interception.",
792
+ lineNumbers: httpUrlLines,
793
+ recommendation: "Use HTTPS for all sensitive operations. Replace http:// with https:// and enforce TLS for all API communication.",
794
+ reference: "CWE-319: Cleartext Transmission of Sensitive Information",
795
+ suggestedFix: "Replace http:// with https:// for all sensitive endpoints.",
796
+ confidence: 0.85,
797
+ });
798
+ }
799
+ }
800
+ // ── Framework-specific security rules ─────────────────────────────────────
801
+ // ── PHP/Ruby Reflected XSS — echo/print with user input ──
802
+ {
803
+ const xssReflectLines = [];
804
+ const codeLines = code.split("\n");
805
+ for (let i = 0; i < codeLines.length; i++) {
806
+ const line = codeLines[i];
807
+ // PHP: echo/print with $_GET/$_POST directly
808
+ if (/\b(?:echo|print)\b/i.test(line) && /\$_(?:GET|POST|REQUEST|COOKIE)\[/i.test(line)) {
809
+ xssReflectLines.push(i + 1);
810
+ continue;
811
+ }
812
+ // PHP: echo with variable that was assigned from user input in context
813
+ if (/\b(?:echo|print)\b.*\$/i.test(line) && lang === "php") {
814
+ const ctx = codeLines.slice(Math.max(0, i - 5), i).join("\n");
815
+ if (/\$_(?:GET|POST|REQUEST)\[/i.test(ctx)) {
816
+ xssReflectLines.push(i + 1);
817
+ continue;
818
+ }
819
+ }
820
+ // Ruby ERB: raw, html_safe, or <%== (unescaped output)
821
+ if (/\braw\s+@?\w+|\.html_safe\b|<%==?\s/i.test(line)) {
822
+ const ctx = codeLines.slice(Math.max(0, i - 5), i + 1).join("\n");
823
+ if (/params\[|request\.|@\w+/i.test(ctx)) {
824
+ xssReflectLines.push(i + 1);
825
+ }
826
+ }
827
+ }
828
+ if (xssReflectLines.length > 0) {
829
+ findings.push({
830
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
831
+ severity: "high",
832
+ title: "Reflected XSS via unsanitized user input in output",
833
+ description: "User input is directly included in HTML output without sanitization, allowing Cross-Site Scripting (XSS) attacks.",
834
+ lineNumbers: xssReflectLines,
835
+ recommendation: "Sanitize all user input before output. Use htmlspecialchars() in PHP or ERB's default escaping (<%= %>) in Ruby.",
836
+ reference: "OWASP XSS — CWE-79",
837
+ suggestedFix: "PHP: echo htmlspecialchars($input, ENT_QUOTES, 'UTF-8'); Ruby: use <%= %> (escaped) instead of raw/html_safe.",
838
+ confidence: 0.9,
839
+ });
840
+ }
841
+ }
842
+ // ── Server-Side Template Injection (SSTI) ──
843
+ {
844
+ const sstiLines = [];
845
+ const codeLines = code.split("\n");
846
+ for (let i = 0; i < codeLines.length; i++) {
847
+ const line = codeLines[i];
848
+ // Jinja2/Flask: render_template_string, Environment().from_string with user input
849
+ if (/(?:render_template_string|from_string|Template)\s*\(/i.test(line)) {
850
+ const ctx = codeLines.slice(Math.max(0, i - 5), i + 1).join("\n");
851
+ if (/(?:request\.|params\.|user|input|args\.get)/i.test(ctx)) {
852
+ sstiLines.push(i + 1);
853
+ }
854
+ }
855
+ // Express/Node: rendering user-controlled template strings
856
+ if (/\.render\s*\(.*(?:req\.|request\.)/i.test(line)) {
857
+ sstiLines.push(i + 1);
858
+ }
859
+ // Python format string injection: user-controlled string.format()
860
+ if (/\.format\s*\(/i.test(line)) {
861
+ const ctx = codeLines.slice(Math.max(0, i - 5), i + 1).join("\n");
862
+ if (/(?:request\.(?:args|form|values|data|get)|params\[|input\s*\()/i.test(ctx)) {
863
+ sstiLines.push(i + 1);
864
+ }
865
+ }
866
+ }
867
+ if (sstiLines.length > 0) {
868
+ findings.push({
869
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
870
+ severity: "critical",
871
+ title: "Potential Server-Side Template Injection (SSTI)",
872
+ description: "User input is used to construct or render templates, which could allow attackers to execute arbitrary code on the server.",
873
+ lineNumbers: sstiLines,
874
+ recommendation: "Never pass user input to template rendering functions. Use render_template with pre-defined templates instead of render_template_string.",
875
+ reference: "OWASP SSTI — CWE-1336",
876
+ suggestedFix: "Use render_template('page.html', data=user_data) instead of render_template_string(user_input).",
877
+ confidence: 0.9,
878
+ });
879
+ }
880
+ }
881
+ // ── Open Redirect — redirecting to user-controlled URL ──
882
+ {
883
+ const openRedirectLines = [];
884
+ const codeLines = code.split("\n");
885
+ for (let i = 0; i < codeLines.length; i++) {
886
+ const line = codeLines[i];
887
+ if (/(?:redirect|redirect_to|res\.redirect|response\.redirect|sendRedirect|header\s*\(\s*["']Location)/i.test(line)) {
888
+ const ctx = codeLines.slice(Math.max(0, i - 5), i + 1).join("\n");
889
+ if (/(?:req\.|request\.|params\[|params\.|query\.|body\.|\$_GET|\$_POST|args\.get)/i.test(ctx) &&
890
+ !/(?:url\.startsWith|startswith|whitelist|allowlist|allowed_hosts|validate_url|safe_redirect)/i.test(ctx)) {
891
+ openRedirectLines.push(i + 1);
892
+ }
893
+ }
894
+ }
895
+ if (openRedirectLines.length > 0) {
896
+ findings.push({
897
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
898
+ severity: "high",
899
+ title: "Potential open redirect vulnerability",
900
+ description: "The application redirects to a URL derived from user input without validation, which can be used for phishing attacks.",
901
+ lineNumbers: openRedirectLines,
902
+ recommendation: "Validate redirect URLs against a whitelist of allowed domains. Use relative paths or verify the URL starts with your domain.",
903
+ reference: "OWASP Unvalidated Redirects — CWE-601",
904
+ suggestedFix: "Validate redirects: const url = new URL(target, baseUrl); if (url.origin !== baseUrl) throw new Error('blocked');",
905
+ confidence: 0.85,
906
+ });
907
+ }
908
+ }
909
+ // ── Mass assignment — unfiltered request body passed to ORM/model ──
910
+ {
911
+ const massAssignLines = [];
912
+ const codeLines = code.split("\n");
913
+ for (let i = 0; i < codeLines.length; i++) {
914
+ const line = codeLines[i];
915
+ // Ruby: Model.create(params) or update(params) without permit/strong_parameters
916
+ if (/\.(?:create|update|new|assign_attributes)\s*\(\s*params(?:\[|\.)/i.test(line)) {
917
+ const ctx = codeLines.slice(Math.max(0, i - 10), i + 1).join("\n");
918
+ if (!/\.permit\s*\(|strong_parameters|require\s*\(/i.test(ctx)) {
919
+ massAssignLines.push(i + 1);
920
+ }
921
+ }
922
+ // Python Django/DRF: form.save() with all fields, or Model(**request.data)
923
+ if (/\*\*request\.(?:data|POST|json|body)/i.test(line)) {
924
+ massAssignLines.push(i + 1);
925
+ }
926
+ // Python setattr in loop with request data — mass assignment
927
+ if (/setattr\s*\(/i.test(line)) {
928
+ const ctx = codeLines.slice(Math.max(0, i - 8), Math.min(codeLines.length, i + 3)).join("\n");
929
+ if (/(?:for\s+\w+.*in\s+|request\.|\.items\(\)|\.data|\.POST|\.json)/i.test(ctx)) {
930
+ massAssignLines.push(i + 1);
931
+ }
932
+ }
933
+ // JS/TS: Model.create(req.body) / Object.assign(model, req.body)
934
+ if (/(?:\.create|\.update|Object\.assign|Object\.keys.*forEach)\s*\(.*(?:req\.body|request\.body)/i.test(line) &&
935
+ !/(?:pick|omit|whitelist|allowlist|\{[^}]+\}\s*=)/i.test(line)) {
936
+ massAssignLines.push(i + 1);
937
+ }
938
+ }
939
+ if (massAssignLines.length > 0) {
940
+ findings.push({
941
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
942
+ severity: "high",
943
+ title: "Potential mass assignment vulnerability",
944
+ description: "Request data is directly passed to model creation/update without field filtering, allowing attackers to set privileged fields.",
945
+ lineNumbers: massAssignLines,
946
+ recommendation: "Explicitly whitelist allowed fields. Use strong parameters (Ruby), serializers (Python), or DTOs (Java/C#).",
947
+ reference: "CWE-915: Mass Assignment",
948
+ suggestedFix: "Whitelist fields: const { name, email } = req.body; Ruby: params.require(:user).permit(:name, :email).",
949
+ confidence: 0.85,
950
+ });
951
+ }
952
+ }
953
+ // ── Weak Cryptography — static IV, ECB mode, short keys ──
954
+ {
955
+ const weakCryptoLines = [];
956
+ const codeLines = code.split("\n");
957
+ for (let i = 0; i < codeLines.length; i++) {
958
+ const line = codeLines[i];
959
+ // Static/hardcoded IV
960
+ if (/(?:static\s*IV|iv\s*=\s*\[?\s*["']|iv\s*:=\s*\[\]byte\s*\()/i.test(line)) {
961
+ weakCryptoLines.push(i + 1);
962
+ }
963
+ // ECB mode (any language)
964
+ if (/\bECB\b|NewCipher\s*\(|cipher\.NewCFBEncrypter\s*\(.*static/i.test(line)) {
965
+ weakCryptoLines.push(i + 1);
966
+ }
967
+ }
968
+ if (weakCryptoLines.length > 0) {
969
+ // Don't duplicate if weak-crypto is already detected by the pattern-based check
970
+ const existingCryptoFinding = findings.some((f) => f.title.includes("Weak cryptographic") || f.title.includes("ECB"));
971
+ if (!existingCryptoFinding) {
972
+ findings.push({
973
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
974
+ severity: "high",
975
+ title: "Weak cryptographic configuration",
976
+ description: "Static IVs, ECB mode, or other weak cryptographic configurations are used, reducing the confidentiality of encrypted data.",
977
+ lineNumbers: weakCryptoLines,
978
+ recommendation: "Use a random IV for each encryption operation. Use AES-GCM or AES-CBC (never ECB). Use keys of at least 256 bits.",
979
+ reference: "CWE-327: Use of Broken Crypto Algorithm",
980
+ suggestedFix: "Generate random IV: crypto.randomBytes(16) (Node.js), os.urandom(16) (Python), SecureRandom (Java).",
981
+ confidence: 0.85,
982
+ });
983
+ }
984
+ }
985
+ }
986
+ // ── Regex DoS (ReDoS) — super-linear regex patterns ──
987
+ {
988
+ const redosLines = [];
989
+ const codeLines = code.split("\n");
990
+ for (let i = 0; i < codeLines.length; i++) {
991
+ const line = codeLines[i];
992
+ // Detect common ReDoS patterns: nested quantifiers, overlapping alternations
993
+ // Check in regex constructor calls
994
+ if (/(?:new\s+RegExp|re\.compile|Regex|Pattern\.compile)\s*\(/i.test(line)) {
995
+ if (/[+*]\s*\)\s*[+*]|(?:\.\*){2,}|\([^)]*[+*][^)]*\)\s*[+*]/.test(line)) {
996
+ redosLines.push(i + 1);
997
+ }
998
+ }
999
+ // Also check regex literals and raw strings for nested quantifiers
1000
+ if (/\/[^/]+\/|r["'][^"']+["']|re\.compile\s*\(/.test(line)) {
1001
+ if (/\([^)]*[+*][^)]*\)\s*[+*]|\(\?\:[^)]*[+*][^)]*\)\s*[+*]/.test(line)) {
1002
+ redosLines.push(i + 1);
1003
+ }
1004
+ }
1005
+ // Detect dangerous patterns like ([a-zA-Z]+)* or (\w+)* even in variable assignments
1006
+ if (/\([^)]*(?:\[[^\]]+\]|\\[wdsDWS])\+\)\s*[*+]/.test(line)) {
1007
+ redosLines.push(i + 1);
1008
+ }
1009
+ // User input passed directly to regex constructor
1010
+ if (/(?:new\s+RegExp|re\.compile|Regex|Pattern\.compile)\s*\(.*(?:req\.|request\.|params\.|query\.|body\.|input|user)/i.test(line)) {
1011
+ redosLines.push(i + 1);
1012
+ }
1013
+ }
1014
+ if (redosLines.length > 0) {
1015
+ findings.push({
1016
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
1017
+ severity: "medium",
1018
+ title: "Potential Regular Expression Denial of Service (ReDoS)",
1019
+ description: "User input is used in regex construction or a regex with nested quantifiers is used, which could cause catastrophic backtracking.",
1020
+ lineNumbers: redosLines,
1021
+ recommendation: "Validate and escape user input before using in regex. Avoid nested quantifiers. Consider using a linear-time regex engine.",
1022
+ reference: "CWE-1333: Inefficient Regular Expression Complexity",
1023
+ suggestedFix: "Escape user input: new RegExp(input.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'))",
1024
+ confidence: 0.8,
1025
+ });
1026
+ }
1027
+ }
1028
+ // ── PHP File Inclusion (LFI/RFI) ──
1029
+ {
1030
+ const fileInclusionLines = [];
1031
+ const codeLines = code.split("\n");
1032
+ for (let i = 0; i < codeLines.length; i++) {
1033
+ const line = codeLines[i];
1034
+ // Match include/require with any PHP variable on the same line (covers $var, "str" . $var, etc.)
1035
+ if (/\b(?:include|require|include_once|require_once)\b/i.test(line) &&
1036
+ /\$\w+/.test(line) &&
1037
+ !/^\s*(?:\/\/|#|\*)/.test(line)) {
1038
+ fileInclusionLines.push(i + 1);
1039
+ }
1040
+ }
1041
+ if (fileInclusionLines.length > 0) {
1042
+ findings.push({
1043
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
1044
+ severity: "critical",
1045
+ title: "Potential PHP file inclusion vulnerability (LFI/RFI)",
1046
+ description: "PHP include/require uses a variable path, which may allow attackers to include arbitrary local or remote files.",
1047
+ lineNumbers: fileInclusionLines,
1048
+ recommendation: "Use a whitelist of allowed files. Never pass user input directly to include/require.",
1049
+ reference: "OWASP File Inclusion — CWE-98",
1050
+ suggestedFix: "Whitelist: $allowed = ['header', 'footer']; if (in_array($page, $allowed)) { include \"$page.php\"; }",
1051
+ confidence: 0.9,
1052
+ });
1053
+ }
1054
+ }
1055
+ // ── Insecure WebView — loading untrusted content with JS enabled ──
1056
+ {
1057
+ const webviewLines = [];
1058
+ const codeLines = code.split("\n");
1059
+ const hasJSEnabled = /(?:javaScriptEnabled|setJavaScriptEnabled\s*\(\s*true|JavaScriptMode\.unrestricted)/i.test(code);
1060
+ if (hasJSEnabled) {
1061
+ for (let i = 0; i < codeLines.length; i++) {
1062
+ const line = codeLines[i];
1063
+ if (/(?:loadUrl|loadData|evaluateJavascript|addJavascriptInterface)\s*\(/i.test(line) &&
1064
+ /(?:\+|\$\{|\$\w+|user|input|params|intent)/i.test(line)) {
1065
+ webviewLines.push(i + 1);
1066
+ }
1067
+ }
1068
+ }
1069
+ // Also detect WebView with JavaScript enabled + loading external/user content
1070
+ if (hasJSEnabled) {
1071
+ const hasUntrustedLoad = /loadUrl\s*\(|url\s*=.*(?:intent|getStringExtra|params|query)/i.test(code);
1072
+ if (hasUntrustedLoad && webviewLines.length === 0) {
1073
+ const jsEnabledLine = getLineNumbers(code, /javaScriptEnabled|setJavaScriptEnabled\s*\(\s*true|JavaScriptMode\.unrestricted/gi);
1074
+ webviewLines.push(...jsEnabledLine);
1075
+ }
1076
+ }
1077
+ if (webviewLines.length > 0) {
1078
+ findings.push({
1079
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
1080
+ severity: "high",
1081
+ title: "Insecure WebView configuration",
1082
+ description: "WebView has JavaScript enabled and loads untrusted content, which could allow XSS or code execution attacks.",
1083
+ lineNumbers: webviewLines,
1084
+ recommendation: "Disable JavaScript in WebViews unless absolutely necessary. Validate all URLs loaded in WebViews.",
1085
+ reference: "CWE-749: Exposed Dangerous Method or Function",
1086
+ suggestedFix: "Validate WebView URLs against a whitelist and disable JavaScript when not needed.",
1087
+ confidence: 0.8,
1088
+ });
1089
+ }
1090
+ }
1091
+ // Debug mode enabled in production-ready code
1092
+ const debugLines = getLangLineNumbers(code, language, LP.FRAMEWORK_DEBUG_MODE);
1093
+ if (debugLines.length > 0) {
1094
+ findings.push({
1095
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
1096
+ severity: "high",
1097
+ title: "Debug mode enabled",
1098
+ description: "Debug mode is explicitly enabled, which exposes detailed error messages, stack traces, and potentially source code to attackers in production.",
1099
+ lineNumbers: debugLines,
1100
+ recommendation: "Disable debug mode for production deployments. Use environment variables to toggle debug (e.g. DEBUG=false, FLASK_DEBUG=0).",
1101
+ reference: "CWE-215: Insertion of Sensitive Information Into Debugging Code",
1102
+ suggestedFix: "Set debug mode based on environment: app.run(debug=os.environ.get('FLASK_DEBUG', '0') == '1') or remove .UseDeveloperExceptionPage() in production.",
1103
+ confidence: 0.85,
1104
+ });
1105
+ }
1106
+ // Weak or short secret keys in framework config
1107
+ const secretKeyLines = getLangLineNumbers(code, language, LP.FRAMEWORK_SECRET_KEY);
1108
+ if (secretKeyLines.length > 0) {
1109
+ findings.push({
1110
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
1111
+ severity: "critical",
1112
+ title: "Weak or hardcoded secret key",
1113
+ description: "A framework secret key is hardcoded with a short or predictable value. This key is used to sign sessions, CSRF tokens, or JWTs — a weak key allows forgery.",
1114
+ lineNumbers: secretKeyLines,
1115
+ recommendation: "Use a cryptographically random secret of at least 32 bytes. Load from environment variable or secrets manager, never commit to source control.",
1116
+ reference: "CWE-321: Use of Hard-coded Cryptographic Key",
1117
+ suggestedFix: "Generate strong secret: python -c 'import secrets; print(secrets.token_hex(32))' and load via env: SECRET_KEY = os.environ['SECRET_KEY']",
1118
+ confidence: 0.9,
1119
+ });
1120
+ }
1121
+ // Mass assignment / over-posting (framework-specific)
1122
+ const fwMassAssignLines = getLangLineNumbers(code, language, LP.FRAMEWORK_MASS_ASSIGNMENT);
1123
+ if (fwMassAssignLines.length > 0) {
1124
+ findings.push({
1125
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
1126
+ severity: "high",
1127
+ title: "Potential mass assignment vulnerability",
1128
+ description: "Request body is directly passed to create/update operations without field whitelisting. Attackers can set admin flags, prices, or other privileged fields.",
1129
+ lineNumbers: fwMassAssignLines,
1130
+ recommendation: "Explicitly pick allowed fields from the request body. Use DTOs, validation schemas (Joi, Zod), or framework-specific binding whitelists.",
1131
+ reference: "CWE-915: Improperly Controlled Modification of Dynamically-Determined Object Attributes",
1132
+ suggestedFix: "Whitelist fields: const { name, email } = req.body; await User.create({ name, email }); instead of User.create(req.body).",
1133
+ confidence: 0.8,
1134
+ });
1135
+ }
1136
+ // ── Kubernetes YAML security: privileged containers, host networking ──
1137
+ {
1138
+ const k8sPrivilegedLines = [];
1139
+ const k8sHostNetLines = [];
1140
+ const k8sRunAsRootLines = [];
1141
+ const codeLines = code.split("\n");
1142
+ for (let i = 0; i < codeLines.length; i++) {
1143
+ const line = codeLines[i];
1144
+ // privileged: true in securityContext
1145
+ if (/^\s*privileged\s*:\s*true/i.test(line)) {
1146
+ k8sPrivilegedLines.push(i + 1);
1147
+ }
1148
+ // hostNetwork: true
1149
+ if (/^\s*hostNetwork\s*:\s*true/i.test(line)) {
1150
+ k8sHostNetLines.push(i + 1);
1151
+ }
1152
+ // runAsUser: 0 (root)
1153
+ if (/^\s*runAsUser\s*:\s*0\s*$/i.test(line)) {
1154
+ k8sRunAsRootLines.push(i + 1);
1155
+ }
1156
+ }
1157
+ const allK8sLines = [...new Set([...k8sPrivilegedLines, ...k8sHostNetLines, ...k8sRunAsRootLines])].sort((a, b) => a - b);
1158
+ // Only emit if the file looks like K8s manifest (has kind: or apiVersion:)
1159
+ const isK8sManifest = /^\s*(?:kind|apiVersion)\s*:/im.test(code) || /securityContext\s*:/i.test(code);
1160
+ if (allK8sLines.length > 0 && isK8sManifest) {
1161
+ findings.push({
1162
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
1163
+ severity: "critical",
1164
+ title: "Insecure Kubernetes pod/container configuration",
1165
+ description: "Kubernetes manifest has insecure settings: privileged containers, host networking, or running as root. These disable container isolation.",
1166
+ lineNumbers: allK8sLines,
1167
+ recommendation: "Set privileged: false, runAsNonRoot: true, readOnlyRootFilesystem: true, and drop all capabilities. Avoid hostNetwork: true.",
1168
+ reference: "CIS Kubernetes Benchmark: Pod Security",
1169
+ suggestedFix: "Set securityContext: { privileged: false, runAsNonRoot: true, allowPrivilegeEscalation: false, readOnlyRootFilesystem: true }",
1170
+ confidence: 0.95,
1171
+ });
1172
+ }
1173
+ // Also detect Docker run commands with --privileged in any language
1174
+ if (k8sPrivilegedLines.length === 0) {
1175
+ const dockerPrivLines = [];
1176
+ for (let i = 0; i < codeLines.length; i++) {
1177
+ if (/docker\s+run\s+.*--privileged/i.test(codeLines[i])) {
1178
+ dockerPrivLines.push(i + 1);
1179
+ }
1180
+ }
1181
+ if (dockerPrivLines.length > 0) {
1182
+ findings.push({
1183
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
1184
+ severity: "critical",
1185
+ title: "Docker container running in privileged mode",
1186
+ description: "Docker run command uses --privileged, giving the container full host access and disabling all security boundaries.",
1187
+ lineNumbers: dockerPrivLines,
1188
+ recommendation: "Remove --privileged. Use specific capabilities (--cap-add) only as needed.",
1189
+ reference: "CIS Docker Benchmark: Container Runtime",
1190
+ suggestedFix: "Replace --privileged with granular capabilities: docker run --cap-add NET_ADMIN instead of --privileged.",
1191
+ confidence: 0.95,
1192
+ });
1193
+ }
1194
+ }
1195
+ }
1196
+ return findings;
1197
+ }