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,54 @@
1
+ /**
2
+ * Extractor Types
3
+ *
4
+ * Universal extraction interface for all codebase artifacts.
5
+ * Enables unified analysis of code, natural language, and configuration files.
6
+ */
7
+ /**
8
+ * Extractor registry for managing multiple extractors
9
+ */
10
+ export class ExtractorRegistry {
11
+ extractors = [];
12
+ /**
13
+ * Register an extractor
14
+ */
15
+ register(extractor) {
16
+ this.extractors.push(extractor);
17
+ }
18
+ /**
19
+ * Find extractor for a given file path
20
+ */
21
+ findExtractor(filePath) {
22
+ return this.extractors.find((e) => e.canHandle(filePath));
23
+ }
24
+ /**
25
+ * Extract CircleIR from a file using appropriate extractor
26
+ */
27
+ async extract(content, filePath) {
28
+ const extractor = this.findExtractor(filePath);
29
+ if (!extractor) {
30
+ throw new Error(`No extractor found for file: ${filePath}`);
31
+ }
32
+ return extractor.extract(content, filePath);
33
+ }
34
+ /**
35
+ * Get all registered extractors
36
+ */
37
+ getExtractors() {
38
+ return [...this.extractors];
39
+ }
40
+ }
41
+ /**
42
+ * Create default extractor registry with all built-in extractors
43
+ */
44
+ export async function createDefaultExtractorRegistry() {
45
+ const registry = new ExtractorRegistry();
46
+ // Import and register all built-in extractors
47
+ const { TreeSitterExtractor } = await import('./tree-sitter.js');
48
+ const { NaturalLanguageExtractor } = await import('./natural-language.js');
49
+ registry.register(new TreeSitterExtractor());
50
+ registry.register(new NaturalLanguageExtractor());
51
+ // Future: registry.register(new SchemaExtractor());
52
+ return registry;
53
+ }
54
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/extractors/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAmCH;;GAEG;AACH,MAAM,OAAO,iBAAiB;IACpB,UAAU,GAAwB,EAAE,CAAC;IAE7C;;OAEG;IACH,QAAQ,CAAC,SAA4B;QACnC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,QAAgB;QAC5B,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,OAAe,EAAE,QAAgB;QAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,gCAAgC,QAAQ,EAAE,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,8BAA8B;IAClD,MAAM,QAAQ,GAAG,IAAI,iBAAiB,EAAE,CAAC;IAEzC,8CAA8C;IAC9C,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACjE,MAAM,EAAE,wBAAwB,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAE3E,QAAQ,CAAC,QAAQ,CAAC,IAAI,mBAAmB,EAAE,CAAC,CAAC;IAC7C,QAAQ,CAAC,QAAQ,CAAC,IAAI,wBAAwB,EAAE,CAAC,CAAC;IAElD,oDAAoD;IAEpD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Codebase Health Score Calculator
3
+ *
4
+ * Aggregates metrics from security, maintainability, quality, and performance
5
+ * dimensions into an overall health score.
6
+ */
7
+ import { type ScanResult } from '../security-scan/scanner.js';
8
+ import { type SecretScanResult } from '../secret-scan/scanner.js';
9
+ import { type DeadCodeResult } from '../dead-code/detector.js';
10
+ import { type MetricResult } from './metrics.js';
11
+ /**
12
+ * Health score calculation options
13
+ */
14
+ export interface HealthScoreOptions {
15
+ /** Include security scan */
16
+ includeSecurity?: boolean;
17
+ /** Include secret scan */
18
+ includeSecrets?: boolean;
19
+ /** Include dead code analysis */
20
+ includeDeadCode?: boolean;
21
+ /** Include quality metrics */
22
+ includeQuality?: boolean;
23
+ /** Include performance analysis */
24
+ includePerformance?: boolean;
25
+ /** Custom weights (must sum to 1.0) */
26
+ weights?: HealthScoreWeights;
27
+ /** File patterns to include */
28
+ includePatterns?: string[];
29
+ /** File patterns to exclude */
30
+ excludePatterns?: string[];
31
+ /** Progress callback */
32
+ onProgress?: (phase: string, progress: number) => void;
33
+ /** Pre-computed security scan result */
34
+ securityScanResult?: ScanResult;
35
+ /** Pre-computed secret scan result */
36
+ secretScanResult?: SecretScanResult;
37
+ /** Pre-computed dead code result */
38
+ deadCodeResult?: DeadCodeResult;
39
+ /** Test coverage percentage (if known) */
40
+ testCoverage?: number;
41
+ }
42
+ /**
43
+ * Weights for each dimension
44
+ */
45
+ export interface HealthScoreWeights {
46
+ security: number;
47
+ maintainability: number;
48
+ quality: number;
49
+ performance: number;
50
+ }
51
+ /**
52
+ * Default weights
53
+ */
54
+ export declare const DEFAULT_WEIGHTS: HealthScoreWeights;
55
+ /**
56
+ * Health score result
57
+ */
58
+ export interface HealthScoreResult {
59
+ /** Overall score (0-100) */
60
+ overallScore: number;
61
+ /** Overall label */
62
+ overallLabel: string;
63
+ /** Color for display */
64
+ color: 'green' | 'yellow' | 'orange' | 'red';
65
+ /** Individual dimension scores */
66
+ dimensions: {
67
+ security: MetricResult;
68
+ maintainability: MetricResult;
69
+ quality: MetricResult;
70
+ performance: MetricResult;
71
+ };
72
+ /** Weights used */
73
+ weights: HealthScoreWeights;
74
+ /** Top issues to address */
75
+ topIssues: string[];
76
+ /** Recommendations */
77
+ recommendations: string[];
78
+ /** Scan metadata */
79
+ meta: {
80
+ directory: string;
81
+ filesAnalyzed: number;
82
+ totalLoc: number;
83
+ timestamp: string;
84
+ durationMs: number;
85
+ };
86
+ }
87
+ /**
88
+ * Health Score Calculator
89
+ */
90
+ export declare class HealthScoreCalculator {
91
+ private options;
92
+ private weights;
93
+ constructor(options?: HealthScoreOptions);
94
+ /**
95
+ * Calculate health score for a directory
96
+ */
97
+ calculate(directory: string): Promise<HealthScoreResult>;
98
+ /**
99
+ * Collect file information for metrics
100
+ */
101
+ private collectFileInfo;
102
+ /**
103
+ * Get language from file extension
104
+ */
105
+ private getLanguage;
106
+ /**
107
+ * Generate recommendations based on scores
108
+ */
109
+ private generateRecommendations;
110
+ }
111
+ /**
112
+ * Calculate health score for a directory (convenience function)
113
+ */
114
+ export declare function calculateHealthScore(directory: string, options?: HealthScoreOptions): Promise<HealthScoreResult>;
115
+ /**
116
+ * Quick health check (faster, less comprehensive)
117
+ */
118
+ export declare function quickHealthCheck(directory: string): Promise<HealthScoreResult>;
119
+ /**
120
+ * Format health score as text report
121
+ */
122
+ export declare function formatHealthReport(result: HealthScoreResult): string;
123
+ //# sourceMappingURL=calculator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calculator.d.ts","sourceRoot":"","sources":["../../src/health-score/calculator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,444 @@
1
+ /**
2
+ * Codebase Health Score Calculator
3
+ *
4
+ * Aggregates metrics from security, maintainability, quality, and performance
5
+ * dimensions into an overall health score.
6
+ */
7
+ import * as fs from 'fs';
8
+ import * as path from 'path';
9
+ import { scanDirectory } from '../security-scan/scanner.js';
10
+ import { quickSecretScan } from '../secret-scan/scanner.js';
11
+ import { detectDeadCode } from '../dead-code/detector.js';
12
+ import { calculateSecurityScore, calculateMaintainabilityScore, calculateQualityScore, calculatePerformanceScore, countAnnotations, countLinesOfCode, estimateComplexity, detectNPlusOnePatterns, detectBlockingIoPatterns, getScoreLabel, getScoreColor, } from './metrics.js';
13
+ /**
14
+ * Default weights
15
+ */
16
+ export const DEFAULT_WEIGHTS = {
17
+ security: 0.35,
18
+ maintainability: 0.25,
19
+ quality: 0.25,
20
+ performance: 0.15,
21
+ };
22
+ /**
23
+ * Health Score Calculator
24
+ */
25
+ export class HealthScoreCalculator {
26
+ options;
27
+ weights;
28
+ constructor(options = {}) {
29
+ this.options = {
30
+ includeSecurity: true,
31
+ includeSecrets: true,
32
+ includeDeadCode: true,
33
+ includeQuality: true,
34
+ includePerformance: true,
35
+ ...options,
36
+ };
37
+ this.weights = options.weights || DEFAULT_WEIGHTS;
38
+ // Validate weights sum to 1.0
39
+ const weightSum = Object.values(this.weights).reduce((a, b) => a + b, 0);
40
+ if (Math.abs(weightSum - 1.0) > 0.01) {
41
+ throw new Error(`Weights must sum to 1.0, got ${weightSum}`);
42
+ }
43
+ }
44
+ /**
45
+ * Calculate health score for a directory
46
+ */
47
+ async calculate(directory) {
48
+ const startTime = Date.now();
49
+ // Collect file information
50
+ this.options.onProgress?.('Indexing files', 0);
51
+ const fileInfo = await this.collectFileInfo(directory);
52
+ // Run security scan
53
+ let securityMetrics = {
54
+ owaspScores: {},
55
+ vulnerabilities: { critical: 0, high: 0, medium: 0, low: 0 },
56
+ secretsExposed: 0,
57
+ activeSecrets: 0,
58
+ };
59
+ if (this.options.includeSecurity) {
60
+ this.options.onProgress?.('Running security scan', 0.1);
61
+ const securityResult = this.options.securityScanResult || await scanDirectory(directory);
62
+ // Map vulnerabilities
63
+ for (const finding of securityResult.findings) {
64
+ const severity = finding.severity?.toLowerCase();
65
+ if (severity && severity in securityMetrics.vulnerabilities) {
66
+ securityMetrics.vulnerabilities[severity]++;
67
+ }
68
+ // Track OWASP categories
69
+ if (finding.owasp) {
70
+ const category = finding.owasp.category;
71
+ securityMetrics.owaspScores[category] =
72
+ (securityMetrics.owaspScores[category] || 0) + 1;
73
+ }
74
+ }
75
+ }
76
+ if (this.options.includeSecrets) {
77
+ this.options.onProgress?.('Scanning for secrets', 0.2);
78
+ const secretResult = this.options.secretScanResult || await quickSecretScan(directory);
79
+ securityMetrics.secretsExposed = secretResult.secrets.length;
80
+ securityMetrics.activeSecrets = secretResult.activeSecrets;
81
+ }
82
+ // Run dead code analysis
83
+ let maintainabilityMetrics = {
84
+ totalLoc: fileInfo.totalLoc,
85
+ deadCodeLoc: 0,
86
+ deadFunctions: 0,
87
+ avgComplexity: fileInfo.avgComplexity,
88
+ maxComplexity: fileInfo.maxComplexity,
89
+ complexFunctions: fileInfo.complexFunctions,
90
+ duplicationPercent: 0,
91
+ };
92
+ if (this.options.includeDeadCode) {
93
+ this.options.onProgress?.('Detecting dead code', 0.4);
94
+ try {
95
+ const deadCodeResult = this.options.deadCodeResult || await detectDeadCode({ target: directory });
96
+ maintainabilityMetrics.deadCodeLoc = deadCodeResult.summary.deadLOC;
97
+ maintainabilityMetrics.deadFunctions = deadCodeResult.deadCode.length;
98
+ }
99
+ catch {
100
+ // Dead code detection failed, use defaults
101
+ }
102
+ }
103
+ // Quality metrics
104
+ this.options.onProgress?.('Calculating quality metrics', 0.6);
105
+ const qualityMetrics = {
106
+ testCoverage: this.options.testCoverage ?? fileInfo.estimatedTestCoverage,
107
+ testFiles: fileInfo.testFiles,
108
+ sourceFiles: fileInfo.sourceFiles,
109
+ todoCount: fileInfo.todoCount,
110
+ fixmeCount: fileInfo.fixmeCount,
111
+ hackCount: fileInfo.hackCount,
112
+ filesWithTests: fileInfo.filesWithTests,
113
+ lintErrors: 0, // Would need to run linter
114
+ };
115
+ // Performance metrics
116
+ this.options.onProgress?.('Analyzing performance patterns', 0.8);
117
+ const performanceMetrics = {
118
+ nPlusOnePatterns: fileInfo.nPlusOnePatterns,
119
+ inefficientLoops: 0,
120
+ blockingIoPatterns: fileInfo.blockingIoPatterns,
121
+ largeBundles: 0,
122
+ unusedImports: 0,
123
+ syncAntiPatterns: 0,
124
+ };
125
+ // Calculate dimension scores
126
+ const securityScore = calculateSecurityScore(securityMetrics);
127
+ const maintainabilityScore = calculateMaintainabilityScore(maintainabilityMetrics);
128
+ const qualityScore = calculateQualityScore(qualityMetrics);
129
+ const performanceScore = calculatePerformanceScore(performanceMetrics);
130
+ // Calculate weighted overall score
131
+ const overallScore = Math.round(securityScore.score * this.weights.security +
132
+ maintainabilityScore.score * this.weights.maintainability +
133
+ qualityScore.score * this.weights.quality +
134
+ performanceScore.score * this.weights.performance);
135
+ // Collect all issues and prioritize
136
+ const allIssues = [
137
+ ...(securityScore.issues || []),
138
+ ...(maintainabilityScore.issues || []),
139
+ ...(qualityScore.issues || []),
140
+ ...(performanceScore.issues || []),
141
+ ];
142
+ // Generate recommendations
143
+ const recommendations = this.generateRecommendations({
144
+ security: securityScore,
145
+ maintainability: maintainabilityScore,
146
+ quality: qualityScore,
147
+ performance: performanceScore,
148
+ });
149
+ this.options.onProgress?.('Complete', 1.0);
150
+ return {
151
+ overallScore,
152
+ overallLabel: getScoreLabel(overallScore),
153
+ color: getScoreColor(overallScore),
154
+ dimensions: {
155
+ security: securityScore,
156
+ maintainability: maintainabilityScore,
157
+ quality: qualityScore,
158
+ performance: performanceScore,
159
+ },
160
+ weights: this.weights,
161
+ topIssues: allIssues.slice(0, 10),
162
+ recommendations,
163
+ meta: {
164
+ directory,
165
+ filesAnalyzed: fileInfo.totalFiles,
166
+ totalLoc: fileInfo.totalLoc,
167
+ timestamp: new Date().toISOString(),
168
+ durationMs: Date.now() - startTime,
169
+ },
170
+ };
171
+ }
172
+ /**
173
+ * Collect file information for metrics
174
+ */
175
+ async collectFileInfo(directory) {
176
+ const info = {
177
+ totalFiles: 0,
178
+ sourceFiles: 0,
179
+ testFiles: 0,
180
+ totalLoc: 0,
181
+ todoCount: 0,
182
+ fixmeCount: 0,
183
+ hackCount: 0,
184
+ avgComplexity: 0,
185
+ maxComplexity: 0,
186
+ complexFunctions: 0,
187
+ nPlusOnePatterns: 0,
188
+ blockingIoPatterns: 0,
189
+ estimatedTestCoverage: 0,
190
+ filesWithTests: 0,
191
+ };
192
+ const excludePatterns = [
193
+ /node_modules/,
194
+ /\.git/,
195
+ /dist/,
196
+ /build/,
197
+ /coverage/,
198
+ /\.min\./,
199
+ /vendor/,
200
+ ];
201
+ const sourceExtensions = ['.ts', '.tsx', '.js', '.jsx', '.java', '.py', '.go', '.rs'];
202
+ const testPatterns = [/\.test\./, /\.spec\./, /_test\./, /Test\.java$/, /test_.*\.py$/];
203
+ let totalComplexity = 0;
204
+ let fileCount = 0;
205
+ const walk = (dir) => {
206
+ try {
207
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
208
+ for (const entry of entries) {
209
+ const fullPath = path.join(dir, entry.name);
210
+ const relativePath = path.relative(directory, fullPath);
211
+ if (excludePatterns.some((p) => p.test(relativePath))) {
212
+ continue;
213
+ }
214
+ if (entry.isDirectory()) {
215
+ walk(fullPath);
216
+ }
217
+ else if (entry.isFile()) {
218
+ const ext = path.extname(entry.name);
219
+ if (!sourceExtensions.includes(ext))
220
+ continue;
221
+ info.totalFiles++;
222
+ const isTest = testPatterns.some((p) => p.test(entry.name));
223
+ if (isTest) {
224
+ info.testFiles++;
225
+ }
226
+ else {
227
+ info.sourceFiles++;
228
+ }
229
+ try {
230
+ const content = fs.readFileSync(fullPath, 'utf-8');
231
+ const language = this.getLanguage(ext);
232
+ // Count LOC
233
+ const loc = countLinesOfCode(content, language);
234
+ info.totalLoc += loc;
235
+ // Count annotations
236
+ const annotations = countAnnotations(content);
237
+ info.todoCount += annotations.todo;
238
+ info.fixmeCount += annotations.fixme;
239
+ info.hackCount += annotations.hack;
240
+ // Estimate complexity
241
+ if (!isTest) {
242
+ const complexity = estimateComplexity(content);
243
+ totalComplexity += complexity;
244
+ fileCount++;
245
+ info.maxComplexity = Math.max(info.maxComplexity, complexity);
246
+ if (complexity > 10) {
247
+ info.complexFunctions++;
248
+ }
249
+ }
250
+ // Detect patterns
251
+ info.nPlusOnePatterns += detectNPlusOnePatterns(content);
252
+ info.blockingIoPatterns += detectBlockingIoPatterns(content);
253
+ }
254
+ catch {
255
+ // Skip files that can't be read
256
+ }
257
+ }
258
+ }
259
+ }
260
+ catch {
261
+ // Skip directories that can't be read
262
+ }
263
+ };
264
+ walk(directory);
265
+ // Calculate averages
266
+ info.avgComplexity = fileCount > 0 ? totalComplexity / fileCount : 0;
267
+ // Estimate test coverage from test file ratio
268
+ if (info.sourceFiles > 0) {
269
+ const testRatio = info.testFiles / info.sourceFiles;
270
+ // Rough estimate: 1:1 test ratio suggests ~80% coverage
271
+ info.estimatedTestCoverage = Math.min(100, Math.round(testRatio * 80));
272
+ }
273
+ return info;
274
+ }
275
+ /**
276
+ * Get language from file extension
277
+ */
278
+ getLanguage(ext) {
279
+ const map = {
280
+ '.ts': 'typescript',
281
+ '.tsx': 'typescript',
282
+ '.js': 'javascript',
283
+ '.jsx': 'javascript',
284
+ '.java': 'java',
285
+ '.py': 'python',
286
+ '.go': 'go',
287
+ '.rs': 'rust',
288
+ };
289
+ return map[ext] || 'unknown';
290
+ }
291
+ /**
292
+ * Generate recommendations based on scores
293
+ */
294
+ generateRecommendations(dimensions) {
295
+ const recommendations = [];
296
+ // Security recommendations
297
+ if (dimensions.security.score < 70) {
298
+ if (dimensions.security.details.criticalVulns > 0) {
299
+ recommendations.push('Address critical security vulnerabilities immediately');
300
+ }
301
+ if (dimensions.security.details.activeSecrets > 0) {
302
+ recommendations.push('Remove exposed secrets and rotate credentials');
303
+ }
304
+ recommendations.push('Run regular security scans with CI/CD integration');
305
+ }
306
+ // Maintainability recommendations
307
+ if (dimensions.maintainability.score < 70) {
308
+ if (dimensions.maintainability.details.deadCodePercent > 5) {
309
+ recommendations.push('Remove dead code to improve maintainability');
310
+ }
311
+ if (dimensions.maintainability.details.complexFunctions > 5) {
312
+ recommendations.push('Refactor complex functions to reduce cyclomatic complexity');
313
+ }
314
+ }
315
+ // Quality recommendations
316
+ if (dimensions.quality.score < 70) {
317
+ if (dimensions.quality.details.testCoverage < 60) {
318
+ recommendations.push('Increase test coverage to at least 70%');
319
+ }
320
+ if (dimensions.quality.details.fixmeCount > 5) {
321
+ recommendations.push('Address FIXME comments in the codebase');
322
+ }
323
+ }
324
+ // Performance recommendations
325
+ if (dimensions.performance.score < 70) {
326
+ if (dimensions.performance.details.nPlusOnePatterns > 0) {
327
+ recommendations.push('Fix N+1 query patterns with eager loading or batching');
328
+ }
329
+ if (dimensions.performance.details.blockingIoPatterns > 0) {
330
+ recommendations.push('Replace blocking I/O with async alternatives');
331
+ }
332
+ }
333
+ // General recommendations
334
+ if (recommendations.length === 0) {
335
+ recommendations.push('Maintain current practices and monitor for regressions');
336
+ }
337
+ return recommendations;
338
+ }
339
+ }
340
+ /**
341
+ * Calculate health score for a directory (convenience function)
342
+ */
343
+ export async function calculateHealthScore(directory, options = {}) {
344
+ const calculator = new HealthScoreCalculator(options);
345
+ return calculator.calculate(directory);
346
+ }
347
+ /**
348
+ * Quick health check (faster, less comprehensive)
349
+ */
350
+ export async function quickHealthCheck(directory) {
351
+ return calculateHealthScore(directory, {
352
+ includeSecurity: false,
353
+ includeSecrets: false,
354
+ includeDeadCode: false,
355
+ includePerformance: false,
356
+ });
357
+ }
358
+ /**
359
+ * Format health score as text report
360
+ */
361
+ export function formatHealthReport(result) {
362
+ const lines = [];
363
+ const bar = (score) => {
364
+ const filled = Math.round(score / 5);
365
+ return '█'.repeat(filled) + '░'.repeat(20 - filled);
366
+ };
367
+ lines.push('═'.repeat(60));
368
+ lines.push('CODEBASE HEALTH REPORT');
369
+ lines.push('═'.repeat(60));
370
+ lines.push('');
371
+ lines.push(`Directory: ${result.meta.directory}`);
372
+ lines.push(`Files Analyzed: ${result.meta.filesAnalyzed}`);
373
+ lines.push(`Total LOC: ${result.meta.totalLoc.toLocaleString()}`);
374
+ lines.push(`Generated: ${result.meta.timestamp}`);
375
+ lines.push('');
376
+ // Overall score
377
+ lines.push('─'.repeat(40));
378
+ lines.push(`OVERALL SCORE: ${result.overallScore}/100 (${result.overallLabel})`);
379
+ lines.push(`${bar(result.overallScore)} ${result.overallScore}%`);
380
+ lines.push('─'.repeat(40));
381
+ lines.push('');
382
+ // Dimension scores
383
+ lines.push('DIMENSION SCORES:');
384
+ lines.push('');
385
+ const dims = [
386
+ { name: 'Security', weight: result.weights.security, score: result.dimensions.security },
387
+ { name: 'Maintainability', weight: result.weights.maintainability, score: result.dimensions.maintainability },
388
+ { name: 'Quality', weight: result.weights.quality, score: result.dimensions.quality },
389
+ { name: 'Performance', weight: result.weights.performance, score: result.dimensions.performance },
390
+ ];
391
+ for (const dim of dims) {
392
+ const weightPct = Math.round(dim.weight * 100);
393
+ lines.push(` ${dim.name} (${weightPct}%): ${dim.score.score}/100 - ${dim.score.label}`);
394
+ lines.push(` ${bar(dim.score.score)}`);
395
+ lines.push('');
396
+ }
397
+ // Top issues
398
+ if (result.topIssues.length > 0) {
399
+ lines.push('─'.repeat(40));
400
+ lines.push('TOP ISSUES:');
401
+ lines.push('');
402
+ for (const issue of result.topIssues) {
403
+ lines.push(` • ${issue}`);
404
+ }
405
+ lines.push('');
406
+ }
407
+ // Recommendations
408
+ if (result.recommendations.length > 0) {
409
+ lines.push('─'.repeat(40));
410
+ lines.push('RECOMMENDATIONS:');
411
+ lines.push('');
412
+ for (let i = 0; i < result.recommendations.length; i++) {
413
+ lines.push(` ${i + 1}. ${result.recommendations[i]}`);
414
+ }
415
+ lines.push('');
416
+ }
417
+ // Detailed metrics
418
+ lines.push('─'.repeat(40));
419
+ lines.push('DETAILED METRICS:');
420
+ lines.push('');
421
+ lines.push(' Security:');
422
+ for (const [key, value] of Object.entries(result.dimensions.security.details)) {
423
+ lines.push(` ${key}: ${value}`);
424
+ }
425
+ lines.push('');
426
+ lines.push(' Maintainability:');
427
+ for (const [key, value] of Object.entries(result.dimensions.maintainability.details)) {
428
+ lines.push(` ${key}: ${value}`);
429
+ }
430
+ lines.push('');
431
+ lines.push(' Quality:');
432
+ for (const [key, value] of Object.entries(result.dimensions.quality.details)) {
433
+ lines.push(` ${key}: ${value}`);
434
+ }
435
+ lines.push('');
436
+ lines.push(' Performance:');
437
+ for (const [key, value] of Object.entries(result.dimensions.performance.details)) {
438
+ lines.push(` ${key}: ${value}`);
439
+ }
440
+ lines.push('');
441
+ lines.push('═'.repeat(60));
442
+ return lines.join('\n');
443
+ }
444
+ //# sourceMappingURL=calculator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calculator.js","sourceRoot":"","sources":["../../src/health-score/calculator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
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
+ export { calculateSecurityScore, calculateMaintainabilityScore, calculateQualityScore, calculatePerformanceScore, getScoreLabel, getScoreColor, countAnnotations, countLinesOfCode, estimateComplexity, detectNPlusOnePatterns, detectBlockingIoPatterns, type MetricResult, type SecurityMetrics, type MaintainabilityMetrics, type QualityMetrics, type PerformanceMetrics, } from './metrics.js';
11
+ export { HealthScoreCalculator, calculateHealthScore, quickHealthCheck, formatHealthReport, DEFAULT_WEIGHTS, type HealthScoreOptions, type HealthScoreWeights, type HealthScoreResult, } from './calculator.js';
12
+ //# sourceMappingURL=index.d.ts.map