@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,219 @@
1
+ /**
2
+ * SMI-600: Source File Parsers
3
+ * SMI-1189: Extracted from CodebaseAnalyzer.ts
4
+ *
5
+ * Functions for parsing TypeScript/JavaScript source files
6
+ * and extracting imports, exports, and functions.
7
+ */
8
+ import * as ts from 'typescript';
9
+ /**
10
+ * Parse a single file and extract information
11
+ *
12
+ * @param content - File content to parse
13
+ * @param relativePath - Relative path for source file tracking
14
+ * @returns Parsed imports, exports, and functions
15
+ */
16
+ export function parseFile(content, relativePath) {
17
+ const imports = [];
18
+ const exports = [];
19
+ const functions = [];
20
+ // Create source file
21
+ const sourceFile = ts.createSourceFile(relativePath, content, ts.ScriptTarget.Latest, true, relativePath.endsWith('.tsx') || relativePath.endsWith('.jsx')
22
+ ? ts.ScriptKind.TSX
23
+ : ts.ScriptKind.TS);
24
+ // Walk the AST
25
+ const visit = (node) => {
26
+ // Import declarations
27
+ if (ts.isImportDeclaration(node)) {
28
+ const importInfo = extractImport(node, relativePath);
29
+ if (importInfo) {
30
+ imports.push(importInfo);
31
+ }
32
+ }
33
+ // Export declarations
34
+ if (ts.isExportDeclaration(node) || ts.isExportAssignment(node)) {
35
+ const exportInfos = extractExport(node, relativePath);
36
+ exports.push(...exportInfos);
37
+ }
38
+ // Function declarations
39
+ if (ts.isFunctionDeclaration(node) && node.name) {
40
+ const funcInfo = extractFunction(node, relativePath, sourceFile);
41
+ if (funcInfo) {
42
+ functions.push(funcInfo);
43
+ // Also track as export if exported
44
+ if (funcInfo.isExported) {
45
+ const isDefault = node.modifiers?.some((m) => m.kind === ts.SyntaxKind.DefaultKeyword);
46
+ exports.push({
47
+ name: node.name.text,
48
+ kind: 'function',
49
+ isDefault: isDefault ?? false,
50
+ sourceFile: relativePath,
51
+ });
52
+ }
53
+ }
54
+ }
55
+ // Arrow functions assigned to variables
56
+ if (ts.isVariableStatement(node)) {
57
+ for (const decl of node.declarationList.declarations) {
58
+ if (decl.initializer &&
59
+ ts.isArrowFunction(decl.initializer) &&
60
+ ts.isIdentifier(decl.name)) {
61
+ const isExported = node.modifiers?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword);
62
+ const { line } = sourceFile.getLineAndCharacterOfPosition(node.getStart());
63
+ functions.push({
64
+ name: decl.name.text,
65
+ parameterCount: decl.initializer.parameters.length,
66
+ isAsync: decl.initializer.modifiers?.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword) ??
67
+ false,
68
+ isExported: isExported ?? false,
69
+ sourceFile: relativePath,
70
+ line: line + 1,
71
+ });
72
+ // Also track as export if exported
73
+ if (isExported) {
74
+ exports.push({
75
+ name: decl.name.text,
76
+ kind: 'function',
77
+ isDefault: false,
78
+ sourceFile: relativePath,
79
+ });
80
+ }
81
+ }
82
+ }
83
+ }
84
+ // Class declarations
85
+ if (ts.isClassDeclaration(node) && node.name) {
86
+ const isExported = node.modifiers?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword);
87
+ const isDefault = node.modifiers?.some((m) => m.kind === ts.SyntaxKind.DefaultKeyword);
88
+ if (isExported) {
89
+ exports.push({
90
+ name: node.name.text,
91
+ kind: 'class',
92
+ isDefault: isDefault ?? false,
93
+ sourceFile: relativePath,
94
+ });
95
+ }
96
+ }
97
+ // Interface declarations
98
+ if (ts.isInterfaceDeclaration(node)) {
99
+ const isExported = node.modifiers?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword);
100
+ if (isExported) {
101
+ exports.push({
102
+ name: node.name.text,
103
+ kind: 'interface',
104
+ isDefault: false,
105
+ sourceFile: relativePath,
106
+ });
107
+ }
108
+ }
109
+ // Type alias declarations
110
+ if (ts.isTypeAliasDeclaration(node)) {
111
+ const isExported = node.modifiers?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword);
112
+ if (isExported) {
113
+ exports.push({
114
+ name: node.name.text,
115
+ kind: 'type',
116
+ isDefault: false,
117
+ sourceFile: relativePath,
118
+ });
119
+ }
120
+ }
121
+ ts.forEachChild(node, visit);
122
+ };
123
+ visit(sourceFile);
124
+ return { imports, exports, functions };
125
+ }
126
+ /**
127
+ * Extract import information from an import declaration
128
+ *
129
+ * @param node - Import declaration node
130
+ * @param sourceFile - Source file path
131
+ * @returns Import info or null if invalid
132
+ */
133
+ export function extractImport(node, sourceFile) {
134
+ const moduleSpecifier = node.moduleSpecifier;
135
+ if (!ts.isStringLiteral(moduleSpecifier)) {
136
+ return null;
137
+ }
138
+ const importInfo = {
139
+ module: moduleSpecifier.text,
140
+ namedImports: [],
141
+ isTypeOnly: node.importClause?.isTypeOnly ?? false,
142
+ sourceFile,
143
+ };
144
+ const importClause = node.importClause;
145
+ if (importClause) {
146
+ // Default import
147
+ if (importClause.name) {
148
+ importInfo.defaultImport = importClause.name.text;
149
+ }
150
+ // Named imports
151
+ const namedBindings = importClause.namedBindings;
152
+ if (namedBindings) {
153
+ if (ts.isNamespaceImport(namedBindings)) {
154
+ importInfo.namespaceImport = namedBindings.name.text;
155
+ }
156
+ else if (ts.isNamedImports(namedBindings)) {
157
+ for (const element of namedBindings.elements) {
158
+ importInfo.namedImports.push(element.name.text);
159
+ }
160
+ }
161
+ }
162
+ }
163
+ return importInfo;
164
+ }
165
+ /**
166
+ * Extract export information from an export declaration
167
+ *
168
+ * @param node - Export declaration or assignment node
169
+ * @param sourceFile - Source file path
170
+ * @returns Array of export info
171
+ */
172
+ export function extractExport(node, sourceFile) {
173
+ const exports = [];
174
+ if (ts.isExportAssignment(node)) {
175
+ // export default X
176
+ exports.push({
177
+ name: 'default',
178
+ kind: 'unknown',
179
+ isDefault: true,
180
+ sourceFile,
181
+ });
182
+ }
183
+ else if (node.exportClause && ts.isNamedExports(node.exportClause)) {
184
+ // export { X, Y }
185
+ for (const element of node.exportClause.elements) {
186
+ exports.push({
187
+ name: element.name.text,
188
+ kind: 'unknown',
189
+ isDefault: false,
190
+ sourceFile,
191
+ });
192
+ }
193
+ }
194
+ return exports;
195
+ }
196
+ /**
197
+ * Extract function information from a function declaration
198
+ *
199
+ * @param node - Function declaration node
200
+ * @param relativePath - Relative file path
201
+ * @param sourceFile - Source file for position lookup
202
+ * @returns Function info or null if no name
203
+ */
204
+ export function extractFunction(node, relativePath, sourceFile) {
205
+ if (!node.name)
206
+ return null;
207
+ const isExported = node.modifiers?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword);
208
+ const isAsync = node.modifiers?.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword);
209
+ const { line } = sourceFile.getLineAndCharacterOfPosition(node.getStart());
210
+ return {
211
+ name: node.name.text,
212
+ parameterCount: node.parameters.length,
213
+ isAsync: isAsync ?? false,
214
+ isExported: isExported ?? false,
215
+ sourceFile: relativePath,
216
+ line: line + 1,
217
+ };
218
+ }
219
+ //# sourceMappingURL=parsers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parsers.js","sourceRoot":"","sources":["../../../src/analysis/parsers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,264 @@
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 type { LanguageAdapter } from './adapters/base.js';
14
+ import type { SupportedLanguage, FrameworkRule, ParseResult } from './types.js';
15
+ import { type AnalysisMetrics } from './metrics.js';
16
+ import { type LanguageDetectionResult } from './language-detector.js';
17
+ /**
18
+ * Options for LanguageRouter
19
+ */
20
+ export interface LanguageRouterOptions {
21
+ /** Whether to throw on unsupported files (default: false) */
22
+ throwOnUnsupported?: boolean;
23
+ /** Custom metrics instance (uses default if not provided) */
24
+ metrics?: AnalysisMetrics;
25
+ /** Languages to register adapters for (default: all) */
26
+ languages?: SupportedLanguage[];
27
+ /** Enable language detection for extensionless files (default: true) */
28
+ enableLanguageDetection?: boolean;
29
+ /** Minimum confidence for language detection (default: 0.5) */
30
+ detectionMinConfidence?: number;
31
+ }
32
+ /**
33
+ * Routes files to appropriate language adapters
34
+ *
35
+ * Manages a registry of language adapters and provides:
36
+ * - File extension to adapter mapping
37
+ * - Aggregated framework detection rules
38
+ * - Unified parsing interface
39
+ *
40
+ * @example
41
+ * ```typescript
42
+ * const router = new LanguageRouter()
43
+ *
44
+ * // Register adapters
45
+ * router.registerAdapter(new TypeScriptAdapter())
46
+ * router.registerAdapter(new PythonAdapter())
47
+ *
48
+ * // Route files to appropriate adapter
49
+ * const adapter = router.getAdapter('src/main.py')
50
+ * const result = adapter.parseFile(content, 'src/main.py')
51
+ * ```
52
+ */
53
+ export declare class LanguageRouter {
54
+ private adapters;
55
+ private extensionMap;
56
+ private readonly throwOnUnsupported;
57
+ private readonly metrics;
58
+ private readonly languageDetector;
59
+ private readonly enableLanguageDetection;
60
+ constructor(options?: LanguageRouterOptions);
61
+ /**
62
+ * Create a LanguageRouter with all adapters pre-registered
63
+ *
64
+ * Uses AdapterFactory to create adapters for all supported languages.
65
+ *
66
+ * @param options - Router options
67
+ * @returns Configured LanguageRouter
68
+ *
69
+ * @example
70
+ * ```typescript
71
+ * // Create router with all language adapters
72
+ * const router = LanguageRouter.createWithAllAdapters()
73
+ *
74
+ * // Create router with specific languages only
75
+ * const router2 = LanguageRouter.createWithAllAdapters({
76
+ * languages: ['typescript', 'python']
77
+ * })
78
+ * ```
79
+ */
80
+ static createWithAllAdapters(options?: LanguageRouterOptions): LanguageRouter;
81
+ /**
82
+ * Create a LanguageRouter using cached adapters from factory
83
+ *
84
+ * Reuses adapter instances from the factory cache for efficiency.
85
+ *
86
+ * @param options - Router options
87
+ * @returns Configured LanguageRouter
88
+ */
89
+ static createWithCachedAdapters(options?: LanguageRouterOptions): LanguageRouter;
90
+ /**
91
+ * Register a language adapter
92
+ *
93
+ * The adapter's extensions are mapped for fast lookup.
94
+ * If an adapter for the same language exists, it is replaced.
95
+ *
96
+ * @param adapter - Adapter to register
97
+ *
98
+ * @example
99
+ * ```typescript
100
+ * router.registerAdapter(new PythonAdapter())
101
+ * // Now handles .py, .pyi, .pyw files
102
+ * ```
103
+ */
104
+ registerAdapter(adapter: LanguageAdapter): void;
105
+ /**
106
+ * Unregister a language adapter
107
+ *
108
+ * @param language - Language to unregister
109
+ * @returns True if adapter was found and removed
110
+ */
111
+ unregisterAdapter(language: SupportedLanguage): boolean;
112
+ /**
113
+ * Get adapter for a file path
114
+ *
115
+ * @param filePath - Path to the file
116
+ * @returns Adapter that can handle the file
117
+ * @throws Error if no adapter found and throwOnUnsupported is true
118
+ *
119
+ * @example
120
+ * ```typescript
121
+ * const adapter = router.getAdapter('src/main.py')
122
+ * // Returns PythonAdapter
123
+ *
124
+ * const adapter2 = router.getAdapter('unknown.xyz')
125
+ * // Throws if throwOnUnsupported, otherwise returns null
126
+ * ```
127
+ */
128
+ getAdapter(filePath: string): LanguageAdapter;
129
+ /**
130
+ * Try to get adapter for a file path (returns null instead of throwing)
131
+ *
132
+ * SMI-1340: For extensionless files, attempts language detection
133
+ * from content if provided and detection is enabled.
134
+ *
135
+ * @param filePath - Path to the file
136
+ * @param content - Optional file content for language detection
137
+ * @returns Adapter or null if not supported
138
+ *
139
+ * @example
140
+ * ```typescript
141
+ * // With extension - uses extension mapping
142
+ * const adapter = router.tryGetAdapter('main.py')
143
+ *
144
+ * // Without extension - attempts content detection
145
+ * const adapter2 = router.tryGetAdapter('Makefile', 'package main\n...')
146
+ * ```
147
+ */
148
+ tryGetAdapter(filePath: string, content?: string): LanguageAdapter | null;
149
+ /**
150
+ * Detect language from file content
151
+ *
152
+ * Uses heuristics to determine the language of a file:
153
+ * - Shebang analysis (#!/usr/bin/python, etc.)
154
+ * - Content patterns (import statements, syntax markers)
155
+ * - Statistical keyword analysis
156
+ *
157
+ * @param content - File content to analyze
158
+ * @returns Detection result with language and confidence
159
+ *
160
+ * @example
161
+ * ```typescript
162
+ * const result = router.detectLanguageFromContent('#!/usr/bin/env python3\nprint("hello")')
163
+ * // { language: 'python', confidence: 1.0, method: 'shebang', evidence: [...] }
164
+ * ```
165
+ */
166
+ detectLanguageFromContent(content: string): LanguageDetectionResult;
167
+ /**
168
+ * Try to get adapter using content detection
169
+ *
170
+ * Specifically for extensionless files where content-based
171
+ * detection is required.
172
+ *
173
+ * @param content - File content to analyze
174
+ * @returns Object with adapter and detection result
175
+ */
176
+ tryGetAdapterFromContent(content: string): {
177
+ adapter: LanguageAdapter | null;
178
+ detection: LanguageDetectionResult;
179
+ };
180
+ /**
181
+ * Check if a file can be handled
182
+ *
183
+ * @param filePath - Path to check
184
+ * @returns True if an adapter is registered for this file type
185
+ *
186
+ * @example
187
+ * ```typescript
188
+ * router.canHandle('main.py') // true (if Python adapter registered)
189
+ * router.canHandle('main.xyz') // false
190
+ * ```
191
+ */
192
+ canHandle(filePath: string): boolean;
193
+ /**
194
+ * Get language for a file path
195
+ *
196
+ * @param filePath - Path to check
197
+ * @returns Language or null if not supported
198
+ */
199
+ getLanguage(filePath: string): SupportedLanguage | null;
200
+ /**
201
+ * Parse a file using the appropriate adapter
202
+ *
203
+ * Convenience method that combines getAdapter and parseFile.
204
+ * SMI-1337: Records metrics for file parsing.
205
+ *
206
+ * @param content - File content
207
+ * @param filePath - Path to the file
208
+ * @returns Parse result
209
+ * @throws Error if no adapter for file type
210
+ */
211
+ parseFile(content: string, filePath: string): ParseResult;
212
+ /**
213
+ * Get list of supported languages
214
+ *
215
+ * @returns Array of registered languages
216
+ */
217
+ getSupportedLanguages(): SupportedLanguage[];
218
+ /**
219
+ * Get list of supported file extensions
220
+ *
221
+ * @returns Array of extensions (with dot)
222
+ */
223
+ getSupportedExtensions(): string[];
224
+ /**
225
+ * Get adapter for a specific language
226
+ *
227
+ * @param language - Language to get adapter for
228
+ * @returns Adapter or undefined if not registered
229
+ */
230
+ getAdapterByLanguage(language: SupportedLanguage): LanguageAdapter | undefined;
231
+ /**
232
+ * Get all framework detection rules from all adapters
233
+ *
234
+ * Aggregates rules from all registered adapters for
235
+ * comprehensive framework detection.
236
+ *
237
+ * @returns Combined array of framework rules
238
+ *
239
+ * @example
240
+ * ```typescript
241
+ * const rules = router.getAllFrameworkRules()
242
+ * // Includes rules for React, Django, Gin, Actix, etc.
243
+ * ```
244
+ */
245
+ getAllFrameworkRules(): FrameworkRule[];
246
+ /**
247
+ * Get framework rules for a specific language
248
+ *
249
+ * @param language - Language to get rules for
250
+ * @returns Framework rules or empty array
251
+ */
252
+ getFrameworkRules(language: SupportedLanguage): FrameworkRule[];
253
+ /**
254
+ * Get number of registered adapters
255
+ */
256
+ get adapterCount(): number;
257
+ /**
258
+ * Clean up all adapters
259
+ *
260
+ * Disposes all registered adapters and clears the registry.
261
+ */
262
+ dispose(): void;
263
+ }
264
+ //# sourceMappingURL=router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../src/analysis/router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAEzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAC/E,OAAO,EAAsB,KAAK,eAAe,EAAE,MAAM,cAAc,CAAA;AACvE,OAAO,EAAoB,KAAK,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAEvF;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,6DAA6D;IAC7D,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,6DAA6D;IAC7D,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB,wDAAwD;IACxD,SAAS,CAAC,EAAE,iBAAiB,EAAE,CAAA;IAC/B,wEAAwE;IACxE,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC,+DAA+D;IAC/D,sBAAsB,CAAC,EAAE,MAAM,CAAA;CAChC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAqD;IACrE,OAAO,CAAC,YAAY,CAA0C;IAC9D,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAyB;IAC1D,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAS;gBAErC,OAAO,GAAE,qBAA0B;IAe/C;;;;;;;;;;;;;;;;;;OAkBG;IACH,MAAM,CAAC,qBAAqB,CAAC,OAAO,GAAE,qBAA0B,GAAG,cAAc;IAejF;;;;;;;OAOG;IACH,MAAM,CAAC,wBAAwB,CAAC,OAAO,GAAE,qBAA0B,GAAG,cAAc;IAepF;;;;;;;;;;;;;OAaG;IACH,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAkB/C;;;;;OAKG;IACH,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO;IAavD;;;;;;;;;;;;;;;OAeG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe;IAkB7C;;;;;;;;;;;;;;;;;;OAkBG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAoBzE;;;;;;;;;;;;;;;;OAgBG;IACH,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,uBAAuB;IAanE;;;;;;;;OAQG;IACH,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG;QACzC,OAAO,EAAE,eAAe,GAAG,IAAI,CAAA;QAC/B,SAAS,EAAE,uBAAuB,CAAA;KACnC;IAWD;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAKpC;;;;;OAKG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IAKvD;;;;;;;;;;OAUG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW;IAkBzD;;;;OAIG;IACH,qBAAqB,IAAI,iBAAiB,EAAE;IAI5C;;;;OAIG;IACH,sBAAsB,IAAI,MAAM,EAAE;IAIlC;;;;;OAKG;IACH,oBAAoB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,eAAe,GAAG,SAAS;IAI9E;;;;;;;;;;;;;OAaG;IACH,oBAAoB,IAAI,aAAa,EAAE;IAUvC;;;;;OAKG;IACH,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,aAAa,EAAE;IAK/D;;OAEG;IACH,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED;;;;OAIG;IACH,OAAO,IAAI,IAAI;CAWhB"}