@skillsmith/core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -0
- package/dist/src/__tests__/errors.test.d.ts +5 -0
- package/dist/src/__tests__/errors.test.d.ts.map +1 -0
- package/dist/src/__tests__/errors.test.js +115 -0
- package/dist/src/__tests__/errors.test.js.map +1 -0
- package/dist/src/activation/ActivationManager.d.ts +141 -0
- package/dist/src/activation/ActivationManager.d.ts.map +1 -0
- package/dist/src/activation/ActivationManager.js +282 -0
- package/dist/src/activation/ActivationManager.js.map +1 -0
- package/dist/src/activation/ZeroConfigActivator.d.ts +126 -0
- package/dist/src/activation/ZeroConfigActivator.d.ts.map +1 -0
- package/dist/src/activation/ZeroConfigActivator.js +259 -0
- package/dist/src/activation/ZeroConfigActivator.js.map +1 -0
- package/dist/src/activation/index.d.ts +8 -0
- package/dist/src/activation/index.d.ts.map +1 -0
- package/dist/src/activation/index.js +8 -0
- package/dist/src/activation/index.js.map +1 -0
- package/dist/src/analysis/CodebaseAnalyzer.d.ts +175 -0
- package/dist/src/analysis/CodebaseAnalyzer.d.ts.map +1 -0
- package/dist/src/analysis/CodebaseAnalyzer.js +495 -0
- package/dist/src/analysis/CodebaseAnalyzer.js.map +1 -0
- package/dist/src/analysis/index.d.ts +10 -0
- package/dist/src/analysis/index.d.ts.map +1 -0
- package/dist/src/analysis/index.js +10 -0
- package/dist/src/analysis/index.js.map +1 -0
- package/dist/src/analytics/AnalyticsRepository.d.ts +97 -0
- package/dist/src/analytics/AnalyticsRepository.d.ts.map +1 -0
- package/dist/src/analytics/AnalyticsRepository.js +376 -0
- package/dist/src/analytics/AnalyticsRepository.js.map +1 -0
- package/dist/src/analytics/ExperimentService.d.ts +70 -0
- package/dist/src/analytics/ExperimentService.d.ts.map +1 -0
- package/dist/src/analytics/ExperimentService.js +251 -0
- package/dist/src/analytics/ExperimentService.js.map +1 -0
- package/dist/src/analytics/ROIDashboardService.d.ts +55 -0
- package/dist/src/analytics/ROIDashboardService.d.ts.map +1 -0
- package/dist/src/analytics/ROIDashboardService.js +304 -0
- package/dist/src/analytics/ROIDashboardService.js.map +1 -0
- package/dist/src/analytics/UsageAnalyticsService.d.ts +55 -0
- package/dist/src/analytics/UsageAnalyticsService.d.ts.map +1 -0
- package/dist/src/analytics/UsageAnalyticsService.js +180 -0
- package/dist/src/analytics/UsageAnalyticsService.js.map +1 -0
- package/dist/src/analytics/anonymizer.d.ts +53 -0
- package/dist/src/analytics/anonymizer.d.ts.map +1 -0
- package/dist/src/analytics/anonymizer.js +107 -0
- package/dist/src/analytics/anonymizer.js.map +1 -0
- package/dist/src/analytics/constants.d.ts +19 -0
- package/dist/src/analytics/constants.d.ts.map +1 -0
- package/dist/src/analytics/constants.js +19 -0
- package/dist/src/analytics/constants.js.map +1 -0
- package/dist/src/analytics/index.d.ts +23 -0
- package/dist/src/analytics/index.d.ts.map +1 -0
- package/dist/src/analytics/index.js +23 -0
- package/dist/src/analytics/index.js.map +1 -0
- package/dist/src/analytics/metrics-aggregator.d.ts +98 -0
- package/dist/src/analytics/metrics-aggregator.d.ts.map +1 -0
- package/dist/src/analytics/metrics-aggregator.js +176 -0
- package/dist/src/analytics/metrics-aggregator.js.map +1 -0
- package/dist/src/analytics/metrics-exporter.d.ts +148 -0
- package/dist/src/analytics/metrics-exporter.d.ts.map +1 -0
- package/dist/src/analytics/metrics-exporter.js +244 -0
- package/dist/src/analytics/metrics-exporter.js.map +1 -0
- package/dist/src/analytics/schema.d.ts +20 -0
- package/dist/src/analytics/schema.d.ts.map +1 -0
- package/dist/src/analytics/schema.js +125 -0
- package/dist/src/analytics/schema.js.map +1 -0
- package/dist/src/analytics/storage.d.ts +76 -0
- package/dist/src/analytics/storage.d.ts.map +1 -0
- package/dist/src/analytics/storage.js +180 -0
- package/dist/src/analytics/storage.js.map +1 -0
- package/dist/src/analytics/types.d.ts +277 -0
- package/dist/src/analytics/types.d.ts.map +1 -0
- package/dist/src/analytics/types.js +10 -0
- package/dist/src/analytics/types.js.map +1 -0
- package/dist/src/analytics/usage-tracker.d.ts +132 -0
- package/dist/src/analytics/usage-tracker.d.ts.map +1 -0
- package/dist/src/analytics/usage-tracker.js +213 -0
- package/dist/src/analytics/usage-tracker.js.map +1 -0
- package/dist/src/benchmarks/BenchmarkRunner.d.ts +258 -0
- package/dist/src/benchmarks/BenchmarkRunner.d.ts.map +1 -0
- package/dist/src/benchmarks/BenchmarkRunner.js +453 -0
- package/dist/src/benchmarks/BenchmarkRunner.js.map +1 -0
- package/dist/src/benchmarks/IndexBenchmark.d.ts +101 -0
- package/dist/src/benchmarks/IndexBenchmark.d.ts.map +1 -0
- package/dist/src/benchmarks/IndexBenchmark.js +314 -0
- package/dist/src/benchmarks/IndexBenchmark.js.map +1 -0
- package/dist/src/benchmarks/MemoryProfiler.d.ts +266 -0
- package/dist/src/benchmarks/MemoryProfiler.d.ts.map +1 -0
- package/dist/src/benchmarks/MemoryProfiler.js +404 -0
- package/dist/src/benchmarks/MemoryProfiler.js.map +1 -0
- package/dist/src/benchmarks/SearchBenchmark.d.ts +71 -0
- package/dist/src/benchmarks/SearchBenchmark.d.ts.map +1 -0
- package/dist/src/benchmarks/SearchBenchmark.js +321 -0
- package/dist/src/benchmarks/SearchBenchmark.js.map +1 -0
- package/dist/src/benchmarks/cacheBenchmark.d.ts +75 -0
- package/dist/src/benchmarks/cacheBenchmark.d.ts.map +1 -0
- package/dist/src/benchmarks/cacheBenchmark.js +325 -0
- package/dist/src/benchmarks/cacheBenchmark.js.map +1 -0
- package/dist/src/benchmarks/cli.d.ts +17 -0
- package/dist/src/benchmarks/cli.d.ts.map +1 -0
- package/dist/src/benchmarks/cli.js +140 -0
- package/dist/src/benchmarks/cli.js.map +1 -0
- package/dist/src/benchmarks/embeddingBenchmark.d.ts +86 -0
- package/dist/src/benchmarks/embeddingBenchmark.d.ts.map +1 -0
- package/dist/src/benchmarks/embeddingBenchmark.js +329 -0
- package/dist/src/benchmarks/embeddingBenchmark.js.map +1 -0
- package/dist/src/benchmarks/index.d.ts +51 -0
- package/dist/src/benchmarks/index.d.ts.map +1 -0
- package/dist/src/benchmarks/index.js +201 -0
- package/dist/src/benchmarks/index.js.map +1 -0
- package/dist/src/benchmarks/stats.d.ts +56 -0
- package/dist/src/benchmarks/stats.d.ts.map +1 -0
- package/dist/src/benchmarks/stats.js +86 -0
- package/dist/src/benchmarks/stats.js.map +1 -0
- package/dist/src/cache/CacheEntry.d.ts +101 -0
- package/dist/src/cache/CacheEntry.d.ts.map +1 -0
- package/dist/src/cache/CacheEntry.js +238 -0
- package/dist/src/cache/CacheEntry.js.map +1 -0
- package/dist/src/cache/CacheManager.d.ts +167 -0
- package/dist/src/cache/CacheManager.d.ts.map +1 -0
- package/dist/src/cache/CacheManager.js +346 -0
- package/dist/src/cache/CacheManager.js.map +1 -0
- package/dist/src/cache/TieredCache.d.ts +97 -0
- package/dist/src/cache/TieredCache.d.ts.map +1 -0
- package/dist/src/cache/TieredCache.js +352 -0
- package/dist/src/cache/TieredCache.js.map +1 -0
- package/dist/src/cache/index.d.ts +63 -0
- package/dist/src/cache/index.d.ts.map +1 -0
- package/dist/src/cache/index.js +91 -0
- package/dist/src/cache/index.js.map +1 -0
- package/dist/src/cache/lru.d.ts +68 -0
- package/dist/src/cache/lru.d.ts.map +1 -0
- package/dist/src/cache/lru.js +105 -0
- package/dist/src/cache/lru.js.map +1 -0
- package/dist/src/cache/sqlite.d.ts +59 -0
- package/dist/src/cache/sqlite.d.ts.map +1 -0
- package/dist/src/cache/sqlite.js +159 -0
- package/dist/src/cache/sqlite.js.map +1 -0
- package/dist/src/db/quarantine-schema.d.ts +81 -0
- package/dist/src/db/quarantine-schema.d.ts.map +1 -0
- package/dist/src/db/quarantine-schema.js +110 -0
- package/dist/src/db/quarantine-schema.js.map +1 -0
- package/dist/src/db/schema.d.ts +65 -0
- package/dist/src/db/schema.d.ts.map +1 -0
- package/dist/src/db/schema.js +318 -0
- package/dist/src/db/schema.js.map +1 -0
- package/dist/src/embeddings/index.d.ts +158 -0
- package/dist/src/embeddings/index.d.ts.map +1 -0
- package/dist/src/embeddings/index.js +397 -0
- package/dist/src/embeddings/index.js.map +1 -0
- package/dist/src/errors/SkillsmithError.d.ts +118 -0
- package/dist/src/errors/SkillsmithError.d.ts.map +1 -0
- package/dist/src/errors/SkillsmithError.js +194 -0
- package/dist/src/errors/SkillsmithError.js.map +1 -0
- package/dist/src/errors/index.d.ts +36 -0
- package/dist/src/errors/index.d.ts.map +1 -0
- package/dist/src/errors/index.js +36 -0
- package/dist/src/errors/index.js.map +1 -0
- package/dist/src/errors.d.ts +72 -0
- package/dist/src/errors.d.ts.map +1 -0
- package/dist/src/errors.js +123 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/index.d.ts +56 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +73 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/index.test.d.ts +2 -0
- package/dist/src/index.test.d.ts.map +1 -0
- package/dist/src/index.test.js +35 -0
- package/dist/src/index.test.js.map +1 -0
- package/dist/src/indexer/GitHubIndexer.d.ts +107 -0
- package/dist/src/indexer/GitHubIndexer.d.ts.map +1 -0
- package/dist/src/indexer/GitHubIndexer.js +202 -0
- package/dist/src/indexer/GitHubIndexer.js.map +1 -0
- package/dist/src/indexer/PartitionStrategy.d.ts +115 -0
- package/dist/src/indexer/PartitionStrategy.d.ts.map +1 -0
- package/dist/src/indexer/PartitionStrategy.js +207 -0
- package/dist/src/indexer/PartitionStrategy.js.map +1 -0
- package/dist/src/indexer/SkillParser.d.ts +112 -0
- package/dist/src/indexer/SkillParser.d.ts.map +1 -0
- package/dist/src/indexer/SkillParser.js +281 -0
- package/dist/src/indexer/SkillParser.js.map +1 -0
- package/dist/src/indexer/SwarmIndexer.d.ts +163 -0
- package/dist/src/indexer/SwarmIndexer.d.ts.map +1 -0
- package/dist/src/indexer/SwarmIndexer.js +300 -0
- package/dist/src/indexer/SwarmIndexer.js.map +1 -0
- package/dist/src/indexer/index.d.ts +12 -0
- package/dist/src/indexer/index.d.ts.map +1 -0
- package/dist/src/indexer/index.js +16 -0
- package/dist/src/indexer/index.js.map +1 -0
- package/dist/src/learning/interfaces.d.ts +338 -0
- package/dist/src/learning/interfaces.d.ts.map +1 -0
- package/dist/src/learning/interfaces.js +13 -0
- package/dist/src/learning/interfaces.js.map +1 -0
- package/dist/src/learning/types.d.ts +284 -0
- package/dist/src/learning/types.d.ts.map +1 -0
- package/dist/src/learning/types.js +112 -0
- package/dist/src/learning/types.js.map +1 -0
- package/dist/src/matching/OverlapDetector.d.ts +152 -0
- package/dist/src/matching/OverlapDetector.d.ts.map +1 -0
- package/dist/src/matching/OverlapDetector.js +218 -0
- package/dist/src/matching/OverlapDetector.js.map +1 -0
- package/dist/src/matching/SkillMatcher.d.ts +125 -0
- package/dist/src/matching/SkillMatcher.d.ts.map +1 -0
- package/dist/src/matching/SkillMatcher.js +206 -0
- package/dist/src/matching/SkillMatcher.js.map +1 -0
- package/dist/src/matching/index.d.ts +14 -0
- package/dist/src/matching/index.d.ts.map +1 -0
- package/dist/src/matching/index.js +12 -0
- package/dist/src/matching/index.js.map +1 -0
- package/dist/src/pipeline/DailyIndexPipeline.d.ts +220 -0
- package/dist/src/pipeline/DailyIndexPipeline.d.ts.map +1 -0
- package/dist/src/pipeline/DailyIndexPipeline.js +320 -0
- package/dist/src/pipeline/DailyIndexPipeline.js.map +1 -0
- package/dist/src/pipeline/index.d.ts +9 -0
- package/dist/src/pipeline/index.d.ts.map +1 -0
- package/dist/src/pipeline/index.js +9 -0
- package/dist/src/pipeline/index.js.map +1 -0
- package/dist/src/repositories/CacheRepository.d.ts +60 -0
- package/dist/src/repositories/CacheRepository.d.ts.map +1 -0
- package/dist/src/repositories/CacheRepository.js +148 -0
- package/dist/src/repositories/CacheRepository.js.map +1 -0
- package/dist/src/repositories/IndexerRepository.d.ts +126 -0
- package/dist/src/repositories/IndexerRepository.d.ts.map +1 -0
- package/dist/src/repositories/IndexerRepository.js +270 -0
- package/dist/src/repositories/IndexerRepository.js.map +1 -0
- package/dist/src/repositories/QuarantineRepository.d.ts +255 -0
- package/dist/src/repositories/QuarantineRepository.d.ts.map +1 -0
- package/dist/src/repositories/QuarantineRepository.js +445 -0
- package/dist/src/repositories/QuarantineRepository.js.map +1 -0
- package/dist/src/repositories/SkillRepository.d.ts +78 -0
- package/dist/src/repositories/SkillRepository.d.ts.map +1 -0
- package/dist/src/repositories/SkillRepository.js +208 -0
- package/dist/src/repositories/SkillRepository.js.map +1 -0
- package/dist/src/scoring/QualityScorer.d.ts +188 -0
- package/dist/src/scoring/QualityScorer.d.ts.map +1 -0
- package/dist/src/scoring/QualityScorer.js +342 -0
- package/dist/src/scoring/QualityScorer.js.map +1 -0
- package/dist/src/scoring/index.d.ts +9 -0
- package/dist/src/scoring/index.d.ts.map +1 -0
- package/dist/src/scoring/index.js +9 -0
- package/dist/src/scoring/index.js.map +1 -0
- package/dist/src/scripts/__tests__/scan-imported-skills.test.d.ts +5 -0
- package/dist/src/scripts/__tests__/scan-imported-skills.test.d.ts.map +1 -0
- package/dist/src/scripts/__tests__/scan-imported-skills.test.js +365 -0
- package/dist/src/scripts/__tests__/scan-imported-skills.test.js.map +1 -0
- package/dist/src/scripts/import-github-skills.d.ts +24 -0
- package/dist/src/scripts/import-github-skills.d.ts.map +1 -0
- package/dist/src/scripts/import-github-skills.js +545 -0
- package/dist/src/scripts/import-github-skills.js.map +1 -0
- package/dist/src/scripts/import-to-database.d.ts +60 -0
- package/dist/src/scripts/import-to-database.d.ts.map +1 -0
- package/dist/src/scripts/import-to-database.js +307 -0
- package/dist/src/scripts/import-to-database.js.map +1 -0
- package/dist/src/scripts/scan-imported-skills.d.ts +15 -0
- package/dist/src/scripts/scan-imported-skills.d.ts.map +1 -0
- package/dist/src/scripts/scan-imported-skills.js +405 -0
- package/dist/src/scripts/scan-imported-skills.js.map +1 -0
- package/dist/src/scripts/validate-skills.d.ts +180 -0
- package/dist/src/scripts/validate-skills.d.ts.map +1 -0
- package/dist/src/scripts/validate-skills.js +572 -0
- package/dist/src/scripts/validate-skills.js.map +1 -0
- package/dist/src/search/hybrid.d.ts +85 -0
- package/dist/src/search/hybrid.d.ts.map +1 -0
- package/dist/src/search/hybrid.js +291 -0
- package/dist/src/search/hybrid.js.map +1 -0
- package/dist/src/search/index.d.ts +6 -0
- package/dist/src/search/index.d.ts.map +1 -0
- package/dist/src/search/index.js +5 -0
- package/dist/src/search/index.js.map +1 -0
- package/dist/src/security/AuditLogger.d.ts +197 -0
- package/dist/src/security/AuditLogger.d.ts.map +1 -0
- package/dist/src/security/AuditLogger.js +398 -0
- package/dist/src/security/AuditLogger.js.map +1 -0
- package/dist/src/security/RateLimiter.d.ts +337 -0
- package/dist/src/security/RateLimiter.d.ts.map +1 -0
- package/dist/src/security/RateLimiter.js +782 -0
- package/dist/src/security/RateLimiter.js.map +1 -0
- package/dist/src/security/__tests__/pathValidation.test.d.ts +8 -0
- package/dist/src/security/__tests__/pathValidation.test.d.ts.map +1 -0
- package/dist/src/security/__tests__/pathValidation.test.js +249 -0
- package/dist/src/security/__tests__/pathValidation.test.js.map +1 -0
- package/dist/src/security/index.d.ts +18 -0
- package/dist/src/security/index.d.ts.map +1 -0
- package/dist/src/security/index.js +14 -0
- package/dist/src/security/index.js.map +1 -0
- package/dist/src/security/pathValidation.d.ts +95 -0
- package/dist/src/security/pathValidation.d.ts.map +1 -0
- package/dist/src/security/pathValidation.js +216 -0
- package/dist/src/security/pathValidation.js.map +1 -0
- package/dist/src/security/sanitization.d.ts +123 -0
- package/dist/src/security/sanitization.d.ts.map +1 -0
- package/dist/src/security/sanitization.js +378 -0
- package/dist/src/security/sanitization.js.map +1 -0
- package/dist/src/security/scanner.d.ts +151 -0
- package/dist/src/security/scanner.d.ts.map +1 -0
- package/dist/src/security/scanner.js +599 -0
- package/dist/src/security/scanner.js.map +1 -0
- package/dist/src/services/SearchService.d.ts +88 -0
- package/dist/src/services/SearchService.d.ts.map +1 -0
- package/dist/src/services/SearchService.js +305 -0
- package/dist/src/services/SearchService.js.map +1 -0
- package/dist/src/session/SessionContext.d.ts +116 -0
- package/dist/src/session/SessionContext.d.ts.map +1 -0
- package/dist/src/session/SessionContext.js +134 -0
- package/dist/src/session/SessionContext.js.map +1 -0
- package/dist/src/session/SessionHealthMonitor.d.ts +249 -0
- package/dist/src/session/SessionHealthMonitor.d.ts.map +1 -0
- package/dist/src/session/SessionHealthMonitor.js +302 -0
- package/dist/src/session/SessionHealthMonitor.js.map +1 -0
- package/dist/src/session/SessionManager.d.ts +179 -0
- package/dist/src/session/SessionManager.d.ts.map +1 -0
- package/dist/src/session/SessionManager.js +451 -0
- package/dist/src/session/SessionManager.js.map +1 -0
- package/dist/src/session/SessionRecovery.d.ts +84 -0
- package/dist/src/session/SessionRecovery.d.ts.map +1 -0
- package/dist/src/session/SessionRecovery.js +257 -0
- package/dist/src/session/SessionRecovery.js.map +1 -0
- package/dist/src/session/index.d.ts +40 -0
- package/dist/src/session/index.d.ts.map +1 -0
- package/dist/src/session/index.js +44 -0
- package/dist/src/session/index.js.map +1 -0
- package/dist/src/sources/BaseSourceAdapter.d.ts +144 -0
- package/dist/src/sources/BaseSourceAdapter.d.ts.map +1 -0
- package/dist/src/sources/BaseSourceAdapter.js +287 -0
- package/dist/src/sources/BaseSourceAdapter.js.map +1 -0
- package/dist/src/sources/GitHubSourceAdapter.d.ts +98 -0
- package/dist/src/sources/GitHubSourceAdapter.d.ts.map +1 -0
- package/dist/src/sources/GitHubSourceAdapter.js +269 -0
- package/dist/src/sources/GitHubSourceAdapter.js.map +1 -0
- package/dist/src/sources/GitLabSourceAdapter.d.ts +102 -0
- package/dist/src/sources/GitLabSourceAdapter.d.ts.map +1 -0
- package/dist/src/sources/GitLabSourceAdapter.js +310 -0
- package/dist/src/sources/GitLabSourceAdapter.js.map +1 -0
- package/dist/src/sources/ISourceAdapter.d.ts +110 -0
- package/dist/src/sources/ISourceAdapter.d.ts.map +1 -0
- package/dist/src/sources/ISourceAdapter.js +19 -0
- package/dist/src/sources/ISourceAdapter.js.map +1 -0
- package/dist/src/sources/LocalFilesystemAdapter.d.ts +112 -0
- package/dist/src/sources/LocalFilesystemAdapter.d.ts.map +1 -0
- package/dist/src/sources/LocalFilesystemAdapter.js +340 -0
- package/dist/src/sources/LocalFilesystemAdapter.js.map +1 -0
- package/dist/src/sources/RawUrlSourceAdapter.d.ts +128 -0
- package/dist/src/sources/RawUrlSourceAdapter.d.ts.map +1 -0
- package/dist/src/sources/RawUrlSourceAdapter.js +282 -0
- package/dist/src/sources/RawUrlSourceAdapter.js.map +1 -0
- package/dist/src/sources/SourceAdapterRegistry.d.ts +156 -0
- package/dist/src/sources/SourceAdapterRegistry.d.ts.map +1 -0
- package/dist/src/sources/SourceAdapterRegistry.js +242 -0
- package/dist/src/sources/SourceAdapterRegistry.js.map +1 -0
- package/dist/src/sources/SourceIndexer.d.ts +119 -0
- package/dist/src/sources/SourceIndexer.d.ts.map +1 -0
- package/dist/src/sources/SourceIndexer.js +285 -0
- package/dist/src/sources/SourceIndexer.js.map +1 -0
- package/dist/src/sources/index.d.ts +45 -0
- package/dist/src/sources/index.d.ts.map +1 -0
- package/dist/src/sources/index.js +51 -0
- package/dist/src/sources/index.js.map +1 -0
- package/dist/src/sources/shared.d.ts +125 -0
- package/dist/src/sources/shared.d.ts.map +1 -0
- package/dist/src/sources/shared.js +191 -0
- package/dist/src/sources/shared.js.map +1 -0
- package/dist/src/sources/types.d.ts +204 -0
- package/dist/src/sources/types.d.ts.map +1 -0
- package/dist/src/sources/types.js +6 -0
- package/dist/src/sources/types.js.map +1 -0
- package/dist/src/telemetry/index.d.ts +25 -0
- package/dist/src/telemetry/index.d.ts.map +1 -0
- package/dist/src/telemetry/index.js +32 -0
- package/dist/src/telemetry/index.js.map +1 -0
- package/dist/src/telemetry/metrics.d.ts +171 -0
- package/dist/src/telemetry/metrics.d.ts.map +1 -0
- package/dist/src/telemetry/metrics.js +401 -0
- package/dist/src/telemetry/metrics.js.map +1 -0
- package/dist/src/telemetry/prometheus.d.ts +81 -0
- package/dist/src/telemetry/prometheus.d.ts.map +1 -0
- package/dist/src/telemetry/prometheus.js +252 -0
- package/dist/src/telemetry/prometheus.js.map +1 -0
- package/dist/src/telemetry/tracer.d.ts +151 -0
- package/dist/src/telemetry/tracer.d.ts.map +1 -0
- package/dist/src/telemetry/tracer.js +391 -0
- package/dist/src/telemetry/tracer.js.map +1 -0
- package/dist/src/triggers/ContextScorer.d.ts +118 -0
- package/dist/src/triggers/ContextScorer.d.ts.map +1 -0
- package/dist/src/triggers/ContextScorer.js +265 -0
- package/dist/src/triggers/ContextScorer.js.map +1 -0
- package/dist/src/triggers/TriggerDetector.d.ts +178 -0
- package/dist/src/triggers/TriggerDetector.d.ts.map +1 -0
- package/dist/src/triggers/TriggerDetector.js +390 -0
- package/dist/src/triggers/TriggerDetector.js.map +1 -0
- package/dist/src/triggers/__tests__/ContextScorer.test.d.ts +6 -0
- package/dist/src/triggers/__tests__/ContextScorer.test.d.ts.map +1 -0
- package/dist/src/triggers/__tests__/ContextScorer.test.js +307 -0
- package/dist/src/triggers/__tests__/ContextScorer.test.js.map +1 -0
- package/dist/src/triggers/__tests__/TriggerDetector.test.d.ts +6 -0
- package/dist/src/triggers/__tests__/TriggerDetector.test.d.ts.map +1 -0
- package/dist/src/triggers/__tests__/TriggerDetector.test.js +249 -0
- package/dist/src/triggers/__tests__/TriggerDetector.test.js.map +1 -0
- package/dist/src/triggers/index.d.ts +8 -0
- package/dist/src/triggers/index.d.ts.map +1 -0
- package/dist/src/triggers/index.js +8 -0
- package/dist/src/triggers/index.js.map +1 -0
- package/dist/src/types/skill.d.ts +80 -0
- package/dist/src/types/skill.d.ts.map +1 -0
- package/dist/src/types/skill.js +5 -0
- package/dist/src/types/skill.js.map +1 -0
- package/dist/src/types.d.ts +88 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +13 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/utils/index.d.ts +6 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/index.js +6 -0
- package/dist/src/utils/index.js.map +1 -0
- package/dist/src/utils/logger.d.ts +172 -0
- package/dist/src/utils/logger.d.ts.map +1 -0
- package/dist/src/utils/logger.js +291 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/dist/src/utils/retry.d.ts +97 -0
- package/dist/src/utils/retry.d.ts.map +1 -0
- package/dist/src/utils/retry.js +267 -0
- package/dist/src/utils/retry.js.map +1 -0
- package/dist/src/validation/index.d.ts +118 -0
- package/dist/src/validation/index.d.ts.map +1 -0
- package/dist/src/validation/index.js +434 -0
- package/dist/src/validation/index.js.map +1 -0
- package/dist/src/webhooks/WebhookHandler.d.ts +117 -0
- package/dist/src/webhooks/WebhookHandler.d.ts.map +1 -0
- package/dist/src/webhooks/WebhookHandler.js +349 -0
- package/dist/src/webhooks/WebhookHandler.js.map +1 -0
- package/dist/src/webhooks/WebhookPayload.d.ts +238 -0
- package/dist/src/webhooks/WebhookPayload.d.ts.map +1 -0
- package/dist/src/webhooks/WebhookPayload.js +244 -0
- package/dist/src/webhooks/WebhookPayload.js.map +1 -0
- package/dist/src/webhooks/WebhookQueue.d.ts +227 -0
- package/dist/src/webhooks/WebhookQueue.d.ts.map +1 -0
- package/dist/src/webhooks/WebhookQueue.js +328 -0
- package/dist/src/webhooks/WebhookQueue.js.map +1 -0
- package/dist/src/webhooks/index.d.ts +12 -0
- package/dist/src/webhooks/index.d.ts.map +1 -0
- package/dist/src/webhooks/index.js +15 -0
- package/dist/src/webhooks/index.js.map +1 -0
- package/dist/tests/Analytics.integration.test.d.ts +7 -0
- package/dist/tests/Analytics.integration.test.d.ts.map +1 -0
- package/dist/tests/Analytics.integration.test.js +367 -0
- package/dist/tests/Analytics.integration.test.js.map +1 -0
- package/dist/tests/AnalyticsRepository.test.d.ts +8 -0
- package/dist/tests/AnalyticsRepository.test.d.ts.map +1 -0
- package/dist/tests/AnalyticsRepository.test.js +399 -0
- package/dist/tests/AnalyticsRepository.test.js.map +1 -0
- package/dist/tests/AnalyticsStorage.test.d.ts +8 -0
- package/dist/tests/AnalyticsStorage.test.d.ts.map +1 -0
- package/dist/tests/AnalyticsStorage.test.js +271 -0
- package/dist/tests/AnalyticsStorage.test.js.map +1 -0
- package/dist/tests/AuditLogger.test.d.ts +8 -0
- package/dist/tests/AuditLogger.test.d.ts.map +1 -0
- package/dist/tests/AuditLogger.test.js +699 -0
- package/dist/tests/AuditLogger.test.js.map +1 -0
- package/dist/tests/BenchmarkRunner.test.d.ts +11 -0
- package/dist/tests/BenchmarkRunner.test.d.ts.map +1 -0
- package/dist/tests/BenchmarkRunner.test.js +641 -0
- package/dist/tests/BenchmarkRunner.test.js.map +1 -0
- package/dist/tests/CacheRepository.test.d.ts +5 -0
- package/dist/tests/CacheRepository.test.d.ts.map +1 -0
- package/dist/tests/CacheRepository.test.js +184 -0
- package/dist/tests/CacheRepository.test.js.map +1 -0
- package/dist/tests/CacheSecurity.test.d.ts +8 -0
- package/dist/tests/CacheSecurity.test.d.ts.map +1 -0
- package/dist/tests/CacheSecurity.test.js +273 -0
- package/dist/tests/CacheSecurity.test.js.map +1 -0
- package/dist/tests/CodebaseAnalyzer.test.d.ts +2 -0
- package/dist/tests/CodebaseAnalyzer.test.d.ts.map +1 -0
- package/dist/tests/CodebaseAnalyzer.test.js +347 -0
- package/dist/tests/CodebaseAnalyzer.test.js.map +1 -0
- package/dist/tests/DailyIndexPipeline.test.d.ts +7 -0
- package/dist/tests/DailyIndexPipeline.test.d.ts.map +1 -0
- package/dist/tests/DailyIndexPipeline.test.js +539 -0
- package/dist/tests/DailyIndexPipeline.test.js.map +1 -0
- package/dist/tests/EmbeddingService.test.d.ts +2 -0
- package/dist/tests/EmbeddingService.test.d.ts.map +1 -0
- package/dist/tests/EmbeddingService.test.js +252 -0
- package/dist/tests/EmbeddingService.test.js.map +1 -0
- package/dist/tests/ExperimentService.test.d.ts +7 -0
- package/dist/tests/ExperimentService.test.d.ts.map +1 -0
- package/dist/tests/ExperimentService.test.js +293 -0
- package/dist/tests/ExperimentService.test.js.map +1 -0
- package/dist/tests/GitHubIndexer.test.d.ts +10 -0
- package/dist/tests/GitHubIndexer.test.d.ts.map +1 -0
- package/dist/tests/GitHubIndexer.test.js +524 -0
- package/dist/tests/GitHubIndexer.test.js.map +1 -0
- package/dist/tests/GitHubSourceAdapter.test.d.ts +5 -0
- package/dist/tests/GitHubSourceAdapter.test.d.ts.map +1 -0
- package/dist/tests/GitHubSourceAdapter.test.js +385 -0
- package/dist/tests/GitHubSourceAdapter.test.js.map +1 -0
- package/dist/tests/MemoryProfiler.test.d.ts +12 -0
- package/dist/tests/MemoryProfiler.test.d.ts.map +1 -0
- package/dist/tests/MemoryProfiler.test.js +402 -0
- package/dist/tests/MemoryProfiler.test.js.map +1 -0
- package/dist/tests/OverlapDetector.test.d.ts +2 -0
- package/dist/tests/OverlapDetector.test.d.ts.map +1 -0
- package/dist/tests/OverlapDetector.test.js +340 -0
- package/dist/tests/OverlapDetector.test.js.map +1 -0
- package/dist/tests/QualityScorer.test.d.ts +7 -0
- package/dist/tests/QualityScorer.test.d.ts.map +1 -0
- package/dist/tests/QualityScorer.test.js +340 -0
- package/dist/tests/QualityScorer.test.js.map +1 -0
- package/dist/tests/QuarantineRepository.test.d.ts +7 -0
- package/dist/tests/QuarantineRepository.test.d.ts.map +1 -0
- package/dist/tests/QuarantineRepository.test.js +582 -0
- package/dist/tests/QuarantineRepository.test.js.map +1 -0
- package/dist/tests/ROIDashboardService.test.d.ts +7 -0
- package/dist/tests/ROIDashboardService.test.d.ts.map +1 -0
- package/dist/tests/ROIDashboardService.test.js +324 -0
- package/dist/tests/ROIDashboardService.test.js.map +1 -0
- package/dist/tests/RateLimiter.test.d.ts +7 -0
- package/dist/tests/RateLimiter.test.d.ts.map +1 -0
- package/dist/tests/RateLimiter.test.js +1017 -0
- package/dist/tests/RateLimiter.test.js.map +1 -0
- package/dist/tests/RawUrlSourceAdapter.security.test.d.ts +7 -0
- package/dist/tests/RawUrlSourceAdapter.security.test.d.ts.map +1 -0
- package/dist/tests/RawUrlSourceAdapter.security.test.js +455 -0
- package/dist/tests/RawUrlSourceAdapter.security.test.js.map +1 -0
- package/dist/tests/ScraperAdapters.test.d.ts +7 -0
- package/dist/tests/ScraperAdapters.test.d.ts.map +1 -0
- package/dist/tests/ScraperAdapters.test.js +748 -0
- package/dist/tests/ScraperAdapters.test.js.map +1 -0
- package/dist/tests/SearchQuality.test.d.ts +8 -0
- package/dist/tests/SearchQuality.test.d.ts.map +1 -0
- package/dist/tests/SearchQuality.test.js +397 -0
- package/dist/tests/SearchQuality.test.js.map +1 -0
- package/dist/tests/SearchService.test.d.ts +5 -0
- package/dist/tests/SearchService.test.d.ts.map +1 -0
- package/dist/tests/SearchService.test.js +218 -0
- package/dist/tests/SearchService.test.js.map +1 -0
- package/dist/tests/SecurityScanner.test.d.ts +6 -0
- package/dist/tests/SecurityScanner.test.d.ts.map +1 -0
- package/dist/tests/SecurityScanner.test.js +449 -0
- package/dist/tests/SecurityScanner.test.js.map +1 -0
- package/dist/tests/SessionHealthMonitor.test.d.ts +5 -0
- package/dist/tests/SessionHealthMonitor.test.d.ts.map +1 -0
- package/dist/tests/SessionHealthMonitor.test.js +449 -0
- package/dist/tests/SessionHealthMonitor.test.js.map +1 -0
- package/dist/tests/SessionManager.security.test.d.ts +10 -0
- package/dist/tests/SessionManager.security.test.d.ts.map +1 -0
- package/dist/tests/SessionManager.security.test.js +395 -0
- package/dist/tests/SessionManager.security.test.js.map +1 -0
- package/dist/tests/SessionManager.test.d.ts +8 -0
- package/dist/tests/SessionManager.test.d.ts.map +1 -0
- package/dist/tests/SessionManager.test.js +446 -0
- package/dist/tests/SessionManager.test.js.map +1 -0
- package/dist/tests/SkillMatcher.test.d.ts +2 -0
- package/dist/tests/SkillMatcher.test.d.ts.map +1 -0
- package/dist/tests/SkillMatcher.test.js +253 -0
- package/dist/tests/SkillMatcher.test.js.map +1 -0
- package/dist/tests/SkillRepository.test.d.ts +5 -0
- package/dist/tests/SkillRepository.test.d.ts.map +1 -0
- package/dist/tests/SkillRepository.test.js +237 -0
- package/dist/tests/SkillRepository.test.js.map +1 -0
- package/dist/tests/SwarmIndexer.test.d.ts +11 -0
- package/dist/tests/SwarmIndexer.test.d.ts.map +1 -0
- package/dist/tests/SwarmIndexer.test.js +374 -0
- package/dist/tests/SwarmIndexer.test.js.map +1 -0
- package/dist/tests/TieredCache.test.d.ts +7 -0
- package/dist/tests/TieredCache.test.d.ts.map +1 -0
- package/dist/tests/TieredCache.test.js +529 -0
- package/dist/tests/TieredCache.test.js.map +1 -0
- package/dist/tests/UsageAnalyticsService.test.d.ts +7 -0
- package/dist/tests/UsageAnalyticsService.test.d.ts.map +1 -0
- package/dist/tests/UsageAnalyticsService.test.js +238 -0
- package/dist/tests/UsageAnalyticsService.test.js.map +1 -0
- package/dist/tests/UsageTracker.test.d.ts +7 -0
- package/dist/tests/UsageTracker.test.d.ts.map +1 -0
- package/dist/tests/UsageTracker.test.js +196 -0
- package/dist/tests/UsageTracker.test.js.map +1 -0
- package/dist/tests/WebhookHandler.test.d.ts +10 -0
- package/dist/tests/WebhookHandler.test.d.ts.map +1 -0
- package/dist/tests/WebhookHandler.test.js +592 -0
- package/dist/tests/WebhookHandler.test.js.map +1 -0
- package/dist/tests/analytics/metrics-aggregator.test.d.ts +11 -0
- package/dist/tests/analytics/metrics-aggregator.test.d.ts.map +1 -0
- package/dist/tests/analytics/metrics-aggregator.test.js +273 -0
- package/dist/tests/analytics/metrics-aggregator.test.js.map +1 -0
- package/dist/tests/analytics/metrics-exporter.test.d.ts +11 -0
- package/dist/tests/analytics/metrics-exporter.test.d.ts.map +1 -0
- package/dist/tests/analytics/metrics-exporter.test.js +371 -0
- package/dist/tests/analytics/metrics-exporter.test.js.map +1 -0
- package/dist/tests/analytics/usage-tracker.test.d.ts +10 -0
- package/dist/tests/analytics/usage-tracker.test.d.ts.map +1 -0
- package/dist/tests/analytics/usage-tracker.test.js +151 -0
- package/dist/tests/analytics/usage-tracker.test.js.map +1 -0
- package/dist/tests/anonymizer.test.d.ts +8 -0
- package/dist/tests/anonymizer.test.d.ts.map +1 -0
- package/dist/tests/anonymizer.test.js +153 -0
- package/dist/tests/anonymizer.test.js.map +1 -0
- package/dist/tests/cache.test.d.ts +6 -0
- package/dist/tests/cache.test.d.ts.map +1 -0
- package/dist/tests/cache.test.js +170 -0
- package/dist/tests/cache.test.js.map +1 -0
- package/dist/tests/e2e/security/security.e2e.test.d.ts +8 -0
- package/dist/tests/e2e/security/security.e2e.test.d.ts.map +1 -0
- package/dist/tests/e2e/security/security.e2e.test.js +448 -0
- package/dist/tests/e2e/security/security.e2e.test.js.map +1 -0
- package/dist/tests/edge-cases/EdgeCases.test.d.ts +13 -0
- package/dist/tests/edge-cases/EdgeCases.test.d.ts.map +1 -0
- package/dist/tests/edge-cases/EdgeCases.test.js +844 -0
- package/dist/tests/edge-cases/EdgeCases.test.js.map +1 -0
- package/dist/tests/import-github-skills.test.d.ts +8 -0
- package/dist/tests/import-github-skills.test.d.ts.map +1 -0
- package/dist/tests/import-github-skills.test.js +390 -0
- package/dist/tests/import-github-skills.test.js.map +1 -0
- package/dist/tests/logger.test.d.ts +2 -0
- package/dist/tests/logger.test.d.ts.map +1 -0
- package/dist/tests/logger.test.js +417 -0
- package/dist/tests/logger.test.js.map +1 -0
- package/dist/tests/performance/LargeScalePerformance.test.d.ts +14 -0
- package/dist/tests/performance/LargeScalePerformance.test.d.ts.map +1 -0
- package/dist/tests/performance/LargeScalePerformance.test.js +558 -0
- package/dist/tests/performance/LargeScalePerformance.test.js.map +1 -0
- package/dist/tests/retry.test.d.ts +7 -0
- package/dist/tests/retry.test.d.ts.map +1 -0
- package/dist/tests/retry.test.js +302 -0
- package/dist/tests/retry.test.js.map +1 -0
- package/dist/tests/sanitization.test.d.ts +8 -0
- package/dist/tests/sanitization.test.d.ts.map +1 -0
- package/dist/tests/sanitization.test.js +413 -0
- package/dist/tests/sanitization.test.js.map +1 -0
- package/dist/tests/schema.test.d.ts +5 -0
- package/dist/tests/schema.test.d.ts.map +1 -0
- package/dist/tests/schema.test.js +167 -0
- package/dist/tests/schema.test.js.map +1 -0
- package/dist/tests/scripts/import-to-database.test.d.ts +11 -0
- package/dist/tests/scripts/import-to-database.test.d.ts.map +1 -0
- package/dist/tests/scripts/import-to-database.test.js +325 -0
- package/dist/tests/scripts/import-to-database.test.js.map +1 -0
- package/dist/tests/security/ContinuousSecurity.test.d.ts +6 -0
- package/dist/tests/security/ContinuousSecurity.test.d.ts.map +1 -0
- package/dist/tests/security/ContinuousSecurity.test.js +595 -0
- package/dist/tests/security/ContinuousSecurity.test.js.map +1 -0
- package/dist/tests/security/ReDoS.test.d.ts +8 -0
- package/dist/tests/security/ReDoS.test.d.ts.map +1 -0
- package/dist/tests/security/ReDoS.test.js +213 -0
- package/dist/tests/security/ReDoS.test.js.map +1 -0
- package/dist/tests/security.test.d.ts +5 -0
- package/dist/tests/security.test.d.ts.map +1 -0
- package/dist/tests/security.test.js +134 -0
- package/dist/tests/security.test.js.map +1 -0
- package/dist/tests/shared.test.d.ts +7 -0
- package/dist/tests/shared.test.d.ts.map +1 -0
- package/dist/tests/shared.test.js +480 -0
- package/dist/tests/shared.test.js.map +1 -0
- package/dist/tests/sources.test.d.ts +5 -0
- package/dist/tests/sources.test.d.ts.map +1 -0
- package/dist/tests/sources.test.js +369 -0
- package/dist/tests/sources.test.js.map +1 -0
- package/dist/tests/stats.test.d.ts +11 -0
- package/dist/tests/stats.test.d.ts.map +1 -0
- package/dist/tests/stats.test.js +124 -0
- package/dist/tests/stats.test.js.map +1 -0
- package/dist/tests/telemetry.test.d.ts +11 -0
- package/dist/tests/telemetry.test.d.ts.map +1 -0
- package/dist/tests/telemetry.test.js +424 -0
- package/dist/tests/telemetry.test.js.map +1 -0
- package/dist/tests/test-utils.d.ts +74 -0
- package/dist/tests/test-utils.d.ts.map +1 -0
- package/dist/tests/test-utils.js +98 -0
- package/dist/tests/test-utils.js.map +1 -0
- package/dist/tests/validate-skills.test.d.ts +5 -0
- package/dist/tests/validate-skills.test.d.ts.map +1 -0
- package/dist/tests/validate-skills.test.js +649 -0
- package/dist/tests/validate-skills.test.js.map +1 -0
- package/dist/tests/validation.test.d.ts +7 -0
- package/dist/tests/validation.test.d.ts.map +1 -0
- package/dist/tests/validation.test.js +495 -0
- package/dist/tests/validation.test.js.map +1 -0
- package/dist/tests/webhooks/WebhookHandler.idempotency.test.d.ts +8 -0
- package/dist/tests/webhooks/WebhookHandler.idempotency.test.d.ts.map +1 -0
- package/dist/tests/webhooks/WebhookHandler.idempotency.test.js +190 -0
- package/dist/tests/webhooks/WebhookHandler.idempotency.test.js.map +1 -0
- package/dist/tests/webhooks/WebhookPayload.security.test.d.ts +8 -0
- package/dist/tests/webhooks/WebhookPayload.security.test.d.ts.map +1 -0
- package/dist/tests/webhooks/WebhookPayload.security.test.js +204 -0
- package/dist/tests/webhooks/WebhookPayload.security.test.js.map +1 -0
- package/dist/vitest.config.d.ts +3 -0
- package/dist/vitest.config.d.ts.map +1 -0
- package/dist/vitest.config.js +13 -0
- package/dist/vitest.config.js.map +1 -0
- package/package.json +77 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitLab Source Adapter (SMI-591)
|
|
3
|
+
*
|
|
4
|
+
* Implements the ISourceAdapter interface for GitLab repositories.
|
|
5
|
+
* Provides search, repository metadata, and skill content fetching.
|
|
6
|
+
*/
|
|
7
|
+
import { BaseSourceAdapter } from './BaseSourceAdapter.js';
|
|
8
|
+
import type { SourceConfig, SourceLocation, SourceRepository, SourceSearchOptions, SourceSearchResult, SkillContent, SourceHealth } from './types.js';
|
|
9
|
+
/**
|
|
10
|
+
* GitLab Source Adapter
|
|
11
|
+
*
|
|
12
|
+
* Connects to GitLab API to search for and fetch skill repositories.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* const adapter = new GitLabSourceAdapter({
|
|
17
|
+
* id: 'gitlab',
|
|
18
|
+
* name: 'GitLab',
|
|
19
|
+
* type: 'gitlab',
|
|
20
|
+
* baseUrl: 'https://gitlab.com/api/v4',
|
|
21
|
+
* enabled: true,
|
|
22
|
+
* auth: {
|
|
23
|
+
* type: 'token',
|
|
24
|
+
* credentials: process.env.GITLAB_TOKEN
|
|
25
|
+
* }
|
|
26
|
+
* })
|
|
27
|
+
*
|
|
28
|
+
* await adapter.initialize()
|
|
29
|
+
* const result = await adapter.search({ topics: ['claude-skill'] })
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export declare class GitLabSourceAdapter extends BaseSourceAdapter {
|
|
33
|
+
private readonly apiBaseUrl;
|
|
34
|
+
constructor(config: SourceConfig);
|
|
35
|
+
/**
|
|
36
|
+
* Validate API access on initialization
|
|
37
|
+
*/
|
|
38
|
+
protected doInitialize(): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* Check GitLab API health
|
|
41
|
+
*/
|
|
42
|
+
protected doHealthCheck(): Promise<Partial<SourceHealth>>;
|
|
43
|
+
/**
|
|
44
|
+
* Search GitLab for skill repositories
|
|
45
|
+
*/
|
|
46
|
+
search(options?: SourceSearchOptions): Promise<SourceSearchResult>;
|
|
47
|
+
/**
|
|
48
|
+
* Get repository metadata by location
|
|
49
|
+
*/
|
|
50
|
+
getRepository(location: SourceLocation): Promise<SourceRepository>;
|
|
51
|
+
/**
|
|
52
|
+
* Fetch skill content from repository
|
|
53
|
+
*/
|
|
54
|
+
fetchSkillContent(location: SourceLocation): Promise<SkillContent>;
|
|
55
|
+
/**
|
|
56
|
+
* Check if skill file exists
|
|
57
|
+
*/
|
|
58
|
+
skillExists(location: SourceLocation): Promise<boolean>;
|
|
59
|
+
/**
|
|
60
|
+
* Get skill file SHA for change detection
|
|
61
|
+
*/
|
|
62
|
+
getSkillSha(location: SourceLocation): Promise<string | null>;
|
|
63
|
+
/**
|
|
64
|
+
* Paginated search with page number
|
|
65
|
+
*/
|
|
66
|
+
searchWithCursor(options: SourceSearchOptions, page: number): Promise<SourceSearchResult>;
|
|
67
|
+
/**
|
|
68
|
+
* Map GitLab API project to SourceRepository
|
|
69
|
+
*/
|
|
70
|
+
private mapApiProject;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Configuration for createGitLabAdapter factory
|
|
74
|
+
*/
|
|
75
|
+
export interface GitLabAdapterConfig {
|
|
76
|
+
/** Unique identifier for this source instance */
|
|
77
|
+
id: string;
|
|
78
|
+
/** Human-readable name */
|
|
79
|
+
name: string;
|
|
80
|
+
/** Whether this source is enabled */
|
|
81
|
+
enabled: boolean;
|
|
82
|
+
/** Base URL for API requests (default: https://gitlab.com/api/v4) */
|
|
83
|
+
baseUrl?: string;
|
|
84
|
+
/** Rate limiting configuration */
|
|
85
|
+
rateLimit?: {
|
|
86
|
+
maxRequests: number;
|
|
87
|
+
windowMs: number;
|
|
88
|
+
minDelayMs: number;
|
|
89
|
+
};
|
|
90
|
+
/** Authentication configuration */
|
|
91
|
+
auth?: {
|
|
92
|
+
type: 'token' | 'basic' | 'oauth' | 'none';
|
|
93
|
+
credentials?: string;
|
|
94
|
+
};
|
|
95
|
+
/** Additional source-specific options */
|
|
96
|
+
options?: Record<string, unknown>;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Factory function for creating GitLab adapters
|
|
100
|
+
*/
|
|
101
|
+
export declare function createGitLabAdapter(config: GitLabAdapterConfig): GitLabSourceAdapter;
|
|
102
|
+
//# sourceMappingURL=GitLabSourceAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GitLabSourceAdapter.d.ts","sourceRoot":"","sources":["../../../src/sources/GitLabSourceAdapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAQ1D,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACb,MAAM,YAAY,CAAA;AAoDnB;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,mBAAoB,SAAQ,iBAAiB;IACxD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;gBAEvB,MAAM,EAAE,YAAY;IAMhC;;OAEG;cACsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAQtD;;OAEG;cACa,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAuB/D;;OAEG;IACG,MAAM,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAkD5E;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAwBxE;;OAEG;IACG,iBAAiB,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC;IAsCxE;;OAEG;IACY,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAuBtE;;OAEG;IACY,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAwB5E;;OAEG;IACG,gBAAgB,CAAC,OAAO,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAoD/F;;OAEG;IACH,OAAO,CAAC,aAAa;CAsBtB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,iDAAiD;IACjD,EAAE,EAAE,MAAM,CAAA;IACV,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,qCAAqC;IACrC,OAAO,EAAE,OAAO,CAAA;IAChB,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,kCAAkC;IAClC,SAAS,CAAC,EAAE;QACV,WAAW,EAAE,MAAM,CAAA;QACnB,QAAQ,EAAE,MAAM,CAAA;QAChB,UAAU,EAAE,MAAM,CAAA;KACnB,CAAA;IACD,mCAAmC;IACnC,IAAI,CAAC,EAAE;QACL,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAA;QAC1C,WAAW,CAAC,EAAE,MAAM,CAAA;KACrB,CAAA;IACD,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAClC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,mBAAmB,CAMpF"}
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitLab Source Adapter (SMI-591)
|
|
3
|
+
*
|
|
4
|
+
* Implements the ISourceAdapter interface for GitLab repositories.
|
|
5
|
+
* Provides search, repository metadata, and skill content fetching.
|
|
6
|
+
*/
|
|
7
|
+
import { BaseSourceAdapter } from './BaseSourceAdapter.js';
|
|
8
|
+
import { validateUrl } from '../validation/index.js';
|
|
9
|
+
import { decodeBase64Content, isRateLimitStatus, SKILL_FILE_PATHS as SHARED_SKILL_FILE_PATHS, } from './shared.js';
|
|
10
|
+
import { ApiError } from '../errors/SkillsmithError.js';
|
|
11
|
+
import { createLogger } from '../utils/logger.js';
|
|
12
|
+
const log = createLogger('GitLabAdapter');
|
|
13
|
+
/**
|
|
14
|
+
* Default topics to search for skill repositories
|
|
15
|
+
*/
|
|
16
|
+
const DEFAULT_TOPICS = ['claude-code-skill', 'claude-code', 'claude-skill'];
|
|
17
|
+
/**
|
|
18
|
+
* Default skill file paths to check (use shared paths, SMI-879)
|
|
19
|
+
*/
|
|
20
|
+
const SKILL_FILE_PATHS = SHARED_SKILL_FILE_PATHS;
|
|
21
|
+
/**
|
|
22
|
+
* GitLab Source Adapter
|
|
23
|
+
*
|
|
24
|
+
* Connects to GitLab API to search for and fetch skill repositories.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* const adapter = new GitLabSourceAdapter({
|
|
29
|
+
* id: 'gitlab',
|
|
30
|
+
* name: 'GitLab',
|
|
31
|
+
* type: 'gitlab',
|
|
32
|
+
* baseUrl: 'https://gitlab.com/api/v4',
|
|
33
|
+
* enabled: true,
|
|
34
|
+
* auth: {
|
|
35
|
+
* type: 'token',
|
|
36
|
+
* credentials: process.env.GITLAB_TOKEN
|
|
37
|
+
* }
|
|
38
|
+
* })
|
|
39
|
+
*
|
|
40
|
+
* await adapter.initialize()
|
|
41
|
+
* const result = await adapter.search({ topics: ['claude-skill'] })
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export class GitLabSourceAdapter extends BaseSourceAdapter {
|
|
45
|
+
apiBaseUrl;
|
|
46
|
+
constructor(config) {
|
|
47
|
+
super(config);
|
|
48
|
+
this.apiBaseUrl = config.baseUrl || 'https://gitlab.com/api/v4';
|
|
49
|
+
validateUrl(this.apiBaseUrl);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Validate API access on initialization
|
|
53
|
+
*/
|
|
54
|
+
async doInitialize() {
|
|
55
|
+
// Validate API access on initialization
|
|
56
|
+
const health = await this.doHealthCheck();
|
|
57
|
+
if (!health.healthy) {
|
|
58
|
+
log.warn(`API health check warning: ${health.error ?? 'unknown issue'}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Check GitLab API health
|
|
63
|
+
*/
|
|
64
|
+
async doHealthCheck() {
|
|
65
|
+
const response = await this.fetchWithRateLimit(`${this.apiBaseUrl}/version`);
|
|
66
|
+
if (!response.ok) {
|
|
67
|
+
return {
|
|
68
|
+
healthy: false,
|
|
69
|
+
error: `GitLab API returned ${response.status}`,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
// Check rate limit headers
|
|
73
|
+
const rateLimitRemaining = response.headers.get('ratelimit-remaining');
|
|
74
|
+
const rateLimitReset = response.headers.get('ratelimit-reset');
|
|
75
|
+
return {
|
|
76
|
+
healthy: true,
|
|
77
|
+
rateLimitRemaining: rateLimitRemaining ? parseInt(rateLimitRemaining, 10) : undefined,
|
|
78
|
+
rateLimitReset: rateLimitReset
|
|
79
|
+
? new Date(parseInt(rateLimitReset, 10) * 1000).toISOString()
|
|
80
|
+
: undefined,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Search GitLab for skill repositories
|
|
85
|
+
*/
|
|
86
|
+
async search(options = {}) {
|
|
87
|
+
await this.waitForRateLimit();
|
|
88
|
+
const topics = options.topics ?? DEFAULT_TOPICS;
|
|
89
|
+
const limit = options.limit ?? 100;
|
|
90
|
+
const perPage = Math.min(limit, 100);
|
|
91
|
+
// Build search URL - GitLab uses separate topic parameter
|
|
92
|
+
const params = new URLSearchParams({
|
|
93
|
+
per_page: String(perPage),
|
|
94
|
+
order_by: 'last_activity_at',
|
|
95
|
+
sort: 'desc',
|
|
96
|
+
topics: topics.join(','),
|
|
97
|
+
});
|
|
98
|
+
if (options.query) {
|
|
99
|
+
params.set('search', options.query);
|
|
100
|
+
}
|
|
101
|
+
const url = `${this.apiBaseUrl}/projects?${params}`;
|
|
102
|
+
const response = await this.fetchWithRateLimit(url);
|
|
103
|
+
if (!response.ok) {
|
|
104
|
+
if (isRateLimitStatus(response.status)) {
|
|
105
|
+
throw new ApiError('GitLab API rate limit exceeded', {
|
|
106
|
+
statusCode: response.status,
|
|
107
|
+
url,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
throw new ApiError(`GitLab API error: ${response.status}`, {
|
|
111
|
+
statusCode: response.status,
|
|
112
|
+
url,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
const data = (await response.json());
|
|
116
|
+
const repositories = data.map((item) => this.mapApiProject(item));
|
|
117
|
+
// Check pagination headers
|
|
118
|
+
const totalHeader = response.headers.get('x-total');
|
|
119
|
+
const totalCount = totalHeader ? parseInt(totalHeader, 10) : data.length;
|
|
120
|
+
return {
|
|
121
|
+
repositories,
|
|
122
|
+
totalCount,
|
|
123
|
+
hasMore: totalCount > perPage,
|
|
124
|
+
nextCursor: perPage < totalCount ? '2' : undefined,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Get repository metadata by location
|
|
129
|
+
*/
|
|
130
|
+
async getRepository(location) {
|
|
131
|
+
await this.waitForRateLimit();
|
|
132
|
+
const projectPath = encodeURIComponent(`${location.owner}/${location.repo}`);
|
|
133
|
+
const url = `${this.apiBaseUrl}/projects/${projectPath}`;
|
|
134
|
+
const response = await this.fetchWithRateLimit(url);
|
|
135
|
+
if (!response.ok) {
|
|
136
|
+
if (response.status === 404) {
|
|
137
|
+
throw new ApiError(`Repository not found: ${location.owner}/${location.repo}`, {
|
|
138
|
+
statusCode: 404,
|
|
139
|
+
url,
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
throw new ApiError(`GitLab API error: ${response.status}`, {
|
|
143
|
+
statusCode: response.status,
|
|
144
|
+
url,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
const data = (await response.json());
|
|
148
|
+
return this.mapApiProject(data);
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Fetch skill content from repository
|
|
152
|
+
*/
|
|
153
|
+
async fetchSkillContent(location) {
|
|
154
|
+
await this.waitForRateLimit();
|
|
155
|
+
const branch = this.getDefaultBranch(location);
|
|
156
|
+
const paths = location.path ? [location.path] : SKILL_FILE_PATHS;
|
|
157
|
+
const projectPath = encodeURIComponent(`${location.owner}/${location.repo}`);
|
|
158
|
+
// Try each possible skill file path
|
|
159
|
+
for (const path of paths) {
|
|
160
|
+
try {
|
|
161
|
+
const filePath = encodeURIComponent(path);
|
|
162
|
+
const url = `${this.apiBaseUrl}/projects/${projectPath}/repository/files/${filePath}?ref=${branch}`;
|
|
163
|
+
const response = await this.fetchWithRateLimit(url);
|
|
164
|
+
if (response.ok) {
|
|
165
|
+
const data = (await response.json());
|
|
166
|
+
// SMI-879: Use shared decodeBase64Content utility
|
|
167
|
+
const rawContent = decodeBase64Content(data.content, data.encoding);
|
|
168
|
+
return {
|
|
169
|
+
rawContent,
|
|
170
|
+
sha: data.content_sha256,
|
|
171
|
+
location,
|
|
172
|
+
filePath: data.file_path,
|
|
173
|
+
encoding: 'utf-8',
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
// Try next path
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
throw new Error(`No skill file found in ${location.owner}/${location.repo}. Searched: ${paths.join(', ')}`);
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Check if skill file exists
|
|
186
|
+
*/
|
|
187
|
+
async skillExists(location) {
|
|
188
|
+
const paths = location.path ? [location.path] : SKILL_FILE_PATHS;
|
|
189
|
+
const branch = this.getDefaultBranch(location);
|
|
190
|
+
const projectPath = encodeURIComponent(`${location.owner}/${location.repo}`);
|
|
191
|
+
for (const path of paths) {
|
|
192
|
+
try {
|
|
193
|
+
await this.waitForRateLimit();
|
|
194
|
+
const filePath = encodeURIComponent(path);
|
|
195
|
+
const url = `${this.apiBaseUrl}/projects/${projectPath}/repository/files/${filePath}?ref=${branch}`;
|
|
196
|
+
const response = await this.fetchWithRateLimit(url, { method: 'HEAD' });
|
|
197
|
+
if (response.ok) {
|
|
198
|
+
return true;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
continue;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return false;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Get skill file SHA for change detection
|
|
209
|
+
*/
|
|
210
|
+
async getSkillSha(location) {
|
|
211
|
+
const paths = location.path ? [location.path] : SKILL_FILE_PATHS;
|
|
212
|
+
const branch = this.getDefaultBranch(location);
|
|
213
|
+
const projectPath = encodeURIComponent(`${location.owner}/${location.repo}`);
|
|
214
|
+
for (const path of paths) {
|
|
215
|
+
try {
|
|
216
|
+
await this.waitForRateLimit();
|
|
217
|
+
const filePath = encodeURIComponent(path);
|
|
218
|
+
const url = `${this.apiBaseUrl}/projects/${projectPath}/repository/files/${filePath}?ref=${branch}`;
|
|
219
|
+
const response = await this.fetchWithRateLimit(url);
|
|
220
|
+
if (response.ok) {
|
|
221
|
+
const data = (await response.json());
|
|
222
|
+
return data.content_sha256;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
continue;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
return null;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Paginated search with page number
|
|
233
|
+
*/
|
|
234
|
+
async searchWithCursor(options, page) {
|
|
235
|
+
await this.waitForRateLimit();
|
|
236
|
+
const topics = options.topics ?? DEFAULT_TOPICS;
|
|
237
|
+
const perPage = Math.min(options.limit ?? 30, 100);
|
|
238
|
+
const params = new URLSearchParams({
|
|
239
|
+
per_page: String(perPage),
|
|
240
|
+
page: String(page),
|
|
241
|
+
order_by: 'last_activity_at',
|
|
242
|
+
sort: 'desc',
|
|
243
|
+
topics: topics.join(','),
|
|
244
|
+
});
|
|
245
|
+
if (options.query) {
|
|
246
|
+
params.set('search', options.query);
|
|
247
|
+
}
|
|
248
|
+
const url = `${this.apiBaseUrl}/projects?${params}`;
|
|
249
|
+
const response = await this.fetchWithRateLimit(url);
|
|
250
|
+
if (!response.ok) {
|
|
251
|
+
if (isRateLimitStatus(response.status)) {
|
|
252
|
+
throw new ApiError('GitLab API rate limit exceeded', {
|
|
253
|
+
statusCode: response.status,
|
|
254
|
+
url,
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
throw new ApiError(`GitLab API error: ${response.status}`, {
|
|
258
|
+
statusCode: response.status,
|
|
259
|
+
url,
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
const data = (await response.json());
|
|
263
|
+
const repositories = data.map((item) => this.mapApiProject(item));
|
|
264
|
+
const totalHeader = response.headers.get('x-total');
|
|
265
|
+
const totalPagesHeader = response.headers.get('x-total-pages');
|
|
266
|
+
const totalCount = totalHeader ? parseInt(totalHeader, 10) : data.length;
|
|
267
|
+
const totalPages = totalPagesHeader ? parseInt(totalPagesHeader, 10) : 1;
|
|
268
|
+
const hasMore = page < totalPages;
|
|
269
|
+
return {
|
|
270
|
+
repositories,
|
|
271
|
+
totalCount,
|
|
272
|
+
hasMore,
|
|
273
|
+
nextCursor: hasMore ? String(page + 1) : undefined,
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Map GitLab API project to SourceRepository
|
|
278
|
+
*/
|
|
279
|
+
mapApiProject(item) {
|
|
280
|
+
return {
|
|
281
|
+
id: String(item.id),
|
|
282
|
+
name: item.name,
|
|
283
|
+
url: item.web_url,
|
|
284
|
+
description: item.description,
|
|
285
|
+
owner: item.namespace.path,
|
|
286
|
+
defaultBranch: item.default_branch,
|
|
287
|
+
stars: item.star_count,
|
|
288
|
+
forks: item.forks_count,
|
|
289
|
+
topics: item.topics || [],
|
|
290
|
+
updatedAt: item.last_activity_at,
|
|
291
|
+
createdAt: item.created_at,
|
|
292
|
+
license: item.license?.key ?? null,
|
|
293
|
+
metadata: {
|
|
294
|
+
fullPath: item.path_with_namespace,
|
|
295
|
+
namespace: item.namespace.name,
|
|
296
|
+
},
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Factory function for creating GitLab adapters
|
|
302
|
+
*/
|
|
303
|
+
export function createGitLabAdapter(config) {
|
|
304
|
+
return new GitLabSourceAdapter({
|
|
305
|
+
...config,
|
|
306
|
+
type: 'gitlab',
|
|
307
|
+
baseUrl: config.baseUrl ?? 'https://gitlab.com/api/v4',
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
//# sourceMappingURL=GitLabSourceAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GitLabSourceAdapter.js","sourceRoot":"","sources":["../../../src/sources/GitLabSourceAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Source Adapter Interface
|
|
3
|
+
* Defines the contract for all skill source adapters
|
|
4
|
+
*/
|
|
5
|
+
import type { SourceConfig, SourceLocation, SourceRepository, SourceSearchOptions, SourceSearchResult, SkillContent, SourceHealth } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Interface for skill source adapters
|
|
8
|
+
*
|
|
9
|
+
* Implementations provide access to different skill sources:
|
|
10
|
+
* - GitHub repositories
|
|
11
|
+
* - GitLab repositories
|
|
12
|
+
* - Local filesystem
|
|
13
|
+
* - Custom registries
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const adapter = new GitHubSourceAdapter({
|
|
18
|
+
* id: 'github-main',
|
|
19
|
+
* name: 'GitHub',
|
|
20
|
+
* type: 'github',
|
|
21
|
+
* baseUrl: 'https://api.github.com',
|
|
22
|
+
* enabled: true
|
|
23
|
+
* })
|
|
24
|
+
*
|
|
25
|
+
* const results = await adapter.search({ topics: ['claude-skill'] })
|
|
26
|
+
* for (const repo of results.repositories) {
|
|
27
|
+
* const content = await adapter.fetchSkillContent({ owner: repo.owner, repo: repo.name })
|
|
28
|
+
* // Process content...
|
|
29
|
+
* }
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export interface ISourceAdapter {
|
|
33
|
+
/**
|
|
34
|
+
* Source configuration
|
|
35
|
+
*/
|
|
36
|
+
readonly config: SourceConfig;
|
|
37
|
+
/**
|
|
38
|
+
* Unique identifier for this adapter instance
|
|
39
|
+
*/
|
|
40
|
+
readonly id: string;
|
|
41
|
+
/**
|
|
42
|
+
* Human-readable name
|
|
43
|
+
*/
|
|
44
|
+
readonly name: string;
|
|
45
|
+
/**
|
|
46
|
+
* Source type identifier
|
|
47
|
+
*/
|
|
48
|
+
readonly type: string;
|
|
49
|
+
/**
|
|
50
|
+
* Initialize the adapter
|
|
51
|
+
* Called once before first use
|
|
52
|
+
*
|
|
53
|
+
* @returns Promise that resolves when initialization is complete
|
|
54
|
+
* @throws Error if initialization fails
|
|
55
|
+
*/
|
|
56
|
+
initialize(): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* Check if the source is healthy and reachable
|
|
59
|
+
*
|
|
60
|
+
* @returns Health status of the source
|
|
61
|
+
*/
|
|
62
|
+
checkHealth(): Promise<SourceHealth>;
|
|
63
|
+
/**
|
|
64
|
+
* Search for repositories containing skills
|
|
65
|
+
*
|
|
66
|
+
* @param options - Search options (query, filters, pagination)
|
|
67
|
+
* @returns Search results with repositories
|
|
68
|
+
*/
|
|
69
|
+
search(options: SourceSearchOptions): Promise<SourceSearchResult>;
|
|
70
|
+
/**
|
|
71
|
+
* Get repository information
|
|
72
|
+
*
|
|
73
|
+
* @param location - Repository location (owner, repo)
|
|
74
|
+
* @returns Repository metadata
|
|
75
|
+
* @throws Error if repository not found
|
|
76
|
+
*/
|
|
77
|
+
getRepository(location: SourceLocation): Promise<SourceRepository>;
|
|
78
|
+
/**
|
|
79
|
+
* Fetch raw skill content from a repository
|
|
80
|
+
*
|
|
81
|
+
* @param location - Skill location (owner, repo, path)
|
|
82
|
+
* @returns Skill content with metadata
|
|
83
|
+
* @throws Error if skill file not found
|
|
84
|
+
*/
|
|
85
|
+
fetchSkillContent(location: SourceLocation): Promise<SkillContent>;
|
|
86
|
+
/**
|
|
87
|
+
* Check if a skill exists at the given location
|
|
88
|
+
*
|
|
89
|
+
* @param location - Skill location to check
|
|
90
|
+
* @returns True if skill exists
|
|
91
|
+
*/
|
|
92
|
+
skillExists(location: SourceLocation): Promise<boolean>;
|
|
93
|
+
/**
|
|
94
|
+
* Get the SHA/hash of a skill file for change detection
|
|
95
|
+
*
|
|
96
|
+
* @param location - Skill location
|
|
97
|
+
* @returns SHA hash of the file, or null if not found
|
|
98
|
+
*/
|
|
99
|
+
getSkillSha(location: SourceLocation): Promise<string | null>;
|
|
100
|
+
/**
|
|
101
|
+
* Dispose of any resources held by the adapter
|
|
102
|
+
* Called when the adapter is no longer needed
|
|
103
|
+
*/
|
|
104
|
+
dispose(): Promise<void>;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Type guard to check if an object implements ISourceAdapter
|
|
108
|
+
*/
|
|
109
|
+
export declare function isSourceAdapter(obj: unknown): obj is ISourceAdapter;
|
|
110
|
+
//# sourceMappingURL=ISourceAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ISourceAdapter.d.ts","sourceRoot":"","sources":["../../../src/sources/ISourceAdapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACb,MAAM,YAAY,CAAA;AAEnB;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;IAE7B;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IAEnB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IAErB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IAErB;;;;;;OAMG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAE3B;;;;OAIG;IACH,WAAW,IAAI,OAAO,CAAC,YAAY,CAAC,CAAA;IAEpC;;;;;OAKG;IACH,MAAM,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAEjE;;;;;;OAMG;IACH,aAAa,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAElE;;;;;;OAMG;IACH,iBAAiB,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IAElE;;;;;OAKG;IACH,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAEvD;;;;;OAKG;IACH,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IAE7D;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACzB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,cAAc,CAYnE"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Source Adapter Interface
|
|
3
|
+
* Defines the contract for all skill source adapters
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Type guard to check if an object implements ISourceAdapter
|
|
7
|
+
*/
|
|
8
|
+
export function isSourceAdapter(obj) {
|
|
9
|
+
if (typeof obj !== 'object' || obj === null)
|
|
10
|
+
return false;
|
|
11
|
+
const adapter = obj;
|
|
12
|
+
return (typeof adapter.id === 'string' &&
|
|
13
|
+
typeof adapter.name === 'string' &&
|
|
14
|
+
typeof adapter.type === 'string' &&
|
|
15
|
+
typeof adapter.initialize === 'function' &&
|
|
16
|
+
typeof adapter.search === 'function' &&
|
|
17
|
+
typeof adapter.fetchSkillContent === 'function');
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=ISourceAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ISourceAdapter.js","sourceRoot":"","sources":["../../../src/sources/ISourceAdapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA4HH;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,GAAY;IAC1C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,KAAK,CAAA;IAEzD,MAAM,OAAO,GAAG,GAA8B,CAAA;IAC9C,OAAO,CACL,OAAO,OAAO,CAAC,EAAE,KAAK,QAAQ;QAC9B,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ;QAChC,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ;QAChC,OAAO,OAAO,CAAC,UAAU,KAAK,UAAU;QACxC,OAAO,OAAO,CAAC,MAAM,KAAK,UAAU;QACpC,OAAO,OAAO,CAAC,iBAAiB,KAAK,UAAU,CAChD,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local Filesystem Source Adapter (SMI-591)
|
|
3
|
+
*
|
|
4
|
+
* Scans local directories for SKILL.md files.
|
|
5
|
+
* Useful for local development and testing.
|
|
6
|
+
*/
|
|
7
|
+
import { BaseSourceAdapter } from './BaseSourceAdapter.js';
|
|
8
|
+
import type { SourceConfig, SourceLocation, SourceRepository, SourceSearchOptions, SourceSearchResult, SkillContent, SourceHealth } from './types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Configuration for local filesystem adapter
|
|
11
|
+
*/
|
|
12
|
+
export interface LocalFilesystemConfig extends SourceConfig {
|
|
13
|
+
/** Root directory to scan for skills */
|
|
14
|
+
rootDir: string;
|
|
15
|
+
/** Maximum directory depth to search (default: 5) */
|
|
16
|
+
maxDepth?: number;
|
|
17
|
+
/** Patterns to exclude (glob-style) */
|
|
18
|
+
excludePatterns?: string[];
|
|
19
|
+
/** Whether to follow symlinks (default: false) */
|
|
20
|
+
followSymlinks?: boolean;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Local Filesystem Source Adapter
|
|
24
|
+
*
|
|
25
|
+
* Scans local directories to discover and index skills.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```typescript
|
|
29
|
+
* const adapter = new LocalFilesystemAdapter({
|
|
30
|
+
* id: 'local-skills',
|
|
31
|
+
* name: 'Local Skills',
|
|
32
|
+
* type: 'local',
|
|
33
|
+
* baseUrl: 'file://',
|
|
34
|
+
* enabled: true,
|
|
35
|
+
* rootDir: '/home/user/.claude/skills'
|
|
36
|
+
* })
|
|
37
|
+
*
|
|
38
|
+
* await adapter.initialize()
|
|
39
|
+
* const result = await adapter.search({})
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export declare class LocalFilesystemAdapter extends BaseSourceAdapter {
|
|
43
|
+
private readonly rootDir;
|
|
44
|
+
private readonly maxDepth;
|
|
45
|
+
private readonly excludePatterns;
|
|
46
|
+
private readonly followSymlinks;
|
|
47
|
+
private discoveredSkills;
|
|
48
|
+
constructor(config: LocalFilesystemConfig);
|
|
49
|
+
/**
|
|
50
|
+
* Initialize by scanning the filesystem
|
|
51
|
+
*/
|
|
52
|
+
protected doInitialize(): Promise<void>;
|
|
53
|
+
/**
|
|
54
|
+
* Check if root directory exists and is accessible
|
|
55
|
+
*/
|
|
56
|
+
protected doHealthCheck(): Promise<Partial<SourceHealth>>;
|
|
57
|
+
/**
|
|
58
|
+
* Search for skills in the scanned directories
|
|
59
|
+
*/
|
|
60
|
+
search(options?: SourceSearchOptions): Promise<SourceSearchResult>;
|
|
61
|
+
/**
|
|
62
|
+
* Get repository info for a skill location
|
|
63
|
+
*/
|
|
64
|
+
getRepository(location: SourceLocation): Promise<SourceRepository>;
|
|
65
|
+
/**
|
|
66
|
+
* Fetch skill content from local file
|
|
67
|
+
*/
|
|
68
|
+
fetchSkillContent(location: SourceLocation): Promise<SkillContent>;
|
|
69
|
+
/**
|
|
70
|
+
* Check if skill exists at location
|
|
71
|
+
*/
|
|
72
|
+
skillExists(location: SourceLocation): Promise<boolean>;
|
|
73
|
+
/**
|
|
74
|
+
* Rescan the filesystem for new skills
|
|
75
|
+
*/
|
|
76
|
+
rescan(): Promise<number>;
|
|
77
|
+
/**
|
|
78
|
+
* Get count of discovered skills
|
|
79
|
+
*/
|
|
80
|
+
get skillCount(): number;
|
|
81
|
+
/**
|
|
82
|
+
* Scan a directory recursively for skill files
|
|
83
|
+
*/
|
|
84
|
+
private scanDirectory;
|
|
85
|
+
/**
|
|
86
|
+
* Check if a path/name should be excluded (SMI-722, SMI-726)
|
|
87
|
+
* Uses centralized safe pattern matching to prevent RegExp injection
|
|
88
|
+
*/
|
|
89
|
+
private isExcluded;
|
|
90
|
+
/**
|
|
91
|
+
* Resolve a skill location to a full filesystem path
|
|
92
|
+
* Validates that the resolved path remains within rootDir to prevent path traversal attacks (SMI-720, SMI-726)
|
|
93
|
+
*/
|
|
94
|
+
private resolveSkillPath;
|
|
95
|
+
/**
|
|
96
|
+
* Convert discovered skill to SourceRepository
|
|
97
|
+
*/
|
|
98
|
+
private skillToRepository;
|
|
99
|
+
/**
|
|
100
|
+
* Generate a deterministic ID from a path
|
|
101
|
+
*/
|
|
102
|
+
private generateId;
|
|
103
|
+
/**
|
|
104
|
+
* Generate SHA hash for content
|
|
105
|
+
*/
|
|
106
|
+
private generateSha;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Factory function for creating local filesystem adapters
|
|
110
|
+
*/
|
|
111
|
+
export declare function createLocalFilesystemAdapter(config: LocalFilesystemConfig): LocalFilesystemAdapter;
|
|
112
|
+
//# sourceMappingURL=LocalFilesystemAdapter.d.ts.map
|