@skillsmith/core 0.2.0 → 0.4.1
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 +235 -4
- package/dist/.tsbuildinfo +1 -1
- package/dist/src/analysis/CodebaseAnalyzer.d.ts.map +1 -1
- 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/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 +25 -3
- package/dist/src/analysis/index.d.ts.map +1 -1
- package/dist/src/analysis/index.js +45 -3
- package/dist/src/analysis/index.js.map +1 -1
- package/dist/src/analysis/language-detector.d.ts +76 -0
- package/dist/src/analysis/language-detector.d.ts.map +1 -0
- package/dist/src/analysis/language-detector.js +205 -0
- package/dist/src/analysis/language-detector.js.map +1 -0
- package/dist/src/analysis/language-detector.patterns.d.ts +17 -0
- package/dist/src/analysis/language-detector.patterns.d.ts.map +1 -0
- package/dist/src/analysis/language-detector.patterns.js +413 -0
- package/dist/src/analysis/language-detector.patterns.js.map +1 -0
- package/dist/src/analysis/language-detector.types.d.ts +48 -0
- package/dist/src/analysis/language-detector.types.d.ts.map +1 -0
- package/dist/src/analysis/language-detector.types.js +6 -0
- package/dist/src/analysis/language-detector.types.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 +103 -0
- package/dist/src/analysis/metrics.d.ts.map +1 -0
- package/dist/src/analysis/metrics.implementations.d.ts +39 -0
- package/dist/src/analysis/metrics.implementations.d.ts.map +1 -0
- package/dist/src/analysis/metrics.implementations.js +114 -0
- package/dist/src/analysis/metrics.implementations.js.map +1 -0
- package/dist/src/analysis/metrics.js +334 -0
- package/dist/src/analysis/metrics.js.map +1 -0
- package/dist/src/analysis/metrics.types.d.ts +79 -0
- package/dist/src/analysis/metrics.types.d.ts.map +1 -0
- package/dist/src/analysis/metrics.types.js +6 -0
- package/dist/src/analysis/metrics.types.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 +71 -6
- package/dist/src/analysis/types.d.ts.map +1 -1
- package/dist/src/analysis/types.js +36 -3
- package/dist/src/analysis/types.js.map +1 -1
- 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 +4 -0
- package/dist/src/analytics/AnalyticsRepository.d.ts.map +1 -1
- package/dist/src/analytics/AnalyticsRepository.js +26 -44
- package/dist/src/analytics/AnalyticsRepository.js.map +1 -1
- package/dist/src/analytics/ROIDashboardService.js +4 -2
- package/dist/src/analytics/ROIDashboardService.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 +140 -0
- package/dist/src/analytics/schema.js.map +1 -1
- package/dist/src/api/cache.d.ts +24 -1
- package/dist/src/api/cache.d.ts.map +1 -1
- package/dist/src/api/cache.js +50 -2
- package/dist/src/api/cache.js.map +1 -1
- package/dist/src/api/client.d.ts +141 -6
- package/dist/src/api/client.d.ts.map +1 -1
- package/dist/src/api/client.js +238 -23
- package/dist/src/api/client.js.map +1 -1
- package/dist/src/api/index.d.ts +2 -0
- package/dist/src/api/index.d.ts.map +1 -1
- package/dist/src/api/index.js +7 -0
- package/dist/src/api/index.js.map +1 -1
- 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.map +1 -1
- package/dist/src/benchmarks/BenchmarkRunner.js +1 -1
- package/dist/src/benchmarks/BenchmarkRunner.js.map +1 -1
- package/dist/src/benchmarks/memory/MemoryProfiler.d.ts.map +1 -1
- package/dist/src/benchmarks/memory/MemoryProfiler.js.map +1 -1
- package/dist/src/billing/BillingService.d.ts +101 -0
- package/dist/src/billing/BillingService.d.ts.map +1 -0
- package/dist/src/billing/BillingService.helpers.d.ts +15 -0
- package/dist/src/billing/BillingService.helpers.d.ts.map +1 -0
- package/dist/src/billing/BillingService.helpers.js +45 -0
- package/dist/src/billing/BillingService.helpers.js.map +1 -0
- package/dist/src/billing/BillingService.js +263 -0
- package/dist/src/billing/BillingService.js.map +1 -0
- package/dist/src/billing/BillingService.types.d.ts +52 -0
- package/dist/src/billing/BillingService.types.d.ts.map +1 -0
- package/dist/src/billing/BillingService.types.js +6 -0
- package/dist/src/billing/BillingService.types.js.map +1 -0
- package/dist/src/billing/GDPRComplianceService.d.ts +176 -0
- package/dist/src/billing/GDPRComplianceService.d.ts.map +1 -0
- package/dist/src/billing/GDPRComplianceService.js +361 -0
- package/dist/src/billing/GDPRComplianceService.js.map +1 -0
- package/dist/src/billing/StripeClient.d.ts +178 -0
- package/dist/src/billing/StripeClient.d.ts.map +1 -0
- package/dist/src/billing/StripeClient.js +463 -0
- package/dist/src/billing/StripeClient.js.map +1 -0
- package/dist/src/billing/StripeReconciliationJob.d.ts +95 -0
- package/dist/src/billing/StripeReconciliationJob.d.ts.map +1 -0
- package/dist/src/billing/StripeReconciliationJob.js +405 -0
- package/dist/src/billing/StripeReconciliationJob.js.map +1 -0
- package/dist/src/billing/StripeWebhookHandler.d.ts +105 -0
- package/dist/src/billing/StripeWebhookHandler.d.ts.map +1 -0
- package/dist/src/billing/StripeWebhookHandler.js +452 -0
- package/dist/src/billing/StripeWebhookHandler.js.map +1 -0
- package/dist/src/billing/index.d.ts +18 -0
- package/dist/src/billing/index.d.ts.map +1 -0
- package/dist/src/billing/index.js +19 -0
- package/dist/src/billing/index.js.map +1 -0
- package/dist/src/billing/types.d.ts +266 -0
- package/dist/src/billing/types.d.ts.map +1 -0
- package/dist/src/billing/types.js +23 -0
- package/dist/src/billing/types.js.map +1 -0
- package/dist/src/db/migration.d.ts +129 -0
- package/dist/src/db/migration.d.ts.map +1 -0
- package/dist/src/db/migration.js +289 -0
- package/dist/src/db/migration.js.map +1 -0
- package/dist/src/db/schema.d.ts +2 -2
- package/dist/src/db/schema.d.ts.map +1 -1
- package/dist/src/db/schema.js +63 -1
- package/dist/src/db/schema.js.map +1 -1
- package/dist/src/embeddings/hnsw-store.d.ts +58 -0
- package/dist/src/embeddings/hnsw-store.d.ts.map +1 -0
- package/dist/src/embeddings/hnsw-store.helpers.d.ts +83 -0
- package/dist/src/embeddings/hnsw-store.helpers.d.ts.map +1 -0
- package/dist/src/embeddings/hnsw-store.helpers.js +147 -0
- package/dist/src/embeddings/hnsw-store.helpers.js.map +1 -0
- package/dist/src/embeddings/hnsw-store.js +354 -0
- package/dist/src/embeddings/hnsw-store.js.map +1 -0
- package/dist/src/embeddings/hnsw-store.types.d.ts +154 -0
- package/dist/src/embeddings/hnsw-store.types.d.ts.map +1 -0
- package/dist/src/embeddings/hnsw-store.types.js +26 -0
- package/dist/src/embeddings/hnsw-store.types.js.map +1 -0
- package/dist/src/embeddings/index.d.ts +2 -0
- package/dist/src/embeddings/index.d.ts.map +1 -1
- package/dist/src/embeddings/index.js +2 -0
- 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 +2 -1
- package/dist/src/errors.js.map +1 -1
- package/dist/src/index.d.ts +13 -4
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +26 -4
- package/dist/src/index.js.map +1 -1
- package/dist/src/indexer/GitHubIndexer.d.ts.map +1 -1
- package/dist/src/indexer/GitHubIndexer.js +17 -4
- package/dist/src/indexer/GitHubIndexer.js.map +1 -1
- package/dist/src/indexer/SwarmIndexer.d.ts.map +1 -1
- package/dist/src/indexer/SwarmIndexer.js +1 -1
- package/dist/src/indexer/SwarmIndexer.js.map +1 -1
- package/dist/src/learning/PatternStore.d.ts +37 -0
- package/dist/src/learning/PatternStore.d.ts.map +1 -0
- package/dist/src/learning/PatternStore.helpers.d.ts +88 -0
- package/dist/src/learning/PatternStore.helpers.d.ts.map +1 -0
- package/dist/src/learning/PatternStore.helpers.js +286 -0
- package/dist/src/learning/PatternStore.helpers.js.map +1 -0
- package/dist/src/learning/PatternStore.js +347 -0
- package/dist/src/learning/PatternStore.js.map +1 -0
- package/dist/src/learning/PatternStore.queries.d.ts +83 -0
- package/dist/src/learning/PatternStore.queries.d.ts.map +1 -0
- package/dist/src/learning/PatternStore.queries.js +189 -0
- package/dist/src/learning/PatternStore.queries.js.map +1 -0
- package/dist/src/learning/PatternStore.types.d.ts +308 -0
- package/dist/src/learning/PatternStore.types.d.ts.map +1 -0
- package/dist/src/learning/PatternStore.types.js +44 -0
- package/dist/src/learning/PatternStore.types.js.map +1 -0
- package/dist/src/learning/ReasoningBankIntegration.d.ts +63 -0
- package/dist/src/learning/ReasoningBankIntegration.d.ts.map +1 -0
- package/dist/src/learning/ReasoningBankIntegration.helpers.d.ts +49 -0
- package/dist/src/learning/ReasoningBankIntegration.helpers.d.ts.map +1 -0
- package/dist/src/learning/ReasoningBankIntegration.helpers.js +180 -0
- package/dist/src/learning/ReasoningBankIntegration.helpers.js.map +1 -0
- package/dist/src/learning/ReasoningBankIntegration.js +258 -0
- package/dist/src/learning/ReasoningBankIntegration.js.map +1 -0
- package/dist/src/learning/ReasoningBankIntegration.types.d.ts +167 -0
- package/dist/src/learning/ReasoningBankIntegration.types.d.ts.map +1 -0
- package/dist/src/learning/ReasoningBankIntegration.types.js +51 -0
- package/dist/src/learning/ReasoningBankIntegration.types.js.map +1 -0
- package/dist/src/learning/index.d.ts +15 -0
- package/dist/src/learning/index.d.ts.map +1 -0
- package/dist/src/learning/index.js +15 -0
- package/dist/src/learning/index.js.map +1 -0
- package/dist/src/learning/interfaces.d.ts.map +1 -1
- package/dist/src/pipeline/DailyIndexPipeline.js +1 -1
- package/dist/src/pipeline/DailyIndexPipeline.js.map +1 -1
- package/dist/src/repositories/IndexerRepository.d.ts +1 -0
- package/dist/src/repositories/IndexerRepository.d.ts.map +1 -1
- package/dist/src/repositories/IndexerRepository.js +7 -0
- package/dist/src/repositories/IndexerRepository.js.map +1 -1
- package/dist/src/repositories/SkillRepository.d.ts.map +1 -1
- package/dist/src/repositories/SkillRepository.js +21 -5
- package/dist/src/repositories/SkillRepository.js.map +1 -1
- package/dist/src/repositories/SyncConfigRepository.d.ts +91 -0
- package/dist/src/repositories/SyncConfigRepository.d.ts.map +1 -0
- package/dist/src/repositories/SyncConfigRepository.js +202 -0
- package/dist/src/repositories/SyncConfigRepository.js.map +1 -0
- package/dist/src/repositories/SyncHistoryRepository.d.ts +104 -0
- package/dist/src/repositories/SyncHistoryRepository.d.ts.map +1 -0
- package/dist/src/repositories/SyncHistoryRepository.js +235 -0
- package/dist/src/repositories/SyncHistoryRepository.js.map +1 -0
- package/dist/src/repositories/quarantine/QuarantineRepository.d.ts.map +1 -1
- package/dist/src/repositories/quarantine/QuarantineRepository.js.map +1 -1
- package/dist/src/repositories/quarantine/query-builder.d.ts.map +1 -1
- package/dist/src/repositories/quarantine/query-builder.js +1 -1
- package/dist/src/repositories/quarantine/query-builder.js.map +1 -1
- package/dist/src/routing/SONARouter.d.ts +56 -0
- package/dist/src/routing/SONARouter.d.ts.map +1 -0
- package/dist/src/routing/SONARouter.helpers.d.ts +112 -0
- package/dist/src/routing/SONARouter.helpers.d.ts.map +1 -0
- package/dist/src/routing/SONARouter.helpers.js +184 -0
- package/dist/src/routing/SONARouter.helpers.js.map +1 -0
- package/dist/src/routing/SONARouter.js +377 -0
- package/dist/src/routing/SONARouter.js.map +1 -0
- package/dist/src/routing/index.d.ts +9 -0
- package/dist/src/routing/index.d.ts.map +1 -0
- package/dist/src/routing/index.js +10 -0
- package/dist/src/routing/index.js.map +1 -0
- package/dist/src/routing/types.d.ts +331 -0
- package/dist/src/routing/types.d.ts.map +1 -0
- package/dist/src/routing/types.js +203 -0
- package/dist/src/routing/types.js.map +1 -0
- package/dist/src/scripts/__tests__/scan-imported-skills.test.js +8 -3
- package/dist/src/scripts/__tests__/scan-imported-skills.test.js.map +1 -1
- package/dist/src/scripts/github-import/github-client.d.ts +30 -2
- package/dist/src/scripts/github-import/github-client.d.ts.map +1 -1
- package/dist/src/scripts/github-import/github-client.js +292 -4
- package/dist/src/scripts/github-import/github-client.js.map +1 -1
- package/dist/src/scripts/github-import/index.js +3 -10
- package/dist/src/scripts/github-import/index.js.map +1 -1
- package/dist/src/scripts/github-import/types.d.ts +6 -0
- package/dist/src/scripts/github-import/types.d.ts.map +1 -1
- package/dist/src/scripts/github-import/types.js +3 -0
- package/dist/src/scripts/github-import/types.js.map +1 -1
- package/dist/src/scripts/import-github-skills.js +10 -5
- package/dist/src/scripts/import-github-skills.js.map +1 -1
- package/dist/src/scripts/ingest-lenny-skills.d.ts +40 -0
- package/dist/src/scripts/ingest-lenny-skills.d.ts.map +1 -0
- package/dist/src/scripts/ingest-lenny-skills.js +346 -0
- package/dist/src/scripts/ingest-lenny-skills.js.map +1 -0
- package/dist/src/scripts/merge-skills.d.ts +56 -0
- package/dist/src/scripts/merge-skills.d.ts.map +1 -0
- package/dist/src/scripts/merge-skills.js +411 -0
- package/dist/src/scripts/merge-skills.js.map +1 -0
- package/dist/src/scripts/review-lenny-skills.d.ts +25 -0
- package/dist/src/scripts/review-lenny-skills.d.ts.map +1 -0
- package/dist/src/scripts/review-lenny-skills.js +520 -0
- package/dist/src/scripts/review-lenny-skills.js.map +1 -0
- package/dist/src/scripts/skill-scanner/index.d.ts +9 -2
- package/dist/src/scripts/skill-scanner/index.d.ts.map +1 -1
- package/dist/src/scripts/skill-scanner/index.js +98 -7
- package/dist/src/scripts/skill-scanner/index.js.map +1 -1
- package/dist/src/scripts/skill-scanner/logger.d.ts +51 -0
- package/dist/src/scripts/skill-scanner/logger.d.ts.map +1 -1
- package/dist/src/scripts/skill-scanner/logger.js +255 -1
- package/dist/src/scripts/skill-scanner/logger.js.map +1 -1
- package/dist/src/scripts/skill-scanner/reporter.d.ts +1 -1
- package/dist/src/scripts/skill-scanner/reporter.d.ts.map +1 -1
- package/dist/src/scripts/skill-scanner/reporter.js +67 -15
- package/dist/src/scripts/skill-scanner/reporter.js.map +1 -1
- package/dist/src/scripts/skill-scanner/scanner.d.ts +5 -2
- package/dist/src/scripts/skill-scanner/scanner.d.ts.map +1 -1
- package/dist/src/scripts/skill-scanner/scanner.js +156 -39
- package/dist/src/scripts/skill-scanner/scanner.js.map +1 -1
- package/dist/src/scripts/skill-scanner/trust-scorer.d.ts.map +1 -1
- package/dist/src/scripts/skill-scanner/trust-scorer.js.map +1 -1
- package/dist/src/scripts/skill-scanner/types.d.ts +44 -0
- package/dist/src/scripts/skill-scanner/types.d.ts.map +1 -1
- package/dist/src/scripts/sync-to-supabase.d.ts +10 -0
- package/dist/src/scripts/sync-to-supabase.d.ts.map +1 -0
- package/dist/src/scripts/sync-to-supabase.js +93 -0
- package/dist/src/scripts/sync-to-supabase.js.map +1 -0
- package/dist/src/scripts/validation/index.js +1 -2
- package/dist/src/scripts/validation/index.js.map +1 -1
- package/dist/src/scripts/validation/pipeline.d.ts.map +1 -1
- package/dist/src/scripts/validation/pipeline.js.map +1 -1
- package/dist/src/scripts/validation/types.d.ts +2 -2
- package/dist/src/security/AuditLogger.js +1 -1
- package/dist/src/security/AuditLogger.js.map +1 -1
- package/dist/src/security/SkillSandbox.d.ts +156 -0
- package/dist/src/security/SkillSandbox.d.ts.map +1 -0
- package/dist/src/security/SkillSandbox.js +303 -0
- package/dist/src/security/SkillSandbox.js.map +1 -0
- package/dist/src/security/__tests__/pathValidation.test.js.map +1 -1
- package/dist/src/security/index.d.ts +3 -1
- package/dist/src/security/index.d.ts.map +1 -1
- package/dist/src/security/index.js +5 -1
- package/dist/src/security/index.js.map +1 -1
- package/dist/src/security/rate-limiter/presets.d.ts +12 -0
- package/dist/src/security/rate-limiter/presets.d.ts.map +1 -1
- package/dist/src/security/rate-limiter/presets.js +12 -0
- package/dist/src/security/rate-limiter/presets.js.map +1 -1
- package/dist/src/security/sanitization.d.ts +85 -0
- package/dist/src/security/sanitization.d.ts.map +1 -1
- package/dist/src/security/sanitization.js +133 -0
- package/dist/src/security/sanitization.js.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.d.ts +13 -66
- package/dist/src/security/scanner/SecurityScanner.d.ts.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.formatters.d.ts +49 -0
- package/dist/src/security/scanner/SecurityScanner.formatters.d.ts.map +1 -0
- package/dist/src/security/scanner/SecurityScanner.formatters.js +139 -0
- package/dist/src/security/scanner/SecurityScanner.formatters.js.map +1 -0
- package/dist/src/security/scanner/SecurityScanner.helpers.d.ts +40 -0
- package/dist/src/security/scanner/SecurityScanner.helpers.d.ts.map +1 -0
- package/dist/src/security/scanner/SecurityScanner.helpers.js +142 -0
- package/dist/src/security/scanner/SecurityScanner.helpers.js.map +1 -0
- package/dist/src/security/scanner/SecurityScanner.js +141 -166
- package/dist/src/security/scanner/SecurityScanner.js.map +1 -1
- package/dist/src/security/scanner/patterns.d.ts +13 -0
- package/dist/src/security/scanner/patterns.d.ts.map +1 -1
- package/dist/src/security/scanner/patterns.js +51 -0
- package/dist/src/security/scanner/patterns.js.map +1 -1
- package/dist/src/security/scanner/types.d.ts +13 -1
- package/dist/src/security/scanner/types.d.ts.map +1 -1
- package/dist/src/security/scanner/weights.d.ts.map +1 -1
- package/dist/src/security/scanner/weights.js +1 -0
- package/dist/src/security/scanner/weights.js.map +1 -1
- package/dist/src/services/SearchService.d.ts +5 -0
- package/dist/src/services/SearchService.d.ts.map +1 -1
- package/dist/src/services/SearchService.js +144 -11
- package/dist/src/services/SearchService.js.map +1 -1
- package/dist/src/services/SkillAnalyzer.d.ts +117 -0
- package/dist/src/services/SkillAnalyzer.d.ts.map +1 -0
- package/dist/src/services/SkillAnalyzer.js +421 -0
- package/dist/src/services/SkillAnalyzer.js.map +1 -0
- package/dist/src/services/SkillDecomposer.d.ts +103 -0
- package/dist/src/services/SkillDecomposer.d.ts.map +1 -0
- package/dist/src/services/SkillDecomposer.js +359 -0
- package/dist/src/services/SkillDecomposer.js.map +1 -0
- package/dist/src/services/SubagentGenerator.d.ts +68 -0
- package/dist/src/services/SubagentGenerator.d.ts.map +1 -0
- package/dist/src/services/SubagentGenerator.js +319 -0
- package/dist/src/services/SubagentGenerator.js.map +1 -0
- package/dist/src/services/TransformationService.d.ts +163 -0
- package/dist/src/services/TransformationService.d.ts.map +1 -0
- package/dist/src/services/TransformationService.js +291 -0
- package/dist/src/services/TransformationService.js.map +1 -0
- package/dist/src/services/__tests__/SkillAnalyzer.test.d.ts +6 -0
- package/dist/src/services/__tests__/SkillAnalyzer.test.d.ts.map +1 -0
- package/dist/src/services/__tests__/SkillAnalyzer.test.js +177 -0
- package/dist/src/services/__tests__/SkillAnalyzer.test.js.map +1 -0
- package/dist/src/services/__tests__/SkillDecomposer.test.d.ts +6 -0
- package/dist/src/services/__tests__/SkillDecomposer.test.d.ts.map +1 -0
- package/dist/src/services/__tests__/SkillDecomposer.test.js +235 -0
- package/dist/src/services/__tests__/SkillDecomposer.test.js.map +1 -0
- package/dist/src/services/__tests__/SubagentGenerator.test.d.ts +6 -0
- package/dist/src/services/__tests__/SubagentGenerator.test.d.ts.map +1 -0
- package/dist/src/services/__tests__/SubagentGenerator.test.js +174 -0
- package/dist/src/services/__tests__/SubagentGenerator.test.js.map +1 -0
- package/dist/src/services/__tests__/TransformationService.test.d.ts +6 -0
- package/dist/src/services/__tests__/TransformationService.test.d.ts.map +1 -0
- package/dist/src/services/__tests__/TransformationService.test.js +242 -0
- package/dist/src/services/__tests__/TransformationService.test.js.map +1 -0
- package/dist/src/session/SessionContext.js +1 -1
- package/dist/src/session/SessionContext.js.map +1 -1
- package/dist/src/session/SessionHealthMonitor.d.ts +1 -1
- package/dist/src/session/SessionHealthMonitor.d.ts.map +1 -1
- package/dist/src/session/SessionHealthMonitor.js +1 -1
- package/dist/src/session/SessionHealthMonitor.js.map +1 -1
- package/dist/src/session/SessionManager.d.ts +9 -66
- package/dist/src/session/SessionManager.d.ts.map +1 -1
- package/dist/src/session/SessionManager.helpers.d.ts +68 -0
- package/dist/src/session/SessionManager.helpers.d.ts.map +1 -0
- package/dist/src/session/SessionManager.helpers.js +152 -0
- package/dist/src/session/SessionManager.helpers.js.map +1 -0
- package/dist/src/session/SessionManager.js +113 -111
- package/dist/src/session/SessionManager.js.map +1 -1
- package/dist/src/session/SessionManager.types.d.ts +88 -0
- package/dist/src/session/SessionManager.types.d.ts.map +1 -0
- package/dist/src/session/SessionManager.types.js +27 -0
- package/dist/src/session/SessionManager.types.js.map +1 -0
- package/dist/src/session/SessionRecovery.d.ts.map +1 -1
- package/dist/src/session/SessionRecovery.js +3 -2
- package/dist/src/session/SessionRecovery.js.map +1 -1
- package/dist/src/sources/RawUrlSourceAdapter.js.map +1 -1
- package/dist/src/sources/SourceAdapterRegistry.js +1 -1
- package/dist/src/sources/SourceAdapterRegistry.js.map +1 -1
- package/dist/src/sync/BackgroundSyncService.d.ts +90 -0
- package/dist/src/sync/BackgroundSyncService.d.ts.map +1 -0
- package/dist/src/sync/BackgroundSyncService.js +214 -0
- package/dist/src/sync/BackgroundSyncService.js.map +1 -0
- package/dist/src/sync/SyncEngine.d.ts +76 -0
- package/dist/src/sync/SyncEngine.d.ts.map +1 -0
- package/dist/src/sync/SyncEngine.js +292 -0
- package/dist/src/sync/SyncEngine.js.map +1 -0
- package/dist/src/sync/index.d.ts +11 -0
- package/dist/src/sync/index.d.ts.map +1 -0
- package/dist/src/sync/index.js +14 -0
- package/dist/src/sync/index.js.map +1 -0
- package/dist/src/telemetry/index.d.ts +1 -1
- package/dist/src/telemetry/index.d.ts.map +1 -1
- package/dist/src/telemetry/index.js +2 -2
- package/dist/src/telemetry/index.js.map +1 -1
- package/dist/src/telemetry/posthog.d.ts +27 -5
- package/dist/src/telemetry/posthog.d.ts.map +1 -1
- package/dist/src/telemetry/posthog.js +20 -5
- package/dist/src/telemetry/posthog.js.map +1 -1
- package/dist/src/telemetry/tracer.d.ts.map +1 -1
- package/dist/src/telemetry/tracer.js +2 -3
- package/dist/src/telemetry/tracer.js.map +1 -1
- package/dist/src/testing/MultiLLMProvider.d.ts +98 -0
- package/dist/src/testing/MultiLLMProvider.d.ts.map +1 -0
- package/dist/src/testing/MultiLLMProvider.helpers.d.ts +54 -0
- package/dist/src/testing/MultiLLMProvider.helpers.d.ts.map +1 -0
- package/dist/src/testing/MultiLLMProvider.helpers.js +126 -0
- package/dist/src/testing/MultiLLMProvider.helpers.js.map +1 -0
- package/dist/src/testing/MultiLLMProvider.js +447 -0
- package/dist/src/testing/MultiLLMProvider.js.map +1 -0
- package/dist/src/testing/MultiLLMProvider.types.d.ts +253 -0
- package/dist/src/testing/MultiLLMProvider.types.d.ts.map +1 -0
- package/dist/src/testing/MultiLLMProvider.types.js +111 -0
- package/dist/src/testing/MultiLLMProvider.types.js.map +1 -0
- package/dist/src/testing/index.d.ts +8 -0
- package/dist/src/testing/index.d.ts.map +1 -0
- package/dist/src/testing/index.js +9 -0
- package/dist/src/testing/index.js.map +1 -0
- package/dist/src/triggers/__tests__/TriggerDetector.test.js +1 -1
- package/dist/src/triggers/__tests__/TriggerDetector.test.js.map +1 -1
- package/dist/src/types/skill.d.ts +32 -0
- package/dist/src/types/skill.d.ts.map +1 -1
- package/dist/src/types/skill.js +11 -1
- package/dist/src/types/skill.js.map +1 -1
- package/dist/src/types.d.ts +27 -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/src/utils/retry.js +2 -2
- package/dist/src/utils/retry.js.map +1 -1
- package/dist/src/validation/index.js +2 -2
- package/dist/src/validation/index.js.map +1 -1
- package/dist/src/webhooks/WebhookHandler.d.ts.map +1 -1
- package/dist/src/webhooks/WebhookHandler.js.map +1 -1
- package/dist/src/webhooks/WebhookPayload.js +1 -1
- package/dist/src/webhooks/WebhookPayload.js.map +1 -1
- package/dist/tests/Analytics.integration.test.js +2 -2
- package/dist/tests/Analytics.integration.test.js.map +1 -1
- package/dist/tests/AnalyticsRepository.test.js +3 -5
- package/dist/tests/AnalyticsRepository.test.js.map +1 -1
- package/dist/tests/AnalyticsStorage.test.js.map +1 -1
- package/dist/tests/ApiPartialResponses.test.d.ts +12 -0
- package/dist/tests/ApiPartialResponses.test.d.ts.map +1 -0
- package/dist/tests/ApiPartialResponses.test.js +202 -0
- package/dist/tests/ApiPartialResponses.test.js.map +1 -0
- package/dist/tests/AuditLogger.test.js.map +1 -1
- package/dist/tests/BenchmarkRunner.test.js +6 -6
- package/dist/tests/BenchmarkRunner.test.js.map +1 -1
- package/dist/tests/CacheSecurity.test.js.map +1 -1
- package/dist/tests/CodebaseAnalyzer.test.js.map +1 -1
- package/dist/tests/DailyIndexPipeline.test.js.map +1 -1
- package/dist/tests/EmbeddingService.test.js.map +1 -1
- package/dist/tests/GitHubIndexer.test.js +4 -3
- package/dist/tests/GitHubIndexer.test.js.map +1 -1
- package/dist/tests/MemoryProfiler.test.js +3 -3
- package/dist/tests/MemoryProfiler.test.js.map +1 -1
- package/dist/tests/QualityScorer.test.js.map +1 -1
- package/dist/tests/RateLimiter.test.js.map +1 -1
- package/dist/tests/ScraperAdapters.test.js.map +1 -1
- package/dist/tests/SecurityScanner.test.js +337 -1
- package/dist/tests/SecurityScanner.test.js.map +1 -1
- package/dist/tests/SessionManager.security.test.js +1 -1
- package/dist/tests/SessionManager.security.test.js.map +1 -1
- package/dist/tests/SessionManager.test.js +4 -4
- package/dist/tests/SessionManager.test.js.map +1 -1
- package/dist/tests/SwarmIndexer.test.js +1 -1
- package/dist/tests/SwarmIndexer.test.js.map +1 -1
- package/dist/tests/TieredCache.test.js +2 -11
- package/dist/tests/TieredCache.test.js.map +1 -1
- package/dist/tests/WebhookHandler.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/billing/BillingService.test.d.ts +7 -0
- package/dist/tests/billing/BillingService.test.d.ts.map +1 -0
- package/dist/tests/billing/BillingService.test.js +168 -0
- package/dist/tests/billing/BillingService.test.js.map +1 -0
- package/dist/tests/billing/GDPRCompliance.test.d.ts +7 -0
- package/dist/tests/billing/GDPRCompliance.test.d.ts.map +1 -0
- package/dist/tests/billing/GDPRCompliance.test.js +195 -0
- package/dist/tests/billing/GDPRCompliance.test.js.map +1 -0
- package/dist/tests/billing/StripeReconciliation.test.d.ts +7 -0
- package/dist/tests/billing/StripeReconciliation.test.d.ts.map +1 -0
- package/dist/tests/billing/StripeReconciliation.test.js +266 -0
- package/dist/tests/billing/StripeReconciliation.test.js.map +1 -0
- package/dist/tests/billing/stripe-validators.test.d.ts +7 -0
- package/dist/tests/billing/stripe-validators.test.d.ts.map +1 -0
- package/dist/tests/billing/stripe-validators.test.js +107 -0
- package/dist/tests/billing/stripe-validators.test.js.map +1 -0
- package/dist/tests/embeddings/hnsw-store.test.d.ts +7 -0
- package/dist/tests/embeddings/hnsw-store.test.d.ts.map +1 -0
- package/dist/tests/embeddings/hnsw-store.test.js +295 -0
- package/dist/tests/embeddings/hnsw-store.test.js.map +1 -0
- package/dist/tests/fixtures/api-responses/index.d.ts +119 -0
- package/dist/tests/fixtures/api-responses/index.d.ts.map +1 -0
- package/dist/tests/fixtures/api-responses/index.js +419 -0
- package/dist/tests/fixtures/api-responses/index.js.map +1 -0
- package/dist/tests/integration/neural/e2e-learning.test.d.ts +17 -0
- package/dist/tests/integration/neural/e2e-learning.test.d.ts.map +1 -0
- package/dist/tests/integration/neural/e2e-learning.test.js +238 -0
- package/dist/tests/integration/neural/e2e-learning.test.js.map +1 -0
- package/dist/tests/integration/neural/helpers.d.ts +132 -0
- package/dist/tests/integration/neural/helpers.d.ts.map +1 -0
- package/dist/tests/integration/neural/helpers.js +287 -0
- package/dist/tests/integration/neural/helpers.js.map +1 -0
- package/dist/tests/integration/neural/personalization.test.d.ts +21 -0
- package/dist/tests/integration/neural/personalization.test.d.ts.map +1 -0
- package/dist/tests/integration/neural/personalization.test.js +304 -0
- package/dist/tests/integration/neural/personalization.test.js.map +1 -0
- package/dist/tests/integration/neural/preference-learner.test.d.ts +23 -0
- package/dist/tests/integration/neural/preference-learner.test.d.ts.map +1 -0
- package/dist/tests/integration/neural/preference-learner.test.js +289 -0
- package/dist/tests/integration/neural/preference-learner.test.js.map +1 -0
- package/dist/tests/integration/neural/privacy.test.d.ts +19 -0
- package/dist/tests/integration/neural/privacy.test.d.ts.map +1 -0
- package/dist/tests/integration/neural/privacy.test.js +249 -0
- package/dist/tests/integration/neural/privacy.test.js.map +1 -0
- package/dist/tests/integration/neural/setup.d.ts +175 -0
- package/dist/tests/integration/neural/setup.d.ts.map +1 -0
- package/dist/tests/integration/neural/setup.js +487 -0
- package/dist/tests/integration/neural/setup.js.map +1 -0
- package/dist/tests/integration/neural/signal-collection.test.d.ts +21 -0
- package/dist/tests/integration/neural/signal-collection.test.d.ts.map +1 -0
- package/dist/tests/integration/neural/signal-collection.test.js +232 -0
- package/dist/tests/integration/neural/signal-collection.test.js.map +1 -0
- 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/learning/PatternStore.test.d.ts +8 -0
- package/dist/tests/learning/PatternStore.test.d.ts.map +1 -0
- package/dist/tests/learning/PatternStore.test.js +589 -0
- package/dist/tests/learning/PatternStore.test.js.map +1 -0
- package/dist/tests/learning/ReasoningBankIntegration.test.d.ts +8 -0
- package/dist/tests/learning/ReasoningBankIntegration.test.d.ts.map +1 -0
- package/dist/tests/learning/ReasoningBankIntegration.test.js +269 -0
- package/dist/tests/learning/ReasoningBankIntegration.test.js.map +1 -0
- package/dist/tests/logger.test.js +1 -1
- package/dist/tests/logger.test.js.map +1 -1
- package/dist/tests/performance/LargeScalePerformance.test.js +1 -1
- package/dist/tests/performance/LargeScalePerformance.test.js.map +1 -1
- package/dist/tests/routing/SONARouter.test.d.ts +8 -0
- package/dist/tests/routing/SONARouter.test.d.ts.map +1 -0
- package/dist/tests/routing/SONARouter.test.js +400 -0
- package/dist/tests/routing/SONARouter.test.js.map +1 -0
- package/dist/tests/sanitization.test.js.map +1 -1
- package/dist/tests/security/ContinuousSecurity.test.js +10 -12
- package/dist/tests/security/ContinuousSecurity.test.js.map +1 -1
- package/dist/tests/security/SkillSandbox.test.d.ts +8 -0
- package/dist/tests/security/SkillSandbox.test.d.ts.map +1 -0
- package/dist/tests/security/SkillSandbox.test.js +321 -0
- package/dist/tests/security/SkillSandbox.test.js.map +1 -0
- package/dist/tests/session/SessionManager.helpers.test.d.ts +8 -0
- package/dist/tests/session/SessionManager.helpers.test.d.ts.map +1 -0
- package/dist/tests/session/SessionManager.helpers.test.js +105 -0
- package/dist/tests/session/SessionManager.helpers.test.js.map +1 -0
- package/dist/tests/sources.test.js.map +1 -1
- package/dist/tests/sync/SyncConfigRepository.test.d.ts +7 -0
- package/dist/tests/sync/SyncConfigRepository.test.d.ts.map +1 -0
- package/dist/tests/sync/SyncConfigRepository.test.js +154 -0
- package/dist/tests/sync/SyncConfigRepository.test.js.map +1 -0
- package/dist/tests/sync/SyncEngine.test.d.ts +7 -0
- package/dist/tests/sync/SyncEngine.test.d.ts.map +1 -0
- package/dist/tests/sync/SyncEngine.test.js +300 -0
- package/dist/tests/sync/SyncEngine.test.js.map +1 -0
- package/dist/tests/sync/SyncHistoryRepository.test.d.ts +7 -0
- package/dist/tests/sync/SyncHistoryRepository.test.d.ts.map +1 -0
- package/dist/tests/sync/SyncHistoryRepository.test.js +220 -0
- package/dist/tests/sync/SyncHistoryRepository.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/dist/tests/testing/MultiLLMProvider.test.d.ts +14 -0
- package/dist/tests/testing/MultiLLMProvider.test.d.ts.map +1 -0
- package/dist/tests/testing/MultiLLMProvider.test.js +438 -0
- package/dist/tests/testing/MultiLLMProvider.test.js.map +1 -0
- package/dist/tests/webhooks/WebhookHandler.idempotency.test.js +1 -1
- package/dist/tests/webhooks/WebhookHandler.idempotency.test.js.map +1 -1
- package/dist/tests/webhooks/WebhookPayload.security.test.js.map +1 -1
- package/package.json +27 -13
- 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 +0 -151
- package/dist/src/security/scanner.d.ts.map +0 -1
- package/dist/src/security/scanner.js +0 -599
- package/dist/src/security/scanner.js.map +0 -1
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Database Migration Utilities
|
|
3
|
+
*
|
|
4
|
+
* SMI-1446: Handle schema version mismatch during imports
|
|
5
|
+
* SMI-1448: Database merge tooling for combining skill databases
|
|
6
|
+
* SMI-1452: Sync utilities for local-to-Supabase synchronization
|
|
7
|
+
*/
|
|
8
|
+
import { SCHEMA_VERSION, getSchemaVersion, runMigrationsSafe, MIGRATIONS } from './schema.js';
|
|
9
|
+
/**
|
|
10
|
+
* Check schema compatibility between database and expected version
|
|
11
|
+
* SMI-1446: Detects version mismatches that block imports
|
|
12
|
+
*/
|
|
13
|
+
export function checkSchemaCompatibility(db) {
|
|
14
|
+
const currentVersion = getSchemaVersion(db);
|
|
15
|
+
const expectedVersion = SCHEMA_VERSION;
|
|
16
|
+
if (currentVersion === expectedVersion) {
|
|
17
|
+
return {
|
|
18
|
+
isCompatible: true,
|
|
19
|
+
currentVersion,
|
|
20
|
+
expectedVersion,
|
|
21
|
+
action: 'none',
|
|
22
|
+
message: `Database schema is up to date (v${currentVersion})`,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
if (currentVersion < expectedVersion) {
|
|
26
|
+
return {
|
|
27
|
+
isCompatible: true,
|
|
28
|
+
currentVersion,
|
|
29
|
+
expectedVersion,
|
|
30
|
+
action: 'upgrade',
|
|
31
|
+
message: `Database schema v${currentVersion} can be upgraded to v${expectedVersion}`,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
// Database is newer than expected - might be from a newer version of Skillsmith
|
|
35
|
+
if (currentVersion > expectedVersion) {
|
|
36
|
+
// Check if downgrade is safe (no breaking changes in migrations)
|
|
37
|
+
const hasBreakingChanges = MIGRATIONS.slice(expectedVersion).some((m) => m.sql.includes('DROP') || m.sql.includes('RENAME'));
|
|
38
|
+
if (hasBreakingChanges) {
|
|
39
|
+
return {
|
|
40
|
+
isCompatible: false,
|
|
41
|
+
currentVersion,
|
|
42
|
+
expectedVersion,
|
|
43
|
+
action: 'incompatible',
|
|
44
|
+
message: `Database schema v${currentVersion} is incompatible with this version of Skillsmith (expected v${expectedVersion}). Please upgrade Skillsmith or use a compatible database.`,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
isCompatible: true,
|
|
49
|
+
currentVersion,
|
|
50
|
+
expectedVersion,
|
|
51
|
+
action: 'downgrade_warning',
|
|
52
|
+
message: `Database schema v${currentVersion} is newer than expected v${expectedVersion}. This may work but is not recommended. Consider upgrading Skillsmith.`,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
isCompatible: false,
|
|
57
|
+
currentVersion,
|
|
58
|
+
expectedVersion,
|
|
59
|
+
action: 'incompatible',
|
|
60
|
+
message: 'Unknown schema compatibility issue',
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Ensure database schema is compatible, running migrations if needed
|
|
65
|
+
* SMI-1446: Safe migration that handles version mismatches
|
|
66
|
+
*
|
|
67
|
+
* @throws Error if schema is incompatible
|
|
68
|
+
*/
|
|
69
|
+
export function ensureSchemaCompatibility(db) {
|
|
70
|
+
const compatibility = checkSchemaCompatibility(db);
|
|
71
|
+
switch (compatibility.action) {
|
|
72
|
+
case 'none':
|
|
73
|
+
// Already compatible
|
|
74
|
+
break;
|
|
75
|
+
case 'upgrade': {
|
|
76
|
+
// Run migrations
|
|
77
|
+
const migrationsRun = runMigrationsSafe(db);
|
|
78
|
+
if (migrationsRun > 0) {
|
|
79
|
+
console.log(`Upgraded database schema: ${migrationsRun} migration(s) applied`);
|
|
80
|
+
}
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
case 'downgrade_warning':
|
|
84
|
+
console.warn(compatibility.message);
|
|
85
|
+
break;
|
|
86
|
+
case 'incompatible':
|
|
87
|
+
throw new Error(compatibility.message);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Merge skills from source database into target database
|
|
92
|
+
* SMI-1448: Core merge functionality
|
|
93
|
+
*
|
|
94
|
+
* @param target - Target database to merge into
|
|
95
|
+
* @param source - Source database to merge from
|
|
96
|
+
* @param options - Merge configuration
|
|
97
|
+
*/
|
|
98
|
+
export function mergeSkillDatabases(target, source, options = { strategy: 'keep_newer' }) {
|
|
99
|
+
const startTime = Date.now();
|
|
100
|
+
const result = {
|
|
101
|
+
skillsAdded: 0,
|
|
102
|
+
skillsUpdated: 0,
|
|
103
|
+
skillsSkipped: 0,
|
|
104
|
+
conflicts: [],
|
|
105
|
+
duration: 0,
|
|
106
|
+
};
|
|
107
|
+
// Ensure both databases are compatible
|
|
108
|
+
ensureSchemaCompatibility(target);
|
|
109
|
+
const sourceCompatibility = checkSchemaCompatibility(source);
|
|
110
|
+
if (!sourceCompatibility.isCompatible) {
|
|
111
|
+
throw new Error(`Source database: ${sourceCompatibility.message}`);
|
|
112
|
+
}
|
|
113
|
+
// Get all skills from source
|
|
114
|
+
const sourceSkills = source
|
|
115
|
+
.prepare(`SELECT id, name, description, author, repo_url, quality_score,
|
|
116
|
+
trust_tier, tags, created_at, updated_at, source, stars
|
|
117
|
+
FROM skills`)
|
|
118
|
+
.all();
|
|
119
|
+
// Prepare statements
|
|
120
|
+
const getTargetSkill = target.prepare('SELECT * FROM skills WHERE id = ?');
|
|
121
|
+
const insertSkill = target.prepare(`
|
|
122
|
+
INSERT INTO skills (id, name, description, author, repo_url, quality_score,
|
|
123
|
+
trust_tier, tags, created_at, updated_at, source, stars)
|
|
124
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
125
|
+
`);
|
|
126
|
+
const updateSkill = target.prepare(`
|
|
127
|
+
UPDATE skills SET
|
|
128
|
+
name = ?, description = ?, author = ?, repo_url = ?, quality_score = ?,
|
|
129
|
+
trust_tier = ?, tags = ?, updated_at = ?, source = ?, stars = ?
|
|
130
|
+
WHERE id = ?
|
|
131
|
+
`);
|
|
132
|
+
// Process each skill
|
|
133
|
+
const transaction = target.transaction(() => {
|
|
134
|
+
for (const skill of sourceSkills) {
|
|
135
|
+
const existing = getTargetSkill.get(skill.id);
|
|
136
|
+
if (!existing) {
|
|
137
|
+
// New skill - add it
|
|
138
|
+
if (!options.dryRun) {
|
|
139
|
+
insertSkill.run(skill.id, skill.name, skill.description, skill.author, skill.repo_url, skill.quality_score, skill.trust_tier, skill.tags, skill.created_at, skill.updated_at, skill.source, skill.stars);
|
|
140
|
+
}
|
|
141
|
+
result.skillsAdded++;
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
// Skill exists - handle conflict
|
|
145
|
+
const conflict = {
|
|
146
|
+
skillId: skill.id,
|
|
147
|
+
reason: 'duplicate_id',
|
|
148
|
+
sourceValue: skill.updated_at,
|
|
149
|
+
targetValue: existing.updated_at,
|
|
150
|
+
};
|
|
151
|
+
// Determine strategy
|
|
152
|
+
let effectiveStrategy = options.strategy;
|
|
153
|
+
if (options.onConflict) {
|
|
154
|
+
effectiveStrategy = options.onConflict(conflict);
|
|
155
|
+
}
|
|
156
|
+
switch (effectiveStrategy) {
|
|
157
|
+
case 'keep_target':
|
|
158
|
+
conflict.resolution = 'kept_target';
|
|
159
|
+
result.skillsSkipped++;
|
|
160
|
+
break;
|
|
161
|
+
case 'keep_source':
|
|
162
|
+
if (!options.dryRun) {
|
|
163
|
+
updateSkill.run(skill.name, skill.description, skill.author, skill.repo_url, skill.quality_score, skill.trust_tier, skill.tags, skill.updated_at, skill.source, skill.stars, skill.id);
|
|
164
|
+
}
|
|
165
|
+
conflict.resolution = 'updated';
|
|
166
|
+
result.skillsUpdated++;
|
|
167
|
+
break;
|
|
168
|
+
case 'keep_newer': {
|
|
169
|
+
const sourceDate = new Date(skill.updated_at).getTime();
|
|
170
|
+
const targetDate = new Date(existing.updated_at).getTime();
|
|
171
|
+
if (sourceDate > targetDate) {
|
|
172
|
+
if (!options.dryRun) {
|
|
173
|
+
updateSkill.run(skill.name, skill.description, skill.author, skill.repo_url, skill.quality_score, skill.trust_tier, skill.tags, skill.updated_at, skill.source, skill.stars, skill.id);
|
|
174
|
+
}
|
|
175
|
+
conflict.resolution = 'updated';
|
|
176
|
+
result.skillsUpdated++;
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
conflict.resolution = 'kept_target';
|
|
180
|
+
result.skillsSkipped++;
|
|
181
|
+
}
|
|
182
|
+
break;
|
|
183
|
+
}
|
|
184
|
+
case 'merge_fields': {
|
|
185
|
+
// Merge non-null fields from source into target
|
|
186
|
+
const merged = {
|
|
187
|
+
name: skill.name || existing.name,
|
|
188
|
+
description: skill.description || existing.description,
|
|
189
|
+
author: skill.author || existing.author,
|
|
190
|
+
repo_url: skill.repo_url || existing.repo_url,
|
|
191
|
+
quality_score: skill.quality_score !== null ? skill.quality_score : existing.quality_score,
|
|
192
|
+
trust_tier: skill.trust_tier !== 'unknown' ? skill.trust_tier : existing.trust_tier,
|
|
193
|
+
tags: skill.tags !== '[]' ? skill.tags : existing.tags,
|
|
194
|
+
updated_at: new Date(skill.updated_at) > new Date(existing.updated_at)
|
|
195
|
+
? skill.updated_at
|
|
196
|
+
: existing.updated_at,
|
|
197
|
+
source: skill.source || existing.source,
|
|
198
|
+
stars: skill.stars !== null ? skill.stars : existing.stars,
|
|
199
|
+
};
|
|
200
|
+
if (!options.dryRun) {
|
|
201
|
+
updateSkill.run(merged.name, merged.description, merged.author, merged.repo_url, merged.quality_score, merged.trust_tier, merged.tags, merged.updated_at, merged.source, merged.stars, skill.id);
|
|
202
|
+
}
|
|
203
|
+
conflict.resolution = 'updated';
|
|
204
|
+
result.skillsUpdated++;
|
|
205
|
+
break;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
result.conflicts.push(conflict);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
// Execute transaction (unless dry run)
|
|
213
|
+
if (!options.dryRun) {
|
|
214
|
+
transaction();
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
// Still run to collect stats, but rollback
|
|
218
|
+
try {
|
|
219
|
+
transaction();
|
|
220
|
+
}
|
|
221
|
+
catch {
|
|
222
|
+
// Dry run may fail on readonly, that's ok
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
result.duration = Date.now() - startTime;
|
|
226
|
+
return result;
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Get sync status from local database
|
|
230
|
+
* SMI-1452: Reports current sync state
|
|
231
|
+
*/
|
|
232
|
+
export function getSyncStatus(db) {
|
|
233
|
+
const config = db
|
|
234
|
+
.prepare('SELECT last_sync_at, next_sync_at FROM sync_config WHERE id = ?')
|
|
235
|
+
.get('default');
|
|
236
|
+
const skillCount = db.prepare('SELECT COUNT(*) as count FROM skills').get();
|
|
237
|
+
return {
|
|
238
|
+
lastSyncAt: config?.last_sync_at || null,
|
|
239
|
+
nextSyncAt: config?.next_sync_at || null,
|
|
240
|
+
skillsInLocal: skillCount.count,
|
|
241
|
+
pendingUploads: 0, // Would need change tracking to implement
|
|
242
|
+
pendingDownloads: 0,
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Update sync status after a sync operation
|
|
247
|
+
* SMI-1452: Records sync results
|
|
248
|
+
*/
|
|
249
|
+
export function updateSyncStatus(db, result) {
|
|
250
|
+
const now = new Date().toISOString();
|
|
251
|
+
const nextSync = new Date(Date.now() + 86400000).toISOString(); // Default: 24 hours
|
|
252
|
+
db.prepare(`
|
|
253
|
+
UPDATE sync_config SET
|
|
254
|
+
last_sync_at = ?,
|
|
255
|
+
next_sync_at = ?,
|
|
256
|
+
last_sync_count = ?,
|
|
257
|
+
last_sync_error = ?,
|
|
258
|
+
updated_at = ?
|
|
259
|
+
WHERE id = ?
|
|
260
|
+
`).run(now, nextSync, result.skillsAdded + result.skillsUpdated, result.error || null, now, 'default');
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Record a sync run in history
|
|
264
|
+
* SMI-1452: Tracks sync history for debugging
|
|
265
|
+
*/
|
|
266
|
+
export function recordSyncRun(db, status, result, error) {
|
|
267
|
+
const id = `sync_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
|
|
268
|
+
const now = new Date().toISOString();
|
|
269
|
+
db.prepare(`
|
|
270
|
+
INSERT INTO sync_history (id, started_at, completed_at, status, skills_added,
|
|
271
|
+
skills_updated, skills_unchanged, error_message, duration_ms)
|
|
272
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
273
|
+
`).run(id, now, status === 'running' ? null : now, status, result?.skillsAdded || 0, result?.skillsUpdated || 0, result?.skillsSkipped || 0, error || null, result?.duration || null);
|
|
274
|
+
return id;
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Get recent sync history
|
|
278
|
+
* SMI-1452: Returns sync history for monitoring
|
|
279
|
+
*/
|
|
280
|
+
export function getSyncHistory(db, limit = 10) {
|
|
281
|
+
return db
|
|
282
|
+
.prepare(`
|
|
283
|
+
SELECT * FROM sync_history
|
|
284
|
+
ORDER BY started_at DESC
|
|
285
|
+
LIMIT ?
|
|
286
|
+
`)
|
|
287
|
+
.all(limit);
|
|
288
|
+
}
|
|
289
|
+
//# sourceMappingURL=migration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration.js","sourceRoot":"","sources":["../../../src/db/migration.ts"],"names":[],"mappings":"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"}
|
package/dist/src/db/schema.d.ts
CHANGED
|
@@ -10,11 +10,11 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import type { Database as BetterSqliteDatabase } from 'better-sqlite3';
|
|
12
12
|
export type DatabaseType = BetterSqliteDatabase;
|
|
13
|
-
export declare const SCHEMA_VERSION =
|
|
13
|
+
export declare const SCHEMA_VERSION = 4;
|
|
14
14
|
/**
|
|
15
15
|
* SQL statements for creating the database schema
|
|
16
16
|
*/
|
|
17
|
-
export declare const SCHEMA_SQL = "\n-- Enable WAL mode for better concurrent performance\nPRAGMA journal_mode = WAL;\nPRAGMA synchronous = NORMAL;\nPRAGMA cache_size = -64000; -- 64MB cache\nPRAGMA temp_store = MEMORY;\n\n-- Schema version tracking\nCREATE TABLE IF NOT EXISTS schema_version (\n version INTEGER PRIMARY KEY,\n applied_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- Skills table - main storage for discovered skills\nCREATE TABLE IF NOT EXISTS skills (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n description TEXT,\n author TEXT,\n repo_url TEXT UNIQUE,\n quality_score REAL CHECK(quality_score IS NULL OR (quality_score >= 0 AND quality_score <= 1)),\n trust_tier TEXT CHECK(trust_tier IN ('verified', 'community', 'experimental', 'unknown')) DEFAULT 'unknown',\n tags TEXT DEFAULT '[]', -- JSON array of tags\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n updated_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- FTS5 virtual table for full-text search with BM25 ranking\nCREATE VIRTUAL TABLE IF NOT EXISTS skills_fts USING fts5(\n name,\n description,\n tags,\n author,\n content='skills',\n content_rowid='rowid',\n tokenize='porter unicode61'\n);\n\n-- Triggers to keep FTS index in sync with skills table\nCREATE TRIGGER IF NOT EXISTS skills_ai AFTER INSERT ON skills BEGIN\n INSERT INTO skills_fts(rowid, name, description, tags, author)\n VALUES (NEW.rowid, NEW.name, NEW.description, NEW.tags, NEW.author);\nEND;\n\nCREATE TRIGGER IF NOT EXISTS skills_ad AFTER DELETE ON skills BEGIN\n INSERT INTO skills_fts(skills_fts, rowid, name, description, tags, author)\n VALUES ('delete', OLD.rowid, OLD.name, OLD.description, OLD.tags, OLD.author);\nEND;\n\nCREATE TRIGGER IF NOT EXISTS skills_au AFTER UPDATE ON skills BEGIN\n INSERT INTO skills_fts(skills_fts, rowid, name, description, tags, author)\n VALUES ('delete', OLD.rowid, OLD.name, OLD.description, OLD.tags, OLD.author);\n INSERT INTO skills_fts(rowid, name, description, tags, author)\n VALUES (NEW.rowid, NEW.name, NEW.description, NEW.tags, NEW.author);\nEND;\n\n-- Sources table - tracks where skills are discovered from\nCREATE TABLE IF NOT EXISTS sources (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n type TEXT NOT NULL CHECK(type IN ('github', 'gitlab', 'local', 'registry')),\n url TEXT NOT NULL UNIQUE,\n last_sync_at TEXT,\n is_active INTEGER NOT NULL DEFAULT 1,\n created_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- Categories table - hierarchical organization of skills\nCREATE TABLE IF NOT EXISTS categories (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL UNIQUE,\n description TEXT,\n parent_id TEXT REFERENCES categories(id) ON DELETE SET NULL,\n skill_count INTEGER NOT NULL DEFAULT 0,\n created_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- Skill-Category junction table\nCREATE TABLE IF NOT EXISTS skill_categories (\n skill_id TEXT NOT NULL REFERENCES skills(id) ON DELETE CASCADE,\n category_id TEXT NOT NULL REFERENCES categories(id) ON DELETE CASCADE,\n PRIMARY KEY (skill_id, category_id)\n);\n\n-- Cache table for search results and API responses\nCREATE TABLE IF NOT EXISTS cache (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL,\n expires_at INTEGER, -- Unix timestamp, NULL for no expiry\n created_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- Indexes for common query patterns\nCREATE INDEX IF NOT EXISTS idx_skills_author ON skills(author);\nCREATE INDEX IF NOT EXISTS idx_skills_trust_tier ON skills(trust_tier);\nCREATE INDEX IF NOT EXISTS idx_skills_quality_score ON skills(quality_score);\nCREATE INDEX IF NOT EXISTS idx_skills_updated_at ON skills(updated_at);\nCREATE INDEX IF NOT EXISTS idx_skills_created_at ON skills(created_at);\nCREATE INDEX IF NOT EXISTS idx_sources_type ON sources(type);\nCREATE INDEX IF NOT EXISTS idx_sources_is_active ON sources(is_active);\nCREATE INDEX IF NOT EXISTS idx_categories_parent ON categories(parent_id);\nCREATE INDEX IF NOT EXISTS idx_cache_expires ON cache(expires_at);\n\n-- SMI-733: Audit logs table for security monitoring\n-- See: docs/security/index.md \u00A73 Audit Logging\nCREATE TABLE IF NOT EXISTS audit_logs (\n id TEXT PRIMARY KEY,\n event_type TEXT NOT NULL,\n timestamp TEXT NOT NULL DEFAULT (datetime('now')),\n actor TEXT,\n resource TEXT,\n action TEXT,\n result TEXT,\n metadata TEXT,\n created_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\nCREATE INDEX IF NOT EXISTS idx_audit_event_type ON audit_logs(event_type);\nCREATE INDEX IF NOT EXISTS idx_audit_timestamp ON audit_logs(timestamp);\nCREATE INDEX IF NOT EXISTS idx_audit_resource ON audit_logs(resource);\nCREATE INDEX IF NOT EXISTS idx_audit_result ON audit_logs(result);\nCREATE INDEX IF NOT EXISTS idx_audit_actor ON audit_logs(actor);\n";
|
|
17
|
+
export declare const SCHEMA_SQL = "\n-- Enable WAL mode for better concurrent performance\nPRAGMA journal_mode = WAL;\nPRAGMA synchronous = NORMAL;\nPRAGMA cache_size = -64000; -- 64MB cache\nPRAGMA temp_store = MEMORY;\n\n-- Schema version tracking\nCREATE TABLE IF NOT EXISTS schema_version (\n version INTEGER PRIMARY KEY,\n applied_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- Skills table - main storage for discovered skills\nCREATE TABLE IF NOT EXISTS skills (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n description TEXT,\n author TEXT,\n repo_url TEXT UNIQUE,\n quality_score REAL CHECK(quality_score IS NULL OR (quality_score >= 0 AND quality_score <= 1)),\n trust_tier TEXT CHECK(trust_tier IN ('verified', 'community', 'experimental', 'unknown')) DEFAULT 'unknown',\n tags TEXT DEFAULT '[]', -- JSON array of tags\n -- SMI-825: Security scan columns\n risk_score INTEGER CHECK(risk_score IS NULL OR (risk_score >= 0 AND risk_score <= 100)),\n security_findings_count INTEGER DEFAULT 0,\n security_scanned_at TEXT,\n security_passed INTEGER, -- boolean: 1 = passed, 0 = failed, NULL = not scanned\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n updated_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- FTS5 virtual table for full-text search with BM25 ranking\nCREATE VIRTUAL TABLE IF NOT EXISTS skills_fts USING fts5(\n name,\n description,\n tags,\n author,\n content='skills',\n content_rowid='rowid',\n tokenize='porter unicode61'\n);\n\n-- Triggers to keep FTS index in sync with skills table\nCREATE TRIGGER IF NOT EXISTS skills_ai AFTER INSERT ON skills BEGIN\n INSERT INTO skills_fts(rowid, name, description, tags, author)\n VALUES (NEW.rowid, NEW.name, NEW.description, NEW.tags, NEW.author);\nEND;\n\nCREATE TRIGGER IF NOT EXISTS skills_ad AFTER DELETE ON skills BEGIN\n INSERT INTO skills_fts(skills_fts, rowid, name, description, tags, author)\n VALUES ('delete', OLD.rowid, OLD.name, OLD.description, OLD.tags, OLD.author);\nEND;\n\nCREATE TRIGGER IF NOT EXISTS skills_au AFTER UPDATE ON skills BEGIN\n INSERT INTO skills_fts(skills_fts, rowid, name, description, tags, author)\n VALUES ('delete', OLD.rowid, OLD.name, OLD.description, OLD.tags, OLD.author);\n INSERT INTO skills_fts(rowid, name, description, tags, author)\n VALUES (NEW.rowid, NEW.name, NEW.description, NEW.tags, NEW.author);\nEND;\n\n-- Sources table - tracks where skills are discovered from\nCREATE TABLE IF NOT EXISTS sources (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n type TEXT NOT NULL CHECK(type IN ('github', 'gitlab', 'local', 'registry')),\n url TEXT NOT NULL UNIQUE,\n last_sync_at TEXT,\n is_active INTEGER NOT NULL DEFAULT 1,\n created_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- Categories table - hierarchical organization of skills\nCREATE TABLE IF NOT EXISTS categories (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL UNIQUE,\n description TEXT,\n parent_id TEXT REFERENCES categories(id) ON DELETE SET NULL,\n skill_count INTEGER NOT NULL DEFAULT 0,\n created_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- Skill-Category junction table\nCREATE TABLE IF NOT EXISTS skill_categories (\n skill_id TEXT NOT NULL REFERENCES skills(id) ON DELETE CASCADE,\n category_id TEXT NOT NULL REFERENCES categories(id) ON DELETE CASCADE,\n PRIMARY KEY (skill_id, category_id)\n);\n\n-- Cache table for search results and API responses\nCREATE TABLE IF NOT EXISTS cache (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL,\n expires_at INTEGER, -- Unix timestamp, NULL for no expiry\n created_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- Indexes for common query patterns\nCREATE INDEX IF NOT EXISTS idx_skills_author ON skills(author);\nCREATE INDEX IF NOT EXISTS idx_skills_trust_tier ON skills(trust_tier);\nCREATE INDEX IF NOT EXISTS idx_skills_quality_score ON skills(quality_score);\nCREATE INDEX IF NOT EXISTS idx_skills_updated_at ON skills(updated_at);\nCREATE INDEX IF NOT EXISTS idx_skills_created_at ON skills(created_at);\nCREATE INDEX IF NOT EXISTS idx_skills_risk_score ON skills(risk_score);\nCREATE INDEX IF NOT EXISTS idx_skills_security_passed ON skills(security_passed);\nCREATE INDEX IF NOT EXISTS idx_sources_type ON sources(type);\nCREATE INDEX IF NOT EXISTS idx_sources_is_active ON sources(is_active);\nCREATE INDEX IF NOT EXISTS idx_categories_parent ON categories(parent_id);\nCREATE INDEX IF NOT EXISTS idx_cache_expires ON cache(expires_at);\n\n-- SMI-733: Audit logs table for security monitoring\n-- See: docs/security/index.md \u00A73 Audit Logging\nCREATE TABLE IF NOT EXISTS audit_logs (\n id TEXT PRIMARY KEY,\n event_type TEXT NOT NULL,\n timestamp TEXT NOT NULL DEFAULT (datetime('now')),\n actor TEXT,\n resource TEXT,\n action TEXT,\n result TEXT,\n metadata TEXT,\n created_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\nCREATE INDEX IF NOT EXISTS idx_audit_event_type ON audit_logs(event_type);\nCREATE INDEX IF NOT EXISTS idx_audit_timestamp ON audit_logs(timestamp);\nCREATE INDEX IF NOT EXISTS idx_audit_resource ON audit_logs(resource);\nCREATE INDEX IF NOT EXISTS idx_audit_result ON audit_logs(result);\nCREATE INDEX IF NOT EXISTS idx_audit_actor ON audit_logs(actor);\n";
|
|
18
18
|
/**
|
|
19
19
|
* Migration definitions for schema upgrades
|
|
20
20
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/db/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,QAAQ,IAAI,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAEtE,MAAM,MAAM,YAAY,GAAG,oBAAoB,CAAA;AAE/C,eAAO,MAAM,cAAc,IAAI,CAAA;AAE/B;;GAEG;AACH,eAAO,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/db/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,QAAQ,IAAI,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAEtE,MAAM,MAAM,YAAY,GAAG,oBAAoB,CAAA;AAE/C,eAAO,MAAM,cAAc,IAAI,CAAA;AAE/B;;GAEG;AACH,eAAO,MAAM,UAAU,ykKAiItB,CAAA;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,eAAO,MAAM,UAAU,EAAE,SAAS,EA2EjC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB,wbAe9B,CAAA;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAMvD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,YAAY,GAAG,MAAM,CASzD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,YAAY,GAAG,MAAM,CAyBtD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,GAAE,MAAmB,GAAG,YAAY,CAUtE;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CA2BvD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,YAAY,GAAG,MAAM,CAqC1D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAEpD"}
|
package/dist/src/db/schema.js
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* - Indexes for common query patterns
|
|
10
10
|
*/
|
|
11
11
|
import Database from 'better-sqlite3';
|
|
12
|
-
export const SCHEMA_VERSION =
|
|
12
|
+
export const SCHEMA_VERSION = 4;
|
|
13
13
|
/**
|
|
14
14
|
* SQL statements for creating the database schema
|
|
15
15
|
*/
|
|
@@ -36,6 +36,11 @@ CREATE TABLE IF NOT EXISTS skills (
|
|
|
36
36
|
quality_score REAL CHECK(quality_score IS NULL OR (quality_score >= 0 AND quality_score <= 1)),
|
|
37
37
|
trust_tier TEXT CHECK(trust_tier IN ('verified', 'community', 'experimental', 'unknown')) DEFAULT 'unknown',
|
|
38
38
|
tags TEXT DEFAULT '[]', -- JSON array of tags
|
|
39
|
+
-- SMI-825: Security scan columns
|
|
40
|
+
risk_score INTEGER CHECK(risk_score IS NULL OR (risk_score >= 0 AND risk_score <= 100)),
|
|
41
|
+
security_findings_count INTEGER DEFAULT 0,
|
|
42
|
+
security_scanned_at TEXT,
|
|
43
|
+
security_passed INTEGER, -- boolean: 1 = passed, 0 = failed, NULL = not scanned
|
|
39
44
|
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
40
45
|
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
41
46
|
);
|
|
@@ -111,6 +116,8 @@ CREATE INDEX IF NOT EXISTS idx_skills_trust_tier ON skills(trust_tier);
|
|
|
111
116
|
CREATE INDEX IF NOT EXISTS idx_skills_quality_score ON skills(quality_score);
|
|
112
117
|
CREATE INDEX IF NOT EXISTS idx_skills_updated_at ON skills(updated_at);
|
|
113
118
|
CREATE INDEX IF NOT EXISTS idx_skills_created_at ON skills(created_at);
|
|
119
|
+
CREATE INDEX IF NOT EXISTS idx_skills_risk_score ON skills(risk_score);
|
|
120
|
+
CREATE INDEX IF NOT EXISTS idx_skills_security_passed ON skills(security_passed);
|
|
114
121
|
CREATE INDEX IF NOT EXISTS idx_sources_type ON sources(type);
|
|
115
122
|
CREATE INDEX IF NOT EXISTS idx_sources_is_active ON sources(is_active);
|
|
116
123
|
CREATE INDEX IF NOT EXISTS idx_categories_parent ON categories(parent_id);
|
|
@@ -154,6 +161,61 @@ ALTER TABLE skills ADD COLUMN source TEXT;
|
|
|
154
161
|
|
|
155
162
|
-- Add stars column if missing (from import scripts)
|
|
156
163
|
ALTER TABLE skills ADD COLUMN stars INTEGER;
|
|
164
|
+
`,
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
version: 3,
|
|
168
|
+
description: 'Registry sync tables for local-to-live synchronization',
|
|
169
|
+
sql: `
|
|
170
|
+
-- Sync configuration table (singleton pattern)
|
|
171
|
+
CREATE TABLE IF NOT EXISTS sync_config (
|
|
172
|
+
id TEXT PRIMARY KEY DEFAULT 'default',
|
|
173
|
+
enabled INTEGER NOT NULL DEFAULT 1,
|
|
174
|
+
frequency TEXT NOT NULL DEFAULT 'daily' CHECK(frequency IN ('daily', 'weekly')),
|
|
175
|
+
interval_ms INTEGER NOT NULL DEFAULT 86400000,
|
|
176
|
+
last_sync_at TEXT,
|
|
177
|
+
next_sync_at TEXT,
|
|
178
|
+
last_sync_count INTEGER DEFAULT 0,
|
|
179
|
+
last_sync_error TEXT,
|
|
180
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
181
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
182
|
+
);
|
|
183
|
+
|
|
184
|
+
-- Initialize default config if empty
|
|
185
|
+
INSERT OR IGNORE INTO sync_config (id) VALUES ('default');
|
|
186
|
+
|
|
187
|
+
-- Sync history table for tracking sync runs
|
|
188
|
+
CREATE TABLE IF NOT EXISTS sync_history (
|
|
189
|
+
id TEXT PRIMARY KEY,
|
|
190
|
+
started_at TEXT NOT NULL,
|
|
191
|
+
completed_at TEXT,
|
|
192
|
+
status TEXT NOT NULL DEFAULT 'running' CHECK(status IN ('running', 'success', 'failed', 'partial')),
|
|
193
|
+
skills_added INTEGER DEFAULT 0,
|
|
194
|
+
skills_updated INTEGER DEFAULT 0,
|
|
195
|
+
skills_unchanged INTEGER DEFAULT 0,
|
|
196
|
+
error_message TEXT,
|
|
197
|
+
duration_ms INTEGER,
|
|
198
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
199
|
+
);
|
|
200
|
+
|
|
201
|
+
-- Index for efficient history queries
|
|
202
|
+
CREATE INDEX IF NOT EXISTS idx_sync_history_started ON sync_history(started_at DESC);
|
|
203
|
+
CREATE INDEX IF NOT EXISTS idx_sync_history_status ON sync_history(status);
|
|
204
|
+
`,
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
version: 4,
|
|
208
|
+
description: 'SMI-825: Add security scan columns to skills table',
|
|
209
|
+
sql: `
|
|
210
|
+
-- Add security columns to skills table
|
|
211
|
+
ALTER TABLE skills ADD COLUMN risk_score INTEGER CHECK(risk_score IS NULL OR (risk_score >= 0 AND risk_score <= 100));
|
|
212
|
+
ALTER TABLE skills ADD COLUMN security_findings_count INTEGER DEFAULT 0;
|
|
213
|
+
ALTER TABLE skills ADD COLUMN security_scanned_at TEXT;
|
|
214
|
+
ALTER TABLE skills ADD COLUMN security_passed INTEGER;
|
|
215
|
+
|
|
216
|
+
-- Index for efficient security queries
|
|
217
|
+
CREATE INDEX IF NOT EXISTS idx_skills_risk_score ON skills(risk_score);
|
|
218
|
+
CREATE INDEX IF NOT EXISTS idx_skills_security_passed ON skills(security_passed);
|
|
157
219
|
`,
|
|
158
220
|
},
|
|
159
221
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/db/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAA;AAKrC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAA;AAE/B;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/db/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-1519: HNSW Embedding Store
|
|
3
|
+
*
|
|
4
|
+
* High-performance vector storage using HNSW index for fast ANN search.
|
|
5
|
+
* Uses claude-flow V3 VectorDB API with automatic fallback to brute-force.
|
|
6
|
+
*
|
|
7
|
+
* Enable via: SKILLSMITH_USE_HNSW=true
|
|
8
|
+
* @see ADR-009: Embedding Service Fallback Strategy
|
|
9
|
+
*/
|
|
10
|
+
import type { SimilarityResult } from './index.js';
|
|
11
|
+
export type { HierarchicalNSW, HNSWSearchResult, HierarchicalNSWConstructor, HNSWConfig, HNSWEmbeddingStoreOptions, HNSWIndexStats, BatchInsertResult, IEmbeddingStore, } from './hnsw-store.types.js';
|
|
12
|
+
export { DEFAULT_HNSW_CONFIG, HNSW_PRESETS } from './hnsw-store.types.js';
|
|
13
|
+
export { createHNSWStore, isHNSWAvailable, loadHNSWLib } from './hnsw-store.helpers.js';
|
|
14
|
+
import type { HNSWConfig, HNSWEmbeddingStoreOptions, HNSWIndexStats, BatchInsertResult, IEmbeddingStore } from './hnsw-store.types.js';
|
|
15
|
+
/**
|
|
16
|
+
* High-performance embedding storage using HNSW index.
|
|
17
|
+
* Provides O(log n) approximate nearest neighbor search with SQLite persistence.
|
|
18
|
+
*/
|
|
19
|
+
export declare class HNSWEmbeddingStore implements IEmbeddingStore {
|
|
20
|
+
private db;
|
|
21
|
+
private index;
|
|
22
|
+
private readonly hnswEnabled;
|
|
23
|
+
private readonly config;
|
|
24
|
+
private readonly maxElements;
|
|
25
|
+
private readonly indexPath;
|
|
26
|
+
private readonly distanceMetric;
|
|
27
|
+
private readonly autoSave;
|
|
28
|
+
private skillIdToLabel;
|
|
29
|
+
private labelToSkillId;
|
|
30
|
+
private nextLabel;
|
|
31
|
+
private vectorDB;
|
|
32
|
+
private initPromise;
|
|
33
|
+
constructor(options?: HNSWEmbeddingStoreOptions);
|
|
34
|
+
ensureInitialized(): Promise<void>;
|
|
35
|
+
storeEmbedding(skillId: string, embedding: Float32Array, text: string): void;
|
|
36
|
+
getEmbedding(skillId: string): Float32Array | null;
|
|
37
|
+
getAllEmbeddings(): Map<string, Float32Array>;
|
|
38
|
+
findSimilar(queryEmbedding: Float32Array, topK?: number): SimilarityResult[];
|
|
39
|
+
findSimilarAsync(queryEmbedding: Float32Array, topK?: number): Promise<SimilarityResult[]>;
|
|
40
|
+
cosineSimilarity(a: Float32Array, b: Float32Array): number;
|
|
41
|
+
isUsingFallback(): boolean;
|
|
42
|
+
close(): void;
|
|
43
|
+
getStats(): HNSWIndexStats;
|
|
44
|
+
batchInsert(embeddings: Array<{
|
|
45
|
+
skillId: string;
|
|
46
|
+
embedding: Float32Array;
|
|
47
|
+
text: string;
|
|
48
|
+
}>): BatchInsertResult;
|
|
49
|
+
removeEmbedding(skillId: string): boolean;
|
|
50
|
+
saveIndex(): void;
|
|
51
|
+
loadIndex(): void;
|
|
52
|
+
rebuildIndex(newConfig?: Partial<HNSWConfig>): Promise<void>;
|
|
53
|
+
setEfSearch(efSearch: number): void;
|
|
54
|
+
private initDatabase;
|
|
55
|
+
private initHNSWIndex;
|
|
56
|
+
private distanceToSimilarity;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=hnsw-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hnsw-store.d.ts","sourceRoot":"","sources":["../../../src/embeddings/hnsw-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAMlD,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,0BAA0B,EAC1B,UAAU,EACV,yBAAyB,EACzB,cAAc,EACd,iBAAiB,EACjB,eAAe,GAChB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAGzE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAGvF,OAAO,KAAK,EACV,UAAU,EACV,yBAAyB,EACzB,cAAc,EACd,iBAAiB,EACjB,eAAe,EAEhB,MAAM,uBAAuB,CAAA;AAI9B;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,eAAe;IACxD,OAAO,CAAC,EAAE,CAA4B;IACtC,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoB;IAC9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;IACvD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,cAAc,CAAiC;IACvD,OAAO,CAAC,cAAc,CAAiC;IACvD,OAAO,CAAC,SAAS,CAAI;IACrB,OAAO,CAAC,QAAQ,CAAwB;IACxC,OAAO,CAAC,WAAW,CAA6B;gBAEpC,OAAO,GAAE,yBAA8B;IAkB7C,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAsB5E,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAalD,gBAAgB,IAAI,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC;IAiB7C,WAAW,CAAC,cAAc,EAAE,YAAY,EAAE,IAAI,GAAE,MAAW,GAAG,gBAAgB,EAAE;IA0B1E,gBAAgB,CACpB,cAAc,EAAE,YAAY,EAC5B,IAAI,GAAE,MAAW,GAChB,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAgB9B,gBAAgB,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,MAAM;IAgB1D,eAAe,IAAI,OAAO;IAI1B,KAAK,IAAI,IAAI;IAOb,QAAQ,IAAI,cAAc;IA4B1B,WAAW,CACT,UAAU,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,YAAY,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,GAC5E,iBAAiB;IAqDpB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAmBzC,SAAS,IAAI,IAAI;IAKjB,SAAS,IAAI,IAAI;IAKX,YAAY,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBlE,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAOnC,OAAO,CAAC,YAAY;YAcN,aAAa;IAsC3B,OAAO,CAAC,oBAAoB;CAI7B"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HNSW Embedding Store Helper Functions
|
|
3
|
+
* @module @skillsmith/core/embeddings/hnsw-store.helpers
|
|
4
|
+
*/
|
|
5
|
+
import type { HierarchicalNSWConstructor, HNSWEmbeddingStoreOptions } from './hnsw-store.types.js';
|
|
6
|
+
import { HNSW_PRESETS } from './hnsw-store.types.js';
|
|
7
|
+
import { HNSWEmbeddingStore } from './hnsw-store.js';
|
|
8
|
+
/**
|
|
9
|
+
* Create an HNSWEmbeddingStore with a preset configuration.
|
|
10
|
+
*
|
|
11
|
+
* @param preset - Preset name ('small', 'medium', 'large', 'xlarge')
|
|
12
|
+
* @param options - Additional options (merged with preset)
|
|
13
|
+
* @returns Configured HNSWEmbeddingStore instance
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const store = createHNSWStore('large', {
|
|
18
|
+
* dbPath: './embeddings.db',
|
|
19
|
+
* indexPath: './embeddings.hnsw',
|
|
20
|
+
* });
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export declare function createHNSWStore(preset: keyof typeof HNSW_PRESETS, options?: Omit<HNSWEmbeddingStoreOptions, 'hnswConfig'>): HNSWEmbeddingStore;
|
|
24
|
+
/**
|
|
25
|
+
* Check if hnswlib-node is available.
|
|
26
|
+
* Useful for conditional logic or graceful degradation.
|
|
27
|
+
*
|
|
28
|
+
* @returns true if hnswlib-node can be loaded
|
|
29
|
+
*/
|
|
30
|
+
export declare function isHNSWAvailable(): Promise<boolean>;
|
|
31
|
+
/**
|
|
32
|
+
* Dynamically load hnswlib-node module.
|
|
33
|
+
*
|
|
34
|
+
* @returns The HierarchicalNSW constructor, or null if unavailable
|
|
35
|
+
* @internal
|
|
36
|
+
*/
|
|
37
|
+
export declare function loadHNSWLib(): Promise<{
|
|
38
|
+
HierarchicalNSW: HierarchicalNSWConstructor;
|
|
39
|
+
} | null>;
|
|
40
|
+
/**
|
|
41
|
+
* Compute cosine similarity between two embeddings.
|
|
42
|
+
* Standalone version for use outside of HNSWEmbeddingStore.
|
|
43
|
+
*
|
|
44
|
+
* @param a - First embedding
|
|
45
|
+
* @param b - Second embedding
|
|
46
|
+
* @returns Similarity score between -1 and 1
|
|
47
|
+
*/
|
|
48
|
+
export declare function computeCosineSimilarity(a: Float32Array, b: Float32Array): number;
|
|
49
|
+
/**
|
|
50
|
+
* Convert HNSW distance to similarity score.
|
|
51
|
+
* HNSW returns distances, we need similarities (higher = more similar).
|
|
52
|
+
*
|
|
53
|
+
* @param distance - Distance value from HNSW
|
|
54
|
+
* @param metric - Distance metric used
|
|
55
|
+
* @returns Similarity score
|
|
56
|
+
*/
|
|
57
|
+
export declare function distanceToSimilarity(distance: number, metric?: 'cosine' | 'l2' | 'ip'): number;
|
|
58
|
+
/**
|
|
59
|
+
* Estimate memory usage for an HNSW index.
|
|
60
|
+
*
|
|
61
|
+
* @param vectorCount - Number of vectors
|
|
62
|
+
* @param dimensions - Vector dimensionality
|
|
63
|
+
* @param m - HNSW M parameter
|
|
64
|
+
* @returns Estimated memory usage in bytes
|
|
65
|
+
*/
|
|
66
|
+
export declare function estimateMemoryUsage(vectorCount: number, dimensions: number, m: number): number;
|
|
67
|
+
/**
|
|
68
|
+
* Validate embedding dimensions.
|
|
69
|
+
*
|
|
70
|
+
* @param embedding - Embedding to validate
|
|
71
|
+
* @param expectedDimensions - Expected dimension count
|
|
72
|
+
* @param context - Context for error message (default: 'Query')
|
|
73
|
+
* @throws Error if dimensions don't match
|
|
74
|
+
*/
|
|
75
|
+
export declare function validateDimensions(embedding: Float32Array, expectedDimensions: number, context?: string): void;
|
|
76
|
+
/**
|
|
77
|
+
* Determine whether to use HNSW based on explicit option or environment.
|
|
78
|
+
*
|
|
79
|
+
* @param explicit - Explicit useHNSW option (if provided)
|
|
80
|
+
* @returns Whether to enable HNSW
|
|
81
|
+
*/
|
|
82
|
+
export declare function shouldUseHNSW(explicit?: boolean): boolean;
|
|
83
|
+
//# sourceMappingURL=hnsw-store.helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hnsw-store.helpers.d.ts","sourceRoot":"","sources":["../../../src/embeddings/hnsw-store.helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAA;AAClG,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAMpD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,OAAO,YAAY,EACjC,OAAO,GAAE,IAAI,CAAC,yBAAyB,EAAE,YAAY,CAAM,GAC1D,kBAAkB,CAKpB;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAOxD;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC;IAC3C,eAAe,EAAE,0BAA0B,CAAA;CAC5C,GAAG,IAAI,CAAC,CASR;AAMD;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,MAAM,CAiBhF;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,QAAQ,GAAG,IAAI,GAAG,IAAe,GACxC,MAAM,CAOR;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAI9F;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,YAAY,EACvB,kBAAkB,EAAE,MAAM,EAC1B,OAAO,GAAE,MAAgB,GACxB,IAAI,CAMN;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAYzD"}
|