@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,288 @@
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
+ import { createHash } from 'crypto';
14
+ /**
15
+ * LRU cache for parsed AST trees
16
+ *
17
+ * Manages tree-sitter tree instances with proper lifecycle handling.
18
+ * Trees require explicit deletion to free native memory.
19
+ *
20
+ * Separate from ParseCache because:
21
+ * 1. Trees have native resources requiring explicit cleanup
22
+ * 2. Tree reuse enables incremental parsing
23
+ * 3. Different eviction strategies may be optimal
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * const cache = new TreeCache({ maxTrees: 50 })
28
+ *
29
+ * // Store tree after initial parse
30
+ * const tree = parser.parse(content)
31
+ * cache.set('src/main.ts', tree, hashContent(content))
32
+ *
33
+ * // Later, check if tree is valid for incremental parse
34
+ * if (cache.isValid('src/main.ts', hashContent(newContent))) {
35
+ * // Use cached tree as base
36
+ * const oldTree = cache.get('src/main.ts')
37
+ * oldTree.edit(editInfo)
38
+ * const newTree = parser.parse(newContent, oldTree)
39
+ * }
40
+ *
41
+ * // Cleanup
42
+ * cache.dispose()
43
+ * ```
44
+ */
45
+ export class TreeCache {
46
+ trees = new Map();
47
+ maxTrees;
48
+ version = 0;
49
+ hits = 0;
50
+ misses = 0;
51
+ constructor(options = {}) {
52
+ this.maxTrees = options.maxTrees ?? 100;
53
+ }
54
+ /**
55
+ * Get cached tree for a file
56
+ *
57
+ * Returns null if no tree is cached for the path.
58
+ * Updates hit/miss statistics.
59
+ *
60
+ * @param filePath - Path to look up
61
+ * @returns Cached tree or null
62
+ */
63
+ get(filePath) {
64
+ const entry = this.trees.get(filePath);
65
+ if (entry) {
66
+ this.hits++;
67
+ return entry.tree;
68
+ }
69
+ this.misses++;
70
+ return null;
71
+ }
72
+ /**
73
+ * Get full cache entry with metadata
74
+ *
75
+ * @param filePath - Path to look up
76
+ * @returns Full cache entry or undefined
77
+ */
78
+ getEntry(filePath) {
79
+ return this.trees.get(filePath);
80
+ }
81
+ /**
82
+ * Check if cached tree is valid for content
83
+ *
84
+ * Compares content hash to detect if the cached tree
85
+ * can be used as a base for incremental parsing.
86
+ *
87
+ * @param filePath - Path to check
88
+ * @param contentHash - Hash of current content
89
+ * @returns True if tree matches content
90
+ */
91
+ isValid(filePath, contentHash) {
92
+ const entry = this.trees.get(filePath);
93
+ return entry?.contentHash === contentHash;
94
+ }
95
+ /**
96
+ * Get version number for a cached tree
97
+ *
98
+ * @param filePath - Path to look up
99
+ * @returns Version number or null if not cached
100
+ */
101
+ getVersion(filePath) {
102
+ return this.trees.get(filePath)?.version ?? null;
103
+ }
104
+ /**
105
+ * Store a tree in cache
106
+ *
107
+ * Evicts oldest entry if at capacity.
108
+ * Properly deletes existing tree before replacement.
109
+ *
110
+ * @param filePath - File path as cache key
111
+ * @param tree - Tree-sitter tree to cache
112
+ * @param contentHash - Hash of content tree was parsed from
113
+ */
114
+ set(filePath, tree, contentHash) {
115
+ // Evict oldest if at capacity and this is a new entry
116
+ if (this.trees.size >= this.maxTrees && !this.trees.has(filePath)) {
117
+ this.evictOldest();
118
+ }
119
+ // Delete existing tree to free native memory
120
+ const existing = this.trees.get(filePath);
121
+ if (existing) {
122
+ this.deleteTree(existing.tree);
123
+ }
124
+ this.version++;
125
+ this.trees.set(filePath, {
126
+ tree,
127
+ version: this.version,
128
+ contentHash,
129
+ createdAt: Date.now(),
130
+ });
131
+ }
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) {
140
+ const entry = this.trees.get(filePath);
141
+ if (entry) {
142
+ this.deleteTree(entry.tree);
143
+ this.trees.delete(filePath);
144
+ }
145
+ }
146
+ /**
147
+ * Invalidate multiple files
148
+ *
149
+ * @param filePaths - Paths to invalidate
150
+ */
151
+ invalidateMany(filePaths) {
152
+ for (const filePath of filePaths) {
153
+ this.invalidate(filePath);
154
+ }
155
+ }
156
+ /**
157
+ * Invalidate files matching a pattern
158
+ *
159
+ * @param pattern - Regex pattern to match file paths
160
+ * @returns Number of entries invalidated
161
+ */
162
+ invalidatePattern(pattern) {
163
+ let count = 0;
164
+ for (const filePath of this.trees.keys()) {
165
+ if (pattern.test(filePath)) {
166
+ this.invalidate(filePath);
167
+ count++;
168
+ }
169
+ }
170
+ return count;
171
+ }
172
+ /**
173
+ * Check if a file has a cached tree
174
+ *
175
+ * @param filePath - Path to check
176
+ * @returns True if tree is cached
177
+ */
178
+ has(filePath) {
179
+ return this.trees.has(filePath);
180
+ }
181
+ /**
182
+ * Get current cache size
183
+ */
184
+ get size() {
185
+ return this.trees.size;
186
+ }
187
+ /**
188
+ * Get cache statistics
189
+ *
190
+ * @returns Current cache statistics
191
+ */
192
+ getStats() {
193
+ let oldestVersion = Infinity;
194
+ let newestVersion = 0;
195
+ for (const entry of this.trees.values()) {
196
+ if (entry.version < oldestVersion)
197
+ oldestVersion = entry.version;
198
+ if (entry.version > newestVersion)
199
+ newestVersion = entry.version;
200
+ }
201
+ const total = this.hits + this.misses;
202
+ return {
203
+ size: this.trees.size,
204
+ maxSize: this.maxTrees,
205
+ hitRate: total > 0 ? this.hits / total : 0,
206
+ oldestVersion: oldestVersion === Infinity ? 0 : oldestVersion,
207
+ newestVersion,
208
+ };
209
+ }
210
+ /**
211
+ * Reset hit/miss counters
212
+ */
213
+ resetStats() {
214
+ this.hits = 0;
215
+ this.misses = 0;
216
+ }
217
+ /**
218
+ * Clear all cached trees
219
+ *
220
+ * Properly deletes all trees to free native resources.
221
+ */
222
+ clear() {
223
+ for (const entry of this.trees.values()) {
224
+ this.deleteTree(entry.tree);
225
+ }
226
+ this.trees.clear();
227
+ this.hits = 0;
228
+ this.misses = 0;
229
+ }
230
+ /**
231
+ * Dispose of cache and free all resources
232
+ *
233
+ * Call this when the cache is no longer needed.
234
+ */
235
+ dispose() {
236
+ this.clear();
237
+ }
238
+ /**
239
+ * Get list of all cached file paths
240
+ */
241
+ keys() {
242
+ return Array.from(this.trees.keys());
243
+ }
244
+ /**
245
+ * Hash content for cache validation
246
+ *
247
+ * @param content - Content to hash
248
+ * @returns SHA-256 hash prefix (16 chars)
249
+ */
250
+ static hashContent(content) {
251
+ return createHash('sha256').update(content).digest('hex').slice(0, 16);
252
+ }
253
+ /**
254
+ * Evict the oldest entry from cache
255
+ */
256
+ evictOldest() {
257
+ let oldestPath = null;
258
+ let oldestVersion = Infinity;
259
+ for (const [path, entry] of this.trees) {
260
+ if (entry.version < oldestVersion) {
261
+ oldestVersion = entry.version;
262
+ oldestPath = path;
263
+ }
264
+ }
265
+ if (oldestPath) {
266
+ this.invalidate(oldestPath);
267
+ }
268
+ }
269
+ /**
270
+ * Safely delete a tree object
271
+ *
272
+ * Handles trees that may or may not have a delete method.
273
+ */
274
+ deleteTree(tree) {
275
+ if (tree && typeof tree === 'object') {
276
+ const maybeTree = tree;
277
+ if (typeof maybeTree.delete === 'function') {
278
+ try {
279
+ maybeTree.delete();
280
+ }
281
+ catch {
282
+ // Ignore errors during cleanup
283
+ }
284
+ }
285
+ }
286
+ }
287
+ }
288
+ //# sourceMappingURL=tree-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-cache.js","sourceRoot":"","sources":["../../../src/analysis/tree-cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,141 @@
1
+ /**
2
+ * SMI-1303: Tree-sitter Parser Manager
3
+ *
4
+ * Manages tree-sitter parser instances with lazy loading.
5
+ * Uses web-tree-sitter (WASM) to avoid native module conflicts.
6
+ *
7
+ * @see docs/architecture/multi-language-analysis.md
8
+ * @see ADR-002: Docker glibc Requirement
9
+ * @module analysis/tree-sitter/manager
10
+ */
11
+ import type { SupportedLanguage } from '../types.js';
12
+ /**
13
+ * Parser interface (matches web-tree-sitter API)
14
+ */
15
+ export interface TreeSitterParser {
16
+ parse(input: string, previousTree?: TreeSitterTree): TreeSitterTree;
17
+ setLanguage(language: TreeSitterLanguage): void;
18
+ delete(): void;
19
+ }
20
+ /**
21
+ * Tree interface (matches web-tree-sitter API)
22
+ */
23
+ export interface TreeSitterTree {
24
+ rootNode: TreeSitterNode;
25
+ delete(): void;
26
+ }
27
+ /**
28
+ * Node interface (matches web-tree-sitter API)
29
+ */
30
+ export interface TreeSitterNode {
31
+ type: string;
32
+ text: string;
33
+ startPosition: {
34
+ row: number;
35
+ column: number;
36
+ };
37
+ endPosition: {
38
+ row: number;
39
+ column: number;
40
+ };
41
+ children: TreeSitterNode[];
42
+ namedChildren: TreeSitterNode[];
43
+ childCount: number;
44
+ namedChildCount: number;
45
+ child(index: number): TreeSitterNode | null;
46
+ namedChild(index: number): TreeSitterNode | null;
47
+ childForFieldName(fieldName: string): TreeSitterNode | null;
48
+ descendantsOfType(types: string | string[]): TreeSitterNode[];
49
+ }
50
+ /**
51
+ * Language module interface
52
+ */
53
+ export interface TreeSitterLanguage {
54
+ }
55
+ /**
56
+ * Options for TreeSitterManager
57
+ */
58
+ export interface TreeSitterManagerOptions {
59
+ /** Maximum parsers to cache (default: 6, one per language) */
60
+ maxParsers?: number;
61
+ }
62
+ /**
63
+ * Manages tree-sitter parser instances with lazy loading
64
+ *
65
+ * Parsers are loaded on-demand and cached for reuse.
66
+ * Uses WASM-based web-tree-sitter to avoid native module issues.
67
+ *
68
+ * @example
69
+ * ```typescript
70
+ * const manager = new TreeSitterManager()
71
+ * const parser = await manager.getParser('python')
72
+ * const tree = parser.parse('def main(): pass')
73
+ * manager.dispose()
74
+ * ```
75
+ */
76
+ export declare class TreeSitterManager {
77
+ private parsers;
78
+ private loading;
79
+ private readonly maxParsers;
80
+ private initialized;
81
+ private initPromise;
82
+ private ParserClass;
83
+ private accessOrder;
84
+ constructor(options?: TreeSitterManagerOptions);
85
+ /**
86
+ * SMI-1333: Update access order for LRU tracking
87
+ * Moves the accessed language to the end (most recently used)
88
+ */
89
+ private updateAccessOrder;
90
+ /**
91
+ * Initialize web-tree-sitter (must be called before first use)
92
+ *
93
+ * This initializes the WASM runtime. Called automatically by getParser().
94
+ */
95
+ initialize(): Promise<void>;
96
+ private doInitialize;
97
+ /**
98
+ * Get parser for a language, loading if necessary
99
+ *
100
+ * Parsers are cached for reuse. If the maximum number of
101
+ * parsers is reached, the least recently used is evicted.
102
+ *
103
+ * @param language - Language to get parser for
104
+ * @returns Configured parser instance
105
+ * @throws Error if language is not supported or tree-sitter unavailable
106
+ *
107
+ * @example
108
+ * ```typescript
109
+ * const parser = await manager.getParser('python')
110
+ * const tree = parser.parse(pythonCode)
111
+ * ```
112
+ */
113
+ getParser(language: SupportedLanguage): Promise<TreeSitterParser>;
114
+ /**
115
+ * Load a parser for a specific language
116
+ */
117
+ private loadParser;
118
+ /**
119
+ * Load the language module for tree-sitter
120
+ */
121
+ private loadLanguageModule;
122
+ /**
123
+ * Check if a language is available
124
+ *
125
+ * @param language - Language to check
126
+ * @returns True if the language can be loaded
127
+ */
128
+ isLanguageAvailable(language: SupportedLanguage): Promise<boolean>;
129
+ /**
130
+ * Get list of currently loaded languages
131
+ */
132
+ getLoadedLanguages(): SupportedLanguage[];
133
+ /**
134
+ * Clean up all parser resources
135
+ *
136
+ * Call this when the manager is no longer needed
137
+ * to free memory and WASM resources.
138
+ */
139
+ dispose(): void;
140
+ }
141
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../../src/analysis/tree-sitter/manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAEpD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,cAAc,GAAG,cAAc,CAAA;IACnE,WAAW,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAAA;IAC/C,MAAM,IAAI,IAAI,CAAA;CACf;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,cAAc,CAAA;IACxB,MAAM,IAAI,IAAI,CAAA;CACf;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IAC9C,WAAW,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5C,QAAQ,EAAE,cAAc,EAAE,CAAA;IAC1B,aAAa,EAAE,cAAc,EAAE,CAAA;IAC/B,UAAU,EAAE,MAAM,CAAA;IAClB,eAAe,EAAE,MAAM,CAAA;IACvB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAAA;IAC3C,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAAA;IAChD,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAAA;IAC3D,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,cAAc,EAAE,CAAA;CAC9D;AAED;;GAEG;AAEH,MAAM,WAAW,kBAAkB;CAElC;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAsD;IACrE,OAAO,CAAC,OAAO,CAA+D;IAC9E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,WAAW,CAA4C;IAE/D,OAAO,CAAC,WAAW,CAA0B;gBAEjC,OAAO,GAAE,wBAA6B;IAIlD;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAQzB;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAYnB,YAAY;IAuB1B;;;;;;;;;;;;;;;OAeG;IACG,SAAS,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA4CvE;;OAEG;YACW,UAAU;IAYxB;;OAEG;YACW,kBAAkB;IA0ChC;;;;;OAKG;IACG,mBAAmB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IASxE;;OAEG;IACH,kBAAkB,IAAI,iBAAiB,EAAE;IAIzC;;;;;OAKG;IACH,OAAO,IAAI,IAAI;CAgBhB"}
@@ -0,0 +1,239 @@
1
+ /**
2
+ * SMI-1303: Tree-sitter Parser Manager
3
+ *
4
+ * Manages tree-sitter parser instances with lazy loading.
5
+ * Uses web-tree-sitter (WASM) to avoid native module conflicts.
6
+ *
7
+ * @see docs/architecture/multi-language-analysis.md
8
+ * @see ADR-002: Docker glibc Requirement
9
+ * @module analysis/tree-sitter/manager
10
+ */
11
+ /**
12
+ * Manages tree-sitter parser instances with lazy loading
13
+ *
14
+ * Parsers are loaded on-demand and cached for reuse.
15
+ * Uses WASM-based web-tree-sitter to avoid native module issues.
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * const manager = new TreeSitterManager()
20
+ * const parser = await manager.getParser('python')
21
+ * const tree = parser.parse('def main(): pass')
22
+ * manager.dispose()
23
+ * ```
24
+ */
25
+ export class TreeSitterManager {
26
+ parsers = new Map();
27
+ loading = new Map();
28
+ maxParsers;
29
+ initialized = false;
30
+ initPromise = null;
31
+ ParserClass = null;
32
+ // SMI-1333: Track access order for proper LRU eviction
33
+ accessOrder = [];
34
+ constructor(options = {}) {
35
+ this.maxParsers = options.maxParsers ?? 6;
36
+ }
37
+ /**
38
+ * SMI-1333: Update access order for LRU tracking
39
+ * Moves the accessed language to the end (most recently used)
40
+ */
41
+ updateAccessOrder(language) {
42
+ const index = this.accessOrder.indexOf(language);
43
+ if (index > -1) {
44
+ this.accessOrder.splice(index, 1);
45
+ }
46
+ this.accessOrder.push(language);
47
+ }
48
+ /**
49
+ * Initialize web-tree-sitter (must be called before first use)
50
+ *
51
+ * This initializes the WASM runtime. Called automatically by getParser().
52
+ */
53
+ async initialize() {
54
+ if (this.initialized)
55
+ return;
56
+ if (this.initPromise) {
57
+ await this.initPromise;
58
+ return;
59
+ }
60
+ this.initPromise = this.doInitialize();
61
+ await this.initPromise;
62
+ }
63
+ async doInitialize() {
64
+ try {
65
+ // Dynamic import for web-tree-sitter (WASM-based)
66
+ // @ts-expect-error - Optional dependency, may not have type declarations
67
+ const TreeSitter = await import('web-tree-sitter');
68
+ await TreeSitter.default.init();
69
+ this.ParserClass = TreeSitter.default;
70
+ this.initialized = true;
71
+ }
72
+ catch {
73
+ // Fallback: try native tree-sitter if WASM unavailable
74
+ try {
75
+ // @ts-expect-error - Optional dependency, may not have type declarations
76
+ const TreeSitterNative = await import('tree-sitter');
77
+ this.ParserClass = TreeSitterNative.default;
78
+ this.initialized = true;
79
+ }
80
+ catch {
81
+ throw new Error('tree-sitter is not available. Install web-tree-sitter or tree-sitter to enable multi-language analysis.');
82
+ }
83
+ }
84
+ }
85
+ /**
86
+ * Get parser for a language, loading if necessary
87
+ *
88
+ * Parsers are cached for reuse. If the maximum number of
89
+ * parsers is reached, the least recently used is evicted.
90
+ *
91
+ * @param language - Language to get parser for
92
+ * @returns Configured parser instance
93
+ * @throws Error if language is not supported or tree-sitter unavailable
94
+ *
95
+ * @example
96
+ * ```typescript
97
+ * const parser = await manager.getParser('python')
98
+ * const tree = parser.parse(pythonCode)
99
+ * ```
100
+ */
101
+ async getParser(language) {
102
+ // Ensure initialized
103
+ await this.initialize();
104
+ // Return cached parser
105
+ const cached = this.parsers.get(language);
106
+ if (cached) {
107
+ // SMI-1333: Update access order on cache hit
108
+ this.updateAccessOrder(language);
109
+ return cached;
110
+ }
111
+ // Return in-progress load
112
+ const loading = this.loading.get(language);
113
+ if (loading) {
114
+ return loading;
115
+ }
116
+ // Start new load
117
+ const loadPromise = this.loadParser(language);
118
+ this.loading.set(language, loadPromise);
119
+ try {
120
+ const parser = await loadPromise;
121
+ // SMI-1333: Evict LRU (first in accessOrder) if at capacity
122
+ if (this.parsers.size >= this.maxParsers) {
123
+ const lru = this.accessOrder.shift();
124
+ if (lru) {
125
+ const oldParser = this.parsers.get(lru);
126
+ oldParser?.delete();
127
+ this.parsers.delete(lru);
128
+ }
129
+ }
130
+ this.parsers.set(language, parser);
131
+ // SMI-1333: Track new parser in access order
132
+ this.updateAccessOrder(language);
133
+ return parser;
134
+ }
135
+ finally {
136
+ this.loading.delete(language);
137
+ }
138
+ }
139
+ /**
140
+ * Load a parser for a specific language
141
+ */
142
+ async loadParser(language) {
143
+ if (!this.ParserClass) {
144
+ throw new Error('TreeSitterManager not initialized. Call initialize() first.');
145
+ }
146
+ const parser = new this.ParserClass();
147
+ const languageModule = await this.loadLanguageModule(language);
148
+ parser.setLanguage(languageModule);
149
+ return parser;
150
+ }
151
+ /**
152
+ * Load the language module for tree-sitter
153
+ */
154
+ async loadLanguageModule(language) {
155
+ try {
156
+ switch (language) {
157
+ case 'typescript':
158
+ case 'javascript': {
159
+ // @ts-expect-error - Optional dependency, may not have type declarations
160
+ const mod = await import('tree-sitter-typescript');
161
+ // tree-sitter-typescript exports { typescript, tsx }
162
+ return mod.typescript;
163
+ }
164
+ case 'python': {
165
+ // @ts-expect-error - Optional dependency, may not have type declarations
166
+ const mod = await import('tree-sitter-python');
167
+ return mod.default;
168
+ }
169
+ case 'go': {
170
+ // @ts-expect-error - Optional dependency, may not have type declarations
171
+ const mod = await import('tree-sitter-go');
172
+ return mod.default;
173
+ }
174
+ case 'rust': {
175
+ // @ts-expect-error - Optional dependency, may not have type declarations
176
+ const mod = await import('tree-sitter-rust');
177
+ return mod.default;
178
+ }
179
+ case 'java': {
180
+ // @ts-expect-error - Optional dependency, may not have type declarations
181
+ const mod = await import('tree-sitter-java');
182
+ return mod.default;
183
+ }
184
+ default:
185
+ throw new Error(`Unsupported language: ${language}`);
186
+ }
187
+ }
188
+ catch (error) {
189
+ const err = error;
190
+ throw new Error(`Failed to load tree-sitter language module for ${language}: ${err.message}. ` +
191
+ `Make sure tree-sitter-${language} is installed.`);
192
+ }
193
+ }
194
+ /**
195
+ * Check if a language is available
196
+ *
197
+ * @param language - Language to check
198
+ * @returns True if the language can be loaded
199
+ */
200
+ async isLanguageAvailable(language) {
201
+ try {
202
+ await this.loadLanguageModule(language);
203
+ return true;
204
+ }
205
+ catch {
206
+ return false;
207
+ }
208
+ }
209
+ /**
210
+ * Get list of currently loaded languages
211
+ */
212
+ getLoadedLanguages() {
213
+ return Array.from(this.parsers.keys());
214
+ }
215
+ /**
216
+ * Clean up all parser resources
217
+ *
218
+ * Call this when the manager is no longer needed
219
+ * to free memory and WASM resources.
220
+ */
221
+ dispose() {
222
+ for (const parser of this.parsers.values()) {
223
+ try {
224
+ parser.delete();
225
+ }
226
+ catch {
227
+ // Ignore errors during cleanup
228
+ }
229
+ }
230
+ this.parsers.clear();
231
+ this.loading.clear();
232
+ // SMI-1333: Clear access order
233
+ this.accessOrder = [];
234
+ this.initialized = false;
235
+ this.initPromise = null;
236
+ this.ParserClass = null;
237
+ }
238
+ }
239
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../../src/analysis/tree-sitter/manager.ts"],"names":[],"mappings":"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"}