@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,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Analytics Database Schema
|
|
3
|
+
*
|
|
4
|
+
* Implements Phase 4 Product Strategy analytics infrastructure:
|
|
5
|
+
* - Epic 3: Skill usage tracking with 30-day rolling window
|
|
6
|
+
* - Epic 4: A/B testing experiment management
|
|
7
|
+
* - Epic 4: ROI metrics and dashboard data
|
|
8
|
+
*
|
|
9
|
+
* SMI-XXX: Analytics infrastructure for product strategy
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Analytics schema SQL for skill usage, A/B testing, and ROI tracking
|
|
13
|
+
*/
|
|
14
|
+
export const ANALYTICS_SCHEMA = `
|
|
15
|
+
-- Skill usage events for attribution and value tracking
|
|
16
|
+
CREATE TABLE IF NOT EXISTS skill_usage_events (
|
|
17
|
+
id TEXT PRIMARY KEY,
|
|
18
|
+
skill_id TEXT NOT NULL,
|
|
19
|
+
user_id TEXT NOT NULL,
|
|
20
|
+
session_id TEXT NOT NULL,
|
|
21
|
+
event_type TEXT NOT NULL CHECK(event_type IN ('activation', 'invocation', 'success', 'failure')),
|
|
22
|
+
context TEXT, -- JSON metadata about the usage context
|
|
23
|
+
value_score REAL, -- Estimated value contribution (0-1)
|
|
24
|
+
timestamp TEXT NOT NULL DEFAULT (datetime('now')),
|
|
25
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
-- Indexes for usage queries
|
|
29
|
+
CREATE INDEX IF NOT EXISTS idx_usage_skill_id ON skill_usage_events(skill_id);
|
|
30
|
+
CREATE INDEX IF NOT EXISTS idx_usage_user_id ON skill_usage_events(user_id);
|
|
31
|
+
CREATE INDEX IF NOT EXISTS idx_usage_session_id ON skill_usage_events(session_id);
|
|
32
|
+
CREATE INDEX IF NOT EXISTS idx_usage_timestamp ON skill_usage_events(timestamp);
|
|
33
|
+
CREATE INDEX IF NOT EXISTS idx_usage_event_type ON skill_usage_events(event_type);
|
|
34
|
+
|
|
35
|
+
-- A/B testing experiments
|
|
36
|
+
CREATE TABLE IF NOT EXISTS experiments (
|
|
37
|
+
id TEXT PRIMARY KEY,
|
|
38
|
+
name TEXT NOT NULL UNIQUE,
|
|
39
|
+
description TEXT,
|
|
40
|
+
hypothesis TEXT,
|
|
41
|
+
status TEXT NOT NULL CHECK(status IN ('draft', 'active', 'paused', 'completed')) DEFAULT 'draft',
|
|
42
|
+
variant_a TEXT NOT NULL, -- JSON config for control group
|
|
43
|
+
variant_b TEXT NOT NULL, -- JSON config for treatment group
|
|
44
|
+
start_date TEXT,
|
|
45
|
+
end_date TEXT,
|
|
46
|
+
target_sample_size INTEGER DEFAULT 100,
|
|
47
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
48
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
-- User assignments to experiment variants
|
|
52
|
+
CREATE TABLE IF NOT EXISTS experiment_assignments (
|
|
53
|
+
id TEXT PRIMARY KEY,
|
|
54
|
+
experiment_id TEXT NOT NULL REFERENCES experiments(id) ON DELETE CASCADE,
|
|
55
|
+
user_id TEXT NOT NULL,
|
|
56
|
+
variant TEXT NOT NULL CHECK(variant IN ('control', 'treatment')),
|
|
57
|
+
assigned_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
58
|
+
UNIQUE(experiment_id, user_id)
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
-- Experiment outcome tracking
|
|
62
|
+
CREATE TABLE IF NOT EXISTS experiment_outcomes (
|
|
63
|
+
id TEXT PRIMARY KEY,
|
|
64
|
+
experiment_id TEXT NOT NULL REFERENCES experiments(id) ON DELETE CASCADE,
|
|
65
|
+
assignment_id TEXT NOT NULL REFERENCES experiment_assignments(id) ON DELETE CASCADE,
|
|
66
|
+
outcome_type TEXT NOT NULL, -- e.g., 'activation', 'usage_count', 'value_score'
|
|
67
|
+
outcome_value REAL NOT NULL,
|
|
68
|
+
metadata TEXT, -- JSON additional data
|
|
69
|
+
measured_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
70
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
-- Indexes for experiment queries
|
|
74
|
+
CREATE INDEX IF NOT EXISTS idx_assignments_experiment ON experiment_assignments(experiment_id);
|
|
75
|
+
CREATE INDEX IF NOT EXISTS idx_assignments_user ON experiment_assignments(user_id);
|
|
76
|
+
CREATE INDEX IF NOT EXISTS idx_outcomes_experiment ON experiment_outcomes(experiment_id);
|
|
77
|
+
CREATE INDEX IF NOT EXISTS idx_outcomes_assignment ON experiment_outcomes(assignment_id);
|
|
78
|
+
|
|
79
|
+
-- ROI metrics aggregation (materialized view equivalent)
|
|
80
|
+
CREATE TABLE IF NOT EXISTS roi_metrics (
|
|
81
|
+
id TEXT PRIMARY KEY,
|
|
82
|
+
metric_type TEXT NOT NULL, -- 'daily', 'weekly', 'monthly', 'user', 'skill'
|
|
83
|
+
entity_id TEXT, -- user_id or skill_id for entity-level metrics
|
|
84
|
+
period_start TEXT NOT NULL,
|
|
85
|
+
period_end TEXT NOT NULL,
|
|
86
|
+
total_activations INTEGER DEFAULT 0,
|
|
87
|
+
total_invocations INTEGER DEFAULT 0,
|
|
88
|
+
total_successes INTEGER DEFAULT 0,
|
|
89
|
+
total_failures INTEGER DEFAULT 0,
|
|
90
|
+
avg_value_score REAL DEFAULT 0.0,
|
|
91
|
+
estimated_time_saved REAL DEFAULT 0.0, -- in minutes
|
|
92
|
+
estimated_value_usd REAL DEFAULT 0.0, -- rough ROI estimate
|
|
93
|
+
metadata TEXT, -- JSON for additional metrics
|
|
94
|
+
computed_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
95
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
96
|
+
);
|
|
97
|
+
|
|
98
|
+
-- Indexes for ROI queries
|
|
99
|
+
CREATE INDEX IF NOT EXISTS idx_roi_type ON roi_metrics(metric_type);
|
|
100
|
+
CREATE INDEX IF NOT EXISTS idx_roi_entity ON roi_metrics(entity_id);
|
|
101
|
+
CREATE INDEX IF NOT EXISTS idx_roi_period ON roi_metrics(period_start, period_end);
|
|
102
|
+
CREATE INDEX IF NOT EXISTS idx_roi_computed ON roi_metrics(computed_at);
|
|
103
|
+
|
|
104
|
+
-- Value attribution mappings
|
|
105
|
+
CREATE TABLE IF NOT EXISTS value_attributions (
|
|
106
|
+
id TEXT PRIMARY KEY,
|
|
107
|
+
usage_event_id TEXT NOT NULL REFERENCES skill_usage_events(id) ON DELETE CASCADE,
|
|
108
|
+
skill_id TEXT NOT NULL,
|
|
109
|
+
attribution_type TEXT NOT NULL, -- 'inline', 'metadata', 'session'
|
|
110
|
+
value_dimension TEXT NOT NULL, -- 'time_saved', 'quality_improved', 'error_prevented'
|
|
111
|
+
value_amount REAL NOT NULL,
|
|
112
|
+
confidence REAL NOT NULL CHECK(confidence >= 0 AND confidence <= 1),
|
|
113
|
+
metadata TEXT, -- JSON additional context
|
|
114
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
115
|
+
);
|
|
116
|
+
|
|
117
|
+
-- Indexes for attribution queries
|
|
118
|
+
CREATE INDEX IF NOT EXISTS idx_attributions_event ON value_attributions(usage_event_id);
|
|
119
|
+
CREATE INDEX IF NOT EXISTS idx_attributions_skill ON value_attributions(skill_id);
|
|
120
|
+
CREATE INDEX IF NOT EXISTS idx_attributions_type ON value_attributions(attribution_type);
|
|
121
|
+
`;
|
|
122
|
+
export function initializeAnalyticsSchema(db) {
|
|
123
|
+
db.exec(ANALYTICS_SCHEMA);
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/analytics/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2G/B,CAAA;AAOD,MAAM,UAAU,yBAAyB,CAAC,EAAgB;IACxD,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;AAC3B,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-914: Analytics Storage with SQLite
|
|
3
|
+
* SMI-898: Path traversal protection for database paths
|
|
4
|
+
*
|
|
5
|
+
* Provides persistent storage for skill usage events with:
|
|
6
|
+
* - SQLite database in ~/.skillsmith/analytics.db
|
|
7
|
+
* - 30-day rolling window for data retention
|
|
8
|
+
* - Efficient indexes for querying by skill and timestamp
|
|
9
|
+
* - Secure path validation to prevent path traversal attacks
|
|
10
|
+
*/
|
|
11
|
+
import type { SkillUsageEvent, SkillMetrics } from './types.js';
|
|
12
|
+
/**
|
|
13
|
+
* SQLite storage for skill usage analytics
|
|
14
|
+
*/
|
|
15
|
+
export declare class AnalyticsStorage {
|
|
16
|
+
private db;
|
|
17
|
+
/**
|
|
18
|
+
* Create an analytics storage instance
|
|
19
|
+
*
|
|
20
|
+
* @param dbPath - Optional custom database path (defaults to ~/.skillsmith/analytics.db)
|
|
21
|
+
* @throws Error if dbPath contains path traversal attempt
|
|
22
|
+
*
|
|
23
|
+
* @see SMI-898: Path traversal protection
|
|
24
|
+
* - Validates custom dbPath against path traversal attacks
|
|
25
|
+
* - Rejects paths with ".." or outside allowed directories
|
|
26
|
+
*/
|
|
27
|
+
constructor(dbPath?: string);
|
|
28
|
+
/**
|
|
29
|
+
* Initialize database schema
|
|
30
|
+
*/
|
|
31
|
+
private initSchema;
|
|
32
|
+
/**
|
|
33
|
+
* Record a skill usage event
|
|
34
|
+
*
|
|
35
|
+
* @param event - The usage event to record
|
|
36
|
+
*/
|
|
37
|
+
recordEvent(event: SkillUsageEvent): void;
|
|
38
|
+
/**
|
|
39
|
+
* Get all events for a skill
|
|
40
|
+
*
|
|
41
|
+
* @param skillId - The skill identifier
|
|
42
|
+
* @param limit - Maximum number of events to return
|
|
43
|
+
* @returns Array of usage events
|
|
44
|
+
*/
|
|
45
|
+
getEventsForSkill(skillId: string, limit?: number): SkillUsageEvent[];
|
|
46
|
+
/**
|
|
47
|
+
* Get aggregated metrics for a skill
|
|
48
|
+
*
|
|
49
|
+
* @param skillId - The skill identifier
|
|
50
|
+
* @returns Aggregated metrics or null if no data
|
|
51
|
+
*/
|
|
52
|
+
getMetricsForSkill(skillId: string): SkillMetrics | null;
|
|
53
|
+
/**
|
|
54
|
+
* Delete events older than retention period
|
|
55
|
+
*
|
|
56
|
+
* @returns Number of deleted events
|
|
57
|
+
*/
|
|
58
|
+
cleanup(): number;
|
|
59
|
+
/**
|
|
60
|
+
* Get total event count
|
|
61
|
+
*
|
|
62
|
+
* @returns Number of stored events
|
|
63
|
+
*/
|
|
64
|
+
getEventCount(): number;
|
|
65
|
+
/**
|
|
66
|
+
* Get event count by outcome
|
|
67
|
+
*
|
|
68
|
+
* @returns Object with counts per outcome type
|
|
69
|
+
*/
|
|
70
|
+
getOutcomeCounts(): Record<string, number>;
|
|
71
|
+
/**
|
|
72
|
+
* Close database connection
|
|
73
|
+
*/
|
|
74
|
+
close(): void;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/analytics/storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAc/D;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,EAAE,CAAmB;IAE7B;;;;;;;;;OASG;gBACS,MAAM,GAAE,MAAqB;IAgCzC;;OAEG;IACH,OAAO,CAAC,UAAU;IAmBlB;;;;OAIG;IACH,WAAW,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAezC;;;;;;OAMG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,MAAY,GAAG,eAAe,EAAE;IAY1E;;;;;OAKG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAiBxD;;;;OAIG;IACH,OAAO,IAAI,MAAM;IAMjB;;;;OAIG;IACH,aAAa,IAAI,MAAM;IAOvB;;;;OAIG;IACH,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAgB1C;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-914: Analytics Storage with SQLite
|
|
3
|
+
* SMI-898: Path traversal protection for database paths
|
|
4
|
+
*
|
|
5
|
+
* Provides persistent storage for skill usage events with:
|
|
6
|
+
* - SQLite database in ~/.skillsmith/analytics.db
|
|
7
|
+
* - 30-day rolling window for data retention
|
|
8
|
+
* - Efficient indexes for querying by skill and timestamp
|
|
9
|
+
* - Secure path validation to prevent path traversal attacks
|
|
10
|
+
*/
|
|
11
|
+
import Database from 'better-sqlite3';
|
|
12
|
+
import { join, dirname } from 'path';
|
|
13
|
+
import { homedir } from 'os';
|
|
14
|
+
import { existsSync, mkdirSync } from 'fs';
|
|
15
|
+
import { RETENTION_DAYS, MS_PER_DAY } from './constants.js';
|
|
16
|
+
import { validateDbPath } from '../security/pathValidation.js';
|
|
17
|
+
/**
|
|
18
|
+
* Default directory for analytics data
|
|
19
|
+
*/
|
|
20
|
+
const ANALYTICS_DIR = join(homedir(), '.skillsmith');
|
|
21
|
+
/**
|
|
22
|
+
* Default database file path
|
|
23
|
+
*/
|
|
24
|
+
const ANALYTICS_DB = join(ANALYTICS_DIR, 'analytics.db');
|
|
25
|
+
/**
|
|
26
|
+
* SQLite storage for skill usage analytics
|
|
27
|
+
*/
|
|
28
|
+
export class AnalyticsStorage {
|
|
29
|
+
db;
|
|
30
|
+
/**
|
|
31
|
+
* Create an analytics storage instance
|
|
32
|
+
*
|
|
33
|
+
* @param dbPath - Optional custom database path (defaults to ~/.skillsmith/analytics.db)
|
|
34
|
+
* @throws Error if dbPath contains path traversal attempt
|
|
35
|
+
*
|
|
36
|
+
* @see SMI-898: Path traversal protection
|
|
37
|
+
* - Validates custom dbPath against path traversal attacks
|
|
38
|
+
* - Rejects paths with ".." or outside allowed directories
|
|
39
|
+
*/
|
|
40
|
+
constructor(dbPath = ANALYTICS_DB) {
|
|
41
|
+
let resolvedPath = dbPath;
|
|
42
|
+
// SMI-898: Validate custom paths for path traversal
|
|
43
|
+
if (dbPath !== ANALYTICS_DB) {
|
|
44
|
+
const validation = validateDbPath(dbPath, {
|
|
45
|
+
allowInMemory: true,
|
|
46
|
+
allowTempDir: true,
|
|
47
|
+
});
|
|
48
|
+
if (!validation.valid) {
|
|
49
|
+
throw new Error(`Invalid analytics database path: ${validation.error}. ` +
|
|
50
|
+
'Path must be within ~/.skillsmith, ~/.claude, or temp directories.');
|
|
51
|
+
}
|
|
52
|
+
resolvedPath = validation.resolvedPath;
|
|
53
|
+
}
|
|
54
|
+
// Ensure directory exists (skip for in-memory)
|
|
55
|
+
if (resolvedPath !== ':memory:') {
|
|
56
|
+
const dir = dirname(resolvedPath);
|
|
57
|
+
if (!existsSync(dir)) {
|
|
58
|
+
mkdirSync(dir, { recursive: true });
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
this.db = new Database(resolvedPath);
|
|
62
|
+
this.initSchema();
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Initialize database schema
|
|
66
|
+
*/
|
|
67
|
+
initSchema() {
|
|
68
|
+
this.db.exec(`
|
|
69
|
+
CREATE TABLE IF NOT EXISTS usage_events (
|
|
70
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
71
|
+
skill_id TEXT NOT NULL,
|
|
72
|
+
user_id TEXT NOT NULL,
|
|
73
|
+
timestamp INTEGER NOT NULL,
|
|
74
|
+
task_duration INTEGER NOT NULL,
|
|
75
|
+
outcome TEXT NOT NULL CHECK(outcome IN ('success', 'error', 'abandoned')),
|
|
76
|
+
context_hash TEXT NOT NULL,
|
|
77
|
+
created_at INTEGER DEFAULT (strftime('%s', 'now') * 1000)
|
|
78
|
+
);
|
|
79
|
+
CREATE INDEX IF NOT EXISTS idx_skill_id ON usage_events(skill_id);
|
|
80
|
+
CREATE INDEX IF NOT EXISTS idx_timestamp ON usage_events(timestamp);
|
|
81
|
+
CREATE INDEX IF NOT EXISTS idx_user_id ON usage_events(user_id);
|
|
82
|
+
CREATE INDEX IF NOT EXISTS idx_outcome ON usage_events(outcome);
|
|
83
|
+
`);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Record a skill usage event
|
|
87
|
+
*
|
|
88
|
+
* @param event - The usage event to record
|
|
89
|
+
*/
|
|
90
|
+
recordEvent(event) {
|
|
91
|
+
const stmt = this.db.prepare(`
|
|
92
|
+
INSERT INTO usage_events (skill_id, user_id, timestamp, task_duration, outcome, context_hash)
|
|
93
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
94
|
+
`);
|
|
95
|
+
stmt.run(event.skillId, event.userId, event.timestamp, event.taskDuration, event.outcome, event.contextHash);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Get all events for a skill
|
|
99
|
+
*
|
|
100
|
+
* @param skillId - The skill identifier
|
|
101
|
+
* @param limit - Maximum number of events to return
|
|
102
|
+
* @returns Array of usage events
|
|
103
|
+
*/
|
|
104
|
+
getEventsForSkill(skillId, limit = 100) {
|
|
105
|
+
const stmt = this.db.prepare(`
|
|
106
|
+
SELECT id, skill_id as skillId, user_id as userId, timestamp,
|
|
107
|
+
task_duration as taskDuration, outcome, context_hash as contextHash
|
|
108
|
+
FROM usage_events
|
|
109
|
+
WHERE skill_id = ?
|
|
110
|
+
ORDER BY timestamp DESC
|
|
111
|
+
LIMIT ?
|
|
112
|
+
`);
|
|
113
|
+
return stmt.all(skillId, limit);
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Get aggregated metrics for a skill
|
|
117
|
+
*
|
|
118
|
+
* @param skillId - The skill identifier
|
|
119
|
+
* @returns Aggregated metrics or null if no data
|
|
120
|
+
*/
|
|
121
|
+
getMetricsForSkill(skillId) {
|
|
122
|
+
const stmt = this.db.prepare(`
|
|
123
|
+
SELECT
|
|
124
|
+
skill_id as skillId,
|
|
125
|
+
COUNT(*) as totalInvocations,
|
|
126
|
+
CAST(SUM(CASE WHEN outcome = 'success' THEN 1 ELSE 0 END) AS REAL) / COUNT(*) as successRate,
|
|
127
|
+
AVG(task_duration) as avgTaskDuration,
|
|
128
|
+
COUNT(DISTINCT user_id) as uniqueUsers,
|
|
129
|
+
MAX(timestamp) as lastUsed
|
|
130
|
+
FROM usage_events
|
|
131
|
+
WHERE skill_id = ?
|
|
132
|
+
GROUP BY skill_id
|
|
133
|
+
`);
|
|
134
|
+
const result = stmt.get(skillId);
|
|
135
|
+
return result ?? null;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Delete events older than retention period
|
|
139
|
+
*
|
|
140
|
+
* @returns Number of deleted events
|
|
141
|
+
*/
|
|
142
|
+
cleanup() {
|
|
143
|
+
const cutoff = Date.now() - RETENTION_DAYS * MS_PER_DAY;
|
|
144
|
+
const result = this.db.prepare('DELETE FROM usage_events WHERE timestamp < ?').run(cutoff);
|
|
145
|
+
return result.changes;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Get total event count
|
|
149
|
+
*
|
|
150
|
+
* @returns Number of stored events
|
|
151
|
+
*/
|
|
152
|
+
getEventCount() {
|
|
153
|
+
const result = this.db.prepare('SELECT COUNT(*) as count FROM usage_events').get();
|
|
154
|
+
return result?.count ?? 0;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Get event count by outcome
|
|
158
|
+
*
|
|
159
|
+
* @returns Object with counts per outcome type
|
|
160
|
+
*/
|
|
161
|
+
getOutcomeCounts() {
|
|
162
|
+
const stmt = this.db.prepare(`
|
|
163
|
+
SELECT outcome, COUNT(*) as count
|
|
164
|
+
FROM usage_events
|
|
165
|
+
GROUP BY outcome
|
|
166
|
+
`);
|
|
167
|
+
const rows = stmt.all();
|
|
168
|
+
return rows.reduce((acc, row) => {
|
|
169
|
+
acc[row.outcome] = row.count;
|
|
170
|
+
return acc;
|
|
171
|
+
}, {});
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Close database connection
|
|
175
|
+
*/
|
|
176
|
+
close() {
|
|
177
|
+
this.db.close();
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/analytics/storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for Analytics Infrastructure
|
|
3
|
+
*
|
|
4
|
+
* Covers:
|
|
5
|
+
* - Skill usage events and attribution
|
|
6
|
+
* - A/B testing experiments
|
|
7
|
+
* - ROI metrics and dashboards
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Skill usage event types
|
|
11
|
+
*/
|
|
12
|
+
export type UsageEventType = 'activation' | 'invocation' | 'success' | 'failure';
|
|
13
|
+
/**
|
|
14
|
+
* Skill usage event
|
|
15
|
+
*/
|
|
16
|
+
export interface UsageEvent {
|
|
17
|
+
id: string;
|
|
18
|
+
skillId: string;
|
|
19
|
+
userId: string;
|
|
20
|
+
sessionId: string;
|
|
21
|
+
eventType: UsageEventType;
|
|
22
|
+
context?: Record<string, unknown>;
|
|
23
|
+
valueScore?: number;
|
|
24
|
+
timestamp: string;
|
|
25
|
+
createdAt: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Input for creating a usage event
|
|
29
|
+
*/
|
|
30
|
+
export interface UsageEventInput {
|
|
31
|
+
skillId: string;
|
|
32
|
+
userId: string;
|
|
33
|
+
sessionId: string;
|
|
34
|
+
eventType: UsageEventType;
|
|
35
|
+
context?: Record<string, unknown>;
|
|
36
|
+
valueScore?: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Experiment status
|
|
40
|
+
*/
|
|
41
|
+
export type ExperimentStatus = 'draft' | 'active' | 'paused' | 'completed';
|
|
42
|
+
/**
|
|
43
|
+
* Experiment variant
|
|
44
|
+
*/
|
|
45
|
+
export type ExperimentVariant = 'control' | 'treatment';
|
|
46
|
+
/**
|
|
47
|
+
* A/B testing experiment
|
|
48
|
+
*/
|
|
49
|
+
export interface Experiment {
|
|
50
|
+
id: string;
|
|
51
|
+
name: string;
|
|
52
|
+
description?: string;
|
|
53
|
+
hypothesis?: string;
|
|
54
|
+
status: ExperimentStatus;
|
|
55
|
+
variantA: Record<string, unknown>;
|
|
56
|
+
variantB: Record<string, unknown>;
|
|
57
|
+
startDate?: string;
|
|
58
|
+
endDate?: string;
|
|
59
|
+
targetSampleSize: number;
|
|
60
|
+
createdAt: string;
|
|
61
|
+
updatedAt: string;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Input for creating an experiment
|
|
65
|
+
*/
|
|
66
|
+
export interface ExperimentInput {
|
|
67
|
+
name: string;
|
|
68
|
+
description?: string;
|
|
69
|
+
hypothesis?: string;
|
|
70
|
+
variantA: Record<string, unknown>;
|
|
71
|
+
variantB: Record<string, unknown>;
|
|
72
|
+
targetSampleSize?: number;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Experiment assignment
|
|
76
|
+
*/
|
|
77
|
+
export interface ExperimentAssignment {
|
|
78
|
+
id: string;
|
|
79
|
+
experimentId: string;
|
|
80
|
+
userId: string;
|
|
81
|
+
variant: ExperimentVariant;
|
|
82
|
+
assignedAt: string;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Experiment outcome measurement
|
|
86
|
+
*/
|
|
87
|
+
export interface ExperimentOutcome {
|
|
88
|
+
id: string;
|
|
89
|
+
experimentId: string;
|
|
90
|
+
assignmentId: string;
|
|
91
|
+
outcomeType: string;
|
|
92
|
+
outcomeValue: number;
|
|
93
|
+
metadata?: Record<string, unknown>;
|
|
94
|
+
measuredAt: string;
|
|
95
|
+
createdAt: string;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Input for recording an outcome
|
|
99
|
+
*/
|
|
100
|
+
export interface OutcomeInput {
|
|
101
|
+
experimentId: string;
|
|
102
|
+
assignmentId: string;
|
|
103
|
+
outcomeType: string;
|
|
104
|
+
outcomeValue: number;
|
|
105
|
+
metadata?: Record<string, unknown>;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* ROI metric types
|
|
109
|
+
*/
|
|
110
|
+
export type ROIMetricType = 'daily' | 'weekly' | 'monthly' | 'user' | 'skill';
|
|
111
|
+
/**
|
|
112
|
+
* ROI metrics
|
|
113
|
+
*/
|
|
114
|
+
export interface ROIMetrics {
|
|
115
|
+
id: string;
|
|
116
|
+
metricType: ROIMetricType;
|
|
117
|
+
entityId?: string;
|
|
118
|
+
periodStart: string;
|
|
119
|
+
periodEnd: string;
|
|
120
|
+
totalActivations: number;
|
|
121
|
+
totalInvocations: number;
|
|
122
|
+
totalSuccesses: number;
|
|
123
|
+
totalFailures: number;
|
|
124
|
+
avgValueScore: number;
|
|
125
|
+
estimatedTimeSaved: number;
|
|
126
|
+
estimatedValueUsd: number;
|
|
127
|
+
metadata?: Record<string, unknown>;
|
|
128
|
+
computedAt: string;
|
|
129
|
+
createdAt: string;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Value attribution types
|
|
133
|
+
*/
|
|
134
|
+
export type AttributionType = 'inline' | 'metadata' | 'session';
|
|
135
|
+
/**
|
|
136
|
+
* Value dimensions for ROI calculation
|
|
137
|
+
*/
|
|
138
|
+
export type ValueDimension = 'time_saved' | 'quality_improved' | 'error_prevented';
|
|
139
|
+
/**
|
|
140
|
+
* Value attribution
|
|
141
|
+
*/
|
|
142
|
+
export interface ValueAttribution {
|
|
143
|
+
id: string;
|
|
144
|
+
usageEventId: string;
|
|
145
|
+
skillId: string;
|
|
146
|
+
attributionType: AttributionType;
|
|
147
|
+
valueDimension: ValueDimension;
|
|
148
|
+
valueAmount: number;
|
|
149
|
+
confidence: number;
|
|
150
|
+
metadata?: Record<string, unknown>;
|
|
151
|
+
createdAt: string;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Usage analytics summary for a time period
|
|
155
|
+
*/
|
|
156
|
+
export interface UsageAnalyticsSummary {
|
|
157
|
+
periodStart: string;
|
|
158
|
+
periodEnd: string;
|
|
159
|
+
totalEvents: number;
|
|
160
|
+
eventsByType: Record<UsageEventType, number>;
|
|
161
|
+
uniqueUsers: number;
|
|
162
|
+
uniqueSkills: number;
|
|
163
|
+
avgValueScore: number;
|
|
164
|
+
topSkills: Array<{
|
|
165
|
+
skillId: string;
|
|
166
|
+
count: number;
|
|
167
|
+
}>;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Experiment analysis results
|
|
171
|
+
*/
|
|
172
|
+
export interface ExperimentAnalysis {
|
|
173
|
+
experimentId: string;
|
|
174
|
+
experimentName: string;
|
|
175
|
+
controlGroup: {
|
|
176
|
+
sampleSize: number;
|
|
177
|
+
outcomes: Record<string, {
|
|
178
|
+
mean: number;
|
|
179
|
+
stdDev: number;
|
|
180
|
+
}>;
|
|
181
|
+
};
|
|
182
|
+
treatmentGroup: {
|
|
183
|
+
sampleSize: number;
|
|
184
|
+
outcomes: Record<string, {
|
|
185
|
+
mean: number;
|
|
186
|
+
stdDev: number;
|
|
187
|
+
}>;
|
|
188
|
+
};
|
|
189
|
+
pValues: Record<string, number>;
|
|
190
|
+
confidenceIntervals: Record<string, {
|
|
191
|
+
lower: number;
|
|
192
|
+
upper: number;
|
|
193
|
+
}>;
|
|
194
|
+
recommendation: 'continue' | 'stop_control_wins' | 'stop_treatment_wins' | 'inconclusive';
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* ROI dashboard data
|
|
198
|
+
*/
|
|
199
|
+
export interface ROIDashboard {
|
|
200
|
+
user?: {
|
|
201
|
+
userId: string;
|
|
202
|
+
totalTimeSaved: number;
|
|
203
|
+
estimatedValueUsd: number;
|
|
204
|
+
topSkills: Array<{
|
|
205
|
+
skillId: string;
|
|
206
|
+
skillName: string;
|
|
207
|
+
timeSaved: number;
|
|
208
|
+
}>;
|
|
209
|
+
weeklyTrend: Array<{
|
|
210
|
+
week: string;
|
|
211
|
+
timeSaved: number;
|
|
212
|
+
}>;
|
|
213
|
+
};
|
|
214
|
+
stakeholder?: {
|
|
215
|
+
totalUsers: number;
|
|
216
|
+
totalActivations: number;
|
|
217
|
+
avgTimeSavedPerUser: number;
|
|
218
|
+
totalEstimatedValue: number;
|
|
219
|
+
adoptionRate: number;
|
|
220
|
+
skillLeaderboard: Array<{
|
|
221
|
+
skillId: string;
|
|
222
|
+
skillName: string;
|
|
223
|
+
userCount: number;
|
|
224
|
+
totalValue: number;
|
|
225
|
+
}>;
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Export format options
|
|
230
|
+
*/
|
|
231
|
+
export type ExportFormat = 'json' | 'csv' | 'pdf';
|
|
232
|
+
/**
|
|
233
|
+
* Export options
|
|
234
|
+
*/
|
|
235
|
+
export interface ExportOptions {
|
|
236
|
+
format: ExportFormat;
|
|
237
|
+
startDate?: string;
|
|
238
|
+
endDate?: string;
|
|
239
|
+
includeCharts?: boolean;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* SMI-914: Skill Usage Event tracking types
|
|
243
|
+
*
|
|
244
|
+
* These types support per-skill usage analytics with:
|
|
245
|
+
* - Anonymized user tracking (no PII)
|
|
246
|
+
* - Task duration measurement
|
|
247
|
+
* - Success/error/abandoned outcomes
|
|
248
|
+
* - 30-day rolling window storage
|
|
249
|
+
*/
|
|
250
|
+
/**
|
|
251
|
+
* Outcome of a skill invocation
|
|
252
|
+
*/
|
|
253
|
+
export type SkillUsageOutcome = 'success' | 'error' | 'abandoned';
|
|
254
|
+
/**
|
|
255
|
+
* Individual skill usage event (anonymized)
|
|
256
|
+
*/
|
|
257
|
+
export interface SkillUsageEvent {
|
|
258
|
+
id?: number;
|
|
259
|
+
skillId: string;
|
|
260
|
+
userId: string;
|
|
261
|
+
timestamp: number;
|
|
262
|
+
taskDuration: number;
|
|
263
|
+
outcome: SkillUsageOutcome;
|
|
264
|
+
contextHash: string;
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Aggregated metrics for a skill
|
|
268
|
+
*/
|
|
269
|
+
export interface SkillMetrics {
|
|
270
|
+
skillId: string;
|
|
271
|
+
totalInvocations: number;
|
|
272
|
+
successRate: number;
|
|
273
|
+
avgTaskDuration: number;
|
|
274
|
+
uniqueUsers: number;
|
|
275
|
+
lastUsed: number;
|
|
276
|
+
}
|
|
277
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/analytics/types.ts"],"names":[],"mappings":"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"}
|