@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.
- package/dist/.tsbuildinfo +1 -0
- package/dist/src/__tests__/errors.test.d.ts +5 -0
- package/dist/src/__tests__/errors.test.d.ts.map +1 -0
- package/dist/src/__tests__/errors.test.js +115 -0
- package/dist/src/__tests__/errors.test.js.map +1 -0
- package/dist/src/activation/ActivationManager.d.ts +141 -0
- package/dist/src/activation/ActivationManager.d.ts.map +1 -0
- package/dist/src/activation/ActivationManager.js +282 -0
- package/dist/src/activation/ActivationManager.js.map +1 -0
- package/dist/src/activation/ZeroConfigActivator.d.ts +126 -0
- package/dist/src/activation/ZeroConfigActivator.d.ts.map +1 -0
- package/dist/src/activation/ZeroConfigActivator.js +259 -0
- package/dist/src/activation/ZeroConfigActivator.js.map +1 -0
- package/dist/src/activation/index.d.ts +8 -0
- package/dist/src/activation/index.d.ts.map +1 -0
- package/dist/src/activation/index.js +8 -0
- package/dist/src/activation/index.js.map +1 -0
- package/dist/src/analysis/CodebaseAnalyzer.d.ts +175 -0
- package/dist/src/analysis/CodebaseAnalyzer.d.ts.map +1 -0
- package/dist/src/analysis/CodebaseAnalyzer.js +495 -0
- package/dist/src/analysis/CodebaseAnalyzer.js.map +1 -0
- package/dist/src/analysis/index.d.ts +10 -0
- package/dist/src/analysis/index.d.ts.map +1 -0
- package/dist/src/analysis/index.js +10 -0
- package/dist/src/analysis/index.js.map +1 -0
- package/dist/src/analytics/AnalyticsRepository.d.ts +97 -0
- package/dist/src/analytics/AnalyticsRepository.d.ts.map +1 -0
- package/dist/src/analytics/AnalyticsRepository.js +376 -0
- package/dist/src/analytics/AnalyticsRepository.js.map +1 -0
- package/dist/src/analytics/ExperimentService.d.ts +70 -0
- package/dist/src/analytics/ExperimentService.d.ts.map +1 -0
- package/dist/src/analytics/ExperimentService.js +251 -0
- package/dist/src/analytics/ExperimentService.js.map +1 -0
- package/dist/src/analytics/ROIDashboardService.d.ts +55 -0
- package/dist/src/analytics/ROIDashboardService.d.ts.map +1 -0
- package/dist/src/analytics/ROIDashboardService.js +304 -0
- package/dist/src/analytics/ROIDashboardService.js.map +1 -0
- package/dist/src/analytics/UsageAnalyticsService.d.ts +55 -0
- package/dist/src/analytics/UsageAnalyticsService.d.ts.map +1 -0
- package/dist/src/analytics/UsageAnalyticsService.js +180 -0
- package/dist/src/analytics/UsageAnalyticsService.js.map +1 -0
- package/dist/src/analytics/anonymizer.d.ts +53 -0
- package/dist/src/analytics/anonymizer.d.ts.map +1 -0
- package/dist/src/analytics/anonymizer.js +107 -0
- package/dist/src/analytics/anonymizer.js.map +1 -0
- package/dist/src/analytics/constants.d.ts +19 -0
- package/dist/src/analytics/constants.d.ts.map +1 -0
- package/dist/src/analytics/constants.js +19 -0
- package/dist/src/analytics/constants.js.map +1 -0
- package/dist/src/analytics/index.d.ts +23 -0
- package/dist/src/analytics/index.d.ts.map +1 -0
- package/dist/src/analytics/index.js +23 -0
- package/dist/src/analytics/index.js.map +1 -0
- package/dist/src/analytics/metrics-aggregator.d.ts +98 -0
- package/dist/src/analytics/metrics-aggregator.d.ts.map +1 -0
- package/dist/src/analytics/metrics-aggregator.js +176 -0
- package/dist/src/analytics/metrics-aggregator.js.map +1 -0
- package/dist/src/analytics/metrics-exporter.d.ts +148 -0
- package/dist/src/analytics/metrics-exporter.d.ts.map +1 -0
- package/dist/src/analytics/metrics-exporter.js +244 -0
- package/dist/src/analytics/metrics-exporter.js.map +1 -0
- package/dist/src/analytics/schema.d.ts +20 -0
- package/dist/src/analytics/schema.d.ts.map +1 -0
- package/dist/src/analytics/schema.js +125 -0
- package/dist/src/analytics/schema.js.map +1 -0
- package/dist/src/analytics/storage.d.ts +76 -0
- package/dist/src/analytics/storage.d.ts.map +1 -0
- package/dist/src/analytics/storage.js +180 -0
- package/dist/src/analytics/storage.js.map +1 -0
- package/dist/src/analytics/types.d.ts +277 -0
- package/dist/src/analytics/types.d.ts.map +1 -0
- package/dist/src/analytics/types.js +10 -0
- package/dist/src/analytics/types.js.map +1 -0
- package/dist/src/analytics/usage-tracker.d.ts +132 -0
- package/dist/src/analytics/usage-tracker.d.ts.map +1 -0
- package/dist/src/analytics/usage-tracker.js +213 -0
- package/dist/src/analytics/usage-tracker.js.map +1 -0
- package/dist/src/benchmarks/BenchmarkRunner.d.ts +258 -0
- package/dist/src/benchmarks/BenchmarkRunner.d.ts.map +1 -0
- package/dist/src/benchmarks/BenchmarkRunner.js +453 -0
- package/dist/src/benchmarks/BenchmarkRunner.js.map +1 -0
- package/dist/src/benchmarks/IndexBenchmark.d.ts +101 -0
- package/dist/src/benchmarks/IndexBenchmark.d.ts.map +1 -0
- package/dist/src/benchmarks/IndexBenchmark.js +314 -0
- package/dist/src/benchmarks/IndexBenchmark.js.map +1 -0
- package/dist/src/benchmarks/MemoryProfiler.d.ts +266 -0
- package/dist/src/benchmarks/MemoryProfiler.d.ts.map +1 -0
- package/dist/src/benchmarks/MemoryProfiler.js +404 -0
- package/dist/src/benchmarks/MemoryProfiler.js.map +1 -0
- package/dist/src/benchmarks/SearchBenchmark.d.ts +71 -0
- package/dist/src/benchmarks/SearchBenchmark.d.ts.map +1 -0
- package/dist/src/benchmarks/SearchBenchmark.js +321 -0
- package/dist/src/benchmarks/SearchBenchmark.js.map +1 -0
- package/dist/src/benchmarks/cacheBenchmark.d.ts +75 -0
- package/dist/src/benchmarks/cacheBenchmark.d.ts.map +1 -0
- package/dist/src/benchmarks/cacheBenchmark.js +325 -0
- package/dist/src/benchmarks/cacheBenchmark.js.map +1 -0
- package/dist/src/benchmarks/cli.d.ts +17 -0
- package/dist/src/benchmarks/cli.d.ts.map +1 -0
- package/dist/src/benchmarks/cli.js +140 -0
- package/dist/src/benchmarks/cli.js.map +1 -0
- package/dist/src/benchmarks/embeddingBenchmark.d.ts +86 -0
- package/dist/src/benchmarks/embeddingBenchmark.d.ts.map +1 -0
- package/dist/src/benchmarks/embeddingBenchmark.js +329 -0
- package/dist/src/benchmarks/embeddingBenchmark.js.map +1 -0
- package/dist/src/benchmarks/index.d.ts +51 -0
- package/dist/src/benchmarks/index.d.ts.map +1 -0
- package/dist/src/benchmarks/index.js +201 -0
- package/dist/src/benchmarks/index.js.map +1 -0
- package/dist/src/benchmarks/stats.d.ts +56 -0
- package/dist/src/benchmarks/stats.d.ts.map +1 -0
- package/dist/src/benchmarks/stats.js +86 -0
- package/dist/src/benchmarks/stats.js.map +1 -0
- package/dist/src/cache/CacheEntry.d.ts +101 -0
- package/dist/src/cache/CacheEntry.d.ts.map +1 -0
- package/dist/src/cache/CacheEntry.js +238 -0
- package/dist/src/cache/CacheEntry.js.map +1 -0
- package/dist/src/cache/CacheManager.d.ts +167 -0
- package/dist/src/cache/CacheManager.d.ts.map +1 -0
- package/dist/src/cache/CacheManager.js +346 -0
- package/dist/src/cache/CacheManager.js.map +1 -0
- package/dist/src/cache/TieredCache.d.ts +97 -0
- package/dist/src/cache/TieredCache.d.ts.map +1 -0
- package/dist/src/cache/TieredCache.js +352 -0
- package/dist/src/cache/TieredCache.js.map +1 -0
- package/dist/src/cache/index.d.ts +63 -0
- package/dist/src/cache/index.d.ts.map +1 -0
- package/dist/src/cache/index.js +91 -0
- package/dist/src/cache/index.js.map +1 -0
- package/dist/src/cache/lru.d.ts +68 -0
- package/dist/src/cache/lru.d.ts.map +1 -0
- package/dist/src/cache/lru.js +105 -0
- package/dist/src/cache/lru.js.map +1 -0
- package/dist/src/cache/sqlite.d.ts +59 -0
- package/dist/src/cache/sqlite.d.ts.map +1 -0
- package/dist/src/cache/sqlite.js +159 -0
- package/dist/src/cache/sqlite.js.map +1 -0
- package/dist/src/db/quarantine-schema.d.ts +81 -0
- package/dist/src/db/quarantine-schema.d.ts.map +1 -0
- package/dist/src/db/quarantine-schema.js +110 -0
- package/dist/src/db/quarantine-schema.js.map +1 -0
- package/dist/src/db/schema.d.ts +65 -0
- package/dist/src/db/schema.d.ts.map +1 -0
- package/dist/src/db/schema.js +318 -0
- package/dist/src/db/schema.js.map +1 -0
- package/dist/src/embeddings/index.d.ts +158 -0
- package/dist/src/embeddings/index.d.ts.map +1 -0
- package/dist/src/embeddings/index.js +397 -0
- package/dist/src/embeddings/index.js.map +1 -0
- package/dist/src/errors/SkillsmithError.d.ts +118 -0
- package/dist/src/errors/SkillsmithError.d.ts.map +1 -0
- package/dist/src/errors/SkillsmithError.js +194 -0
- package/dist/src/errors/SkillsmithError.js.map +1 -0
- package/dist/src/errors/index.d.ts +36 -0
- package/dist/src/errors/index.d.ts.map +1 -0
- package/dist/src/errors/index.js +36 -0
- package/dist/src/errors/index.js.map +1 -0
- package/dist/src/errors.d.ts +72 -0
- package/dist/src/errors.d.ts.map +1 -0
- package/dist/src/errors.js +123 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/index.d.ts +56 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +73 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/index.test.d.ts +2 -0
- package/dist/src/index.test.d.ts.map +1 -0
- package/dist/src/index.test.js +35 -0
- package/dist/src/index.test.js.map +1 -0
- package/dist/src/indexer/GitHubIndexer.d.ts +107 -0
- package/dist/src/indexer/GitHubIndexer.d.ts.map +1 -0
- package/dist/src/indexer/GitHubIndexer.js +202 -0
- package/dist/src/indexer/GitHubIndexer.js.map +1 -0
- package/dist/src/indexer/PartitionStrategy.d.ts +115 -0
- package/dist/src/indexer/PartitionStrategy.d.ts.map +1 -0
- package/dist/src/indexer/PartitionStrategy.js +207 -0
- package/dist/src/indexer/PartitionStrategy.js.map +1 -0
- package/dist/src/indexer/SkillParser.d.ts +112 -0
- package/dist/src/indexer/SkillParser.d.ts.map +1 -0
- package/dist/src/indexer/SkillParser.js +281 -0
- package/dist/src/indexer/SkillParser.js.map +1 -0
- package/dist/src/indexer/SwarmIndexer.d.ts +163 -0
- package/dist/src/indexer/SwarmIndexer.d.ts.map +1 -0
- package/dist/src/indexer/SwarmIndexer.js +300 -0
- package/dist/src/indexer/SwarmIndexer.js.map +1 -0
- package/dist/src/indexer/index.d.ts +12 -0
- package/dist/src/indexer/index.d.ts.map +1 -0
- package/dist/src/indexer/index.js +16 -0
- package/dist/src/indexer/index.js.map +1 -0
- package/dist/src/learning/interfaces.d.ts +338 -0
- package/dist/src/learning/interfaces.d.ts.map +1 -0
- package/dist/src/learning/interfaces.js +13 -0
- package/dist/src/learning/interfaces.js.map +1 -0
- package/dist/src/learning/types.d.ts +284 -0
- package/dist/src/learning/types.d.ts.map +1 -0
- package/dist/src/learning/types.js +112 -0
- package/dist/src/learning/types.js.map +1 -0
- package/dist/src/matching/OverlapDetector.d.ts +152 -0
- package/dist/src/matching/OverlapDetector.d.ts.map +1 -0
- package/dist/src/matching/OverlapDetector.js +218 -0
- package/dist/src/matching/OverlapDetector.js.map +1 -0
- package/dist/src/matching/SkillMatcher.d.ts +125 -0
- package/dist/src/matching/SkillMatcher.d.ts.map +1 -0
- package/dist/src/matching/SkillMatcher.js +206 -0
- package/dist/src/matching/SkillMatcher.js.map +1 -0
- package/dist/src/matching/index.d.ts +14 -0
- package/dist/src/matching/index.d.ts.map +1 -0
- package/dist/src/matching/index.js +12 -0
- package/dist/src/matching/index.js.map +1 -0
- package/dist/src/pipeline/DailyIndexPipeline.d.ts +220 -0
- package/dist/src/pipeline/DailyIndexPipeline.d.ts.map +1 -0
- package/dist/src/pipeline/DailyIndexPipeline.js +320 -0
- package/dist/src/pipeline/DailyIndexPipeline.js.map +1 -0
- package/dist/src/pipeline/index.d.ts +9 -0
- package/dist/src/pipeline/index.d.ts.map +1 -0
- package/dist/src/pipeline/index.js +9 -0
- package/dist/src/pipeline/index.js.map +1 -0
- package/dist/src/repositories/CacheRepository.d.ts +60 -0
- package/dist/src/repositories/CacheRepository.d.ts.map +1 -0
- package/dist/src/repositories/CacheRepository.js +148 -0
- package/dist/src/repositories/CacheRepository.js.map +1 -0
- package/dist/src/repositories/IndexerRepository.d.ts +126 -0
- package/dist/src/repositories/IndexerRepository.d.ts.map +1 -0
- package/dist/src/repositories/IndexerRepository.js +270 -0
- package/dist/src/repositories/IndexerRepository.js.map +1 -0
- package/dist/src/repositories/QuarantineRepository.d.ts +255 -0
- package/dist/src/repositories/QuarantineRepository.d.ts.map +1 -0
- package/dist/src/repositories/QuarantineRepository.js +445 -0
- package/dist/src/repositories/QuarantineRepository.js.map +1 -0
- package/dist/src/repositories/SkillRepository.d.ts +78 -0
- package/dist/src/repositories/SkillRepository.d.ts.map +1 -0
- package/dist/src/repositories/SkillRepository.js +208 -0
- package/dist/src/repositories/SkillRepository.js.map +1 -0
- package/dist/src/scoring/QualityScorer.d.ts +188 -0
- package/dist/src/scoring/QualityScorer.d.ts.map +1 -0
- package/dist/src/scoring/QualityScorer.js +342 -0
- package/dist/src/scoring/QualityScorer.js.map +1 -0
- package/dist/src/scoring/index.d.ts +9 -0
- package/dist/src/scoring/index.d.ts.map +1 -0
- package/dist/src/scoring/index.js +9 -0
- package/dist/src/scoring/index.js.map +1 -0
- package/dist/src/scripts/__tests__/scan-imported-skills.test.d.ts +5 -0
- package/dist/src/scripts/__tests__/scan-imported-skills.test.d.ts.map +1 -0
- package/dist/src/scripts/__tests__/scan-imported-skills.test.js +365 -0
- package/dist/src/scripts/__tests__/scan-imported-skills.test.js.map +1 -0
- package/dist/src/scripts/import-github-skills.d.ts +24 -0
- package/dist/src/scripts/import-github-skills.d.ts.map +1 -0
- package/dist/src/scripts/import-github-skills.js +545 -0
- package/dist/src/scripts/import-github-skills.js.map +1 -0
- package/dist/src/scripts/import-to-database.d.ts +60 -0
- package/dist/src/scripts/import-to-database.d.ts.map +1 -0
- package/dist/src/scripts/import-to-database.js +307 -0
- package/dist/src/scripts/import-to-database.js.map +1 -0
- package/dist/src/scripts/scan-imported-skills.d.ts +15 -0
- package/dist/src/scripts/scan-imported-skills.d.ts.map +1 -0
- package/dist/src/scripts/scan-imported-skills.js +405 -0
- package/dist/src/scripts/scan-imported-skills.js.map +1 -0
- package/dist/src/scripts/validate-skills.d.ts +180 -0
- package/dist/src/scripts/validate-skills.d.ts.map +1 -0
- package/dist/src/scripts/validate-skills.js +572 -0
- package/dist/src/scripts/validate-skills.js.map +1 -0
- package/dist/src/search/hybrid.d.ts +85 -0
- package/dist/src/search/hybrid.d.ts.map +1 -0
- package/dist/src/search/hybrid.js +291 -0
- package/dist/src/search/hybrid.js.map +1 -0
- package/dist/src/search/index.d.ts +6 -0
- package/dist/src/search/index.d.ts.map +1 -0
- package/dist/src/search/index.js +5 -0
- package/dist/src/search/index.js.map +1 -0
- package/dist/src/security/AuditLogger.d.ts +197 -0
- package/dist/src/security/AuditLogger.d.ts.map +1 -0
- package/dist/src/security/AuditLogger.js +398 -0
- package/dist/src/security/AuditLogger.js.map +1 -0
- package/dist/src/security/RateLimiter.d.ts +337 -0
- package/dist/src/security/RateLimiter.d.ts.map +1 -0
- package/dist/src/security/RateLimiter.js +782 -0
- package/dist/src/security/RateLimiter.js.map +1 -0
- package/dist/src/security/__tests__/pathValidation.test.d.ts +8 -0
- package/dist/src/security/__tests__/pathValidation.test.d.ts.map +1 -0
- package/dist/src/security/__tests__/pathValidation.test.js +249 -0
- package/dist/src/security/__tests__/pathValidation.test.js.map +1 -0
- package/dist/src/security/index.d.ts +18 -0
- package/dist/src/security/index.d.ts.map +1 -0
- package/dist/src/security/index.js +14 -0
- package/dist/src/security/index.js.map +1 -0
- package/dist/src/security/pathValidation.d.ts +95 -0
- package/dist/src/security/pathValidation.d.ts.map +1 -0
- package/dist/src/security/pathValidation.js +216 -0
- package/dist/src/security/pathValidation.js.map +1 -0
- package/dist/src/security/sanitization.d.ts +123 -0
- package/dist/src/security/sanitization.d.ts.map +1 -0
- package/dist/src/security/sanitization.js +378 -0
- package/dist/src/security/sanitization.js.map +1 -0
- package/dist/src/security/scanner.d.ts +151 -0
- package/dist/src/security/scanner.d.ts.map +1 -0
- package/dist/src/security/scanner.js +599 -0
- package/dist/src/security/scanner.js.map +1 -0
- package/dist/src/services/SearchService.d.ts +88 -0
- package/dist/src/services/SearchService.d.ts.map +1 -0
- package/dist/src/services/SearchService.js +305 -0
- package/dist/src/services/SearchService.js.map +1 -0
- package/dist/src/session/SessionContext.d.ts +116 -0
- package/dist/src/session/SessionContext.d.ts.map +1 -0
- package/dist/src/session/SessionContext.js +134 -0
- package/dist/src/session/SessionContext.js.map +1 -0
- package/dist/src/session/SessionHealthMonitor.d.ts +249 -0
- package/dist/src/session/SessionHealthMonitor.d.ts.map +1 -0
- package/dist/src/session/SessionHealthMonitor.js +302 -0
- package/dist/src/session/SessionHealthMonitor.js.map +1 -0
- package/dist/src/session/SessionManager.d.ts +179 -0
- package/dist/src/session/SessionManager.d.ts.map +1 -0
- package/dist/src/session/SessionManager.js +451 -0
- package/dist/src/session/SessionManager.js.map +1 -0
- package/dist/src/session/SessionRecovery.d.ts +84 -0
- package/dist/src/session/SessionRecovery.d.ts.map +1 -0
- package/dist/src/session/SessionRecovery.js +257 -0
- package/dist/src/session/SessionRecovery.js.map +1 -0
- package/dist/src/session/index.d.ts +40 -0
- package/dist/src/session/index.d.ts.map +1 -0
- package/dist/src/session/index.js +44 -0
- package/dist/src/session/index.js.map +1 -0
- package/dist/src/sources/BaseSourceAdapter.d.ts +144 -0
- package/dist/src/sources/BaseSourceAdapter.d.ts.map +1 -0
- package/dist/src/sources/BaseSourceAdapter.js +287 -0
- package/dist/src/sources/BaseSourceAdapter.js.map +1 -0
- package/dist/src/sources/GitHubSourceAdapter.d.ts +98 -0
- package/dist/src/sources/GitHubSourceAdapter.d.ts.map +1 -0
- package/dist/src/sources/GitHubSourceAdapter.js +269 -0
- package/dist/src/sources/GitHubSourceAdapter.js.map +1 -0
- package/dist/src/sources/GitLabSourceAdapter.d.ts +102 -0
- package/dist/src/sources/GitLabSourceAdapter.d.ts.map +1 -0
- package/dist/src/sources/GitLabSourceAdapter.js +310 -0
- package/dist/src/sources/GitLabSourceAdapter.js.map +1 -0
- package/dist/src/sources/ISourceAdapter.d.ts +110 -0
- package/dist/src/sources/ISourceAdapter.d.ts.map +1 -0
- package/dist/src/sources/ISourceAdapter.js +19 -0
- package/dist/src/sources/ISourceAdapter.js.map +1 -0
- package/dist/src/sources/LocalFilesystemAdapter.d.ts +112 -0
- package/dist/src/sources/LocalFilesystemAdapter.d.ts.map +1 -0
- package/dist/src/sources/LocalFilesystemAdapter.js +340 -0
- package/dist/src/sources/LocalFilesystemAdapter.js.map +1 -0
- package/dist/src/sources/RawUrlSourceAdapter.d.ts +128 -0
- package/dist/src/sources/RawUrlSourceAdapter.d.ts.map +1 -0
- package/dist/src/sources/RawUrlSourceAdapter.js +282 -0
- package/dist/src/sources/RawUrlSourceAdapter.js.map +1 -0
- package/dist/src/sources/SourceAdapterRegistry.d.ts +156 -0
- package/dist/src/sources/SourceAdapterRegistry.d.ts.map +1 -0
- package/dist/src/sources/SourceAdapterRegistry.js +242 -0
- package/dist/src/sources/SourceAdapterRegistry.js.map +1 -0
- package/dist/src/sources/SourceIndexer.d.ts +119 -0
- package/dist/src/sources/SourceIndexer.d.ts.map +1 -0
- package/dist/src/sources/SourceIndexer.js +285 -0
- package/dist/src/sources/SourceIndexer.js.map +1 -0
- package/dist/src/sources/index.d.ts +45 -0
- package/dist/src/sources/index.d.ts.map +1 -0
- package/dist/src/sources/index.js +51 -0
- package/dist/src/sources/index.js.map +1 -0
- package/dist/src/sources/shared.d.ts +125 -0
- package/dist/src/sources/shared.d.ts.map +1 -0
- package/dist/src/sources/shared.js +191 -0
- package/dist/src/sources/shared.js.map +1 -0
- package/dist/src/sources/types.d.ts +204 -0
- package/dist/src/sources/types.d.ts.map +1 -0
- package/dist/src/sources/types.js +6 -0
- package/dist/src/sources/types.js.map +1 -0
- package/dist/src/telemetry/index.d.ts +25 -0
- package/dist/src/telemetry/index.d.ts.map +1 -0
- package/dist/src/telemetry/index.js +32 -0
- package/dist/src/telemetry/index.js.map +1 -0
- package/dist/src/telemetry/metrics.d.ts +171 -0
- package/dist/src/telemetry/metrics.d.ts.map +1 -0
- package/dist/src/telemetry/metrics.js +401 -0
- package/dist/src/telemetry/metrics.js.map +1 -0
- package/dist/src/telemetry/prometheus.d.ts +81 -0
- package/dist/src/telemetry/prometheus.d.ts.map +1 -0
- package/dist/src/telemetry/prometheus.js +252 -0
- package/dist/src/telemetry/prometheus.js.map +1 -0
- package/dist/src/telemetry/tracer.d.ts +151 -0
- package/dist/src/telemetry/tracer.d.ts.map +1 -0
- package/dist/src/telemetry/tracer.js +391 -0
- package/dist/src/telemetry/tracer.js.map +1 -0
- package/dist/src/triggers/ContextScorer.d.ts +118 -0
- package/dist/src/triggers/ContextScorer.d.ts.map +1 -0
- package/dist/src/triggers/ContextScorer.js +265 -0
- package/dist/src/triggers/ContextScorer.js.map +1 -0
- package/dist/src/triggers/TriggerDetector.d.ts +178 -0
- package/dist/src/triggers/TriggerDetector.d.ts.map +1 -0
- package/dist/src/triggers/TriggerDetector.js +390 -0
- package/dist/src/triggers/TriggerDetector.js.map +1 -0
- package/dist/src/triggers/__tests__/ContextScorer.test.d.ts +6 -0
- package/dist/src/triggers/__tests__/ContextScorer.test.d.ts.map +1 -0
- package/dist/src/triggers/__tests__/ContextScorer.test.js +307 -0
- package/dist/src/triggers/__tests__/ContextScorer.test.js.map +1 -0
- package/dist/src/triggers/__tests__/TriggerDetector.test.d.ts +6 -0
- package/dist/src/triggers/__tests__/TriggerDetector.test.d.ts.map +1 -0
- package/dist/src/triggers/__tests__/TriggerDetector.test.js +249 -0
- package/dist/src/triggers/__tests__/TriggerDetector.test.js.map +1 -0
- package/dist/src/triggers/index.d.ts +8 -0
- package/dist/src/triggers/index.d.ts.map +1 -0
- package/dist/src/triggers/index.js +8 -0
- package/dist/src/triggers/index.js.map +1 -0
- package/dist/src/types/skill.d.ts +80 -0
- package/dist/src/types/skill.d.ts.map +1 -0
- package/dist/src/types/skill.js +5 -0
- package/dist/src/types/skill.js.map +1 -0
- package/dist/src/types.d.ts +88 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +13 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/utils/index.d.ts +6 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/index.js +6 -0
- package/dist/src/utils/index.js.map +1 -0
- package/dist/src/utils/logger.d.ts +172 -0
- package/dist/src/utils/logger.d.ts.map +1 -0
- package/dist/src/utils/logger.js +291 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/dist/src/utils/retry.d.ts +97 -0
- package/dist/src/utils/retry.d.ts.map +1 -0
- package/dist/src/utils/retry.js +267 -0
- package/dist/src/utils/retry.js.map +1 -0
- package/dist/src/validation/index.d.ts +118 -0
- package/dist/src/validation/index.d.ts.map +1 -0
- package/dist/src/validation/index.js +434 -0
- package/dist/src/validation/index.js.map +1 -0
- package/dist/src/webhooks/WebhookHandler.d.ts +117 -0
- package/dist/src/webhooks/WebhookHandler.d.ts.map +1 -0
- package/dist/src/webhooks/WebhookHandler.js +349 -0
- package/dist/src/webhooks/WebhookHandler.js.map +1 -0
- package/dist/src/webhooks/WebhookPayload.d.ts +238 -0
- package/dist/src/webhooks/WebhookPayload.d.ts.map +1 -0
- package/dist/src/webhooks/WebhookPayload.js +244 -0
- package/dist/src/webhooks/WebhookPayload.js.map +1 -0
- package/dist/src/webhooks/WebhookQueue.d.ts +227 -0
- package/dist/src/webhooks/WebhookQueue.d.ts.map +1 -0
- package/dist/src/webhooks/WebhookQueue.js +328 -0
- package/dist/src/webhooks/WebhookQueue.js.map +1 -0
- package/dist/src/webhooks/index.d.ts +12 -0
- package/dist/src/webhooks/index.d.ts.map +1 -0
- package/dist/src/webhooks/index.js +15 -0
- package/dist/src/webhooks/index.js.map +1 -0
- package/dist/tests/Analytics.integration.test.d.ts +7 -0
- package/dist/tests/Analytics.integration.test.d.ts.map +1 -0
- package/dist/tests/Analytics.integration.test.js +367 -0
- package/dist/tests/Analytics.integration.test.js.map +1 -0
- package/dist/tests/AnalyticsRepository.test.d.ts +8 -0
- package/dist/tests/AnalyticsRepository.test.d.ts.map +1 -0
- package/dist/tests/AnalyticsRepository.test.js +399 -0
- package/dist/tests/AnalyticsRepository.test.js.map +1 -0
- package/dist/tests/AnalyticsStorage.test.d.ts +8 -0
- package/dist/tests/AnalyticsStorage.test.d.ts.map +1 -0
- package/dist/tests/AnalyticsStorage.test.js +271 -0
- package/dist/tests/AnalyticsStorage.test.js.map +1 -0
- package/dist/tests/AuditLogger.test.d.ts +8 -0
- package/dist/tests/AuditLogger.test.d.ts.map +1 -0
- package/dist/tests/AuditLogger.test.js +699 -0
- package/dist/tests/AuditLogger.test.js.map +1 -0
- package/dist/tests/BenchmarkRunner.test.d.ts +11 -0
- package/dist/tests/BenchmarkRunner.test.d.ts.map +1 -0
- package/dist/tests/BenchmarkRunner.test.js +641 -0
- package/dist/tests/BenchmarkRunner.test.js.map +1 -0
- package/dist/tests/CacheRepository.test.d.ts +5 -0
- package/dist/tests/CacheRepository.test.d.ts.map +1 -0
- package/dist/tests/CacheRepository.test.js +184 -0
- package/dist/tests/CacheRepository.test.js.map +1 -0
- package/dist/tests/CacheSecurity.test.d.ts +8 -0
- package/dist/tests/CacheSecurity.test.d.ts.map +1 -0
- package/dist/tests/CacheSecurity.test.js +273 -0
- package/dist/tests/CacheSecurity.test.js.map +1 -0
- package/dist/tests/CodebaseAnalyzer.test.d.ts +2 -0
- package/dist/tests/CodebaseAnalyzer.test.d.ts.map +1 -0
- package/dist/tests/CodebaseAnalyzer.test.js +347 -0
- package/dist/tests/CodebaseAnalyzer.test.js.map +1 -0
- package/dist/tests/DailyIndexPipeline.test.d.ts +7 -0
- package/dist/tests/DailyIndexPipeline.test.d.ts.map +1 -0
- package/dist/tests/DailyIndexPipeline.test.js +539 -0
- package/dist/tests/DailyIndexPipeline.test.js.map +1 -0
- package/dist/tests/EmbeddingService.test.d.ts +2 -0
- package/dist/tests/EmbeddingService.test.d.ts.map +1 -0
- package/dist/tests/EmbeddingService.test.js +252 -0
- package/dist/tests/EmbeddingService.test.js.map +1 -0
- package/dist/tests/ExperimentService.test.d.ts +7 -0
- package/dist/tests/ExperimentService.test.d.ts.map +1 -0
- package/dist/tests/ExperimentService.test.js +293 -0
- package/dist/tests/ExperimentService.test.js.map +1 -0
- package/dist/tests/GitHubIndexer.test.d.ts +10 -0
- package/dist/tests/GitHubIndexer.test.d.ts.map +1 -0
- package/dist/tests/GitHubIndexer.test.js +524 -0
- package/dist/tests/GitHubIndexer.test.js.map +1 -0
- package/dist/tests/GitHubSourceAdapter.test.d.ts +5 -0
- package/dist/tests/GitHubSourceAdapter.test.d.ts.map +1 -0
- package/dist/tests/GitHubSourceAdapter.test.js +385 -0
- package/dist/tests/GitHubSourceAdapter.test.js.map +1 -0
- package/dist/tests/MemoryProfiler.test.d.ts +12 -0
- package/dist/tests/MemoryProfiler.test.d.ts.map +1 -0
- package/dist/tests/MemoryProfiler.test.js +402 -0
- package/dist/tests/MemoryProfiler.test.js.map +1 -0
- package/dist/tests/OverlapDetector.test.d.ts +2 -0
- package/dist/tests/OverlapDetector.test.d.ts.map +1 -0
- package/dist/tests/OverlapDetector.test.js +340 -0
- package/dist/tests/OverlapDetector.test.js.map +1 -0
- package/dist/tests/QualityScorer.test.d.ts +7 -0
- package/dist/tests/QualityScorer.test.d.ts.map +1 -0
- package/dist/tests/QualityScorer.test.js +340 -0
- package/dist/tests/QualityScorer.test.js.map +1 -0
- package/dist/tests/QuarantineRepository.test.d.ts +7 -0
- package/dist/tests/QuarantineRepository.test.d.ts.map +1 -0
- package/dist/tests/QuarantineRepository.test.js +582 -0
- package/dist/tests/QuarantineRepository.test.js.map +1 -0
- package/dist/tests/ROIDashboardService.test.d.ts +7 -0
- package/dist/tests/ROIDashboardService.test.d.ts.map +1 -0
- package/dist/tests/ROIDashboardService.test.js +324 -0
- package/dist/tests/ROIDashboardService.test.js.map +1 -0
- package/dist/tests/RateLimiter.test.d.ts +7 -0
- package/dist/tests/RateLimiter.test.d.ts.map +1 -0
- package/dist/tests/RateLimiter.test.js +1017 -0
- package/dist/tests/RateLimiter.test.js.map +1 -0
- package/dist/tests/RawUrlSourceAdapter.security.test.d.ts +7 -0
- package/dist/tests/RawUrlSourceAdapter.security.test.d.ts.map +1 -0
- package/dist/tests/RawUrlSourceAdapter.security.test.js +455 -0
- package/dist/tests/RawUrlSourceAdapter.security.test.js.map +1 -0
- package/dist/tests/ScraperAdapters.test.d.ts +7 -0
- package/dist/tests/ScraperAdapters.test.d.ts.map +1 -0
- package/dist/tests/ScraperAdapters.test.js +748 -0
- package/dist/tests/ScraperAdapters.test.js.map +1 -0
- package/dist/tests/SearchQuality.test.d.ts +8 -0
- package/dist/tests/SearchQuality.test.d.ts.map +1 -0
- package/dist/tests/SearchQuality.test.js +397 -0
- package/dist/tests/SearchQuality.test.js.map +1 -0
- package/dist/tests/SearchService.test.d.ts +5 -0
- package/dist/tests/SearchService.test.d.ts.map +1 -0
- package/dist/tests/SearchService.test.js +218 -0
- package/dist/tests/SearchService.test.js.map +1 -0
- package/dist/tests/SecurityScanner.test.d.ts +6 -0
- package/dist/tests/SecurityScanner.test.d.ts.map +1 -0
- package/dist/tests/SecurityScanner.test.js +449 -0
- package/dist/tests/SecurityScanner.test.js.map +1 -0
- package/dist/tests/SessionHealthMonitor.test.d.ts +5 -0
- package/dist/tests/SessionHealthMonitor.test.d.ts.map +1 -0
- package/dist/tests/SessionHealthMonitor.test.js +449 -0
- package/dist/tests/SessionHealthMonitor.test.js.map +1 -0
- package/dist/tests/SessionManager.security.test.d.ts +10 -0
- package/dist/tests/SessionManager.security.test.d.ts.map +1 -0
- package/dist/tests/SessionManager.security.test.js +395 -0
- package/dist/tests/SessionManager.security.test.js.map +1 -0
- package/dist/tests/SessionManager.test.d.ts +8 -0
- package/dist/tests/SessionManager.test.d.ts.map +1 -0
- package/dist/tests/SessionManager.test.js +446 -0
- package/dist/tests/SessionManager.test.js.map +1 -0
- package/dist/tests/SkillMatcher.test.d.ts +2 -0
- package/dist/tests/SkillMatcher.test.d.ts.map +1 -0
- package/dist/tests/SkillMatcher.test.js +253 -0
- package/dist/tests/SkillMatcher.test.js.map +1 -0
- package/dist/tests/SkillRepository.test.d.ts +5 -0
- package/dist/tests/SkillRepository.test.d.ts.map +1 -0
- package/dist/tests/SkillRepository.test.js +237 -0
- package/dist/tests/SkillRepository.test.js.map +1 -0
- package/dist/tests/SwarmIndexer.test.d.ts +11 -0
- package/dist/tests/SwarmIndexer.test.d.ts.map +1 -0
- package/dist/tests/SwarmIndexer.test.js +374 -0
- package/dist/tests/SwarmIndexer.test.js.map +1 -0
- package/dist/tests/TieredCache.test.d.ts +7 -0
- package/dist/tests/TieredCache.test.d.ts.map +1 -0
- package/dist/tests/TieredCache.test.js +529 -0
- package/dist/tests/TieredCache.test.js.map +1 -0
- package/dist/tests/UsageAnalyticsService.test.d.ts +7 -0
- package/dist/tests/UsageAnalyticsService.test.d.ts.map +1 -0
- package/dist/tests/UsageAnalyticsService.test.js +238 -0
- package/dist/tests/UsageAnalyticsService.test.js.map +1 -0
- package/dist/tests/UsageTracker.test.d.ts +7 -0
- package/dist/tests/UsageTracker.test.d.ts.map +1 -0
- package/dist/tests/UsageTracker.test.js +196 -0
- package/dist/tests/UsageTracker.test.js.map +1 -0
- package/dist/tests/WebhookHandler.test.d.ts +10 -0
- package/dist/tests/WebhookHandler.test.d.ts.map +1 -0
- package/dist/tests/WebhookHandler.test.js +592 -0
- package/dist/tests/WebhookHandler.test.js.map +1 -0
- package/dist/tests/analytics/metrics-aggregator.test.d.ts +11 -0
- package/dist/tests/analytics/metrics-aggregator.test.d.ts.map +1 -0
- package/dist/tests/analytics/metrics-aggregator.test.js +273 -0
- package/dist/tests/analytics/metrics-aggregator.test.js.map +1 -0
- package/dist/tests/analytics/metrics-exporter.test.d.ts +11 -0
- package/dist/tests/analytics/metrics-exporter.test.d.ts.map +1 -0
- package/dist/tests/analytics/metrics-exporter.test.js +371 -0
- package/dist/tests/analytics/metrics-exporter.test.js.map +1 -0
- package/dist/tests/analytics/usage-tracker.test.d.ts +10 -0
- package/dist/tests/analytics/usage-tracker.test.d.ts.map +1 -0
- package/dist/tests/analytics/usage-tracker.test.js +151 -0
- package/dist/tests/analytics/usage-tracker.test.js.map +1 -0
- package/dist/tests/anonymizer.test.d.ts +8 -0
- package/dist/tests/anonymizer.test.d.ts.map +1 -0
- package/dist/tests/anonymizer.test.js +153 -0
- package/dist/tests/anonymizer.test.js.map +1 -0
- package/dist/tests/cache.test.d.ts +6 -0
- package/dist/tests/cache.test.d.ts.map +1 -0
- package/dist/tests/cache.test.js +170 -0
- package/dist/tests/cache.test.js.map +1 -0
- package/dist/tests/e2e/security/security.e2e.test.d.ts +8 -0
- package/dist/tests/e2e/security/security.e2e.test.d.ts.map +1 -0
- package/dist/tests/e2e/security/security.e2e.test.js +448 -0
- package/dist/tests/e2e/security/security.e2e.test.js.map +1 -0
- package/dist/tests/edge-cases/EdgeCases.test.d.ts +13 -0
- package/dist/tests/edge-cases/EdgeCases.test.d.ts.map +1 -0
- package/dist/tests/edge-cases/EdgeCases.test.js +844 -0
- package/dist/tests/edge-cases/EdgeCases.test.js.map +1 -0
- package/dist/tests/import-github-skills.test.d.ts +8 -0
- package/dist/tests/import-github-skills.test.d.ts.map +1 -0
- package/dist/tests/import-github-skills.test.js +390 -0
- package/dist/tests/import-github-skills.test.js.map +1 -0
- package/dist/tests/logger.test.d.ts +2 -0
- package/dist/tests/logger.test.d.ts.map +1 -0
- package/dist/tests/logger.test.js +417 -0
- package/dist/tests/logger.test.js.map +1 -0
- package/dist/tests/performance/LargeScalePerformance.test.d.ts +14 -0
- package/dist/tests/performance/LargeScalePerformance.test.d.ts.map +1 -0
- package/dist/tests/performance/LargeScalePerformance.test.js +558 -0
- package/dist/tests/performance/LargeScalePerformance.test.js.map +1 -0
- package/dist/tests/retry.test.d.ts +7 -0
- package/dist/tests/retry.test.d.ts.map +1 -0
- package/dist/tests/retry.test.js +302 -0
- package/dist/tests/retry.test.js.map +1 -0
- package/dist/tests/sanitization.test.d.ts +8 -0
- package/dist/tests/sanitization.test.d.ts.map +1 -0
- package/dist/tests/sanitization.test.js +413 -0
- package/dist/tests/sanitization.test.js.map +1 -0
- package/dist/tests/schema.test.d.ts +5 -0
- package/dist/tests/schema.test.d.ts.map +1 -0
- package/dist/tests/schema.test.js +167 -0
- package/dist/tests/schema.test.js.map +1 -0
- package/dist/tests/scripts/import-to-database.test.d.ts +11 -0
- package/dist/tests/scripts/import-to-database.test.d.ts.map +1 -0
- package/dist/tests/scripts/import-to-database.test.js +325 -0
- package/dist/tests/scripts/import-to-database.test.js.map +1 -0
- package/dist/tests/security/ContinuousSecurity.test.d.ts +6 -0
- package/dist/tests/security/ContinuousSecurity.test.d.ts.map +1 -0
- package/dist/tests/security/ContinuousSecurity.test.js +595 -0
- package/dist/tests/security/ContinuousSecurity.test.js.map +1 -0
- package/dist/tests/security/ReDoS.test.d.ts +8 -0
- package/dist/tests/security/ReDoS.test.d.ts.map +1 -0
- package/dist/tests/security/ReDoS.test.js +213 -0
- package/dist/tests/security/ReDoS.test.js.map +1 -0
- package/dist/tests/security.test.d.ts +5 -0
- package/dist/tests/security.test.d.ts.map +1 -0
- package/dist/tests/security.test.js +134 -0
- package/dist/tests/security.test.js.map +1 -0
- package/dist/tests/shared.test.d.ts +7 -0
- package/dist/tests/shared.test.d.ts.map +1 -0
- package/dist/tests/shared.test.js +480 -0
- package/dist/tests/shared.test.js.map +1 -0
- package/dist/tests/sources.test.d.ts +5 -0
- package/dist/tests/sources.test.d.ts.map +1 -0
- package/dist/tests/sources.test.js +369 -0
- package/dist/tests/sources.test.js.map +1 -0
- package/dist/tests/stats.test.d.ts +11 -0
- package/dist/tests/stats.test.d.ts.map +1 -0
- package/dist/tests/stats.test.js +124 -0
- package/dist/tests/stats.test.js.map +1 -0
- package/dist/tests/telemetry.test.d.ts +11 -0
- package/dist/tests/telemetry.test.d.ts.map +1 -0
- package/dist/tests/telemetry.test.js +424 -0
- package/dist/tests/telemetry.test.js.map +1 -0
- package/dist/tests/test-utils.d.ts +74 -0
- package/dist/tests/test-utils.d.ts.map +1 -0
- package/dist/tests/test-utils.js +98 -0
- package/dist/tests/test-utils.js.map +1 -0
- package/dist/tests/validate-skills.test.d.ts +5 -0
- package/dist/tests/validate-skills.test.d.ts.map +1 -0
- package/dist/tests/validate-skills.test.js +649 -0
- package/dist/tests/validate-skills.test.js.map +1 -0
- package/dist/tests/validation.test.d.ts +7 -0
- package/dist/tests/validation.test.d.ts.map +1 -0
- package/dist/tests/validation.test.js +495 -0
- package/dist/tests/validation.test.js.map +1 -0
- package/dist/tests/webhooks/WebhookHandler.idempotency.test.d.ts +8 -0
- package/dist/tests/webhooks/WebhookHandler.idempotency.test.d.ts.map +1 -0
- package/dist/tests/webhooks/WebhookHandler.idempotency.test.js +190 -0
- package/dist/tests/webhooks/WebhookHandler.idempotency.test.js.map +1 -0
- package/dist/tests/webhooks/WebhookPayload.security.test.d.ts +8 -0
- package/dist/tests/webhooks/WebhookPayload.security.test.d.ts.map +1 -0
- package/dist/tests/webhooks/WebhookPayload.security.test.js +204 -0
- package/dist/tests/webhooks/WebhookPayload.security.test.js.map +1 -0
- package/dist/vitest.config.d.ts +3 -0
- package/dist/vitest.config.d.ts.map +1 -0
- package/dist/vitest.config.js +13 -0
- package/dist/vitest.config.js.map +1 -0
- package/package.json +77 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-579: SearchService - FTS5 search with BM25 ranking
|
|
3
|
+
*
|
|
4
|
+
* Features:
|
|
5
|
+
* - Full-text search using SQLite FTS5
|
|
6
|
+
* - BM25 ranking for relevance scoring
|
|
7
|
+
* - Phrase queries and boolean operators
|
|
8
|
+
* - Result highlighting for matched terms
|
|
9
|
+
* - Pagination support
|
|
10
|
+
* - Search caching
|
|
11
|
+
*/
|
|
12
|
+
import type { Database as DatabaseType } from 'better-sqlite3';
|
|
13
|
+
import type { Skill, SearchOptions, SearchResult, PaginatedResults, TrustTier } from '../types/skill.js';
|
|
14
|
+
/**
|
|
15
|
+
* Full-text search service with BM25 ranking
|
|
16
|
+
*/
|
|
17
|
+
export declare class SearchService {
|
|
18
|
+
private db;
|
|
19
|
+
private cache;
|
|
20
|
+
private cacheTtl;
|
|
21
|
+
constructor(db: DatabaseType, options?: {
|
|
22
|
+
cacheTtl?: number;
|
|
23
|
+
});
|
|
24
|
+
/**
|
|
25
|
+
* Search skills using FTS5 with BM25 ranking
|
|
26
|
+
*/
|
|
27
|
+
search(options: SearchOptions): PaginatedResults<SearchResult>;
|
|
28
|
+
/**
|
|
29
|
+
* Search with phrase query support
|
|
30
|
+
*/
|
|
31
|
+
searchPhrase(phrase: string, options?: Omit<SearchOptions, 'query'>): PaginatedResults<SearchResult>;
|
|
32
|
+
/**
|
|
33
|
+
* Search with boolean operators (AND, OR, NOT)
|
|
34
|
+
*/
|
|
35
|
+
searchBoolean(terms: {
|
|
36
|
+
must?: string[];
|
|
37
|
+
should?: string[];
|
|
38
|
+
not?: string[];
|
|
39
|
+
}, options?: Omit<SearchOptions, 'query'>): PaginatedResults<SearchResult>;
|
|
40
|
+
/**
|
|
41
|
+
* Get search suggestions based on partial input
|
|
42
|
+
*/
|
|
43
|
+
suggest(prefix: string, limit?: number): string[];
|
|
44
|
+
/**
|
|
45
|
+
* Find similar skills based on a skill's content
|
|
46
|
+
*/
|
|
47
|
+
findSimilar(skillId: string, limit?: number): SearchResult[];
|
|
48
|
+
/**
|
|
49
|
+
* Get popular skills by trust tier
|
|
50
|
+
*/
|
|
51
|
+
getPopular(trustTier?: TrustTier, limit?: number): Skill[];
|
|
52
|
+
/**
|
|
53
|
+
* Clear the search cache
|
|
54
|
+
*/
|
|
55
|
+
clearCache(): number;
|
|
56
|
+
/**
|
|
57
|
+
* Build FTS5 query with proper escaping
|
|
58
|
+
*
|
|
59
|
+
* SMI-1034: Enhanced to filter empty tokens after escaping special characters.
|
|
60
|
+
*/
|
|
61
|
+
private buildFtsQuery;
|
|
62
|
+
/**
|
|
63
|
+
* Escape a single FTS token
|
|
64
|
+
*
|
|
65
|
+
* SMI-1034: Escape FTS5 special characters to prevent syntax errors.
|
|
66
|
+
* FTS5 special characters include: . " ' ( ) [ ] { } * ^ -
|
|
67
|
+
* The hyphen `-` is the NOT operator in FTS5, so it must be escaped too.
|
|
68
|
+
* These are replaced with spaces to ensure queries don't fail.
|
|
69
|
+
*/
|
|
70
|
+
private escapeFtsToken;
|
|
71
|
+
/**
|
|
72
|
+
* Build cache key from search options
|
|
73
|
+
*/
|
|
74
|
+
private buildCacheKey;
|
|
75
|
+
/**
|
|
76
|
+
* Build a search result with highlights
|
|
77
|
+
*/
|
|
78
|
+
private buildSearchResult;
|
|
79
|
+
/**
|
|
80
|
+
* Build highlighted snippets for matched terms
|
|
81
|
+
*/
|
|
82
|
+
private buildHighlights;
|
|
83
|
+
/**
|
|
84
|
+
* Convert database row to Skill object
|
|
85
|
+
*/
|
|
86
|
+
private rowToSkill;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=SearchService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchService.d.ts","sourceRoot":"","sources":["../../../src/services/SearchService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC9D,OAAO,KAAK,EACV,KAAK,EACL,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,SAAS,EACV,MAAM,mBAAmB,CAAA;AAiB1B;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,EAAE,CAAc;IACxB,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,QAAQ,CAAQ;gBAEZ,EAAE,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE;IAM7D;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,gBAAgB,CAAC,YAAY,CAAC;IA0F9D;;OAEG;IACH,YAAY,CACV,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,GACrC,gBAAgB,CAAC,YAAY,CAAC;IAMjC;;OAEG;IACH,aAAa,CACX,KAAK,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,EAC7D,OAAO,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,GACrC,gBAAgB,CAAC,YAAY,CAAC;IAmBjC;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,MAAM,EAAE;IAapD;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,YAAY,EAAE;IA2B/D;;OAEG;IACH,UAAU,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,GAAE,MAAW,GAAG,KAAK,EAAE;IAoB9D;;OAEG;IACH,UAAU,IAAI,MAAM;IAIpB;;;;OAIG;IACH,OAAO,CAAC,aAAa;IA4BrB;;;;;;;OAOG;IACH,OAAO,CAAC,cAAc;IAStB;;OAEG;IACH,OAAO,CAAC,aAAa;IAIrB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAWzB;;OAEG;IACH,OAAO,CAAC,eAAe;IA2CvB;;OAEG;IACH,OAAO,CAAC,UAAU;CAcnB"}
|
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-579: SearchService - FTS5 search with BM25 ranking
|
|
3
|
+
*
|
|
4
|
+
* Features:
|
|
5
|
+
* - Full-text search using SQLite FTS5
|
|
6
|
+
* - BM25 ranking for relevance scoring
|
|
7
|
+
* - Phrase queries and boolean operators
|
|
8
|
+
* - Result highlighting for matched terms
|
|
9
|
+
* - Pagination support
|
|
10
|
+
* - Search caching
|
|
11
|
+
*/
|
|
12
|
+
import { CacheRepository } from '../repositories/CacheRepository.js';
|
|
13
|
+
/**
|
|
14
|
+
* Full-text search service with BM25 ranking
|
|
15
|
+
*/
|
|
16
|
+
export class SearchService {
|
|
17
|
+
db;
|
|
18
|
+
cache;
|
|
19
|
+
cacheTtl;
|
|
20
|
+
constructor(db, options) {
|
|
21
|
+
this.db = db;
|
|
22
|
+
this.cache = new CacheRepository(db);
|
|
23
|
+
this.cacheTtl = options?.cacheTtl ?? 300; // 5 minutes default
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Search skills using FTS5 with BM25 ranking
|
|
27
|
+
*/
|
|
28
|
+
search(options) {
|
|
29
|
+
const { query, limit = 20, offset = 0, trustTier, minQualityScore, category } = options;
|
|
30
|
+
// Check cache first
|
|
31
|
+
const cacheKey = this.buildCacheKey(options);
|
|
32
|
+
const cached = this.cache.get(cacheKey);
|
|
33
|
+
if (cached) {
|
|
34
|
+
return cached;
|
|
35
|
+
}
|
|
36
|
+
// Build the FTS5 query
|
|
37
|
+
const ftsQuery = this.buildFtsQuery(query);
|
|
38
|
+
// Handle empty/whitespace-only queries - return empty results
|
|
39
|
+
if (!ftsQuery) {
|
|
40
|
+
return { items: [], total: 0, limit, offset, hasMore: false };
|
|
41
|
+
}
|
|
42
|
+
// Build filter conditions
|
|
43
|
+
const filters = [];
|
|
44
|
+
const params = [ftsQuery];
|
|
45
|
+
if (trustTier) {
|
|
46
|
+
filters.push('s.trust_tier = ?');
|
|
47
|
+
params.push(trustTier);
|
|
48
|
+
}
|
|
49
|
+
if (minQualityScore !== undefined) {
|
|
50
|
+
filters.push('s.quality_score >= ?');
|
|
51
|
+
params.push(minQualityScore);
|
|
52
|
+
}
|
|
53
|
+
// Category filter requires joining with skill_categories and categories tables
|
|
54
|
+
let categoryJoin = '';
|
|
55
|
+
if (category) {
|
|
56
|
+
categoryJoin = `
|
|
57
|
+
INNER JOIN skill_categories sc ON s.id = sc.skill_id
|
|
58
|
+
INNER JOIN categories c ON sc.category_id = c.id`;
|
|
59
|
+
filters.push('c.name = ?');
|
|
60
|
+
params.push(category);
|
|
61
|
+
}
|
|
62
|
+
const whereClause = filters.length > 0 ? `AND ${filters.join(' AND ')}` : '';
|
|
63
|
+
// Count total results
|
|
64
|
+
const countSql = `
|
|
65
|
+
SELECT COUNT(*) as total
|
|
66
|
+
FROM skills s
|
|
67
|
+
INNER JOIN skills_fts f ON s.rowid = f.rowid
|
|
68
|
+
${categoryJoin}
|
|
69
|
+
WHERE skills_fts MATCH ?
|
|
70
|
+
${whereClause}
|
|
71
|
+
`;
|
|
72
|
+
const { total } = this.db.prepare(countSql).get(...params);
|
|
73
|
+
// Get paginated results with BM25 ranking
|
|
74
|
+
const searchSql = `
|
|
75
|
+
SELECT
|
|
76
|
+
s.*,
|
|
77
|
+
bm25(skills_fts, 10.0, 5.0, 1.0, 2.0) as rank
|
|
78
|
+
FROM skills s
|
|
79
|
+
INNER JOIN skills_fts f ON s.rowid = f.rowid
|
|
80
|
+
${categoryJoin}
|
|
81
|
+
WHERE skills_fts MATCH ?
|
|
82
|
+
${whereClause}
|
|
83
|
+
ORDER BY rank
|
|
84
|
+
LIMIT ? OFFSET ?
|
|
85
|
+
`;
|
|
86
|
+
params.push(limit, offset);
|
|
87
|
+
const rows = this.db.prepare(searchSql).all(...params);
|
|
88
|
+
// Build results with highlights
|
|
89
|
+
const items = rows.map((row) => this.buildSearchResult(row, query));
|
|
90
|
+
const result = {
|
|
91
|
+
items,
|
|
92
|
+
total,
|
|
93
|
+
limit,
|
|
94
|
+
offset,
|
|
95
|
+
hasMore: offset + items.length < total,
|
|
96
|
+
};
|
|
97
|
+
// Cache the results
|
|
98
|
+
this.cache.set(cacheKey, result, this.cacheTtl);
|
|
99
|
+
return result;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Search with phrase query support
|
|
103
|
+
*/
|
|
104
|
+
searchPhrase(phrase, options) {
|
|
105
|
+
// Wrap in quotes for exact phrase matching
|
|
106
|
+
const query = `"${phrase.replace(/"/g, '""')}"`;
|
|
107
|
+
return this.search({ ...options, query });
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Search with boolean operators (AND, OR, NOT)
|
|
111
|
+
*/
|
|
112
|
+
searchBoolean(terms, options) {
|
|
113
|
+
const parts = [];
|
|
114
|
+
if (terms.must?.length) {
|
|
115
|
+
parts.push(terms.must.map((t) => this.escapeFtsToken(t)).join(' AND '));
|
|
116
|
+
}
|
|
117
|
+
if (terms.should?.length) {
|
|
118
|
+
parts.push(`(${terms.should.map((t) => this.escapeFtsToken(t)).join(' OR ')})`);
|
|
119
|
+
}
|
|
120
|
+
if (terms.not?.length) {
|
|
121
|
+
parts.push(terms.not.map((t) => `NOT ${this.escapeFtsToken(t)}`).join(' AND '));
|
|
122
|
+
}
|
|
123
|
+
const query = parts.join(' AND ');
|
|
124
|
+
return this.search({ ...options, query });
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Get search suggestions based on partial input
|
|
128
|
+
*/
|
|
129
|
+
suggest(prefix, limit = 5) {
|
|
130
|
+
const sql = `
|
|
131
|
+
SELECT DISTINCT name
|
|
132
|
+
FROM skills
|
|
133
|
+
WHERE name LIKE ? || '%'
|
|
134
|
+
ORDER BY quality_score DESC NULLS LAST
|
|
135
|
+
LIMIT ?
|
|
136
|
+
`;
|
|
137
|
+
const rows = this.db.prepare(sql).all(prefix, limit);
|
|
138
|
+
return rows.map((row) => row.name);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Find similar skills based on a skill's content
|
|
142
|
+
*/
|
|
143
|
+
findSimilar(skillId, limit = 5) {
|
|
144
|
+
const skill = this.db.prepare('SELECT * FROM skills WHERE id = ?').get(skillId);
|
|
145
|
+
if (!skill)
|
|
146
|
+
return [];
|
|
147
|
+
// Build a query from the skill's name and tags
|
|
148
|
+
const tags = JSON.parse(skill.tags || '[]');
|
|
149
|
+
const queryParts = [skill.name, ...tags].filter(Boolean);
|
|
150
|
+
const query = queryParts.map((p) => this.escapeFtsToken(p)).join(' OR ');
|
|
151
|
+
const sql = `
|
|
152
|
+
SELECT
|
|
153
|
+
s.*,
|
|
154
|
+
bm25(skills_fts, 10.0, 5.0, 1.0, 2.0) as rank
|
|
155
|
+
FROM skills s
|
|
156
|
+
INNER JOIN skills_fts f ON s.rowid = f.rowid
|
|
157
|
+
WHERE skills_fts MATCH ?
|
|
158
|
+
AND s.id != ?
|
|
159
|
+
ORDER BY rank
|
|
160
|
+
LIMIT ?
|
|
161
|
+
`;
|
|
162
|
+
const rows = this.db.prepare(sql).all(query, skillId, limit);
|
|
163
|
+
return rows.map((row) => this.buildSearchResult(row, skill.name));
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Get popular skills by trust tier
|
|
167
|
+
*/
|
|
168
|
+
getPopular(trustTier, limit = 10) {
|
|
169
|
+
let sql = `
|
|
170
|
+
SELECT * FROM skills
|
|
171
|
+
WHERE quality_score IS NOT NULL
|
|
172
|
+
`;
|
|
173
|
+
const params = [];
|
|
174
|
+
if (trustTier) {
|
|
175
|
+
sql += ' AND trust_tier = ?';
|
|
176
|
+
params.push(trustTier);
|
|
177
|
+
}
|
|
178
|
+
sql += ' ORDER BY quality_score DESC LIMIT ?';
|
|
179
|
+
params.push(limit);
|
|
180
|
+
const rows = this.db.prepare(sql).all(...params);
|
|
181
|
+
return rows.map((row) => this.rowToSkill(row));
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Clear the search cache
|
|
185
|
+
*/
|
|
186
|
+
clearCache() {
|
|
187
|
+
return this.cache.clear();
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Build FTS5 query with proper escaping
|
|
191
|
+
*
|
|
192
|
+
* SMI-1034: Enhanced to filter empty tokens after escaping special characters.
|
|
193
|
+
*/
|
|
194
|
+
buildFtsQuery(query) {
|
|
195
|
+
// Handle special FTS5 syntax (advanced users can use raw FTS5 queries)
|
|
196
|
+
// Only pass through if quotes are balanced (phrase query) and operators are space-separated
|
|
197
|
+
const quoteCount = (query.match(/"/g) || []).length;
|
|
198
|
+
const hasBalancedQuotes = quoteCount > 0 && quoteCount % 2 === 0;
|
|
199
|
+
const hasOperators = query.includes(' AND ') || query.includes(' OR ') || query.includes(' NOT ');
|
|
200
|
+
if (hasBalancedQuotes || hasOperators) {
|
|
201
|
+
return query;
|
|
202
|
+
}
|
|
203
|
+
// Split into tokens, escape each, and filter empty results
|
|
204
|
+
const tokens = query
|
|
205
|
+
.trim()
|
|
206
|
+
.split(/\s+/)
|
|
207
|
+
.filter(Boolean)
|
|
208
|
+
.map((t) => this.escapeFtsToken(t))
|
|
209
|
+
.filter((t) => t.length > 0); // Remove empty tokens after escaping
|
|
210
|
+
// Return empty string if no valid tokens remain
|
|
211
|
+
if (tokens.length === 0) {
|
|
212
|
+
return '';
|
|
213
|
+
}
|
|
214
|
+
return tokens.map((t) => t + '*').join(' ');
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Escape a single FTS token
|
|
218
|
+
*
|
|
219
|
+
* SMI-1034: Escape FTS5 special characters to prevent syntax errors.
|
|
220
|
+
* FTS5 special characters include: . " ' ( ) [ ] { } * ^ -
|
|
221
|
+
* The hyphen `-` is the NOT operator in FTS5, so it must be escaped too.
|
|
222
|
+
* These are replaced with spaces to ensure queries don't fail.
|
|
223
|
+
*/
|
|
224
|
+
escapeFtsToken(token) {
|
|
225
|
+
// Remove FTS5 special syntax characters that would cause parse errors
|
|
226
|
+
// Including hyphen which is the NOT operator in FTS5
|
|
227
|
+
return token
|
|
228
|
+
.replace(/[."'()[\]{}*^-]/g, ' ') // Replace special chars with space (including hyphen)
|
|
229
|
+
.replace(/\s+/g, ' ') // Collapse multiple spaces
|
|
230
|
+
.trim();
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Build cache key from search options
|
|
234
|
+
*/
|
|
235
|
+
buildCacheKey(options) {
|
|
236
|
+
return `search:${JSON.stringify(options)}`;
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Build a search result with highlights
|
|
240
|
+
*/
|
|
241
|
+
buildSearchResult(row, query) {
|
|
242
|
+
const skill = this.rowToSkill(row);
|
|
243
|
+
const highlights = this.buildHighlights(skill, query);
|
|
244
|
+
return {
|
|
245
|
+
skill,
|
|
246
|
+
rank: Math.abs(row.rank), // BM25 returns negative values
|
|
247
|
+
highlights,
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Build highlighted snippets for matched terms
|
|
252
|
+
*/
|
|
253
|
+
buildHighlights(skill, query) {
|
|
254
|
+
const highlights = {};
|
|
255
|
+
// Extract query terms (ignoring operators)
|
|
256
|
+
const terms = query
|
|
257
|
+
.replace(/["()]/g, '')
|
|
258
|
+
.split(/\s+/)
|
|
259
|
+
.filter((t) => !['AND', 'OR', 'NOT'].includes(t.toUpperCase()))
|
|
260
|
+
.map((t) => t.replace(/\*$/, '').toLowerCase());
|
|
261
|
+
// Build regex for matching
|
|
262
|
+
if (terms.length === 0)
|
|
263
|
+
return highlights;
|
|
264
|
+
const regex = new RegExp(`(${terms.map((t) => t.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')).join('|')})`, 'gi');
|
|
265
|
+
// Highlight in name
|
|
266
|
+
if (skill.name && regex.test(skill.name)) {
|
|
267
|
+
highlights.name = skill.name.replace(regex, '<mark>$1</mark>');
|
|
268
|
+
}
|
|
269
|
+
// Highlight in description
|
|
270
|
+
if (skill.description && regex.test(skill.description)) {
|
|
271
|
+
// Find the first match and extract surrounding context
|
|
272
|
+
const match = skill.description.match(regex);
|
|
273
|
+
if (match) {
|
|
274
|
+
const index = skill.description.toLowerCase().indexOf(match[0].toLowerCase());
|
|
275
|
+
const start = Math.max(0, index - 50);
|
|
276
|
+
const end = Math.min(skill.description.length, index + match[0].length + 50);
|
|
277
|
+
let snippet = skill.description.slice(start, end);
|
|
278
|
+
if (start > 0)
|
|
279
|
+
snippet = '...' + snippet;
|
|
280
|
+
if (end < skill.description.length)
|
|
281
|
+
snippet = snippet + '...';
|
|
282
|
+
highlights.description = snippet.replace(regex, '<mark>$1</mark>');
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
return highlights;
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Convert database row to Skill object
|
|
289
|
+
*/
|
|
290
|
+
rowToSkill(row) {
|
|
291
|
+
return {
|
|
292
|
+
id: row.id,
|
|
293
|
+
name: row.name,
|
|
294
|
+
description: row.description,
|
|
295
|
+
author: row.author,
|
|
296
|
+
repoUrl: row.repo_url,
|
|
297
|
+
qualityScore: row.quality_score,
|
|
298
|
+
trustTier: row.trust_tier,
|
|
299
|
+
tags: JSON.parse(row.tags || '[]'),
|
|
300
|
+
createdAt: row.created_at,
|
|
301
|
+
updatedAt: row.updated_at,
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
//# sourceMappingURL=SearchService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchService.js","sourceRoot":"","sources":["../../../src/services/SearchService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Context Types and Utilities
|
|
3
|
+
* SMI-641: Session ID Storage in Claude-Flow Memory
|
|
4
|
+
*
|
|
5
|
+
* Defines types for session state tracking including:
|
|
6
|
+
* - Current task/issue being worked on
|
|
7
|
+
* - Files modified in session
|
|
8
|
+
* - Checkpoints created
|
|
9
|
+
* - Memory keys used
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* A checkpoint represents a recovery point in a session
|
|
13
|
+
*/
|
|
14
|
+
export interface Checkpoint {
|
|
15
|
+
/** Unique checkpoint ID (crypto.randomUUID) */
|
|
16
|
+
id: string;
|
|
17
|
+
/** ISO timestamp when checkpoint was created */
|
|
18
|
+
timestamp: string;
|
|
19
|
+
/** Human-readable description of the checkpoint */
|
|
20
|
+
description: string;
|
|
21
|
+
/** Memory key where checkpoint data is stored */
|
|
22
|
+
memoryKey: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Session data stored in claude-flow memory
|
|
26
|
+
*/
|
|
27
|
+
export interface SessionData {
|
|
28
|
+
/** Unique session ID (crypto.randomUUID per standards.md §4.8) */
|
|
29
|
+
sessionId: string;
|
|
30
|
+
/** ISO timestamp when session started */
|
|
31
|
+
startedAt: string;
|
|
32
|
+
/** Optional issue ID being worked on (e.g., "SMI-641") */
|
|
33
|
+
issueId?: string;
|
|
34
|
+
/** Optional worktree name (e.g., "phase-2c-session") */
|
|
35
|
+
worktree?: string;
|
|
36
|
+
/** List of checkpoints created during session */
|
|
37
|
+
checkpoints: Checkpoint[];
|
|
38
|
+
/** List of files modified during session */
|
|
39
|
+
filesModified: string[];
|
|
40
|
+
/** ISO timestamp of last activity */
|
|
41
|
+
lastActivity: string;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Session context provides access to current session state
|
|
45
|
+
* and utilities for managing session data
|
|
46
|
+
*/
|
|
47
|
+
export interface SessionContext {
|
|
48
|
+
/** Get the current session data */
|
|
49
|
+
getSessionData(): SessionData | null;
|
|
50
|
+
/** Get the current issue ID being worked on */
|
|
51
|
+
getCurrentIssueId(): string | undefined;
|
|
52
|
+
/** Get the current worktree name */
|
|
53
|
+
getCurrentWorktree(): string | undefined;
|
|
54
|
+
/** Get files modified in this session */
|
|
55
|
+
getModifiedFiles(): readonly string[];
|
|
56
|
+
/** Get checkpoints created in this session */
|
|
57
|
+
getCheckpoints(): readonly Checkpoint[];
|
|
58
|
+
/** Get memory keys used in this session */
|
|
59
|
+
getMemoryKeys(): readonly string[];
|
|
60
|
+
/** Check if session is active */
|
|
61
|
+
isActive(): boolean;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Implementation of SessionContext for active sessions
|
|
65
|
+
*/
|
|
66
|
+
export declare class ActiveSessionContext implements SessionContext {
|
|
67
|
+
private session;
|
|
68
|
+
constructor(session: SessionData);
|
|
69
|
+
getSessionData(): SessionData;
|
|
70
|
+
getCurrentIssueId(): string | undefined;
|
|
71
|
+
getCurrentWorktree(): string | undefined;
|
|
72
|
+
getModifiedFiles(): readonly string[];
|
|
73
|
+
getCheckpoints(): readonly Checkpoint[];
|
|
74
|
+
getMemoryKeys(): readonly string[];
|
|
75
|
+
isActive(): boolean;
|
|
76
|
+
/**
|
|
77
|
+
* Update session data (used internally by SessionManager)
|
|
78
|
+
*/
|
|
79
|
+
updateSession(updates: Partial<SessionData>): void;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Null context for when no session is active
|
|
83
|
+
*/
|
|
84
|
+
export declare class NullSessionContext implements SessionContext {
|
|
85
|
+
getSessionData(): SessionData | null;
|
|
86
|
+
getCurrentIssueId(): string | undefined;
|
|
87
|
+
getCurrentWorktree(): string | undefined;
|
|
88
|
+
getModifiedFiles(): readonly string[];
|
|
89
|
+
getCheckpoints(): readonly Checkpoint[];
|
|
90
|
+
getMemoryKeys(): readonly string[];
|
|
91
|
+
isActive(): boolean;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Factory function to create appropriate session context
|
|
95
|
+
*/
|
|
96
|
+
export declare function createSessionContext(session: SessionData | null): SessionContext;
|
|
97
|
+
/**
|
|
98
|
+
* Type guard to check if context is active
|
|
99
|
+
*/
|
|
100
|
+
export declare function isActiveContext(context: SessionContext): context is ActiveSessionContext;
|
|
101
|
+
/**
|
|
102
|
+
* Calculate session duration in milliseconds
|
|
103
|
+
*/
|
|
104
|
+
export declare function getSessionDuration(session: SessionData): number;
|
|
105
|
+
/**
|
|
106
|
+
* Format session duration as human-readable string
|
|
107
|
+
*/
|
|
108
|
+
export declare function formatSessionDuration(session: SessionData): string;
|
|
109
|
+
/**
|
|
110
|
+
* Get the latest checkpoint from a session
|
|
111
|
+
*
|
|
112
|
+
* When timestamps are equal (created within same millisecond),
|
|
113
|
+
* prefers the later item in the array (more recently added).
|
|
114
|
+
*/
|
|
115
|
+
export declare function getLatestCheckpoint(session: SessionData): Checkpoint | null;
|
|
116
|
+
//# sourceMappingURL=SessionContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionContext.d.ts","sourceRoot":"","sources":["../../../src/session/SessionContext.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,+CAA+C;IAC/C,EAAE,EAAE,MAAM,CAAA;IACV,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAA;IACjB,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAA;IACnB,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAA;IACjB,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAA;IACjB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,iDAAiD;IACjD,WAAW,EAAE,UAAU,EAAE,CAAA;IACzB,4CAA4C;IAC5C,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,qCAAqC;IACrC,YAAY,EAAE,MAAM,CAAA;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,mCAAmC;IACnC,cAAc,IAAI,WAAW,GAAG,IAAI,CAAA;IAEpC,+CAA+C;IAC/C,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAAA;IAEvC,oCAAoC;IACpC,kBAAkB,IAAI,MAAM,GAAG,SAAS,CAAA;IAExC,yCAAyC;IACzC,gBAAgB,IAAI,SAAS,MAAM,EAAE,CAAA;IAErC,8CAA8C;IAC9C,cAAc,IAAI,SAAS,UAAU,EAAE,CAAA;IAEvC,2CAA2C;IAC3C,aAAa,IAAI,SAAS,MAAM,EAAE,CAAA;IAElC,iCAAiC;IACjC,QAAQ,IAAI,OAAO,CAAA;CACpB;AAED;;GAEG;AACH,qBAAa,oBAAqB,YAAW,cAAc;IACzD,OAAO,CAAC,OAAO,CAAa;gBAEhB,OAAO,EAAE,WAAW;IAIhC,cAAc,IAAI,WAAW;IAI7B,iBAAiB,IAAI,MAAM,GAAG,SAAS;IAIvC,kBAAkB,IAAI,MAAM,GAAG,SAAS;IAIxC,gBAAgB,IAAI,SAAS,MAAM,EAAE;IAIrC,cAAc,IAAI,SAAS,UAAU,EAAE;IAIvC,aAAa,IAAI,SAAS,MAAM,EAAE;IAWlC,QAAQ,IAAI,OAAO;IAInB;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI;CAGnD;AAED;;GAEG;AACH,qBAAa,kBAAmB,YAAW,cAAc;IACvD,cAAc,IAAI,WAAW,GAAG,IAAI;IAIpC,iBAAiB,IAAI,MAAM,GAAG,SAAS;IAIvC,kBAAkB,IAAI,MAAM,GAAG,SAAS;IAIxC,gBAAgB,IAAI,SAAS,MAAM,EAAE;IAIrC,cAAc,IAAI,SAAS,UAAU,EAAE;IAIvC,aAAa,IAAI,SAAS,MAAM,EAAE;IAIlC,QAAQ,IAAI,OAAO;CAGpB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,GAAG,cAAc,CAKhF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,IAAI,oBAAoB,CAExF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAI/D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAalE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,WAAW,GAAG,UAAU,GAAG,IAAI,CAW3E"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Context Types and Utilities
|
|
3
|
+
* SMI-641: Session ID Storage in Claude-Flow Memory
|
|
4
|
+
*
|
|
5
|
+
* Defines types for session state tracking including:
|
|
6
|
+
* - Current task/issue being worked on
|
|
7
|
+
* - Files modified in session
|
|
8
|
+
* - Checkpoints created
|
|
9
|
+
* - Memory keys used
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Implementation of SessionContext for active sessions
|
|
13
|
+
*/
|
|
14
|
+
export class ActiveSessionContext {
|
|
15
|
+
session;
|
|
16
|
+
constructor(session) {
|
|
17
|
+
this.session = session;
|
|
18
|
+
}
|
|
19
|
+
getSessionData() {
|
|
20
|
+
return { ...this.session };
|
|
21
|
+
}
|
|
22
|
+
getCurrentIssueId() {
|
|
23
|
+
return this.session.issueId;
|
|
24
|
+
}
|
|
25
|
+
getCurrentWorktree() {
|
|
26
|
+
return this.session.worktree;
|
|
27
|
+
}
|
|
28
|
+
getModifiedFiles() {
|
|
29
|
+
return [...this.session.filesModified];
|
|
30
|
+
}
|
|
31
|
+
getCheckpoints() {
|
|
32
|
+
return [...this.session.checkpoints];
|
|
33
|
+
}
|
|
34
|
+
getMemoryKeys() {
|
|
35
|
+
const keys = [`session/${this.session.sessionId}`, 'session/current'];
|
|
36
|
+
// Add checkpoint memory keys
|
|
37
|
+
for (const checkpoint of this.session.checkpoints) {
|
|
38
|
+
keys.push(checkpoint.memoryKey);
|
|
39
|
+
}
|
|
40
|
+
return keys;
|
|
41
|
+
}
|
|
42
|
+
isActive() {
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Update session data (used internally by SessionManager)
|
|
47
|
+
*/
|
|
48
|
+
updateSession(updates) {
|
|
49
|
+
this.session = { ...this.session, ...updates };
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Null context for when no session is active
|
|
54
|
+
*/
|
|
55
|
+
export class NullSessionContext {
|
|
56
|
+
getSessionData() {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
getCurrentIssueId() {
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
getCurrentWorktree() {
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
getModifiedFiles() {
|
|
66
|
+
return [];
|
|
67
|
+
}
|
|
68
|
+
getCheckpoints() {
|
|
69
|
+
return [];
|
|
70
|
+
}
|
|
71
|
+
getMemoryKeys() {
|
|
72
|
+
return [];
|
|
73
|
+
}
|
|
74
|
+
isActive() {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Factory function to create appropriate session context
|
|
80
|
+
*/
|
|
81
|
+
export function createSessionContext(session) {
|
|
82
|
+
if (session) {
|
|
83
|
+
return new ActiveSessionContext(session);
|
|
84
|
+
}
|
|
85
|
+
return new NullSessionContext();
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Type guard to check if context is active
|
|
89
|
+
*/
|
|
90
|
+
export function isActiveContext(context) {
|
|
91
|
+
return context.isActive();
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Calculate session duration in milliseconds
|
|
95
|
+
*/
|
|
96
|
+
export function getSessionDuration(session) {
|
|
97
|
+
const start = new Date(session.startedAt).getTime();
|
|
98
|
+
const end = new Date(session.lastActivity).getTime();
|
|
99
|
+
return end - start;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Format session duration as human-readable string
|
|
103
|
+
*/
|
|
104
|
+
export function formatSessionDuration(session) {
|
|
105
|
+
const durationMs = getSessionDuration(session);
|
|
106
|
+
const seconds = Math.floor(durationMs / 1000);
|
|
107
|
+
const minutes = Math.floor(seconds / 60);
|
|
108
|
+
const hours = Math.floor(minutes / 60);
|
|
109
|
+
if (hours > 0) {
|
|
110
|
+
return `${hours}h ${minutes % 60}m`;
|
|
111
|
+
}
|
|
112
|
+
if (minutes > 0) {
|
|
113
|
+
return `${minutes}m ${seconds % 60}s`;
|
|
114
|
+
}
|
|
115
|
+
return `${seconds}s`;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Get the latest checkpoint from a session
|
|
119
|
+
*
|
|
120
|
+
* When timestamps are equal (created within same millisecond),
|
|
121
|
+
* prefers the later item in the array (more recently added).
|
|
122
|
+
*/
|
|
123
|
+
export function getLatestCheckpoint(session) {
|
|
124
|
+
if (session.checkpoints.length === 0) {
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
return session.checkpoints.reduce((latest, current, index, array) => {
|
|
128
|
+
const latestTime = new Date(latest.timestamp).getTime();
|
|
129
|
+
const currentTime = new Date(current.timestamp).getTime();
|
|
130
|
+
// Prefer current if time is greater OR equal (later in array = more recent)
|
|
131
|
+
return currentTime >= latestTime ? current : latest;
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=SessionContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionContext.js","sourceRoot":"","sources":["../../../src/session/SessionContext.ts"],"names":[],"mappings":"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"}
|