@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 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/analytics/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-914: Usage Tracker
|
|
3
|
+
*
|
|
4
|
+
* High-level API for tracking skill usage events.
|
|
5
|
+
* Handles:
|
|
6
|
+
* - Start/end tracking for duration measurement
|
|
7
|
+
* - User ID anonymization
|
|
8
|
+
* - Context hashing
|
|
9
|
+
* - Periodic cleanup of old events
|
|
10
|
+
*/
|
|
11
|
+
import type { SkillUsageEvent, SkillUsageOutcome, SkillMetrics } from './types.js';
|
|
12
|
+
/**
|
|
13
|
+
* UsageTracker configuration options
|
|
14
|
+
*/
|
|
15
|
+
export interface UsageTrackerOptions {
|
|
16
|
+
/**
|
|
17
|
+
* Custom database path (defaults to ~/.skillsmith/analytics.db)
|
|
18
|
+
*/
|
|
19
|
+
dbPath?: string;
|
|
20
|
+
/**
|
|
21
|
+
* Auto-cleanup interval in milliseconds (0 to disable, default: 1 hour)
|
|
22
|
+
*/
|
|
23
|
+
cleanupInterval?: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* High-level usage tracking API
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```typescript
|
|
30
|
+
* const tracker = new UsageTracker();
|
|
31
|
+
*
|
|
32
|
+
* // Start tracking a skill invocation
|
|
33
|
+
* const trackingId = tracker.startTracking('anthropic/commit', 'user123');
|
|
34
|
+
*
|
|
35
|
+
* // ... skill execution ...
|
|
36
|
+
*
|
|
37
|
+
* // End tracking with outcome
|
|
38
|
+
* tracker.endTracking(trackingId, 'success', { framework: 'react' });
|
|
39
|
+
*
|
|
40
|
+
* // Get metrics
|
|
41
|
+
* const metrics = tracker.getMetrics('anthropic/commit');
|
|
42
|
+
*
|
|
43
|
+
* // Cleanup when done
|
|
44
|
+
* tracker.close();
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
export declare class UsageTracker {
|
|
48
|
+
private storage;
|
|
49
|
+
private pendingEvents;
|
|
50
|
+
private cleanupTimer;
|
|
51
|
+
private sessionCleanupTimer;
|
|
52
|
+
/**
|
|
53
|
+
* Create a usage tracker instance
|
|
54
|
+
*
|
|
55
|
+
* @param options - Configuration options
|
|
56
|
+
*/
|
|
57
|
+
constructor(options?: UsageTrackerOptions);
|
|
58
|
+
/**
|
|
59
|
+
* Start tracking a skill invocation
|
|
60
|
+
*
|
|
61
|
+
* @param skillId - The skill identifier (e.g., 'anthropic/commit')
|
|
62
|
+
* @param userId - Raw user identifier (will be anonymized)
|
|
63
|
+
* @returns Tracking ID to use when ending tracking
|
|
64
|
+
*/
|
|
65
|
+
startTracking(skillId: string, userId: string): string;
|
|
66
|
+
/**
|
|
67
|
+
* End tracking and record the event
|
|
68
|
+
*
|
|
69
|
+
* @param trackingId - The tracking ID from startTracking
|
|
70
|
+
* @param outcome - The outcome of the skill invocation
|
|
71
|
+
* @param context - Optional project context (will be hashed)
|
|
72
|
+
*/
|
|
73
|
+
endTracking(trackingId: string, outcome: SkillUsageOutcome, context?: Record<string, unknown>): void;
|
|
74
|
+
/**
|
|
75
|
+
* Record a complete event directly (for events that don't need start/end tracking)
|
|
76
|
+
*
|
|
77
|
+
* @param skillId - The skill identifier
|
|
78
|
+
* @param userId - Raw user identifier (will be anonymized)
|
|
79
|
+
* @param taskDuration - Duration in milliseconds
|
|
80
|
+
* @param outcome - The outcome
|
|
81
|
+
* @param context - Optional project context
|
|
82
|
+
*/
|
|
83
|
+
recordEvent(skillId: string, userId: string, taskDuration: number, outcome: SkillUsageOutcome, context?: Record<string, unknown>): void;
|
|
84
|
+
/**
|
|
85
|
+
* Get metrics for a skill
|
|
86
|
+
*
|
|
87
|
+
* @param skillId - The skill identifier
|
|
88
|
+
* @returns Aggregated metrics or null if no data
|
|
89
|
+
*/
|
|
90
|
+
getMetrics(skillId: string): SkillMetrics | null;
|
|
91
|
+
/**
|
|
92
|
+
* Get events for a skill
|
|
93
|
+
*
|
|
94
|
+
* @param skillId - The skill identifier
|
|
95
|
+
* @param limit - Maximum number of events
|
|
96
|
+
* @returns Array of usage events
|
|
97
|
+
*/
|
|
98
|
+
getEvents(skillId: string, limit?: number): SkillUsageEvent[];
|
|
99
|
+
/**
|
|
100
|
+
* Get total event count
|
|
101
|
+
*
|
|
102
|
+
* @returns Number of stored events
|
|
103
|
+
*/
|
|
104
|
+
getEventCount(): number;
|
|
105
|
+
/**
|
|
106
|
+
* Get count of pending (unfinished) trackings
|
|
107
|
+
*
|
|
108
|
+
* @returns Number of pending trackings
|
|
109
|
+
*/
|
|
110
|
+
getPendingCount(): number;
|
|
111
|
+
/**
|
|
112
|
+
* Clean up events older than 30 days
|
|
113
|
+
*
|
|
114
|
+
* @returns Number of deleted events
|
|
115
|
+
*/
|
|
116
|
+
cleanup(): number;
|
|
117
|
+
/**
|
|
118
|
+
* Clean up stale sessions that have exceeded the timeout
|
|
119
|
+
* This prevents unbounded memory growth from sessions that are started but never ended
|
|
120
|
+
*/
|
|
121
|
+
private cleanupStaleSessions;
|
|
122
|
+
/**
|
|
123
|
+
* Close the tracker and release resources
|
|
124
|
+
*/
|
|
125
|
+
close(): void;
|
|
126
|
+
/**
|
|
127
|
+
* Dispose of the tracker (alias for close)
|
|
128
|
+
* Clears all intervals and releases resources
|
|
129
|
+
*/
|
|
130
|
+
dispose(): void;
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=usage-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage-tracker.d.ts","sourceRoot":"","sources":["../../../src/analytics/usage-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAiBlF;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,YAAY,CAA8C;IAClE,OAAO,CAAC,mBAAmB,CAA8C;IAEzE;;;;OAIG;gBACS,OAAO,GAAE,mBAAwB;IAyB7C;;;;;;OAMG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAetD;;;;;;OAMG;IACH,WAAW,CACT,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACpC,IAAI;IAoBP;;;;;;;;OAQG;IACH,WAAW,CACT,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACpC,IAAI;IAaP;;;;;OAKG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAIhD;;;;;;OAMG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,MAAY,GAAG,eAAe,EAAE;IAIlE;;;;OAIG;IACH,aAAa,IAAI,MAAM;IAIvB;;;;OAIG;IACH,eAAe,IAAI,MAAM;IAIzB;;;;OAIG;IACH,OAAO,IAAI,MAAM;IAIjB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAgB5B;;OAEG;IACH,KAAK,IAAI,IAAI;IAYb;;;OAGG;IACH,OAAO,IAAI,IAAI;CAGhB"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-914: Usage Tracker
|
|
3
|
+
*
|
|
4
|
+
* High-level API for tracking skill usage events.
|
|
5
|
+
* Handles:
|
|
6
|
+
* - Start/end tracking for duration measurement
|
|
7
|
+
* - User ID anonymization
|
|
8
|
+
* - Context hashing
|
|
9
|
+
* - Periodic cleanup of old events
|
|
10
|
+
*/
|
|
11
|
+
import { AnalyticsStorage } from './storage.js';
|
|
12
|
+
import { anonymizeUserId, hashProjectContext } from './anonymizer.js';
|
|
13
|
+
/**
|
|
14
|
+
* Session timeout in milliseconds (1 hour)
|
|
15
|
+
* Sessions older than this are considered stale and will be cleaned up
|
|
16
|
+
*/
|
|
17
|
+
const SESSION_TIMEOUT_MS = 60 * 60 * 1000;
|
|
18
|
+
/**
|
|
19
|
+
* High-level usage tracking API
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* const tracker = new UsageTracker();
|
|
24
|
+
*
|
|
25
|
+
* // Start tracking a skill invocation
|
|
26
|
+
* const trackingId = tracker.startTracking('anthropic/commit', 'user123');
|
|
27
|
+
*
|
|
28
|
+
* // ... skill execution ...
|
|
29
|
+
*
|
|
30
|
+
* // End tracking with outcome
|
|
31
|
+
* tracker.endTracking(trackingId, 'success', { framework: 'react' });
|
|
32
|
+
*
|
|
33
|
+
* // Get metrics
|
|
34
|
+
* const metrics = tracker.getMetrics('anthropic/commit');
|
|
35
|
+
*
|
|
36
|
+
* // Cleanup when done
|
|
37
|
+
* tracker.close();
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export class UsageTracker {
|
|
41
|
+
storage;
|
|
42
|
+
pendingEvents;
|
|
43
|
+
cleanupTimer = null;
|
|
44
|
+
sessionCleanupTimer = null;
|
|
45
|
+
/**
|
|
46
|
+
* Create a usage tracker instance
|
|
47
|
+
*
|
|
48
|
+
* @param options - Configuration options
|
|
49
|
+
*/
|
|
50
|
+
constructor(options = {}) {
|
|
51
|
+
this.storage = new AnalyticsStorage(options.dbPath);
|
|
52
|
+
this.pendingEvents = new Map();
|
|
53
|
+
// Setup auto-cleanup (default: every hour)
|
|
54
|
+
const cleanupInterval = options.cleanupInterval ?? 60 * 60 * 1000;
|
|
55
|
+
if (cleanupInterval > 0) {
|
|
56
|
+
this.cleanupTimer = setInterval(() => this.cleanup(), cleanupInterval);
|
|
57
|
+
// Don't block Node.js from exiting
|
|
58
|
+
if (this.cleanupTimer.unref) {
|
|
59
|
+
this.cleanupTimer.unref();
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Setup session cleanup at half the timeout interval to prevent unbounded growth
|
|
63
|
+
this.sessionCleanupTimer = setInterval(() => this.cleanupStaleSessions(), SESSION_TIMEOUT_MS / 2);
|
|
64
|
+
// Don't block Node.js from exiting
|
|
65
|
+
if (this.sessionCleanupTimer.unref) {
|
|
66
|
+
this.sessionCleanupTimer.unref();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Start tracking a skill invocation
|
|
71
|
+
*
|
|
72
|
+
* @param skillId - The skill identifier (e.g., 'anthropic/commit')
|
|
73
|
+
* @param userId - Raw user identifier (will be anonymized)
|
|
74
|
+
* @returns Tracking ID to use when ending tracking
|
|
75
|
+
*/
|
|
76
|
+
startTracking(skillId, userId) {
|
|
77
|
+
// Clean up stale sessions opportunistically to prevent buildup
|
|
78
|
+
this.cleanupStaleSessions();
|
|
79
|
+
const trackingId = `${skillId}-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
80
|
+
this.pendingEvents.set(trackingId, {
|
|
81
|
+
skillId,
|
|
82
|
+
startTime: Date.now(),
|
|
83
|
+
rawUserId: userId,
|
|
84
|
+
});
|
|
85
|
+
return trackingId;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* End tracking and record the event
|
|
89
|
+
*
|
|
90
|
+
* @param trackingId - The tracking ID from startTracking
|
|
91
|
+
* @param outcome - The outcome of the skill invocation
|
|
92
|
+
* @param context - Optional project context (will be hashed)
|
|
93
|
+
*/
|
|
94
|
+
endTracking(trackingId, outcome, context = {}) {
|
|
95
|
+
const pending = this.pendingEvents.get(trackingId);
|
|
96
|
+
if (!pending) {
|
|
97
|
+
// Silently ignore unknown tracking IDs (could be from a previous session)
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
const event = {
|
|
101
|
+
skillId: pending.skillId,
|
|
102
|
+
userId: anonymizeUserId(pending.rawUserId),
|
|
103
|
+
timestamp: Date.now(),
|
|
104
|
+
taskDuration: Date.now() - pending.startTime,
|
|
105
|
+
outcome,
|
|
106
|
+
contextHash: hashProjectContext(context),
|
|
107
|
+
};
|
|
108
|
+
this.storage.recordEvent(event);
|
|
109
|
+
this.pendingEvents.delete(trackingId);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Record a complete event directly (for events that don't need start/end tracking)
|
|
113
|
+
*
|
|
114
|
+
* @param skillId - The skill identifier
|
|
115
|
+
* @param userId - Raw user identifier (will be anonymized)
|
|
116
|
+
* @param taskDuration - Duration in milliseconds
|
|
117
|
+
* @param outcome - The outcome
|
|
118
|
+
* @param context - Optional project context
|
|
119
|
+
*/
|
|
120
|
+
recordEvent(skillId, userId, taskDuration, outcome, context = {}) {
|
|
121
|
+
const event = {
|
|
122
|
+
skillId,
|
|
123
|
+
userId: anonymizeUserId(userId),
|
|
124
|
+
timestamp: Date.now(),
|
|
125
|
+
taskDuration,
|
|
126
|
+
outcome,
|
|
127
|
+
contextHash: hashProjectContext(context),
|
|
128
|
+
};
|
|
129
|
+
this.storage.recordEvent(event);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Get metrics for a skill
|
|
133
|
+
*
|
|
134
|
+
* @param skillId - The skill identifier
|
|
135
|
+
* @returns Aggregated metrics or null if no data
|
|
136
|
+
*/
|
|
137
|
+
getMetrics(skillId) {
|
|
138
|
+
return this.storage.getMetricsForSkill(skillId);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Get events for a skill
|
|
142
|
+
*
|
|
143
|
+
* @param skillId - The skill identifier
|
|
144
|
+
* @param limit - Maximum number of events
|
|
145
|
+
* @returns Array of usage events
|
|
146
|
+
*/
|
|
147
|
+
getEvents(skillId, limit = 100) {
|
|
148
|
+
return this.storage.getEventsForSkill(skillId, limit);
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Get total event count
|
|
152
|
+
*
|
|
153
|
+
* @returns Number of stored events
|
|
154
|
+
*/
|
|
155
|
+
getEventCount() {
|
|
156
|
+
return this.storage.getEventCount();
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Get count of pending (unfinished) trackings
|
|
160
|
+
*
|
|
161
|
+
* @returns Number of pending trackings
|
|
162
|
+
*/
|
|
163
|
+
getPendingCount() {
|
|
164
|
+
return this.pendingEvents.size;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Clean up events older than 30 days
|
|
168
|
+
*
|
|
169
|
+
* @returns Number of deleted events
|
|
170
|
+
*/
|
|
171
|
+
cleanup() {
|
|
172
|
+
return this.storage.cleanup();
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Clean up stale sessions that have exceeded the timeout
|
|
176
|
+
* This prevents unbounded memory growth from sessions that are started but never ended
|
|
177
|
+
*/
|
|
178
|
+
cleanupStaleSessions() {
|
|
179
|
+
const now = Date.now();
|
|
180
|
+
let expiredCount = 0;
|
|
181
|
+
for (const [trackingId, pending] of this.pendingEvents.entries()) {
|
|
182
|
+
if (now - pending.startTime > SESSION_TIMEOUT_MS) {
|
|
183
|
+
this.pendingEvents.delete(trackingId);
|
|
184
|
+
expiredCount++;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
if (expiredCount > 0) {
|
|
188
|
+
console.warn(`[usage-tracker] Cleaned up ${expiredCount} stale sessions`);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Close the tracker and release resources
|
|
193
|
+
*/
|
|
194
|
+
close() {
|
|
195
|
+
if (this.cleanupTimer) {
|
|
196
|
+
clearInterval(this.cleanupTimer);
|
|
197
|
+
this.cleanupTimer = null;
|
|
198
|
+
}
|
|
199
|
+
if (this.sessionCleanupTimer) {
|
|
200
|
+
clearInterval(this.sessionCleanupTimer);
|
|
201
|
+
this.sessionCleanupTimer = null;
|
|
202
|
+
}
|
|
203
|
+
this.storage.close();
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Dispose of the tracker (alias for close)
|
|
207
|
+
* Clears all intervals and releases resources
|
|
208
|
+
*/
|
|
209
|
+
dispose() {
|
|
210
|
+
this.close();
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=usage-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage-tracker.js","sourceRoot":"","sources":["../../../src/analytics/usage-tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-632: BenchmarkRunner - Performance benchmark infrastructure
|
|
3
|
+
* SMI-689: Enhanced with MemoryProfiler integration
|
|
4
|
+
*
|
|
5
|
+
* Features:
|
|
6
|
+
* - Run benchmark suites
|
|
7
|
+
* - Measure p50, p95, p99 latencies
|
|
8
|
+
* - Memory usage tracking with MemoryProfiler
|
|
9
|
+
* - Memory regression detection (fail if heap grows >10% vs baseline)
|
|
10
|
+
* - Warm-up runs before measurement
|
|
11
|
+
* - Statistical analysis (mean, stddev)
|
|
12
|
+
*/
|
|
13
|
+
import { MemoryProfiler, type MemoryBaseline, type MemoryRegressionResult } from './MemoryProfiler.js';
|
|
14
|
+
/**
|
|
15
|
+
* Benchmark configuration options
|
|
16
|
+
*/
|
|
17
|
+
export interface BenchmarkConfig {
|
|
18
|
+
/** Number of warm-up iterations before measurement */
|
|
19
|
+
warmupIterations?: number;
|
|
20
|
+
/** Number of measured iterations */
|
|
21
|
+
iterations?: number;
|
|
22
|
+
/** Enable memory profiling */
|
|
23
|
+
measureMemory?: boolean;
|
|
24
|
+
/** Suite name for grouping */
|
|
25
|
+
suiteName?: string;
|
|
26
|
+
/** Enable detailed memory profiling with MemoryProfiler (SMI-689) */
|
|
27
|
+
enableMemoryProfiler?: boolean;
|
|
28
|
+
/** Memory regression threshold percentage (SMI-689, default: 10) */
|
|
29
|
+
memoryRegressionThreshold?: number;
|
|
30
|
+
/** Memory baselines for regression comparison (SMI-689) */
|
|
31
|
+
memoryBaselines?: Record<string, MemoryBaseline>;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Single benchmark result
|
|
35
|
+
*/
|
|
36
|
+
export interface BenchmarkResult {
|
|
37
|
+
name: string;
|
|
38
|
+
iterations: number;
|
|
39
|
+
latencies: number[];
|
|
40
|
+
memoryUsage?: MemoryStats;
|
|
41
|
+
/** Number of errors encountered during benchmark execution */
|
|
42
|
+
errors: number;
|
|
43
|
+
/** Error messages (capped at 10 to prevent memory issues) */
|
|
44
|
+
errorMessages: string[];
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Memory usage statistics
|
|
48
|
+
*/
|
|
49
|
+
export interface MemoryStats {
|
|
50
|
+
heapUsedBefore: number;
|
|
51
|
+
heapUsedAfter: number;
|
|
52
|
+
heapUsedPeak: number;
|
|
53
|
+
externalBefore: number;
|
|
54
|
+
externalAfter: number;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Statistical summary of benchmark results
|
|
58
|
+
*/
|
|
59
|
+
export interface BenchmarkStats {
|
|
60
|
+
name: string;
|
|
61
|
+
iterations: number;
|
|
62
|
+
p50_ms: number;
|
|
63
|
+
p95_ms: number;
|
|
64
|
+
p99_ms: number;
|
|
65
|
+
mean_ms: number;
|
|
66
|
+
stddev_ms: number;
|
|
67
|
+
min_ms: number;
|
|
68
|
+
max_ms: number;
|
|
69
|
+
memoryPeak_mb?: number;
|
|
70
|
+
/** Number of errors encountered during benchmark execution */
|
|
71
|
+
errors?: number;
|
|
72
|
+
/** Error messages (capped at 10) */
|
|
73
|
+
errorMessages?: string[];
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Detailed memory profiling stats (SMI-689)
|
|
77
|
+
*/
|
|
78
|
+
export interface DetailedMemoryStats {
|
|
79
|
+
/** Start heap size in bytes */
|
|
80
|
+
startHeapSize: number;
|
|
81
|
+
/** End heap size in bytes */
|
|
82
|
+
endHeapSize: number;
|
|
83
|
+
/** Peak heap size in bytes */
|
|
84
|
+
peakHeapSize: number;
|
|
85
|
+
/** Heap growth in bytes */
|
|
86
|
+
heapGrowth: number;
|
|
87
|
+
/** Heap growth as percentage */
|
|
88
|
+
heapGrowthPercent: number;
|
|
89
|
+
/** Duration of profiling in ms */
|
|
90
|
+
profilingDuration: number;
|
|
91
|
+
/** Number of samples collected */
|
|
92
|
+
sampleCount: number;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Memory regression info (SMI-689)
|
|
96
|
+
*/
|
|
97
|
+
export interface MemoryRegressionInfo {
|
|
98
|
+
/** Whether any regressions were detected */
|
|
99
|
+
hasRegressions: boolean;
|
|
100
|
+
/** Threshold used for detection */
|
|
101
|
+
threshold: number;
|
|
102
|
+
/** Details per benchmark */
|
|
103
|
+
regressions: MemoryRegressionResult[];
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Complete benchmark report
|
|
107
|
+
*/
|
|
108
|
+
export interface BenchmarkReport {
|
|
109
|
+
suite: string;
|
|
110
|
+
timestamp: string;
|
|
111
|
+
environment: EnvironmentInfo;
|
|
112
|
+
results: Record<string, BenchmarkStats>;
|
|
113
|
+
summary: {
|
|
114
|
+
totalBenchmarks: number;
|
|
115
|
+
totalIterations: number;
|
|
116
|
+
totalDuration_ms: number;
|
|
117
|
+
};
|
|
118
|
+
/** Detailed memory profiling data (SMI-689) */
|
|
119
|
+
memoryProfile?: Record<string, DetailedMemoryStats>;
|
|
120
|
+
/** Memory regression info (SMI-689) */
|
|
121
|
+
memoryRegression?: MemoryRegressionInfo;
|
|
122
|
+
/** Memory baselines for future comparison (SMI-689) */
|
|
123
|
+
memoryBaselines?: Record<string, MemoryBaseline>;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Environment information for reproducibility
|
|
127
|
+
*/
|
|
128
|
+
export interface EnvironmentInfo {
|
|
129
|
+
node: string;
|
|
130
|
+
platform: string;
|
|
131
|
+
arch: string;
|
|
132
|
+
docker: boolean;
|
|
133
|
+
database: string;
|
|
134
|
+
cpuCount: number;
|
|
135
|
+
memoryTotal_mb: number;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Benchmark function type
|
|
139
|
+
*/
|
|
140
|
+
export type BenchmarkFn = () => void | Promise<void>;
|
|
141
|
+
/**
|
|
142
|
+
* Benchmark definition
|
|
143
|
+
*/
|
|
144
|
+
export interface BenchmarkDefinition {
|
|
145
|
+
name: string;
|
|
146
|
+
fn: BenchmarkFn;
|
|
147
|
+
setup?: () => void | Promise<void>;
|
|
148
|
+
teardown?: () => void | Promise<void>;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Core benchmark runner for performance testing
|
|
152
|
+
*/
|
|
153
|
+
export declare class BenchmarkRunner {
|
|
154
|
+
private config;
|
|
155
|
+
private benchmarks;
|
|
156
|
+
private results;
|
|
157
|
+
/** SMI-689: Memory profiler instance */
|
|
158
|
+
private memoryProfiler;
|
|
159
|
+
constructor(config?: BenchmarkConfig);
|
|
160
|
+
/**
|
|
161
|
+
* Get the memory profiler instance (SMI-689)
|
|
162
|
+
*/
|
|
163
|
+
getMemoryProfiler(): MemoryProfiler | null;
|
|
164
|
+
/**
|
|
165
|
+
* Add a benchmark to the suite
|
|
166
|
+
*/
|
|
167
|
+
add(definition: BenchmarkDefinition): this;
|
|
168
|
+
/**
|
|
169
|
+
* Run all benchmarks in the suite
|
|
170
|
+
*/
|
|
171
|
+
run(): Promise<BenchmarkReport>;
|
|
172
|
+
/**
|
|
173
|
+
* Run a single benchmark with error handling (SMI-678)
|
|
174
|
+
*/
|
|
175
|
+
private runBenchmark;
|
|
176
|
+
/**
|
|
177
|
+
* Generate a benchmark report from results
|
|
178
|
+
*/
|
|
179
|
+
private generateReport;
|
|
180
|
+
/**
|
|
181
|
+
* Calculate statistical metrics from latencies
|
|
182
|
+
* Uses shared stats module for consistent calculations (SMI-677)
|
|
183
|
+
* Includes empty array guard (SMI-679) and sample variance (Bessel correction)
|
|
184
|
+
*/
|
|
185
|
+
private calculateStats;
|
|
186
|
+
/**
|
|
187
|
+
* @deprecated Use shared percentile from stats.ts instead (SMI-677)
|
|
188
|
+
* Calculate percentile value from sorted array
|
|
189
|
+
*/
|
|
190
|
+
private _legacyPercentile;
|
|
191
|
+
/**
|
|
192
|
+
* Get environment information
|
|
193
|
+
*/
|
|
194
|
+
private getEnvironmentInfo;
|
|
195
|
+
/**
|
|
196
|
+
* Detect if running in Docker
|
|
197
|
+
*/
|
|
198
|
+
private isDocker;
|
|
199
|
+
/**
|
|
200
|
+
* Force garbage collection if available
|
|
201
|
+
*/
|
|
202
|
+
private forceGC;
|
|
203
|
+
/**
|
|
204
|
+
* Get raw results
|
|
205
|
+
*/
|
|
206
|
+
getResults(): BenchmarkResult[];
|
|
207
|
+
/**
|
|
208
|
+
* Clear all benchmarks
|
|
209
|
+
*/
|
|
210
|
+
clear(): void;
|
|
211
|
+
/**
|
|
212
|
+
* Enable memory profiler after construction (SMI-689)
|
|
213
|
+
*/
|
|
214
|
+
enableMemoryProfiler(baselines?: Record<string, MemoryBaseline>): void;
|
|
215
|
+
/**
|
|
216
|
+
* Get memory profiling report as string (SMI-689)
|
|
217
|
+
*/
|
|
218
|
+
getMemoryReport(): string;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Format a benchmark report as JSON for CI integration
|
|
222
|
+
*/
|
|
223
|
+
export declare function formatReportAsJson(report: BenchmarkReport): string;
|
|
224
|
+
/**
|
|
225
|
+
* Format a benchmark report as human-readable text
|
|
226
|
+
*/
|
|
227
|
+
export declare function formatReportAsText(report: BenchmarkReport): string;
|
|
228
|
+
/**
|
|
229
|
+
* Compare two benchmark reports
|
|
230
|
+
*/
|
|
231
|
+
export declare function compareReports(baseline: BenchmarkReport, current: BenchmarkReport): ComparisonResult;
|
|
232
|
+
/**
|
|
233
|
+
* Comparison result between two reports
|
|
234
|
+
*/
|
|
235
|
+
export interface ComparisonResult {
|
|
236
|
+
baseline: string;
|
|
237
|
+
current: string;
|
|
238
|
+
comparisons: Record<string, MetricComparison>;
|
|
239
|
+
summary: {
|
|
240
|
+
totalComparisons: number;
|
|
241
|
+
regressions: number;
|
|
242
|
+
improvements: number;
|
|
243
|
+
unchanged: number;
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Single metric comparison
|
|
248
|
+
*/
|
|
249
|
+
export interface MetricComparison {
|
|
250
|
+
baseline: BenchmarkStats;
|
|
251
|
+
current: BenchmarkStats;
|
|
252
|
+
p50ChangePercent: number;
|
|
253
|
+
p95ChangePercent: number;
|
|
254
|
+
p99ChangePercent: number;
|
|
255
|
+
isRegression: boolean;
|
|
256
|
+
isImprovement: boolean;
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=BenchmarkRunner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BenchmarkRunner.d.ts","sourceRoot":"","sources":["../../../src/benchmarks/BenchmarkRunner.ts"],"names":[],"mappings":"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"}
|