@skillsmith/core 0.1.2 → 2.0.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/README.md +233 -2
- package/dist/.tsbuildinfo +1 -1
- package/dist/src/analysis/CodebaseAnalyzer.d.ts +4 -134
- package/dist/src/analysis/CodebaseAnalyzer.d.ts.map +1 -1
- package/dist/src/analysis/CodebaseAnalyzer.js +7 -315
- package/dist/src/analysis/CodebaseAnalyzer.js.map +1 -1
- package/dist/src/analysis/__tests__/incremental.test.d.ts +13 -0
- package/dist/src/analysis/__tests__/incremental.test.d.ts.map +1 -0
- package/dist/src/analysis/__tests__/incremental.test.js +515 -0
- package/dist/src/analysis/__tests__/incremental.test.js.map +1 -0
- package/dist/src/analysis/__tests__/integration.test.d.ts +14 -0
- package/dist/src/analysis/__tests__/integration.test.d.ts.map +1 -0
- package/dist/src/analysis/__tests__/integration.test.js +1059 -0
- package/dist/src/analysis/__tests__/integration.test.js.map +1 -0
- package/dist/src/analysis/__tests__/metrics.test.d.ts +9 -0
- package/dist/src/analysis/__tests__/metrics.test.d.ts.map +1 -0
- package/dist/src/analysis/__tests__/metrics.test.js +369 -0
- package/dist/src/analysis/__tests__/metrics.test.js.map +1 -0
- package/dist/src/analysis/__tests__/performance.test.d.ts +15 -0
- package/dist/src/analysis/__tests__/performance.test.d.ts.map +1 -0
- package/dist/src/analysis/__tests__/performance.test.js +402 -0
- package/dist/src/analysis/__tests__/performance.test.js.map +1 -0
- package/dist/src/analysis/adapters/__tests__/go.test.d.ts +12 -0
- package/dist/src/analysis/adapters/__tests__/go.test.d.ts.map +1 -0
- package/dist/src/analysis/adapters/__tests__/go.test.js +561 -0
- package/dist/src/analysis/adapters/__tests__/go.test.js.map +1 -0
- package/dist/src/analysis/adapters/__tests__/python.test.d.ts +11 -0
- package/dist/src/analysis/adapters/__tests__/python.test.d.ts.map +1 -0
- package/dist/src/analysis/adapters/__tests__/python.test.js +669 -0
- package/dist/src/analysis/adapters/__tests__/python.test.js.map +1 -0
- package/dist/src/analysis/adapters/__tests__/rust.test.d.ts +12 -0
- package/dist/src/analysis/adapters/__tests__/rust.test.d.ts.map +1 -0
- package/dist/src/analysis/adapters/__tests__/rust.test.js +676 -0
- package/dist/src/analysis/adapters/__tests__/rust.test.js.map +1 -0
- package/dist/src/analysis/adapters/__tests__/typescript.test.d.ts +14 -0
- package/dist/src/analysis/adapters/__tests__/typescript.test.d.ts.map +1 -0
- package/dist/src/analysis/adapters/__tests__/typescript.test.js +381 -0
- package/dist/src/analysis/adapters/__tests__/typescript.test.js.map +1 -0
- package/dist/src/analysis/adapters/base.d.ts +83 -0
- package/dist/src/analysis/adapters/base.d.ts.map +1 -0
- package/dist/src/analysis/adapters/base.js +40 -0
- package/dist/src/analysis/adapters/base.js.map +1 -0
- package/dist/src/analysis/adapters/factory.d.ts +150 -0
- package/dist/src/analysis/adapters/factory.d.ts.map +1 -0
- package/dist/src/analysis/adapters/factory.js +244 -0
- package/dist/src/analysis/adapters/factory.js.map +1 -0
- package/dist/src/analysis/adapters/go.d.ts +131 -0
- package/dist/src/analysis/adapters/go.d.ts.map +1 -0
- package/dist/src/analysis/adapters/go.js +414 -0
- package/dist/src/analysis/adapters/go.js.map +1 -0
- package/dist/src/analysis/adapters/index.d.ts +20 -0
- package/dist/src/analysis/adapters/index.d.ts.map +1 -0
- package/dist/src/analysis/adapters/index.js +23 -0
- package/dist/src/analysis/adapters/index.js.map +1 -0
- package/dist/src/analysis/adapters/java.d.ts +154 -0
- package/dist/src/analysis/adapters/java.d.ts.map +1 -0
- package/dist/src/analysis/adapters/java.js +407 -0
- package/dist/src/analysis/adapters/java.js.map +1 -0
- package/dist/src/analysis/adapters/python.d.ts +165 -0
- package/dist/src/analysis/adapters/python.d.ts.map +1 -0
- package/dist/src/analysis/adapters/python.js +475 -0
- package/dist/src/analysis/adapters/python.js.map +1 -0
- package/dist/src/analysis/adapters/rust.d.ts +116 -0
- package/dist/src/analysis/adapters/rust.d.ts.map +1 -0
- package/dist/src/analysis/adapters/rust.js +476 -0
- package/dist/src/analysis/adapters/rust.js.map +1 -0
- package/dist/src/analysis/adapters/typescript.d.ts +68 -0
- package/dist/src/analysis/adapters/typescript.d.ts.map +1 -0
- package/dist/src/analysis/adapters/typescript.js +79 -0
- package/dist/src/analysis/adapters/typescript.js.map +1 -0
- package/dist/src/analysis/aggregator.d.ts +193 -0
- package/dist/src/analysis/aggregator.d.ts.map +1 -0
- package/dist/src/analysis/aggregator.js +283 -0
- package/dist/src/analysis/aggregator.js.map +1 -0
- package/dist/src/analysis/cache.d.ts +180 -0
- package/dist/src/analysis/cache.d.ts.map +1 -0
- package/dist/src/analysis/cache.js +279 -0
- package/dist/src/analysis/cache.js.map +1 -0
- package/dist/src/analysis/file-streamer.d.ts +136 -0
- package/dist/src/analysis/file-streamer.d.ts.map +1 -0
- package/dist/src/analysis/file-streamer.js +291 -0
- package/dist/src/analysis/file-streamer.js.map +1 -0
- package/dist/src/analysis/framework-detector.d.ts +47 -0
- package/dist/src/analysis/framework-detector.d.ts.map +1 -0
- package/dist/src/analysis/framework-detector.js +151 -0
- package/dist/src/analysis/framework-detector.js.map +1 -0
- package/dist/src/analysis/incremental-parser.d.ts +186 -0
- package/dist/src/analysis/incremental-parser.d.ts.map +1 -0
- package/dist/src/analysis/incremental-parser.js +291 -0
- package/dist/src/analysis/incremental-parser.js.map +1 -0
- package/dist/src/analysis/incremental.d.ts +186 -0
- package/dist/src/analysis/incremental.d.ts.map +1 -0
- package/dist/src/analysis/incremental.js +247 -0
- package/dist/src/analysis/incremental.js.map +1 -0
- package/dist/src/analysis/index.d.ts +29 -2
- package/dist/src/analysis/index.d.ts.map +1 -1
- package/dist/src/analysis/index.js +53 -2
- package/dist/src/analysis/index.js.map +1 -1
- package/dist/src/analysis/language-detector.d.ts +92 -0
- package/dist/src/analysis/language-detector.d.ts.map +1 -0
- package/dist/src/analysis/language-detector.js +602 -0
- package/dist/src/analysis/language-detector.js.map +1 -0
- package/dist/src/analysis/memory-monitor.d.ts +199 -0
- package/dist/src/analysis/memory-monitor.d.ts.map +1 -0
- package/dist/src/analysis/memory-monitor.js +271 -0
- package/dist/src/analysis/memory-monitor.js.map +1 -0
- package/dist/src/analysis/metrics.d.ts +300 -0
- package/dist/src/analysis/metrics.d.ts.map +1 -0
- package/dist/src/analysis/metrics.js +537 -0
- package/dist/src/analysis/metrics.js.map +1 -0
- package/dist/src/analysis/parsers.d.ts +43 -0
- package/dist/src/analysis/parsers.d.ts.map +1 -0
- package/dist/src/analysis/parsers.js +219 -0
- package/dist/src/analysis/parsers.js.map +1 -0
- package/dist/src/analysis/router.d.ts +264 -0
- package/dist/src/analysis/router.d.ts.map +1 -0
- package/dist/src/analysis/router.js +398 -0
- package/dist/src/analysis/router.js.map +1 -0
- package/dist/src/analysis/tree-cache.d.ts +208 -0
- package/dist/src/analysis/tree-cache.d.ts.map +1 -0
- package/dist/src/analysis/tree-cache.js +288 -0
- package/dist/src/analysis/tree-cache.js.map +1 -0
- package/dist/src/analysis/tree-sitter/manager.d.ts +141 -0
- package/dist/src/analysis/tree-sitter/manager.d.ts.map +1 -0
- package/dist/src/analysis/tree-sitter/manager.js +239 -0
- package/dist/src/analysis/tree-sitter/manager.js.map +1 -0
- package/dist/src/analysis/types.d.ts +201 -0
- package/dist/src/analysis/types.d.ts.map +1 -0
- package/dist/src/analysis/types.js +46 -0
- package/dist/src/analysis/types.js.map +1 -0
- package/dist/src/analysis/worker-pool.d.ts +141 -0
- package/dist/src/analysis/worker-pool.d.ts.map +1 -0
- package/dist/src/analysis/worker-pool.js +418 -0
- package/dist/src/analysis/worker-pool.js.map +1 -0
- package/dist/src/analytics/AnalyticsRepository.d.ts.map +1 -1
- package/dist/src/analytics/AnalyticsRepository.js +4 -4
- package/dist/src/analytics/AnalyticsRepository.js.map +1 -1
- package/dist/src/analytics/schema.d.ts +1 -1
- package/dist/src/analytics/schema.d.ts.map +1 -1
- package/dist/src/analytics/schema.js +72 -0
- package/dist/src/analytics/schema.js.map +1 -1
- package/dist/src/api/cache.d.ts +131 -0
- package/dist/src/api/cache.d.ts.map +1 -0
- package/dist/src/api/cache.js +264 -0
- package/dist/src/api/cache.js.map +1 -0
- package/dist/src/api/client.d.ts +282 -0
- package/dist/src/api/client.d.ts.map +1 -0
- package/dist/src/api/client.js +417 -0
- package/dist/src/api/client.js.map +1 -0
- package/dist/src/api/index.d.ts +12 -0
- package/dist/src/api/index.d.ts.map +1 -0
- package/dist/src/api/index.js +17 -0
- package/dist/src/api/index.js.map +1 -0
- package/dist/src/api/types.d.ts +251 -0
- package/dist/src/api/types.d.ts.map +1 -0
- package/dist/src/api/types.js +9 -0
- package/dist/src/api/types.js.map +1 -0
- package/dist/src/benchmarks/BenchmarkRunner.d.ts +6 -175
- package/dist/src/benchmarks/BenchmarkRunner.d.ts.map +1 -1
- package/dist/src/benchmarks/BenchmarkRunner.js +6 -123
- package/dist/src/benchmarks/BenchmarkRunner.js.map +1 -1
- package/dist/src/benchmarks/MemoryProfiler.d.ts +4 -262
- package/dist/src/benchmarks/MemoryProfiler.d.ts.map +1 -1
- package/dist/src/benchmarks/MemoryProfiler.js +4 -400
- package/dist/src/benchmarks/MemoryProfiler.js.map +1 -1
- package/dist/src/benchmarks/comparator.d.ts +38 -0
- package/dist/src/benchmarks/comparator.d.ts.map +1 -0
- package/dist/src/benchmarks/comparator.js +81 -0
- package/dist/src/benchmarks/comparator.js.map +1 -0
- package/dist/src/benchmarks/formatters.d.ts +30 -0
- package/dist/src/benchmarks/formatters.d.ts.map +1 -0
- package/dist/src/benchmarks/formatters.js +88 -0
- package/dist/src/benchmarks/formatters.js.map +1 -0
- package/dist/src/benchmarks/index.d.ts +5 -1
- package/dist/src/benchmarks/index.d.ts.map +1 -1
- package/dist/src/benchmarks/index.js +9 -2
- package/dist/src/benchmarks/index.js.map +1 -1
- package/dist/src/benchmarks/memory/MemoryProfiler.d.ts +165 -0
- package/dist/src/benchmarks/memory/MemoryProfiler.d.ts.map +1 -0
- package/dist/src/benchmarks/memory/MemoryProfiler.js +312 -0
- package/dist/src/benchmarks/memory/MemoryProfiler.js.map +1 -0
- package/dist/src/benchmarks/memory/baseline-manager.d.ts +64 -0
- package/dist/src/benchmarks/memory/baseline-manager.d.ts.map +1 -0
- package/dist/src/benchmarks/memory/baseline-manager.js +95 -0
- package/dist/src/benchmarks/memory/baseline-manager.js.map +1 -0
- package/dist/src/benchmarks/memory/index.d.ts +12 -0
- package/dist/src/benchmarks/memory/index.d.ts.map +1 -0
- package/dist/src/benchmarks/memory/index.js +12 -0
- package/dist/src/benchmarks/memory/index.js.map +1 -0
- package/dist/src/benchmarks/memory/leak-detector.d.ts +23 -0
- package/dist/src/benchmarks/memory/leak-detector.d.ts.map +1 -0
- package/dist/src/benchmarks/memory/leak-detector.js +46 -0
- package/dist/src/benchmarks/memory/leak-detector.js.map +1 -0
- package/dist/src/benchmarks/memory/regression-detector.d.ts +17 -0
- package/dist/src/benchmarks/memory/regression-detector.d.ts.map +1 -0
- package/dist/src/benchmarks/memory/regression-detector.js +56 -0
- package/dist/src/benchmarks/memory/regression-detector.js.map +1 -0
- package/dist/src/benchmarks/memory/types.d.ts +111 -0
- package/dist/src/benchmarks/memory/types.d.ts.map +1 -0
- package/dist/src/benchmarks/memory/types.js +7 -0
- package/dist/src/benchmarks/memory/types.js.map +1 -0
- package/dist/src/benchmarks/memory/utils.d.ts +17 -0
- package/dist/src/benchmarks/memory/utils.d.ts.map +1 -0
- package/dist/src/benchmarks/memory/utils.js +29 -0
- package/dist/src/benchmarks/memory/utils.js.map +1 -0
- package/dist/src/benchmarks/types.d.ts +175 -0
- package/dist/src/benchmarks/types.d.ts.map +1 -0
- package/dist/src/benchmarks/types.js +20 -0
- package/dist/src/benchmarks/types.js.map +1 -0
- package/dist/src/embeddings/index.d.ts.map +1 -1
- package/dist/src/embeddings/index.js.map +1 -1
- package/dist/src/errors.d.ts +1 -0
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +1 -0
- package/dist/src/errors.js.map +1 -1
- package/dist/src/index.d.ts +5 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +8 -4
- package/dist/src/index.js.map +1 -1
- package/dist/src/repositories/IndexerRepository.d.ts.map +1 -1
- package/dist/src/repositories/IndexerRepository.js +1 -0
- package/dist/src/repositories/IndexerRepository.js.map +1 -1
- package/dist/src/repositories/QuarantineRepository.d.ts +4 -251
- package/dist/src/repositories/QuarantineRepository.d.ts.map +1 -1
- package/dist/src/repositories/QuarantineRepository.js +4 -441
- package/dist/src/repositories/QuarantineRepository.js.map +1 -1
- package/dist/src/repositories/SkillRepository.d.ts.map +1 -1
- package/dist/src/repositories/SkillRepository.js +1 -0
- package/dist/src/repositories/SkillRepository.js.map +1 -1
- package/dist/src/repositories/quarantine/QuarantineRepository.d.ts +168 -0
- package/dist/src/repositories/quarantine/QuarantineRepository.d.ts.map +1 -0
- package/dist/src/repositories/quarantine/QuarantineRepository.js +341 -0
- package/dist/src/repositories/quarantine/QuarantineRepository.js.map +1 -0
- package/dist/src/repositories/quarantine/index.d.ts +10 -0
- package/dist/src/repositories/quarantine/index.d.ts.map +1 -0
- package/dist/src/repositories/quarantine/index.js +10 -0
- package/dist/src/repositories/quarantine/index.js.map +1 -0
- package/dist/src/repositories/quarantine/queries.d.ts +58 -0
- package/dist/src/repositories/quarantine/queries.d.ts.map +1 -0
- package/dist/src/repositories/quarantine/queries.js +88 -0
- package/dist/src/repositories/quarantine/queries.js.map +1 -0
- package/dist/src/repositories/quarantine/query-builder.d.ts +44 -0
- package/dist/src/repositories/quarantine/query-builder.d.ts.map +1 -0
- package/dist/src/repositories/quarantine/query-builder.js +87 -0
- package/dist/src/repositories/quarantine/query-builder.js.map +1 -0
- package/dist/src/repositories/quarantine/types.d.ts +155 -0
- package/dist/src/repositories/quarantine/types.d.ts.map +1 -0
- package/dist/src/repositories/quarantine/types.js +13 -0
- package/dist/src/repositories/quarantine/types.js.map +1 -0
- package/dist/src/scripts/__tests__/scan-imported-skills.test.d.ts +1 -0
- package/dist/src/scripts/__tests__/scan-imported-skills.test.d.ts.map +1 -1
- package/dist/src/scripts/__tests__/scan-imported-skills.test.js +7 -43
- package/dist/src/scripts/__tests__/scan-imported-skills.test.js.map +1 -1
- package/dist/src/scripts/github-import/checkpoint.d.ts +21 -0
- package/dist/src/scripts/github-import/checkpoint.d.ts.map +1 -0
- package/dist/src/scripts/github-import/checkpoint.js +52 -0
- package/dist/src/scripts/github-import/checkpoint.js.map +1 -0
- package/dist/src/scripts/github-import/deduplication.d.ts +15 -0
- package/dist/src/scripts/github-import/deduplication.d.ts.map +1 -0
- package/dist/src/scripts/github-import/deduplication.js +33 -0
- package/dist/src/scripts/github-import/deduplication.js.map +1 -0
- package/dist/src/scripts/github-import/github-client.d.ts +29 -0
- package/dist/src/scripts/github-import/github-client.d.ts.map +1 -0
- package/dist/src/scripts/github-import/github-client.js +184 -0
- package/dist/src/scripts/github-import/github-client.js.map +1 -0
- package/dist/src/scripts/github-import/index.d.ts +29 -0
- package/dist/src/scripts/github-import/index.d.ts.map +1 -0
- package/dist/src/scripts/github-import/index.js +198 -0
- package/dist/src/scripts/github-import/index.js.map +1 -0
- package/dist/src/scripts/github-import/output.d.ts +12 -0
- package/dist/src/scripts/github-import/output.d.ts.map +1 -0
- package/dist/src/scripts/github-import/output.js +34 -0
- package/dist/src/scripts/github-import/output.js.map +1 -0
- package/dist/src/scripts/github-import/types.d.ts +108 -0
- package/dist/src/scripts/github-import/types.d.ts.map +1 -0
- package/dist/src/scripts/github-import/types.js +44 -0
- package/dist/src/scripts/github-import/types.js.map +1 -0
- package/dist/src/scripts/github-import/utils.d.ts +13 -0
- package/dist/src/scripts/github-import/utils.d.ts.map +1 -0
- package/dist/src/scripts/github-import/utils.js +28 -0
- package/dist/src/scripts/github-import/utils.js.map +1 -0
- package/dist/src/scripts/import-github-skills.d.ts +3 -12
- package/dist/src/scripts/import-github-skills.d.ts.map +1 -1
- package/dist/src/scripts/import-github-skills.js +18 -398
- package/dist/src/scripts/import-github-skills.js.map +1 -1
- package/dist/src/scripts/scan-imported-skills.d.ts +7 -7
- package/dist/src/scripts/scan-imported-skills.d.ts.map +1 -1
- package/dist/src/scripts/scan-imported-skills.js +8 -397
- package/dist/src/scripts/scan-imported-skills.js.map +1 -1
- package/dist/src/scripts/skill-scanner/categorizer.d.ts +43 -0
- package/dist/src/scripts/skill-scanner/categorizer.d.ts.map +1 -0
- package/dist/src/scripts/skill-scanner/categorizer.js +61 -0
- package/dist/src/scripts/skill-scanner/categorizer.js.map +1 -0
- package/dist/src/scripts/skill-scanner/file-scanner.d.ts +43 -0
- package/dist/src/scripts/skill-scanner/file-scanner.d.ts.map +1 -0
- package/dist/src/scripts/skill-scanner/file-scanner.js +90 -0
- package/dist/src/scripts/skill-scanner/file-scanner.js.map +1 -0
- package/dist/src/scripts/skill-scanner/index.d.ts +22 -0
- package/dist/src/scripts/skill-scanner/index.d.ts.map +1 -0
- package/dist/src/scripts/skill-scanner/index.js +43 -0
- package/dist/src/scripts/skill-scanner/index.js.map +1 -0
- package/dist/src/scripts/skill-scanner/logger.d.ts +59 -0
- package/dist/src/scripts/skill-scanner/logger.d.ts.map +1 -0
- package/dist/src/scripts/skill-scanner/logger.js +104 -0
- package/dist/src/scripts/skill-scanner/logger.js.map +1 -0
- package/dist/src/scripts/skill-scanner/reporter.d.ts +56 -0
- package/dist/src/scripts/skill-scanner/reporter.d.ts.map +1 -0
- package/dist/src/scripts/skill-scanner/reporter.js +166 -0
- package/dist/src/scripts/skill-scanner/reporter.js.map +1 -0
- package/dist/src/scripts/skill-scanner/scanner.d.ts +44 -0
- package/dist/src/scripts/skill-scanner/scanner.d.ts.map +1 -0
- package/dist/src/scripts/skill-scanner/scanner.js +140 -0
- package/dist/src/scripts/skill-scanner/scanner.js.map +1 -0
- package/dist/src/scripts/skill-scanner/trust-scorer.d.ts +59 -0
- package/dist/src/scripts/skill-scanner/trust-scorer.d.ts.map +1 -0
- package/dist/src/scripts/skill-scanner/trust-scorer.js +62 -0
- package/dist/src/scripts/skill-scanner/trust-scorer.js.map +1 -0
- package/dist/src/scripts/skill-scanner/types.d.ts +98 -0
- package/dist/src/scripts/skill-scanner/types.d.ts.map +1 -0
- package/dist/src/scripts/skill-scanner/types.js +7 -0
- package/dist/src/scripts/skill-scanner/types.js.map +1 -0
- package/dist/src/scripts/validate-skills.d.ts +3 -172
- package/dist/src/scripts/validate-skills.d.ts.map +1 -1
- package/dist/src/scripts/validate-skills.js +6 -519
- package/dist/src/scripts/validate-skills.js.map +1 -1
- package/dist/src/scripts/validation/deduplication.d.ts +23 -0
- package/dist/src/scripts/validation/deduplication.d.ts.map +1 -0
- package/dist/src/scripts/validation/deduplication.js +127 -0
- package/dist/src/scripts/validation/deduplication.js.map +1 -0
- package/dist/src/scripts/validation/field-validators.d.ts +9 -0
- package/dist/src/scripts/validation/field-validators.d.ts.map +1 -0
- package/dist/src/scripts/validation/field-validators.js +135 -0
- package/dist/src/scripts/validation/field-validators.js.map +1 -0
- package/dist/src/scripts/validation/index.d.ts +29 -0
- package/dist/src/scripts/validation/index.d.ts.map +1 -0
- package/dist/src/scripts/validation/index.js +83 -0
- package/dist/src/scripts/validation/index.js.map +1 -0
- package/dist/src/scripts/validation/normalizers.d.ts +29 -0
- package/dist/src/scripts/validation/normalizers.d.ts.map +1 -0
- package/dist/src/scripts/validation/normalizers.js +79 -0
- package/dist/src/scripts/validation/normalizers.js.map +1 -0
- package/dist/src/scripts/validation/pipeline.d.ts +13 -0
- package/dist/src/scripts/validation/pipeline.d.ts.map +1 -0
- package/dist/src/scripts/validation/pipeline.js +126 -0
- package/dist/src/scripts/validation/pipeline.js.map +1 -0
- package/dist/src/scripts/validation/types.d.ts +128 -0
- package/dist/src/scripts/validation/types.d.ts.map +1 -0
- package/dist/src/scripts/validation/types.js +43 -0
- package/dist/src/scripts/validation/types.js.map +1 -0
- package/dist/src/security/index.d.ts +5 -4
- package/dist/src/security/index.d.ts.map +1 -1
- package/dist/src/security/index.js +8 -2
- package/dist/src/security/index.js.map +1 -1
- package/dist/src/security/rate-limiter/RateLimiter.d.ts +86 -0
- package/dist/src/security/rate-limiter/RateLimiter.d.ts.map +1 -0
- package/dist/src/security/rate-limiter/RateLimiter.js +260 -0
- package/dist/src/security/rate-limiter/RateLimiter.js.map +1 -0
- package/dist/src/security/rate-limiter/constants.d.ts +15 -0
- package/dist/src/security/rate-limiter/constants.d.ts.map +1 -0
- package/dist/src/security/rate-limiter/constants.js +15 -0
- package/dist/src/security/rate-limiter/constants.js.map +1 -0
- package/dist/src/security/rate-limiter/errors.d.ts +22 -0
- package/dist/src/security/rate-limiter/errors.d.ts.map +1 -0
- package/dist/src/security/rate-limiter/errors.js +32 -0
- package/dist/src/security/rate-limiter/errors.js.map +1 -0
- package/dist/src/security/rate-limiter/index.d.ts +12 -0
- package/dist/src/security/rate-limiter/index.d.ts.map +1 -0
- package/dist/src/security/rate-limiter/index.js +16 -0
- package/dist/src/security/rate-limiter/index.js.map +1 -0
- package/dist/src/security/rate-limiter/metrics-manager.d.ts +55 -0
- package/dist/src/security/rate-limiter/metrics-manager.d.ts.map +1 -0
- package/dist/src/security/rate-limiter/metrics-manager.js +144 -0
- package/dist/src/security/rate-limiter/metrics-manager.js.map +1 -0
- package/dist/src/security/rate-limiter/presets.d.ts +52 -0
- package/dist/src/security/rate-limiter/presets.d.ts.map +1 -0
- package/dist/src/security/rate-limiter/presets.js +53 -0
- package/dist/src/security/rate-limiter/presets.js.map +1 -0
- package/dist/src/security/rate-limiter/queue-manager.d.ts +59 -0
- package/dist/src/security/rate-limiter/queue-manager.d.ts.map +1 -0
- package/dist/src/security/rate-limiter/queue-manager.js +189 -0
- package/dist/src/security/rate-limiter/queue-manager.js.map +1 -0
- package/dist/src/security/rate-limiter/storage.d.ts +34 -0
- package/dist/src/security/rate-limiter/storage.d.ts.map +1 -0
- package/dist/src/security/rate-limiter/storage.js +80 -0
- package/dist/src/security/rate-limiter/storage.js.map +1 -0
- package/dist/src/security/rate-limiter/token-bucket.d.ts +44 -0
- package/dist/src/security/rate-limiter/token-bucket.d.ts.map +1 -0
- package/dist/src/security/rate-limiter/token-bucket.js +99 -0
- package/dist/src/security/rate-limiter/token-bucket.js.map +1 -0
- package/dist/src/security/rate-limiter/types.d.ts +104 -0
- package/dist/src/security/rate-limiter/types.d.ts.map +1 -0
- package/dist/src/security/rate-limiter/types.js +7 -0
- package/dist/src/security/rate-limiter/types.js.map +1 -0
- package/dist/src/security/{scanner.d.ts → scanner/SecurityScanner.d.ts} +5 -62
- package/dist/src/security/scanner/SecurityScanner.d.ts.map +1 -0
- package/dist/src/security/{scanner.js → scanner/SecurityScanner.js} +6 -202
- package/dist/src/security/scanner/SecurityScanner.js.map +1 -0
- package/dist/src/security/scanner/index.d.ts +11 -0
- package/dist/src/security/scanner/index.d.ts.map +1 -0
- package/dist/src/security/scanner/index.js +14 -0
- package/dist/src/security/scanner/index.js.map +1 -0
- package/dist/src/security/scanner/patterns.d.ts +14 -0
- package/dist/src/security/scanner/patterns.d.ts.map +1 -0
- package/dist/src/security/scanner/patterns.js +147 -0
- package/dist/src/security/scanner/patterns.js.map +1 -0
- package/dist/src/security/scanner/regex-utils.d.ts +33 -0
- package/dist/src/security/scanner/regex-utils.d.ts.map +1 -0
- package/dist/src/security/scanner/regex-utils.js +41 -0
- package/dist/src/security/scanner/regex-utils.js.map +1 -0
- package/dist/src/security/scanner/types.d.ts +63 -0
- package/dist/src/security/scanner/types.d.ts.map +1 -0
- package/dist/src/security/scanner/types.js +7 -0
- package/dist/src/security/scanner/types.js.map +1 -0
- package/dist/src/security/scanner/weights.d.ts +15 -0
- package/dist/src/security/scanner/weights.d.ts.map +1 -0
- package/dist/src/security/scanner/weights.js +28 -0
- package/dist/src/security/scanner/weights.js.map +1 -0
- package/dist/src/services/SearchService.d.ts.map +1 -1
- package/dist/src/services/SearchService.js +1 -0
- package/dist/src/services/SearchService.js.map +1 -1
- package/dist/src/session/SessionHealthMonitor.d.ts +5 -168
- package/dist/src/session/SessionHealthMonitor.d.ts.map +1 -1
- package/dist/src/session/SessionHealthMonitor.js +22 -91
- package/dist/src/session/SessionHealthMonitor.js.map +1 -1
- package/dist/src/session/health-checks.d.ts +37 -0
- package/dist/src/session/health-checks.d.ts.map +1 -0
- package/dist/src/session/health-checks.js +64 -0
- package/dist/src/session/health-checks.js.map +1 -0
- package/dist/src/session/health-types.d.ts +78 -0
- package/dist/src/session/health-types.d.ts.map +1 -0
- package/dist/src/session/health-types.js +16 -0
- package/dist/src/session/health-types.js.map +1 -0
- package/dist/src/session/index.d.ts +5 -1
- package/dist/src/session/index.d.ts.map +1 -1
- package/dist/src/session/index.js +9 -0
- package/dist/src/session/index.js.map +1 -1
- package/dist/src/session/metrics-collector.d.ts +23 -0
- package/dist/src/session/metrics-collector.d.ts.map +1 -0
- package/dist/src/session/metrics-collector.js +44 -0
- package/dist/src/session/metrics-collector.js.map +1 -0
- package/dist/src/session/typed-event-emitter.d.ts +70 -0
- package/dist/src/session/typed-event-emitter.d.ts.map +1 -0
- package/dist/src/session/typed-event-emitter.js +79 -0
- package/dist/src/session/typed-event-emitter.js.map +1 -0
- package/dist/src/sources/BaseSourceAdapter.d.ts +1 -1
- package/dist/src/sources/BaseSourceAdapter.d.ts.map +1 -1
- package/dist/src/sources/BaseSourceAdapter.js +2 -2
- package/dist/src/sources/BaseSourceAdapter.js.map +1 -1
- package/dist/src/telemetry/index.d.ts +1 -0
- package/dist/src/telemetry/index.d.ts.map +1 -1
- package/dist/src/telemetry/index.js +2 -0
- package/dist/src/telemetry/index.js.map +1 -1
- package/dist/src/telemetry/posthog.d.ts +147 -0
- package/dist/src/telemetry/posthog.d.ts.map +1 -0
- package/dist/src/telemetry/posthog.js +213 -0
- package/dist/src/telemetry/posthog.js.map +1 -0
- package/dist/src/types/skill.d.ts +3 -0
- package/dist/src/types/skill.d.ts.map +1 -1
- package/dist/src/types.d.ts +2 -1
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +2 -2
- package/dist/src/types.js.map +1 -1
- package/dist/tests/RateLimiter.test.js +4 -4
- package/dist/tests/RateLimiter.test.js.map +1 -1
- package/dist/tests/adapters-factory.test.d.ts +13 -0
- package/dist/tests/adapters-factory.test.d.ts.map +1 -0
- package/dist/tests/adapters-factory.test.js +308 -0
- package/dist/tests/adapters-factory.test.js.map +1 -0
- package/dist/tests/adapters-java.test.d.ts +13 -0
- package/dist/tests/adapters-java.test.d.ts.map +1 -0
- package/dist/tests/adapters-java.test.js +925 -0
- package/dist/tests/adapters-java.test.js.map +1 -0
- package/dist/tests/api/client.validation.test.d.ts +7 -0
- package/dist/tests/api/client.validation.test.d.ts.map +1 -0
- package/dist/tests/api/client.validation.test.js +183 -0
- package/dist/tests/api/client.validation.test.js.map +1 -0
- package/dist/tests/e2e/security/security.e2e.test.js +3 -3
- package/dist/tests/e2e/security/security.e2e.test.js.map +1 -1
- package/dist/tests/language-detector.test.d.ts +13 -0
- package/dist/tests/language-detector.test.d.ts.map +1 -0
- package/dist/tests/language-detector.test.js +674 -0
- package/dist/tests/language-detector.test.js.map +1 -0
- package/dist/tests/telemetry/posthog.test.d.ts +13 -0
- package/dist/tests/telemetry/posthog.test.d.ts.map +1 -0
- package/dist/tests/telemetry/posthog.test.js +600 -0
- package/dist/tests/telemetry/posthog.test.js.map +1 -0
- package/package.json +5 -5
- package/dist/src/security/RateLimiter.d.ts +0 -337
- package/dist/src/security/RateLimiter.d.ts.map +0 -1
- package/dist/src/security/RateLimiter.js +0 -782
- package/dist/src/security/RateLimiter.js.map +0 -1
- package/dist/src/security/scanner.d.ts.map +0 -1
- package/dist/src/security/scanner.js.map +0 -1
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Types matching OpenAPI specification
|
|
3
|
+
* @module api/types
|
|
4
|
+
*
|
|
5
|
+
* These types are aligned with docs/api/openapi.yaml for type-safe API interactions.
|
|
6
|
+
* Uses snake_case for API wire format compatibility.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Trust tier levels from API
|
|
10
|
+
*/
|
|
11
|
+
export type ApiTrustTier = 'verified' | 'community' | 'experimental' | 'unknown';
|
|
12
|
+
/**
|
|
13
|
+
* Skill category filter values
|
|
14
|
+
*/
|
|
15
|
+
export type ApiCategory = 'Development' | 'Testing' | 'DevOps' | 'Documentation' | 'Productivity' | 'Security';
|
|
16
|
+
/**
|
|
17
|
+
* Project type for recommendations
|
|
18
|
+
*/
|
|
19
|
+
export type ApiProjectType = 'web' | 'api' | 'cli' | 'mobile' | 'data' | 'ml';
|
|
20
|
+
/**
|
|
21
|
+
* Skill entity from API
|
|
22
|
+
*
|
|
23
|
+
* Represents a skill record with all properties.
|
|
24
|
+
* Uses snake_case to match API wire format.
|
|
25
|
+
*/
|
|
26
|
+
export interface ApiSkill {
|
|
27
|
+
/** Unique skill identifier (UUID) */
|
|
28
|
+
id: string;
|
|
29
|
+
/** Skill name */
|
|
30
|
+
name: string;
|
|
31
|
+
/** Skill description */
|
|
32
|
+
description: string | null;
|
|
33
|
+
/** Skill author */
|
|
34
|
+
author: string | null;
|
|
35
|
+
/** Source repository URL */
|
|
36
|
+
repo_url: string | null;
|
|
37
|
+
/** Quality score (0-1 scale) */
|
|
38
|
+
quality_score: number | null;
|
|
39
|
+
/** Trust level */
|
|
40
|
+
trust_tier: ApiTrustTier;
|
|
41
|
+
/** Tags for categorization */
|
|
42
|
+
tags: string[];
|
|
43
|
+
/** GitHub stars count */
|
|
44
|
+
stars: number | null;
|
|
45
|
+
/** Creation timestamp (ISO 8601) */
|
|
46
|
+
created_at: string;
|
|
47
|
+
/** Last update timestamp (ISO 8601) */
|
|
48
|
+
updated_at: string;
|
|
49
|
+
/** Associated category names */
|
|
50
|
+
categories?: string[];
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Search result from API (Skill with rank)
|
|
54
|
+
*/
|
|
55
|
+
export interface ApiSearchResult extends ApiSkill {
|
|
56
|
+
/** Search relevance rank */
|
|
57
|
+
rank?: number;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Search parameters for skills-search endpoint
|
|
61
|
+
*/
|
|
62
|
+
export interface SearchParams {
|
|
63
|
+
/** Search query (minimum 2 characters) */
|
|
64
|
+
query: string;
|
|
65
|
+
/** Filter by category name */
|
|
66
|
+
category?: ApiCategory;
|
|
67
|
+
/** Filter by trust level */
|
|
68
|
+
trust_tier?: ApiTrustTier;
|
|
69
|
+
/** Minimum quality score (0-100) */
|
|
70
|
+
min_score?: number;
|
|
71
|
+
/** Maximum results to return (default 20, max 100) */
|
|
72
|
+
limit?: number;
|
|
73
|
+
/** Pagination offset (default 0) */
|
|
74
|
+
offset?: number;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Search response metadata
|
|
78
|
+
*/
|
|
79
|
+
export interface SearchResponseMeta {
|
|
80
|
+
/** Original search query */
|
|
81
|
+
query: string;
|
|
82
|
+
/** Total matching results */
|
|
83
|
+
total: number;
|
|
84
|
+
/** Results limit */
|
|
85
|
+
limit: number;
|
|
86
|
+
/** Pagination offset */
|
|
87
|
+
offset: number;
|
|
88
|
+
/** Applied filters */
|
|
89
|
+
filters: {
|
|
90
|
+
category: string | null;
|
|
91
|
+
trust_tier: string | null;
|
|
92
|
+
min_score: number | null;
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Search response from API
|
|
97
|
+
*/
|
|
98
|
+
export interface SearchResponse {
|
|
99
|
+
/** Search results */
|
|
100
|
+
data: ApiSearchResult[];
|
|
101
|
+
/** Response metadata */
|
|
102
|
+
meta: SearchResponseMeta;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Recommended skill with relevance score
|
|
106
|
+
*/
|
|
107
|
+
export interface RecommendedSkill extends ApiSkill {
|
|
108
|
+
/** Relevance score for the given stack */
|
|
109
|
+
relevance_score?: number;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Recommendation request parameters
|
|
113
|
+
*/
|
|
114
|
+
export interface RecommendParams {
|
|
115
|
+
/** Technology stack (1-10 items) */
|
|
116
|
+
stack: string[];
|
|
117
|
+
/** Type of project */
|
|
118
|
+
project_type?: ApiProjectType;
|
|
119
|
+
/** Maximum recommendations (default 10, max 50) */
|
|
120
|
+
limit?: number;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Recommendation response metadata
|
|
124
|
+
*/
|
|
125
|
+
export interface RecommendResponseMeta {
|
|
126
|
+
/** Technology stack from request */
|
|
127
|
+
stack: string[];
|
|
128
|
+
/** Project type from request */
|
|
129
|
+
project_type: string | null;
|
|
130
|
+
/** Total recommendations */
|
|
131
|
+
total: number;
|
|
132
|
+
/** Results limit */
|
|
133
|
+
limit: number;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Recommendation response from API
|
|
137
|
+
*/
|
|
138
|
+
export interface RecommendResponse {
|
|
139
|
+
/** Recommended skills */
|
|
140
|
+
data: RecommendedSkill[];
|
|
141
|
+
/** Response metadata */
|
|
142
|
+
meta: RecommendResponseMeta;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Get skill response from API
|
|
146
|
+
*/
|
|
147
|
+
export interface SkillResponse {
|
|
148
|
+
/** Skill data */
|
|
149
|
+
data: ApiSkill;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Health status response
|
|
153
|
+
*/
|
|
154
|
+
export interface HealthStatus {
|
|
155
|
+
/** Service status */
|
|
156
|
+
status: 'healthy' | 'degraded' | 'unhealthy';
|
|
157
|
+
/** Status timestamp (ISO 8601) */
|
|
158
|
+
timestamp: string;
|
|
159
|
+
/** API version */
|
|
160
|
+
version: string;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Telemetry event types
|
|
164
|
+
*/
|
|
165
|
+
export type TelemetryEventType = 'skill_view' | 'skill_install' | 'skill_uninstall' | 'skill_rate' | 'search' | 'recommend' | 'compare' | 'validate';
|
|
166
|
+
/**
|
|
167
|
+
* Telemetry event metadata
|
|
168
|
+
*/
|
|
169
|
+
export interface TelemetryMetadata {
|
|
170
|
+
/** Search query */
|
|
171
|
+
query?: string;
|
|
172
|
+
/** Number of results */
|
|
173
|
+
results_count?: number;
|
|
174
|
+
/** Operation duration in ms */
|
|
175
|
+
duration_ms?: number;
|
|
176
|
+
/** Client version */
|
|
177
|
+
version?: string;
|
|
178
|
+
/** Client platform */
|
|
179
|
+
platform?: string;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Telemetry event payload
|
|
183
|
+
*/
|
|
184
|
+
export interface TelemetryEventPayload {
|
|
185
|
+
/** Event type */
|
|
186
|
+
event: TelemetryEventType;
|
|
187
|
+
/** Associated skill ID */
|
|
188
|
+
skill_id?: string;
|
|
189
|
+
/** Anonymous client identifier (hex string) */
|
|
190
|
+
anonymous_id: string;
|
|
191
|
+
/** Optional event metadata */
|
|
192
|
+
metadata?: TelemetryMetadata;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Telemetry response
|
|
196
|
+
*/
|
|
197
|
+
export interface TelemetryResponse {
|
|
198
|
+
/** Success indicator */
|
|
199
|
+
ok: boolean;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* API error response
|
|
203
|
+
*/
|
|
204
|
+
export interface ApiErrorResponse {
|
|
205
|
+
/** Error message */
|
|
206
|
+
error: string;
|
|
207
|
+
/** Additional error details */
|
|
208
|
+
details?: Record<string, unknown>;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Rate limit information from response headers
|
|
212
|
+
*/
|
|
213
|
+
export interface RateLimitInfo {
|
|
214
|
+
/** Maximum requests per minute */
|
|
215
|
+
limit: number;
|
|
216
|
+
/** Remaining requests in current window */
|
|
217
|
+
remaining: number;
|
|
218
|
+
/** Unix timestamp when limit resets */
|
|
219
|
+
reset: number;
|
|
220
|
+
/** Request tracking ID */
|
|
221
|
+
requestId?: string;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* API client configuration options
|
|
225
|
+
*/
|
|
226
|
+
export interface ApiClientOptions {
|
|
227
|
+
/** Base URL for API (default: https://api.skillsmith.app) */
|
|
228
|
+
baseUrl?: string;
|
|
229
|
+
/** Request timeout in ms (default: 10000) */
|
|
230
|
+
timeout?: number;
|
|
231
|
+
/** Cache TTL in ms (default: 86400000 - 24h) */
|
|
232
|
+
cacheTtl?: number;
|
|
233
|
+
/** Enable offline mode */
|
|
234
|
+
offlineMode?: boolean;
|
|
235
|
+
/** Supabase anon key for authentication */
|
|
236
|
+
anonKey?: string;
|
|
237
|
+
/** Max retry attempts (default: 3) */
|
|
238
|
+
maxRetries?: number;
|
|
239
|
+
/** Enable debug logging */
|
|
240
|
+
debug?: boolean;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Generic API response wrapper
|
|
244
|
+
*/
|
|
245
|
+
export interface ApiResponse<T> {
|
|
246
|
+
/** Response data */
|
|
247
|
+
data: T;
|
|
248
|
+
/** Response metadata */
|
|
249
|
+
meta?: Record<string, unknown>;
|
|
250
|
+
}
|
|
251
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/api/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Types matching OpenAPI specification
|
|
3
|
+
* @module api/types
|
|
4
|
+
*
|
|
5
|
+
* These types are aligned with docs/api/openapi.yaml for type-safe API interactions.
|
|
6
|
+
* Uses snake_case for API wire format compatibility.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/api/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* SMI-632: BenchmarkRunner - Performance benchmark infrastructure
|
|
3
3
|
* SMI-689: Enhanced with MemoryProfiler integration
|
|
4
|
+
* SMI-1189: Refactored to use extracted modules
|
|
4
5
|
*
|
|
5
6
|
* Features:
|
|
6
7
|
* - Run benchmark suites
|
|
@@ -10,143 +11,11 @@
|
|
|
10
11
|
* - Warm-up runs before measurement
|
|
11
12
|
* - Statistical analysis (mean, stddev)
|
|
12
13
|
*/
|
|
13
|
-
import { MemoryProfiler, type MemoryBaseline
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
export
|
|
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
|
-
}
|
|
14
|
+
import { MemoryProfiler, type MemoryBaseline } from './MemoryProfiler.js';
|
|
15
|
+
import { type BenchmarkConfig, type BenchmarkResult, type BenchmarkReport, type BenchmarkDefinition } from './types.js';
|
|
16
|
+
export type { BenchmarkConfig, BenchmarkResult, BenchmarkStats, BenchmarkReport, BenchmarkDefinition, BenchmarkFn, EnvironmentInfo, MemoryStats, DetailedMemoryStats, MemoryRegressionInfo, ComparisonResult, MetricComparison, } from './types.js';
|
|
17
|
+
export { formatReportAsJson, formatReportAsText, formatBytes } from './formatters.js';
|
|
18
|
+
export { compareReports, hasRegressions, getRegressedBenchmarks, getImprovedBenchmarks, } from './comparator.js';
|
|
150
19
|
/**
|
|
151
20
|
* Core benchmark runner for performance testing
|
|
152
21
|
*/
|
|
@@ -217,42 +86,4 @@ export declare class BenchmarkRunner {
|
|
|
217
86
|
*/
|
|
218
87
|
getMemoryReport(): string;
|
|
219
88
|
}
|
|
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
89
|
//# sourceMappingURL=BenchmarkRunner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BenchmarkRunner.d.ts","sourceRoot":"","sources":["../../../src/benchmarks/BenchmarkRunner.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"BenchmarkRunner.d.ts","sourceRoot":"","sources":["../../../src/benchmarks/BenchmarkRunner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,EACL,cAAc,EACd,KAAK,cAAc,EAEpB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,eAAe,EAEpB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EAIzB,MAAM,YAAY,CAAA;AAGnB,YAAY,EACV,eAAe,EACf,eAAe,EACf,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,WAAW,EACX,eAAe,EACf,WAAW,EACX,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,YAAY,CAAA;AAGnB,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AACrF,OAAO,EACL,cAAc,EACd,cAAc,EACd,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,iBAAiB,CAAA;AAExB;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,OAAO,CAAwB;IACvC,wCAAwC;IACxC,OAAO,CAAC,cAAc,CAA8B;gBAExC,MAAM,GAAE,eAAoB;IAYxC;;OAEG;IACH,iBAAiB,IAAI,cAAc,GAAG,IAAI;IAI1C;;OAEG;IACH,GAAG,CAAC,UAAU,EAAE,mBAAmB,GAAG,IAAI;IAK1C;;OAEG;IACG,GAAG,IAAI,OAAO,CAAC,eAAe,CAAC;IA4BrC;;OAEG;YACW,YAAY;IAgF1B;;OAEG;IACH,OAAO,CAAC,cAAc;IAiEtB;;;;OAIG;IACH,OAAO,CAAC,cAAc;IA4CtB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAMzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAY1B;;OAEG;IACH,OAAO,CAAC,QAAQ;IAchB;;OAEG;IACH,OAAO,CAAC,OAAO;IAMf;;OAEG;IACH,UAAU,IAAI,eAAe,EAAE;IAI/B;;OAEG;IACH,KAAK,IAAI,IAAI;IAQb;;OAEG;IACH,oBAAoB,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,IAAI;IAQtE;;OAEG;IACH,eAAe,IAAI,MAAM;CAM1B"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* SMI-632: BenchmarkRunner - Performance benchmark infrastructure
|
|
3
3
|
* SMI-689: Enhanced with MemoryProfiler integration
|
|
4
|
+
* SMI-1189: Refactored to use extracted modules
|
|
4
5
|
*
|
|
5
6
|
* Features:
|
|
6
7
|
* - Run benchmark suites
|
|
@@ -14,15 +15,10 @@ import * as os from 'os';
|
|
|
14
15
|
import * as fs from 'fs';
|
|
15
16
|
import { percentile, sampleStddev, mean } from './stats.js';
|
|
16
17
|
import { MemoryProfiler, } from './MemoryProfiler.js';
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
suiteName: 'default',
|
|
22
|
-
enableMemoryProfiler: false,
|
|
23
|
-
memoryRegressionThreshold: 10,
|
|
24
|
-
memoryBaselines: {},
|
|
25
|
-
};
|
|
18
|
+
import { DEFAULT_CONFIG, } from './types.js';
|
|
19
|
+
// Re-export formatters and comparator for backwards compatibility
|
|
20
|
+
export { formatReportAsJson, formatReportAsText, formatBytes } from './formatters.js';
|
|
21
|
+
export { compareReports, hasRegressions, getRegressedBenchmarks, getImprovedBenchmarks, } from './comparator.js';
|
|
26
22
|
/**
|
|
27
23
|
* Core benchmark runner for performance testing
|
|
28
24
|
*/
|
|
@@ -98,7 +94,7 @@ export class BenchmarkRunner {
|
|
|
98
94
|
try {
|
|
99
95
|
await definition.fn();
|
|
100
96
|
}
|
|
101
|
-
catch (
|
|
97
|
+
catch (_err) {
|
|
102
98
|
// Ignore warmup errors, just continue
|
|
103
99
|
}
|
|
104
100
|
}
|
|
@@ -337,117 +333,4 @@ export class BenchmarkRunner {
|
|
|
337
333
|
return this.memoryProfiler.formatMemoryReport();
|
|
338
334
|
}
|
|
339
335
|
}
|
|
340
|
-
/**
|
|
341
|
-
* Format a benchmark report as JSON for CI integration
|
|
342
|
-
*/
|
|
343
|
-
export function formatReportAsJson(report) {
|
|
344
|
-
return JSON.stringify(report, null, 2);
|
|
345
|
-
}
|
|
346
|
-
/**
|
|
347
|
-
* Format a benchmark report as human-readable text
|
|
348
|
-
*/
|
|
349
|
-
export function formatReportAsText(report) {
|
|
350
|
-
const lines = [
|
|
351
|
-
`Benchmark Report: ${report.suite}`,
|
|
352
|
-
`Timestamp: ${report.timestamp}`,
|
|
353
|
-
`Environment: Node ${report.environment.node} on ${report.environment.platform}/${report.environment.arch}`,
|
|
354
|
-
`Docker: ${report.environment.docker ? 'Yes' : 'No'}`,
|
|
355
|
-
'',
|
|
356
|
-
'Results:',
|
|
357
|
-
'-'.repeat(80),
|
|
358
|
-
];
|
|
359
|
-
for (const [name, stats] of Object.entries(report.results)) {
|
|
360
|
-
lines.push(` ${name}:`);
|
|
361
|
-
lines.push(` Iterations: ${stats.iterations}`);
|
|
362
|
-
lines.push(` p50: ${stats.p50_ms}ms, p95: ${stats.p95_ms}ms, p99: ${stats.p99_ms}ms`);
|
|
363
|
-
lines.push(` Mean: ${stats.mean_ms}ms, StdDev: ${stats.stddev_ms}ms`);
|
|
364
|
-
lines.push(` Min: ${stats.min_ms}ms, Max: ${stats.max_ms}ms`);
|
|
365
|
-
if (stats.memoryPeak_mb !== undefined) {
|
|
366
|
-
lines.push(` Memory Peak: ${stats.memoryPeak_mb}MB`);
|
|
367
|
-
}
|
|
368
|
-
// SMI-689: Add detailed memory profile if available
|
|
369
|
-
if (report.memoryProfile?.[name]) {
|
|
370
|
-
const mp = report.memoryProfile[name];
|
|
371
|
-
lines.push(` Memory Profile:`);
|
|
372
|
-
lines.push(` Heap Growth: ${formatBytes(mp.heapGrowth)} (${mp.heapGrowthPercent.toFixed(1)}%)`);
|
|
373
|
-
lines.push(` Peak Heap: ${formatBytes(mp.peakHeapSize)}`);
|
|
374
|
-
lines.push(` Samples: ${mp.sampleCount}`);
|
|
375
|
-
}
|
|
376
|
-
lines.push('');
|
|
377
|
-
}
|
|
378
|
-
lines.push('-'.repeat(80));
|
|
379
|
-
lines.push(`Summary:`);
|
|
380
|
-
lines.push(` Total Benchmarks: ${report.summary.totalBenchmarks}`);
|
|
381
|
-
lines.push(` Total Iterations: ${report.summary.totalIterations}`);
|
|
382
|
-
lines.push(` Total Duration: ${report.summary.totalDuration_ms}ms`);
|
|
383
|
-
// SMI-689: Add memory regression summary
|
|
384
|
-
if (report.memoryRegression) {
|
|
385
|
-
lines.push('');
|
|
386
|
-
lines.push('Memory Regression Check:');
|
|
387
|
-
if (report.memoryRegression.hasRegressions) {
|
|
388
|
-
lines.push(` WARNING: ${report.memoryRegression.regressions.length} regression(s) detected (threshold: ${report.memoryRegression.threshold}%)`);
|
|
389
|
-
for (const reg of report.memoryRegression.regressions) {
|
|
390
|
-
lines.push(` - ${reg.label}: ${reg.changePercent.toFixed(1)}% increase`);
|
|
391
|
-
}
|
|
392
|
-
}
|
|
393
|
-
else {
|
|
394
|
-
lines.push(` No memory regressions detected (threshold: ${report.memoryRegression.threshold}%)`);
|
|
395
|
-
}
|
|
396
|
-
}
|
|
397
|
-
return lines.join('\n');
|
|
398
|
-
}
|
|
399
|
-
/**
|
|
400
|
-
* Format bytes to human-readable string (internal helper)
|
|
401
|
-
*/
|
|
402
|
-
function formatBytes(bytes) {
|
|
403
|
-
if (bytes === 0)
|
|
404
|
-
return '0 B';
|
|
405
|
-
const k = 1024;
|
|
406
|
-
const sizes = ['B', 'KB', 'MB', 'GB'];
|
|
407
|
-
const i = Math.floor(Math.log(Math.abs(bytes)) / Math.log(k));
|
|
408
|
-
const value = bytes / Math.pow(k, i);
|
|
409
|
-
return `${value.toFixed(1)} ${sizes[i]}`;
|
|
410
|
-
}
|
|
411
|
-
/**
|
|
412
|
-
* Compare two benchmark reports
|
|
413
|
-
*/
|
|
414
|
-
export function compareReports(baseline, current) {
|
|
415
|
-
const comparisons = {};
|
|
416
|
-
let regressions = 0;
|
|
417
|
-
let improvements = 0;
|
|
418
|
-
for (const [name, currentStats] of Object.entries(current.results)) {
|
|
419
|
-
const baselineStats = baseline.results[name];
|
|
420
|
-
if (!baselineStats)
|
|
421
|
-
continue;
|
|
422
|
-
const p50Change = ((currentStats.p50_ms - baselineStats.p50_ms) / baselineStats.p50_ms) * 100;
|
|
423
|
-
const p95Change = ((currentStats.p95_ms - baselineStats.p95_ms) / baselineStats.p95_ms) * 100;
|
|
424
|
-
const p99Change = ((currentStats.p99_ms - baselineStats.p99_ms) / baselineStats.p99_ms) * 100;
|
|
425
|
-
const isRegression = p95Change > 10; // 10% threshold
|
|
426
|
-
const isImprovement = p95Change < -10;
|
|
427
|
-
if (isRegression)
|
|
428
|
-
regressions++;
|
|
429
|
-
if (isImprovement)
|
|
430
|
-
improvements++;
|
|
431
|
-
comparisons[name] = {
|
|
432
|
-
baseline: baselineStats,
|
|
433
|
-
current: currentStats,
|
|
434
|
-
p50ChangePercent: Math.round(p50Change * 100) / 100,
|
|
435
|
-
p95ChangePercent: Math.round(p95Change * 100) / 100,
|
|
436
|
-
p99ChangePercent: Math.round(p99Change * 100) / 100,
|
|
437
|
-
isRegression,
|
|
438
|
-
isImprovement,
|
|
439
|
-
};
|
|
440
|
-
}
|
|
441
|
-
return {
|
|
442
|
-
baseline: baseline.timestamp,
|
|
443
|
-
current: current.timestamp,
|
|
444
|
-
comparisons,
|
|
445
|
-
summary: {
|
|
446
|
-
totalComparisons: Object.keys(comparisons).length,
|
|
447
|
-
regressions,
|
|
448
|
-
improvements,
|
|
449
|
-
unchanged: Object.keys(comparisons).length - regressions - improvements,
|
|
450
|
-
},
|
|
451
|
-
};
|
|
452
|
-
}
|
|
453
336
|
//# sourceMappingURL=BenchmarkRunner.js.map
|