circle-ir-ai 1.1.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 (420) hide show
  1. package/CHANGELOG.md +105 -0
  2. package/LICENSE +15 -0
  3. package/README.md +336 -0
  4. package/dist/action-queue/aggregator.d.ts +40 -0
  5. package/dist/action-queue/aggregator.d.ts.map +1 -0
  6. package/dist/action-queue/aggregator.js +375 -0
  7. package/dist/action-queue/aggregator.js.map +1 -0
  8. package/dist/action-queue/index.d.ts +14 -0
  9. package/dist/action-queue/index.d.ts.map +1 -0
  10. package/dist/action-queue/index.js +17 -0
  11. package/dist/action-queue/index.js.map +1 -0
  12. package/dist/action-queue/queue.d.ts +74 -0
  13. package/dist/action-queue/queue.d.ts.map +1 -0
  14. package/dist/action-queue/queue.js +433 -0
  15. package/dist/action-queue/queue.js.map +1 -0
  16. package/dist/action-queue/types.d.ts +162 -0
  17. package/dist/action-queue/types.d.ts.map +1 -0
  18. package/dist/action-queue/types.js +44 -0
  19. package/dist/action-queue/types.js.map +1 -0
  20. package/dist/agents/enrichment-agent.d.ts +16 -0
  21. package/dist/agents/enrichment-agent.d.ts.map +1 -0
  22. package/dist/agents/enrichment-agent.js +102 -0
  23. package/dist/agents/enrichment-agent.js.map +1 -0
  24. package/dist/agents/index.d.ts +12 -0
  25. package/dist/agents/index.d.ts.map +1 -0
  26. package/dist/agents/index.js +15 -0
  27. package/dist/agents/index.js.map +1 -0
  28. package/dist/agents/mastra/agents.d.ts +373 -0
  29. package/dist/agents/mastra/agents.d.ts.map +1 -0
  30. package/dist/agents/mastra/agents.js +347 -0
  31. package/dist/agents/mastra/agents.js.map +1 -0
  32. package/dist/agents/mastra/index.d.ts +12 -0
  33. package/dist/agents/mastra/index.d.ts.map +1 -0
  34. package/dist/agents/mastra/index.js +17 -0
  35. package/dist/agents/mastra/index.js.map +1 -0
  36. package/dist/agents/mastra/instance.d.ts +383 -0
  37. package/dist/agents/mastra/instance.d.ts.map +1 -0
  38. package/dist/agents/mastra/instance.js +37 -0
  39. package/dist/agents/mastra/instance.js.map +1 -0
  40. package/dist/agents/mastra/steps.d.ts +300 -0
  41. package/dist/agents/mastra/steps.d.ts.map +1 -0
  42. package/dist/agents/mastra/steps.js +468 -0
  43. package/dist/agents/mastra/steps.js.map +1 -0
  44. package/dist/agents/mastra/swarm.d.ts +106 -0
  45. package/dist/agents/mastra/swarm.d.ts.map +1 -0
  46. package/dist/agents/mastra/swarm.js +501 -0
  47. package/dist/agents/mastra/swarm.js.map +1 -0
  48. package/dist/agents/mastra/workflow.d.ts +81 -0
  49. package/dist/agents/mastra/workflow.d.ts.map +1 -0
  50. package/dist/agents/mastra/workflow.js +460 -0
  51. package/dist/agents/mastra/workflow.js.map +1 -0
  52. package/dist/agents/multi/agents/security.d.ts +29 -0
  53. package/dist/agents/multi/agents/security.d.ts.map +1 -0
  54. package/dist/agents/multi/agents/security.js +830 -0
  55. package/dist/agents/multi/agents/security.js.map +1 -0
  56. package/dist/agents/multi/extractor.d.ts +21 -0
  57. package/dist/agents/multi/extractor.d.ts.map +1 -0
  58. package/dist/agents/multi/extractor.js +483 -0
  59. package/dist/agents/multi/extractor.js.map +1 -0
  60. package/dist/agents/multi/index.d.ts +32 -0
  61. package/dist/agents/multi/index.d.ts.map +1 -0
  62. package/dist/agents/multi/index.js +34 -0
  63. package/dist/agents/multi/index.js.map +1 -0
  64. package/dist/agents/multi/runner.d.ts +79 -0
  65. package/dist/agents/multi/runner.d.ts.map +1 -0
  66. package/dist/agents/multi/runner.js +323 -0
  67. package/dist/agents/multi/runner.js.map +1 -0
  68. package/dist/agents/security-agent.d.ts +16 -0
  69. package/dist/agents/security-agent.d.ts.map +1 -0
  70. package/dist/agents/security-agent.js +299 -0
  71. package/dist/agents/security-agent.js.map +1 -0
  72. package/dist/agents/types.d.ts +373 -0
  73. package/dist/agents/types.d.ts.map +1 -0
  74. package/dist/agents/types.js +14 -0
  75. package/dist/agents/types.js.map +1 -0
  76. package/dist/agents/verification-agent.d.ts +23 -0
  77. package/dist/agents/verification-agent.d.ts.map +1 -0
  78. package/dist/agents/verification-agent.js +217 -0
  79. package/dist/agents/verification-agent.js.map +1 -0
  80. package/dist/agents/workflow.d.ts +30 -0
  81. package/dist/agents/workflow.d.ts.map +1 -0
  82. package/dist/agents/workflow.js +79 -0
  83. package/dist/agents/workflow.js.map +1 -0
  84. package/dist/analysis/enriched.d.ts +16 -0
  85. package/dist/analysis/enriched.d.ts.map +1 -0
  86. package/dist/analysis/enriched.js +297 -0
  87. package/dist/analysis/enriched.js.map +1 -0
  88. package/dist/analysis/llm-correlated-predicates.d.ts +80 -0
  89. package/dist/analysis/llm-correlated-predicates.d.ts.map +1 -0
  90. package/dist/analysis/llm-correlated-predicates.js +255 -0
  91. package/dist/analysis/llm-correlated-predicates.js.map +1 -0
  92. package/dist/analysis/llm-cross-file-taint.d.ts +86 -0
  93. package/dist/analysis/llm-cross-file-taint.d.ts.map +1 -0
  94. package/dist/analysis/llm-cross-file-taint.js +264 -0
  95. package/dist/analysis/llm-cross-file-taint.js.map +1 -0
  96. package/dist/analysis/pattern-discovery.d.ts +79 -0
  97. package/dist/analysis/pattern-discovery.d.ts.map +1 -0
  98. package/dist/analysis/pattern-discovery.js +447 -0
  99. package/dist/analysis/pattern-discovery.js.map +1 -0
  100. package/dist/cache/file-cache.d.ts +89 -0
  101. package/dist/cache/file-cache.d.ts.map +1 -0
  102. package/dist/cache/file-cache.js +208 -0
  103. package/dist/cache/file-cache.js.map +1 -0
  104. package/dist/cache/index.d.ts +6 -0
  105. package/dist/cache/index.d.ts.map +1 -0
  106. package/dist/cache/index.js +5 -0
  107. package/dist/cache/index.js.map +1 -0
  108. package/dist/cli/args.d.ts +52 -0
  109. package/dist/cli/args.d.ts.map +1 -0
  110. package/dist/cli/args.js +422 -0
  111. package/dist/cli/args.js.map +1 -0
  112. package/dist/cli/colors.d.ts +31 -0
  113. package/dist/cli/colors.d.ts.map +1 -0
  114. package/dist/cli/colors.js +80 -0
  115. package/dist/cli/colors.js.map +1 -0
  116. package/dist/cli/commands/analyze-skill.d.ts +33 -0
  117. package/dist/cli/commands/analyze-skill.d.ts.map +1 -0
  118. package/dist/cli/commands/analyze-skill.js +217 -0
  119. package/dist/cli/commands/analyze-skill.js.map +1 -0
  120. package/dist/cli/commands/analyze.d.ts +18 -0
  121. package/dist/cli/commands/analyze.d.ts.map +1 -0
  122. package/dist/cli/commands/analyze.js +30 -0
  123. package/dist/cli/commands/analyze.js.map +1 -0
  124. package/dist/cli/commands/benchmark-runner.d.ts +42 -0
  125. package/dist/cli/commands/benchmark-runner.d.ts.map +1 -0
  126. package/dist/cli/commands/benchmark-runner.js +18 -0
  127. package/dist/cli/commands/benchmark-runner.js.map +1 -0
  128. package/dist/cli/commands/benchmark.d.ts +11 -0
  129. package/dist/cli/commands/benchmark.d.ts.map +1 -0
  130. package/dist/cli/commands/benchmark.js +90 -0
  131. package/dist/cli/commands/benchmark.js.map +1 -0
  132. package/dist/cli/commands/dead-code.d.ts +11 -0
  133. package/dist/cli/commands/dead-code.d.ts.map +1 -0
  134. package/dist/cli/commands/dead-code.js +65 -0
  135. package/dist/cli/commands/dead-code.js.map +1 -0
  136. package/dist/cli/commands/generate-spec.d.ts +11 -0
  137. package/dist/cli/commands/generate-spec.d.ts.map +1 -0
  138. package/dist/cli/commands/generate-spec.js +67 -0
  139. package/dist/cli/commands/generate-spec.js.map +1 -0
  140. package/dist/cli/commands/health.d.ts +11 -0
  141. package/dist/cli/commands/health.d.ts.map +1 -0
  142. package/dist/cli/commands/health.js +67 -0
  143. package/dist/cli/commands/health.js.map +1 -0
  144. package/dist/cli/commands/project.d.ts +21 -0
  145. package/dist/cli/commands/project.d.ts.map +1 -0
  146. package/dist/cli/commands/project.js +92 -0
  147. package/dist/cli/commands/project.js.map +1 -0
  148. package/dist/cli/commands/scan.d.ts +11 -0
  149. package/dist/cli/commands/scan.d.ts.map +1 -0
  150. package/dist/cli/commands/scan.js +68 -0
  151. package/dist/cli/commands/scan.js.map +1 -0
  152. package/dist/cli/commands/secrets.d.ts +11 -0
  153. package/dist/cli/commands/secrets.d.ts.map +1 -0
  154. package/dist/cli/commands/secrets.js +71 -0
  155. package/dist/cli/commands/secrets.js.map +1 -0
  156. package/dist/cli/commands/swarm.d.ts +20 -0
  157. package/dist/cli/commands/swarm.d.ts.map +1 -0
  158. package/dist/cli/commands/swarm.js +174 -0
  159. package/dist/cli/commands/swarm.js.map +1 -0
  160. package/dist/cli/config.d.ts +103 -0
  161. package/dist/cli/config.d.ts.map +1 -0
  162. package/dist/cli/config.js +307 -0
  163. package/dist/cli/config.js.map +1 -0
  164. package/dist/cli/discovery.d.ts +31 -0
  165. package/dist/cli/discovery.d.ts.map +1 -0
  166. package/dist/cli/discovery.js +212 -0
  167. package/dist/cli/discovery.js.map +1 -0
  168. package/dist/cli/formatters/index.d.ts +15 -0
  169. package/dist/cli/formatters/index.d.ts.map +1 -0
  170. package/dist/cli/formatters/index.js +51 -0
  171. package/dist/cli/formatters/index.js.map +1 -0
  172. package/dist/cli/formatters/json.d.ts +11 -0
  173. package/dist/cli/formatters/json.d.ts.map +1 -0
  174. package/dist/cli/formatters/json.js +12 -0
  175. package/dist/cli/formatters/json.js.map +1 -0
  176. package/dist/cli/formatters/project-json.d.ts +11 -0
  177. package/dist/cli/formatters/project-json.d.ts.map +1 -0
  178. package/dist/cli/formatters/project-json.js +12 -0
  179. package/dist/cli/formatters/project-json.js.map +1 -0
  180. package/dist/cli/formatters/project-sarif.d.ts +11 -0
  181. package/dist/cli/formatters/project-sarif.d.ts.map +1 -0
  182. package/dist/cli/formatters/project-sarif.js +127 -0
  183. package/dist/cli/formatters/project-sarif.js.map +1 -0
  184. package/dist/cli/formatters/project-summary.d.ts +11 -0
  185. package/dist/cli/formatters/project-summary.d.ts.map +1 -0
  186. package/dist/cli/formatters/project-summary.js +202 -0
  187. package/dist/cli/formatters/project-summary.js.map +1 -0
  188. package/dist/cli/formatters/sarif-shared.d.ts +101 -0
  189. package/dist/cli/formatters/sarif-shared.d.ts.map +1 -0
  190. package/dist/cli/formatters/sarif-shared.js +57 -0
  191. package/dist/cli/formatters/sarif-shared.js.map +1 -0
  192. package/dist/cli/formatters/sarif.d.ts +12 -0
  193. package/dist/cli/formatters/sarif.d.ts.map +1 -0
  194. package/dist/cli/formatters/sarif.js +92 -0
  195. package/dist/cli/formatters/sarif.js.map +1 -0
  196. package/dist/cli/formatters/summary.d.ts +11 -0
  197. package/dist/cli/formatters/summary.d.ts.map +1 -0
  198. package/dist/cli/formatters/summary.js +240 -0
  199. package/dist/cli/formatters/summary.js.map +1 -0
  200. package/dist/cli/formatters/two-phase-summary.d.ts +11 -0
  201. package/dist/cli/formatters/two-phase-summary.d.ts.map +1 -0
  202. package/dist/cli/formatters/two-phase-summary.js +188 -0
  203. package/dist/cli/formatters/two-phase-summary.js.map +1 -0
  204. package/dist/cli/index.d.ts +15 -0
  205. package/dist/cli/index.d.ts.map +1 -0
  206. package/dist/cli/index.js +555 -0
  207. package/dist/cli/index.js.map +1 -0
  208. package/dist/components/clustering.d.ts +60 -0
  209. package/dist/components/clustering.d.ts.map +1 -0
  210. package/dist/components/clustering.js +129 -0
  211. package/dist/components/clustering.js.map +1 -0
  212. package/dist/components/enrichment.d.ts +45 -0
  213. package/dist/components/enrichment.d.ts.map +1 -0
  214. package/dist/components/enrichment.js +193 -0
  215. package/dist/components/enrichment.js.map +1 -0
  216. package/dist/components/index.d.ts +29 -0
  217. package/dist/components/index.d.ts.map +1 -0
  218. package/dist/components/index.js +56 -0
  219. package/dist/components/index.js.map +1 -0
  220. package/dist/dead-code/detector.d.ts +200 -0
  221. package/dist/dead-code/detector.d.ts.map +1 -0
  222. package/dist/dead-code/detector.js +1003 -0
  223. package/dist/dead-code/detector.js.map +1 -0
  224. package/dist/dead-code/index.d.ts +7 -0
  225. package/dist/dead-code/index.d.ts.map +1 -0
  226. package/dist/dead-code/index.js +7 -0
  227. package/dist/dead-code/index.js.map +1 -0
  228. package/dist/extractors/index.d.ts +15 -0
  229. package/dist/extractors/index.d.ts.map +1 -0
  230. package/dist/extractors/index.js +14 -0
  231. package/dist/extractors/index.js.map +1 -0
  232. package/dist/extractors/natural-language.d.ts +46 -0
  233. package/dist/extractors/natural-language.d.ts.map +1 -0
  234. package/dist/extractors/natural-language.js +228 -0
  235. package/dist/extractors/natural-language.js.map +1 -0
  236. package/dist/extractors/tree-sitter.d.ts +33 -0
  237. package/dist/extractors/tree-sitter.d.ts.map +1 -0
  238. package/dist/extractors/tree-sitter.js +69 -0
  239. package/dist/extractors/tree-sitter.js.map +1 -0
  240. package/dist/extractors/types.d.ts +62 -0
  241. package/dist/extractors/types.d.ts.map +1 -0
  242. package/dist/extractors/types.js +54 -0
  243. package/dist/extractors/types.js.map +1 -0
  244. package/dist/health-score/calculator.d.ts +123 -0
  245. package/dist/health-score/calculator.d.ts.map +1 -0
  246. package/dist/health-score/calculator.js +444 -0
  247. package/dist/health-score/calculator.js.map +1 -0
  248. package/dist/health-score/index.d.ts +12 -0
  249. package/dist/health-score/index.d.ts.map +1 -0
  250. package/dist/health-score/index.js +14 -0
  251. package/dist/health-score/index.js.map +1 -0
  252. package/dist/health-score/metrics.d.ts +142 -0
  253. package/dist/health-score/metrics.d.ts.map +1 -0
  254. package/dist/health-score/metrics.js +332 -0
  255. package/dist/health-score/metrics.js.map +1 -0
  256. package/dist/index.d.ts +26 -0
  257. package/dist/index.d.ts.map +1 -0
  258. package/dist/index.js +43 -0
  259. package/dist/index.js.map +1 -0
  260. package/dist/llm/ax-client.d.ts +477 -0
  261. package/dist/llm/ax-client.d.ts.map +1 -0
  262. package/dist/llm/ax-client.js +1641 -0
  263. package/dist/llm/ax-client.js.map +1 -0
  264. package/dist/llm/config.d.ts +58 -0
  265. package/dist/llm/config.d.ts.map +1 -0
  266. package/dist/llm/config.js +97 -0
  267. package/dist/llm/config.js.map +1 -0
  268. package/dist/llm/discovery.d.ts +123 -0
  269. package/dist/llm/discovery.d.ts.map +1 -0
  270. package/dist/llm/discovery.js +505 -0
  271. package/dist/llm/discovery.js.map +1 -0
  272. package/dist/llm/enrichment.d.ts +108 -0
  273. package/dist/llm/enrichment.d.ts.map +1 -0
  274. package/dist/llm/enrichment.js +312 -0
  275. package/dist/llm/enrichment.js.map +1 -0
  276. package/dist/llm/index.d.ts +13 -0
  277. package/dist/llm/index.d.ts.map +1 -0
  278. package/dist/llm/index.js +22 -0
  279. package/dist/llm/index.js.map +1 -0
  280. package/dist/llm/language-context.d.ts +64 -0
  281. package/dist/llm/language-context.d.ts.map +1 -0
  282. package/dist/llm/language-context.js +492 -0
  283. package/dist/llm/language-context.js.map +1 -0
  284. package/dist/llm/pattern-verification.d.ts +39 -0
  285. package/dist/llm/pattern-verification.d.ts.map +1 -0
  286. package/dist/llm/pattern-verification.js +127 -0
  287. package/dist/llm/pattern-verification.js.map +1 -0
  288. package/dist/llm/prompt-security.d.ts +120 -0
  289. package/dist/llm/prompt-security.d.ts.map +1 -0
  290. package/dist/llm/prompt-security.js +301 -0
  291. package/dist/llm/prompt-security.js.map +1 -0
  292. package/dist/llm/prompts/index.d.ts +31 -0
  293. package/dist/llm/prompts/index.d.ts.map +1 -0
  294. package/dist/llm/prompts/index.js +92 -0
  295. package/dist/llm/prompts/index.js.map +1 -0
  296. package/dist/llm/prompts/rust.d.ts +30 -0
  297. package/dist/llm/prompts/rust.d.ts.map +1 -0
  298. package/dist/llm/prompts/rust.js +121 -0
  299. package/dist/llm/prompts/rust.js.map +1 -0
  300. package/dist/llm/schemas.d.ts +892 -0
  301. package/dist/llm/schemas.d.ts.map +1 -0
  302. package/dist/llm/schemas.js +258 -0
  303. package/dist/llm/schemas.js.map +1 -0
  304. package/dist/llm/verification.d.ts +127 -0
  305. package/dist/llm/verification.d.ts.map +1 -0
  306. package/dist/llm/verification.js +394 -0
  307. package/dist/llm/verification.js.map +1 -0
  308. package/dist/project/analyzer.d.ts +30 -0
  309. package/dist/project/analyzer.d.ts.map +1 -0
  310. package/dist/project/analyzer.js +358 -0
  311. package/dist/project/analyzer.js.map +1 -0
  312. package/dist/project/call-graph.d.ts +22 -0
  313. package/dist/project/call-graph.d.ts.map +1 -0
  314. package/dist/project/call-graph.js +246 -0
  315. package/dist/project/call-graph.js.map +1 -0
  316. package/dist/project/index.d.ts +18 -0
  317. package/dist/project/index.d.ts.map +1 -0
  318. package/dist/project/index.js +20 -0
  319. package/dist/project/index.js.map +1 -0
  320. package/dist/project/taint-paths.d.ts +22 -0
  321. package/dist/project/taint-paths.d.ts.map +1 -0
  322. package/dist/project/taint-paths.js +265 -0
  323. package/dist/project/taint-paths.js.map +1 -0
  324. package/dist/project/two-phase-analyzer.d.ts +143 -0
  325. package/dist/project/two-phase-analyzer.d.ts.map +1 -0
  326. package/dist/project/two-phase-analyzer.js +646 -0
  327. package/dist/project/two-phase-analyzer.js.map +1 -0
  328. package/dist/project/type-hierarchy.d.ts +28 -0
  329. package/dist/project/type-hierarchy.d.ts.map +1 -0
  330. package/dist/project/type-hierarchy.js +218 -0
  331. package/dist/project/type-hierarchy.js.map +1 -0
  332. package/dist/secret-scan/index.d.ts +12 -0
  333. package/dist/secret-scan/index.d.ts.map +1 -0
  334. package/dist/secret-scan/index.js +14 -0
  335. package/dist/secret-scan/index.js.map +1 -0
  336. package/dist/secret-scan/patterns.d.ts +38 -0
  337. package/dist/secret-scan/patterns.d.ts.map +1 -0
  338. package/dist/secret-scan/patterns.js +473 -0
  339. package/dist/secret-scan/patterns.js.map +1 -0
  340. package/dist/secret-scan/scanner.d.ts +162 -0
  341. package/dist/secret-scan/scanner.d.ts.map +1 -0
  342. package/dist/secret-scan/scanner.js +511 -0
  343. package/dist/secret-scan/scanner.js.map +1 -0
  344. package/dist/security-scan/index.d.ts +12 -0
  345. package/dist/security-scan/index.d.ts.map +1 -0
  346. package/dist/security-scan/index.js +15 -0
  347. package/dist/security-scan/index.js.map +1 -0
  348. package/dist/security-scan/owasp-mapping.d.ts +29 -0
  349. package/dist/security-scan/owasp-mapping.d.ts.map +1 -0
  350. package/dist/security-scan/owasp-mapping.js +246 -0
  351. package/dist/security-scan/owasp-mapping.js.map +1 -0
  352. package/dist/security-scan/scanner.d.ts +204 -0
  353. package/dist/security-scan/scanner.d.ts.map +1 -0
  354. package/dist/security-scan/scanner.js +693 -0
  355. package/dist/security-scan/scanner.js.map +1 -0
  356. package/dist/security-scan/trend-tracker.d.ts +150 -0
  357. package/dist/security-scan/trend-tracker.d.ts.map +1 -0
  358. package/dist/security-scan/trend-tracker.js +299 -0
  359. package/dist/security-scan/trend-tracker.js.map +1 -0
  360. package/dist/skills/bundle-loader.d.ts +26 -0
  361. package/dist/skills/bundle-loader.d.ts.map +1 -0
  362. package/dist/skills/bundle-loader.js +284 -0
  363. package/dist/skills/bundle-loader.js.map +1 -0
  364. package/dist/skills/capability-mismatch.d.ts +21 -0
  365. package/dist/skills/capability-mismatch.d.ts.map +1 -0
  366. package/dist/skills/capability-mismatch.js +188 -0
  367. package/dist/skills/capability-mismatch.js.map +1 -0
  368. package/dist/skills/index.d.ts +10 -0
  369. package/dist/skills/index.d.ts.map +1 -0
  370. package/dist/skills/index.js +9 -0
  371. package/dist/skills/index.js.map +1 -0
  372. package/dist/skills/skill-analyzer.d.ts +16 -0
  373. package/dist/skills/skill-analyzer.d.ts.map +1 -0
  374. package/dist/skills/skill-analyzer.js +361 -0
  375. package/dist/skills/skill-analyzer.js.map +1 -0
  376. package/dist/skills/types.d.ts +195 -0
  377. package/dist/skills/types.d.ts.map +1 -0
  378. package/dist/skills/types.js +7 -0
  379. package/dist/skills/types.js.map +1 -0
  380. package/dist/specifica/conflict-resolver.d.ts +23 -0
  381. package/dist/specifica/conflict-resolver.d.ts.map +1 -0
  382. package/dist/specifica/conflict-resolver.js +129 -0
  383. package/dist/specifica/conflict-resolver.js.map +1 -0
  384. package/dist/specifica/evidence-aggregator.d.ts +33 -0
  385. package/dist/specifica/evidence-aggregator.d.ts.map +1 -0
  386. package/dist/specifica/evidence-aggregator.js +236 -0
  387. package/dist/specifica/evidence-aggregator.js.map +1 -0
  388. package/dist/specifica/evidence-extractor.d.ts +13 -0
  389. package/dist/specifica/evidence-extractor.d.ts.map +1 -0
  390. package/dist/specifica/evidence-extractor.js +431 -0
  391. package/dist/specifica/evidence-extractor.js.map +1 -0
  392. package/dist/specifica/feature-clustering.d.ts +19 -0
  393. package/dist/specifica/feature-clustering.d.ts.map +1 -0
  394. package/dist/specifica/feature-clustering.js +231 -0
  395. package/dist/specifica/feature-clustering.js.map +1 -0
  396. package/dist/specifica/generator.d.ts +16 -0
  397. package/dist/specifica/generator.d.ts.map +1 -0
  398. package/dist/specifica/generator.js +277 -0
  399. package/dist/specifica/generator.js.map +1 -0
  400. package/dist/specifica/index.d.ts +15 -0
  401. package/dist/specifica/index.d.ts.map +1 -0
  402. package/dist/specifica/index.js +18 -0
  403. package/dist/specifica/index.js.map +1 -0
  404. package/dist/specifica/prompts.d.ts +21 -0
  405. package/dist/specifica/prompts.d.ts.map +1 -0
  406. package/dist/specifica/prompts.js +196 -0
  407. package/dist/specifica/prompts.js.map +1 -0
  408. package/dist/specifica/spec-generator.d.ts +22 -0
  409. package/dist/specifica/spec-generator.d.ts.map +1 -0
  410. package/dist/specifica/spec-generator.js +229 -0
  411. package/dist/specifica/spec-generator.js.map +1 -0
  412. package/dist/specifica/types.d.ts +213 -0
  413. package/dist/specifica/types.d.ts.map +1 -0
  414. package/dist/specifica/types.js +7 -0
  415. package/dist/specifica/types.js.map +1 -0
  416. package/dist/utils/logger.d.ts +17 -0
  417. package/dist/utils/logger.d.ts.map +1 -0
  418. package/dist/utils/logger.js +51 -0
  419. package/dist/utils/logger.js.map +1 -0
  420. package/package.json +99 -0
@@ -0,0 +1,501 @@
1
+ /**
2
+ * Mastra Swarm Workflow
3
+ *
4
+ * Provides parallel multi-file analysis capabilities using p-queue
5
+ * for distributed SAST analysis with true concurrent processing.
6
+ */
7
+ import * as path from 'path';
8
+ import * as fs from 'fs';
9
+ import PQueue from 'p-queue';
10
+ import { analyzeFile } from './workflow.js';
11
+ /**
12
+ * Detect language from file extension
13
+ */
14
+ function detectLanguageFromPath(filePath) {
15
+ const ext = path.extname(filePath).toLowerCase();
16
+ switch (ext) {
17
+ case '.java':
18
+ return 'java';
19
+ case '.js':
20
+ case '.jsx':
21
+ case '.mjs':
22
+ case '.cjs':
23
+ return 'javascript';
24
+ case '.ts':
25
+ case '.tsx':
26
+ case '.mts':
27
+ case '.cts':
28
+ return 'typescript';
29
+ case '.py':
30
+ return 'python';
31
+ case '.rs':
32
+ return 'rust';
33
+ case '.c':
34
+ case '.h':
35
+ return 'c';
36
+ case '.cpp':
37
+ case '.cc':
38
+ case '.cxx':
39
+ case '.hpp':
40
+ case '.hxx':
41
+ return 'cpp';
42
+ default:
43
+ return 'java'; // Default fallback
44
+ }
45
+ }
46
+ // ============================================================================
47
+ // Timeout Configuration
48
+ // ============================================================================
49
+ /**
50
+ * Adaptive timeout configuration
51
+ * Base: 10s minimum
52
+ * Scale: +50ms per line of code
53
+ * Max: 60s cap (down from 300s)
54
+ * LLM mode adds extra time for LLM calls
55
+ */
56
+ const TIMEOUT_CONFIG = {
57
+ baseMs: 10_000, // 10 seconds minimum
58
+ perLineMs: 50, // 50ms per line of code
59
+ maxMs: 60_000, // 60 seconds maximum (static analysis only)
60
+ llmEnrichmentMs: 60_000, // +60s for LLM enrichment (3 parallel calls @ 30s)
61
+ llmVerificationMs: 60_000, // +60s for LLM verification
62
+ llmMaxMs: 180_000, // 180s max for LLM mode
63
+ };
64
+ /**
65
+ * Calculate adaptive timeout based on file size and LLM mode
66
+ * Larger files get more time, LLM mode adds significant extra time
67
+ */
68
+ function calculateTimeout(fileContent, options) {
69
+ const lines = fileContent.split('\n').length;
70
+ let calculatedTimeout = TIMEOUT_CONFIG.baseMs + (lines * TIMEOUT_CONFIG.perLineMs);
71
+ // Add extra time for LLM operations
72
+ if (options?.enableEnrichment) {
73
+ calculatedTimeout += TIMEOUT_CONFIG.llmEnrichmentMs;
74
+ }
75
+ if (options?.enableVerification) {
76
+ calculatedTimeout += TIMEOUT_CONFIG.llmVerificationMs;
77
+ }
78
+ // Use higher max for LLM mode
79
+ const maxTimeout = (options?.enableEnrichment || options?.enableVerification)
80
+ ? TIMEOUT_CONFIG.llmMaxMs
81
+ : TIMEOUT_CONFIG.maxMs;
82
+ return Math.min(calculatedTimeout, maxTimeout);
83
+ }
84
+ // ============================================================================
85
+ // Swarm Analysis Functions
86
+ // ============================================================================
87
+ /**
88
+ * Resolve file content - supports both eager and lazy loading
89
+ */
90
+ async function resolveFileContent(file) {
91
+ if (file.content !== undefined) {
92
+ return file.content;
93
+ }
94
+ if (file.getContent) {
95
+ return await file.getContent();
96
+ }
97
+ throw new Error(`No content or getContent function provided for ${file.path}`);
98
+ }
99
+ /**
100
+ * Analyze a single file with error handling and timeout
101
+ * Supports lazy content loading to reduce peak memory usage
102
+ */
103
+ async function analyzeFileWithErrorHandling(file, options) {
104
+ // Detect language from file extension, or use provided option
105
+ const language = options.language || detectLanguageFromPath(file.path);
106
+ try {
107
+ // Load content (lazy or eager)
108
+ const content = await resolveFileContent(file);
109
+ // Use adaptive timeout based on file size and LLM mode, or explicit override if provided
110
+ const timeoutMs = options.fileTimeoutMs || calculateTimeout(content, {
111
+ enableEnrichment: options.enableEnrichment,
112
+ enableVerification: options.enableVerification,
113
+ });
114
+ // Create timeout with cleanup capability
115
+ let timeoutId = null;
116
+ const timeoutPromise = new Promise((_, reject) => {
117
+ timeoutId = setTimeout(() => {
118
+ reject(new Error(`Analysis timeout after ${timeoutMs / 1000}s for ${file.path}`));
119
+ }, timeoutMs);
120
+ });
121
+ const analysisPromise = analyzeFile(file.path, content, {
122
+ language,
123
+ enableEnrichment: options.enableEnrichment,
124
+ enableVerification: options.enableVerification,
125
+ maxVerificationTargets: options.maxVerificationTargets,
126
+ verificationStrategy: options.verificationStrategy,
127
+ });
128
+ try {
129
+ // Race between analysis and timeout
130
+ const result = await Promise.race([
131
+ analysisPromise,
132
+ timeoutPromise,
133
+ ]);
134
+ return {
135
+ file: file.path,
136
+ vulnerabilities: result.vulnerabilities,
137
+ stats: result.stats,
138
+ };
139
+ }
140
+ finally {
141
+ // Always clear the timeout to prevent process from hanging
142
+ if (timeoutId)
143
+ clearTimeout(timeoutId);
144
+ }
145
+ }
146
+ catch (error) {
147
+ const errorMessage = error instanceof Error ? error.message : String(error);
148
+ console.warn(`File analysis error for ${file.path}: ${errorMessage}`);
149
+ return {
150
+ file: file.path,
151
+ vulnerabilities: [],
152
+ stats: {
153
+ totalSources: 0,
154
+ totalSinks: 0,
155
+ verifiedVulnerabilities: 0,
156
+ truePositives: 0,
157
+ falsePositives: 0,
158
+ uncertain: 0,
159
+ totalTimeMs: 0,
160
+ },
161
+ error: errorMessage,
162
+ };
163
+ }
164
+ }
165
+ /**
166
+ * Run swarm analysis on multiple files with controlled concurrency
167
+ * Uses p-queue for true concurrent processing without batch blocking
168
+ * Supports persistent caching to skip unchanged files
169
+ * Supports streaming results to disk for memory efficiency
170
+ */
171
+ export async function analyzeFilesSwarm(files, options) {
172
+ const startTime = Date.now();
173
+ const opts = {
174
+ language: options?.language ?? 'java',
175
+ enableEnrichment: options?.enableEnrichment ?? false, // Disabled by default for swarm (faster)
176
+ enableVerification: options?.enableVerification ?? false,
177
+ maxConcurrency: options?.maxConcurrency ?? 10,
178
+ cacheEnabled: options?.cacheEnabled ?? true,
179
+ memoryEfficient: options?.memoryEfficient ?? false,
180
+ ...options,
181
+ };
182
+ // Memory-efficient mode requires streamToFile
183
+ const memoryEfficient = opts.memoryEfficient && opts.streamToFile;
184
+ const results = memoryEfficient ? [] : new Array(files.length);
185
+ const concurrency = opts.maxConcurrency || 10;
186
+ const cache = opts.cache;
187
+ const cacheEnabled = opts.cacheEnabled && cache?.isEnabled();
188
+ let cacheHits = 0;
189
+ let cacheMisses = 0;
190
+ // Streaming stats (tracked even in memory-efficient mode)
191
+ let totalVulnerabilities = 0;
192
+ let totalSources = 0;
193
+ let totalSinks = 0;
194
+ let filesWithVulnerabilities = 0;
195
+ // Setup file streaming if enabled
196
+ let writeStream = null;
197
+ let writeQueue = Promise.resolve();
198
+ if (opts.streamToFile) {
199
+ // Ensure directory exists
200
+ const dir = path.dirname(opts.streamToFile);
201
+ if (dir && dir !== '.') {
202
+ fs.mkdirSync(dir, { recursive: true });
203
+ }
204
+ writeStream = fs.createWriteStream(opts.streamToFile, { flags: 'w' });
205
+ }
206
+ // Helper to write result to stream (serialized to avoid interleaving)
207
+ const writeResult = (result, index) => {
208
+ if (!writeStream)
209
+ return;
210
+ writeQueue = writeQueue.then(() => {
211
+ return new Promise((resolve, reject) => {
212
+ const line = JSON.stringify(result) + '\n';
213
+ const canContinue = writeStream.write(line);
214
+ if (canContinue) {
215
+ opts.onResultWritten?.(result.file, index);
216
+ resolve();
217
+ }
218
+ else {
219
+ writeStream.once('drain', () => {
220
+ opts.onResultWritten?.(result.file, index);
221
+ resolve();
222
+ });
223
+ }
224
+ });
225
+ });
226
+ };
227
+ // Use p-queue for true concurrent processing with backpressure
228
+ const queue = new PQueue({ concurrency });
229
+ // Add all files to queue - they start immediately as slots become available
230
+ const promises = files.map((file, index) => queue.add(async () => {
231
+ opts.onFileStart?.(file.path, index, files.length);
232
+ let result;
233
+ // Load content for cache check (lazy or eager)
234
+ // Note: We load content here for cache key, but memory is still bounded
235
+ // by concurrency since only 'concurrency' files are in-flight at once
236
+ const content = await resolveFileContent(file);
237
+ // Check cache first
238
+ if (cacheEnabled && cache) {
239
+ const cached = cache.get(file.path, content);
240
+ if (cached) {
241
+ cacheHits++;
242
+ result = cached;
243
+ }
244
+ else {
245
+ cacheMisses++;
246
+ // Pass file with resolved content to avoid double-loading
247
+ result = await analyzeFileWithErrorHandling({ path: file.path, content }, opts);
248
+ // Store in cache (only if no error)
249
+ if (!result.error) {
250
+ cache.set(file.path, content, result);
251
+ }
252
+ }
253
+ }
254
+ else {
255
+ // Pass file with resolved content to avoid double-loading
256
+ result = await analyzeFileWithErrorHandling({ path: file.path, content }, opts);
257
+ }
258
+ // Update streaming stats
259
+ totalVulnerabilities += result.vulnerabilities.length;
260
+ totalSources += result.stats.totalSources;
261
+ totalSinks += result.stats.totalSinks;
262
+ if (result.vulnerabilities.length > 0)
263
+ filesWithVulnerabilities++;
264
+ // Write to stream if enabled
265
+ if (writeStream) {
266
+ writeResult(result, index);
267
+ }
268
+ opts.onFileComplete?.(file.path, index, files.length);
269
+ // Store result in memory only if not in memory-efficient mode
270
+ if (!memoryEfficient) {
271
+ results[index] = result;
272
+ }
273
+ return result;
274
+ }));
275
+ // Wait for all analysis to complete
276
+ await Promise.all(promises);
277
+ // Wait for all writes to complete
278
+ await writeQueue;
279
+ // Close write stream
280
+ if (writeStream) {
281
+ await new Promise((resolve, reject) => {
282
+ writeStream.end(() => resolve());
283
+ });
284
+ }
285
+ const totalTimeMs = Date.now() - startTime;
286
+ return {
287
+ results,
288
+ summary: {
289
+ totalFiles: files.length,
290
+ totalVulnerabilities,
291
+ totalSources,
292
+ totalSinks,
293
+ filesWithVulnerabilities,
294
+ totalTimeMs,
295
+ avgTimePerFile: files.length > 0 ? totalTimeMs / files.length : 0,
296
+ cacheHits: cacheEnabled ? cacheHits : undefined,
297
+ cacheMisses: cacheEnabled ? cacheMisses : undefined,
298
+ },
299
+ streamFile: opts.streamToFile,
300
+ };
301
+ }
302
+ /**
303
+ * Stream swarm analysis with progress updates
304
+ * Uses p-queue for true concurrent processing without batch blocking
305
+ */
306
+ export async function* analyzeFilesSwarmStream(files, options) {
307
+ const startTime = Date.now();
308
+ const opts = {
309
+ language: options?.language ?? 'java',
310
+ enableEnrichment: options?.enableEnrichment ?? false,
311
+ enableVerification: options?.enableVerification ?? false,
312
+ maxConcurrency: options?.maxConcurrency ?? 10,
313
+ ...options,
314
+ };
315
+ const results = new Array(files.length);
316
+ const concurrency = opts.maxConcurrency || 10;
317
+ const total = files.length;
318
+ const eventQueue = [];
319
+ let completedCount = 0;
320
+ let resolveWaiting = null;
321
+ const notifyWaiting = () => {
322
+ if (resolveWaiting) {
323
+ const resolve = resolveWaiting;
324
+ resolveWaiting = null;
325
+ resolve();
326
+ }
327
+ };
328
+ const queue = new PQueue({ concurrency });
329
+ // Add all files to queue
330
+ const promises = files.map((file, index) => queue.add(async () => {
331
+ // Push start event
332
+ eventQueue.push({
333
+ type: 'file-start',
334
+ file: file.path,
335
+ index,
336
+ total,
337
+ });
338
+ notifyWaiting();
339
+ const result = await analyzeFileWithErrorHandling(file, opts);
340
+ results[index] = result;
341
+ completedCount++;
342
+ // Push completion event
343
+ eventQueue.push({
344
+ type: 'file-complete',
345
+ file: result.file,
346
+ index,
347
+ total,
348
+ result,
349
+ });
350
+ // Push progress event
351
+ eventQueue.push({
352
+ type: 'progress',
353
+ index: completedCount,
354
+ total,
355
+ });
356
+ notifyWaiting();
357
+ return result;
358
+ }));
359
+ // Yield events as they come in
360
+ const allDone = Promise.all(promises);
361
+ while (completedCount < files.length) {
362
+ // Drain event queue
363
+ while (eventQueue.length > 0) {
364
+ yield eventQueue.shift();
365
+ }
366
+ // Wait for more events or completion
367
+ if (completedCount < files.length) {
368
+ await Promise.race([
369
+ allDone,
370
+ new Promise(resolve => {
371
+ resolveWaiting = resolve;
372
+ }),
373
+ ]);
374
+ }
375
+ }
376
+ // Drain remaining events
377
+ while (eventQueue.length > 0) {
378
+ yield eventQueue.shift();
379
+ }
380
+ await allDone;
381
+ const totalTimeMs = Date.now() - startTime;
382
+ yield {
383
+ type: 'done',
384
+ result: {
385
+ results,
386
+ summary: {
387
+ totalFiles: results.length,
388
+ totalVulnerabilities: results.reduce((sum, r) => sum + r.vulnerabilities.length, 0),
389
+ totalSources: results.reduce((sum, r) => sum + r.stats.totalSources, 0),
390
+ totalSinks: results.reduce((sum, r) => sum + r.stats.totalSinks, 0),
391
+ filesWithVulnerabilities: results.filter(r => r.vulnerabilities.length > 0).length,
392
+ totalTimeMs,
393
+ avgTimePerFile: results.length > 0 ? totalTimeMs / results.length : 0,
394
+ },
395
+ },
396
+ };
397
+ }
398
+ /**
399
+ * Process files in batches with controlled concurrency
400
+ * (Alternative function for direct batch control)
401
+ */
402
+ export async function analyzeFilesInBatches(files, options) {
403
+ const batchSize = options?.batchSize ?? options?.maxConcurrency ?? 10;
404
+ const results = [];
405
+ const startTime = Date.now();
406
+ const opts = {
407
+ language: options?.language ?? 'java',
408
+ enableEnrichment: options?.enableEnrichment ?? false,
409
+ enableVerification: options?.enableVerification ?? false,
410
+ ...options,
411
+ };
412
+ for (let i = 0; i < files.length; i += batchSize) {
413
+ const batch = files.slice(i, i + batchSize);
414
+ // Process batch in parallel
415
+ const batchResults = await Promise.all(batch.map(async (file, batchIndex) => {
416
+ const globalIndex = i + batchIndex;
417
+ opts.onFileStart?.(file.path, globalIndex, files.length);
418
+ const result = await analyzeFileWithErrorHandling(file, opts);
419
+ opts.onFileComplete?.(file.path, globalIndex, files.length);
420
+ return result;
421
+ }));
422
+ results.push(...batchResults);
423
+ }
424
+ const totalTimeMs = Date.now() - startTime;
425
+ return {
426
+ results,
427
+ summary: {
428
+ totalFiles: results.length,
429
+ totalVulnerabilities: results.reduce((sum, r) => sum + r.vulnerabilities.length, 0),
430
+ totalSources: results.reduce((sum, r) => sum + r.stats.totalSources, 0),
431
+ totalSinks: results.reduce((sum, r) => sum + r.stats.totalSinks, 0),
432
+ filesWithVulnerabilities: results.filter(r => r.vulnerabilities.length > 0).length,
433
+ totalTimeMs,
434
+ avgTimePerFile: results.length > 0 ? totalTimeMs / results.length : 0,
435
+ },
436
+ };
437
+ }
438
+ // Legacy export for compatibility
439
+ export const swarmAnalysisWorkflow = {
440
+ id: 'swarm-analysis',
441
+ run: analyzeFilesSwarm,
442
+ stream: analyzeFilesSwarmStream,
443
+ runInBatches: analyzeFilesInBatches,
444
+ };
445
+ // ============================================================================
446
+ // Utility Functions for Streamed Results
447
+ // ============================================================================
448
+ /**
449
+ * Read streamed results from a JSON Lines file
450
+ * Yields results one at a time for memory efficiency
451
+ */
452
+ export async function* readStreamedResults(filePath) {
453
+ const content = fs.readFileSync(filePath, 'utf-8');
454
+ const lines = content.split('\n').filter(line => line.trim());
455
+ for (const line of lines) {
456
+ try {
457
+ yield JSON.parse(line);
458
+ }
459
+ catch {
460
+ // Skip invalid lines
461
+ }
462
+ }
463
+ }
464
+ /**
465
+ * Load all streamed results into memory (for smaller result sets)
466
+ */
467
+ export async function loadStreamedResults(filePath) {
468
+ const results = [];
469
+ for await (const result of readStreamedResults(filePath)) {
470
+ results.push(result);
471
+ }
472
+ return results;
473
+ }
474
+ /**
475
+ * Get summary statistics from a streamed results file
476
+ */
477
+ export async function getStreamedResultsSummary(filePath) {
478
+ let totalFiles = 0;
479
+ let totalVulnerabilities = 0;
480
+ let totalSources = 0;
481
+ let totalSinks = 0;
482
+ let filesWithVulnerabilities = 0;
483
+ for await (const result of readStreamedResults(filePath)) {
484
+ totalFiles++;
485
+ totalVulnerabilities += result.vulnerabilities.length;
486
+ totalSources += result.stats.totalSources;
487
+ totalSinks += result.stats.totalSinks;
488
+ if (result.vulnerabilities.length > 0)
489
+ filesWithVulnerabilities++;
490
+ }
491
+ return {
492
+ totalFiles,
493
+ totalVulnerabilities,
494
+ totalSources,
495
+ totalSinks,
496
+ filesWithVulnerabilities,
497
+ totalTimeMs: 0, // Not available from streamed results
498
+ avgTimePerFile: 0,
499
+ };
500
+ }
501
+ //# sourceMappingURL=swarm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swarm.js","sourceRoot":"","sources":["../../../src/agents/mastra/swarm.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,MAAM,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C;;GAEG;AACH,SAAS,sBAAsB,CAAC,QAAgB;IAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IACjD,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,OAAO;YACV,OAAO,MAAM,CAAC;QAChB,KAAK,KAAK,CAAC;QACX,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM;YACT,OAAO,YAAY,CAAC;QACtB,KAAK,KAAK,CAAC;QACX,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM;YACT,OAAO,YAAY,CAAC;QACtB,KAAK,KAAK;YACR,OAAO,QAAQ,CAAC;QAClB,KAAK,KAAK;YACR,OAAO,MAAM,CAAC;QAChB,KAAK,IAAI,CAAC;QACV,KAAK,IAAI;YACP,OAAO,GAAG,CAAC;QACb,KAAK,MAAM,CAAC;QACZ,KAAK,KAAK,CAAC;QACX,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM;YACT,OAAO,KAAK,CAAC;QACf;YACE,OAAO,MAAM,CAAC,CAAC,mBAAmB;IACtC,CAAC;AACH,CAAC;AAkED,+EAA+E;AAC/E,wBAAwB;AACxB,+EAA+E;AAE/E;;;;;;GAMG;AACH,MAAM,cAAc,GAAG;IACrB,MAAM,EAAE,MAAM,EAAQ,qBAAqB;IAC3C,SAAS,EAAE,EAAE,EAAS,wBAAwB;IAC9C,KAAK,EAAE,MAAM,EAAS,4CAA4C;IAClE,eAAe,EAAE,MAAM,EAAG,mDAAmD;IAC7E,iBAAiB,EAAE,MAAM,EAAE,4BAA4B;IACvD,QAAQ,EAAE,OAAO,EAAK,wBAAwB;CAC/C,CAAC;AAOF;;;GAGG;AACH,SAAS,gBAAgB,CAAC,WAAmB,EAAE,OAAwB;IACrE,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IAC7C,IAAI,iBAAiB,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,KAAK,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IAEnF,oCAAoC;IACpC,IAAI,OAAO,EAAE,gBAAgB,EAAE,CAAC;QAC9B,iBAAiB,IAAI,cAAc,CAAC,eAAe,CAAC;IACtD,CAAC;IACD,IAAI,OAAO,EAAE,kBAAkB,EAAE,CAAC;QAChC,iBAAiB,IAAI,cAAc,CAAC,iBAAiB,CAAC;IACxD,CAAC;IAED,8BAA8B;IAC9B,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,gBAAgB,IAAI,OAAO,EAAE,kBAAkB,CAAC;QAC3E,CAAC,CAAC,cAAc,CAAC,QAAQ;QACzB,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC;IAEzB,OAAO,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;AACjD,CAAC;AAED,+EAA+E;AAC/E,2BAA2B;AAC3B,+EAA+E;AAE/E;;GAEG;AACH,KAAK,UAAU,kBAAkB,CAAC,IAAe;IAC/C,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,OAAO,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;IACjC,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,kDAAkD,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AACjF,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,4BAA4B,CACzC,IAAe,EACf,OAAqB;IAErB,8DAA8D;IAC9D,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEvE,IAAI,CAAC;QACH,+BAA+B;QAC/B,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAE/C,yFAAyF;QACzF,MAAM,SAAS,GAAI,OAAe,CAAC,aAAa,IAAI,gBAAgB,CAAC,OAAO,EAAE;YAC5E,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;YAC1C,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;SAC/C,CAAC,CAAC;QAEH,yCAAyC;QACzC,IAAI,SAAS,GAAyC,IAAI,CAAC;QAC3D,MAAM,cAAc,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;YACtD,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC1B,MAAM,CAAC,IAAI,KAAK,CAAC,0BAA0B,SAAS,GAAG,IAAI,SAAS,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACpF,CAAC,EAAE,SAAS,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,MAAM,eAAe,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE;YACtD,QAAQ;YACR,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;YAC1C,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;YAC9C,sBAAsB,EAAE,OAAO,CAAC,sBAAsB;YACtD,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;SACnD,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,oCAAoC;YACpC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;gBAChC,eAAe;gBACf,cAAc;aACf,CAAC,CAAC;YAEH,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,eAAe,EAAE,MAAM,CAAC,eAAe;gBACvC,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,2DAA2D;YAC3D,IAAI,SAAS;gBAAE,YAAY,CAAC,SAAS,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,2BAA2B,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC,CAAC;QAEtE,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,eAAe,EAAE,EAAE;YACnB,KAAK,EAAE;gBACL,YAAY,EAAE,CAAC;gBACf,UAAU,EAAE,CAAC;gBACb,uBAAuB,EAAE,CAAC;gBAC1B,aAAa,EAAE,CAAC;gBAChB,cAAc,EAAE,CAAC;gBACjB,SAAS,EAAE,CAAC;gBACZ,WAAW,EAAE,CAAC;aACf;YACD,KAAK,EAAE,YAAY;SACpB,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,KAAkB,EAClB,OAAsB;IAEtB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAiB;QACzB,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,MAAM;QACrC,gBAAgB,EAAE,OAAO,EAAE,gBAAgB,IAAI,KAAK,EAAE,yCAAyC;QAC/F,kBAAkB,EAAE,OAAO,EAAE,kBAAkB,IAAI,KAAK;QACxD,cAAc,EAAE,OAAO,EAAE,cAAc,IAAI,EAAE;QAC7C,YAAY,EAAE,OAAO,EAAE,YAAY,IAAI,IAAI;QAC3C,eAAe,EAAE,OAAO,EAAE,eAAe,IAAI,KAAK;QAClD,GAAG,OAAO;KACX,CAAC;IAEF,8CAA8C;IAC9C,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,YAAY,CAAC;IAClE,MAAM,OAAO,GAAiB,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7E,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC;IAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IACzB,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,KAAK,EAAE,SAAS,EAAE,CAAC;IAE7D,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,0DAA0D;IAC1D,IAAI,oBAAoB,GAAG,CAAC,CAAC;IAC7B,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,wBAAwB,GAAG,CAAC,CAAC;IAEjC,kCAAkC;IAClC,IAAI,WAAW,GAA0B,IAAI,CAAC;IAC9C,IAAI,UAAU,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAElD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,0BAA0B;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC5C,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;YACvB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,WAAW,GAAG,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,sEAAsE;IACtE,MAAM,WAAW,GAAG,CAAC,MAAkB,EAAE,KAAa,EAAE,EAAE;QACxD,IAAI,CAAC,WAAW;YAAE,OAAO;QAEzB,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE;YAChC,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;gBAC3C,MAAM,WAAW,GAAG,WAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC7C,IAAI,WAAW,EAAE,CAAC;oBAChB,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;oBAC3C,OAAO,EAAE,CAAC;gBACZ,CAAC;qBAAM,CAAC;oBACN,WAAY,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;wBAC9B,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;wBAC3C,OAAO,EAAE,CAAC;oBACZ,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,+DAA+D;IAC/D,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IAE1C,4EAA4E;IAC5E,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACzC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;QACnB,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAEnD,IAAI,MAAkB,CAAC;QAEvB,+CAA+C;QAC/C,wEAAwE;QACxE,sEAAsE;QACtE,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAE/C,oBAAoB;QACpB,IAAI,YAAY,IAAI,KAAK,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC7C,IAAI,MAAM,EAAE,CAAC;gBACX,SAAS,EAAE,CAAC;gBACZ,MAAM,GAAG,MAAM,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACN,WAAW,EAAE,CAAC;gBACd,0DAA0D;gBAC1D,MAAM,GAAG,MAAM,4BAA4B,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;gBAChF,oCAAoC;gBACpC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;oBAClB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,0DAA0D;YAC1D,MAAM,GAAG,MAAM,4BAA4B,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;QAClF,CAAC;QAED,yBAAyB;QACzB,oBAAoB,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC;QACtD,YAAY,IAAI,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC;QAC1C,UAAU,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;QACtC,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;YAAE,wBAAwB,EAAE,CAAC;QAElE,6BAA6B;QAC7B,IAAI,WAAW,EAAE,CAAC;YAChB,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC7B,CAAC;QAED,IAAI,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAEtD,8DAA8D;QAC9D,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;QAC1B,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CACH,CAAC;IAEF,oCAAoC;IACpC,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAE5B,kCAAkC;IAClC,MAAM,UAAU,CAAC;IAEjB,qBAAqB;IACrB,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,WAAY,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IAE3C,OAAO;QACL,OAAO;QACP,OAAO,EAAE;YACP,UAAU,EAAE,KAAK,CAAC,MAAM;YACxB,oBAAoB;YACpB,YAAY;YACZ,UAAU;YACV,wBAAwB;YACxB,WAAW;YACX,cAAc,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACjE,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YAC/C,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;SACpD;QACD,UAAU,EAAE,IAAI,CAAC,YAAY;KAC9B,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,uBAAuB,CAC5C,KAAkB,EAClB,OAAsB;IAQtB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAiB;QACzB,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,MAAM;QACrC,gBAAgB,EAAE,OAAO,EAAE,gBAAgB,IAAI,KAAK;QACpD,kBAAkB,EAAE,OAAO,EAAE,kBAAkB,IAAI,KAAK;QACxD,cAAc,EAAE,OAAO,EAAE,cAAc,IAAI,EAAE;QAC7C,GAAG,OAAO;KACX,CAAC;IAEF,MAAM,OAAO,GAAiB,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACtD,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC;IAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;IAU3B,MAAM,UAAU,GAAkB,EAAE,CAAC;IACrC,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,cAAc,GAAmC,IAAI,CAAC;IAE1D,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,OAAO,GAAG,cAAc,CAAC;YAC/B,cAAc,GAAG,IAAI,CAAC;YACtB,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IAE1C,yBAAyB;IACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACzC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;QACnB,mBAAmB;QACnB,UAAU,CAAC,IAAI,CAAC;YACd,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK;YACL,KAAK;SACN,CAAC,CAAC;QACH,aAAa,EAAE,CAAC;QAEhB,MAAM,MAAM,GAAG,MAAM,4BAA4B,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC9D,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;QACxB,cAAc,EAAE,CAAC;QAEjB,wBAAwB;QACxB,UAAU,CAAC,IAAI,CAAC;YACd,IAAI,EAAE,eAAe;YACrB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,KAAK;YACL,KAAK;YACL,MAAM;SACP,CAAC,CAAC;QAEH,sBAAsB;QACtB,UAAU,CAAC,IAAI,CAAC;YACd,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,cAAc;YACrB,KAAK;SACN,CAAC,CAAC;QAEH,aAAa,EAAE,CAAC;QAEhB,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CACH,CAAC;IAEF,+BAA+B;IAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtC,OAAO,cAAc,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACrC,oBAAoB;QACpB,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,UAAU,CAAC,KAAK,EAAG,CAAC;QAC5B,CAAC;QAED,qCAAqC;QACrC,IAAI,cAAc,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAClC,MAAM,OAAO,CAAC,IAAI,CAAC;gBACjB,OAAO;gBACP,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE;oBAC1B,cAAc,GAAG,OAAO,CAAC;gBAC3B,CAAC,CAAC;aACH,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,yBAAyB;IACzB,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,UAAU,CAAC,KAAK,EAAG,CAAC;IAC5B,CAAC;IAED,MAAM,OAAO,CAAC;IAEd,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IAE3C,MAAM;QACJ,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE;YACN,OAAO;YACP,OAAO,EAAE;gBACP,UAAU,EAAE,OAAO,CAAC,MAAM;gBAC1B,oBAAoB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC;gBACnF,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;gBACvE,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;gBACnE,wBAAwB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM;gBAClF,WAAW;gBACX,cAAc,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;aACtE;SACF;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,KAAkB,EAClB,OAA+C;IAE/C,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,OAAO,EAAE,cAAc,IAAI,EAAE,CAAC;IACtE,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,MAAM,IAAI,GAAiB;QACzB,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,MAAM;QACrC,gBAAgB,EAAE,OAAO,EAAE,gBAAgB,IAAI,KAAK;QACpD,kBAAkB,EAAE,OAAO,EAAE,kBAAkB,IAAI,KAAK;QACxD,GAAG,OAAO;KACX,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;QAE5C,4BAA4B;QAC5B,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CACpC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE;YACnC,MAAM,WAAW,GAAG,CAAC,GAAG,UAAU,CAAC;YACnC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YAEzD,MAAM,MAAM,GAAG,MAAM,4BAA4B,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAE9D,IAAI,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YAC5D,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CACH,CAAC;QAEF,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IAE3C,OAAO;QACL,OAAO;QACP,OAAO,EAAE;YACP,UAAU,EAAE,OAAO,CAAC,MAAM;YAC1B,oBAAoB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC;YACnF,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;YACvE,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;YACnE,wBAAwB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM;YAClF,WAAW;YACX,cAAc,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SACtE;KACF,CAAC;AACJ,CAAC;AAED,kCAAkC;AAClC,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,EAAE,EAAE,gBAAgB;IACpB,GAAG,EAAE,iBAAiB;IACtB,MAAM,EAAE,uBAAuB;IAC/B,YAAY,EAAE,qBAAqB;CACpC,CAAC;AAEF,+EAA+E;AAC/E,yCAAyC;AACzC,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,mBAAmB,CAAC,QAAgB;IACzD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAE9D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAe,CAAC;QACvC,CAAC;QAAC,MAAM,CAAC;YACP,qBAAqB;QACvB,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,QAAgB;IACxD,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,IAAI,KAAK,EAAE,MAAM,MAAM,IAAI,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,QAAgB;IAC9D,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,oBAAoB,GAAG,CAAC,CAAC;IAC7B,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,wBAAwB,GAAG,CAAC,CAAC;IAEjC,IAAI,KAAK,EAAE,MAAM,MAAM,IAAI,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzD,UAAU,EAAE,CAAC;QACb,oBAAoB,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC;QACtD,YAAY,IAAI,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC;QAC1C,UAAU,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;QACtC,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;YAAE,wBAAwB,EAAE,CAAC;IACpE,CAAC;IAED,OAAO;QACL,UAAU;QACV,oBAAoB;QACpB,YAAY;QACZ,UAAU;QACV,wBAAwB;QACxB,WAAW,EAAE,CAAC,EAAG,sCAAsC;QACvD,cAAc,EAAE,CAAC;KAClB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Mastra Security Analysis Workflow
3
+ *
4
+ * Orchestrates the security analysis pipeline.
5
+ * Pipeline: Pattern Match → Enrich → Merge → Verify → Report
6
+ *
7
+ * This module provides convenience functions for running the complete
8
+ * analysis pipeline using the core analysis logic.
9
+ */
10
+ export { patternMatchStep, enrichStep, mergeStep, verifyStep, reportStep, } from './steps.js';
11
+ export type VerificationStrategy = 'complete' | 'sampled' | 'prioritized';
12
+ export interface WorkflowInput {
13
+ filePath: string;
14
+ sourceCode: string;
15
+ language?: string;
16
+ options?: {
17
+ enableEnrichment?: boolean;
18
+ enableVerification?: boolean;
19
+ confidenceThreshold?: number;
20
+ maxVerificationTargets?: number;
21
+ verificationStrategy?: VerificationStrategy;
22
+ };
23
+ }
24
+ export interface WorkflowOutput {
25
+ vulnerabilities: any[];
26
+ stats: {
27
+ totalSources: number;
28
+ totalSinks: number;
29
+ verifiedVulnerabilities: number;
30
+ truePositives: number;
31
+ falsePositives: number;
32
+ uncertain: number;
33
+ totalTimeMs: number;
34
+ };
35
+ }
36
+ /**
37
+ * Run security analysis on a single file
38
+ *
39
+ * This function orchestrates the complete analysis pipeline:
40
+ * 1. Pattern matching (static analysis)
41
+ * 2. LLM enrichment (discover additional sources/sinks)
42
+ * 3. Merge results
43
+ * 4. LLM verification (confirm exploitability)
44
+ * 5. Generate report
45
+ *
46
+ * NOTE: Verification strategies:
47
+ * - 'prioritized' (default): Smart sampling with critical vulnerabilities first (sqrt(200) = 15×15 = 225 pairs)
48
+ * - 'complete': Verify ALL source-sink pairs (thorough but expensive, may be 100s-1000s of LLM calls)
49
+ * - 'sampled': Legacy random sampling (not recommended, non-deterministic)
50
+ *
51
+ * For production security audits, use verificationStrategy: 'complete'
52
+ * For CI/CD fast scans, use verificationStrategy: 'prioritized' (default)
53
+ */
54
+ export declare function analyzeFile(filePath: string, sourceCode: string, options?: {
55
+ language?: string;
56
+ enableEnrichment?: boolean;
57
+ enableVerification?: boolean;
58
+ confidenceThreshold?: number;
59
+ maxVerificationTargets?: number;
60
+ verificationStrategy?: VerificationStrategy;
61
+ }): Promise<WorkflowOutput>;
62
+ /**
63
+ * Stream security analysis with progress updates
64
+ */
65
+ export declare function analyzeFileStream(filePath: string, sourceCode: string, options?: {
66
+ language?: string;
67
+ enableEnrichment?: boolean;
68
+ enableVerification?: boolean;
69
+ maxVerificationTargets?: number;
70
+ verificationStrategy?: VerificationStrategy;
71
+ }): AsyncGenerator<{
72
+ step: string;
73
+ status: string;
74
+ data?: any;
75
+ }>;
76
+ export declare const securityAnalysisWorkflow: {
77
+ id: string;
78
+ run: typeof analyzeFile;
79
+ stream: typeof analyzeFileStream;
80
+ };
81
+ //# sourceMappingURL=workflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../../src/agents/mastra/workflow.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,EACL,gBAAgB,EAChB,UAAU,EACV,SAAS,EACT,UAAU,EACV,UAAU,GACX,MAAM,YAAY,CAAC;AAMpB,MAAM,MAAM,oBAAoB,GAAG,UAAU,GAAG,SAAS,GAAG,aAAa,CAAC;AAE1E,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE;QACR,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,sBAAsB,CAAC,EAAE,MAAM,CAAC;QAChC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;KAC7C,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,eAAe,EAAE,GAAG,EAAE,CAAC;IACvB,KAAK,EAAE;QACL,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,uBAAuB,EAAE,MAAM,CAAC;QAChC,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;QACvB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAycD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;IACR,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC7C,GACA,OAAO,CAAC,cAAc,CAAC,CAmDzB;AAED;;GAEG;AACH,wBAAuB,iBAAiB,CACtC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;IACR,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC7C,GACA,cAAc,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,GAAG,CAAA;CAAE,CAAC,CA4D9D;AAGD,eAAO,MAAM,wBAAwB;;;;CAIpC,CAAC"}