@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,56 @@
1
+ /**
2
+ * SMI-632/SMI-677: Shared statistical utilities for benchmark calculations
3
+ *
4
+ * This module provides consistent statistical calculations across
5
+ * BenchmarkRunner and IndexBenchmark.
6
+ */
7
+ /**
8
+ * Calculate percentile value from sorted array using linear interpolation
9
+ *
10
+ * Uses the percentile rank method with linear interpolation between adjacent values.
11
+ * This provides more accurate percentile estimates than simple nearest-rank method.
12
+ *
13
+ * @param sorted - Sorted array of values (ascending order)
14
+ * @param p - Percentile to calculate (0-100)
15
+ * @returns The interpolated percentile value, rounded to 3 decimal places
16
+ *
17
+ * @example
18
+ * percentile([1, 2, 3, 4, 5], 50) // returns 3
19
+ * percentile([1, 2, 3, 4, 5], 95) // returns 4.8 (interpolated)
20
+ */
21
+ export declare function percentile(sorted: number[], p: number): number;
22
+ /**
23
+ * Calculate mean of an array of values
24
+ *
25
+ * @param values - Array of numeric values
26
+ * @returns The arithmetic mean, or 0 for empty array
27
+ */
28
+ export declare function mean(values: number[]): number;
29
+ /**
30
+ * Calculate sample standard deviation
31
+ *
32
+ * Uses Bessel's correction (n-1 denominator) for sample standard deviation,
33
+ * which provides an unbiased estimate of population standard deviation.
34
+ *
35
+ * @param values - Array of numeric values
36
+ * @returns The sample standard deviation, or 0 for arrays with less than 2 elements
37
+ */
38
+ export declare function sampleStddev(values: number[]): number;
39
+ /**
40
+ * Calculate all common statistics from a set of latencies
41
+ *
42
+ * @param latencies - Array of latency measurements
43
+ * @returns Statistical summary including percentiles, mean, stddev, min, max
44
+ */
45
+ export interface LatencyStats {
46
+ count: number;
47
+ p50: number;
48
+ p95: number;
49
+ p99: number;
50
+ mean: number;
51
+ stddev: number;
52
+ min: number;
53
+ max: number;
54
+ }
55
+ export declare function calculateLatencyStats(latencies: number[]): LatencyStats;
56
+ //# sourceMappingURL=stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../src/benchmarks/stats.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAW9D;AAED;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAG7C;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAOrD;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,YAAY,CA2BvE"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * SMI-632/SMI-677: Shared statistical utilities for benchmark calculations
3
+ *
4
+ * This module provides consistent statistical calculations across
5
+ * BenchmarkRunner and IndexBenchmark.
6
+ */
7
+ /**
8
+ * Calculate percentile value from sorted array using linear interpolation
9
+ *
10
+ * Uses the percentile rank method with linear interpolation between adjacent values.
11
+ * This provides more accurate percentile estimates than simple nearest-rank method.
12
+ *
13
+ * @param sorted - Sorted array of values (ascending order)
14
+ * @param p - Percentile to calculate (0-100)
15
+ * @returns The interpolated percentile value, rounded to 3 decimal places
16
+ *
17
+ * @example
18
+ * percentile([1, 2, 3, 4, 5], 50) // returns 3
19
+ * percentile([1, 2, 3, 4, 5], 95) // returns 4.8 (interpolated)
20
+ */
21
+ export function percentile(sorted, p) {
22
+ if (sorted.length === 0)
23
+ return 0;
24
+ if (sorted.length === 1)
25
+ return sorted[0];
26
+ const rank = (p / 100) * (sorted.length - 1);
27
+ const lower = Math.floor(rank);
28
+ const upper = Math.ceil(rank);
29
+ const weight = rank - lower;
30
+ const value = sorted[lower] * (1 - weight) + sorted[upper] * weight;
31
+ return Math.round(value * 1000) / 1000;
32
+ }
33
+ /**
34
+ * Calculate mean of an array of values
35
+ *
36
+ * @param values - Array of numeric values
37
+ * @returns The arithmetic mean, or 0 for empty array
38
+ */
39
+ export function mean(values) {
40
+ if (values.length === 0)
41
+ return 0;
42
+ return values.reduce((sum, val) => sum + val, 0) / values.length;
43
+ }
44
+ /**
45
+ * Calculate sample standard deviation
46
+ *
47
+ * Uses Bessel's correction (n-1 denominator) for sample standard deviation,
48
+ * which provides an unbiased estimate of population standard deviation.
49
+ *
50
+ * @param values - Array of numeric values
51
+ * @returns The sample standard deviation, or 0 for arrays with less than 2 elements
52
+ */
53
+ export function sampleStddev(values) {
54
+ if (values.length < 2)
55
+ return 0;
56
+ const avg = mean(values);
57
+ const variance = values.reduce((sum, val) => sum + Math.pow(val - avg, 2), 0) / (values.length - 1);
58
+ return Math.sqrt(variance);
59
+ }
60
+ export function calculateLatencyStats(latencies) {
61
+ if (latencies.length === 0) {
62
+ return {
63
+ count: 0,
64
+ p50: 0,
65
+ p95: 0,
66
+ p99: 0,
67
+ mean: 0,
68
+ stddev: 0,
69
+ min: 0,
70
+ max: 0,
71
+ };
72
+ }
73
+ const sorted = [...latencies].sort((a, b) => a - b);
74
+ const n = sorted.length;
75
+ return {
76
+ count: n,
77
+ p50: percentile(sorted, 50),
78
+ p95: percentile(sorted, 95),
79
+ p99: percentile(sorted, 99),
80
+ mean: Math.round(mean(sorted) * 1000) / 1000,
81
+ stddev: Math.round(sampleStddev(sorted) * 1000) / 1000,
82
+ min: sorted[0],
83
+ max: sorted[n - 1],
84
+ };
85
+ }
86
+ //# sourceMappingURL=stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../../src/benchmarks/stats.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * SMI-644: Cache Entry Data Structure
3
+ * Enhanced cache entry with TTL tracking and hit count for popularity detection
4
+ */
5
+ import type { SearchResult } from './lru.js';
6
+ /**
7
+ * TTL tiers based on query popularity
8
+ */
9
+ export declare enum TTLTier {
10
+ /** Popular queries (>10 hits/hour): 4 hours */
11
+ POPULAR = 14400000,
12
+ /** Standard queries: 1 hour */
13
+ STANDARD = 3600000,
14
+ /** Rare queries (<1 hit/day): 15 minutes */
15
+ RARE = 900000
16
+ }
17
+ /**
18
+ * Popularity thresholds for TTL determination
19
+ */
20
+ export declare const POPULARITY_THRESHOLDS: {
21
+ /** Hits per hour to be considered "popular" */
22
+ readonly POPULAR_HITS_PER_HOUR: 10;
23
+ /** Minimum age (ms) before evaluating popularity */
24
+ readonly MIN_AGE_FOR_EVALUATION: number;
25
+ };
26
+ /**
27
+ * Enhanced cache entry with TTL and popularity tracking
28
+ */
29
+ export interface CacheEntry<T = SearchResult[]> {
30
+ /** Unique cache key */
31
+ key: string;
32
+ /** Cached data */
33
+ data: T;
34
+ /** Total count for search results */
35
+ totalCount: number;
36
+ /** Creation timestamp (ms) */
37
+ createdAt: number;
38
+ /** Expiration timestamp (ms) */
39
+ expiresAt: number;
40
+ /** Number of cache hits */
41
+ hitCount: number;
42
+ /** Last access timestamp (ms) */
43
+ lastAccessedAt: number;
44
+ /** Current TTL tier */
45
+ ttlTier: TTLTier;
46
+ }
47
+ /**
48
+ * Serialized format for persistent storage
49
+ */
50
+ export interface SerializedCacheEntry {
51
+ key: string;
52
+ data_json: string;
53
+ total_count: number;
54
+ created_at: number;
55
+ expires_at: number;
56
+ hit_count: number;
57
+ last_accessed_at: number;
58
+ ttl_tier: number;
59
+ }
60
+ /**
61
+ * Create a new cache entry with default TTL
62
+ */
63
+ export declare function createCacheEntry<T = SearchResult[]>(key: string, data: T, totalCount: number, ttlTier?: TTLTier): CacheEntry<T>;
64
+ /**
65
+ * Record a hit on a cache entry
66
+ * Returns updated entry (immutable pattern)
67
+ */
68
+ export declare function recordHit<T>(entry: CacheEntry<T>): CacheEntry<T>;
69
+ /**
70
+ * Calculate TTL tier based on hit rate
71
+ */
72
+ export declare function calculateTTLTier(createdAt: number, hitCount: number, now?: number): TTLTier;
73
+ /**
74
+ * Check if cache entry is expired
75
+ */
76
+ export declare function isExpired<T>(entry: CacheEntry<T>, now?: number): boolean;
77
+ /**
78
+ * Check if entry should be refreshed (approaching expiration)
79
+ * Returns true if within 10% of TTL remaining
80
+ */
81
+ export declare function shouldRefresh<T>(entry: CacheEntry<T>, now?: number): boolean;
82
+ /**
83
+ * Validate cache key for security (standards.md §4)
84
+ * Prevents injection attacks through cache keys
85
+ */
86
+ export declare function isValidCacheKey(key: string): boolean;
87
+ /**
88
+ * Serialize cache entry for persistence
89
+ * Uses safe JSON serialization to prevent prototype pollution
90
+ */
91
+ export declare function serializeCacheEntry<T>(entry: CacheEntry<T>): SerializedCacheEntry;
92
+ /**
93
+ * Deserialize cache entry from persistence
94
+ * Validates data to prevent prototype pollution (security: standards.md §4)
95
+ */
96
+ export declare function deserializeCacheEntry<T = SearchResult[]>(serialized: SerializedCacheEntry): CacheEntry<T>;
97
+ /**
98
+ * Get human-readable TTL tier name
99
+ */
100
+ export declare function getTTLTierName(tier: TTLTier): string;
101
+ //# sourceMappingURL=CacheEntry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CacheEntry.d.ts","sourceRoot":"","sources":["../../../src/cache/CacheEntry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAE5C;;GAEG;AACH,oBAAY,OAAO;IACjB,+CAA+C;IAC/C,OAAO,WAAqB;IAC5B,+BAA+B;IAC/B,QAAQ,UAAiB;IACzB,4CAA4C;IAC5C,IAAI,SAAiB;CACtB;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB;IAChC,+CAA+C;;IAE/C,oDAAoD;;CAE5C,CAAA;AAEV;;GAEG;AACH,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,YAAY,EAAE;IAC5C,uBAAuB;IACvB,GAAG,EAAE,MAAM,CAAA;IACX,kBAAkB;IAClB,IAAI,EAAE,CAAC,CAAA;IACP,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAA;IAClB,8BAA8B;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAA;IACjB,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,iCAAiC;IACjC,cAAc,EAAE,MAAM,CAAA;IACtB,uBAAuB;IACvB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,gBAAgB,EAAE,MAAM,CAAA;IACxB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,GAAG,YAAY,EAAE,EACjD,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,CAAC,EACP,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,OAA0B,GAClC,UAAU,CAAC,CAAC,CAAC,CAiBf;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAiBhE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,GAAG,GAAE,MAAmB,GACvB,OAAO,CAuBT;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,GAAE,MAAmB,GAAG,OAAO,CAEpF;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,GAAE,MAAmB,GAAG,OAAO,CAIxF;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAkBpD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAWjF;AA8CD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,GAAG,YAAY,EAAE,EACtD,UAAU,EAAE,oBAAoB,GAC/B,UAAU,CAAC,CAAC,CAAC,CA+Cf;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAWpD"}
@@ -0,0 +1,238 @@
1
+ /**
2
+ * SMI-644: Cache Entry Data Structure
3
+ * Enhanced cache entry with TTL tracking and hit count for popularity detection
4
+ */
5
+ /**
6
+ * TTL tiers based on query popularity
7
+ */
8
+ export var TTLTier;
9
+ (function (TTLTier) {
10
+ /** Popular queries (>10 hits/hour): 4 hours */
11
+ TTLTier[TTLTier["POPULAR"] = 14400000] = "POPULAR";
12
+ /** Standard queries: 1 hour */
13
+ TTLTier[TTLTier["STANDARD"] = 3600000] = "STANDARD";
14
+ /** Rare queries (<1 hit/day): 15 minutes */
15
+ TTLTier[TTLTier["RARE"] = 900000] = "RARE";
16
+ })(TTLTier || (TTLTier = {}));
17
+ /**
18
+ * Popularity thresholds for TTL determination
19
+ */
20
+ export const POPULARITY_THRESHOLDS = {
21
+ /** Hits per hour to be considered "popular" */
22
+ POPULAR_HITS_PER_HOUR: 10,
23
+ /** Minimum age (ms) before evaluating popularity */
24
+ MIN_AGE_FOR_EVALUATION: 60 * 1000, // 1 minute
25
+ };
26
+ /**
27
+ * Create a new cache entry with default TTL
28
+ */
29
+ export function createCacheEntry(key, data, totalCount, ttlTier = TTLTier.STANDARD) {
30
+ // Validate key to prevent injection (security: standards.md §4)
31
+ if (!isValidCacheKey(key)) {
32
+ throw new Error('Invalid cache key: contains disallowed characters');
33
+ }
34
+ const now = Date.now();
35
+ return {
36
+ key,
37
+ data,
38
+ totalCount,
39
+ createdAt: now,
40
+ expiresAt: now + ttlTier,
41
+ hitCount: 0,
42
+ lastAccessedAt: now,
43
+ ttlTier,
44
+ };
45
+ }
46
+ /**
47
+ * Record a hit on a cache entry
48
+ * Returns updated entry (immutable pattern)
49
+ */
50
+ export function recordHit(entry) {
51
+ const now = Date.now();
52
+ const newHitCount = entry.hitCount + 1;
53
+ // Calculate new TTL tier based on popularity
54
+ const newTier = calculateTTLTier(entry.createdAt, newHitCount, now);
55
+ // If tier upgraded, extend expiration
56
+ const newExpiresAt = newTier > entry.ttlTier ? now + newTier : entry.expiresAt;
57
+ return {
58
+ ...entry,
59
+ hitCount: newHitCount,
60
+ lastAccessedAt: now,
61
+ ttlTier: newTier,
62
+ expiresAt: newExpiresAt,
63
+ };
64
+ }
65
+ /**
66
+ * Calculate TTL tier based on hit rate
67
+ */
68
+ export function calculateTTLTier(createdAt, hitCount, now = Date.now()) {
69
+ const ageMs = now - createdAt;
70
+ // Need minimum age to evaluate popularity
71
+ if (ageMs < POPULARITY_THRESHOLDS.MIN_AGE_FOR_EVALUATION) {
72
+ return TTLTier.STANDARD;
73
+ }
74
+ // Calculate hits per hour
75
+ const ageHours = ageMs / (60 * 60 * 1000);
76
+ const hitsPerHour = hitCount / Math.max(ageHours, 1 / 60); // Min 1 minute
77
+ if (hitsPerHour >= POPULARITY_THRESHOLDS.POPULAR_HITS_PER_HOUR) {
78
+ return TTLTier.POPULAR;
79
+ }
80
+ // Check for rare: less than 1 hit per day equivalent
81
+ const hitsPerDay = hitsPerHour * 24;
82
+ if (hitsPerDay < 1 && ageHours >= 1) {
83
+ return TTLTier.RARE;
84
+ }
85
+ return TTLTier.STANDARD;
86
+ }
87
+ /**
88
+ * Check if cache entry is expired
89
+ */
90
+ export function isExpired(entry, now = Date.now()) {
91
+ return now >= entry.expiresAt;
92
+ }
93
+ /**
94
+ * Check if entry should be refreshed (approaching expiration)
95
+ * Returns true if within 10% of TTL remaining
96
+ */
97
+ export function shouldRefresh(entry, now = Date.now()) {
98
+ const ttl = entry.expiresAt - entry.createdAt;
99
+ const remaining = entry.expiresAt - now;
100
+ return remaining > 0 && remaining < ttl * 0.1;
101
+ }
102
+ /**
103
+ * Validate cache key for security (standards.md §4)
104
+ * Prevents injection attacks through cache keys
105
+ */
106
+ export function isValidCacheKey(key) {
107
+ // Max key length
108
+ if (key.length > 1024) {
109
+ return false;
110
+ }
111
+ // Must be non-empty string
112
+ if (!key || typeof key !== 'string') {
113
+ return false;
114
+ }
115
+ // Block null bytes and control characters
116
+ // eslint-disable-next-line no-control-regex
117
+ if (/[\x00-\x1f\x7f]/.test(key)) {
118
+ return false;
119
+ }
120
+ return true;
121
+ }
122
+ /**
123
+ * Serialize cache entry for persistence
124
+ * Uses safe JSON serialization to prevent prototype pollution
125
+ */
126
+ export function serializeCacheEntry(entry) {
127
+ return {
128
+ key: entry.key,
129
+ data_json: JSON.stringify(entry.data),
130
+ total_count: entry.totalCount,
131
+ created_at: entry.createdAt,
132
+ expires_at: entry.expiresAt,
133
+ hit_count: entry.hitCount,
134
+ last_accessed_at: entry.lastAccessedAt,
135
+ ttl_tier: entry.ttlTier,
136
+ };
137
+ }
138
+ /** Pattern to detect prototype pollution attempts (standards.md §4.4) */
139
+ const PROTOTYPE_POLLUTION_PATTERN = /"(__proto__|prototype|constructor)"\s*:/i;
140
+ /**
141
+ * SMI-684: Recursively check for dangerous keys in parsed objects
142
+ * Prevents prototype pollution bypass via unicode escapes (e.g., \u005f\u005fproto\u005f\u005f)
143
+ * which are decoded by JSON.parse before we can detect them with regex
144
+ */
145
+ function hasDangerousKeys(obj, depth = 0) {
146
+ // Prevent stack overflow on deeply nested objects
147
+ if (depth > 100)
148
+ return false;
149
+ // Handle null, primitives
150
+ if (typeof obj !== 'object' || obj === null)
151
+ return false;
152
+ // Handle arrays - check each element
153
+ if (Array.isArray(obj)) {
154
+ for (const item of obj) {
155
+ if (hasDangerousKeys(item, depth + 1)) {
156
+ return true;
157
+ }
158
+ }
159
+ return false;
160
+ }
161
+ // Handle objects - check keys and recurse into values
162
+ const keys = Object.keys(obj);
163
+ for (const key of keys) {
164
+ // Check for dangerous keys
165
+ if (key === '__proto__' || key === 'prototype' || key === 'constructor') {
166
+ return true;
167
+ }
168
+ // Recursively check nested objects
169
+ if (hasDangerousKeys(obj[key], depth + 1)) {
170
+ return true;
171
+ }
172
+ }
173
+ return false;
174
+ }
175
+ /** Valid TTL tier values */
176
+ const VALID_TTL_TIERS = new Set([TTLTier.POPULAR, TTLTier.STANDARD, TTLTier.RARE]);
177
+ /**
178
+ * Deserialize cache entry from persistence
179
+ * Validates data to prevent prototype pollution (security: standards.md §4)
180
+ */
181
+ export function deserializeCacheEntry(serialized) {
182
+ // Check for prototype pollution before parsing (standards.md §4.4)
183
+ // This catches simple cases like {"__proto__": {}}
184
+ if (PROTOTYPE_POLLUTION_PATTERN.test(serialized.data_json)) {
185
+ throw new Error('Prototype pollution attempt detected in cache data');
186
+ }
187
+ // Parse JSON safely
188
+ let data;
189
+ try {
190
+ data = JSON.parse(serialized.data_json);
191
+ }
192
+ catch {
193
+ throw new Error('Failed to deserialize cache entry data');
194
+ }
195
+ // SMI-684: Post-parse validation to catch unicode escape bypasses
196
+ // e.g., {"\\u005f\\u005fproto\\u005f\\u005f": {}} becomes {"__proto__": {}} after parse
197
+ if (hasDangerousKeys(data)) {
198
+ throw new Error('Prototype pollution attempt detected in cache data');
199
+ }
200
+ // Validate all numeric fields
201
+ if (typeof serialized.created_at !== 'number' ||
202
+ typeof serialized.expires_at !== 'number' ||
203
+ typeof serialized.hit_count !== 'number' ||
204
+ typeof serialized.last_accessed_at !== 'number' ||
205
+ typeof serialized.total_count !== 'number') {
206
+ throw new Error('Invalid cache entry: numeric fields must be numbers');
207
+ }
208
+ // Validate TTL tier is a known value
209
+ if (!VALID_TTL_TIERS.has(serialized.ttl_tier)) {
210
+ throw new Error('Invalid cache entry: unknown TTL tier');
211
+ }
212
+ return {
213
+ key: serialized.key,
214
+ data,
215
+ totalCount: serialized.total_count,
216
+ createdAt: serialized.created_at,
217
+ expiresAt: serialized.expires_at,
218
+ hitCount: serialized.hit_count,
219
+ lastAccessedAt: serialized.last_accessed_at,
220
+ ttlTier: serialized.ttl_tier,
221
+ };
222
+ }
223
+ /**
224
+ * Get human-readable TTL tier name
225
+ */
226
+ export function getTTLTierName(tier) {
227
+ switch (tier) {
228
+ case TTLTier.POPULAR:
229
+ return 'popular';
230
+ case TTLTier.STANDARD:
231
+ return 'standard';
232
+ case TTLTier.RARE:
233
+ return 'rare';
234
+ default:
235
+ return 'unknown';
236
+ }
237
+ }
238
+ //# sourceMappingURL=CacheEntry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CacheEntry.js","sourceRoot":"","sources":["../../../src/cache/CacheEntry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,167 @@
1
+ /**
2
+ * SMI-644: Unified Cache Manager
3
+ * Provides high-level cache operations with:
4
+ * - Popular query detection (dynamic TTL)
5
+ * - Background refresh for hot entries
6
+ * - Cache invalidation coordination
7
+ * - Statistics and monitoring
8
+ */
9
+ import type { SearchResult } from './lru.js';
10
+ import { TTLTier, POPULARITY_THRESHOLDS, getTTLTierName } from './CacheEntry.js';
11
+ import { type TieredCacheConfig, type TieredCacheStats } from './TieredCache.js';
12
+ /**
13
+ * Search options for cache key generation
14
+ */
15
+ export interface SearchOptions {
16
+ query: string;
17
+ filters?: Record<string, unknown>;
18
+ limit?: number;
19
+ offset?: number;
20
+ }
21
+ /**
22
+ * Refresh callback type
23
+ */
24
+ export type RefreshCallback = (options: SearchOptions) => Promise<{
25
+ results: SearchResult[];
26
+ totalCount: number;
27
+ }>;
28
+ /**
29
+ * Cache manager configuration
30
+ */
31
+ export interface CacheManagerConfig extends TieredCacheConfig {
32
+ /** Enable background refresh for hot entries (default: true) */
33
+ enableBackgroundRefresh?: boolean;
34
+ /** Background refresh interval in ms (default: 30 seconds) */
35
+ refreshIntervalMs?: number;
36
+ /** Maximum concurrent refreshes (default: 3) */
37
+ maxConcurrentRefreshes?: number;
38
+ /** Callback to refresh cache entries */
39
+ refreshCallback?: RefreshCallback;
40
+ }
41
+ /**
42
+ * Unified Cache Manager
43
+ * Coordinates L1/L2 caching with intelligent TTL management
44
+ */
45
+ export declare class CacheManager {
46
+ private cache;
47
+ private readonly config;
48
+ private queryFrequencies;
49
+ private refreshTimer;
50
+ /** SMI-683: Use Map<key, Promise> for proper deduplication of concurrent refreshes */
51
+ private activeRefreshes;
52
+ private refreshCallback;
53
+ private lastInvalidation;
54
+ private invalidationCallbacks;
55
+ constructor(config?: CacheManagerConfig);
56
+ /**
57
+ * Generate cache key from search options
58
+ */
59
+ static generateKey(options: SearchOptions): string;
60
+ /**
61
+ * Parse search options from cache key
62
+ * SMI-683: Fixed regex to handle empty filters (was: .+? requires at least 1 char)
63
+ */
64
+ static parseKey(key: string): SearchOptions | null;
65
+ /**
66
+ * Get cached results for search options
67
+ */
68
+ get(options: SearchOptions): {
69
+ results: SearchResult[];
70
+ totalCount: number;
71
+ } | undefined;
72
+ /**
73
+ * Get or compute cached results
74
+ * @param options Search options
75
+ * @param compute Function to compute results if not cached
76
+ */
77
+ getOrCompute(options: SearchOptions, compute: () => Promise<{
78
+ results: SearchResult[];
79
+ totalCount: number;
80
+ }>): Promise<{
81
+ results: SearchResult[];
82
+ totalCount: number;
83
+ }>;
84
+ /**
85
+ * Store results in cache with automatic TTL detection
86
+ */
87
+ set(options: SearchOptions, results: SearchResult[], totalCount: number): void;
88
+ /**
89
+ * Check if results are cached
90
+ */
91
+ has(options: SearchOptions): boolean;
92
+ /**
93
+ * Delete specific cached result
94
+ */
95
+ delete(options: SearchOptions): boolean;
96
+ /**
97
+ * Invalidate all cached results
98
+ * Should be called when the skill index is updated
99
+ */
100
+ invalidateAll(): void;
101
+ /**
102
+ * Register callback for invalidation events
103
+ */
104
+ onInvalidate(callback: () => void): () => void;
105
+ /**
106
+ * Get time since last invalidation
107
+ */
108
+ getTimeSinceInvalidation(): number;
109
+ /**
110
+ * Prune expired entries
111
+ */
112
+ prune(): number;
113
+ /**
114
+ * Get comprehensive cache statistics
115
+ */
116
+ getStats(): TieredCacheStats & {
117
+ queryFrequencies: {
118
+ popular: number;
119
+ standard: number;
120
+ rare: number;
121
+ };
122
+ backgroundRefresh: {
123
+ active: number;
124
+ lastRun: number;
125
+ };
126
+ };
127
+ /**
128
+ * Get detailed hit rate by TTL tier
129
+ */
130
+ getHitRateByTier(): Record<string, number>;
131
+ /**
132
+ * Set the refresh callback for background refresh
133
+ */
134
+ setRefreshCallback(callback: RefreshCallback): void;
135
+ /**
136
+ * Close cache manager and cleanup resources
137
+ */
138
+ close(): void;
139
+ /**
140
+ * Record a hit for query frequency tracking
141
+ */
142
+ private recordQueryHit;
143
+ /**
144
+ * Determine TTL tier based on query frequency
145
+ */
146
+ private determineTTLTier;
147
+ /**
148
+ * Prune old query frequency entries
149
+ */
150
+ private pruneQueryFrequencies;
151
+ /**
152
+ * Start background refresh loop
153
+ */
154
+ private startBackgroundRefresh;
155
+ /**
156
+ * Perform background refresh for entries approaching expiration
157
+ */
158
+ private performBackgroundRefresh;
159
+ /**
160
+ * Refresh a single cache entry
161
+ * SMI-683: Fixed race condition by using Map<string, Promise<void>> for proper deduplication.
162
+ * Concurrent calls for the same key now return the same promise instance.
163
+ */
164
+ private refreshEntry;
165
+ }
166
+ export { TTLTier, getTTLTierName, POPULARITY_THRESHOLDS };
167
+ //# sourceMappingURL=CacheManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CacheManager.d.ts","sourceRoot":"","sources":["../../../src/cache/CacheManager.ts"],"names":[],"mappings":"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"}