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,505 @@
1
+ /**
2
+ * LLM Discovery Mode
3
+ *
4
+ * Discovers vulnerabilities in methods with no static findings.
5
+ * Uses LLM to analyze for semantic vulnerabilities that static analysis cannot detect:
6
+ * - Sanitization logic bugs (e.g., "style".endsWith(x) vs x.equals("style"))
7
+ * - Shell argument escaping issues
8
+ * - Context-dependent encoding requirements
9
+ *
10
+ * Expected impact: +15-25% on XSS and Command Injection benchmarks.
11
+ */
12
+ import { getAxLLMClient } from './ax-client.js';
13
+ // ============================================================================
14
+ // CWE-Specific Discovery Prompts
15
+ // ============================================================================
16
+ const CWE_DISCOVERY_PROMPTS = {
17
+ 'CWE-078': `COMMAND INJECTION DISCOVERY (CWE-78)
18
+
19
+ Look for these SUBTLE vulnerabilities that static analysis misses:
20
+
21
+ 1. SHELL ARGUMENT ESCAPING BUGS:
22
+ - Arguments passed to shell without proper quoting
23
+ - Special characters not escaped: ; | & \` $ ( ) { } < > ! # * ?
24
+ - Arguments with spaces not quoted properly
25
+
26
+ 2. SHELL STRING INTERPRETATION:
27
+ - User input in shell strings even with "array" style
28
+ - ProcessBuilder with single command string (not array)
29
+ - Runtime.exec(String) instead of Runtime.exec(String[])
30
+
31
+ 3. INDIRECT SHELL EXECUTION:
32
+ - ScriptEngine eval with user input
33
+ - GroovyShell execution
34
+ - Jenkins sh(), bat() pipeline steps
35
+ - Kubernetes/Docker command builders
36
+
37
+ 4. SANITIZATION BYPASSES:
38
+ - Incomplete blocklist (missing ; but having |)
39
+ - Case-insensitive bypass
40
+ - Unicode/encoding bypass
41
+ - Double encoding
42
+
43
+ COMMON FALSE NEGATIVES TO FIND:
44
+ - "args" parameter to ProcessBuilder that's actually a shell string
45
+ - "safe" wrappers that don't actually sanitize
46
+ - Validation that checks wrong property (e.g., length instead of content)`,
47
+ 'CWE-079': `XSS DISCOVERY (CWE-79)
48
+
49
+ Look for these SUBTLE vulnerabilities that static analysis misses:
50
+
51
+ 1. CONTEXT-SPECIFIC ENCODING BUGS:
52
+ - HTML attribute values need attribute encoding, not HTML encoding
53
+ - JavaScript context needs JS encoding, not HTML encoding
54
+ - URL parameters need URL encoding
55
+ - CSS context needs CSS encoding
56
+
57
+ 2. INCOMPLETE SANITIZATION:
58
+ - HTML encoding but output in onclick handler
59
+ - Sanitizing < > but not quotes in attributes
60
+ - Strip tags but allows event handlers
61
+ - JSoup.clean() with permissive whitelist
62
+
63
+ 3. DOM-BASED XSS:
64
+ - Server-side reflection to client-side sinks
65
+ - Data passed to client without encoding
66
+ - Template literal injection
67
+
68
+ 4. BYPASSES:
69
+ - innerHTML with "text" that's actually HTML
70
+ - React dangerouslySetInnerHTML
71
+ - Template engines with raw output mode
72
+ - SVG/MathML vectors
73
+
74
+ COMMON FALSE NEGATIVES TO FIND:
75
+ - Response.getWriter() that outputs to wrong context
76
+ - Encoding for wrong context (HTML-encoding for JS)
77
+ - Partial encoding that misses edge cases`,
78
+ 'CWE-022': `PATH TRAVERSAL DISCOVERY (CWE-22)
79
+
80
+ Look for these SUBTLE vulnerabilities that static analysis misses:
81
+
82
+ 1. VALIDATION BYPASSES:
83
+ - Path normalized AFTER check, not before
84
+ - startsWith() check with wrong base path
85
+ - Checking for ".." but not URL-encoded forms
86
+ - getCanonicalPath() result not validated
87
+
88
+ 2. DOUBLE ENCODING:
89
+ - %252e%252e%252f (double URL-encoded ../)
90
+ - Mixed encoding (..%2f or %2e./)
91
+ - Unicode normalization issues
92
+
93
+ 3. SYMLINK ATTACKS:
94
+ - Path validated but follows symlinks outside boundary
95
+ - TOCTOU between validation and use
96
+
97
+ 4. NULL BYTE INJECTION:
98
+ - file.txt%00.jpg truncates at null on some systems
99
+
100
+ 5. ALTERNATIVE SEPARATORS:
101
+ - Windows accepts both / and \\
102
+ - UNC paths: \\\\server\\share
103
+
104
+ COMMON FALSE NEGATIVES TO FIND:
105
+ - Validation order issues (check then normalize vs normalize then check)
106
+ - Missing validation for certain code paths`,
107
+ 'CWE-094': `CODE INJECTION DISCOVERY (CWE-94)
108
+
109
+ Look for these SUBTLE vulnerabilities that static analysis misses:
110
+
111
+ 1. DYNAMIC CODE EXECUTION:
112
+ - Expression language evaluation (EL, SpEL, OGNL, MVEL)
113
+ - Template engines with unsafe modes
114
+ - Reflection with user-controlled class/method names
115
+
116
+ 2. DESERIALIZATION:
117
+ - ObjectInputStream on untrusted data
118
+ - XMLDecoder, XStream without type filtering
119
+ - JSON with polymorphic type handling
120
+ - YAML with unsafe load (not SafeYAML)
121
+
122
+ 3. SCRIPTING ENGINES:
123
+ - ScriptEngine.eval() with user input
124
+ - Nashorn JavaScript execution
125
+ - Groovy shell evaluation
126
+
127
+ 4. RUNTIME COMPILATION:
128
+ - JavaCompiler with user-controlled code
129
+ - Dynamic class loading
130
+
131
+ COMMON FALSE NEGATIVES TO FIND:
132
+ - Deserializers that look safe but have gadget chains
133
+ - Expression languages in unexpected places`,
134
+ };
135
+ // ============================================================================
136
+ // Discovery Engine
137
+ // ============================================================================
138
+ export class DiscoveryEngine {
139
+ client;
140
+ verbose;
141
+ constructor(client, config) {
142
+ this.client = client || getAxLLMClient(config);
143
+ this.verbose = false;
144
+ }
145
+ /**
146
+ * Discover vulnerabilities in methods with no static findings
147
+ */
148
+ async discoverInFile(ir, code, filePath, options = {}) {
149
+ const results = [];
150
+ this.verbose = options.verbose ?? false;
151
+ // Extract methods from IR
152
+ const methods = this.extractMethods(ir, code, options);
153
+ if (this.verbose) {
154
+ console.log(`[Discovery] Analyzing ${methods.length} methods in ${filePath}`);
155
+ }
156
+ // Determine which CWEs to focus on
157
+ const targetCWEs = options.targetCWEs || ['CWE-078', 'CWE-079', 'CWE-022', 'CWE-094'];
158
+ const timeout = options.timeoutPerMethod || 30000;
159
+ // Analyze each method
160
+ for (const method of methods) {
161
+ if (this.verbose) {
162
+ console.log(`[Discovery] Analyzing ${method.className}.${method.methodName}`);
163
+ }
164
+ const startTime = Date.now();
165
+ try {
166
+ const result = await Promise.race([
167
+ this.analyzeMethod(method, targetCWEs, options),
168
+ new Promise((_, reject) => setTimeout(() => reject(new Error('Discovery timeout')), timeout)),
169
+ ]);
170
+ result.discoveryTimeMs = Date.now() - startTime;
171
+ results.push(result);
172
+ }
173
+ catch (error) {
174
+ if (this.verbose) {
175
+ console.log(`[Discovery] Failed for ${method.className}.${method.methodName}: ${error}`);
176
+ }
177
+ results.push({
178
+ methodId: `${method.className}.${method.methodName}`,
179
+ vulnerabilityFound: false,
180
+ reasoning: `Discovery failed: ${error}`,
181
+ confidence: 0,
182
+ discoveryTimeMs: Date.now() - startTime,
183
+ });
184
+ }
185
+ }
186
+ return results;
187
+ }
188
+ /**
189
+ * Analyze a single method for vulnerabilities
190
+ */
191
+ async analyzeMethod(method, targetCWEs, options) {
192
+ const methodId = `${method.className}.${method.methodName}`;
193
+ const confidenceThreshold = options.confidenceThreshold ?? 0.6;
194
+ // Build the discovery prompt
195
+ const cweGuidance = targetCWEs
196
+ .map(cwe => CWE_DISCOVERY_PROMPTS[cwe] || '')
197
+ .filter(p => p)
198
+ .join('\n\n---\n\n');
199
+ const systemPrompt = `You are a security expert performing deep code analysis to find vulnerabilities that automated tools miss.
200
+
201
+ ${cweGuidance}
202
+
203
+ ANALYSIS APPROACH:
204
+ 1. Identify all potential sources of untrusted data
205
+ 2. Trace data flow manually through the code
206
+ 3. Check for ALL the subtle patterns described above
207
+ 4. Consider what an attacker could control and how they could exploit it
208
+
209
+ IMPORTANT: Only report vulnerabilities you are confident about. False positives waste time.
210
+ Be specific about the vulnerability type and how it could be exploited.`;
211
+ const userPrompt = `Analyze this Java method for security vulnerabilities:
212
+
213
+ Class: ${method.className}
214
+ Method: ${method.methodName}
215
+ Annotations: ${method.annotations.join(', ') || 'none'}
216
+ Imports: ${method.imports.slice(0, 20).join(', ')}
217
+
218
+ \`\`\`java
219
+ ${method.methodCode}
220
+ \`\`\`
221
+
222
+ Does this method contain any security vulnerabilities (${targetCWEs.join(', ')})?
223
+
224
+ Respond in JSON:
225
+ {
226
+ "vulnerabilityFound": true/false,
227
+ "vulnerability": {
228
+ "type": "command_injection|xss|path_traversal|code_injection|...",
229
+ "cwe": "CWE-XXX",
230
+ "severity": "critical|high|medium|low",
231
+ "line": <line number>,
232
+ "code": "vulnerable code snippet",
233
+ "description": "what the vulnerability is",
234
+ "attackVector": "how to exploit it",
235
+ "remediation": "how to fix it",
236
+ "source": {
237
+ "line": <source line>,
238
+ "type": "http_param|http_body|...",
239
+ "variable": "variable name"
240
+ }
241
+ },
242
+ "reasoning": "detailed analysis",
243
+ "confidence": 0.0-1.0
244
+ }
245
+
246
+ If no vulnerability found, respond:
247
+ {
248
+ "vulnerabilityFound": false,
249
+ "reasoning": "why this code is safe",
250
+ "confidence": 1.0
251
+ }`;
252
+ try {
253
+ // Make LLM call using the raw chat JSON method
254
+ const response = await this.callLLMForDiscovery(systemPrompt, userPrompt);
255
+ if (!response) {
256
+ return {
257
+ methodId,
258
+ vulnerabilityFound: false,
259
+ reasoning: 'LLM call failed',
260
+ confidence: 0,
261
+ discoveryTimeMs: 0,
262
+ };
263
+ }
264
+ // Process the response
265
+ const vulnerabilityFound = response.vulnerabilityFound === true;
266
+ const confidence = typeof response.confidence === 'number' ? response.confidence : 0.5;
267
+ // Filter by confidence threshold
268
+ if (vulnerabilityFound && confidence < confidenceThreshold) {
269
+ return {
270
+ methodId,
271
+ vulnerabilityFound: false,
272
+ reasoning: `Potential vulnerability below confidence threshold (${confidence} < ${confidenceThreshold}): ${response.reasoning}`,
273
+ confidence,
274
+ discoveryTimeMs: 0,
275
+ };
276
+ }
277
+ const result = {
278
+ methodId,
279
+ vulnerabilityFound,
280
+ reasoning: response.reasoning || '',
281
+ confidence,
282
+ discoveryTimeMs: 0,
283
+ };
284
+ if (vulnerabilityFound && response.vulnerability) {
285
+ result.vulnerability = {
286
+ type: this.normalizeSinkType(response.vulnerability.type),
287
+ cwe: response.vulnerability.cwe || 'CWE-unknown',
288
+ severity: this.normalizeSeverity(response.vulnerability.severity),
289
+ line: response.vulnerability.line || method.startLine,
290
+ code: response.vulnerability.code || '',
291
+ description: response.vulnerability.description || '',
292
+ attackVector: response.vulnerability.attackVector,
293
+ remediation: response.vulnerability.remediation || 'Review and fix the vulnerability',
294
+ source: response.vulnerability.source,
295
+ };
296
+ }
297
+ return result;
298
+ }
299
+ catch (error) {
300
+ return {
301
+ methodId,
302
+ vulnerabilityFound: false,
303
+ reasoning: `Analysis error: ${error}`,
304
+ confidence: 0,
305
+ discoveryTimeMs: 0,
306
+ };
307
+ }
308
+ }
309
+ /**
310
+ * Call LLM for discovery analysis via AxLLMClient
311
+ * Uses chatJSON for circuit breaker, JSON recovery, retry, and timeout handling
312
+ */
313
+ async callLLMForDiscovery(systemPrompt, userPrompt) {
314
+ return this.client.chatJSON(systemPrompt, userPrompt, 'verification');
315
+ }
316
+ /**
317
+ * Extract methods from IR and code
318
+ */
319
+ extractMethods(ir, code, options) {
320
+ const methods = [];
321
+ const lines = code.split('\n');
322
+ const maxMethods = options.maxMethodsPerFile ?? 50;
323
+ const includeWithFindings = options.includeMethodsWithFindings ?? false;
324
+ // Get lines with findings
325
+ const linesWithFindings = new Set();
326
+ if (!includeWithFindings) {
327
+ for (const source of ir.taint.sources) {
328
+ linesWithFindings.add(source.line);
329
+ }
330
+ for (const sink of ir.taint.sinks) {
331
+ linesWithFindings.add(sink.line);
332
+ }
333
+ }
334
+ // Extract methods from types
335
+ for (const type of ir.types) {
336
+ if (type.kind !== 'class')
337
+ continue;
338
+ const className = type.name;
339
+ const classAnnotations = type.annotations?.map(a => `@${a}`) || [];
340
+ const imports = ir.imports.map(i => i.imported_name);
341
+ for (const method of type.methods) {
342
+ // Check if method has existing findings
343
+ const hasExistingFindings = !includeWithFindings &&
344
+ method.start_line !== undefined &&
345
+ method.end_line !== undefined &&
346
+ Array.from(linesWithFindings).some(line => line >= method.start_line && line <= method.end_line);
347
+ // Skip methods with existing findings unless configured otherwise
348
+ if (hasExistingFindings && !includeWithFindings) {
349
+ continue;
350
+ }
351
+ // Extract method code
352
+ const startLine = method.start_line;
353
+ const endLine = method.end_line ?? startLine + 20;
354
+ const methodCode = lines.slice(startLine - 1, endLine).join('\n');
355
+ // Skip very short methods (likely getters/setters)
356
+ if (methodCode.split('\n').length < 3) {
357
+ continue;
358
+ }
359
+ // Skip common safe patterns
360
+ if (this.isLikelySafeMethod(method.name, methodCode)) {
361
+ continue;
362
+ }
363
+ methods.push({
364
+ className,
365
+ methodName: method.name,
366
+ methodCode,
367
+ startLine,
368
+ endLine,
369
+ annotations: [
370
+ ...classAnnotations,
371
+ ...(method.annotations?.map(a => `@${a}`) || []),
372
+ ],
373
+ imports,
374
+ hasExistingFindings,
375
+ });
376
+ if (methods.length >= maxMethods) {
377
+ break;
378
+ }
379
+ }
380
+ if (methods.length >= maxMethods) {
381
+ break;
382
+ }
383
+ }
384
+ return methods;
385
+ }
386
+ /**
387
+ * Check if a method is likely safe (simple getter/setter/constructor)
388
+ */
389
+ isLikelySafeMethod(methodName, methodCode) {
390
+ const lowerName = methodName.toLowerCase();
391
+ // Skip common safe patterns
392
+ if (lowerName.startsWith('get') && methodCode.includes('return this.')) {
393
+ return true;
394
+ }
395
+ if (lowerName.startsWith('set') && !methodCode.includes('exec') && !methodCode.includes('eval')) {
396
+ return true;
397
+ }
398
+ if (lowerName === 'tostring' || lowerName === 'hashcode' || lowerName === 'equals') {
399
+ return true;
400
+ }
401
+ return false;
402
+ }
403
+ /**
404
+ * Normalize sink type string
405
+ */
406
+ normalizeSinkType(type) {
407
+ const lower = (type || '').toLowerCase().replace(/[_-]/g, '_');
408
+ const typeMap = {
409
+ 'command_injection': 'command_injection',
410
+ 'cmd_injection': 'command_injection',
411
+ 'os_command': 'command_injection',
412
+ 'xss': 'xss',
413
+ 'cross_site_scripting': 'xss',
414
+ 'path_traversal': 'path_traversal',
415
+ 'directory_traversal': 'path_traversal',
416
+ 'lfi': 'path_traversal',
417
+ 'code_injection': 'code_injection',
418
+ 'remote_code_execution': 'code_injection',
419
+ 'rce': 'code_injection',
420
+ 'sql_injection': 'sql_injection',
421
+ 'sqli': 'sql_injection',
422
+ 'deserialization': 'deserialization',
423
+ 'insecure_deserialization': 'deserialization',
424
+ 'xxe': 'xxe',
425
+ 'xml_external_entity': 'xxe',
426
+ 'ssrf': 'ssrf',
427
+ 'server_side_request_forgery': 'ssrf',
428
+ };
429
+ return typeMap[lower] || 'code_injection';
430
+ }
431
+ /**
432
+ * Normalize severity string
433
+ */
434
+ normalizeSeverity(severity) {
435
+ const lower = (severity || '').toLowerCase();
436
+ if (lower === 'critical')
437
+ return 'critical';
438
+ if (lower === 'high')
439
+ return 'high';
440
+ if (lower === 'medium' || lower === 'moderate')
441
+ return 'medium';
442
+ return 'low';
443
+ }
444
+ }
445
+ // ============================================================================
446
+ // Convenience Functions
447
+ // ============================================================================
448
+ /**
449
+ * Get a new discovery engine instance
450
+ * Always creates a fresh instance for per-request isolation
451
+ */
452
+ export function getDiscoveryEngine(config, client) {
453
+ return new DiscoveryEngine(client, config);
454
+ }
455
+ /**
456
+ * Discover vulnerabilities in a file
457
+ */
458
+ export async function discoverVulnerabilities(ir, code, filePath, options) {
459
+ return getDiscoveryEngine().discoverInFile(ir, code, filePath, options);
460
+ }
461
+ /**
462
+ * Convert discovery results to findings
463
+ */
464
+ export function discoveryResultsToFindings(results, filePath) {
465
+ const findings = [];
466
+ for (const result of results) {
467
+ if (result.vulnerabilityFound && result.vulnerability) {
468
+ const vuln = result.vulnerability;
469
+ findings.push({
470
+ id: `discovery-${filePath}:${vuln.line}-${vuln.type}`,
471
+ type: vuln.type,
472
+ cwe: vuln.cwe,
473
+ severity: vuln.severity,
474
+ confidence: result.confidence,
475
+ source: vuln.source
476
+ ? {
477
+ file: filePath,
478
+ line: vuln.source.line,
479
+ code: vuln.source.variable,
480
+ }
481
+ : {
482
+ file: filePath,
483
+ line: vuln.line,
484
+ code: 'user input',
485
+ },
486
+ sink: {
487
+ file: filePath,
488
+ line: vuln.line,
489
+ code: vuln.code,
490
+ },
491
+ path: [],
492
+ exploitable: vuln.severity === 'critical' || vuln.severity === 'high',
493
+ explanation: `[LLM Discovery] ${vuln.description}\n\nReasoning: ${result.reasoning}`,
494
+ remediation: vuln.remediation,
495
+ verification: {
496
+ graph_path_exists: true,
497
+ llm_verified: true,
498
+ llm_confidence: result.confidence,
499
+ },
500
+ });
501
+ }
502
+ }
503
+ return findings;
504
+ }
505
+ //# sourceMappingURL=discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/llm/discovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * LLM Enrichment Engine (Phase 1)
3
+ *
4
+ * Uses LLM to discover:
5
+ * - Taint sources beyond YAML patterns
6
+ * - Taint sinks beyond YAML patterns
7
+ * - Class/method roles (controller, service, repository)
8
+ * - Virtual call resolution
9
+ *
10
+ * Supports language-aware prompts for Java, Python, JavaScript/TypeScript, and Rust.
11
+ */
12
+ import { type AxLLMClient } from './ax-client.js';
13
+ import type { TypeInfo, MethodInfo, CallInfo, TaintSource, TaintSink, SupportedLanguage } from 'circle-ir';
14
+ export interface RoleClassificationResult {
15
+ role: 'controller' | 'service' | 'repository' | 'utility' | 'entity' | 'unknown';
16
+ confidence: number;
17
+ reasoning: string;
18
+ indicators: string[];
19
+ }
20
+ export interface DiscoveredSource {
21
+ line: number;
22
+ variable: string;
23
+ type: string;
24
+ method?: string;
25
+ confidence: number;
26
+ reasoning: string;
27
+ }
28
+ export interface DiscoveredSink {
29
+ line: number;
30
+ method: string;
31
+ type: string;
32
+ cwe: string;
33
+ argPositions: number[];
34
+ confidence: number;
35
+ reasoning: string;
36
+ }
37
+ export interface VirtualCallResolution {
38
+ callLine: number;
39
+ interfaceType: string;
40
+ resolvedImplementation: string;
41
+ confidence: number;
42
+ reasoning: string;
43
+ }
44
+ export interface EnrichmentResult {
45
+ role?: RoleClassificationResult;
46
+ additionalSources: DiscoveredSource[];
47
+ additionalSinks: DiscoveredSink[];
48
+ virtualCallResolutions: VirtualCallResolution[];
49
+ framework?: {
50
+ name: string;
51
+ version?: string;
52
+ confidence: number;
53
+ };
54
+ enrichedAt: string;
55
+ modelUsed: string;
56
+ }
57
+ export declare class EnrichmentEngine {
58
+ private client;
59
+ private config;
60
+ private language;
61
+ constructor(client?: AxLLMClient, language?: SupportedLanguage);
62
+ /**
63
+ * Set the language for enrichment (affects prompts)
64
+ */
65
+ setLanguage(language: SupportedLanguage): void;
66
+ /**
67
+ * Get the current language context
68
+ */
69
+ getLanguageContext(): import("./language-context.js").LanguageContext;
70
+ /**
71
+ * Classify the role of a class
72
+ */
73
+ classifyRole(className: string, methods: MethodInfo[], annotations: string[], imports: string[]): Promise<RoleClassificationResult | undefined>;
74
+ /**
75
+ * Discover additional taint sources in a method
76
+ */
77
+ discoverSources(methodCode: string, methodName: string, classRole: string, existingSources: TaintSource[]): Promise<DiscoveredSource[]>;
78
+ /**
79
+ * Discover additional taint sinks in a method
80
+ */
81
+ discoverSinks(methodCode: string, methodName: string, methodCalls: CallInfo[], existingSinks: TaintSink[]): Promise<DiscoveredSink[]>;
82
+ /**
83
+ * Resolve virtual/interface method calls to implementations
84
+ */
85
+ resolveVirtualCall(callExpression: string, interfaceType: string, availableImplementations: string[], context: string): Promise<VirtualCallResolution | undefined>;
86
+ /**
87
+ * Enrich a complete type (class/interface)
88
+ */
89
+ enrichType(type: TypeInfo, sourceCode: string, imports: string[], existingSources: TaintSource[], existingSinks: TaintSink[]): Promise<EnrichmentResult>;
90
+ /**
91
+ * Batch methods for efficient LLM calls
92
+ */
93
+ private batchMethods;
94
+ /**
95
+ * Extract method code from source
96
+ */
97
+ private extractMethodCode;
98
+ }
99
+ /**
100
+ * Get a new enrichment engine instance for a specific language
101
+ * Always creates a fresh instance for per-request isolation
102
+ */
103
+ export declare function getEnrichmentEngine(language?: SupportedLanguage, client?: AxLLMClient): EnrichmentEngine;
104
+ /**
105
+ * Enrich a type with LLM-discovered sources/sinks
106
+ */
107
+ export declare function enrichType(type: TypeInfo, sourceCode: string, imports: string[], existingSources: TaintSource[], existingSinks: TaintSink[], language?: SupportedLanguage): Promise<EnrichmentResult>;
108
+ //# sourceMappingURL=enrichment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enrichment.d.ts","sourceRoot":"","sources":["../../src/llm/enrichment.ts"],"names":[],"mappings":"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"}