@skillsmith/core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (686) hide show
  1. package/dist/.tsbuildinfo +1 -0
  2. package/dist/src/__tests__/errors.test.d.ts +5 -0
  3. package/dist/src/__tests__/errors.test.d.ts.map +1 -0
  4. package/dist/src/__tests__/errors.test.js +115 -0
  5. package/dist/src/__tests__/errors.test.js.map +1 -0
  6. package/dist/src/activation/ActivationManager.d.ts +141 -0
  7. package/dist/src/activation/ActivationManager.d.ts.map +1 -0
  8. package/dist/src/activation/ActivationManager.js +282 -0
  9. package/dist/src/activation/ActivationManager.js.map +1 -0
  10. package/dist/src/activation/ZeroConfigActivator.d.ts +126 -0
  11. package/dist/src/activation/ZeroConfigActivator.d.ts.map +1 -0
  12. package/dist/src/activation/ZeroConfigActivator.js +259 -0
  13. package/dist/src/activation/ZeroConfigActivator.js.map +1 -0
  14. package/dist/src/activation/index.d.ts +8 -0
  15. package/dist/src/activation/index.d.ts.map +1 -0
  16. package/dist/src/activation/index.js +8 -0
  17. package/dist/src/activation/index.js.map +1 -0
  18. package/dist/src/analysis/CodebaseAnalyzer.d.ts +175 -0
  19. package/dist/src/analysis/CodebaseAnalyzer.d.ts.map +1 -0
  20. package/dist/src/analysis/CodebaseAnalyzer.js +495 -0
  21. package/dist/src/analysis/CodebaseAnalyzer.js.map +1 -0
  22. package/dist/src/analysis/index.d.ts +10 -0
  23. package/dist/src/analysis/index.d.ts.map +1 -0
  24. package/dist/src/analysis/index.js +10 -0
  25. package/dist/src/analysis/index.js.map +1 -0
  26. package/dist/src/analytics/AnalyticsRepository.d.ts +97 -0
  27. package/dist/src/analytics/AnalyticsRepository.d.ts.map +1 -0
  28. package/dist/src/analytics/AnalyticsRepository.js +376 -0
  29. package/dist/src/analytics/AnalyticsRepository.js.map +1 -0
  30. package/dist/src/analytics/ExperimentService.d.ts +70 -0
  31. package/dist/src/analytics/ExperimentService.d.ts.map +1 -0
  32. package/dist/src/analytics/ExperimentService.js +251 -0
  33. package/dist/src/analytics/ExperimentService.js.map +1 -0
  34. package/dist/src/analytics/ROIDashboardService.d.ts +55 -0
  35. package/dist/src/analytics/ROIDashboardService.d.ts.map +1 -0
  36. package/dist/src/analytics/ROIDashboardService.js +304 -0
  37. package/dist/src/analytics/ROIDashboardService.js.map +1 -0
  38. package/dist/src/analytics/UsageAnalyticsService.d.ts +55 -0
  39. package/dist/src/analytics/UsageAnalyticsService.d.ts.map +1 -0
  40. package/dist/src/analytics/UsageAnalyticsService.js +180 -0
  41. package/dist/src/analytics/UsageAnalyticsService.js.map +1 -0
  42. package/dist/src/analytics/anonymizer.d.ts +53 -0
  43. package/dist/src/analytics/anonymizer.d.ts.map +1 -0
  44. package/dist/src/analytics/anonymizer.js +107 -0
  45. package/dist/src/analytics/anonymizer.js.map +1 -0
  46. package/dist/src/analytics/constants.d.ts +19 -0
  47. package/dist/src/analytics/constants.d.ts.map +1 -0
  48. package/dist/src/analytics/constants.js +19 -0
  49. package/dist/src/analytics/constants.js.map +1 -0
  50. package/dist/src/analytics/index.d.ts +23 -0
  51. package/dist/src/analytics/index.d.ts.map +1 -0
  52. package/dist/src/analytics/index.js +23 -0
  53. package/dist/src/analytics/index.js.map +1 -0
  54. package/dist/src/analytics/metrics-aggregator.d.ts +98 -0
  55. package/dist/src/analytics/metrics-aggregator.d.ts.map +1 -0
  56. package/dist/src/analytics/metrics-aggregator.js +176 -0
  57. package/dist/src/analytics/metrics-aggregator.js.map +1 -0
  58. package/dist/src/analytics/metrics-exporter.d.ts +148 -0
  59. package/dist/src/analytics/metrics-exporter.d.ts.map +1 -0
  60. package/dist/src/analytics/metrics-exporter.js +244 -0
  61. package/dist/src/analytics/metrics-exporter.js.map +1 -0
  62. package/dist/src/analytics/schema.d.ts +20 -0
  63. package/dist/src/analytics/schema.d.ts.map +1 -0
  64. package/dist/src/analytics/schema.js +125 -0
  65. package/dist/src/analytics/schema.js.map +1 -0
  66. package/dist/src/analytics/storage.d.ts +76 -0
  67. package/dist/src/analytics/storage.d.ts.map +1 -0
  68. package/dist/src/analytics/storage.js +180 -0
  69. package/dist/src/analytics/storage.js.map +1 -0
  70. package/dist/src/analytics/types.d.ts +277 -0
  71. package/dist/src/analytics/types.d.ts.map +1 -0
  72. package/dist/src/analytics/types.js +10 -0
  73. package/dist/src/analytics/types.js.map +1 -0
  74. package/dist/src/analytics/usage-tracker.d.ts +132 -0
  75. package/dist/src/analytics/usage-tracker.d.ts.map +1 -0
  76. package/dist/src/analytics/usage-tracker.js +213 -0
  77. package/dist/src/analytics/usage-tracker.js.map +1 -0
  78. package/dist/src/benchmarks/BenchmarkRunner.d.ts +258 -0
  79. package/dist/src/benchmarks/BenchmarkRunner.d.ts.map +1 -0
  80. package/dist/src/benchmarks/BenchmarkRunner.js +453 -0
  81. package/dist/src/benchmarks/BenchmarkRunner.js.map +1 -0
  82. package/dist/src/benchmarks/IndexBenchmark.d.ts +101 -0
  83. package/dist/src/benchmarks/IndexBenchmark.d.ts.map +1 -0
  84. package/dist/src/benchmarks/IndexBenchmark.js +314 -0
  85. package/dist/src/benchmarks/IndexBenchmark.js.map +1 -0
  86. package/dist/src/benchmarks/MemoryProfiler.d.ts +266 -0
  87. package/dist/src/benchmarks/MemoryProfiler.d.ts.map +1 -0
  88. package/dist/src/benchmarks/MemoryProfiler.js +404 -0
  89. package/dist/src/benchmarks/MemoryProfiler.js.map +1 -0
  90. package/dist/src/benchmarks/SearchBenchmark.d.ts +71 -0
  91. package/dist/src/benchmarks/SearchBenchmark.d.ts.map +1 -0
  92. package/dist/src/benchmarks/SearchBenchmark.js +321 -0
  93. package/dist/src/benchmarks/SearchBenchmark.js.map +1 -0
  94. package/dist/src/benchmarks/cacheBenchmark.d.ts +75 -0
  95. package/dist/src/benchmarks/cacheBenchmark.d.ts.map +1 -0
  96. package/dist/src/benchmarks/cacheBenchmark.js +325 -0
  97. package/dist/src/benchmarks/cacheBenchmark.js.map +1 -0
  98. package/dist/src/benchmarks/cli.d.ts +17 -0
  99. package/dist/src/benchmarks/cli.d.ts.map +1 -0
  100. package/dist/src/benchmarks/cli.js +140 -0
  101. package/dist/src/benchmarks/cli.js.map +1 -0
  102. package/dist/src/benchmarks/embeddingBenchmark.d.ts +86 -0
  103. package/dist/src/benchmarks/embeddingBenchmark.d.ts.map +1 -0
  104. package/dist/src/benchmarks/embeddingBenchmark.js +329 -0
  105. package/dist/src/benchmarks/embeddingBenchmark.js.map +1 -0
  106. package/dist/src/benchmarks/index.d.ts +51 -0
  107. package/dist/src/benchmarks/index.d.ts.map +1 -0
  108. package/dist/src/benchmarks/index.js +201 -0
  109. package/dist/src/benchmarks/index.js.map +1 -0
  110. package/dist/src/benchmarks/stats.d.ts +56 -0
  111. package/dist/src/benchmarks/stats.d.ts.map +1 -0
  112. package/dist/src/benchmarks/stats.js +86 -0
  113. package/dist/src/benchmarks/stats.js.map +1 -0
  114. package/dist/src/cache/CacheEntry.d.ts +101 -0
  115. package/dist/src/cache/CacheEntry.d.ts.map +1 -0
  116. package/dist/src/cache/CacheEntry.js +238 -0
  117. package/dist/src/cache/CacheEntry.js.map +1 -0
  118. package/dist/src/cache/CacheManager.d.ts +167 -0
  119. package/dist/src/cache/CacheManager.d.ts.map +1 -0
  120. package/dist/src/cache/CacheManager.js +346 -0
  121. package/dist/src/cache/CacheManager.js.map +1 -0
  122. package/dist/src/cache/TieredCache.d.ts +97 -0
  123. package/dist/src/cache/TieredCache.d.ts.map +1 -0
  124. package/dist/src/cache/TieredCache.js +352 -0
  125. package/dist/src/cache/TieredCache.js.map +1 -0
  126. package/dist/src/cache/index.d.ts +63 -0
  127. package/dist/src/cache/index.d.ts.map +1 -0
  128. package/dist/src/cache/index.js +91 -0
  129. package/dist/src/cache/index.js.map +1 -0
  130. package/dist/src/cache/lru.d.ts +68 -0
  131. package/dist/src/cache/lru.d.ts.map +1 -0
  132. package/dist/src/cache/lru.js +105 -0
  133. package/dist/src/cache/lru.js.map +1 -0
  134. package/dist/src/cache/sqlite.d.ts +59 -0
  135. package/dist/src/cache/sqlite.d.ts.map +1 -0
  136. package/dist/src/cache/sqlite.js +159 -0
  137. package/dist/src/cache/sqlite.js.map +1 -0
  138. package/dist/src/db/quarantine-schema.d.ts +81 -0
  139. package/dist/src/db/quarantine-schema.d.ts.map +1 -0
  140. package/dist/src/db/quarantine-schema.js +110 -0
  141. package/dist/src/db/quarantine-schema.js.map +1 -0
  142. package/dist/src/db/schema.d.ts +65 -0
  143. package/dist/src/db/schema.d.ts.map +1 -0
  144. package/dist/src/db/schema.js +318 -0
  145. package/dist/src/db/schema.js.map +1 -0
  146. package/dist/src/embeddings/index.d.ts +158 -0
  147. package/dist/src/embeddings/index.d.ts.map +1 -0
  148. package/dist/src/embeddings/index.js +397 -0
  149. package/dist/src/embeddings/index.js.map +1 -0
  150. package/dist/src/errors/SkillsmithError.d.ts +118 -0
  151. package/dist/src/errors/SkillsmithError.d.ts.map +1 -0
  152. package/dist/src/errors/SkillsmithError.js +194 -0
  153. package/dist/src/errors/SkillsmithError.js.map +1 -0
  154. package/dist/src/errors/index.d.ts +36 -0
  155. package/dist/src/errors/index.d.ts.map +1 -0
  156. package/dist/src/errors/index.js +36 -0
  157. package/dist/src/errors/index.js.map +1 -0
  158. package/dist/src/errors.d.ts +72 -0
  159. package/dist/src/errors.d.ts.map +1 -0
  160. package/dist/src/errors.js +123 -0
  161. package/dist/src/errors.js.map +1 -0
  162. package/dist/src/index.d.ts +56 -0
  163. package/dist/src/index.d.ts.map +1 -0
  164. package/dist/src/index.js +73 -0
  165. package/dist/src/index.js.map +1 -0
  166. package/dist/src/index.test.d.ts +2 -0
  167. package/dist/src/index.test.d.ts.map +1 -0
  168. package/dist/src/index.test.js +35 -0
  169. package/dist/src/index.test.js.map +1 -0
  170. package/dist/src/indexer/GitHubIndexer.d.ts +107 -0
  171. package/dist/src/indexer/GitHubIndexer.d.ts.map +1 -0
  172. package/dist/src/indexer/GitHubIndexer.js +202 -0
  173. package/dist/src/indexer/GitHubIndexer.js.map +1 -0
  174. package/dist/src/indexer/PartitionStrategy.d.ts +115 -0
  175. package/dist/src/indexer/PartitionStrategy.d.ts.map +1 -0
  176. package/dist/src/indexer/PartitionStrategy.js +207 -0
  177. package/dist/src/indexer/PartitionStrategy.js.map +1 -0
  178. package/dist/src/indexer/SkillParser.d.ts +112 -0
  179. package/dist/src/indexer/SkillParser.d.ts.map +1 -0
  180. package/dist/src/indexer/SkillParser.js +281 -0
  181. package/dist/src/indexer/SkillParser.js.map +1 -0
  182. package/dist/src/indexer/SwarmIndexer.d.ts +163 -0
  183. package/dist/src/indexer/SwarmIndexer.d.ts.map +1 -0
  184. package/dist/src/indexer/SwarmIndexer.js +300 -0
  185. package/dist/src/indexer/SwarmIndexer.js.map +1 -0
  186. package/dist/src/indexer/index.d.ts +12 -0
  187. package/dist/src/indexer/index.d.ts.map +1 -0
  188. package/dist/src/indexer/index.js +16 -0
  189. package/dist/src/indexer/index.js.map +1 -0
  190. package/dist/src/learning/interfaces.d.ts +338 -0
  191. package/dist/src/learning/interfaces.d.ts.map +1 -0
  192. package/dist/src/learning/interfaces.js +13 -0
  193. package/dist/src/learning/interfaces.js.map +1 -0
  194. package/dist/src/learning/types.d.ts +284 -0
  195. package/dist/src/learning/types.d.ts.map +1 -0
  196. package/dist/src/learning/types.js +112 -0
  197. package/dist/src/learning/types.js.map +1 -0
  198. package/dist/src/matching/OverlapDetector.d.ts +152 -0
  199. package/dist/src/matching/OverlapDetector.d.ts.map +1 -0
  200. package/dist/src/matching/OverlapDetector.js +218 -0
  201. package/dist/src/matching/OverlapDetector.js.map +1 -0
  202. package/dist/src/matching/SkillMatcher.d.ts +125 -0
  203. package/dist/src/matching/SkillMatcher.d.ts.map +1 -0
  204. package/dist/src/matching/SkillMatcher.js +206 -0
  205. package/dist/src/matching/SkillMatcher.js.map +1 -0
  206. package/dist/src/matching/index.d.ts +14 -0
  207. package/dist/src/matching/index.d.ts.map +1 -0
  208. package/dist/src/matching/index.js +12 -0
  209. package/dist/src/matching/index.js.map +1 -0
  210. package/dist/src/pipeline/DailyIndexPipeline.d.ts +220 -0
  211. package/dist/src/pipeline/DailyIndexPipeline.d.ts.map +1 -0
  212. package/dist/src/pipeline/DailyIndexPipeline.js +320 -0
  213. package/dist/src/pipeline/DailyIndexPipeline.js.map +1 -0
  214. package/dist/src/pipeline/index.d.ts +9 -0
  215. package/dist/src/pipeline/index.d.ts.map +1 -0
  216. package/dist/src/pipeline/index.js +9 -0
  217. package/dist/src/pipeline/index.js.map +1 -0
  218. package/dist/src/repositories/CacheRepository.d.ts +60 -0
  219. package/dist/src/repositories/CacheRepository.d.ts.map +1 -0
  220. package/dist/src/repositories/CacheRepository.js +148 -0
  221. package/dist/src/repositories/CacheRepository.js.map +1 -0
  222. package/dist/src/repositories/IndexerRepository.d.ts +126 -0
  223. package/dist/src/repositories/IndexerRepository.d.ts.map +1 -0
  224. package/dist/src/repositories/IndexerRepository.js +270 -0
  225. package/dist/src/repositories/IndexerRepository.js.map +1 -0
  226. package/dist/src/repositories/QuarantineRepository.d.ts +255 -0
  227. package/dist/src/repositories/QuarantineRepository.d.ts.map +1 -0
  228. package/dist/src/repositories/QuarantineRepository.js +445 -0
  229. package/dist/src/repositories/QuarantineRepository.js.map +1 -0
  230. package/dist/src/repositories/SkillRepository.d.ts +78 -0
  231. package/dist/src/repositories/SkillRepository.d.ts.map +1 -0
  232. package/dist/src/repositories/SkillRepository.js +208 -0
  233. package/dist/src/repositories/SkillRepository.js.map +1 -0
  234. package/dist/src/scoring/QualityScorer.d.ts +188 -0
  235. package/dist/src/scoring/QualityScorer.d.ts.map +1 -0
  236. package/dist/src/scoring/QualityScorer.js +342 -0
  237. package/dist/src/scoring/QualityScorer.js.map +1 -0
  238. package/dist/src/scoring/index.d.ts +9 -0
  239. package/dist/src/scoring/index.d.ts.map +1 -0
  240. package/dist/src/scoring/index.js +9 -0
  241. package/dist/src/scoring/index.js.map +1 -0
  242. package/dist/src/scripts/__tests__/scan-imported-skills.test.d.ts +5 -0
  243. package/dist/src/scripts/__tests__/scan-imported-skills.test.d.ts.map +1 -0
  244. package/dist/src/scripts/__tests__/scan-imported-skills.test.js +365 -0
  245. package/dist/src/scripts/__tests__/scan-imported-skills.test.js.map +1 -0
  246. package/dist/src/scripts/import-github-skills.d.ts +24 -0
  247. package/dist/src/scripts/import-github-skills.d.ts.map +1 -0
  248. package/dist/src/scripts/import-github-skills.js +545 -0
  249. package/dist/src/scripts/import-github-skills.js.map +1 -0
  250. package/dist/src/scripts/import-to-database.d.ts +60 -0
  251. package/dist/src/scripts/import-to-database.d.ts.map +1 -0
  252. package/dist/src/scripts/import-to-database.js +307 -0
  253. package/dist/src/scripts/import-to-database.js.map +1 -0
  254. package/dist/src/scripts/scan-imported-skills.d.ts +15 -0
  255. package/dist/src/scripts/scan-imported-skills.d.ts.map +1 -0
  256. package/dist/src/scripts/scan-imported-skills.js +405 -0
  257. package/dist/src/scripts/scan-imported-skills.js.map +1 -0
  258. package/dist/src/scripts/validate-skills.d.ts +180 -0
  259. package/dist/src/scripts/validate-skills.d.ts.map +1 -0
  260. package/dist/src/scripts/validate-skills.js +572 -0
  261. package/dist/src/scripts/validate-skills.js.map +1 -0
  262. package/dist/src/search/hybrid.d.ts +85 -0
  263. package/dist/src/search/hybrid.d.ts.map +1 -0
  264. package/dist/src/search/hybrid.js +291 -0
  265. package/dist/src/search/hybrid.js.map +1 -0
  266. package/dist/src/search/index.d.ts +6 -0
  267. package/dist/src/search/index.d.ts.map +1 -0
  268. package/dist/src/search/index.js +5 -0
  269. package/dist/src/search/index.js.map +1 -0
  270. package/dist/src/security/AuditLogger.d.ts +197 -0
  271. package/dist/src/security/AuditLogger.d.ts.map +1 -0
  272. package/dist/src/security/AuditLogger.js +398 -0
  273. package/dist/src/security/AuditLogger.js.map +1 -0
  274. package/dist/src/security/RateLimiter.d.ts +337 -0
  275. package/dist/src/security/RateLimiter.d.ts.map +1 -0
  276. package/dist/src/security/RateLimiter.js +782 -0
  277. package/dist/src/security/RateLimiter.js.map +1 -0
  278. package/dist/src/security/__tests__/pathValidation.test.d.ts +8 -0
  279. package/dist/src/security/__tests__/pathValidation.test.d.ts.map +1 -0
  280. package/dist/src/security/__tests__/pathValidation.test.js +249 -0
  281. package/dist/src/security/__tests__/pathValidation.test.js.map +1 -0
  282. package/dist/src/security/index.d.ts +18 -0
  283. package/dist/src/security/index.d.ts.map +1 -0
  284. package/dist/src/security/index.js +14 -0
  285. package/dist/src/security/index.js.map +1 -0
  286. package/dist/src/security/pathValidation.d.ts +95 -0
  287. package/dist/src/security/pathValidation.d.ts.map +1 -0
  288. package/dist/src/security/pathValidation.js +216 -0
  289. package/dist/src/security/pathValidation.js.map +1 -0
  290. package/dist/src/security/sanitization.d.ts +123 -0
  291. package/dist/src/security/sanitization.d.ts.map +1 -0
  292. package/dist/src/security/sanitization.js +378 -0
  293. package/dist/src/security/sanitization.js.map +1 -0
  294. package/dist/src/security/scanner.d.ts +151 -0
  295. package/dist/src/security/scanner.d.ts.map +1 -0
  296. package/dist/src/security/scanner.js +599 -0
  297. package/dist/src/security/scanner.js.map +1 -0
  298. package/dist/src/services/SearchService.d.ts +88 -0
  299. package/dist/src/services/SearchService.d.ts.map +1 -0
  300. package/dist/src/services/SearchService.js +305 -0
  301. package/dist/src/services/SearchService.js.map +1 -0
  302. package/dist/src/session/SessionContext.d.ts +116 -0
  303. package/dist/src/session/SessionContext.d.ts.map +1 -0
  304. package/dist/src/session/SessionContext.js +134 -0
  305. package/dist/src/session/SessionContext.js.map +1 -0
  306. package/dist/src/session/SessionHealthMonitor.d.ts +249 -0
  307. package/dist/src/session/SessionHealthMonitor.d.ts.map +1 -0
  308. package/dist/src/session/SessionHealthMonitor.js +302 -0
  309. package/dist/src/session/SessionHealthMonitor.js.map +1 -0
  310. package/dist/src/session/SessionManager.d.ts +179 -0
  311. package/dist/src/session/SessionManager.d.ts.map +1 -0
  312. package/dist/src/session/SessionManager.js +451 -0
  313. package/dist/src/session/SessionManager.js.map +1 -0
  314. package/dist/src/session/SessionRecovery.d.ts +84 -0
  315. package/dist/src/session/SessionRecovery.d.ts.map +1 -0
  316. package/dist/src/session/SessionRecovery.js +257 -0
  317. package/dist/src/session/SessionRecovery.js.map +1 -0
  318. package/dist/src/session/index.d.ts +40 -0
  319. package/dist/src/session/index.d.ts.map +1 -0
  320. package/dist/src/session/index.js +44 -0
  321. package/dist/src/session/index.js.map +1 -0
  322. package/dist/src/sources/BaseSourceAdapter.d.ts +144 -0
  323. package/dist/src/sources/BaseSourceAdapter.d.ts.map +1 -0
  324. package/dist/src/sources/BaseSourceAdapter.js +287 -0
  325. package/dist/src/sources/BaseSourceAdapter.js.map +1 -0
  326. package/dist/src/sources/GitHubSourceAdapter.d.ts +98 -0
  327. package/dist/src/sources/GitHubSourceAdapter.d.ts.map +1 -0
  328. package/dist/src/sources/GitHubSourceAdapter.js +269 -0
  329. package/dist/src/sources/GitHubSourceAdapter.js.map +1 -0
  330. package/dist/src/sources/GitLabSourceAdapter.d.ts +102 -0
  331. package/dist/src/sources/GitLabSourceAdapter.d.ts.map +1 -0
  332. package/dist/src/sources/GitLabSourceAdapter.js +310 -0
  333. package/dist/src/sources/GitLabSourceAdapter.js.map +1 -0
  334. package/dist/src/sources/ISourceAdapter.d.ts +110 -0
  335. package/dist/src/sources/ISourceAdapter.d.ts.map +1 -0
  336. package/dist/src/sources/ISourceAdapter.js +19 -0
  337. package/dist/src/sources/ISourceAdapter.js.map +1 -0
  338. package/dist/src/sources/LocalFilesystemAdapter.d.ts +112 -0
  339. package/dist/src/sources/LocalFilesystemAdapter.d.ts.map +1 -0
  340. package/dist/src/sources/LocalFilesystemAdapter.js +340 -0
  341. package/dist/src/sources/LocalFilesystemAdapter.js.map +1 -0
  342. package/dist/src/sources/RawUrlSourceAdapter.d.ts +128 -0
  343. package/dist/src/sources/RawUrlSourceAdapter.d.ts.map +1 -0
  344. package/dist/src/sources/RawUrlSourceAdapter.js +282 -0
  345. package/dist/src/sources/RawUrlSourceAdapter.js.map +1 -0
  346. package/dist/src/sources/SourceAdapterRegistry.d.ts +156 -0
  347. package/dist/src/sources/SourceAdapterRegistry.d.ts.map +1 -0
  348. package/dist/src/sources/SourceAdapterRegistry.js +242 -0
  349. package/dist/src/sources/SourceAdapterRegistry.js.map +1 -0
  350. package/dist/src/sources/SourceIndexer.d.ts +119 -0
  351. package/dist/src/sources/SourceIndexer.d.ts.map +1 -0
  352. package/dist/src/sources/SourceIndexer.js +285 -0
  353. package/dist/src/sources/SourceIndexer.js.map +1 -0
  354. package/dist/src/sources/index.d.ts +45 -0
  355. package/dist/src/sources/index.d.ts.map +1 -0
  356. package/dist/src/sources/index.js +51 -0
  357. package/dist/src/sources/index.js.map +1 -0
  358. package/dist/src/sources/shared.d.ts +125 -0
  359. package/dist/src/sources/shared.d.ts.map +1 -0
  360. package/dist/src/sources/shared.js +191 -0
  361. package/dist/src/sources/shared.js.map +1 -0
  362. package/dist/src/sources/types.d.ts +204 -0
  363. package/dist/src/sources/types.d.ts.map +1 -0
  364. package/dist/src/sources/types.js +6 -0
  365. package/dist/src/sources/types.js.map +1 -0
  366. package/dist/src/telemetry/index.d.ts +25 -0
  367. package/dist/src/telemetry/index.d.ts.map +1 -0
  368. package/dist/src/telemetry/index.js +32 -0
  369. package/dist/src/telemetry/index.js.map +1 -0
  370. package/dist/src/telemetry/metrics.d.ts +171 -0
  371. package/dist/src/telemetry/metrics.d.ts.map +1 -0
  372. package/dist/src/telemetry/metrics.js +401 -0
  373. package/dist/src/telemetry/metrics.js.map +1 -0
  374. package/dist/src/telemetry/prometheus.d.ts +81 -0
  375. package/dist/src/telemetry/prometheus.d.ts.map +1 -0
  376. package/dist/src/telemetry/prometheus.js +252 -0
  377. package/dist/src/telemetry/prometheus.js.map +1 -0
  378. package/dist/src/telemetry/tracer.d.ts +151 -0
  379. package/dist/src/telemetry/tracer.d.ts.map +1 -0
  380. package/dist/src/telemetry/tracer.js +391 -0
  381. package/dist/src/telemetry/tracer.js.map +1 -0
  382. package/dist/src/triggers/ContextScorer.d.ts +118 -0
  383. package/dist/src/triggers/ContextScorer.d.ts.map +1 -0
  384. package/dist/src/triggers/ContextScorer.js +265 -0
  385. package/dist/src/triggers/ContextScorer.js.map +1 -0
  386. package/dist/src/triggers/TriggerDetector.d.ts +178 -0
  387. package/dist/src/triggers/TriggerDetector.d.ts.map +1 -0
  388. package/dist/src/triggers/TriggerDetector.js +390 -0
  389. package/dist/src/triggers/TriggerDetector.js.map +1 -0
  390. package/dist/src/triggers/__tests__/ContextScorer.test.d.ts +6 -0
  391. package/dist/src/triggers/__tests__/ContextScorer.test.d.ts.map +1 -0
  392. package/dist/src/triggers/__tests__/ContextScorer.test.js +307 -0
  393. package/dist/src/triggers/__tests__/ContextScorer.test.js.map +1 -0
  394. package/dist/src/triggers/__tests__/TriggerDetector.test.d.ts +6 -0
  395. package/dist/src/triggers/__tests__/TriggerDetector.test.d.ts.map +1 -0
  396. package/dist/src/triggers/__tests__/TriggerDetector.test.js +249 -0
  397. package/dist/src/triggers/__tests__/TriggerDetector.test.js.map +1 -0
  398. package/dist/src/triggers/index.d.ts +8 -0
  399. package/dist/src/triggers/index.d.ts.map +1 -0
  400. package/dist/src/triggers/index.js +8 -0
  401. package/dist/src/triggers/index.js.map +1 -0
  402. package/dist/src/types/skill.d.ts +80 -0
  403. package/dist/src/types/skill.d.ts.map +1 -0
  404. package/dist/src/types/skill.js +5 -0
  405. package/dist/src/types/skill.js.map +1 -0
  406. package/dist/src/types.d.ts +88 -0
  407. package/dist/src/types.d.ts.map +1 -0
  408. package/dist/src/types.js +13 -0
  409. package/dist/src/types.js.map +1 -0
  410. package/dist/src/utils/index.d.ts +6 -0
  411. package/dist/src/utils/index.d.ts.map +1 -0
  412. package/dist/src/utils/index.js +6 -0
  413. package/dist/src/utils/index.js.map +1 -0
  414. package/dist/src/utils/logger.d.ts +172 -0
  415. package/dist/src/utils/logger.d.ts.map +1 -0
  416. package/dist/src/utils/logger.js +291 -0
  417. package/dist/src/utils/logger.js.map +1 -0
  418. package/dist/src/utils/retry.d.ts +97 -0
  419. package/dist/src/utils/retry.d.ts.map +1 -0
  420. package/dist/src/utils/retry.js +267 -0
  421. package/dist/src/utils/retry.js.map +1 -0
  422. package/dist/src/validation/index.d.ts +118 -0
  423. package/dist/src/validation/index.d.ts.map +1 -0
  424. package/dist/src/validation/index.js +434 -0
  425. package/dist/src/validation/index.js.map +1 -0
  426. package/dist/src/webhooks/WebhookHandler.d.ts +117 -0
  427. package/dist/src/webhooks/WebhookHandler.d.ts.map +1 -0
  428. package/dist/src/webhooks/WebhookHandler.js +349 -0
  429. package/dist/src/webhooks/WebhookHandler.js.map +1 -0
  430. package/dist/src/webhooks/WebhookPayload.d.ts +238 -0
  431. package/dist/src/webhooks/WebhookPayload.d.ts.map +1 -0
  432. package/dist/src/webhooks/WebhookPayload.js +244 -0
  433. package/dist/src/webhooks/WebhookPayload.js.map +1 -0
  434. package/dist/src/webhooks/WebhookQueue.d.ts +227 -0
  435. package/dist/src/webhooks/WebhookQueue.d.ts.map +1 -0
  436. package/dist/src/webhooks/WebhookQueue.js +328 -0
  437. package/dist/src/webhooks/WebhookQueue.js.map +1 -0
  438. package/dist/src/webhooks/index.d.ts +12 -0
  439. package/dist/src/webhooks/index.d.ts.map +1 -0
  440. package/dist/src/webhooks/index.js +15 -0
  441. package/dist/src/webhooks/index.js.map +1 -0
  442. package/dist/tests/Analytics.integration.test.d.ts +7 -0
  443. package/dist/tests/Analytics.integration.test.d.ts.map +1 -0
  444. package/dist/tests/Analytics.integration.test.js +367 -0
  445. package/dist/tests/Analytics.integration.test.js.map +1 -0
  446. package/dist/tests/AnalyticsRepository.test.d.ts +8 -0
  447. package/dist/tests/AnalyticsRepository.test.d.ts.map +1 -0
  448. package/dist/tests/AnalyticsRepository.test.js +399 -0
  449. package/dist/tests/AnalyticsRepository.test.js.map +1 -0
  450. package/dist/tests/AnalyticsStorage.test.d.ts +8 -0
  451. package/dist/tests/AnalyticsStorage.test.d.ts.map +1 -0
  452. package/dist/tests/AnalyticsStorage.test.js +271 -0
  453. package/dist/tests/AnalyticsStorage.test.js.map +1 -0
  454. package/dist/tests/AuditLogger.test.d.ts +8 -0
  455. package/dist/tests/AuditLogger.test.d.ts.map +1 -0
  456. package/dist/tests/AuditLogger.test.js +699 -0
  457. package/dist/tests/AuditLogger.test.js.map +1 -0
  458. package/dist/tests/BenchmarkRunner.test.d.ts +11 -0
  459. package/dist/tests/BenchmarkRunner.test.d.ts.map +1 -0
  460. package/dist/tests/BenchmarkRunner.test.js +641 -0
  461. package/dist/tests/BenchmarkRunner.test.js.map +1 -0
  462. package/dist/tests/CacheRepository.test.d.ts +5 -0
  463. package/dist/tests/CacheRepository.test.d.ts.map +1 -0
  464. package/dist/tests/CacheRepository.test.js +184 -0
  465. package/dist/tests/CacheRepository.test.js.map +1 -0
  466. package/dist/tests/CacheSecurity.test.d.ts +8 -0
  467. package/dist/tests/CacheSecurity.test.d.ts.map +1 -0
  468. package/dist/tests/CacheSecurity.test.js +273 -0
  469. package/dist/tests/CacheSecurity.test.js.map +1 -0
  470. package/dist/tests/CodebaseAnalyzer.test.d.ts +2 -0
  471. package/dist/tests/CodebaseAnalyzer.test.d.ts.map +1 -0
  472. package/dist/tests/CodebaseAnalyzer.test.js +347 -0
  473. package/dist/tests/CodebaseAnalyzer.test.js.map +1 -0
  474. package/dist/tests/DailyIndexPipeline.test.d.ts +7 -0
  475. package/dist/tests/DailyIndexPipeline.test.d.ts.map +1 -0
  476. package/dist/tests/DailyIndexPipeline.test.js +539 -0
  477. package/dist/tests/DailyIndexPipeline.test.js.map +1 -0
  478. package/dist/tests/EmbeddingService.test.d.ts +2 -0
  479. package/dist/tests/EmbeddingService.test.d.ts.map +1 -0
  480. package/dist/tests/EmbeddingService.test.js +252 -0
  481. package/dist/tests/EmbeddingService.test.js.map +1 -0
  482. package/dist/tests/ExperimentService.test.d.ts +7 -0
  483. package/dist/tests/ExperimentService.test.d.ts.map +1 -0
  484. package/dist/tests/ExperimentService.test.js +293 -0
  485. package/dist/tests/ExperimentService.test.js.map +1 -0
  486. package/dist/tests/GitHubIndexer.test.d.ts +10 -0
  487. package/dist/tests/GitHubIndexer.test.d.ts.map +1 -0
  488. package/dist/tests/GitHubIndexer.test.js +524 -0
  489. package/dist/tests/GitHubIndexer.test.js.map +1 -0
  490. package/dist/tests/GitHubSourceAdapter.test.d.ts +5 -0
  491. package/dist/tests/GitHubSourceAdapter.test.d.ts.map +1 -0
  492. package/dist/tests/GitHubSourceAdapter.test.js +385 -0
  493. package/dist/tests/GitHubSourceAdapter.test.js.map +1 -0
  494. package/dist/tests/MemoryProfiler.test.d.ts +12 -0
  495. package/dist/tests/MemoryProfiler.test.d.ts.map +1 -0
  496. package/dist/tests/MemoryProfiler.test.js +402 -0
  497. package/dist/tests/MemoryProfiler.test.js.map +1 -0
  498. package/dist/tests/OverlapDetector.test.d.ts +2 -0
  499. package/dist/tests/OverlapDetector.test.d.ts.map +1 -0
  500. package/dist/tests/OverlapDetector.test.js +340 -0
  501. package/dist/tests/OverlapDetector.test.js.map +1 -0
  502. package/dist/tests/QualityScorer.test.d.ts +7 -0
  503. package/dist/tests/QualityScorer.test.d.ts.map +1 -0
  504. package/dist/tests/QualityScorer.test.js +340 -0
  505. package/dist/tests/QualityScorer.test.js.map +1 -0
  506. package/dist/tests/QuarantineRepository.test.d.ts +7 -0
  507. package/dist/tests/QuarantineRepository.test.d.ts.map +1 -0
  508. package/dist/tests/QuarantineRepository.test.js +582 -0
  509. package/dist/tests/QuarantineRepository.test.js.map +1 -0
  510. package/dist/tests/ROIDashboardService.test.d.ts +7 -0
  511. package/dist/tests/ROIDashboardService.test.d.ts.map +1 -0
  512. package/dist/tests/ROIDashboardService.test.js +324 -0
  513. package/dist/tests/ROIDashboardService.test.js.map +1 -0
  514. package/dist/tests/RateLimiter.test.d.ts +7 -0
  515. package/dist/tests/RateLimiter.test.d.ts.map +1 -0
  516. package/dist/tests/RateLimiter.test.js +1017 -0
  517. package/dist/tests/RateLimiter.test.js.map +1 -0
  518. package/dist/tests/RawUrlSourceAdapter.security.test.d.ts +7 -0
  519. package/dist/tests/RawUrlSourceAdapter.security.test.d.ts.map +1 -0
  520. package/dist/tests/RawUrlSourceAdapter.security.test.js +455 -0
  521. package/dist/tests/RawUrlSourceAdapter.security.test.js.map +1 -0
  522. package/dist/tests/ScraperAdapters.test.d.ts +7 -0
  523. package/dist/tests/ScraperAdapters.test.d.ts.map +1 -0
  524. package/dist/tests/ScraperAdapters.test.js +748 -0
  525. package/dist/tests/ScraperAdapters.test.js.map +1 -0
  526. package/dist/tests/SearchQuality.test.d.ts +8 -0
  527. package/dist/tests/SearchQuality.test.d.ts.map +1 -0
  528. package/dist/tests/SearchQuality.test.js +397 -0
  529. package/dist/tests/SearchQuality.test.js.map +1 -0
  530. package/dist/tests/SearchService.test.d.ts +5 -0
  531. package/dist/tests/SearchService.test.d.ts.map +1 -0
  532. package/dist/tests/SearchService.test.js +218 -0
  533. package/dist/tests/SearchService.test.js.map +1 -0
  534. package/dist/tests/SecurityScanner.test.d.ts +6 -0
  535. package/dist/tests/SecurityScanner.test.d.ts.map +1 -0
  536. package/dist/tests/SecurityScanner.test.js +449 -0
  537. package/dist/tests/SecurityScanner.test.js.map +1 -0
  538. package/dist/tests/SessionHealthMonitor.test.d.ts +5 -0
  539. package/dist/tests/SessionHealthMonitor.test.d.ts.map +1 -0
  540. package/dist/tests/SessionHealthMonitor.test.js +449 -0
  541. package/dist/tests/SessionHealthMonitor.test.js.map +1 -0
  542. package/dist/tests/SessionManager.security.test.d.ts +10 -0
  543. package/dist/tests/SessionManager.security.test.d.ts.map +1 -0
  544. package/dist/tests/SessionManager.security.test.js +395 -0
  545. package/dist/tests/SessionManager.security.test.js.map +1 -0
  546. package/dist/tests/SessionManager.test.d.ts +8 -0
  547. package/dist/tests/SessionManager.test.d.ts.map +1 -0
  548. package/dist/tests/SessionManager.test.js +446 -0
  549. package/dist/tests/SessionManager.test.js.map +1 -0
  550. package/dist/tests/SkillMatcher.test.d.ts +2 -0
  551. package/dist/tests/SkillMatcher.test.d.ts.map +1 -0
  552. package/dist/tests/SkillMatcher.test.js +253 -0
  553. package/dist/tests/SkillMatcher.test.js.map +1 -0
  554. package/dist/tests/SkillRepository.test.d.ts +5 -0
  555. package/dist/tests/SkillRepository.test.d.ts.map +1 -0
  556. package/dist/tests/SkillRepository.test.js +237 -0
  557. package/dist/tests/SkillRepository.test.js.map +1 -0
  558. package/dist/tests/SwarmIndexer.test.d.ts +11 -0
  559. package/dist/tests/SwarmIndexer.test.d.ts.map +1 -0
  560. package/dist/tests/SwarmIndexer.test.js +374 -0
  561. package/dist/tests/SwarmIndexer.test.js.map +1 -0
  562. package/dist/tests/TieredCache.test.d.ts +7 -0
  563. package/dist/tests/TieredCache.test.d.ts.map +1 -0
  564. package/dist/tests/TieredCache.test.js +529 -0
  565. package/dist/tests/TieredCache.test.js.map +1 -0
  566. package/dist/tests/UsageAnalyticsService.test.d.ts +7 -0
  567. package/dist/tests/UsageAnalyticsService.test.d.ts.map +1 -0
  568. package/dist/tests/UsageAnalyticsService.test.js +238 -0
  569. package/dist/tests/UsageAnalyticsService.test.js.map +1 -0
  570. package/dist/tests/UsageTracker.test.d.ts +7 -0
  571. package/dist/tests/UsageTracker.test.d.ts.map +1 -0
  572. package/dist/tests/UsageTracker.test.js +196 -0
  573. package/dist/tests/UsageTracker.test.js.map +1 -0
  574. package/dist/tests/WebhookHandler.test.d.ts +10 -0
  575. package/dist/tests/WebhookHandler.test.d.ts.map +1 -0
  576. package/dist/tests/WebhookHandler.test.js +592 -0
  577. package/dist/tests/WebhookHandler.test.js.map +1 -0
  578. package/dist/tests/analytics/metrics-aggregator.test.d.ts +11 -0
  579. package/dist/tests/analytics/metrics-aggregator.test.d.ts.map +1 -0
  580. package/dist/tests/analytics/metrics-aggregator.test.js +273 -0
  581. package/dist/tests/analytics/metrics-aggregator.test.js.map +1 -0
  582. package/dist/tests/analytics/metrics-exporter.test.d.ts +11 -0
  583. package/dist/tests/analytics/metrics-exporter.test.d.ts.map +1 -0
  584. package/dist/tests/analytics/metrics-exporter.test.js +371 -0
  585. package/dist/tests/analytics/metrics-exporter.test.js.map +1 -0
  586. package/dist/tests/analytics/usage-tracker.test.d.ts +10 -0
  587. package/dist/tests/analytics/usage-tracker.test.d.ts.map +1 -0
  588. package/dist/tests/analytics/usage-tracker.test.js +151 -0
  589. package/dist/tests/analytics/usage-tracker.test.js.map +1 -0
  590. package/dist/tests/anonymizer.test.d.ts +8 -0
  591. package/dist/tests/anonymizer.test.d.ts.map +1 -0
  592. package/dist/tests/anonymizer.test.js +153 -0
  593. package/dist/tests/anonymizer.test.js.map +1 -0
  594. package/dist/tests/cache.test.d.ts +6 -0
  595. package/dist/tests/cache.test.d.ts.map +1 -0
  596. package/dist/tests/cache.test.js +170 -0
  597. package/dist/tests/cache.test.js.map +1 -0
  598. package/dist/tests/e2e/security/security.e2e.test.d.ts +8 -0
  599. package/dist/tests/e2e/security/security.e2e.test.d.ts.map +1 -0
  600. package/dist/tests/e2e/security/security.e2e.test.js +448 -0
  601. package/dist/tests/e2e/security/security.e2e.test.js.map +1 -0
  602. package/dist/tests/edge-cases/EdgeCases.test.d.ts +13 -0
  603. package/dist/tests/edge-cases/EdgeCases.test.d.ts.map +1 -0
  604. package/dist/tests/edge-cases/EdgeCases.test.js +844 -0
  605. package/dist/tests/edge-cases/EdgeCases.test.js.map +1 -0
  606. package/dist/tests/import-github-skills.test.d.ts +8 -0
  607. package/dist/tests/import-github-skills.test.d.ts.map +1 -0
  608. package/dist/tests/import-github-skills.test.js +390 -0
  609. package/dist/tests/import-github-skills.test.js.map +1 -0
  610. package/dist/tests/logger.test.d.ts +2 -0
  611. package/dist/tests/logger.test.d.ts.map +1 -0
  612. package/dist/tests/logger.test.js +417 -0
  613. package/dist/tests/logger.test.js.map +1 -0
  614. package/dist/tests/performance/LargeScalePerformance.test.d.ts +14 -0
  615. package/dist/tests/performance/LargeScalePerformance.test.d.ts.map +1 -0
  616. package/dist/tests/performance/LargeScalePerformance.test.js +558 -0
  617. package/dist/tests/performance/LargeScalePerformance.test.js.map +1 -0
  618. package/dist/tests/retry.test.d.ts +7 -0
  619. package/dist/tests/retry.test.d.ts.map +1 -0
  620. package/dist/tests/retry.test.js +302 -0
  621. package/dist/tests/retry.test.js.map +1 -0
  622. package/dist/tests/sanitization.test.d.ts +8 -0
  623. package/dist/tests/sanitization.test.d.ts.map +1 -0
  624. package/dist/tests/sanitization.test.js +413 -0
  625. package/dist/tests/sanitization.test.js.map +1 -0
  626. package/dist/tests/schema.test.d.ts +5 -0
  627. package/dist/tests/schema.test.d.ts.map +1 -0
  628. package/dist/tests/schema.test.js +167 -0
  629. package/dist/tests/schema.test.js.map +1 -0
  630. package/dist/tests/scripts/import-to-database.test.d.ts +11 -0
  631. package/dist/tests/scripts/import-to-database.test.d.ts.map +1 -0
  632. package/dist/tests/scripts/import-to-database.test.js +325 -0
  633. package/dist/tests/scripts/import-to-database.test.js.map +1 -0
  634. package/dist/tests/security/ContinuousSecurity.test.d.ts +6 -0
  635. package/dist/tests/security/ContinuousSecurity.test.d.ts.map +1 -0
  636. package/dist/tests/security/ContinuousSecurity.test.js +595 -0
  637. package/dist/tests/security/ContinuousSecurity.test.js.map +1 -0
  638. package/dist/tests/security/ReDoS.test.d.ts +8 -0
  639. package/dist/tests/security/ReDoS.test.d.ts.map +1 -0
  640. package/dist/tests/security/ReDoS.test.js +213 -0
  641. package/dist/tests/security/ReDoS.test.js.map +1 -0
  642. package/dist/tests/security.test.d.ts +5 -0
  643. package/dist/tests/security.test.d.ts.map +1 -0
  644. package/dist/tests/security.test.js +134 -0
  645. package/dist/tests/security.test.js.map +1 -0
  646. package/dist/tests/shared.test.d.ts +7 -0
  647. package/dist/tests/shared.test.d.ts.map +1 -0
  648. package/dist/tests/shared.test.js +480 -0
  649. package/dist/tests/shared.test.js.map +1 -0
  650. package/dist/tests/sources.test.d.ts +5 -0
  651. package/dist/tests/sources.test.d.ts.map +1 -0
  652. package/dist/tests/sources.test.js +369 -0
  653. package/dist/tests/sources.test.js.map +1 -0
  654. package/dist/tests/stats.test.d.ts +11 -0
  655. package/dist/tests/stats.test.d.ts.map +1 -0
  656. package/dist/tests/stats.test.js +124 -0
  657. package/dist/tests/stats.test.js.map +1 -0
  658. package/dist/tests/telemetry.test.d.ts +11 -0
  659. package/dist/tests/telemetry.test.d.ts.map +1 -0
  660. package/dist/tests/telemetry.test.js +424 -0
  661. package/dist/tests/telemetry.test.js.map +1 -0
  662. package/dist/tests/test-utils.d.ts +74 -0
  663. package/dist/tests/test-utils.d.ts.map +1 -0
  664. package/dist/tests/test-utils.js +98 -0
  665. package/dist/tests/test-utils.js.map +1 -0
  666. package/dist/tests/validate-skills.test.d.ts +5 -0
  667. package/dist/tests/validate-skills.test.d.ts.map +1 -0
  668. package/dist/tests/validate-skills.test.js +649 -0
  669. package/dist/tests/validate-skills.test.js.map +1 -0
  670. package/dist/tests/validation.test.d.ts +7 -0
  671. package/dist/tests/validation.test.d.ts.map +1 -0
  672. package/dist/tests/validation.test.js +495 -0
  673. package/dist/tests/validation.test.js.map +1 -0
  674. package/dist/tests/webhooks/WebhookHandler.idempotency.test.d.ts +8 -0
  675. package/dist/tests/webhooks/WebhookHandler.idempotency.test.d.ts.map +1 -0
  676. package/dist/tests/webhooks/WebhookHandler.idempotency.test.js +190 -0
  677. package/dist/tests/webhooks/WebhookHandler.idempotency.test.js.map +1 -0
  678. package/dist/tests/webhooks/WebhookPayload.security.test.d.ts +8 -0
  679. package/dist/tests/webhooks/WebhookPayload.security.test.d.ts.map +1 -0
  680. package/dist/tests/webhooks/WebhookPayload.security.test.js +204 -0
  681. package/dist/tests/webhooks/WebhookPayload.security.test.js.map +1 -0
  682. package/dist/vitest.config.d.ts +3 -0
  683. package/dist/vitest.config.d.ts.map +1 -0
  684. package/dist/vitest.config.js +13 -0
  685. package/dist/vitest.config.js.map +1 -0
  686. package/package.json +77 -0
@@ -0,0 +1,112 @@
1
+ /**
2
+ * @fileoverview Type definitions for Recommendation Learning Loop
3
+ * @module @skillsmith/core/learning/types
4
+ * @see docs/phase4/epic1/recommendation-learning-loop-design.md
5
+ *
6
+ * Epic 1 - Sub-issue 5: Build Recommendation Learning Loop
7
+ * Owner: Data Scientist
8
+ *
9
+ * Provides type-safe interfaces for:
10
+ * - Signal collection (accept/dismiss/usage)
11
+ * - User preference profiles
12
+ * - Learning algorithm configuration
13
+ * - Privacy-preserving storage
14
+ */
15
+ /**
16
+ * User interaction signal types for recommendation learning
17
+ */
18
+ export var SignalType;
19
+ (function (SignalType) {
20
+ /** User accepted and installed recommended skill */
21
+ SignalType["ACCEPT"] = "accept";
22
+ /** User explicitly dismissed recommendation */
23
+ SignalType["DISMISS"] = "dismiss";
24
+ /** User actively uses installed skill (daily usage) */
25
+ SignalType["USAGE_DAILY"] = "usage_daily";
26
+ /** User rarely uses installed skill (weekly usage) */
27
+ SignalType["USAGE_WEEKLY"] = "usage_weekly";
28
+ /** Skill installed but never used (30+ days) */
29
+ SignalType["ABANDONED"] = "abandoned";
30
+ /** User uninstalled previously accepted skill */
31
+ SignalType["UNINSTALL"] = "uninstall";
32
+ })(SignalType || (SignalType = {}));
33
+ /**
34
+ * Signal strength weights for learning algorithm
35
+ * Range: [-1.0, 1.0] where:
36
+ * - Positive = user preference signal
37
+ * - Negative = user rejection signal
38
+ */
39
+ export const SIGNAL_WEIGHTS = {
40
+ [SignalType.ACCEPT]: 0.5,
41
+ [SignalType.DISMISS]: -0.3,
42
+ [SignalType.USAGE_DAILY]: 1.0,
43
+ [SignalType.USAGE_WEEKLY]: 0.3,
44
+ [SignalType.ABANDONED]: -0.7,
45
+ [SignalType.UNINSTALL]: -1.0,
46
+ };
47
+ /**
48
+ * Reason for dismissing a recommendation
49
+ */
50
+ export var DismissReason;
51
+ (function (DismissReason) {
52
+ /** Not relevant to current work */
53
+ DismissReason["NOT_RELEVANT"] = "not_relevant";
54
+ /** Already have similar functionality */
55
+ DismissReason["DUPLICATE"] = "duplicate";
56
+ /** Don't trust the source */
57
+ DismissReason["TRUST_ISSUE"] = "trust_issue";
58
+ /** Too complex/heavyweight */
59
+ DismissReason["TOO_COMPLEX"] = "too_complex";
60
+ /** No specific reason */
61
+ DismissReason["OTHER"] = "other";
62
+ })(DismissReason || (DismissReason = {}));
63
+ /**
64
+ * Skill category enum (aligned with skill schema)
65
+ */
66
+ export var SkillCategory;
67
+ (function (SkillCategory) {
68
+ SkillCategory["GIT"] = "git";
69
+ SkillCategory["TESTING"] = "testing";
70
+ SkillCategory["DOCUMENTATION"] = "documentation";
71
+ SkillCategory["DEVOPS"] = "devops";
72
+ SkillCategory["FRONTEND"] = "frontend";
73
+ SkillCategory["BACKEND"] = "backend";
74
+ SkillCategory["DATABASE"] = "database";
75
+ SkillCategory["SECURITY"] = "security";
76
+ SkillCategory["PRODUCTIVITY"] = "productivity";
77
+ SkillCategory["ANALYSIS"] = "analysis";
78
+ })(SkillCategory || (SkillCategory = {}));
79
+ /**
80
+ * Default learning configuration
81
+ */
82
+ export const DEFAULT_LEARNING_CONFIG = {
83
+ learning_rate: 0.1,
84
+ decay_factor: 0.95,
85
+ min_signals_threshold: 5,
86
+ weight_bounds: {
87
+ min: -2.0,
88
+ max: 2.0,
89
+ },
90
+ signal_retention_days: 90,
91
+ };
92
+ /**
93
+ * Cold start default weights (before personalization)
94
+ * Based on aggregate popularity data
95
+ */
96
+ export const COLD_START_WEIGHTS = {
97
+ category_weights: {
98
+ [SkillCategory.TESTING]: 0.3,
99
+ [SkillCategory.GIT]: 0.3,
100
+ [SkillCategory.DEVOPS]: 0.2,
101
+ [SkillCategory.DOCUMENTATION]: 0.1,
102
+ [SkillCategory.FRONTEND]: 0.2,
103
+ [SkillCategory.BACKEND]: 0.2,
104
+ },
105
+ trust_tier_weights: {
106
+ verified: 0.2,
107
+ community: 0.0,
108
+ standard: -0.1,
109
+ unverified: -0.3,
110
+ },
111
+ };
112
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/learning/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;GAEG;AACH,MAAM,CAAN,IAAY,UAaX;AAbD,WAAY,UAAU;IACpB,oDAAoD;IACpD,+BAAiB,CAAA;IACjB,+CAA+C;IAC/C,iCAAmB,CAAA;IACnB,uDAAuD;IACvD,yCAA2B,CAAA;IAC3B,sDAAsD;IACtD,2CAA6B,CAAA;IAC7B,gDAAgD;IAChD,qCAAuB,CAAA;IACvB,iDAAiD;IACjD,qCAAuB,CAAA;AACzB,CAAC,EAbW,UAAU,KAAV,UAAU,QAarB;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAyC;IAClE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,GAAG;IACxB,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG;IAC1B,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,GAAG;IAC7B,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,GAAG;IAC9B,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG;IAC5B,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG;CACpB,CAAA;AAEV;;GAEG;AACH,MAAM,CAAN,IAAY,aAWX;AAXD,WAAY,aAAa;IACvB,mCAAmC;IACnC,8CAA6B,CAAA;IAC7B,yCAAyC;IACzC,wCAAuB,CAAA;IACvB,6BAA6B;IAC7B,4CAA2B,CAAA;IAC3B,8BAA8B;IAC9B,4CAA2B,CAAA;IAC3B,yBAAyB;IACzB,gCAAe,CAAA;AACjB,CAAC,EAXW,aAAa,KAAb,aAAa,QAWxB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,aAWX;AAXD,WAAY,aAAa;IACvB,4BAAW,CAAA;IACX,oCAAmB,CAAA;IACnB,gDAA+B,CAAA;IAC/B,kCAAiB,CAAA;IACjB,sCAAqB,CAAA;IACrB,oCAAmB,CAAA;IACnB,sCAAqB,CAAA;IACrB,sCAAqB,CAAA;IACrB,8CAA6B,CAAA;IAC7B,sCAAqB,CAAA;AACvB,CAAC,EAXW,aAAa,KAAb,aAAa,QAWxB;AAgJD;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAA6B;IAC/D,aAAa,EAAE,GAAG;IAClB,YAAY,EAAE,IAAI;IAClB,qBAAqB,EAAE,CAAC;IACxB,aAAa,EAAE;QACb,GAAG,EAAE,CAAC,GAAG;QACT,GAAG,EAAE,GAAG;KACT;IACD,qBAAqB,EAAE,EAAE;CACjB,CAAA;AAEV;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAG1B;IACH,gBAAgB,EAAE;QAChB,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,GAAG;QAC5B,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,GAAG;QACxB,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,GAAG;QAC3B,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,GAAG;QAClC,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,GAAG;QAC7B,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,GAAG;KAC7B;IACD,kBAAkB,EAAE;QAClB,QAAQ,EAAE,GAAG;QACb,SAAS,EAAE,GAAG;QACd,QAAQ,EAAE,CAAC,GAAG;QACd,UAAU,EAAE,CAAC,GAAG;KACjB;CACO,CAAA"}
@@ -0,0 +1,152 @@
1
+ /**
2
+ * @fileoverview Trigger phrase overlap detection for skills
3
+ * @module @skillsmith/core/matching/OverlapDetector
4
+ * @see SMI-604: Trigger phrase overlap detection
5
+ *
6
+ * Detects similarity between skill trigger phrases to prevent
7
+ * recommending skills that overlap too much with installed ones.
8
+ *
9
+ * @example
10
+ * const detector = new OverlapDetector({ useFallback: true });
11
+ * const overlap = await detector.detectOverlap(skill1, skill2);
12
+ * if (overlap.overlapScore > 0.8) {
13
+ * console.log('Skills are too similar:', overlap.overlappingPhrases);
14
+ * }
15
+ */
16
+ import { type EmbeddingServiceOptions } from '../embeddings/index.js';
17
+ /**
18
+ * Skill with trigger phrases for overlap detection
19
+ */
20
+ export interface TriggerPhraseSkill {
21
+ /** Unique skill identifier */
22
+ id: string;
23
+ /** Skill display name */
24
+ name: string;
25
+ /** Trigger phrases that activate this skill */
26
+ triggerPhrases: string[];
27
+ }
28
+ /**
29
+ * Result of overlap detection between two skills
30
+ */
31
+ export interface OverlapResult {
32
+ /** First skill ID */
33
+ skillId1: string;
34
+ /** Second skill ID */
35
+ skillId2: string;
36
+ /** Overall overlap score (0-1) */
37
+ overlapScore: number;
38
+ /** Specific phrases that overlap */
39
+ overlappingPhrases: Array<{
40
+ phrase1: string;
41
+ phrase2: string;
42
+ similarity: number;
43
+ }>;
44
+ /** Whether skills are considered duplicates */
45
+ isDuplicate: boolean;
46
+ }
47
+ /**
48
+ * Result of filtering skills by overlap
49
+ */
50
+ export interface FilteredSkillsResult {
51
+ /** Skills that passed the overlap filter */
52
+ accepted: TriggerPhraseSkill[];
53
+ /** Skills that were rejected due to overlap */
54
+ rejected: Array<{
55
+ skill: TriggerPhraseSkill;
56
+ overlapsWith: string;
57
+ overlapScore: number;
58
+ }>;
59
+ }
60
+ /**
61
+ * Options for OverlapDetector
62
+ */
63
+ export interface OverlapDetectorOptions extends EmbeddingServiceOptions {
64
+ /** Similarity threshold for phrase matching (0-1, default 0.75) */
65
+ phraseThreshold?: number;
66
+ /** Overall overlap threshold for skill rejection (0-1, default 0.6) */
67
+ overlapThreshold?: number;
68
+ /** Whether to use exact string matching in addition to semantic (default true) */
69
+ useExactMatch?: boolean;
70
+ }
71
+ /**
72
+ * Detects overlap between skill trigger phrases.
73
+ *
74
+ * Uses semantic similarity to identify skills that respond to
75
+ * similar user inputs, preventing confusing recommendations.
76
+ *
77
+ * @example
78
+ * const detector = new OverlapDetector({ overlapThreshold: 0.7 });
79
+ * const result = await detector.filterByOverlap(candidates, installed);
80
+ * // Use result.accepted for recommendations
81
+ */
82
+ export declare class OverlapDetector {
83
+ private embeddingService;
84
+ private phraseEmbeddings;
85
+ private readonly phraseThreshold;
86
+ private readonly overlapThreshold;
87
+ private readonly useExactMatch;
88
+ constructor(options?: OverlapDetectorOptions);
89
+ /**
90
+ * Check if detector is using fallback mode
91
+ */
92
+ isUsingFallback(): boolean;
93
+ /**
94
+ * Detect overlap between two skills.
95
+ *
96
+ * @param skill1 - First skill
97
+ * @param skill2 - Second skill
98
+ * @returns Detailed overlap analysis
99
+ */
100
+ detectOverlap(skill1: TriggerPhraseSkill, skill2: TriggerPhraseSkill): Promise<OverlapResult>;
101
+ /**
102
+ * Check for exact string match (case-insensitive, normalized)
103
+ */
104
+ private isExactMatch;
105
+ /**
106
+ * Get or compute embedding for a phrase
107
+ */
108
+ private getPhraseEmbedding;
109
+ /**
110
+ * Filter candidate skills by overlap with installed skills.
111
+ *
112
+ * Removes candidates that have too much trigger phrase overlap
113
+ * with already installed skills.
114
+ *
115
+ * @param candidates - Skills to consider for recommendation
116
+ * @param installed - Currently installed skills
117
+ * @returns Filtered results with accepted and rejected skills
118
+ *
119
+ * @example
120
+ * const result = await detector.filterByOverlap(candidates, installed);
121
+ * console.log(`Accepted: ${result.accepted.length}`);
122
+ * console.log(`Rejected: ${result.rejected.length}`);
123
+ */
124
+ filterByOverlap(candidates: TriggerPhraseSkill[], installed: TriggerPhraseSkill[]): Promise<FilteredSkillsResult>;
125
+ /**
126
+ * Find all overlapping skill pairs in a set.
127
+ *
128
+ * Useful for auditing a skill library for potential conflicts.
129
+ *
130
+ * @param skills - Skills to check for overlaps
131
+ * @returns List of overlapping pairs
132
+ */
133
+ findAllOverlaps(skills: TriggerPhraseSkill[]): Promise<OverlapResult[]>;
134
+ /**
135
+ * Get overlap threshold
136
+ */
137
+ getOverlapThreshold(): number;
138
+ /**
139
+ * Get phrase similarity threshold
140
+ */
141
+ getPhraseThreshold(): number;
142
+ /**
143
+ * Clear cached embeddings
144
+ */
145
+ clear(): void;
146
+ /**
147
+ * Close resources
148
+ */
149
+ close(): void;
150
+ }
151
+ export default OverlapDetector;
152
+ //# sourceMappingURL=OverlapDetector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OverlapDetector.d.ts","sourceRoot":"","sources":["../../../src/matching/OverlapDetector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAoB,KAAK,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAEvF;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,8BAA8B;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,+CAA+C;IAC/C,cAAc,EAAE,MAAM,EAAE,CAAA;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,qBAAqB;IACrB,QAAQ,EAAE,MAAM,CAAA;IAChB,sBAAsB;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,kCAAkC;IAClC,YAAY,EAAE,MAAM,CAAA;IACpB,oCAAoC;IACpC,kBAAkB,EAAE,KAAK,CAAC;QACxB,OAAO,EAAE,MAAM,CAAA;QACf,OAAO,EAAE,MAAM,CAAA;QACf,UAAU,EAAE,MAAM,CAAA;KACnB,CAAC,CAAA;IACF,+CAA+C;IAC/C,WAAW,EAAE,OAAO,CAAA;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,4CAA4C;IAC5C,QAAQ,EAAE,kBAAkB,EAAE,CAAA;IAC9B,+CAA+C;IAC/C,QAAQ,EAAE,KAAK,CAAC;QACd,KAAK,EAAE,kBAAkB,CAAA;QACzB,YAAY,EAAE,MAAM,CAAA;QACpB,YAAY,EAAE,MAAM,CAAA;KACrB,CAAC,CAAA;CACH;AAED;;GAEG;AACH,MAAM,WAAW,sBAAuB,SAAQ,uBAAuB;IACrE,mEAAmE;IACnE,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,kFAAkF;IAClF,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAED;;;;;;;;;;GAUG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,gBAAgB,CAAuC;IAC/D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAQ;IACxC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;IACzC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;gBAE3B,OAAO,GAAE,sBAA2B;IAOhD;;OAEG;IACH,eAAe,IAAI,OAAO;IAI1B;;;;;;OAMG;IACG,aAAa,CACjB,MAAM,EAAE,kBAAkB,EAC1B,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,aAAa,CAAC;IA0DzB;;OAEG;IACH,OAAO,CAAC,YAAY;IAKpB;;OAEG;YACW,kBAAkB;IAWhC;;;;;;;;;;;;;;OAcG;IACG,eAAe,CACnB,UAAU,EAAE,kBAAkB,EAAE,EAChC,SAAS,EAAE,kBAAkB,EAAE,GAC9B,OAAO,CAAC,oBAAoB,CAAC;IA0ChC;;;;;;;OAOG;IACG,eAAe,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAmB7E;;OAEG;IACH,mBAAmB,IAAI,MAAM;IAI7B;;OAEG;IACH,kBAAkB,IAAI,MAAM;IAI5B;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,KAAK,IAAI,IAAI;CAId;AAED,eAAe,eAAe,CAAA"}
@@ -0,0 +1,218 @@
1
+ /**
2
+ * @fileoverview Trigger phrase overlap detection for skills
3
+ * @module @skillsmith/core/matching/OverlapDetector
4
+ * @see SMI-604: Trigger phrase overlap detection
5
+ *
6
+ * Detects similarity between skill trigger phrases to prevent
7
+ * recommending skills that overlap too much with installed ones.
8
+ *
9
+ * @example
10
+ * const detector = new OverlapDetector({ useFallback: true });
11
+ * const overlap = await detector.detectOverlap(skill1, skill2);
12
+ * if (overlap.overlapScore > 0.8) {
13
+ * console.log('Skills are too similar:', overlap.overlappingPhrases);
14
+ * }
15
+ */
16
+ import { EmbeddingService } from '../embeddings/index.js';
17
+ /**
18
+ * Detects overlap between skill trigger phrases.
19
+ *
20
+ * Uses semantic similarity to identify skills that respond to
21
+ * similar user inputs, preventing confusing recommendations.
22
+ *
23
+ * @example
24
+ * const detector = new OverlapDetector({ overlapThreshold: 0.7 });
25
+ * const result = await detector.filterByOverlap(candidates, installed);
26
+ * // Use result.accepted for recommendations
27
+ */
28
+ export class OverlapDetector {
29
+ embeddingService;
30
+ phraseEmbeddings = new Map();
31
+ phraseThreshold;
32
+ overlapThreshold;
33
+ useExactMatch;
34
+ constructor(options = {}) {
35
+ this.embeddingService = new EmbeddingService(options);
36
+ this.phraseThreshold = options.phraseThreshold ?? 0.75;
37
+ this.overlapThreshold = options.overlapThreshold ?? 0.6;
38
+ this.useExactMatch = options.useExactMatch ?? true;
39
+ }
40
+ /**
41
+ * Check if detector is using fallback mode
42
+ */
43
+ isUsingFallback() {
44
+ return this.embeddingService.isUsingFallback();
45
+ }
46
+ /**
47
+ * Detect overlap between two skills.
48
+ *
49
+ * @param skill1 - First skill
50
+ * @param skill2 - Second skill
51
+ * @returns Detailed overlap analysis
52
+ */
53
+ async detectOverlap(skill1, skill2) {
54
+ const overlappingPhrases = [];
55
+ // Get embeddings for all phrases
56
+ for (const phrase1 of skill1.triggerPhrases) {
57
+ for (const phrase2 of skill2.triggerPhrases) {
58
+ // Check exact match first
59
+ if (this.useExactMatch && this.isExactMatch(phrase1, phrase2)) {
60
+ overlappingPhrases.push({
61
+ phrase1,
62
+ phrase2,
63
+ similarity: 1.0,
64
+ });
65
+ continue;
66
+ }
67
+ // Check semantic similarity
68
+ const embedding1 = await this.getPhraseEmbedding(phrase1);
69
+ const embedding2 = await this.getPhraseEmbedding(phrase2);
70
+ const similarity = this.embeddingService.cosineSimilarity(embedding1, embedding2);
71
+ if (similarity >= this.phraseThreshold) {
72
+ overlappingPhrases.push({
73
+ phrase1,
74
+ phrase2,
75
+ similarity: Math.round(similarity * 100) / 100,
76
+ });
77
+ }
78
+ }
79
+ }
80
+ // Calculate overall overlap score based on unique phrases that overlap
81
+ // Count unique phrases from skill1 that have at least one match in skill2
82
+ const overlappingFromSkill1 = new Set(overlappingPhrases.map((p) => p.phrase1));
83
+ const overlappingFromSkill2 = new Set(overlappingPhrases.map((p) => p.phrase2));
84
+ // Calculate the overlap ratio for each skill
85
+ const ratio1 = skill1.triggerPhrases.length > 0
86
+ ? overlappingFromSkill1.size / skill1.triggerPhrases.length
87
+ : 0;
88
+ const ratio2 = skill2.triggerPhrases.length > 0
89
+ ? overlappingFromSkill2.size / skill2.triggerPhrases.length
90
+ : 0;
91
+ // Use the average of both ratios for a balanced score
92
+ const overlapScore = (ratio1 + ratio2) / 2;
93
+ return {
94
+ skillId1: skill1.id,
95
+ skillId2: skill2.id,
96
+ overlapScore: Math.round(overlapScore * 100) / 100,
97
+ overlappingPhrases,
98
+ isDuplicate: overlapScore >= this.overlapThreshold,
99
+ };
100
+ }
101
+ /**
102
+ * Check for exact string match (case-insensitive, normalized)
103
+ */
104
+ isExactMatch(phrase1, phrase2) {
105
+ const normalize = (s) => s.toLowerCase().trim().replace(/\s+/g, ' ');
106
+ return normalize(phrase1) === normalize(phrase2);
107
+ }
108
+ /**
109
+ * Get or compute embedding for a phrase
110
+ */
111
+ async getPhraseEmbedding(phrase) {
112
+ const cacheKey = phrase.toLowerCase().trim();
113
+ if (!this.phraseEmbeddings.has(cacheKey)) {
114
+ const embedding = await this.embeddingService.embed(phrase);
115
+ this.phraseEmbeddings.set(cacheKey, embedding);
116
+ }
117
+ return this.phraseEmbeddings.get(cacheKey);
118
+ }
119
+ /**
120
+ * Filter candidate skills by overlap with installed skills.
121
+ *
122
+ * Removes candidates that have too much trigger phrase overlap
123
+ * with already installed skills.
124
+ *
125
+ * @param candidates - Skills to consider for recommendation
126
+ * @param installed - Currently installed skills
127
+ * @returns Filtered results with accepted and rejected skills
128
+ *
129
+ * @example
130
+ * const result = await detector.filterByOverlap(candidates, installed);
131
+ * console.log(`Accepted: ${result.accepted.length}`);
132
+ * console.log(`Rejected: ${result.rejected.length}`);
133
+ */
134
+ async filterByOverlap(candidates, installed) {
135
+ const accepted = [];
136
+ const rejected = [];
137
+ for (const candidate of candidates) {
138
+ let highestOverlap = 0;
139
+ let overlapsWith = '';
140
+ // Check overlap with each installed skill
141
+ for (const installedSkill of installed) {
142
+ const overlap = await this.detectOverlap(candidate, installedSkill);
143
+ if (overlap.overlapScore > highestOverlap) {
144
+ highestOverlap = overlap.overlapScore;
145
+ overlapsWith = installedSkill.id;
146
+ }
147
+ }
148
+ // Also check overlap with already accepted candidates
149
+ for (const acceptedSkill of accepted) {
150
+ const overlap = await this.detectOverlap(candidate, acceptedSkill);
151
+ if (overlap.overlapScore > highestOverlap) {
152
+ highestOverlap = overlap.overlapScore;
153
+ overlapsWith = acceptedSkill.id;
154
+ }
155
+ }
156
+ if (highestOverlap >= this.overlapThreshold) {
157
+ rejected.push({
158
+ skill: candidate,
159
+ overlapsWith,
160
+ overlapScore: highestOverlap,
161
+ });
162
+ }
163
+ else {
164
+ accepted.push(candidate);
165
+ }
166
+ }
167
+ return { accepted, rejected };
168
+ }
169
+ /**
170
+ * Find all overlapping skill pairs in a set.
171
+ *
172
+ * Useful for auditing a skill library for potential conflicts.
173
+ *
174
+ * @param skills - Skills to check for overlaps
175
+ * @returns List of overlapping pairs
176
+ */
177
+ async findAllOverlaps(skills) {
178
+ const overlaps = [];
179
+ for (let i = 0; i < skills.length; i++) {
180
+ for (let j = i + 1; j < skills.length; j++) {
181
+ const result = await this.detectOverlap(skills[i], skills[j]);
182
+ if (result.overlappingPhrases.length > 0) {
183
+ overlaps.push(result);
184
+ }
185
+ }
186
+ }
187
+ // Sort by overlap score descending
188
+ overlaps.sort((a, b) => b.overlapScore - a.overlapScore);
189
+ return overlaps;
190
+ }
191
+ /**
192
+ * Get overlap threshold
193
+ */
194
+ getOverlapThreshold() {
195
+ return this.overlapThreshold;
196
+ }
197
+ /**
198
+ * Get phrase similarity threshold
199
+ */
200
+ getPhraseThreshold() {
201
+ return this.phraseThreshold;
202
+ }
203
+ /**
204
+ * Clear cached embeddings
205
+ */
206
+ clear() {
207
+ this.phraseEmbeddings.clear();
208
+ }
209
+ /**
210
+ * Close resources
211
+ */
212
+ close() {
213
+ this.embeddingService.close();
214
+ this.clear();
215
+ }
216
+ }
217
+ export default OverlapDetector;
218
+ //# sourceMappingURL=OverlapDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OverlapDetector.js","sourceRoot":"","sources":["../../../src/matching/OverlapDetector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * @fileoverview Semantic skill matching using embeddings
3
+ * @module @skillsmith/core/matching/SkillMatcher
4
+ * @see SMI-602: Implement recommend_skills MCP tool
5
+ *
6
+ * Provides semantic similarity matching between skills using
7
+ * the EmbeddingService for vector-based comparisons.
8
+ *
9
+ * @example
10
+ * const matcher = new SkillMatcher({ useFallback: true });
11
+ * const matches = await matcher.findSimilarSkills('react testing', skills, 5);
12
+ */
13
+ import { type EmbeddingServiceOptions } from '../embeddings/index.js';
14
+ /**
15
+ * Skill data for matching
16
+ */
17
+ export interface MatchableSkill {
18
+ /** Unique skill identifier */
19
+ id: string;
20
+ /** Skill display name */
21
+ name: string;
22
+ /** Skill description */
23
+ description: string;
24
+ /** Optional trigger phrases for overlap detection */
25
+ triggerPhrases?: string[];
26
+ /** Optional keywords for keyword-based fallback */
27
+ keywords?: string[];
28
+ /** Optional quality score (0-100) */
29
+ qualityScore?: number;
30
+ }
31
+ /**
32
+ * Result of a skill match
33
+ */
34
+ export interface SkillMatchResult {
35
+ /** Matched skill */
36
+ skill: MatchableSkill;
37
+ /** Semantic similarity score (0-1) */
38
+ similarityScore: number;
39
+ /** Why this skill matched */
40
+ matchReason: string;
41
+ }
42
+ /**
43
+ * Options for SkillMatcher
44
+ */
45
+ export interface SkillMatcherOptions extends EmbeddingServiceOptions {
46
+ /** Minimum similarity threshold (0-1, default 0.3) */
47
+ minSimilarity?: number;
48
+ /** Quality score weight (0-1, default 0.3) */
49
+ qualityWeight?: number;
50
+ }
51
+ /**
52
+ * Semantic skill matcher using embeddings.
53
+ *
54
+ * Finds skills similar to a query using vector similarity,
55
+ * with optional quality score boosting.
56
+ *
57
+ * @example
58
+ * const matcher = new SkillMatcher({ useFallback: true });
59
+ * await matcher.initialize(skills);
60
+ * const results = await matcher.findSimilarSkills('react testing', skills);
61
+ */
62
+ export declare class SkillMatcher {
63
+ private embeddingService;
64
+ private skillEmbeddings;
65
+ private initialized;
66
+ private readonly minSimilarity;
67
+ private readonly qualityWeight;
68
+ constructor(options?: SkillMatcherOptions);
69
+ /**
70
+ * Check if matcher is using fallback mode
71
+ */
72
+ isUsingFallback(): boolean;
73
+ /**
74
+ * Initialize skill embeddings for a set of skills.
75
+ * Call this before matching for best performance.
76
+ */
77
+ initialize(skills: MatchableSkill[]): Promise<void>;
78
+ /**
79
+ * Convert skill to text for embedding
80
+ */
81
+ private skillToText;
82
+ /**
83
+ * Find skills similar to a query string.
84
+ *
85
+ * @param query - Search query or context description
86
+ * @param skills - Pool of skills to search
87
+ * @param limit - Maximum results to return
88
+ * @returns Ranked list of matching skills
89
+ *
90
+ * @example
91
+ * const matches = await matcher.findSimilarSkills(
92
+ * 'React TypeScript frontend testing',
93
+ * availableSkills,
94
+ * 5
95
+ * );
96
+ */
97
+ findSimilarSkills(query: string, skills: MatchableSkill[], limit?: number): Promise<SkillMatchResult[]>;
98
+ /**
99
+ * Find skills similar to a set of installed skills.
100
+ *
101
+ * @param installedSkills - Currently installed skills
102
+ * @param candidateSkills - Pool of skills to recommend from
103
+ * @param limit - Maximum results
104
+ * @returns Ranked list of recommended skills
105
+ */
106
+ findComplementarySkills(installedSkills: MatchableSkill[], candidateSkills: MatchableSkill[], limit?: number): Promise<SkillMatchResult[]>;
107
+ /**
108
+ * Generate a human-readable match reason
109
+ */
110
+ private generateMatchReason;
111
+ /**
112
+ * Get embedding dimension
113
+ */
114
+ getEmbeddingDimension(): number;
115
+ /**
116
+ * Clear cached embeddings
117
+ */
118
+ clear(): void;
119
+ /**
120
+ * Close resources
121
+ */
122
+ close(): void;
123
+ }
124
+ export default SkillMatcher;
125
+ //# sourceMappingURL=SkillMatcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SkillMatcher.d.ts","sourceRoot":"","sources":["../../../src/matching/SkillMatcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAoB,KAAK,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAEvF;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,8BAA8B;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,wBAAwB;IACxB,WAAW,EAAE,MAAM,CAAA;IACnB,qDAAqD;IACrD,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,qCAAqC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oBAAoB;IACpB,KAAK,EAAE,cAAc,CAAA;IACrB,sCAAsC;IACtC,eAAe,EAAE,MAAM,CAAA;IACvB,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,uBAAuB;IAClE,sDAAsD;IACtD,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED;;;;;;;;;;GAUG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,eAAe,CAAuC;IAC9D,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAQ;IACtC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAQ;gBAE1B,OAAO,GAAE,mBAAwB;IAM7C;;OAEG;IACH,eAAe,IAAI,OAAO;IAI1B;;;OAGG;IACG,UAAU,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAezD;;OAEG;IACH,OAAO,CAAC,WAAW;IAcnB;;;;;;;;;;;;;;OAcG;IACG,iBAAiB,CACrB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,cAAc,EAAE,EACxB,KAAK,GAAE,MAAW,GACjB,OAAO,CAAC,gBAAgB,EAAE,CAAC;IA6C9B;;;;;;;OAOG;IACG,uBAAuB,CAC3B,eAAe,EAAE,cAAc,EAAE,EACjC,eAAe,EAAE,cAAc,EAAE,EACjC,KAAK,GAAE,MAAW,GACjB,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAwB9B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAyC3B;;OAEG;IACH,qBAAqB,IAAI,MAAM;IAI/B;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,KAAK,IAAI,IAAI;CAId;AAED,eAAe,YAAY,CAAA"}