@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,338 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Service interfaces for Recommendation Learning Loop
|
|
3
|
+
* @module @skillsmith/core/learning/interfaces
|
|
4
|
+
* @see docs/phase4/epic1/recommendation-learning-loop-design.md
|
|
5
|
+
*
|
|
6
|
+
* Defines contracts for:
|
|
7
|
+
* - SignalCollector: Recording user interactions
|
|
8
|
+
* - PreferenceLearner: Learning from signals
|
|
9
|
+
* - PrivacyManager: Data lifecycle management
|
|
10
|
+
* - PersonalizationEngine: Applying learned preferences
|
|
11
|
+
*/
|
|
12
|
+
import type { SignalEvent, SignalFilter, RecommendationContext, SignalMetadata, DismissReason, UserPreferenceProfile, LearningConfig, PersonalizedRecommendation, UserDataExport, AggregateStats } from './types.js';
|
|
13
|
+
/**
|
|
14
|
+
* Service for collecting user interaction signals
|
|
15
|
+
*
|
|
16
|
+
* Responsibilities:
|
|
17
|
+
* - Record accept/dismiss/usage events
|
|
18
|
+
* - Store signals in local SQLite database
|
|
19
|
+
* - Query signals for learning algorithm
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* const collector = new SignalCollector(dbPath)
|
|
24
|
+
* await collector.recordAccept('anthropic/commit', {
|
|
25
|
+
* installed_skills: ['anthropic/review-pr'],
|
|
26
|
+
* original_score: 0.85
|
|
27
|
+
* })
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export interface ISignalCollector {
|
|
31
|
+
/**
|
|
32
|
+
* Record user accepting a recommendation
|
|
33
|
+
*
|
|
34
|
+
* @param skillId - Skill that was accepted
|
|
35
|
+
* @param context - Context when skill was recommended
|
|
36
|
+
* @param metadata - Optional metadata (timing, suggestion count)
|
|
37
|
+
* @throws {SkillsmithError} If database write fails
|
|
38
|
+
*/
|
|
39
|
+
recordAccept(skillId: string, context: RecommendationContext, metadata?: SignalMetadata): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Record user dismissing a recommendation
|
|
42
|
+
*
|
|
43
|
+
* @param skillId - Skill that was dismissed
|
|
44
|
+
* @param context - Context when skill was recommended
|
|
45
|
+
* @param reason - Optional reason for dismissal
|
|
46
|
+
* @throws {SkillsmithError} If database write fails
|
|
47
|
+
*/
|
|
48
|
+
recordDismiss(skillId: string, context: RecommendationContext, reason?: DismissReason): Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* Record skill usage event
|
|
51
|
+
*
|
|
52
|
+
* Called by usage tracker to record daily/weekly usage
|
|
53
|
+
*
|
|
54
|
+
* @param skillId - Skill that was used
|
|
55
|
+
* @param frequency - Usage frequency (daily or weekly)
|
|
56
|
+
* @throws {SkillsmithError} If database write fails
|
|
57
|
+
*/
|
|
58
|
+
recordUsage(skillId: string, frequency: 'daily' | 'weekly'): Promise<void>;
|
|
59
|
+
/**
|
|
60
|
+
* Record skill abandonment (installed but never used)
|
|
61
|
+
*
|
|
62
|
+
* @param skillId - Skill that was abandoned
|
|
63
|
+
* @param daysSinceInstall - Days since installation
|
|
64
|
+
* @throws {SkillsmithError} If database write fails
|
|
65
|
+
*/
|
|
66
|
+
recordAbandonment(skillId: string, daysSinceInstall: number): Promise<void>;
|
|
67
|
+
/**
|
|
68
|
+
* Record skill uninstallation
|
|
69
|
+
*
|
|
70
|
+
* @param skillId - Skill that was uninstalled
|
|
71
|
+
* @param daysSinceInstall - Days since installation
|
|
72
|
+
* @throws {SkillsmithError} If database write fails
|
|
73
|
+
*/
|
|
74
|
+
recordUninstall(skillId: string, daysSinceInstall: number): Promise<void>;
|
|
75
|
+
/**
|
|
76
|
+
* Query signals with filtering
|
|
77
|
+
*
|
|
78
|
+
* @param filter - Filter criteria
|
|
79
|
+
* @param limit - Maximum results to return
|
|
80
|
+
* @returns Array of matching signal events
|
|
81
|
+
* @throws {SkillsmithError} If database query fails
|
|
82
|
+
*/
|
|
83
|
+
getSignals(filter: SignalFilter, limit?: number): Promise<SignalEvent[]>;
|
|
84
|
+
/**
|
|
85
|
+
* Get total signal count
|
|
86
|
+
*
|
|
87
|
+
* @returns Total number of signals recorded
|
|
88
|
+
*/
|
|
89
|
+
getSignalCount(): Promise<number>;
|
|
90
|
+
/**
|
|
91
|
+
* Get signals for specific skill
|
|
92
|
+
*
|
|
93
|
+
* @param skillId - Skill identifier
|
|
94
|
+
* @returns All signals for this skill
|
|
95
|
+
*/
|
|
96
|
+
getSignalsForSkill(skillId: string): Promise<SignalEvent[]>;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Service for learning user preferences from signals
|
|
100
|
+
*
|
|
101
|
+
* Responsibilities:
|
|
102
|
+
* - Update preference weights based on signals
|
|
103
|
+
* - Apply time decay to old signals
|
|
104
|
+
* - Maintain weight bounds
|
|
105
|
+
* - Calculate personalized scores
|
|
106
|
+
*
|
|
107
|
+
* @example
|
|
108
|
+
* ```typescript
|
|
109
|
+
* const learner = new PreferenceLearner(config)
|
|
110
|
+
* const updatedProfile = await learner.updateProfile(
|
|
111
|
+
* currentProfile,
|
|
112
|
+
* newSignalEvent
|
|
113
|
+
* )
|
|
114
|
+
* ```
|
|
115
|
+
*/
|
|
116
|
+
export interface IPreferenceLearner {
|
|
117
|
+
/**
|
|
118
|
+
* Update user profile based on new signal
|
|
119
|
+
*
|
|
120
|
+
* Applies learning algorithm to adjust weights:
|
|
121
|
+
* - Category weights
|
|
122
|
+
* - Trust tier weights
|
|
123
|
+
* - Keyword weights
|
|
124
|
+
* - Negative patterns
|
|
125
|
+
*
|
|
126
|
+
* @param profile - Current user profile
|
|
127
|
+
* @param signal - New signal event to learn from
|
|
128
|
+
* @returns Updated profile with adjusted weights
|
|
129
|
+
*/
|
|
130
|
+
updateProfile(profile: UserPreferenceProfile, signal: SignalEvent): Promise<UserPreferenceProfile>;
|
|
131
|
+
/**
|
|
132
|
+
* Batch update profile from multiple signals
|
|
133
|
+
*
|
|
134
|
+
* More efficient than individual updates for bulk processing
|
|
135
|
+
*
|
|
136
|
+
* @param profile - Current user profile
|
|
137
|
+
* @param signals - Array of signal events
|
|
138
|
+
* @returns Updated profile
|
|
139
|
+
*/
|
|
140
|
+
batchUpdateProfile(profile: UserPreferenceProfile, signals: SignalEvent[]): Promise<UserPreferenceProfile>;
|
|
141
|
+
/**
|
|
142
|
+
* Apply time decay to weights
|
|
143
|
+
*
|
|
144
|
+
* Reduces influence of old signals to allow preference evolution
|
|
145
|
+
*
|
|
146
|
+
* @param profile - Current user profile
|
|
147
|
+
* @param decayFactor - Decay multiplier (0.8-1.0)
|
|
148
|
+
* @returns Profile with decayed weights
|
|
149
|
+
*/
|
|
150
|
+
decayWeights(profile: UserPreferenceProfile, decayFactor?: number): Promise<UserPreferenceProfile>;
|
|
151
|
+
/**
|
|
152
|
+
* Calculate personalized score for a skill
|
|
153
|
+
*
|
|
154
|
+
* @param skillData - Skill metadata (category, keywords, etc.)
|
|
155
|
+
* @param baseScore - Base recommendation score [0-1]
|
|
156
|
+
* @param profile - User preference profile
|
|
157
|
+
* @returns Personalized recommendation with score breakdown
|
|
158
|
+
*/
|
|
159
|
+
calculatePersonalizedScore(skillData: {
|
|
160
|
+
id: string;
|
|
161
|
+
category?: string;
|
|
162
|
+
trustTier?: string;
|
|
163
|
+
keywords?: string[];
|
|
164
|
+
triggerPhrases?: string[];
|
|
165
|
+
}, baseScore: number, profile: UserPreferenceProfile): PersonalizedRecommendation;
|
|
166
|
+
/**
|
|
167
|
+
* Get learning configuration
|
|
168
|
+
*/
|
|
169
|
+
getConfig(): LearningConfig;
|
|
170
|
+
/**
|
|
171
|
+
* Update learning configuration
|
|
172
|
+
*
|
|
173
|
+
* @param config - Partial config to merge
|
|
174
|
+
*/
|
|
175
|
+
setConfig(config: Partial<LearningConfig>): void;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Service for managing data privacy and lifecycle
|
|
179
|
+
*
|
|
180
|
+
* Responsibilities:
|
|
181
|
+
* - Purge old signals (retention policy)
|
|
182
|
+
* - Export user data (GDPR compliance)
|
|
183
|
+
* - Complete data wipe
|
|
184
|
+
* - Anonymize for analytics
|
|
185
|
+
*
|
|
186
|
+
* @example
|
|
187
|
+
* ```typescript
|
|
188
|
+
* const privacy = new PrivacyManager(dbPath)
|
|
189
|
+
* const deleted = await privacy.purgeOldSignals(90) // 90 day retention
|
|
190
|
+
* console.log(`Deleted ${deleted} old signals`)
|
|
191
|
+
* ```
|
|
192
|
+
*/
|
|
193
|
+
export interface IPrivacyManager {
|
|
194
|
+
/**
|
|
195
|
+
* Purge signals older than retention period
|
|
196
|
+
*
|
|
197
|
+
* @param retentionDays - Keep signals from last N days
|
|
198
|
+
* @returns Number of signals deleted
|
|
199
|
+
* @throws {SkillsmithError} If database operation fails
|
|
200
|
+
*/
|
|
201
|
+
purgeOldSignals(retentionDays: number): Promise<number>;
|
|
202
|
+
/**
|
|
203
|
+
* Export all user data (GDPR-style)
|
|
204
|
+
*
|
|
205
|
+
* Includes:
|
|
206
|
+
* - User preference profile
|
|
207
|
+
* - All signal events
|
|
208
|
+
* - Aggregate statistics
|
|
209
|
+
*
|
|
210
|
+
* @returns Complete user data export
|
|
211
|
+
* @throws {SkillsmithError} If export fails
|
|
212
|
+
*/
|
|
213
|
+
exportUserData(): Promise<UserDataExport>;
|
|
214
|
+
/**
|
|
215
|
+
* Complete data wipe (user request)
|
|
216
|
+
*
|
|
217
|
+
* Deletes:
|
|
218
|
+
* - All signals
|
|
219
|
+
* - User profile
|
|
220
|
+
* - Aggregate stats
|
|
221
|
+
*
|
|
222
|
+
* @returns Number of records deleted
|
|
223
|
+
* @throws {SkillsmithError} If wipe fails
|
|
224
|
+
*/
|
|
225
|
+
wipeAllData(): Promise<number>;
|
|
226
|
+
/**
|
|
227
|
+
* Anonymize signals for aggregate analysis
|
|
228
|
+
*
|
|
229
|
+
* Strips all PII and creates aggregate statistics
|
|
230
|
+
*
|
|
231
|
+
* @returns Anonymized aggregate stats
|
|
232
|
+
*/
|
|
233
|
+
anonymizeForAnalytics(): Promise<AggregateStats>;
|
|
234
|
+
/**
|
|
235
|
+
* Get current storage size
|
|
236
|
+
*
|
|
237
|
+
* @returns Database size in bytes
|
|
238
|
+
*/
|
|
239
|
+
getStorageSize(): Promise<number>;
|
|
240
|
+
/**
|
|
241
|
+
* Verify no data leaks (for testing)
|
|
242
|
+
*
|
|
243
|
+
* Checks that no PII is in aggregate tables
|
|
244
|
+
*
|
|
245
|
+
* @returns True if privacy-preserving
|
|
246
|
+
*/
|
|
247
|
+
verifyPrivacy(): Promise<boolean>;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Service for applying personalization to recommendations
|
|
251
|
+
*
|
|
252
|
+
* Responsibilities:
|
|
253
|
+
* - Load user profile
|
|
254
|
+
* - Apply personalized scoring
|
|
255
|
+
* - Handle cold start
|
|
256
|
+
* - Re-rank recommendations
|
|
257
|
+
*
|
|
258
|
+
* @example
|
|
259
|
+
* ```typescript
|
|
260
|
+
* const engine = new PersonalizationEngine(learner, profileStore)
|
|
261
|
+
* const personalized = await engine.personalizeRecommendations(
|
|
262
|
+
* baseRecommendations,
|
|
263
|
+
* userContext
|
|
264
|
+
* )
|
|
265
|
+
* ```
|
|
266
|
+
*/
|
|
267
|
+
export interface IPersonalizationEngine {
|
|
268
|
+
/**
|
|
269
|
+
* Personalize recommendation results
|
|
270
|
+
*
|
|
271
|
+
* @param baseRecommendations - Recommendations with base scores
|
|
272
|
+
* @param userId - User identifier (for profile lookup)
|
|
273
|
+
* @returns Re-ranked recommendations with personalized scores
|
|
274
|
+
*/
|
|
275
|
+
personalizeRecommendations(baseRecommendations: Array<{
|
|
276
|
+
skill_id: string;
|
|
277
|
+
base_score: number;
|
|
278
|
+
skill_data: {
|
|
279
|
+
category?: string;
|
|
280
|
+
trustTier?: string;
|
|
281
|
+
keywords?: string[];
|
|
282
|
+
};
|
|
283
|
+
}>, userId?: string): Promise<PersonalizedRecommendation[]>;
|
|
284
|
+
/**
|
|
285
|
+
* Check if user has enough data for personalization
|
|
286
|
+
*
|
|
287
|
+
* @param userId - User identifier
|
|
288
|
+
* @returns True if personalization should be applied
|
|
289
|
+
*/
|
|
290
|
+
shouldPersonalize(userId?: string): Promise<boolean>;
|
|
291
|
+
/**
|
|
292
|
+
* Get user preference profile
|
|
293
|
+
*
|
|
294
|
+
* @param userId - User identifier
|
|
295
|
+
* @returns User profile or default cold start profile
|
|
296
|
+
*/
|
|
297
|
+
getUserProfile(userId?: string): Promise<UserPreferenceProfile>;
|
|
298
|
+
/**
|
|
299
|
+
* Reset to cold start (clear personalization)
|
|
300
|
+
*
|
|
301
|
+
* @param userId - User identifier
|
|
302
|
+
*/
|
|
303
|
+
resetToDefault(userId?: string): Promise<void>;
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Repository interface for user preference storage
|
|
307
|
+
*
|
|
308
|
+
* Abstraction over SQLite for testability
|
|
309
|
+
*/
|
|
310
|
+
export interface IUserPreferenceRepository {
|
|
311
|
+
/**
|
|
312
|
+
* Get user preference profile
|
|
313
|
+
*
|
|
314
|
+
* @param userId - User identifier (default: 'default')
|
|
315
|
+
* @returns Profile or null if not exists
|
|
316
|
+
*/
|
|
317
|
+
getProfile(userId?: string): Promise<UserPreferenceProfile | null>;
|
|
318
|
+
/**
|
|
319
|
+
* Save user preference profile
|
|
320
|
+
*
|
|
321
|
+
* @param profile - Profile to save
|
|
322
|
+
* @param userId - User identifier (default: 'default')
|
|
323
|
+
*/
|
|
324
|
+
saveProfile(profile: UserPreferenceProfile, userId?: string): Promise<void>;
|
|
325
|
+
/**
|
|
326
|
+
* Delete user profile
|
|
327
|
+
*
|
|
328
|
+
* @param userId - User identifier
|
|
329
|
+
*/
|
|
330
|
+
deleteProfile(userId?: string): Promise<void>;
|
|
331
|
+
/**
|
|
332
|
+
* Check if profile exists
|
|
333
|
+
*
|
|
334
|
+
* @param userId - User identifier
|
|
335
|
+
*/
|
|
336
|
+
exists(userId?: string): Promise<boolean>;
|
|
337
|
+
}
|
|
338
|
+
//# sourceMappingURL=interfaces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../src/learning/interfaces.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Service interfaces for Recommendation Learning Loop
|
|
3
|
+
* @module @skillsmith/core/learning/interfaces
|
|
4
|
+
* @see docs/phase4/epic1/recommendation-learning-loop-design.md
|
|
5
|
+
*
|
|
6
|
+
* Defines contracts for:
|
|
7
|
+
* - SignalCollector: Recording user interactions
|
|
8
|
+
* - PreferenceLearner: Learning from signals
|
|
9
|
+
* - PrivacyManager: Data lifecycle management
|
|
10
|
+
* - PersonalizationEngine: Applying learned preferences
|
|
11
|
+
*/
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=interfaces.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../src/learning/interfaces.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Type definitions for Recommendation Learning Loop
|
|
3
|
+
* @module @skillsmith/core/learning/types
|
|
4
|
+
* @see docs/phase4/epic1/recommendation-learning-loop-design.md
|
|
5
|
+
*
|
|
6
|
+
* Epic 1 - Sub-issue 5: Build Recommendation Learning Loop
|
|
7
|
+
* Owner: Data Scientist
|
|
8
|
+
*
|
|
9
|
+
* Provides type-safe interfaces for:
|
|
10
|
+
* - Signal collection (accept/dismiss/usage)
|
|
11
|
+
* - User preference profiles
|
|
12
|
+
* - Learning algorithm configuration
|
|
13
|
+
* - Privacy-preserving storage
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* User interaction signal types for recommendation learning
|
|
17
|
+
*/
|
|
18
|
+
export declare enum SignalType {
|
|
19
|
+
/** User accepted and installed recommended skill */
|
|
20
|
+
ACCEPT = "accept",
|
|
21
|
+
/** User explicitly dismissed recommendation */
|
|
22
|
+
DISMISS = "dismiss",
|
|
23
|
+
/** User actively uses installed skill (daily usage) */
|
|
24
|
+
USAGE_DAILY = "usage_daily",
|
|
25
|
+
/** User rarely uses installed skill (weekly usage) */
|
|
26
|
+
USAGE_WEEKLY = "usage_weekly",
|
|
27
|
+
/** Skill installed but never used (30+ days) */
|
|
28
|
+
ABANDONED = "abandoned",
|
|
29
|
+
/** User uninstalled previously accepted skill */
|
|
30
|
+
UNINSTALL = "uninstall"
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Signal strength weights for learning algorithm
|
|
34
|
+
* Range: [-1.0, 1.0] where:
|
|
35
|
+
* - Positive = user preference signal
|
|
36
|
+
* - Negative = user rejection signal
|
|
37
|
+
*/
|
|
38
|
+
export declare const SIGNAL_WEIGHTS: Readonly<Record<SignalType, number>>;
|
|
39
|
+
/**
|
|
40
|
+
* Reason for dismissing a recommendation
|
|
41
|
+
*/
|
|
42
|
+
export declare enum DismissReason {
|
|
43
|
+
/** Not relevant to current work */
|
|
44
|
+
NOT_RELEVANT = "not_relevant",
|
|
45
|
+
/** Already have similar functionality */
|
|
46
|
+
DUPLICATE = "duplicate",
|
|
47
|
+
/** Don't trust the source */
|
|
48
|
+
TRUST_ISSUE = "trust_issue",
|
|
49
|
+
/** Too complex/heavyweight */
|
|
50
|
+
TOO_COMPLEX = "too_complex",
|
|
51
|
+
/** No specific reason */
|
|
52
|
+
OTHER = "other"
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Skill category enum (aligned with skill schema)
|
|
56
|
+
*/
|
|
57
|
+
export declare enum SkillCategory {
|
|
58
|
+
GIT = "git",
|
|
59
|
+
TESTING = "testing",
|
|
60
|
+
DOCUMENTATION = "documentation",
|
|
61
|
+
DEVOPS = "devops",
|
|
62
|
+
FRONTEND = "frontend",
|
|
63
|
+
BACKEND = "backend",
|
|
64
|
+
DATABASE = "database",
|
|
65
|
+
SECURITY = "security",
|
|
66
|
+
PRODUCTIVITY = "productivity",
|
|
67
|
+
ANALYSIS = "analysis"
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Context when skill was recommended
|
|
71
|
+
*/
|
|
72
|
+
export interface RecommendationContext {
|
|
73
|
+
/** Skills installed at recommendation time */
|
|
74
|
+
installed_skills: string[];
|
|
75
|
+
/** Project context used for recommendation */
|
|
76
|
+
project_context?: string;
|
|
77
|
+
/** Similarity score at recommendation time */
|
|
78
|
+
original_score: number;
|
|
79
|
+
/** Trust tier of recommended skill */
|
|
80
|
+
trust_tier?: string;
|
|
81
|
+
/** Category of recommended skill */
|
|
82
|
+
category?: string;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Optional metadata for signal events
|
|
86
|
+
*/
|
|
87
|
+
export interface SignalMetadata {
|
|
88
|
+
/** Time between recommendation and action (ms) */
|
|
89
|
+
time_to_action?: number;
|
|
90
|
+
/** Number of times skill was suggested before action */
|
|
91
|
+
suggestion_count?: number;
|
|
92
|
+
/** Additional context-specific data */
|
|
93
|
+
extra?: Record<string, unknown>;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Individual signal event stored in database
|
|
97
|
+
*/
|
|
98
|
+
export interface SignalEvent {
|
|
99
|
+
/** Unique event ID (UUID) */
|
|
100
|
+
id: string;
|
|
101
|
+
/** Signal type */
|
|
102
|
+
type: SignalType;
|
|
103
|
+
/** Skill that was recommended/interacted with */
|
|
104
|
+
skill_id: string;
|
|
105
|
+
/** Unix timestamp (ms) of event */
|
|
106
|
+
timestamp: number;
|
|
107
|
+
/** Recommendation context when skill was suggested */
|
|
108
|
+
context: RecommendationContext;
|
|
109
|
+
/** Optional metadata */
|
|
110
|
+
metadata?: SignalMetadata;
|
|
111
|
+
/** Dismiss reason (only for DISMISS signals) */
|
|
112
|
+
dismiss_reason?: DismissReason;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Filter for querying signal events
|
|
116
|
+
*/
|
|
117
|
+
export interface SignalFilter {
|
|
118
|
+
/** Filter by skill ID */
|
|
119
|
+
skill_id?: string;
|
|
120
|
+
/** Filter by signal type */
|
|
121
|
+
type?: SignalType | SignalType[];
|
|
122
|
+
/** Filter by time range */
|
|
123
|
+
time_range?: {
|
|
124
|
+
start: number;
|
|
125
|
+
end: number;
|
|
126
|
+
};
|
|
127
|
+
/** Filter by category */
|
|
128
|
+
category?: SkillCategory;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* User-specific preference profile (local storage only)
|
|
132
|
+
* PRIVACY: This data never leaves the local machine
|
|
133
|
+
*/
|
|
134
|
+
export interface UserPreferenceProfile {
|
|
135
|
+
/** Profile schema version for migrations */
|
|
136
|
+
version: number;
|
|
137
|
+
/** Last updated timestamp (ms) */
|
|
138
|
+
last_updated: number;
|
|
139
|
+
/** Total signals collected */
|
|
140
|
+
signal_count: number;
|
|
141
|
+
/** Category preferences learned from signals
|
|
142
|
+
* Range: [-2.0, 2.0] where:
|
|
143
|
+
* - Positive = user prefers this category
|
|
144
|
+
* - Negative = user avoids this category
|
|
145
|
+
*/
|
|
146
|
+
category_weights: Partial<Record<SkillCategory, number>>;
|
|
147
|
+
/** Trust tier preferences
|
|
148
|
+
* Range: [-2.0, 2.0]
|
|
149
|
+
*/
|
|
150
|
+
trust_tier_weights: Record<string, number>;
|
|
151
|
+
/** Keyword/tag preferences
|
|
152
|
+
* Range: [-2.0, 2.0]
|
|
153
|
+
*/
|
|
154
|
+
keyword_weights: Record<string, number>;
|
|
155
|
+
/** Anti-preferences (things user consistently dismisses) */
|
|
156
|
+
negative_patterns: {
|
|
157
|
+
/** Keywords user doesn't like */
|
|
158
|
+
keywords: string[];
|
|
159
|
+
/** Categories user avoids */
|
|
160
|
+
categories: SkillCategory[];
|
|
161
|
+
/** Specific skills user explicitly doesn't want */
|
|
162
|
+
skill_ids: string[];
|
|
163
|
+
};
|
|
164
|
+
/** Usage pattern insights */
|
|
165
|
+
usage_patterns: {
|
|
166
|
+
/** Average time from install to first use (ms) */
|
|
167
|
+
avg_time_to_first_use_ms: number;
|
|
168
|
+
/** Percentage of accepted skills actually used (0-1) */
|
|
169
|
+
utilization_rate: number;
|
|
170
|
+
/** Most used skill categories (ordered by frequency) */
|
|
171
|
+
top_categories: SkillCategory[];
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Learning hyperparameters (tunable)
|
|
176
|
+
*/
|
|
177
|
+
export interface LearningConfig {
|
|
178
|
+
/** Base learning rate for weight updates (default: 0.1)
|
|
179
|
+
* Range: [0.01, 0.5]
|
|
180
|
+
*/
|
|
181
|
+
learning_rate: number;
|
|
182
|
+
/** Time decay factor for old signals (default: 0.95/month)
|
|
183
|
+
* Range: [0.8, 1.0] where 1.0 = no decay
|
|
184
|
+
*/
|
|
185
|
+
decay_factor: number;
|
|
186
|
+
/** Minimum signals before personalization kicks in */
|
|
187
|
+
min_signals_threshold: number;
|
|
188
|
+
/** Weight clipping bounds to prevent extreme values */
|
|
189
|
+
weight_bounds: {
|
|
190
|
+
min: number;
|
|
191
|
+
max: number;
|
|
192
|
+
};
|
|
193
|
+
/** Data retention period (days) */
|
|
194
|
+
signal_retention_days: number;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Default learning configuration
|
|
198
|
+
*/
|
|
199
|
+
export declare const DEFAULT_LEARNING_CONFIG: Readonly<LearningConfig>;
|
|
200
|
+
/**
|
|
201
|
+
* Cold start default weights (before personalization)
|
|
202
|
+
* Based on aggregate popularity data
|
|
203
|
+
*/
|
|
204
|
+
export declare const COLD_START_WEIGHTS: Readonly<{
|
|
205
|
+
category_weights: Partial<Record<SkillCategory, number>>;
|
|
206
|
+
trust_tier_weights: Record<string, number>;
|
|
207
|
+
}>;
|
|
208
|
+
/**
|
|
209
|
+
* Personalized recommendation result
|
|
210
|
+
*/
|
|
211
|
+
export interface PersonalizedRecommendation {
|
|
212
|
+
/** Skill identifier */
|
|
213
|
+
skill_id: string;
|
|
214
|
+
/** Base similarity score [0-1] */
|
|
215
|
+
base_score: number;
|
|
216
|
+
/** Personalized score after learning adjustments [0-1] */
|
|
217
|
+
personalized_score: number;
|
|
218
|
+
/** Whether personalization was applied */
|
|
219
|
+
personalization_applied: boolean;
|
|
220
|
+
/** Breakdown of score adjustments */
|
|
221
|
+
score_breakdown: {
|
|
222
|
+
category_boost: number;
|
|
223
|
+
trust_boost: number;
|
|
224
|
+
keyword_boost: number;
|
|
225
|
+
anti_penalty: number;
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Aggregate statistics (anonymized, no PII)
|
|
230
|
+
*/
|
|
231
|
+
export interface AggregateStats {
|
|
232
|
+
/** Date (YYYY-MM-DD) */
|
|
233
|
+
date: string;
|
|
234
|
+
/** Total signals recorded */
|
|
235
|
+
total_signals: number;
|
|
236
|
+
/** Breakdown by signal type */
|
|
237
|
+
signal_counts: Partial<Record<SignalType, number>>;
|
|
238
|
+
/** Average accept rate */
|
|
239
|
+
avg_accept_rate: number;
|
|
240
|
+
/** Average utilization rate */
|
|
241
|
+
avg_utilization_rate: number;
|
|
242
|
+
/** Popular categories */
|
|
243
|
+
popular_categories: Array<{
|
|
244
|
+
category: SkillCategory;
|
|
245
|
+
count: number;
|
|
246
|
+
}>;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* User data export (GDPR-style)
|
|
250
|
+
*/
|
|
251
|
+
export interface UserDataExport {
|
|
252
|
+
/** Export timestamp */
|
|
253
|
+
exported_at: number;
|
|
254
|
+
/** Profile version */
|
|
255
|
+
version: number;
|
|
256
|
+
/** User preference profile */
|
|
257
|
+
profile: UserPreferenceProfile;
|
|
258
|
+
/** All signal events */
|
|
259
|
+
signals: SignalEvent[];
|
|
260
|
+
/** Aggregate stats */
|
|
261
|
+
stats: AggregateStats[];
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Events emitted by learning system
|
|
265
|
+
*/
|
|
266
|
+
export interface LearningEvents {
|
|
267
|
+
/** Signal recorded successfully */
|
|
268
|
+
'signal:recorded': {
|
|
269
|
+
signal_id: string;
|
|
270
|
+
type: SignalType;
|
|
271
|
+
skill_id: string;
|
|
272
|
+
};
|
|
273
|
+
/** Profile updated */
|
|
274
|
+
'profile:updated': {
|
|
275
|
+
signal_count: number;
|
|
276
|
+
personalization_active: boolean;
|
|
277
|
+
};
|
|
278
|
+
/** Data purged (privacy cleanup) */
|
|
279
|
+
'data:purged': {
|
|
280
|
+
signals_deleted: number;
|
|
281
|
+
retention_days: number;
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/learning/types.ts"],"names":[],"mappings":"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"}
|