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 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/health-score/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAC7B,qBAAqB,EACrB,yBAAyB,EACzB,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,sBAAsB,EACtB,wBAAwB,EACxB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,cAAc,EACnB,KAAK,kBAAkB,GACxB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACvB,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Health Score Module
3
+ *
4
+ * Provides codebase health scoring with weighted dimensions:
5
+ * - Security (35%): OWASP score + Secret exposure
6
+ * - Maintainability (25%): Dead code % + Complexity
7
+ * - Quality (25%): Test coverage + TODO density
8
+ * - Performance (15%): N+1 patterns + Anti-patterns
9
+ */
10
+ // Metrics
11
+ export { calculateSecurityScore, calculateMaintainabilityScore, calculateQualityScore, calculatePerformanceScore, getScoreLabel, getScoreColor, countAnnotations, countLinesOfCode, estimateComplexity, detectNPlusOnePatterns, detectBlockingIoPatterns, } from './metrics.js';
12
+ // Calculator
13
+ export { HealthScoreCalculator, calculateHealthScore, quickHealthCheck, formatHealthReport, DEFAULT_WEIGHTS, } from './calculator.js';
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/health-score/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,UAAU;AACV,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAC7B,qBAAqB,EACrB,yBAAyB,EACzB,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,sBAAsB,EACtB,wBAAwB,GAMzB,MAAM,cAAc,CAAC;AAEtB,aAAa;AACb,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,GAIhB,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Health Score Metrics
3
+ *
4
+ * Individual metric calculations for codebase health scoring.
5
+ */
6
+ /**
7
+ * Metric result with score and details
8
+ */
9
+ export interface MetricResult {
10
+ /** Score from 0-100 */
11
+ score: number;
12
+ /** Human-readable label */
13
+ label: string;
14
+ /** Detailed breakdown */
15
+ details: Record<string, number | string>;
16
+ /** Issues found (if any) */
17
+ issues?: string[];
18
+ }
19
+ /**
20
+ * Security metrics from scan results
21
+ */
22
+ export interface SecurityMetrics {
23
+ /** OWASP category scores */
24
+ owaspScores: Record<string, number>;
25
+ /** Total vulnerabilities by severity */
26
+ vulnerabilities: {
27
+ critical: number;
28
+ high: number;
29
+ medium: number;
30
+ low: number;
31
+ };
32
+ /** Secrets found */
33
+ secretsExposed: number;
34
+ /** Active secrets (in HEAD) */
35
+ activeSecrets: number;
36
+ }
37
+ /**
38
+ * Calculate security score (0-100)
39
+ */
40
+ export declare function calculateSecurityScore(metrics: SecurityMetrics): MetricResult;
41
+ /**
42
+ * Maintainability metrics
43
+ */
44
+ export interface MaintainabilityMetrics {
45
+ /** Total lines of code */
46
+ totalLoc: number;
47
+ /** Dead code lines */
48
+ deadCodeLoc: number;
49
+ /** Number of dead functions */
50
+ deadFunctions: number;
51
+ /** Average cyclomatic complexity */
52
+ avgComplexity: number;
53
+ /** Max cyclomatic complexity */
54
+ maxComplexity: number;
55
+ /** Functions with complexity > 10 */
56
+ complexFunctions: number;
57
+ /** Duplicate code percentage */
58
+ duplicationPercent: number;
59
+ }
60
+ /**
61
+ * Calculate maintainability score (0-100)
62
+ */
63
+ export declare function calculateMaintainabilityScore(metrics: MaintainabilityMetrics): MetricResult;
64
+ /**
65
+ * Quality metrics
66
+ */
67
+ export interface QualityMetrics {
68
+ /** Test coverage percentage (0-100) */
69
+ testCoverage: number;
70
+ /** Number of test files */
71
+ testFiles: number;
72
+ /** Number of TODOs in code */
73
+ todoCount: number;
74
+ /** Number of FIXMEs in code */
75
+ fixmeCount: number;
76
+ /** Number of HACKs in code */
77
+ hackCount: number;
78
+ /** Total source files */
79
+ sourceFiles: number;
80
+ /** Files with tests */
81
+ filesWithTests: number;
82
+ /** Lint errors (if available) */
83
+ lintErrors: number;
84
+ }
85
+ /**
86
+ * Calculate quality score (0-100)
87
+ */
88
+ export declare function calculateQualityScore(metrics: QualityMetrics): MetricResult;
89
+ /**
90
+ * Performance metrics
91
+ */
92
+ export interface PerformanceMetrics {
93
+ /** N+1 query patterns detected */
94
+ nPlusOnePatterns: number;
95
+ /** Inefficient loops detected */
96
+ inefficientLoops: number;
97
+ /** Blocking I/O in async context */
98
+ blockingIoPatterns: number;
99
+ /** Large bundle/file sizes */
100
+ largeBundles: number;
101
+ /** Unused imports */
102
+ unusedImports: number;
103
+ /** Sync operations that should be async */
104
+ syncAntiPatterns: number;
105
+ }
106
+ /**
107
+ * Calculate performance score (0-100)
108
+ */
109
+ export declare function calculatePerformanceScore(metrics: PerformanceMetrics): MetricResult;
110
+ /**
111
+ * Get human-readable label for score
112
+ */
113
+ export declare function getScoreLabel(score: number): string;
114
+ /**
115
+ * Get color for score (for CLI/UI display)
116
+ */
117
+ export declare function getScoreColor(score: number): 'green' | 'yellow' | 'orange' | 'red';
118
+ /**
119
+ * Count TODOs, FIXMEs, HACKs in a file
120
+ */
121
+ export declare function countAnnotations(content: string): {
122
+ todo: number;
123
+ fixme: number;
124
+ hack: number;
125
+ };
126
+ /**
127
+ * Count lines of code (excluding blank lines and comments)
128
+ */
129
+ export declare function countLinesOfCode(content: string, language: string): number;
130
+ /**
131
+ * Estimate cyclomatic complexity from code
132
+ */
133
+ export declare function estimateComplexity(content: string): number;
134
+ /**
135
+ * Detect N+1 query patterns
136
+ */
137
+ export declare function detectNPlusOnePatterns(content: string): number;
138
+ /**
139
+ * Detect blocking I/O patterns in async context
140
+ */
141
+ export declare function detectBlockingIoPatterns(content: string): number;
142
+ //# sourceMappingURL=metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/health-score/metrics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,332 @@
1
+ /**
2
+ * Health Score Metrics
3
+ *
4
+ * Individual metric calculations for codebase health scoring.
5
+ */
6
+ /**
7
+ * Calculate security score (0-100)
8
+ */
9
+ export function calculateSecurityScore(metrics) {
10
+ const issues = [];
11
+ // Base score starts at 100
12
+ let score = 100;
13
+ // Deduct for vulnerabilities
14
+ const vulnPenalty = metrics.vulnerabilities.critical * 15 +
15
+ metrics.vulnerabilities.high * 8 +
16
+ metrics.vulnerabilities.medium * 3 +
17
+ metrics.vulnerabilities.low * 1;
18
+ score -= Math.min(vulnPenalty, 60); // Max 60 point deduction for vulns
19
+ if (metrics.vulnerabilities.critical > 0) {
20
+ issues.push(`${metrics.vulnerabilities.critical} critical vulnerabilities`);
21
+ }
22
+ if (metrics.vulnerabilities.high > 0) {
23
+ issues.push(`${metrics.vulnerabilities.high} high severity vulnerabilities`);
24
+ }
25
+ // Deduct for secrets
26
+ const secretPenalty = metrics.activeSecrets * 10 + (metrics.secretsExposed - metrics.activeSecrets) * 2;
27
+ score -= Math.min(secretPenalty, 30); // Max 30 point deduction for secrets
28
+ if (metrics.activeSecrets > 0) {
29
+ issues.push(`${metrics.activeSecrets} secrets exposed in codebase`);
30
+ }
31
+ // Calculate OWASP coverage (bonus for no issues in categories)
32
+ const owaspCategories = Object.keys(metrics.owaspScores);
33
+ const cleanCategories = owaspCategories.filter((c) => metrics.owaspScores[c] === 0);
34
+ const owaspBonus = Math.floor((cleanCategories.length / Math.max(owaspCategories.length, 1)) * 10);
35
+ score = Math.min(100, score + owaspBonus);
36
+ return {
37
+ score: Math.max(0, Math.round(score)),
38
+ label: getScoreLabel(score),
39
+ details: {
40
+ criticalVulns: metrics.vulnerabilities.critical,
41
+ highVulns: metrics.vulnerabilities.high,
42
+ mediumVulns: metrics.vulnerabilities.medium,
43
+ lowVulns: metrics.vulnerabilities.low,
44
+ secretsExposed: metrics.secretsExposed,
45
+ activeSecrets: metrics.activeSecrets,
46
+ },
47
+ issues,
48
+ };
49
+ }
50
+ /**
51
+ * Calculate maintainability score (0-100)
52
+ */
53
+ export function calculateMaintainabilityScore(metrics) {
54
+ const issues = [];
55
+ let score = 100;
56
+ // Dead code penalty (up to 25 points)
57
+ const deadCodePercent = metrics.totalLoc > 0 ? (metrics.deadCodeLoc / metrics.totalLoc) * 100 : 0;
58
+ const deadCodePenalty = Math.min(deadCodePercent * 2.5, 25);
59
+ score -= deadCodePenalty;
60
+ if (deadCodePercent > 5) {
61
+ issues.push(`${deadCodePercent.toFixed(1)}% dead code (${metrics.deadFunctions} unused functions)`);
62
+ }
63
+ // Complexity penalty (up to 35 points)
64
+ const complexityPenalty = Math.min(metrics.complexFunctions * 3, 20) + (metrics.avgComplexity > 5 ? (metrics.avgComplexity - 5) * 3 : 0);
65
+ score -= Math.min(complexityPenalty, 35);
66
+ if (metrics.maxComplexity > 20) {
67
+ issues.push(`High complexity detected (max: ${metrics.maxComplexity})`);
68
+ }
69
+ if (metrics.complexFunctions > 5) {
70
+ issues.push(`${metrics.complexFunctions} functions with complexity > 10`);
71
+ }
72
+ // Duplication penalty (up to 20 points)
73
+ const duplicationPenalty = Math.min(metrics.duplicationPercent * 2, 20);
74
+ score -= duplicationPenalty;
75
+ if (metrics.duplicationPercent > 5) {
76
+ issues.push(`${metrics.duplicationPercent.toFixed(1)}% code duplication`);
77
+ }
78
+ return {
79
+ score: Math.max(0, Math.round(score)),
80
+ label: getScoreLabel(score),
81
+ details: {
82
+ totalLoc: metrics.totalLoc,
83
+ deadCodeLoc: metrics.deadCodeLoc,
84
+ deadCodePercent: Math.round(deadCodePercent * 10) / 10,
85
+ deadFunctions: metrics.deadFunctions,
86
+ avgComplexity: Math.round(metrics.avgComplexity * 10) / 10,
87
+ maxComplexity: metrics.maxComplexity,
88
+ complexFunctions: metrics.complexFunctions,
89
+ duplicationPercent: metrics.duplicationPercent,
90
+ },
91
+ issues,
92
+ };
93
+ }
94
+ /**
95
+ * Calculate quality score (0-100)
96
+ */
97
+ export function calculateQualityScore(metrics) {
98
+ const issues = [];
99
+ let score = 100;
100
+ // Test coverage (up to 40 points)
101
+ // Full points at 80%+ coverage
102
+ if (metrics.testCoverage < 80) {
103
+ const coveragePenalty = (80 - metrics.testCoverage) * 0.5;
104
+ score -= Math.min(coveragePenalty, 40);
105
+ }
106
+ if (metrics.testCoverage < 50) {
107
+ issues.push(`Low test coverage: ${metrics.testCoverage}%`);
108
+ }
109
+ else if (metrics.testCoverage < 70) {
110
+ issues.push(`Test coverage could be improved: ${metrics.testCoverage}%`);
111
+ }
112
+ // TODO/FIXME/HACK density (up to 20 points)
113
+ const todoTotal = metrics.todoCount + metrics.fixmeCount * 2 + metrics.hackCount * 3;
114
+ const todoDensity = metrics.sourceFiles > 0 ? todoTotal / metrics.sourceFiles : 0;
115
+ const todoPenalty = Math.min(todoDensity * 5, 20);
116
+ score -= todoPenalty;
117
+ if (metrics.fixmeCount > 5) {
118
+ issues.push(`${metrics.fixmeCount} FIXME comments in code`);
119
+ }
120
+ if (metrics.hackCount > 0) {
121
+ issues.push(`${metrics.hackCount} HACK comments in code`);
122
+ }
123
+ // Lint errors (up to 20 points)
124
+ const lintPenalty = Math.min(metrics.lintErrors * 0.5, 20);
125
+ score -= lintPenalty;
126
+ if (metrics.lintErrors > 10) {
127
+ issues.push(`${metrics.lintErrors} lint errors`);
128
+ }
129
+ // Test file ratio bonus
130
+ const testRatio = metrics.sourceFiles > 0 ? metrics.testFiles / metrics.sourceFiles : 0;
131
+ if (testRatio > 0.5) {
132
+ score = Math.min(100, score + 5);
133
+ }
134
+ return {
135
+ score: Math.max(0, Math.round(score)),
136
+ label: getScoreLabel(score),
137
+ details: {
138
+ testCoverage: metrics.testCoverage,
139
+ testFiles: metrics.testFiles,
140
+ sourceFiles: metrics.sourceFiles,
141
+ todoCount: metrics.todoCount,
142
+ fixmeCount: metrics.fixmeCount,
143
+ hackCount: metrics.hackCount,
144
+ lintErrors: metrics.lintErrors,
145
+ },
146
+ issues,
147
+ };
148
+ }
149
+ /**
150
+ * Calculate performance score (0-100)
151
+ */
152
+ export function calculatePerformanceScore(metrics) {
153
+ const issues = [];
154
+ let score = 100;
155
+ // N+1 patterns (up to 30 points)
156
+ const nPlusOnePenalty = metrics.nPlusOnePatterns * 10;
157
+ score -= Math.min(nPlusOnePenalty, 30);
158
+ if (metrics.nPlusOnePatterns > 0) {
159
+ issues.push(`${metrics.nPlusOnePatterns} potential N+1 query patterns`);
160
+ }
161
+ // Inefficient loops (up to 20 points)
162
+ const loopPenalty = metrics.inefficientLoops * 5;
163
+ score -= Math.min(loopPenalty, 20);
164
+ if (metrics.inefficientLoops > 3) {
165
+ issues.push(`${metrics.inefficientLoops} inefficient loop patterns`);
166
+ }
167
+ // Blocking I/O (up to 25 points)
168
+ const blockingPenalty = metrics.blockingIoPatterns * 8;
169
+ score -= Math.min(blockingPenalty, 25);
170
+ if (metrics.blockingIoPatterns > 0) {
171
+ issues.push(`${metrics.blockingIoPatterns} blocking I/O operations in async context`);
172
+ }
173
+ // Sync anti-patterns (up to 15 points)
174
+ const syncPenalty = metrics.syncAntiPatterns * 3;
175
+ score -= Math.min(syncPenalty, 15);
176
+ // Unused imports (minor, up to 10 points)
177
+ const unusedPenalty = Math.min(metrics.unusedImports * 0.5, 10);
178
+ score -= unusedPenalty;
179
+ if (metrics.unusedImports > 20) {
180
+ issues.push(`${metrics.unusedImports} unused imports`);
181
+ }
182
+ return {
183
+ score: Math.max(0, Math.round(score)),
184
+ label: getScoreLabel(score),
185
+ details: {
186
+ nPlusOnePatterns: metrics.nPlusOnePatterns,
187
+ inefficientLoops: metrics.inefficientLoops,
188
+ blockingIoPatterns: metrics.blockingIoPatterns,
189
+ syncAntiPatterns: metrics.syncAntiPatterns,
190
+ unusedImports: metrics.unusedImports,
191
+ largeBundles: metrics.largeBundles,
192
+ },
193
+ issues,
194
+ };
195
+ }
196
+ /**
197
+ * Get human-readable label for score
198
+ */
199
+ export function getScoreLabel(score) {
200
+ if (score >= 90)
201
+ return 'Excellent';
202
+ if (score >= 80)
203
+ return 'Good';
204
+ if (score >= 70)
205
+ return 'Fair';
206
+ if (score >= 60)
207
+ return 'Needs Improvement';
208
+ if (score >= 50)
209
+ return 'Poor';
210
+ return 'Critical';
211
+ }
212
+ /**
213
+ * Get color for score (for CLI/UI display)
214
+ */
215
+ export function getScoreColor(score) {
216
+ if (score >= 80)
217
+ return 'green';
218
+ if (score >= 60)
219
+ return 'yellow';
220
+ if (score >= 40)
221
+ return 'orange';
222
+ return 'red';
223
+ }
224
+ /**
225
+ * Count TODOs, FIXMEs, HACKs in a file
226
+ */
227
+ export function countAnnotations(content) {
228
+ const todoMatches = content.match(/\bTODO\b/gi) || [];
229
+ const fixmeMatches = content.match(/\bFIXME\b/gi) || [];
230
+ const hackMatches = content.match(/\bHACK\b/gi) || [];
231
+ return {
232
+ todo: todoMatches.length,
233
+ fixme: fixmeMatches.length,
234
+ hack: hackMatches.length,
235
+ };
236
+ }
237
+ /**
238
+ * Count lines of code (excluding blank lines and comments)
239
+ */
240
+ export function countLinesOfCode(content, language) {
241
+ const lines = content.split('\n');
242
+ let loc = 0;
243
+ let inBlockComment = false;
244
+ for (const line of lines) {
245
+ const trimmed = line.trim();
246
+ // Skip blank lines
247
+ if (!trimmed)
248
+ continue;
249
+ // Handle block comments
250
+ if (language === 'java' || language === 'typescript' || language === 'javascript') {
251
+ if (inBlockComment) {
252
+ if (trimmed.includes('*/')) {
253
+ inBlockComment = false;
254
+ }
255
+ continue;
256
+ }
257
+ if (trimmed.startsWith('/*')) {
258
+ if (!trimmed.includes('*/')) {
259
+ inBlockComment = true;
260
+ }
261
+ continue;
262
+ }
263
+ // Skip single-line comments
264
+ if (trimmed.startsWith('//'))
265
+ continue;
266
+ }
267
+ else if (language === 'python') {
268
+ if (trimmed.startsWith('#'))
269
+ continue;
270
+ }
271
+ loc++;
272
+ }
273
+ return loc;
274
+ }
275
+ /**
276
+ * Estimate cyclomatic complexity from code
277
+ */
278
+ export function estimateComplexity(content) {
279
+ // Simple heuristic: count decision points
280
+ const patterns = [
281
+ /\bif\s*\(/g,
282
+ /\belse\s+if\s*\(/g,
283
+ /\bwhile\s*\(/g,
284
+ /\bfor\s*\(/g,
285
+ /\bcase\s+/g,
286
+ /\bcatch\s*\(/g,
287
+ /\?\s*[^:]/g, // Ternary operator
288
+ /&&/g,
289
+ /\|\|/g,
290
+ ];
291
+ let complexity = 1; // Base complexity
292
+ for (const pattern of patterns) {
293
+ const matches = content.match(pattern);
294
+ if (matches) {
295
+ complexity += matches.length;
296
+ }
297
+ }
298
+ return complexity;
299
+ }
300
+ /**
301
+ * Detect N+1 query patterns
302
+ */
303
+ export function detectNPlusOnePatterns(content) {
304
+ let count = 0;
305
+ // Pattern: query inside a loop
306
+ const loopQueryPattern = /for\s*\([^)]*\)\s*\{[^}]*(?:\.find|\.query|\.fetch|\.select|\.execute|Repository\.|Dao\.)[^}]*\}/gi;
307
+ const matches = content.match(loopQueryPattern);
308
+ if (matches) {
309
+ count += matches.length;
310
+ }
311
+ // Pattern: forEach with database call
312
+ const forEachQueryPattern = /\.forEach\s*\([^)]*\)\s*(?:=>|\{)[^}]*(?:\.find|\.query|\.fetch|\.select|Repository\.|Dao\.)/gi;
313
+ const forEachMatches = content.match(forEachQueryPattern);
314
+ if (forEachMatches) {
315
+ count += forEachMatches.length;
316
+ }
317
+ return count;
318
+ }
319
+ /**
320
+ * Detect blocking I/O patterns in async context
321
+ */
322
+ export function detectBlockingIoPatterns(content) {
323
+ let count = 0;
324
+ // Sync file operations in async functions
325
+ const asyncWithSyncPattern = /async\s+(?:function\s+)?\w*\s*\([^)]*\)\s*(?::\s*Promise[^{]*)?\{[^}]*(?:readFileSync|writeFileSync|existsSync|readdirSync)[^}]*\}/gi;
326
+ const matches = content.match(asyncWithSyncPattern);
327
+ if (matches) {
328
+ count += matches.length;
329
+ }
330
+ return count;
331
+ }
332
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/health-score/metrics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Circle-IR AI - LLM-enhanced SAST analysis
3
+ *
4
+ * This package extends circle-ir with AI-powered capabilities:
5
+ * - LLM-based verification of vulnerabilities
6
+ * - Pattern verification
7
+ */
8
+ export * from 'circle-ir';
9
+ export { AxLLMClient, getAxLLMClient, type AxPhase, } from './llm/ax-client.js';
10
+ export { createLLMConfig, defaultLLMConfig, type LLMConfig, type PhaseConfig, } from './llm/config.js';
11
+ export { EnrichmentEngine, getEnrichmentEngine, enrichType, type EnrichmentResult, type RoleClassificationResult, type DiscoveredSource, type DiscoveredSink, type VirtualCallResolution, } from './llm/enrichment.js';
12
+ export { VerificationEngine, getVerificationEngine, verifyTaintPath, verifyVulnerability, type VerificationResult, type VerificationInput, type VerificationVerdict, type Exploitability, } from './llm/verification.js';
13
+ export { verifyPatterns, verifyPatternDetailed, isVerificationAvailable, type PatternVerificationResult, type BatchVerificationResult, } from './llm/pattern-verification.js';
14
+ export { analyzeFilesSwarm, analyzeFilesSwarmStream, type SwarmOptions, type SwarmResult, type FileResult, } from './agents/mastra/swarm.js';
15
+ export { analyzeFile, analyzeFileStream, type WorkflowInput, type WorkflowOutput, } from './agents/mastra/workflow.js';
16
+ export { SecurityScanner, scanRepository, scanDirectory, quickScan, formatScanReport, type ScanOptions, type ScanProgress, type ScanResult, type ScanMeta, type ScanFinding, type OWASPSummary, type ScanSummary, type FileResult as SecurityFileResult, } from './security-scan/index.js';
17
+ export { getOWASPMapping, getCWEsForOWASPCategory, getOWASPCategoryByRank, getOWASPCategoryDescription, type OWASPCategory, type OWASPMapping, } from './security-scan/owasp-mapping.js';
18
+ export { TrendTracker, getTrendTracker, trackScan, type TrendData, type StoredScan, type TrendComparison, type TrendSummary, } from './security-scan/trend-tracker.js';
19
+ export { DeadCodeDetector, detectDeadCode, quickDeadCodeCheck, formatDeadCodeReport, type DeadCodeOptions, type DetectionProgress, type DeadCodeResult, type EntryPoint, type DeadCodeItem, type DeadCodeSummary, type CallGraphNode, } from './dead-code/index.js';
20
+ export { SecretScanner, scanForSecrets, quickSecretScan, formatSecretReport, SECRET_PATTERNS, calculateEntropy, getPatternsByCategory, getPatternsBySeverity, getPatternCategories, type SecretPattern, type SecretSeverity, type SecretScanOptions, type ScanProgress as SecretScanProgress, type DetectedSecret, type SecretScanResult, } from './secret-scan/index.js';
21
+ export { HealthScoreCalculator, calculateHealthScore, quickHealthCheck, formatHealthReport, DEFAULT_WEIGHTS, calculateSecurityScore, calculateMaintainabilityScore, calculateQualityScore, calculatePerformanceScore, getScoreLabel, getScoreColor, type HealthScoreOptions, type HealthScoreWeights, type HealthScoreResult, type MetricResult, type SecurityMetrics, type MaintainabilityMetrics, type QualityMetrics, type PerformanceMetrics, } from './health-score/index.js';
22
+ export { DiscoveryEngine, getDiscoveryEngine, discoverVulnerabilities, discoveryResultsToFindings, type DiscoveryResult, type DiscoveredVulnerability, type DiscoveryOptions, } from './llm/discovery.js';
23
+ export { ActionQueue, aggregateFindings, exportActions, formatQueueSummary, formatSprintPlan, DEFAULT_PRIORITY_WEIGHTS, EFFORT_POINTS, RISK_SCORES, EFFORT_SCORES, type ActionItem, type ActionSource, type ActionCategory, type EffortLevel, type RiskLevel, type PriorityWeights, type ActionFilter, type SprintConfig, type SprintPlan, type ActionQueueSummary, type AggregationInput, type AggregatorOptions, type ExportFormat, } from './action-queue/index.js';
24
+ export { FileCache, getAnalysisCache, resetAnalysisCache, type CacheEntry, type FileCacheOptions, } from './cache/file-cache.js';
25
+ export { generateSpecifica, generateSpecificaForDirectory, extractEvidence, generateSpec, formatSpecMarkdown, resolveConflict, fileExists, getConflictStrategy, type SpecificaOptions, type SpecificaOutput, type FileEvidence, type SpecMdContent, type Requirement, type GenerationMetadata, type ConflictResolution, } from './specifica/index.js';
26
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Circle-IR AI - LLM-enhanced SAST analysis
3
+ *
4
+ * This package extends circle-ir with AI-powered capabilities:
5
+ * - LLM-based verification of vulnerabilities
6
+ * - Pattern verification
7
+ */
8
+ // Re-export everything from circle-ir
9
+ export * from 'circle-ir';
10
+ // LLM client and configuration
11
+ export { AxLLMClient, getAxLLMClient, } from './llm/ax-client.js';
12
+ export { createLLMConfig, defaultLLMConfig, } from './llm/config.js';
13
+ // Enrichment
14
+ export { EnrichmentEngine, getEnrichmentEngine, enrichType, } from './llm/enrichment.js';
15
+ // Verification
16
+ export { VerificationEngine, getVerificationEngine, verifyTaintPath, verifyVulnerability, } from './llm/verification.js';
17
+ // Pattern verification
18
+ export { verifyPatterns, verifyPatternDetailed, isVerificationAvailable, } from './llm/pattern-verification.js';
19
+ // Swarm analysis
20
+ export { analyzeFilesSwarm, analyzeFilesSwarmStream, } from './agents/mastra/swarm.js';
21
+ // Workflow
22
+ export { analyzeFile, analyzeFileStream, } from './agents/mastra/workflow.js';
23
+ // Security Scan
24
+ export { SecurityScanner, scanRepository, scanDirectory, quickScan, formatScanReport, } from './security-scan/index.js';
25
+ export { getOWASPMapping, getCWEsForOWASPCategory, getOWASPCategoryByRank, getOWASPCategoryDescription, } from './security-scan/owasp-mapping.js';
26
+ export { TrendTracker, getTrendTracker, trackScan, } from './security-scan/trend-tracker.js';
27
+ // Dead Code Detection
28
+ export { DeadCodeDetector, detectDeadCode, quickDeadCodeCheck, formatDeadCodeReport, } from './dead-code/index.js';
29
+ // Secret Scanning
30
+ export { SecretScanner, scanForSecrets, quickSecretScan, formatSecretReport, SECRET_PATTERNS, calculateEntropy, getPatternsByCategory, getPatternsBySeverity, getPatternCategories, } from './secret-scan/index.js';
31
+ // Health Score
32
+ export { HealthScoreCalculator, calculateHealthScore, quickHealthCheck, formatHealthReport, DEFAULT_WEIGHTS, calculateSecurityScore, calculateMaintainabilityScore, calculateQualityScore, calculatePerformanceScore, getScoreLabel, getScoreColor, } from './health-score/index.js';
33
+ // LLM Discovery (for benchmarks)
34
+ export { DiscoveryEngine, getDiscoveryEngine, discoverVulnerabilities, discoveryResultsToFindings, } from './llm/discovery.js';
35
+ // Action Queue
36
+ export { ActionQueue, aggregateFindings, exportActions, formatQueueSummary, formatSprintPlan, DEFAULT_PRIORITY_WEIGHTS, EFFORT_POINTS, RISK_SCORES, EFFORT_SCORES, } from './action-queue/index.js';
37
+ // Cache for analysis results
38
+ export { FileCache, getAnalysisCache, resetAnalysisCache, } from './cache/file-cache.js';
39
+ // Specifica Generation
40
+ export { generateSpecifica, generateSpecificaForDirectory, extractEvidence, generateSpec, formatSpecMarkdown, resolveConflict, fileExists, getConflictStrategy, } from './specifica/index.js';
41
+ // Note: API server has moved to circle-pack
42
+ // Use: cd circle-pack && npm run api:start
43
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,sCAAsC;AACtC,cAAc,WAAW,CAAC;AAE1B,+BAA+B;AAC/B,OAAO,EACL,WAAW,EACX,cAAc,GAEf,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,eAAe,EACf,gBAAgB,GAGjB,MAAM,iBAAiB,CAAC;AAEzB,aAAa;AACb,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,UAAU,GAMX,MAAM,qBAAqB,CAAC;AAE7B,eAAe;AACf,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,mBAAmB,GAKpB,MAAM,uBAAuB,CAAC;AAE/B,uBAAuB;AACvB,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,uBAAuB,GAGxB,MAAM,+BAA+B,CAAC;AAEvC,iBAAiB;AACjB,OAAO,EACL,iBAAiB,EACjB,uBAAuB,GAIxB,MAAM,0BAA0B,CAAC;AAElC,WAAW;AACX,OAAO,EACL,WAAW,EACX,iBAAiB,GAGlB,MAAM,6BAA6B,CAAC;AAErC,gBAAgB;AAChB,OAAO,EACL,eAAe,EACf,cAAc,EACd,aAAa,EACb,SAAS,EACT,gBAAgB,GASjB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,eAAe,EACf,uBAAuB,EACvB,sBAAsB,EACtB,2BAA2B,GAG5B,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EACL,YAAY,EACZ,eAAe,EACf,SAAS,GAKV,MAAM,kCAAkC,CAAC;AAE1C,sBAAsB;AACtB,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,oBAAoB,GAQrB,MAAM,sBAAsB,CAAC;AAE9B,kBAAkB;AAClB,OAAO,EACL,aAAa,EACb,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,GAOrB,MAAM,wBAAwB,CAAC;AAEhC,eAAe;AACf,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,6BAA6B,EAC7B,qBAAqB,EACrB,yBAAyB,EACzB,aAAa,EACb,aAAa,GASd,MAAM,yBAAyB,CAAC;AAEjC,iCAAiC;AACjC,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,uBAAuB,EACvB,0BAA0B,GAI3B,MAAM,oBAAoB,CAAC;AAE5B,eAAe;AACf,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,wBAAwB,EACxB,aAAa,EACb,WAAW,EACX,aAAa,GAcd,MAAM,yBAAyB,CAAC;AAEjC,6BAA6B;AAC7B,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,kBAAkB,GAGnB,MAAM,uBAAuB,CAAC;AAE/B,uBAAuB;AACvB,OAAO,EACL,iBAAiB,EACjB,6BAA6B,EAC7B,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,UAAU,EACV,mBAAmB,GAQpB,MAAM,sBAAsB,CAAC;AAE9B,4CAA4C;AAC5C,2CAA2C"}