@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,398 @@
1
+ /**
2
+ * SMI-1303: Language Router
3
+ * SMI-1337: Added metrics integration
4
+ * SMI-1339: Added factory pattern integration
5
+ * SMI-1340: Added language detection for extensionless files
6
+ *
7
+ * Detects file language and dispatches to appropriate adapter.
8
+ * Manages adapter registry and provides unified access to framework rules.
9
+ *
10
+ * @see docs/architecture/multi-language-analysis.md
11
+ * @module analysis/router
12
+ */
13
+ import path from 'path';
14
+ import { AdapterFactory } from './adapters/factory.js';
15
+ import { getAnalysisMetrics } from './metrics.js';
16
+ import { LanguageDetector } from './language-detector.js';
17
+ /**
18
+ * Routes files to appropriate language adapters
19
+ *
20
+ * Manages a registry of language adapters and provides:
21
+ * - File extension to adapter mapping
22
+ * - Aggregated framework detection rules
23
+ * - Unified parsing interface
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * const router = new LanguageRouter()
28
+ *
29
+ * // Register adapters
30
+ * router.registerAdapter(new TypeScriptAdapter())
31
+ * router.registerAdapter(new PythonAdapter())
32
+ *
33
+ * // Route files to appropriate adapter
34
+ * const adapter = router.getAdapter('src/main.py')
35
+ * const result = adapter.parseFile(content, 'src/main.py')
36
+ * ```
37
+ */
38
+ export class LanguageRouter {
39
+ adapters = new Map();
40
+ extensionMap = new Map();
41
+ throwOnUnsupported;
42
+ metrics;
43
+ languageDetector;
44
+ enableLanguageDetection;
45
+ constructor(options = {}) {
46
+ this.throwOnUnsupported = options.throwOnUnsupported ?? false;
47
+ this.metrics = options.metrics ?? getAnalysisMetrics();
48
+ this.enableLanguageDetection = options.enableLanguageDetection ?? true;
49
+ // Initialize language detector if enabled
50
+ if (this.enableLanguageDetection) {
51
+ this.languageDetector = new LanguageDetector({
52
+ minConfidence: options.detectionMinConfidence ?? 0.5,
53
+ });
54
+ }
55
+ else {
56
+ this.languageDetector = null;
57
+ }
58
+ }
59
+ /**
60
+ * Create a LanguageRouter with all adapters pre-registered
61
+ *
62
+ * Uses AdapterFactory to create adapters for all supported languages.
63
+ *
64
+ * @param options - Router options
65
+ * @returns Configured LanguageRouter
66
+ *
67
+ * @example
68
+ * ```typescript
69
+ * // Create router with all language adapters
70
+ * const router = LanguageRouter.createWithAllAdapters()
71
+ *
72
+ * // Create router with specific languages only
73
+ * const router2 = LanguageRouter.createWithAllAdapters({
74
+ * languages: ['typescript', 'python']
75
+ * })
76
+ * ```
77
+ */
78
+ static createWithAllAdapters(options = {}) {
79
+ const router = new LanguageRouter(options);
80
+ // Determine which languages to register
81
+ const languages = options.languages ?? AdapterFactory.getSupportedLanguages();
82
+ // Create and register adapters using factory
83
+ const adapters = AdapterFactory.createAdapters(languages);
84
+ for (const adapter of adapters.values()) {
85
+ router.registerAdapter(adapter);
86
+ }
87
+ return router;
88
+ }
89
+ /**
90
+ * Create a LanguageRouter using cached adapters from factory
91
+ *
92
+ * Reuses adapter instances from the factory cache for efficiency.
93
+ *
94
+ * @param options - Router options
95
+ * @returns Configured LanguageRouter
96
+ */
97
+ static createWithCachedAdapters(options = {}) {
98
+ const router = new LanguageRouter(options);
99
+ // Determine which languages to register
100
+ const languages = options.languages ?? AdapterFactory.getSupportedLanguages();
101
+ // Use cached adapters from factory
102
+ for (const language of languages) {
103
+ const adapter = AdapterFactory.createCachedAdapter(language);
104
+ router.registerAdapter(adapter);
105
+ }
106
+ return router;
107
+ }
108
+ /**
109
+ * Register a language adapter
110
+ *
111
+ * The adapter's extensions are mapped for fast lookup.
112
+ * If an adapter for the same language exists, it is replaced.
113
+ *
114
+ * @param adapter - Adapter to register
115
+ *
116
+ * @example
117
+ * ```typescript
118
+ * router.registerAdapter(new PythonAdapter())
119
+ * // Now handles .py, .pyi, .pyw files
120
+ * ```
121
+ */
122
+ registerAdapter(adapter) {
123
+ // Store by language
124
+ const existing = this.adapters.get(adapter.language);
125
+ if (existing) {
126
+ // Remove old extension mappings
127
+ for (const ext of existing.extensions) {
128
+ this.extensionMap.delete(ext.toLowerCase());
129
+ }
130
+ }
131
+ this.adapters.set(adapter.language, adapter);
132
+ // Map extensions to adapter
133
+ for (const ext of adapter.extensions) {
134
+ this.extensionMap.set(ext.toLowerCase(), adapter);
135
+ }
136
+ }
137
+ /**
138
+ * Unregister a language adapter
139
+ *
140
+ * @param language - Language to unregister
141
+ * @returns True if adapter was found and removed
142
+ */
143
+ unregisterAdapter(language) {
144
+ const adapter = this.adapters.get(language);
145
+ if (!adapter)
146
+ return false;
147
+ // Remove extension mappings
148
+ for (const ext of adapter.extensions) {
149
+ this.extensionMap.delete(ext.toLowerCase());
150
+ }
151
+ this.adapters.delete(language);
152
+ return true;
153
+ }
154
+ /**
155
+ * Get adapter for a file path
156
+ *
157
+ * @param filePath - Path to the file
158
+ * @returns Adapter that can handle the file
159
+ * @throws Error if no adapter found and throwOnUnsupported is true
160
+ *
161
+ * @example
162
+ * ```typescript
163
+ * const adapter = router.getAdapter('src/main.py')
164
+ * // Returns PythonAdapter
165
+ *
166
+ * const adapter2 = router.getAdapter('unknown.xyz')
167
+ * // Throws if throwOnUnsupported, otherwise returns null
168
+ * ```
169
+ */
170
+ getAdapter(filePath) {
171
+ const ext = path.extname(filePath).toLowerCase();
172
+ const adapter = this.extensionMap.get(ext);
173
+ if (!adapter) {
174
+ if (this.throwOnUnsupported) {
175
+ throw new Error(`No adapter registered for extension: ${ext}. ` +
176
+ `Supported extensions: ${this.getSupportedExtensions().join(', ')}`);
177
+ }
178
+ // Return a no-op adapter for unsupported files
179
+ throw new Error(`No adapter registered for extension: ${ext}`);
180
+ }
181
+ return adapter;
182
+ }
183
+ /**
184
+ * Try to get adapter for a file path (returns null instead of throwing)
185
+ *
186
+ * SMI-1340: For extensionless files, attempts language detection
187
+ * from content if provided and detection is enabled.
188
+ *
189
+ * @param filePath - Path to the file
190
+ * @param content - Optional file content for language detection
191
+ * @returns Adapter or null if not supported
192
+ *
193
+ * @example
194
+ * ```typescript
195
+ * // With extension - uses extension mapping
196
+ * const adapter = router.tryGetAdapter('main.py')
197
+ *
198
+ * // Without extension - attempts content detection
199
+ * const adapter2 = router.tryGetAdapter('Makefile', 'package main\n...')
200
+ * ```
201
+ */
202
+ tryGetAdapter(filePath, content) {
203
+ const ext = path.extname(filePath).toLowerCase();
204
+ // Try extension-based lookup first
205
+ const adapter = this.extensionMap.get(ext);
206
+ if (adapter) {
207
+ return adapter;
208
+ }
209
+ // For extensionless files, try language detection if content provided
210
+ if (!ext && content && this.languageDetector) {
211
+ const detection = this.detectLanguageFromContent(content);
212
+ if (detection.language) {
213
+ return this.adapters.get(detection.language) ?? null;
214
+ }
215
+ }
216
+ return null;
217
+ }
218
+ /**
219
+ * Detect language from file content
220
+ *
221
+ * Uses heuristics to determine the language of a file:
222
+ * - Shebang analysis (#!/usr/bin/python, etc.)
223
+ * - Content patterns (import statements, syntax markers)
224
+ * - Statistical keyword analysis
225
+ *
226
+ * @param content - File content to analyze
227
+ * @returns Detection result with language and confidence
228
+ *
229
+ * @example
230
+ * ```typescript
231
+ * const result = router.detectLanguageFromContent('#!/usr/bin/env python3\nprint("hello")')
232
+ * // { language: 'python', confidence: 1.0, method: 'shebang', evidence: [...] }
233
+ * ```
234
+ */
235
+ detectLanguageFromContent(content) {
236
+ if (!this.languageDetector) {
237
+ return {
238
+ language: null,
239
+ confidence: 0,
240
+ method: 'none',
241
+ evidence: ['Language detection disabled'],
242
+ };
243
+ }
244
+ return this.languageDetector.detect(content);
245
+ }
246
+ /**
247
+ * Try to get adapter using content detection
248
+ *
249
+ * Specifically for extensionless files where content-based
250
+ * detection is required.
251
+ *
252
+ * @param content - File content to analyze
253
+ * @returns Object with adapter and detection result
254
+ */
255
+ tryGetAdapterFromContent(content) {
256
+ const detection = this.detectLanguageFromContent(content);
257
+ if (detection.language) {
258
+ const adapter = this.adapters.get(detection.language) ?? null;
259
+ return { adapter, detection };
260
+ }
261
+ return { adapter: null, detection };
262
+ }
263
+ /**
264
+ * Check if a file can be handled
265
+ *
266
+ * @param filePath - Path to check
267
+ * @returns True if an adapter is registered for this file type
268
+ *
269
+ * @example
270
+ * ```typescript
271
+ * router.canHandle('main.py') // true (if Python adapter registered)
272
+ * router.canHandle('main.xyz') // false
273
+ * ```
274
+ */
275
+ canHandle(filePath) {
276
+ const ext = path.extname(filePath).toLowerCase();
277
+ return this.extensionMap.has(ext);
278
+ }
279
+ /**
280
+ * Get language for a file path
281
+ *
282
+ * @param filePath - Path to check
283
+ * @returns Language or null if not supported
284
+ */
285
+ getLanguage(filePath) {
286
+ const adapter = this.tryGetAdapter(filePath);
287
+ return adapter?.language ?? null;
288
+ }
289
+ /**
290
+ * Parse a file using the appropriate adapter
291
+ *
292
+ * Convenience method that combines getAdapter and parseFile.
293
+ * SMI-1337: Records metrics for file parsing.
294
+ *
295
+ * @param content - File content
296
+ * @param filePath - Path to the file
297
+ * @returns Parse result
298
+ * @throws Error if no adapter for file type
299
+ */
300
+ parseFile(content, filePath) {
301
+ const adapter = this.getAdapter(filePath);
302
+ const language = adapter.language;
303
+ const start = performance.now();
304
+ try {
305
+ const result = adapter.parseFile(content, filePath);
306
+ this.metrics.recordFileParsed(language);
307
+ return result;
308
+ }
309
+ catch (error) {
310
+ this.metrics.recordError('parse_error', language);
311
+ throw error;
312
+ }
313
+ finally {
314
+ const duration = performance.now() - start;
315
+ this.metrics.recordParseDuration(language, duration);
316
+ }
317
+ }
318
+ /**
319
+ * Get list of supported languages
320
+ *
321
+ * @returns Array of registered languages
322
+ */
323
+ getSupportedLanguages() {
324
+ return Array.from(this.adapters.keys());
325
+ }
326
+ /**
327
+ * Get list of supported file extensions
328
+ *
329
+ * @returns Array of extensions (with dot)
330
+ */
331
+ getSupportedExtensions() {
332
+ return Array.from(this.extensionMap.keys());
333
+ }
334
+ /**
335
+ * Get adapter for a specific language
336
+ *
337
+ * @param language - Language to get adapter for
338
+ * @returns Adapter or undefined if not registered
339
+ */
340
+ getAdapterByLanguage(language) {
341
+ return this.adapters.get(language);
342
+ }
343
+ /**
344
+ * Get all framework detection rules from all adapters
345
+ *
346
+ * Aggregates rules from all registered adapters for
347
+ * comprehensive framework detection.
348
+ *
349
+ * @returns Combined array of framework rules
350
+ *
351
+ * @example
352
+ * ```typescript
353
+ * const rules = router.getAllFrameworkRules()
354
+ * // Includes rules for React, Django, Gin, Actix, etc.
355
+ * ```
356
+ */
357
+ getAllFrameworkRules() {
358
+ const rules = [];
359
+ for (const adapter of this.adapters.values()) {
360
+ rules.push(...adapter.getFrameworkRules());
361
+ }
362
+ return rules;
363
+ }
364
+ /**
365
+ * Get framework rules for a specific language
366
+ *
367
+ * @param language - Language to get rules for
368
+ * @returns Framework rules or empty array
369
+ */
370
+ getFrameworkRules(language) {
371
+ const adapter = this.adapters.get(language);
372
+ return adapter?.getFrameworkRules() ?? [];
373
+ }
374
+ /**
375
+ * Get number of registered adapters
376
+ */
377
+ get adapterCount() {
378
+ return this.adapters.size;
379
+ }
380
+ /**
381
+ * Clean up all adapters
382
+ *
383
+ * Disposes all registered adapters and clears the registry.
384
+ */
385
+ dispose() {
386
+ for (const adapter of this.adapters.values()) {
387
+ try {
388
+ adapter.dispose();
389
+ }
390
+ catch {
391
+ // Ignore errors during cleanup
392
+ }
393
+ }
394
+ this.adapters.clear();
395
+ this.extensionMap.clear();
396
+ }
397
+ }
398
+ //# sourceMappingURL=router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../../src/analysis/router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,208 @@
1
+ /**
2
+ * SMI-1309: Tree Cache for Incremental Parsing
3
+ *
4
+ * LRU cache for parsed AST trees to enable fast incremental updates.
5
+ * Manages tree lifecycle independently from parse result caching.
6
+ *
7
+ * Tree-sitter trees hold native resources and must be explicitly
8
+ * deleted to free memory. This cache handles that lifecycle.
9
+ *
10
+ * @see docs/architecture/multi-language-analysis.md
11
+ * @module analysis/tree-cache
12
+ */
13
+ /**
14
+ * Cached tree entry with metadata
15
+ */
16
+ export interface CachedTree {
17
+ /** Tree-sitter Tree object (typed as unknown for flexibility) */
18
+ tree: unknown;
19
+ /** Version number for LRU tracking */
20
+ version: number;
21
+ /** SHA-256 hash prefix of content (for validation) */
22
+ contentHash: string;
23
+ /** Timestamp when entry was created */
24
+ createdAt: number;
25
+ }
26
+ /**
27
+ * Cache statistics for monitoring
28
+ */
29
+ export interface TreeCacheStats {
30
+ /** Current number of cached trees */
31
+ size: number;
32
+ /** Maximum trees allowed */
33
+ maxSize: number;
34
+ /** Hit rate (0-1) since last reset */
35
+ hitRate: number;
36
+ /** Oldest tree version in cache */
37
+ oldestVersion: number;
38
+ /** Newest tree version in cache */
39
+ newestVersion: number;
40
+ }
41
+ /**
42
+ * Options for TreeCache
43
+ */
44
+ export interface TreeCacheOptions {
45
+ /** Maximum number of trees to cache (default: 100) */
46
+ maxTrees?: number;
47
+ }
48
+ /**
49
+ * LRU cache for parsed AST trees
50
+ *
51
+ * Manages tree-sitter tree instances with proper lifecycle handling.
52
+ * Trees require explicit deletion to free native memory.
53
+ *
54
+ * Separate from ParseCache because:
55
+ * 1. Trees have native resources requiring explicit cleanup
56
+ * 2. Tree reuse enables incremental parsing
57
+ * 3. Different eviction strategies may be optimal
58
+ *
59
+ * @example
60
+ * ```typescript
61
+ * const cache = new TreeCache({ maxTrees: 50 })
62
+ *
63
+ * // Store tree after initial parse
64
+ * const tree = parser.parse(content)
65
+ * cache.set('src/main.ts', tree, hashContent(content))
66
+ *
67
+ * // Later, check if tree is valid for incremental parse
68
+ * if (cache.isValid('src/main.ts', hashContent(newContent))) {
69
+ * // Use cached tree as base
70
+ * const oldTree = cache.get('src/main.ts')
71
+ * oldTree.edit(editInfo)
72
+ * const newTree = parser.parse(newContent, oldTree)
73
+ * }
74
+ *
75
+ * // Cleanup
76
+ * cache.dispose()
77
+ * ```
78
+ */
79
+ export declare class TreeCache {
80
+ private trees;
81
+ private readonly maxTrees;
82
+ private version;
83
+ private hits;
84
+ private misses;
85
+ constructor(options?: TreeCacheOptions);
86
+ /**
87
+ * Get cached tree for a file
88
+ *
89
+ * Returns null if no tree is cached for the path.
90
+ * Updates hit/miss statistics.
91
+ *
92
+ * @param filePath - Path to look up
93
+ * @returns Cached tree or null
94
+ */
95
+ get(filePath: string): unknown | null;
96
+ /**
97
+ * Get full cache entry with metadata
98
+ *
99
+ * @param filePath - Path to look up
100
+ * @returns Full cache entry or undefined
101
+ */
102
+ getEntry(filePath: string): CachedTree | undefined;
103
+ /**
104
+ * Check if cached tree is valid for content
105
+ *
106
+ * Compares content hash to detect if the cached tree
107
+ * can be used as a base for incremental parsing.
108
+ *
109
+ * @param filePath - Path to check
110
+ * @param contentHash - Hash of current content
111
+ * @returns True if tree matches content
112
+ */
113
+ isValid(filePath: string, contentHash: string): boolean;
114
+ /**
115
+ * Get version number for a cached tree
116
+ *
117
+ * @param filePath - Path to look up
118
+ * @returns Version number or null if not cached
119
+ */
120
+ getVersion(filePath: string): number | null;
121
+ /**
122
+ * Store a tree in cache
123
+ *
124
+ * Evicts oldest entry if at capacity.
125
+ * Properly deletes existing tree before replacement.
126
+ *
127
+ * @param filePath - File path as cache key
128
+ * @param tree - Tree-sitter tree to cache
129
+ * @param contentHash - Hash of content tree was parsed from
130
+ */
131
+ set(filePath: string, tree: unknown, contentHash: string): void;
132
+ /**
133
+ * Invalidate cached tree for a file
134
+ *
135
+ * Deletes tree to free native memory.
136
+ *
137
+ * @param filePath - Path to invalidate
138
+ */
139
+ invalidate(filePath: string): void;
140
+ /**
141
+ * Invalidate multiple files
142
+ *
143
+ * @param filePaths - Paths to invalidate
144
+ */
145
+ invalidateMany(filePaths: string[]): void;
146
+ /**
147
+ * Invalidate files matching a pattern
148
+ *
149
+ * @param pattern - Regex pattern to match file paths
150
+ * @returns Number of entries invalidated
151
+ */
152
+ invalidatePattern(pattern: RegExp): number;
153
+ /**
154
+ * Check if a file has a cached tree
155
+ *
156
+ * @param filePath - Path to check
157
+ * @returns True if tree is cached
158
+ */
159
+ has(filePath: string): boolean;
160
+ /**
161
+ * Get current cache size
162
+ */
163
+ get size(): number;
164
+ /**
165
+ * Get cache statistics
166
+ *
167
+ * @returns Current cache statistics
168
+ */
169
+ getStats(): TreeCacheStats;
170
+ /**
171
+ * Reset hit/miss counters
172
+ */
173
+ resetStats(): void;
174
+ /**
175
+ * Clear all cached trees
176
+ *
177
+ * Properly deletes all trees to free native resources.
178
+ */
179
+ clear(): void;
180
+ /**
181
+ * Dispose of cache and free all resources
182
+ *
183
+ * Call this when the cache is no longer needed.
184
+ */
185
+ dispose(): void;
186
+ /**
187
+ * Get list of all cached file paths
188
+ */
189
+ keys(): string[];
190
+ /**
191
+ * Hash content for cache validation
192
+ *
193
+ * @param content - Content to hash
194
+ * @returns SHA-256 hash prefix (16 chars)
195
+ */
196
+ static hashContent(content: string): string;
197
+ /**
198
+ * Evict the oldest entry from cache
199
+ */
200
+ private evictOldest;
201
+ /**
202
+ * Safely delete a tree object
203
+ *
204
+ * Handles trees that may or may not have a delete method.
205
+ */
206
+ private deleteTree;
207
+ }
208
+ //# sourceMappingURL=tree-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-cache.d.ts","sourceRoot":"","sources":["../../../src/analysis/tree-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,iEAAiE;IACjE,IAAI,EAAE,OAAO,CAAA;IACb,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAA;IACf,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAA;IACnB,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAA;IACZ,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAA;IACf,mCAAmC;IACnC,aAAa,EAAE,MAAM,CAAA;IACrB,mCAAmC;IACnC,aAAa,EAAE,MAAM,CAAA;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,KAAK,CAAqC;IAClD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,OAAO,CAAI;IACnB,OAAO,CAAC,IAAI,CAAI;IAChB,OAAO,CAAC,MAAM,CAAI;gBAEN,OAAO,GAAE,gBAAqB;IAI1C;;;;;;;;OAQG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAUrC;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIlD;;;;;;;;;OASG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;IAKvD;;;;;OAKG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAI3C;;;;;;;;;OASG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAqB/D;;;;;;OAMG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQlC;;;;OAIG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAMzC;;;;;OAKG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAW1C;;;;;OAKG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI9B;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;;OAIG;IACH,QAAQ,IAAI,cAAc;IAmB1B;;OAEG;IACH,UAAU,IAAI,IAAI;IAKlB;;;;OAIG;IACH,KAAK,IAAI,IAAI;IASb;;;;OAIG;IACH,OAAO,IAAI,IAAI;IAIf;;OAEG;IACH,IAAI,IAAI,MAAM,EAAE;IAIhB;;;;;OAKG;IACH,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAI3C;;OAEG;IACH,OAAO,CAAC,WAAW;IAgBnB;;;;OAIG;IACH,OAAO,CAAC,UAAU;CAYnB"}