@skillsmith/core 0.1.2 → 2.0.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 (493) hide show
  1. package/README.md +233 -2
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/src/analysis/CodebaseAnalyzer.d.ts +4 -134
  4. package/dist/src/analysis/CodebaseAnalyzer.d.ts.map +1 -1
  5. package/dist/src/analysis/CodebaseAnalyzer.js +7 -315
  6. package/dist/src/analysis/CodebaseAnalyzer.js.map +1 -1
  7. package/dist/src/analysis/__tests__/incremental.test.d.ts +13 -0
  8. package/dist/src/analysis/__tests__/incremental.test.d.ts.map +1 -0
  9. package/dist/src/analysis/__tests__/incremental.test.js +515 -0
  10. package/dist/src/analysis/__tests__/incremental.test.js.map +1 -0
  11. package/dist/src/analysis/__tests__/integration.test.d.ts +14 -0
  12. package/dist/src/analysis/__tests__/integration.test.d.ts.map +1 -0
  13. package/dist/src/analysis/__tests__/integration.test.js +1059 -0
  14. package/dist/src/analysis/__tests__/integration.test.js.map +1 -0
  15. package/dist/src/analysis/__tests__/metrics.test.d.ts +9 -0
  16. package/dist/src/analysis/__tests__/metrics.test.d.ts.map +1 -0
  17. package/dist/src/analysis/__tests__/metrics.test.js +369 -0
  18. package/dist/src/analysis/__tests__/metrics.test.js.map +1 -0
  19. package/dist/src/analysis/__tests__/performance.test.d.ts +15 -0
  20. package/dist/src/analysis/__tests__/performance.test.d.ts.map +1 -0
  21. package/dist/src/analysis/__tests__/performance.test.js +402 -0
  22. package/dist/src/analysis/__tests__/performance.test.js.map +1 -0
  23. package/dist/src/analysis/adapters/__tests__/go.test.d.ts +12 -0
  24. package/dist/src/analysis/adapters/__tests__/go.test.d.ts.map +1 -0
  25. package/dist/src/analysis/adapters/__tests__/go.test.js +561 -0
  26. package/dist/src/analysis/adapters/__tests__/go.test.js.map +1 -0
  27. package/dist/src/analysis/adapters/__tests__/python.test.d.ts +11 -0
  28. package/dist/src/analysis/adapters/__tests__/python.test.d.ts.map +1 -0
  29. package/dist/src/analysis/adapters/__tests__/python.test.js +669 -0
  30. package/dist/src/analysis/adapters/__tests__/python.test.js.map +1 -0
  31. package/dist/src/analysis/adapters/__tests__/rust.test.d.ts +12 -0
  32. package/dist/src/analysis/adapters/__tests__/rust.test.d.ts.map +1 -0
  33. package/dist/src/analysis/adapters/__tests__/rust.test.js +676 -0
  34. package/dist/src/analysis/adapters/__tests__/rust.test.js.map +1 -0
  35. package/dist/src/analysis/adapters/__tests__/typescript.test.d.ts +14 -0
  36. package/dist/src/analysis/adapters/__tests__/typescript.test.d.ts.map +1 -0
  37. package/dist/src/analysis/adapters/__tests__/typescript.test.js +381 -0
  38. package/dist/src/analysis/adapters/__tests__/typescript.test.js.map +1 -0
  39. package/dist/src/analysis/adapters/base.d.ts +83 -0
  40. package/dist/src/analysis/adapters/base.d.ts.map +1 -0
  41. package/dist/src/analysis/adapters/base.js +40 -0
  42. package/dist/src/analysis/adapters/base.js.map +1 -0
  43. package/dist/src/analysis/adapters/factory.d.ts +150 -0
  44. package/dist/src/analysis/adapters/factory.d.ts.map +1 -0
  45. package/dist/src/analysis/adapters/factory.js +244 -0
  46. package/dist/src/analysis/adapters/factory.js.map +1 -0
  47. package/dist/src/analysis/adapters/go.d.ts +131 -0
  48. package/dist/src/analysis/adapters/go.d.ts.map +1 -0
  49. package/dist/src/analysis/adapters/go.js +414 -0
  50. package/dist/src/analysis/adapters/go.js.map +1 -0
  51. package/dist/src/analysis/adapters/index.d.ts +20 -0
  52. package/dist/src/analysis/adapters/index.d.ts.map +1 -0
  53. package/dist/src/analysis/adapters/index.js +23 -0
  54. package/dist/src/analysis/adapters/index.js.map +1 -0
  55. package/dist/src/analysis/adapters/java.d.ts +154 -0
  56. package/dist/src/analysis/adapters/java.d.ts.map +1 -0
  57. package/dist/src/analysis/adapters/java.js +407 -0
  58. package/dist/src/analysis/adapters/java.js.map +1 -0
  59. package/dist/src/analysis/adapters/python.d.ts +165 -0
  60. package/dist/src/analysis/adapters/python.d.ts.map +1 -0
  61. package/dist/src/analysis/adapters/python.js +475 -0
  62. package/dist/src/analysis/adapters/python.js.map +1 -0
  63. package/dist/src/analysis/adapters/rust.d.ts +116 -0
  64. package/dist/src/analysis/adapters/rust.d.ts.map +1 -0
  65. package/dist/src/analysis/adapters/rust.js +476 -0
  66. package/dist/src/analysis/adapters/rust.js.map +1 -0
  67. package/dist/src/analysis/adapters/typescript.d.ts +68 -0
  68. package/dist/src/analysis/adapters/typescript.d.ts.map +1 -0
  69. package/dist/src/analysis/adapters/typescript.js +79 -0
  70. package/dist/src/analysis/adapters/typescript.js.map +1 -0
  71. package/dist/src/analysis/aggregator.d.ts +193 -0
  72. package/dist/src/analysis/aggregator.d.ts.map +1 -0
  73. package/dist/src/analysis/aggregator.js +283 -0
  74. package/dist/src/analysis/aggregator.js.map +1 -0
  75. package/dist/src/analysis/cache.d.ts +180 -0
  76. package/dist/src/analysis/cache.d.ts.map +1 -0
  77. package/dist/src/analysis/cache.js +279 -0
  78. package/dist/src/analysis/cache.js.map +1 -0
  79. package/dist/src/analysis/file-streamer.d.ts +136 -0
  80. package/dist/src/analysis/file-streamer.d.ts.map +1 -0
  81. package/dist/src/analysis/file-streamer.js +291 -0
  82. package/dist/src/analysis/file-streamer.js.map +1 -0
  83. package/dist/src/analysis/framework-detector.d.ts +47 -0
  84. package/dist/src/analysis/framework-detector.d.ts.map +1 -0
  85. package/dist/src/analysis/framework-detector.js +151 -0
  86. package/dist/src/analysis/framework-detector.js.map +1 -0
  87. package/dist/src/analysis/incremental-parser.d.ts +186 -0
  88. package/dist/src/analysis/incremental-parser.d.ts.map +1 -0
  89. package/dist/src/analysis/incremental-parser.js +291 -0
  90. package/dist/src/analysis/incremental-parser.js.map +1 -0
  91. package/dist/src/analysis/incremental.d.ts +186 -0
  92. package/dist/src/analysis/incremental.d.ts.map +1 -0
  93. package/dist/src/analysis/incremental.js +247 -0
  94. package/dist/src/analysis/incremental.js.map +1 -0
  95. package/dist/src/analysis/index.d.ts +29 -2
  96. package/dist/src/analysis/index.d.ts.map +1 -1
  97. package/dist/src/analysis/index.js +53 -2
  98. package/dist/src/analysis/index.js.map +1 -1
  99. package/dist/src/analysis/language-detector.d.ts +92 -0
  100. package/dist/src/analysis/language-detector.d.ts.map +1 -0
  101. package/dist/src/analysis/language-detector.js +602 -0
  102. package/dist/src/analysis/language-detector.js.map +1 -0
  103. package/dist/src/analysis/memory-monitor.d.ts +199 -0
  104. package/dist/src/analysis/memory-monitor.d.ts.map +1 -0
  105. package/dist/src/analysis/memory-monitor.js +271 -0
  106. package/dist/src/analysis/memory-monitor.js.map +1 -0
  107. package/dist/src/analysis/metrics.d.ts +300 -0
  108. package/dist/src/analysis/metrics.d.ts.map +1 -0
  109. package/dist/src/analysis/metrics.js +537 -0
  110. package/dist/src/analysis/metrics.js.map +1 -0
  111. package/dist/src/analysis/parsers.d.ts +43 -0
  112. package/dist/src/analysis/parsers.d.ts.map +1 -0
  113. package/dist/src/analysis/parsers.js +219 -0
  114. package/dist/src/analysis/parsers.js.map +1 -0
  115. package/dist/src/analysis/router.d.ts +264 -0
  116. package/dist/src/analysis/router.d.ts.map +1 -0
  117. package/dist/src/analysis/router.js +398 -0
  118. package/dist/src/analysis/router.js.map +1 -0
  119. package/dist/src/analysis/tree-cache.d.ts +208 -0
  120. package/dist/src/analysis/tree-cache.d.ts.map +1 -0
  121. package/dist/src/analysis/tree-cache.js +288 -0
  122. package/dist/src/analysis/tree-cache.js.map +1 -0
  123. package/dist/src/analysis/tree-sitter/manager.d.ts +141 -0
  124. package/dist/src/analysis/tree-sitter/manager.d.ts.map +1 -0
  125. package/dist/src/analysis/tree-sitter/manager.js +239 -0
  126. package/dist/src/analysis/tree-sitter/manager.js.map +1 -0
  127. package/dist/src/analysis/types.d.ts +201 -0
  128. package/dist/src/analysis/types.d.ts.map +1 -0
  129. package/dist/src/analysis/types.js +46 -0
  130. package/dist/src/analysis/types.js.map +1 -0
  131. package/dist/src/analysis/worker-pool.d.ts +141 -0
  132. package/dist/src/analysis/worker-pool.d.ts.map +1 -0
  133. package/dist/src/analysis/worker-pool.js +418 -0
  134. package/dist/src/analysis/worker-pool.js.map +1 -0
  135. package/dist/src/analytics/AnalyticsRepository.d.ts.map +1 -1
  136. package/dist/src/analytics/AnalyticsRepository.js +4 -4
  137. package/dist/src/analytics/AnalyticsRepository.js.map +1 -1
  138. package/dist/src/analytics/schema.d.ts +1 -1
  139. package/dist/src/analytics/schema.d.ts.map +1 -1
  140. package/dist/src/analytics/schema.js +72 -0
  141. package/dist/src/analytics/schema.js.map +1 -1
  142. package/dist/src/api/cache.d.ts +131 -0
  143. package/dist/src/api/cache.d.ts.map +1 -0
  144. package/dist/src/api/cache.js +264 -0
  145. package/dist/src/api/cache.js.map +1 -0
  146. package/dist/src/api/client.d.ts +282 -0
  147. package/dist/src/api/client.d.ts.map +1 -0
  148. package/dist/src/api/client.js +417 -0
  149. package/dist/src/api/client.js.map +1 -0
  150. package/dist/src/api/index.d.ts +12 -0
  151. package/dist/src/api/index.d.ts.map +1 -0
  152. package/dist/src/api/index.js +17 -0
  153. package/dist/src/api/index.js.map +1 -0
  154. package/dist/src/api/types.d.ts +251 -0
  155. package/dist/src/api/types.d.ts.map +1 -0
  156. package/dist/src/api/types.js +9 -0
  157. package/dist/src/api/types.js.map +1 -0
  158. package/dist/src/benchmarks/BenchmarkRunner.d.ts +6 -175
  159. package/dist/src/benchmarks/BenchmarkRunner.d.ts.map +1 -1
  160. package/dist/src/benchmarks/BenchmarkRunner.js +6 -123
  161. package/dist/src/benchmarks/BenchmarkRunner.js.map +1 -1
  162. package/dist/src/benchmarks/MemoryProfiler.d.ts +4 -262
  163. package/dist/src/benchmarks/MemoryProfiler.d.ts.map +1 -1
  164. package/dist/src/benchmarks/MemoryProfiler.js +4 -400
  165. package/dist/src/benchmarks/MemoryProfiler.js.map +1 -1
  166. package/dist/src/benchmarks/comparator.d.ts +38 -0
  167. package/dist/src/benchmarks/comparator.d.ts.map +1 -0
  168. package/dist/src/benchmarks/comparator.js +81 -0
  169. package/dist/src/benchmarks/comparator.js.map +1 -0
  170. package/dist/src/benchmarks/formatters.d.ts +30 -0
  171. package/dist/src/benchmarks/formatters.d.ts.map +1 -0
  172. package/dist/src/benchmarks/formatters.js +88 -0
  173. package/dist/src/benchmarks/formatters.js.map +1 -0
  174. package/dist/src/benchmarks/index.d.ts +5 -1
  175. package/dist/src/benchmarks/index.d.ts.map +1 -1
  176. package/dist/src/benchmarks/index.js +9 -2
  177. package/dist/src/benchmarks/index.js.map +1 -1
  178. package/dist/src/benchmarks/memory/MemoryProfiler.d.ts +165 -0
  179. package/dist/src/benchmarks/memory/MemoryProfiler.d.ts.map +1 -0
  180. package/dist/src/benchmarks/memory/MemoryProfiler.js +312 -0
  181. package/dist/src/benchmarks/memory/MemoryProfiler.js.map +1 -0
  182. package/dist/src/benchmarks/memory/baseline-manager.d.ts +64 -0
  183. package/dist/src/benchmarks/memory/baseline-manager.d.ts.map +1 -0
  184. package/dist/src/benchmarks/memory/baseline-manager.js +95 -0
  185. package/dist/src/benchmarks/memory/baseline-manager.js.map +1 -0
  186. package/dist/src/benchmarks/memory/index.d.ts +12 -0
  187. package/dist/src/benchmarks/memory/index.d.ts.map +1 -0
  188. package/dist/src/benchmarks/memory/index.js +12 -0
  189. package/dist/src/benchmarks/memory/index.js.map +1 -0
  190. package/dist/src/benchmarks/memory/leak-detector.d.ts +23 -0
  191. package/dist/src/benchmarks/memory/leak-detector.d.ts.map +1 -0
  192. package/dist/src/benchmarks/memory/leak-detector.js +46 -0
  193. package/dist/src/benchmarks/memory/leak-detector.js.map +1 -0
  194. package/dist/src/benchmarks/memory/regression-detector.d.ts +17 -0
  195. package/dist/src/benchmarks/memory/regression-detector.d.ts.map +1 -0
  196. package/dist/src/benchmarks/memory/regression-detector.js +56 -0
  197. package/dist/src/benchmarks/memory/regression-detector.js.map +1 -0
  198. package/dist/src/benchmarks/memory/types.d.ts +111 -0
  199. package/dist/src/benchmarks/memory/types.d.ts.map +1 -0
  200. package/dist/src/benchmarks/memory/types.js +7 -0
  201. package/dist/src/benchmarks/memory/types.js.map +1 -0
  202. package/dist/src/benchmarks/memory/utils.d.ts +17 -0
  203. package/dist/src/benchmarks/memory/utils.d.ts.map +1 -0
  204. package/dist/src/benchmarks/memory/utils.js +29 -0
  205. package/dist/src/benchmarks/memory/utils.js.map +1 -0
  206. package/dist/src/benchmarks/types.d.ts +175 -0
  207. package/dist/src/benchmarks/types.d.ts.map +1 -0
  208. package/dist/src/benchmarks/types.js +20 -0
  209. package/dist/src/benchmarks/types.js.map +1 -0
  210. package/dist/src/embeddings/index.d.ts.map +1 -1
  211. package/dist/src/embeddings/index.js.map +1 -1
  212. package/dist/src/errors.d.ts +1 -0
  213. package/dist/src/errors.d.ts.map +1 -1
  214. package/dist/src/errors.js +1 -0
  215. package/dist/src/errors.js.map +1 -1
  216. package/dist/src/index.d.ts +5 -3
  217. package/dist/src/index.d.ts.map +1 -1
  218. package/dist/src/index.js +8 -4
  219. package/dist/src/index.js.map +1 -1
  220. package/dist/src/repositories/IndexerRepository.d.ts.map +1 -1
  221. package/dist/src/repositories/IndexerRepository.js +1 -0
  222. package/dist/src/repositories/IndexerRepository.js.map +1 -1
  223. package/dist/src/repositories/QuarantineRepository.d.ts +4 -251
  224. package/dist/src/repositories/QuarantineRepository.d.ts.map +1 -1
  225. package/dist/src/repositories/QuarantineRepository.js +4 -441
  226. package/dist/src/repositories/QuarantineRepository.js.map +1 -1
  227. package/dist/src/repositories/SkillRepository.d.ts.map +1 -1
  228. package/dist/src/repositories/SkillRepository.js +1 -0
  229. package/dist/src/repositories/SkillRepository.js.map +1 -1
  230. package/dist/src/repositories/quarantine/QuarantineRepository.d.ts +168 -0
  231. package/dist/src/repositories/quarantine/QuarantineRepository.d.ts.map +1 -0
  232. package/dist/src/repositories/quarantine/QuarantineRepository.js +341 -0
  233. package/dist/src/repositories/quarantine/QuarantineRepository.js.map +1 -0
  234. package/dist/src/repositories/quarantine/index.d.ts +10 -0
  235. package/dist/src/repositories/quarantine/index.d.ts.map +1 -0
  236. package/dist/src/repositories/quarantine/index.js +10 -0
  237. package/dist/src/repositories/quarantine/index.js.map +1 -0
  238. package/dist/src/repositories/quarantine/queries.d.ts +58 -0
  239. package/dist/src/repositories/quarantine/queries.d.ts.map +1 -0
  240. package/dist/src/repositories/quarantine/queries.js +88 -0
  241. package/dist/src/repositories/quarantine/queries.js.map +1 -0
  242. package/dist/src/repositories/quarantine/query-builder.d.ts +44 -0
  243. package/dist/src/repositories/quarantine/query-builder.d.ts.map +1 -0
  244. package/dist/src/repositories/quarantine/query-builder.js +87 -0
  245. package/dist/src/repositories/quarantine/query-builder.js.map +1 -0
  246. package/dist/src/repositories/quarantine/types.d.ts +155 -0
  247. package/dist/src/repositories/quarantine/types.d.ts.map +1 -0
  248. package/dist/src/repositories/quarantine/types.js +13 -0
  249. package/dist/src/repositories/quarantine/types.js.map +1 -0
  250. package/dist/src/scripts/__tests__/scan-imported-skills.test.d.ts +1 -0
  251. package/dist/src/scripts/__tests__/scan-imported-skills.test.d.ts.map +1 -1
  252. package/dist/src/scripts/__tests__/scan-imported-skills.test.js +7 -43
  253. package/dist/src/scripts/__tests__/scan-imported-skills.test.js.map +1 -1
  254. package/dist/src/scripts/github-import/checkpoint.d.ts +21 -0
  255. package/dist/src/scripts/github-import/checkpoint.d.ts.map +1 -0
  256. package/dist/src/scripts/github-import/checkpoint.js +52 -0
  257. package/dist/src/scripts/github-import/checkpoint.js.map +1 -0
  258. package/dist/src/scripts/github-import/deduplication.d.ts +15 -0
  259. package/dist/src/scripts/github-import/deduplication.d.ts.map +1 -0
  260. package/dist/src/scripts/github-import/deduplication.js +33 -0
  261. package/dist/src/scripts/github-import/deduplication.js.map +1 -0
  262. package/dist/src/scripts/github-import/github-client.d.ts +29 -0
  263. package/dist/src/scripts/github-import/github-client.d.ts.map +1 -0
  264. package/dist/src/scripts/github-import/github-client.js +184 -0
  265. package/dist/src/scripts/github-import/github-client.js.map +1 -0
  266. package/dist/src/scripts/github-import/index.d.ts +29 -0
  267. package/dist/src/scripts/github-import/index.d.ts.map +1 -0
  268. package/dist/src/scripts/github-import/index.js +198 -0
  269. package/dist/src/scripts/github-import/index.js.map +1 -0
  270. package/dist/src/scripts/github-import/output.d.ts +12 -0
  271. package/dist/src/scripts/github-import/output.d.ts.map +1 -0
  272. package/dist/src/scripts/github-import/output.js +34 -0
  273. package/dist/src/scripts/github-import/output.js.map +1 -0
  274. package/dist/src/scripts/github-import/types.d.ts +108 -0
  275. package/dist/src/scripts/github-import/types.d.ts.map +1 -0
  276. package/dist/src/scripts/github-import/types.js +44 -0
  277. package/dist/src/scripts/github-import/types.js.map +1 -0
  278. package/dist/src/scripts/github-import/utils.d.ts +13 -0
  279. package/dist/src/scripts/github-import/utils.d.ts.map +1 -0
  280. package/dist/src/scripts/github-import/utils.js +28 -0
  281. package/dist/src/scripts/github-import/utils.js.map +1 -0
  282. package/dist/src/scripts/import-github-skills.d.ts +3 -12
  283. package/dist/src/scripts/import-github-skills.d.ts.map +1 -1
  284. package/dist/src/scripts/import-github-skills.js +18 -398
  285. package/dist/src/scripts/import-github-skills.js.map +1 -1
  286. package/dist/src/scripts/scan-imported-skills.d.ts +7 -7
  287. package/dist/src/scripts/scan-imported-skills.d.ts.map +1 -1
  288. package/dist/src/scripts/scan-imported-skills.js +8 -397
  289. package/dist/src/scripts/scan-imported-skills.js.map +1 -1
  290. package/dist/src/scripts/skill-scanner/categorizer.d.ts +43 -0
  291. package/dist/src/scripts/skill-scanner/categorizer.d.ts.map +1 -0
  292. package/dist/src/scripts/skill-scanner/categorizer.js +61 -0
  293. package/dist/src/scripts/skill-scanner/categorizer.js.map +1 -0
  294. package/dist/src/scripts/skill-scanner/file-scanner.d.ts +43 -0
  295. package/dist/src/scripts/skill-scanner/file-scanner.d.ts.map +1 -0
  296. package/dist/src/scripts/skill-scanner/file-scanner.js +90 -0
  297. package/dist/src/scripts/skill-scanner/file-scanner.js.map +1 -0
  298. package/dist/src/scripts/skill-scanner/index.d.ts +22 -0
  299. package/dist/src/scripts/skill-scanner/index.d.ts.map +1 -0
  300. package/dist/src/scripts/skill-scanner/index.js +43 -0
  301. package/dist/src/scripts/skill-scanner/index.js.map +1 -0
  302. package/dist/src/scripts/skill-scanner/logger.d.ts +59 -0
  303. package/dist/src/scripts/skill-scanner/logger.d.ts.map +1 -0
  304. package/dist/src/scripts/skill-scanner/logger.js +104 -0
  305. package/dist/src/scripts/skill-scanner/logger.js.map +1 -0
  306. package/dist/src/scripts/skill-scanner/reporter.d.ts +56 -0
  307. package/dist/src/scripts/skill-scanner/reporter.d.ts.map +1 -0
  308. package/dist/src/scripts/skill-scanner/reporter.js +166 -0
  309. package/dist/src/scripts/skill-scanner/reporter.js.map +1 -0
  310. package/dist/src/scripts/skill-scanner/scanner.d.ts +44 -0
  311. package/dist/src/scripts/skill-scanner/scanner.d.ts.map +1 -0
  312. package/dist/src/scripts/skill-scanner/scanner.js +140 -0
  313. package/dist/src/scripts/skill-scanner/scanner.js.map +1 -0
  314. package/dist/src/scripts/skill-scanner/trust-scorer.d.ts +59 -0
  315. package/dist/src/scripts/skill-scanner/trust-scorer.d.ts.map +1 -0
  316. package/dist/src/scripts/skill-scanner/trust-scorer.js +62 -0
  317. package/dist/src/scripts/skill-scanner/trust-scorer.js.map +1 -0
  318. package/dist/src/scripts/skill-scanner/types.d.ts +98 -0
  319. package/dist/src/scripts/skill-scanner/types.d.ts.map +1 -0
  320. package/dist/src/scripts/skill-scanner/types.js +7 -0
  321. package/dist/src/scripts/skill-scanner/types.js.map +1 -0
  322. package/dist/src/scripts/validate-skills.d.ts +3 -172
  323. package/dist/src/scripts/validate-skills.d.ts.map +1 -1
  324. package/dist/src/scripts/validate-skills.js +6 -519
  325. package/dist/src/scripts/validate-skills.js.map +1 -1
  326. package/dist/src/scripts/validation/deduplication.d.ts +23 -0
  327. package/dist/src/scripts/validation/deduplication.d.ts.map +1 -0
  328. package/dist/src/scripts/validation/deduplication.js +127 -0
  329. package/dist/src/scripts/validation/deduplication.js.map +1 -0
  330. package/dist/src/scripts/validation/field-validators.d.ts +9 -0
  331. package/dist/src/scripts/validation/field-validators.d.ts.map +1 -0
  332. package/dist/src/scripts/validation/field-validators.js +135 -0
  333. package/dist/src/scripts/validation/field-validators.js.map +1 -0
  334. package/dist/src/scripts/validation/index.d.ts +29 -0
  335. package/dist/src/scripts/validation/index.d.ts.map +1 -0
  336. package/dist/src/scripts/validation/index.js +83 -0
  337. package/dist/src/scripts/validation/index.js.map +1 -0
  338. package/dist/src/scripts/validation/normalizers.d.ts +29 -0
  339. package/dist/src/scripts/validation/normalizers.d.ts.map +1 -0
  340. package/dist/src/scripts/validation/normalizers.js +79 -0
  341. package/dist/src/scripts/validation/normalizers.js.map +1 -0
  342. package/dist/src/scripts/validation/pipeline.d.ts +13 -0
  343. package/dist/src/scripts/validation/pipeline.d.ts.map +1 -0
  344. package/dist/src/scripts/validation/pipeline.js +126 -0
  345. package/dist/src/scripts/validation/pipeline.js.map +1 -0
  346. package/dist/src/scripts/validation/types.d.ts +128 -0
  347. package/dist/src/scripts/validation/types.d.ts.map +1 -0
  348. package/dist/src/scripts/validation/types.js +43 -0
  349. package/dist/src/scripts/validation/types.js.map +1 -0
  350. package/dist/src/security/index.d.ts +5 -4
  351. package/dist/src/security/index.d.ts.map +1 -1
  352. package/dist/src/security/index.js +8 -2
  353. package/dist/src/security/index.js.map +1 -1
  354. package/dist/src/security/rate-limiter/RateLimiter.d.ts +86 -0
  355. package/dist/src/security/rate-limiter/RateLimiter.d.ts.map +1 -0
  356. package/dist/src/security/rate-limiter/RateLimiter.js +260 -0
  357. package/dist/src/security/rate-limiter/RateLimiter.js.map +1 -0
  358. package/dist/src/security/rate-limiter/constants.d.ts +15 -0
  359. package/dist/src/security/rate-limiter/constants.d.ts.map +1 -0
  360. package/dist/src/security/rate-limiter/constants.js +15 -0
  361. package/dist/src/security/rate-limiter/constants.js.map +1 -0
  362. package/dist/src/security/rate-limiter/errors.d.ts +22 -0
  363. package/dist/src/security/rate-limiter/errors.d.ts.map +1 -0
  364. package/dist/src/security/rate-limiter/errors.js +32 -0
  365. package/dist/src/security/rate-limiter/errors.js.map +1 -0
  366. package/dist/src/security/rate-limiter/index.d.ts +12 -0
  367. package/dist/src/security/rate-limiter/index.d.ts.map +1 -0
  368. package/dist/src/security/rate-limiter/index.js +16 -0
  369. package/dist/src/security/rate-limiter/index.js.map +1 -0
  370. package/dist/src/security/rate-limiter/metrics-manager.d.ts +55 -0
  371. package/dist/src/security/rate-limiter/metrics-manager.d.ts.map +1 -0
  372. package/dist/src/security/rate-limiter/metrics-manager.js +144 -0
  373. package/dist/src/security/rate-limiter/metrics-manager.js.map +1 -0
  374. package/dist/src/security/rate-limiter/presets.d.ts +52 -0
  375. package/dist/src/security/rate-limiter/presets.d.ts.map +1 -0
  376. package/dist/src/security/rate-limiter/presets.js +53 -0
  377. package/dist/src/security/rate-limiter/presets.js.map +1 -0
  378. package/dist/src/security/rate-limiter/queue-manager.d.ts +59 -0
  379. package/dist/src/security/rate-limiter/queue-manager.d.ts.map +1 -0
  380. package/dist/src/security/rate-limiter/queue-manager.js +189 -0
  381. package/dist/src/security/rate-limiter/queue-manager.js.map +1 -0
  382. package/dist/src/security/rate-limiter/storage.d.ts +34 -0
  383. package/dist/src/security/rate-limiter/storage.d.ts.map +1 -0
  384. package/dist/src/security/rate-limiter/storage.js +80 -0
  385. package/dist/src/security/rate-limiter/storage.js.map +1 -0
  386. package/dist/src/security/rate-limiter/token-bucket.d.ts +44 -0
  387. package/dist/src/security/rate-limiter/token-bucket.d.ts.map +1 -0
  388. package/dist/src/security/rate-limiter/token-bucket.js +99 -0
  389. package/dist/src/security/rate-limiter/token-bucket.js.map +1 -0
  390. package/dist/src/security/rate-limiter/types.d.ts +104 -0
  391. package/dist/src/security/rate-limiter/types.d.ts.map +1 -0
  392. package/dist/src/security/rate-limiter/types.js +7 -0
  393. package/dist/src/security/rate-limiter/types.js.map +1 -0
  394. package/dist/src/security/{scanner.d.ts → scanner/SecurityScanner.d.ts} +5 -62
  395. package/dist/src/security/scanner/SecurityScanner.d.ts.map +1 -0
  396. package/dist/src/security/{scanner.js → scanner/SecurityScanner.js} +6 -202
  397. package/dist/src/security/scanner/SecurityScanner.js.map +1 -0
  398. package/dist/src/security/scanner/index.d.ts +11 -0
  399. package/dist/src/security/scanner/index.d.ts.map +1 -0
  400. package/dist/src/security/scanner/index.js +14 -0
  401. package/dist/src/security/scanner/index.js.map +1 -0
  402. package/dist/src/security/scanner/patterns.d.ts +14 -0
  403. package/dist/src/security/scanner/patterns.d.ts.map +1 -0
  404. package/dist/src/security/scanner/patterns.js +147 -0
  405. package/dist/src/security/scanner/patterns.js.map +1 -0
  406. package/dist/src/security/scanner/regex-utils.d.ts +33 -0
  407. package/dist/src/security/scanner/regex-utils.d.ts.map +1 -0
  408. package/dist/src/security/scanner/regex-utils.js +41 -0
  409. package/dist/src/security/scanner/regex-utils.js.map +1 -0
  410. package/dist/src/security/scanner/types.d.ts +63 -0
  411. package/dist/src/security/scanner/types.d.ts.map +1 -0
  412. package/dist/src/security/scanner/types.js +7 -0
  413. package/dist/src/security/scanner/types.js.map +1 -0
  414. package/dist/src/security/scanner/weights.d.ts +15 -0
  415. package/dist/src/security/scanner/weights.d.ts.map +1 -0
  416. package/dist/src/security/scanner/weights.js +28 -0
  417. package/dist/src/security/scanner/weights.js.map +1 -0
  418. package/dist/src/services/SearchService.d.ts.map +1 -1
  419. package/dist/src/services/SearchService.js +1 -0
  420. package/dist/src/services/SearchService.js.map +1 -1
  421. package/dist/src/session/SessionHealthMonitor.d.ts +5 -168
  422. package/dist/src/session/SessionHealthMonitor.d.ts.map +1 -1
  423. package/dist/src/session/SessionHealthMonitor.js +22 -91
  424. package/dist/src/session/SessionHealthMonitor.js.map +1 -1
  425. package/dist/src/session/health-checks.d.ts +37 -0
  426. package/dist/src/session/health-checks.d.ts.map +1 -0
  427. package/dist/src/session/health-checks.js +64 -0
  428. package/dist/src/session/health-checks.js.map +1 -0
  429. package/dist/src/session/health-types.d.ts +78 -0
  430. package/dist/src/session/health-types.d.ts.map +1 -0
  431. package/dist/src/session/health-types.js +16 -0
  432. package/dist/src/session/health-types.js.map +1 -0
  433. package/dist/src/session/index.d.ts +5 -1
  434. package/dist/src/session/index.d.ts.map +1 -1
  435. package/dist/src/session/index.js +9 -0
  436. package/dist/src/session/index.js.map +1 -1
  437. package/dist/src/session/metrics-collector.d.ts +23 -0
  438. package/dist/src/session/metrics-collector.d.ts.map +1 -0
  439. package/dist/src/session/metrics-collector.js +44 -0
  440. package/dist/src/session/metrics-collector.js.map +1 -0
  441. package/dist/src/session/typed-event-emitter.d.ts +70 -0
  442. package/dist/src/session/typed-event-emitter.d.ts.map +1 -0
  443. package/dist/src/session/typed-event-emitter.js +79 -0
  444. package/dist/src/session/typed-event-emitter.js.map +1 -0
  445. package/dist/src/sources/BaseSourceAdapter.d.ts +1 -1
  446. package/dist/src/sources/BaseSourceAdapter.d.ts.map +1 -1
  447. package/dist/src/sources/BaseSourceAdapter.js +2 -2
  448. package/dist/src/sources/BaseSourceAdapter.js.map +1 -1
  449. package/dist/src/telemetry/index.d.ts +1 -0
  450. package/dist/src/telemetry/index.d.ts.map +1 -1
  451. package/dist/src/telemetry/index.js +2 -0
  452. package/dist/src/telemetry/index.js.map +1 -1
  453. package/dist/src/telemetry/posthog.d.ts +147 -0
  454. package/dist/src/telemetry/posthog.d.ts.map +1 -0
  455. package/dist/src/telemetry/posthog.js +213 -0
  456. package/dist/src/telemetry/posthog.js.map +1 -0
  457. package/dist/src/types/skill.d.ts +3 -0
  458. package/dist/src/types/skill.d.ts.map +1 -1
  459. package/dist/src/types.d.ts +2 -1
  460. package/dist/src/types.d.ts.map +1 -1
  461. package/dist/src/types.js +2 -2
  462. package/dist/src/types.js.map +1 -1
  463. package/dist/tests/RateLimiter.test.js +4 -4
  464. package/dist/tests/RateLimiter.test.js.map +1 -1
  465. package/dist/tests/adapters-factory.test.d.ts +13 -0
  466. package/dist/tests/adapters-factory.test.d.ts.map +1 -0
  467. package/dist/tests/adapters-factory.test.js +308 -0
  468. package/dist/tests/adapters-factory.test.js.map +1 -0
  469. package/dist/tests/adapters-java.test.d.ts +13 -0
  470. package/dist/tests/adapters-java.test.d.ts.map +1 -0
  471. package/dist/tests/adapters-java.test.js +925 -0
  472. package/dist/tests/adapters-java.test.js.map +1 -0
  473. package/dist/tests/api/client.validation.test.d.ts +7 -0
  474. package/dist/tests/api/client.validation.test.d.ts.map +1 -0
  475. package/dist/tests/api/client.validation.test.js +183 -0
  476. package/dist/tests/api/client.validation.test.js.map +1 -0
  477. package/dist/tests/e2e/security/security.e2e.test.js +3 -3
  478. package/dist/tests/e2e/security/security.e2e.test.js.map +1 -1
  479. package/dist/tests/language-detector.test.d.ts +13 -0
  480. package/dist/tests/language-detector.test.d.ts.map +1 -0
  481. package/dist/tests/language-detector.test.js +674 -0
  482. package/dist/tests/language-detector.test.js.map +1 -0
  483. package/dist/tests/telemetry/posthog.test.d.ts +13 -0
  484. package/dist/tests/telemetry/posthog.test.d.ts.map +1 -0
  485. package/dist/tests/telemetry/posthog.test.js +600 -0
  486. package/dist/tests/telemetry/posthog.test.js.map +1 -0
  487. package/package.json +5 -5
  488. package/dist/src/security/RateLimiter.d.ts +0 -337
  489. package/dist/src/security/RateLimiter.d.ts.map +0 -1
  490. package/dist/src/security/RateLimiter.js +0 -782
  491. package/dist/src/security/RateLimiter.js.map +0 -1
  492. package/dist/src/security/scanner.d.ts.map +0 -1
  493. package/dist/src/security/scanner.js.map +0 -1
@@ -0,0 +1,291 @@
1
+ /**
2
+ * SMI-1308: File Streamer
3
+ *
4
+ * Memory-efficient file reading with streaming support for large files.
5
+ * Provides generators for processing files without loading all into memory.
6
+ *
7
+ * @see docs/architecture/multi-language-analysis.md
8
+ * @module analysis/file-streamer
9
+ */
10
+ import fs from 'fs/promises';
11
+ import { createReadStream } from 'fs';
12
+ /**
13
+ * Stream files with memory-efficient chunking
14
+ *
15
+ * Uses async generators to process files one at a time,
16
+ * avoiding loading all file contents into memory.
17
+ *
18
+ * @param filePaths - Array of file paths to stream
19
+ * @param options - Streaming options
20
+ * @yields FileContent objects
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * for await (const file of streamFiles(paths, { maxBufferSize: 512 * 1024 })) {
25
+ * console.log(`${file.path}: ${file.lineCount} lines`)
26
+ * // Process file.content...
27
+ * }
28
+ * ```
29
+ */
30
+ export async function* streamFiles(filePaths, options = {}) {
31
+ const { maxBufferSize = 1024 * 1024, skipLargeFiles = true, includeBinary = false } = options;
32
+ for (const filePath of filePaths) {
33
+ try {
34
+ const stat = await fs.stat(filePath);
35
+ // Skip directories
36
+ if (stat.isDirectory()) {
37
+ continue;
38
+ }
39
+ // Handle large files
40
+ if (stat.size > maxBufferSize) {
41
+ if (skipLargeFiles) {
42
+ // Skip files larger than buffer (likely generated/minified)
43
+ continue;
44
+ }
45
+ // Stream large files (read only first chunk)
46
+ yield* streamLargeFile(filePath, maxBufferSize);
47
+ continue;
48
+ }
49
+ // Read small files directly
50
+ const content = await fs.readFile(filePath, 'utf-8');
51
+ // Skip binary files unless requested
52
+ if (!includeBinary && isBinaryContent(content)) {
53
+ continue;
54
+ }
55
+ yield {
56
+ path: filePath,
57
+ content,
58
+ size: stat.size,
59
+ lineCount: countLines(content),
60
+ };
61
+ }
62
+ catch {
63
+ // Skip files that can't be read (permissions, symlinks, etc.)
64
+ continue;
65
+ }
66
+ }
67
+ }
68
+ /**
69
+ * Stream a large file in chunks
70
+ *
71
+ * Reads only the first chunk of the file for analysis.
72
+ * Large files are often generated or minified, so we only
73
+ * need the beginning for pattern detection.
74
+ *
75
+ * @param filePath - Path to the large file
76
+ * @param maxBufferSize - Maximum bytes to read
77
+ * @yields Single FileContent with truncated content
78
+ */
79
+ async function* streamLargeFile(filePath, maxBufferSize) {
80
+ const content = await new Promise((resolve, reject) => {
81
+ const chunks = [];
82
+ let totalSize = 0;
83
+ const stream = createReadStream(filePath, {
84
+ highWaterMark: Math.min(maxBufferSize, 64 * 1024), // 64KB chunks
85
+ });
86
+ stream.on('data', (chunk) => {
87
+ const buffer = typeof chunk === 'string' ? Buffer.from(chunk) : chunk;
88
+ if (totalSize < maxBufferSize) {
89
+ chunks.push(buffer);
90
+ totalSize += buffer.length;
91
+ }
92
+ if (totalSize >= maxBufferSize) {
93
+ stream.destroy();
94
+ }
95
+ });
96
+ stream.on('end', () => {
97
+ resolve(Buffer.concat(chunks).toString('utf-8'));
98
+ });
99
+ stream.on('error', reject);
100
+ stream.on('close', () => {
101
+ resolve(Buffer.concat(chunks).toString('utf-8'));
102
+ });
103
+ });
104
+ const stat = await fs.stat(filePath);
105
+ const actualSize = Math.min(stat.size, maxBufferSize);
106
+ yield {
107
+ path: filePath,
108
+ content,
109
+ size: actualSize,
110
+ lineCount: countLines(content),
111
+ truncated: stat.size > maxBufferSize,
112
+ };
113
+ }
114
+ /**
115
+ * Batch file reading with concurrency control
116
+ *
117
+ * Reads multiple files concurrently with a configurable limit
118
+ * to balance speed and memory usage.
119
+ *
120
+ * @param filePaths - Array of file paths to read
121
+ * @param options - Batch reading options
122
+ * @returns Array of file contents
123
+ *
124
+ * @example
125
+ * ```typescript
126
+ * const files = await batchReadFiles(paths, {
127
+ * concurrency: 20,
128
+ * maxFileSize: 512 * 1024
129
+ * })
130
+ *
131
+ * console.log(`Read ${files.length} files`)
132
+ * ```
133
+ */
134
+ export async function batchReadFiles(filePaths, options = {}) {
135
+ const { concurrency = 10, maxFileSize = 1024 * 1024, skipErrors = true } = options;
136
+ const results = [];
137
+ // Process in batches
138
+ for (let i = 0; i < filePaths.length; i += concurrency) {
139
+ const batch = filePaths.slice(i, i + concurrency);
140
+ const batchResults = await Promise.all(batch.map(async (filePath) => {
141
+ try {
142
+ const stat = await fs.stat(filePath);
143
+ // Skip directories and large files
144
+ if (stat.isDirectory() || stat.size > maxFileSize) {
145
+ return null;
146
+ }
147
+ const content = await fs.readFile(filePath, 'utf-8');
148
+ // Skip binary content
149
+ if (isBinaryContent(content)) {
150
+ return null;
151
+ }
152
+ return {
153
+ path: filePath,
154
+ content,
155
+ size: stat.size,
156
+ lineCount: countLines(content),
157
+ };
158
+ }
159
+ catch (error) {
160
+ if (skipErrors) {
161
+ return null;
162
+ }
163
+ throw error;
164
+ }
165
+ }));
166
+ for (const result of batchResults) {
167
+ if (result) {
168
+ results.push(result);
169
+ }
170
+ }
171
+ }
172
+ return results;
173
+ }
174
+ /**
175
+ * Read files as a map for quick lookup
176
+ *
177
+ * @param filePaths - Array of file paths to read
178
+ * @param options - Batch reading options
179
+ * @returns Map of path to file content
180
+ *
181
+ * @example
182
+ * ```typescript
183
+ * const fileMap = await readFilesAsMap(paths)
184
+ * const content = fileMap.get('src/index.ts')
185
+ * ```
186
+ */
187
+ export async function readFilesAsMap(filePaths, options = {}) {
188
+ const files = await batchReadFiles(filePaths, options);
189
+ const map = new Map();
190
+ for (const file of files) {
191
+ map.set(file.path, file);
192
+ }
193
+ return map;
194
+ }
195
+ /**
196
+ * Count lines in content
197
+ *
198
+ * @param content - File content
199
+ * @returns Number of lines
200
+ */
201
+ function countLines(content) {
202
+ if (!content)
203
+ return 0;
204
+ let count = 1;
205
+ for (let i = 0; i < content.length; i++) {
206
+ if (content[i] === '\n') {
207
+ count++;
208
+ }
209
+ }
210
+ return count;
211
+ }
212
+ /**
213
+ * Check if content appears to be binary
214
+ *
215
+ * Detects binary content by looking for null bytes
216
+ * in the first 8KB of the file.
217
+ *
218
+ * @param content - Content to check
219
+ * @returns True if content appears binary
220
+ */
221
+ function isBinaryContent(content) {
222
+ // Check first 8KB for null bytes
223
+ const checkLength = Math.min(content.length, 8192);
224
+ for (let i = 0; i < checkLength; i++) {
225
+ if (content.charCodeAt(i) === 0) {
226
+ return true;
227
+ }
228
+ }
229
+ return false;
230
+ }
231
+ /**
232
+ * Get file extension
233
+ *
234
+ * @param filePath - File path
235
+ * @returns Extension including dot, or empty string
236
+ */
237
+ export function getFileExtension(filePath) {
238
+ const lastDot = filePath.lastIndexOf('.');
239
+ const lastSep = Math.max(filePath.lastIndexOf('/'), filePath.lastIndexOf('\\'));
240
+ if (lastDot > lastSep && lastDot > 0) {
241
+ return filePath.slice(lastDot).toLowerCase();
242
+ }
243
+ return '';
244
+ }
245
+ /**
246
+ * Filter paths by extension
247
+ *
248
+ * @param filePaths - Array of file paths
249
+ * @param extensions - Extensions to include (with dot)
250
+ * @returns Filtered paths
251
+ *
252
+ * @example
253
+ * ```typescript
254
+ * const tsPaths = filterByExtension(allPaths, ['.ts', '.tsx'])
255
+ * ```
256
+ */
257
+ export function filterByExtension(filePaths, extensions) {
258
+ const extSet = new Set(extensions.map((e) => e.toLowerCase()));
259
+ return filePaths.filter((p) => extSet.has(getFileExtension(p)));
260
+ }
261
+ /**
262
+ * Estimate memory usage for files
263
+ *
264
+ * Provides rough estimate based on file sizes.
265
+ *
266
+ * @param filePaths - Array of file paths
267
+ * @returns Estimated memory usage in bytes
268
+ *
269
+ * @example
270
+ * ```typescript
271
+ * const estimate = await estimateMemoryUsage(paths)
272
+ * console.log(`Estimated: ${MemoryMonitor.formatBytes(estimate)}`)
273
+ * ```
274
+ */
275
+ export async function estimateMemoryUsage(filePaths) {
276
+ let total = 0;
277
+ for (const filePath of filePaths) {
278
+ try {
279
+ const stat = await fs.stat(filePath);
280
+ if (stat.isFile()) {
281
+ // Rough estimate: content + metadata overhead
282
+ total += stat.size + 200;
283
+ }
284
+ }
285
+ catch {
286
+ // Skip files that can't be stat'd
287
+ }
288
+ }
289
+ return total;
290
+ }
291
+ //# sourceMappingURL=file-streamer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-streamer.js","sourceRoot":"","sources":["../../../src/analysis/file-streamer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * SMI-600: Framework Detection
3
+ * SMI-1189: Extracted from CodebaseAnalyzer.ts
4
+ *
5
+ * Detects frameworks and libraries used in a codebase
6
+ * based on imports and dependencies.
7
+ */
8
+ import type { ImportInfo, DependencyInfo, FrameworkInfo } from './types.js';
9
+ /**
10
+ * Framework detection rule
11
+ */
12
+ export interface FrameworkRule {
13
+ name: string;
14
+ depIndicators: string[];
15
+ importIndicators: string[];
16
+ }
17
+ /**
18
+ * Built-in framework detection rules
19
+ */
20
+ export declare const FRAMEWORK_RULES: FrameworkRule[];
21
+ /**
22
+ * Detect frameworks based on imports and dependencies
23
+ *
24
+ * @param imports - All imports found in the codebase
25
+ * @param dependencies - Dependencies from package.json
26
+ * @param rules - Optional custom framework rules (defaults to FRAMEWORK_RULES)
27
+ * @returns Array of detected frameworks sorted by confidence
28
+ */
29
+ export declare function detectFrameworks(imports: ImportInfo[], dependencies: DependencyInfo[], rules?: FrameworkRule[]): FrameworkInfo[];
30
+ /**
31
+ * Check if a specific framework is detected
32
+ *
33
+ * @param frameworkName - Name of the framework to check
34
+ * @param imports - All imports found in the codebase
35
+ * @param dependencies - Dependencies from package.json
36
+ * @returns True if the framework is detected
37
+ */
38
+ export declare function hasFramework(frameworkName: string, imports: ImportInfo[], dependencies: DependencyInfo[]): boolean;
39
+ /**
40
+ * Get the primary framework (highest confidence)
41
+ *
42
+ * @param imports - All imports found in the codebase
43
+ * @param dependencies - Dependencies from package.json
44
+ * @returns The primary framework or null if none detected
45
+ */
46
+ export declare function getPrimaryFramework(imports: ImportInfo[], dependencies: DependencyInfo[]): FrameworkInfo | null;
47
+ //# sourceMappingURL=framework-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"framework-detector.d.ts","sourceRoot":"","sources":["../../../src/analysis/framework-detector.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE3E;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,gBAAgB,EAAE,MAAM,EAAE,CAAA;CAC3B;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,aAAa,EA4E1C,CAAA;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,UAAU,EAAE,EACrB,YAAY,EAAE,cAAc,EAAE,EAC9B,KAAK,GAAE,aAAa,EAAoB,GACvC,aAAa,EAAE,CAqCjB;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,UAAU,EAAE,EACrB,YAAY,EAAE,cAAc,EAAE,GAC7B,OAAO,CAGT;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,UAAU,EAAE,EACrB,YAAY,EAAE,cAAc,EAAE,GAC7B,aAAa,GAAG,IAAI,CAGtB"}
@@ -0,0 +1,151 @@
1
+ /**
2
+ * SMI-600: Framework Detection
3
+ * SMI-1189: Extracted from CodebaseAnalyzer.ts
4
+ *
5
+ * Detects frameworks and libraries used in a codebase
6
+ * based on imports and dependencies.
7
+ */
8
+ /**
9
+ * Built-in framework detection rules
10
+ */
11
+ export const FRAMEWORK_RULES = [
12
+ {
13
+ name: 'React',
14
+ depIndicators: ['react', 'react-dom'],
15
+ importIndicators: ['react', 'react-dom'],
16
+ },
17
+ {
18
+ name: 'Next.js',
19
+ depIndicators: ['next'],
20
+ importIndicators: ['next', 'next/router', 'next/link', 'next/image'],
21
+ },
22
+ {
23
+ name: 'Vue',
24
+ depIndicators: ['vue'],
25
+ importIndicators: ['vue'],
26
+ },
27
+ {
28
+ name: 'Nuxt',
29
+ depIndicators: ['nuxt'],
30
+ importIndicators: ['nuxt', '#app', '#imports'],
31
+ },
32
+ {
33
+ name: 'Angular',
34
+ depIndicators: ['@angular/core'],
35
+ importIndicators: ['@angular/core', '@angular/common'],
36
+ },
37
+ {
38
+ name: 'Express',
39
+ depIndicators: ['express'],
40
+ importIndicators: ['express'],
41
+ },
42
+ {
43
+ name: 'Fastify',
44
+ depIndicators: ['fastify'],
45
+ importIndicators: ['fastify'],
46
+ },
47
+ {
48
+ name: 'NestJS',
49
+ depIndicators: ['@nestjs/core'],
50
+ importIndicators: ['@nestjs/core', '@nestjs/common'],
51
+ },
52
+ {
53
+ name: 'Jest',
54
+ depIndicators: ['jest'],
55
+ importIndicators: ['@jest/globals', 'jest'],
56
+ },
57
+ {
58
+ name: 'Vitest',
59
+ depIndicators: ['vitest'],
60
+ importIndicators: ['vitest'],
61
+ },
62
+ {
63
+ name: 'Playwright',
64
+ depIndicators: ['@playwright/test', 'playwright'],
65
+ importIndicators: ['@playwright/test', 'playwright'],
66
+ },
67
+ {
68
+ name: 'Prisma',
69
+ depIndicators: ['@prisma/client', 'prisma'],
70
+ importIndicators: ['@prisma/client'],
71
+ },
72
+ {
73
+ name: 'TypeORM',
74
+ depIndicators: ['typeorm'],
75
+ importIndicators: ['typeorm'],
76
+ },
77
+ {
78
+ name: 'Tailwind CSS',
79
+ depIndicators: ['tailwindcss'],
80
+ importIndicators: [],
81
+ },
82
+ {
83
+ name: 'Electron',
84
+ depIndicators: ['electron'],
85
+ importIndicators: ['electron'],
86
+ },
87
+ ];
88
+ /**
89
+ * Detect frameworks based on imports and dependencies
90
+ *
91
+ * @param imports - All imports found in the codebase
92
+ * @param dependencies - Dependencies from package.json
93
+ * @param rules - Optional custom framework rules (defaults to FRAMEWORK_RULES)
94
+ * @returns Array of detected frameworks sorted by confidence
95
+ */
96
+ export function detectFrameworks(imports, dependencies, rules = FRAMEWORK_RULES) {
97
+ const frameworks = [];
98
+ const depNames = new Set(dependencies.map((d) => d.name));
99
+ const importModules = new Set(imports.map((i) => i.module));
100
+ for (const rule of rules) {
101
+ const evidence = [];
102
+ // Check dependencies
103
+ for (const dep of rule.depIndicators) {
104
+ if (depNames.has(dep)) {
105
+ evidence.push(`Dependency: ${dep}`);
106
+ }
107
+ }
108
+ // Check imports
109
+ for (const imp of rule.importIndicators) {
110
+ if (importModules.has(imp)) {
111
+ evidence.push(`Import: ${imp}`);
112
+ }
113
+ }
114
+ if (evidence.length > 0) {
115
+ // Calculate confidence based on evidence
116
+ const confidence = Math.min(1, evidence.length * 0.4);
117
+ frameworks.push({
118
+ name: rule.name,
119
+ confidence,
120
+ evidence,
121
+ });
122
+ }
123
+ }
124
+ // Sort by confidence
125
+ frameworks.sort((a, b) => b.confidence - a.confidence);
126
+ return frameworks;
127
+ }
128
+ /**
129
+ * Check if a specific framework is detected
130
+ *
131
+ * @param frameworkName - Name of the framework to check
132
+ * @param imports - All imports found in the codebase
133
+ * @param dependencies - Dependencies from package.json
134
+ * @returns True if the framework is detected
135
+ */
136
+ export function hasFramework(frameworkName, imports, dependencies) {
137
+ const frameworks = detectFrameworks(imports, dependencies);
138
+ return frameworks.some((f) => f.name.toLowerCase() === frameworkName.toLowerCase());
139
+ }
140
+ /**
141
+ * Get the primary framework (highest confidence)
142
+ *
143
+ * @param imports - All imports found in the codebase
144
+ * @param dependencies - Dependencies from package.json
145
+ * @returns The primary framework or null if none detected
146
+ */
147
+ export function getPrimaryFramework(imports, dependencies) {
148
+ const frameworks = detectFrameworks(imports, dependencies);
149
+ return frameworks.length > 0 ? frameworks[0] : null;
150
+ }
151
+ //# sourceMappingURL=framework-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"framework-detector.js","sourceRoot":"","sources":["../../../src/analysis/framework-detector.ts"],"names":[],"mappings":"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"}