@skillsmith/core 0.1.2 → 0.2.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 -1
- package/dist/src/analysis/CodebaseAnalyzer.d.ts +4 -134
- package/dist/src/analysis/CodebaseAnalyzer.d.ts.map +1 -1
- package/dist/src/analysis/CodebaseAnalyzer.js +7 -315
- package/dist/src/analysis/CodebaseAnalyzer.js.map +1 -1
- package/dist/src/analysis/framework-detector.d.ts +47 -0
- package/dist/src/analysis/framework-detector.d.ts.map +1 -0
- package/dist/src/analysis/framework-detector.js +151 -0
- package/dist/src/analysis/framework-detector.js.map +1 -0
- package/dist/src/analysis/index.d.ts +6 -1
- package/dist/src/analysis/index.d.ts.map +1 -1
- package/dist/src/analysis/index.js +10 -1
- package/dist/src/analysis/index.js.map +1 -1
- package/dist/src/analysis/parsers.d.ts +43 -0
- package/dist/src/analysis/parsers.d.ts.map +1 -0
- package/dist/src/analysis/parsers.js +219 -0
- package/dist/src/analysis/parsers.js.map +1 -0
- package/dist/src/analysis/types.d.ts +138 -0
- package/dist/src/analysis/types.d.ts.map +1 -0
- package/dist/src/analysis/types.js +25 -0
- package/dist/src/analysis/types.js.map +1 -0
- package/dist/src/analytics/AnalyticsRepository.d.ts.map +1 -1
- package/dist/src/analytics/AnalyticsRepository.js +4 -4
- package/dist/src/analytics/AnalyticsRepository.js.map +1 -1
- package/dist/src/api/cache.d.ts +108 -0
- package/dist/src/api/cache.d.ts.map +1 -0
- package/dist/src/api/cache.js +216 -0
- package/dist/src/api/cache.js.map +1 -0
- package/dist/src/api/client.d.ts +152 -0
- package/dist/src/api/client.d.ts.map +1 -0
- package/dist/src/api/client.js +221 -0
- package/dist/src/api/client.js.map +1 -0
- package/dist/src/api/index.d.ts +10 -0
- package/dist/src/api/index.d.ts.map +1 -0
- package/dist/src/api/index.js +10 -0
- package/dist/src/api/index.js.map +1 -0
- package/dist/src/benchmarks/BenchmarkRunner.d.ts +6 -175
- package/dist/src/benchmarks/BenchmarkRunner.d.ts.map +1 -1
- package/dist/src/benchmarks/BenchmarkRunner.js +6 -123
- package/dist/src/benchmarks/BenchmarkRunner.js.map +1 -1
- package/dist/src/benchmarks/MemoryProfiler.d.ts +4 -262
- package/dist/src/benchmarks/MemoryProfiler.d.ts.map +1 -1
- package/dist/src/benchmarks/MemoryProfiler.js +4 -400
- package/dist/src/benchmarks/MemoryProfiler.js.map +1 -1
- package/dist/src/benchmarks/comparator.d.ts +38 -0
- package/dist/src/benchmarks/comparator.d.ts.map +1 -0
- package/dist/src/benchmarks/comparator.js +81 -0
- package/dist/src/benchmarks/comparator.js.map +1 -0
- package/dist/src/benchmarks/formatters.d.ts +30 -0
- package/dist/src/benchmarks/formatters.d.ts.map +1 -0
- package/dist/src/benchmarks/formatters.js +88 -0
- package/dist/src/benchmarks/formatters.js.map +1 -0
- package/dist/src/benchmarks/index.d.ts +5 -1
- package/dist/src/benchmarks/index.d.ts.map +1 -1
- package/dist/src/benchmarks/index.js +9 -2
- package/dist/src/benchmarks/index.js.map +1 -1
- package/dist/src/benchmarks/memory/MemoryProfiler.d.ts +165 -0
- package/dist/src/benchmarks/memory/MemoryProfiler.d.ts.map +1 -0
- package/dist/src/benchmarks/memory/MemoryProfiler.js +312 -0
- package/dist/src/benchmarks/memory/MemoryProfiler.js.map +1 -0
- package/dist/src/benchmarks/memory/baseline-manager.d.ts +64 -0
- package/dist/src/benchmarks/memory/baseline-manager.d.ts.map +1 -0
- package/dist/src/benchmarks/memory/baseline-manager.js +95 -0
- package/dist/src/benchmarks/memory/baseline-manager.js.map +1 -0
- package/dist/src/benchmarks/memory/index.d.ts +12 -0
- package/dist/src/benchmarks/memory/index.d.ts.map +1 -0
- package/dist/src/benchmarks/memory/index.js +12 -0
- package/dist/src/benchmarks/memory/index.js.map +1 -0
- package/dist/src/benchmarks/memory/leak-detector.d.ts +23 -0
- package/dist/src/benchmarks/memory/leak-detector.d.ts.map +1 -0
- package/dist/src/benchmarks/memory/leak-detector.js +46 -0
- package/dist/src/benchmarks/memory/leak-detector.js.map +1 -0
- package/dist/src/benchmarks/memory/regression-detector.d.ts +17 -0
- package/dist/src/benchmarks/memory/regression-detector.d.ts.map +1 -0
- package/dist/src/benchmarks/memory/regression-detector.js +56 -0
- package/dist/src/benchmarks/memory/regression-detector.js.map +1 -0
- package/dist/src/benchmarks/memory/types.d.ts +111 -0
- package/dist/src/benchmarks/memory/types.d.ts.map +1 -0
- package/dist/src/benchmarks/memory/types.js +7 -0
- package/dist/src/benchmarks/memory/types.js.map +1 -0
- package/dist/src/benchmarks/memory/utils.d.ts +17 -0
- package/dist/src/benchmarks/memory/utils.d.ts.map +1 -0
- package/dist/src/benchmarks/memory/utils.js +29 -0
- package/dist/src/benchmarks/memory/utils.js.map +1 -0
- package/dist/src/benchmarks/types.d.ts +175 -0
- package/dist/src/benchmarks/types.d.ts.map +1 -0
- package/dist/src/benchmarks/types.js +20 -0
- package/dist/src/benchmarks/types.js.map +1 -0
- package/dist/src/index.d.ts +4 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +7 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/repositories/QuarantineRepository.d.ts +4 -251
- package/dist/src/repositories/QuarantineRepository.d.ts.map +1 -1
- package/dist/src/repositories/QuarantineRepository.js +4 -441
- package/dist/src/repositories/QuarantineRepository.js.map +1 -1
- package/dist/src/repositories/quarantine/QuarantineRepository.d.ts +168 -0
- package/dist/src/repositories/quarantine/QuarantineRepository.d.ts.map +1 -0
- package/dist/src/repositories/quarantine/QuarantineRepository.js +341 -0
- package/dist/src/repositories/quarantine/QuarantineRepository.js.map +1 -0
- package/dist/src/repositories/quarantine/index.d.ts +10 -0
- package/dist/src/repositories/quarantine/index.d.ts.map +1 -0
- package/dist/src/repositories/quarantine/index.js +10 -0
- package/dist/src/repositories/quarantine/index.js.map +1 -0
- package/dist/src/repositories/quarantine/queries.d.ts +58 -0
- package/dist/src/repositories/quarantine/queries.d.ts.map +1 -0
- package/dist/src/repositories/quarantine/queries.js +88 -0
- package/dist/src/repositories/quarantine/queries.js.map +1 -0
- package/dist/src/repositories/quarantine/query-builder.d.ts +44 -0
- package/dist/src/repositories/quarantine/query-builder.d.ts.map +1 -0
- package/dist/src/repositories/quarantine/query-builder.js +87 -0
- package/dist/src/repositories/quarantine/query-builder.js.map +1 -0
- package/dist/src/repositories/quarantine/types.d.ts +155 -0
- package/dist/src/repositories/quarantine/types.d.ts.map +1 -0
- package/dist/src/repositories/quarantine/types.js +13 -0
- package/dist/src/repositories/quarantine/types.js.map +1 -0
- package/dist/src/scripts/__tests__/scan-imported-skills.test.d.ts +1 -0
- package/dist/src/scripts/__tests__/scan-imported-skills.test.d.ts.map +1 -1
- package/dist/src/scripts/__tests__/scan-imported-skills.test.js +7 -43
- package/dist/src/scripts/__tests__/scan-imported-skills.test.js.map +1 -1
- package/dist/src/scripts/github-import/checkpoint.d.ts +21 -0
- package/dist/src/scripts/github-import/checkpoint.d.ts.map +1 -0
- package/dist/src/scripts/github-import/checkpoint.js +52 -0
- package/dist/src/scripts/github-import/checkpoint.js.map +1 -0
- package/dist/src/scripts/github-import/deduplication.d.ts +15 -0
- package/dist/src/scripts/github-import/deduplication.d.ts.map +1 -0
- package/dist/src/scripts/github-import/deduplication.js +33 -0
- package/dist/src/scripts/github-import/deduplication.js.map +1 -0
- package/dist/src/scripts/github-import/github-client.d.ts +29 -0
- package/dist/src/scripts/github-import/github-client.d.ts.map +1 -0
- package/dist/src/scripts/github-import/github-client.js +184 -0
- package/dist/src/scripts/github-import/github-client.js.map +1 -0
- package/dist/src/scripts/github-import/index.d.ts +29 -0
- package/dist/src/scripts/github-import/index.d.ts.map +1 -0
- package/dist/src/scripts/github-import/index.js +198 -0
- package/dist/src/scripts/github-import/index.js.map +1 -0
- package/dist/src/scripts/github-import/output.d.ts +12 -0
- package/dist/src/scripts/github-import/output.d.ts.map +1 -0
- package/dist/src/scripts/github-import/output.js +34 -0
- package/dist/src/scripts/github-import/output.js.map +1 -0
- package/dist/src/scripts/github-import/types.d.ts +108 -0
- package/dist/src/scripts/github-import/types.d.ts.map +1 -0
- package/dist/src/scripts/github-import/types.js +44 -0
- package/dist/src/scripts/github-import/types.js.map +1 -0
- package/dist/src/scripts/github-import/utils.d.ts +13 -0
- package/dist/src/scripts/github-import/utils.d.ts.map +1 -0
- package/dist/src/scripts/github-import/utils.js +28 -0
- package/dist/src/scripts/github-import/utils.js.map +1 -0
- package/dist/src/scripts/import-github-skills.d.ts +3 -12
- package/dist/src/scripts/import-github-skills.d.ts.map +1 -1
- package/dist/src/scripts/import-github-skills.js +18 -398
- package/dist/src/scripts/import-github-skills.js.map +1 -1
- package/dist/src/scripts/scan-imported-skills.d.ts +7 -7
- package/dist/src/scripts/scan-imported-skills.d.ts.map +1 -1
- package/dist/src/scripts/scan-imported-skills.js +8 -397
- package/dist/src/scripts/scan-imported-skills.js.map +1 -1
- package/dist/src/scripts/skill-scanner/categorizer.d.ts +43 -0
- package/dist/src/scripts/skill-scanner/categorizer.d.ts.map +1 -0
- package/dist/src/scripts/skill-scanner/categorizer.js +61 -0
- package/dist/src/scripts/skill-scanner/categorizer.js.map +1 -0
- package/dist/src/scripts/skill-scanner/file-scanner.d.ts +43 -0
- package/dist/src/scripts/skill-scanner/file-scanner.d.ts.map +1 -0
- package/dist/src/scripts/skill-scanner/file-scanner.js +90 -0
- package/dist/src/scripts/skill-scanner/file-scanner.js.map +1 -0
- package/dist/src/scripts/skill-scanner/index.d.ts +22 -0
- package/dist/src/scripts/skill-scanner/index.d.ts.map +1 -0
- package/dist/src/scripts/skill-scanner/index.js +43 -0
- package/dist/src/scripts/skill-scanner/index.js.map +1 -0
- package/dist/src/scripts/skill-scanner/logger.d.ts +59 -0
- package/dist/src/scripts/skill-scanner/logger.d.ts.map +1 -0
- package/dist/src/scripts/skill-scanner/logger.js +104 -0
- package/dist/src/scripts/skill-scanner/logger.js.map +1 -0
- package/dist/src/scripts/skill-scanner/reporter.d.ts +56 -0
- package/dist/src/scripts/skill-scanner/reporter.d.ts.map +1 -0
- package/dist/src/scripts/skill-scanner/reporter.js +166 -0
- package/dist/src/scripts/skill-scanner/reporter.js.map +1 -0
- package/dist/src/scripts/skill-scanner/scanner.d.ts +44 -0
- package/dist/src/scripts/skill-scanner/scanner.d.ts.map +1 -0
- package/dist/src/scripts/skill-scanner/scanner.js +140 -0
- package/dist/src/scripts/skill-scanner/scanner.js.map +1 -0
- package/dist/src/scripts/skill-scanner/trust-scorer.d.ts +59 -0
- package/dist/src/scripts/skill-scanner/trust-scorer.d.ts.map +1 -0
- package/dist/src/scripts/skill-scanner/trust-scorer.js +62 -0
- package/dist/src/scripts/skill-scanner/trust-scorer.js.map +1 -0
- package/dist/src/scripts/skill-scanner/types.d.ts +98 -0
- package/dist/src/scripts/skill-scanner/types.d.ts.map +1 -0
- package/dist/src/scripts/skill-scanner/types.js +7 -0
- package/dist/src/scripts/skill-scanner/types.js.map +1 -0
- package/dist/src/scripts/validate-skills.d.ts +3 -172
- package/dist/src/scripts/validate-skills.d.ts.map +1 -1
- package/dist/src/scripts/validate-skills.js +6 -519
- package/dist/src/scripts/validate-skills.js.map +1 -1
- package/dist/src/scripts/validation/deduplication.d.ts +23 -0
- package/dist/src/scripts/validation/deduplication.d.ts.map +1 -0
- package/dist/src/scripts/validation/deduplication.js +127 -0
- package/dist/src/scripts/validation/deduplication.js.map +1 -0
- package/dist/src/scripts/validation/field-validators.d.ts +9 -0
- package/dist/src/scripts/validation/field-validators.d.ts.map +1 -0
- package/dist/src/scripts/validation/field-validators.js +135 -0
- package/dist/src/scripts/validation/field-validators.js.map +1 -0
- package/dist/src/scripts/validation/index.d.ts +29 -0
- package/dist/src/scripts/validation/index.d.ts.map +1 -0
- package/dist/src/scripts/validation/index.js +84 -0
- package/dist/src/scripts/validation/index.js.map +1 -0
- package/dist/src/scripts/validation/normalizers.d.ts +29 -0
- package/dist/src/scripts/validation/normalizers.d.ts.map +1 -0
- package/dist/src/scripts/validation/normalizers.js +79 -0
- package/dist/src/scripts/validation/normalizers.js.map +1 -0
- package/dist/src/scripts/validation/pipeline.d.ts +13 -0
- package/dist/src/scripts/validation/pipeline.d.ts.map +1 -0
- package/dist/src/scripts/validation/pipeline.js +126 -0
- package/dist/src/scripts/validation/pipeline.js.map +1 -0
- package/dist/src/scripts/validation/types.d.ts +128 -0
- package/dist/src/scripts/validation/types.d.ts.map +1 -0
- package/dist/src/scripts/validation/types.js +43 -0
- package/dist/src/scripts/validation/types.js.map +1 -0
- package/dist/src/security/index.d.ts +5 -4
- package/dist/src/security/index.d.ts.map +1 -1
- package/dist/src/security/index.js +8 -2
- package/dist/src/security/index.js.map +1 -1
- package/dist/src/security/rate-limiter/RateLimiter.d.ts +86 -0
- package/dist/src/security/rate-limiter/RateLimiter.d.ts.map +1 -0
- package/dist/src/security/rate-limiter/RateLimiter.js +260 -0
- package/dist/src/security/rate-limiter/RateLimiter.js.map +1 -0
- package/dist/src/security/rate-limiter/constants.d.ts +15 -0
- package/dist/src/security/rate-limiter/constants.d.ts.map +1 -0
- package/dist/src/security/rate-limiter/constants.js +15 -0
- package/dist/src/security/rate-limiter/constants.js.map +1 -0
- package/dist/src/security/rate-limiter/errors.d.ts +22 -0
- package/dist/src/security/rate-limiter/errors.d.ts.map +1 -0
- package/dist/src/security/rate-limiter/errors.js +32 -0
- package/dist/src/security/rate-limiter/errors.js.map +1 -0
- package/dist/src/security/rate-limiter/index.d.ts +12 -0
- package/dist/src/security/rate-limiter/index.d.ts.map +1 -0
- package/dist/src/security/rate-limiter/index.js +16 -0
- package/dist/src/security/rate-limiter/index.js.map +1 -0
- package/dist/src/security/rate-limiter/metrics-manager.d.ts +55 -0
- package/dist/src/security/rate-limiter/metrics-manager.d.ts.map +1 -0
- package/dist/src/security/rate-limiter/metrics-manager.js +144 -0
- package/dist/src/security/rate-limiter/metrics-manager.js.map +1 -0
- package/dist/src/security/rate-limiter/presets.d.ts +52 -0
- package/dist/src/security/rate-limiter/presets.d.ts.map +1 -0
- package/dist/src/security/rate-limiter/presets.js +53 -0
- package/dist/src/security/rate-limiter/presets.js.map +1 -0
- package/dist/src/security/rate-limiter/queue-manager.d.ts +59 -0
- package/dist/src/security/rate-limiter/queue-manager.d.ts.map +1 -0
- package/dist/src/security/rate-limiter/queue-manager.js +189 -0
- package/dist/src/security/rate-limiter/queue-manager.js.map +1 -0
- package/dist/src/security/rate-limiter/storage.d.ts +34 -0
- package/dist/src/security/rate-limiter/storage.d.ts.map +1 -0
- package/dist/src/security/rate-limiter/storage.js +80 -0
- package/dist/src/security/rate-limiter/storage.js.map +1 -0
- package/dist/src/security/rate-limiter/token-bucket.d.ts +44 -0
- package/dist/src/security/rate-limiter/token-bucket.d.ts.map +1 -0
- package/dist/src/security/rate-limiter/token-bucket.js +99 -0
- package/dist/src/security/rate-limiter/token-bucket.js.map +1 -0
- package/dist/src/security/rate-limiter/types.d.ts +104 -0
- package/dist/src/security/rate-limiter/types.d.ts.map +1 -0
- package/dist/src/security/rate-limiter/types.js +7 -0
- package/dist/src/security/rate-limiter/types.js.map +1 -0
- package/dist/src/security/scanner/SecurityScanner.d.ts +94 -0
- package/dist/src/security/scanner/SecurityScanner.d.ts.map +1 -0
- package/dist/src/security/scanner/SecurityScanner.js +403 -0
- package/dist/src/security/scanner/SecurityScanner.js.map +1 -0
- package/dist/src/security/scanner/index.d.ts +11 -0
- package/dist/src/security/scanner/index.d.ts.map +1 -0
- package/dist/src/security/scanner/index.js +14 -0
- package/dist/src/security/scanner/index.js.map +1 -0
- package/dist/src/security/scanner/patterns.d.ts +14 -0
- package/dist/src/security/scanner/patterns.d.ts.map +1 -0
- package/dist/src/security/scanner/patterns.js +147 -0
- package/dist/src/security/scanner/patterns.js.map +1 -0
- package/dist/src/security/scanner/regex-utils.d.ts +33 -0
- package/dist/src/security/scanner/regex-utils.d.ts.map +1 -0
- package/dist/src/security/scanner/regex-utils.js +41 -0
- package/dist/src/security/scanner/regex-utils.js.map +1 -0
- package/dist/src/security/scanner/types.d.ts +63 -0
- package/dist/src/security/scanner/types.d.ts.map +1 -0
- package/dist/src/security/scanner/types.js +7 -0
- package/dist/src/security/scanner/types.js.map +1 -0
- package/dist/src/security/scanner/weights.d.ts +15 -0
- package/dist/src/security/scanner/weights.d.ts.map +1 -0
- package/dist/src/security/scanner/weights.js +28 -0
- package/dist/src/security/scanner/weights.js.map +1 -0
- package/dist/src/session/SessionHealthMonitor.d.ts +5 -168
- package/dist/src/session/SessionHealthMonitor.d.ts.map +1 -1
- package/dist/src/session/SessionHealthMonitor.js +22 -91
- package/dist/src/session/SessionHealthMonitor.js.map +1 -1
- package/dist/src/session/health-checks.d.ts +37 -0
- package/dist/src/session/health-checks.d.ts.map +1 -0
- package/dist/src/session/health-checks.js +64 -0
- package/dist/src/session/health-checks.js.map +1 -0
- package/dist/src/session/health-types.d.ts +78 -0
- package/dist/src/session/health-types.d.ts.map +1 -0
- package/dist/src/session/health-types.js +16 -0
- package/dist/src/session/health-types.js.map +1 -0
- package/dist/src/session/index.d.ts +5 -1
- package/dist/src/session/index.d.ts.map +1 -1
- package/dist/src/session/index.js +9 -0
- package/dist/src/session/index.js.map +1 -1
- package/dist/src/session/metrics-collector.d.ts +23 -0
- package/dist/src/session/metrics-collector.d.ts.map +1 -0
- package/dist/src/session/metrics-collector.js +44 -0
- package/dist/src/session/metrics-collector.js.map +1 -0
- package/dist/src/session/typed-event-emitter.d.ts +70 -0
- package/dist/src/session/typed-event-emitter.d.ts.map +1 -0
- package/dist/src/session/typed-event-emitter.js +79 -0
- package/dist/src/session/typed-event-emitter.js.map +1 -0
- package/dist/src/sources/BaseSourceAdapter.d.ts +1 -1
- package/dist/src/sources/BaseSourceAdapter.d.ts.map +1 -1
- package/dist/src/sources/BaseSourceAdapter.js +2 -2
- package/dist/src/sources/BaseSourceAdapter.js.map +1 -1
- package/dist/src/telemetry/index.d.ts +1 -0
- package/dist/src/telemetry/index.d.ts.map +1 -1
- package/dist/src/telemetry/index.js +2 -0
- package/dist/src/telemetry/index.js.map +1 -1
- package/dist/src/telemetry/posthog.d.ts +125 -0
- package/dist/src/telemetry/posthog.d.ts.map +1 -0
- package/dist/src/telemetry/posthog.js +198 -0
- package/dist/src/telemetry/posthog.js.map +1 -0
- package/dist/tests/RateLimiter.test.js +4 -4
- package/dist/tests/RateLimiter.test.js.map +1 -1
- package/dist/tests/e2e/security/security.e2e.test.js +3 -3
- package/dist/tests/e2e/security/security.e2e.test.js.map +1 -1
- package/package.json +2 -1
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* SMI-864: Security Scanner for Imported Skills
|
|
3
|
+
* SMI-1189: This file is now a thin wrapper for backwards compatibility.
|
|
3
4
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
5
|
+
* The implementation has been refactored into modular files:
|
|
6
|
+
* - packages/core/src/scripts/skill-scanner/
|
|
6
7
|
*
|
|
7
8
|
* Usage: npx tsx packages/core/src/scripts/scan-imported-skills.ts [path-to-imported-skills.json]
|
|
8
9
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* - data/quarantine-skills.json: Skills with HIGH/CRITICAL findings (blocked)
|
|
12
|
-
* - data/safe-skills.json: Skills approved for import (passed security scan)
|
|
10
|
+
* For direct imports, use:
|
|
11
|
+
* import { scanImportedSkills } from './skill-scanner/index.js'
|
|
13
12
|
*/
|
|
14
|
-
export
|
|
13
|
+
export * from './skill-scanner/index.js';
|
|
14
|
+
import './skill-scanner/index.js';
|
|
15
15
|
//# sourceMappingURL=scan-imported-skills.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan-imported-skills.d.ts","sourceRoot":"","sources":["../../../src/scripts/scan-imported-skills.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"scan-imported-skills.d.ts","sourceRoot":"","sources":["../../../src/scripts/scan-imported-skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,cAAc,0BAA0B,CAAA;AAGxC,OAAO,0BAA0B,CAAA"}
|
|
@@ -1,405 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* SMI-864: Security Scanner for Imported Skills
|
|
3
|
+
* SMI-1189: This file is now a thin wrapper for backwards compatibility.
|
|
3
4
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
5
|
+
* The implementation has been refactored into modular files:
|
|
6
|
+
* - packages/core/src/scripts/skill-scanner/
|
|
6
7
|
*
|
|
7
8
|
* Usage: npx tsx packages/core/src/scripts/scan-imported-skills.ts [path-to-imported-skills.json]
|
|
8
9
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* - data/quarantine-skills.json: Skills with HIGH/CRITICAL findings (blocked)
|
|
12
|
-
* - data/safe-skills.json: Skills approved for import (passed security scan)
|
|
10
|
+
* For direct imports, use:
|
|
11
|
+
* import { scanImportedSkills } from './skill-scanner/index.js'
|
|
13
12
|
*/
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
import
|
|
17
|
-
import { SecurityScanner } from '../security/scanner.js';
|
|
18
|
-
// ============================================================================
|
|
19
|
-
// Configuration
|
|
20
|
-
// ============================================================================
|
|
21
|
-
const CONFIG = {
|
|
22
|
-
/** Default input file path */
|
|
23
|
-
DEFAULT_INPUT: './data/imported-skills.json',
|
|
24
|
-
/** Output directory for reports */
|
|
25
|
-
OUTPUT_DIR: './data',
|
|
26
|
-
/** Risk threshold for quarantine (skills at or above this are quarantined) */
|
|
27
|
-
QUARANTINE_THRESHOLD: 40,
|
|
28
|
-
/** Scanner options */
|
|
29
|
-
SCANNER_OPTIONS: {
|
|
30
|
-
riskThreshold: 40,
|
|
31
|
-
},
|
|
32
|
-
};
|
|
33
|
-
// ============================================================================
|
|
34
|
-
// Utility Functions
|
|
35
|
-
// ============================================================================
|
|
36
|
-
/**
|
|
37
|
-
* Determines the severity category based on the highest severity finding
|
|
38
|
-
*/
|
|
39
|
-
function determineSeverityCategory(findings) {
|
|
40
|
-
if (findings.some((f) => f.severity === 'critical'))
|
|
41
|
-
return 'CRITICAL';
|
|
42
|
-
if (findings.some((f) => f.severity === 'high'))
|
|
43
|
-
return 'HIGH';
|
|
44
|
-
if (findings.some((f) => f.severity === 'medium'))
|
|
45
|
-
return 'MEDIUM';
|
|
46
|
-
return 'LOW';
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Determines if a skill should be quarantined based on findings
|
|
50
|
-
*/
|
|
51
|
-
function shouldQuarantine(report) {
|
|
52
|
-
// Quarantine if:
|
|
53
|
-
// 1. Has critical or high severity findings
|
|
54
|
-
// 2. Risk score exceeds threshold
|
|
55
|
-
// 3. Scan failed (passed = false)
|
|
56
|
-
return (!report.passed ||
|
|
57
|
-
report.riskScore >= CONFIG.QUARANTINE_THRESHOLD ||
|
|
58
|
-
report.findings.some((f) => f.severity === 'critical' || f.severity === 'high'));
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Extracts scannable content from an imported skill
|
|
62
|
-
* Combines all text fields that should be scanned
|
|
63
|
-
*/
|
|
64
|
-
function extractScannableContent(skill) {
|
|
65
|
-
const parts = [];
|
|
66
|
-
if (skill.name)
|
|
67
|
-
parts.push(`# ${skill.name}`);
|
|
68
|
-
if (skill.description)
|
|
69
|
-
parts.push(skill.description);
|
|
70
|
-
if (skill.content)
|
|
71
|
-
parts.push(skill.content);
|
|
72
|
-
if (skill.instructions)
|
|
73
|
-
parts.push(skill.instructions);
|
|
74
|
-
if (skill.trigger)
|
|
75
|
-
parts.push(skill.trigger);
|
|
76
|
-
if (skill.tags?.length)
|
|
77
|
-
parts.push(`Tags: ${skill.tags.join(', ')}`);
|
|
78
|
-
// Include metadata if present
|
|
79
|
-
if (skill.metadata) {
|
|
80
|
-
try {
|
|
81
|
-
parts.push(JSON.stringify(skill.metadata));
|
|
82
|
-
}
|
|
83
|
-
catch {
|
|
84
|
-
// Ignore serialization errors
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
return parts.join('\n\n');
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Formats a duration in milliseconds to human-readable string
|
|
91
|
-
*/
|
|
92
|
-
function formatDuration(ms) {
|
|
93
|
-
if (ms < 1000)
|
|
94
|
-
return `${ms.toFixed(0)}ms`;
|
|
95
|
-
if (ms < 60000)
|
|
96
|
-
return `${(ms / 1000).toFixed(1)}s`;
|
|
97
|
-
return `${(ms / 60000).toFixed(1)}m`;
|
|
98
|
-
}
|
|
99
|
-
// ============================================================================
|
|
100
|
-
// Logging Functions
|
|
101
|
-
// ============================================================================
|
|
102
|
-
function logHeader(title) {
|
|
103
|
-
const border = '='.repeat(60);
|
|
104
|
-
console.log(`\n${border}`);
|
|
105
|
-
console.log(` ${title}`);
|
|
106
|
-
console.log(`${border}\n`);
|
|
107
|
-
}
|
|
108
|
-
function logFinding(finding, skillId) {
|
|
109
|
-
const severityIcon = {
|
|
110
|
-
critical: '[CRITICAL]',
|
|
111
|
-
high: '[HIGH] ',
|
|
112
|
-
medium: '[MEDIUM] ',
|
|
113
|
-
low: '[LOW] ',
|
|
114
|
-
};
|
|
115
|
-
console.log(` ${severityIcon[finding.severity]} ${finding.type}`);
|
|
116
|
-
console.log(` Skill: ${skillId}`);
|
|
117
|
-
console.log(` ${finding.message}`);
|
|
118
|
-
if (finding.lineNumber) {
|
|
119
|
-
console.log(` Line: ${finding.lineNumber}`);
|
|
120
|
-
}
|
|
121
|
-
if (finding.location) {
|
|
122
|
-
console.log(` Location: ${finding.location.slice(0, 80)}...`);
|
|
123
|
-
}
|
|
124
|
-
console.log();
|
|
125
|
-
}
|
|
126
|
-
function logSummary(results) {
|
|
127
|
-
const total = results.length;
|
|
128
|
-
const passed = results.filter((r) => !r.isQuarantined).length;
|
|
129
|
-
const quarantined = results.filter((r) => r.isQuarantined).length;
|
|
130
|
-
const bySeverity = {
|
|
131
|
-
CRITICAL: 0,
|
|
132
|
-
HIGH: 0,
|
|
133
|
-
MEDIUM: 0,
|
|
134
|
-
LOW: 0,
|
|
135
|
-
};
|
|
136
|
-
for (const result of results) {
|
|
137
|
-
bySeverity[result.severityCategory]++;
|
|
138
|
-
}
|
|
139
|
-
const avgRiskScore = results.reduce((sum, r) => sum + r.scanReport.riskScore, 0) / Math.max(total, 1);
|
|
140
|
-
const maxRiskScore = Math.max(...results.map((r) => r.scanReport.riskScore), 0);
|
|
141
|
-
console.log('\n' + '='.repeat(60));
|
|
142
|
-
console.log(' SCAN SUMMARY');
|
|
143
|
-
console.log('='.repeat(60));
|
|
144
|
-
console.log(` Total Skills Scanned: ${total}`);
|
|
145
|
-
console.log(` Passed (Safe): ${passed} (${((passed / total) * 100).toFixed(1)}%)`);
|
|
146
|
-
console.log(` Quarantined: ${quarantined} (${((quarantined / total) * 100).toFixed(1)}%)`);
|
|
147
|
-
console.log();
|
|
148
|
-
console.log(' By Severity:');
|
|
149
|
-
console.log(` CRITICAL: ${bySeverity.CRITICAL}`);
|
|
150
|
-
console.log(` HIGH: ${bySeverity.HIGH}`);
|
|
151
|
-
console.log(` MEDIUM: ${bySeverity.MEDIUM}`);
|
|
152
|
-
console.log(` LOW: ${bySeverity.LOW}`);
|
|
153
|
-
console.log();
|
|
154
|
-
console.log(` Average Risk Score: ${avgRiskScore.toFixed(1)}`);
|
|
155
|
-
console.log(` Maximum Risk Score: ${maxRiskScore}`);
|
|
156
|
-
console.log('='.repeat(60) + '\n');
|
|
157
|
-
}
|
|
158
|
-
// ============================================================================
|
|
159
|
-
// Main Scanning Logic
|
|
160
|
-
// ============================================================================
|
|
161
|
-
async function scanImportedSkills(inputPath) {
|
|
162
|
-
const startTime = performance.now();
|
|
163
|
-
logHeader('SMI-864: Security Scanner for Imported Skills');
|
|
164
|
-
console.log(`Input file: ${inputPath}`);
|
|
165
|
-
console.log(`Output directory: ${CONFIG.OUTPUT_DIR}`);
|
|
166
|
-
console.log();
|
|
167
|
-
// Validate input file exists
|
|
168
|
-
if (!existsSync(inputPath)) {
|
|
169
|
-
console.error(`Error: Input file not found: ${inputPath}`);
|
|
170
|
-
console.error('Usage: npx tsx packages/core/src/scripts/scan-imported-skills.ts [path-to-imported-skills.json]');
|
|
171
|
-
process.exit(1);
|
|
172
|
-
}
|
|
173
|
-
// Ensure output directory exists
|
|
174
|
-
if (!existsSync(CONFIG.OUTPUT_DIR)) {
|
|
175
|
-
mkdirSync(CONFIG.OUTPUT_DIR, { recursive: true });
|
|
176
|
-
}
|
|
177
|
-
// Read and parse imported skills
|
|
178
|
-
console.log('Reading imported skills...');
|
|
179
|
-
let skills;
|
|
180
|
-
try {
|
|
181
|
-
const content = await fs.readFile(inputPath, 'utf-8');
|
|
182
|
-
const parsed = JSON.parse(content);
|
|
183
|
-
// Handle both array format and object with skills property
|
|
184
|
-
if (Array.isArray(parsed)) {
|
|
185
|
-
skills = parsed;
|
|
186
|
-
}
|
|
187
|
-
else if (typeof parsed === 'object' &&
|
|
188
|
-
parsed !== null &&
|
|
189
|
-
'skills' in parsed &&
|
|
190
|
-
Array.isArray(parsed.skills)) {
|
|
191
|
-
skills = parsed.skills;
|
|
192
|
-
}
|
|
193
|
-
else {
|
|
194
|
-
throw new Error('Invalid format: expected array or object with skills array');
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
catch (error) {
|
|
198
|
-
console.error(`Error reading/parsing input file: ${error.message}`);
|
|
199
|
-
process.exit(1);
|
|
200
|
-
}
|
|
201
|
-
console.log(`Found ${skills.length} skills to scan\n`);
|
|
202
|
-
// Initialize scanner
|
|
203
|
-
const scanner = new SecurityScanner(CONFIG.SCANNER_OPTIONS);
|
|
204
|
-
// Scan all skills
|
|
205
|
-
const results = [];
|
|
206
|
-
const allFindings = [];
|
|
207
|
-
let processedCount = 0;
|
|
208
|
-
console.log('Scanning skills...');
|
|
209
|
-
for (const skill of skills) {
|
|
210
|
-
processedCount++;
|
|
211
|
-
// Extract content to scan
|
|
212
|
-
const content = extractScannableContent(skill);
|
|
213
|
-
// Run security scan
|
|
214
|
-
const report = scanner.scan(skill.id, content);
|
|
215
|
-
// Determine categorization
|
|
216
|
-
const severityCategory = determineSeverityCategory(report.findings);
|
|
217
|
-
const isQuarantined = shouldQuarantine(report);
|
|
218
|
-
// Create result entry
|
|
219
|
-
const result = {
|
|
220
|
-
skillId: skill.id,
|
|
221
|
-
skillName: skill.name,
|
|
222
|
-
author: skill.author || 'unknown',
|
|
223
|
-
source: skill.source || 'unknown',
|
|
224
|
-
scanReport: report,
|
|
225
|
-
severityCategory,
|
|
226
|
-
isQuarantined,
|
|
227
|
-
scanTimestamp: new Date().toISOString(),
|
|
228
|
-
};
|
|
229
|
-
results.push(result);
|
|
230
|
-
// Collect findings with skill context
|
|
231
|
-
for (const finding of report.findings) {
|
|
232
|
-
allFindings.push({ ...finding, skillId: skill.id });
|
|
233
|
-
}
|
|
234
|
-
// Log progress every 100 skills
|
|
235
|
-
if (processedCount % 100 === 0) {
|
|
236
|
-
console.log(` Processed ${processedCount}/${skills.length} skills...`);
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
console.log(` Completed: ${processedCount}/${skills.length} skills\n`);
|
|
240
|
-
// Log critical and high findings
|
|
241
|
-
const criticalFindings = allFindings.filter((f) => f.severity === 'critical');
|
|
242
|
-
const highFindings = allFindings.filter((f) => f.severity === 'high');
|
|
243
|
-
if (criticalFindings.length > 0) {
|
|
244
|
-
logHeader('CRITICAL FINDINGS');
|
|
245
|
-
for (const finding of criticalFindings.slice(0, 20)) {
|
|
246
|
-
logFinding(finding, finding.skillId);
|
|
247
|
-
}
|
|
248
|
-
if (criticalFindings.length > 20) {
|
|
249
|
-
console.log(` ... and ${criticalFindings.length - 20} more critical findings\n`);
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
if (highFindings.length > 0) {
|
|
253
|
-
logHeader('HIGH SEVERITY FINDINGS');
|
|
254
|
-
for (const finding of highFindings.slice(0, 10)) {
|
|
255
|
-
logFinding(finding, finding.skillId);
|
|
256
|
-
}
|
|
257
|
-
if (highFindings.length > 10) {
|
|
258
|
-
console.log(` ... and ${highFindings.length - 10} more high severity findings\n`);
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
// Print summary
|
|
262
|
-
logSummary(results);
|
|
263
|
-
// Calculate top findings by type
|
|
264
|
-
const findingCounts = new Map();
|
|
265
|
-
for (const finding of allFindings) {
|
|
266
|
-
const existing = findingCounts.get(finding.type);
|
|
267
|
-
if (existing) {
|
|
268
|
-
existing.count++;
|
|
269
|
-
// Keep the highest severity seen for this type
|
|
270
|
-
if (finding.severity === 'critical' ||
|
|
271
|
-
(finding.severity === 'high' && existing.severity !== 'critical') ||
|
|
272
|
-
(finding.severity === 'medium' &&
|
|
273
|
-
existing.severity !== 'critical' &&
|
|
274
|
-
existing.severity !== 'high')) {
|
|
275
|
-
existing.severity = finding.severity;
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
else {
|
|
279
|
-
findingCounts.set(finding.type, { count: 1, severity: finding.severity });
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
const topFindings = Array.from(findingCounts.entries())
|
|
283
|
-
.map(([type, data]) => ({ type, count: data.count, severity: data.severity }))
|
|
284
|
-
.sort((a, b) => b.count - a.count)
|
|
285
|
-
.slice(0, 10);
|
|
286
|
-
// Calculate summary statistics
|
|
287
|
-
const total = results.length;
|
|
288
|
-
const passed = results.filter((r) => !r.isQuarantined).length;
|
|
289
|
-
const quarantined = results.filter((r) => r.isQuarantined).length;
|
|
290
|
-
const bySeverity = {
|
|
291
|
-
CRITICAL: results.filter((r) => r.severityCategory === 'CRITICAL').length,
|
|
292
|
-
HIGH: results.filter((r) => r.severityCategory === 'HIGH').length,
|
|
293
|
-
MEDIUM: results.filter((r) => r.severityCategory === 'MEDIUM').length,
|
|
294
|
-
LOW: results.filter((r) => r.severityCategory === 'LOW').length,
|
|
295
|
-
};
|
|
296
|
-
const avgRiskScore = results.reduce((sum, r) => sum + r.scanReport.riskScore, 0) / Math.max(total, 1);
|
|
297
|
-
const maxRiskScore = Math.max(...results.map((r) => r.scanReport.riskScore), 0);
|
|
298
|
-
// Generate output files
|
|
299
|
-
console.log('Generating output files...\n');
|
|
300
|
-
// 1. Full security report
|
|
301
|
-
const securityReport = {
|
|
302
|
-
scanDate: new Date().toISOString(),
|
|
303
|
-
inputFile: inputPath,
|
|
304
|
-
summary: {
|
|
305
|
-
totalScanned: total,
|
|
306
|
-
passed,
|
|
307
|
-
quarantined,
|
|
308
|
-
bySeverity,
|
|
309
|
-
averageRiskScore: Math.round(avgRiskScore * 100) / 100,
|
|
310
|
-
maxRiskScore,
|
|
311
|
-
},
|
|
312
|
-
results,
|
|
313
|
-
topFindings,
|
|
314
|
-
};
|
|
315
|
-
const reportPath = path.join(CONFIG.OUTPUT_DIR, 'security-report.json');
|
|
316
|
-
await fs.writeFile(reportPath, JSON.stringify(securityReport, null, 2));
|
|
317
|
-
console.log(` [OK] security-report.json (${total} skills)`);
|
|
318
|
-
// 2. Quarantine list (HIGH/CRITICAL)
|
|
319
|
-
const quarantinedSkills = results.filter((r) => r.isQuarantined);
|
|
320
|
-
const quarantineOutput = {
|
|
321
|
-
generatedAt: new Date().toISOString(),
|
|
322
|
-
reason: 'Skills with HIGH or CRITICAL security findings, or risk score >= 40',
|
|
323
|
-
count: quarantinedSkills.length,
|
|
324
|
-
skills: quarantinedSkills.map((r) => ({
|
|
325
|
-
skillId: r.skillId,
|
|
326
|
-
skillName: r.skillName,
|
|
327
|
-
author: r.author,
|
|
328
|
-
riskScore: r.scanReport.riskScore,
|
|
329
|
-
severityCategory: r.severityCategory,
|
|
330
|
-
topFindings: r.scanReport.findings
|
|
331
|
-
.filter((f) => f.severity === 'critical' || f.severity === 'high')
|
|
332
|
-
.slice(0, 5)
|
|
333
|
-
.map((f) => `${f.type}: ${f.message}`),
|
|
334
|
-
})),
|
|
335
|
-
};
|
|
336
|
-
const quarantinePath = path.join(CONFIG.OUTPUT_DIR, 'quarantine-skills.json');
|
|
337
|
-
await fs.writeFile(quarantinePath, JSON.stringify(quarantineOutput, null, 2));
|
|
338
|
-
console.log(` [OK] quarantine-skills.json (${quarantinedSkills.length} skills blocked)`);
|
|
339
|
-
// 3. Safe skills list (approved for import)
|
|
340
|
-
const safeSkills = results.filter((r) => !r.isQuarantined);
|
|
341
|
-
const safeOutput = {
|
|
342
|
-
generatedAt: new Date().toISOString(),
|
|
343
|
-
count: safeSkills.length,
|
|
344
|
-
skills: safeSkills.map((r) => ({
|
|
345
|
-
skillId: r.skillId,
|
|
346
|
-
skillName: r.skillName,
|
|
347
|
-
author: r.author,
|
|
348
|
-
source: r.source,
|
|
349
|
-
riskScore: r.scanReport.riskScore,
|
|
350
|
-
})),
|
|
351
|
-
};
|
|
352
|
-
const safePath = path.join(CONFIG.OUTPUT_DIR, 'safe-skills.json');
|
|
353
|
-
await fs.writeFile(safePath, JSON.stringify(safeOutput, null, 2));
|
|
354
|
-
console.log(` [OK] safe-skills.json (${safeSkills.length} skills approved)`);
|
|
355
|
-
// Final timing
|
|
356
|
-
const endTime = performance.now();
|
|
357
|
-
const duration = formatDuration(endTime - startTime);
|
|
358
|
-
console.log('\n' + '='.repeat(60));
|
|
359
|
-
console.log(' SCAN COMPLETE');
|
|
360
|
-
console.log('='.repeat(60));
|
|
361
|
-
console.log(` Duration: ${duration}`);
|
|
362
|
-
console.log(` Skills per second: ${((total / (endTime - startTime)) * 1000).toFixed(1)}`);
|
|
363
|
-
console.log();
|
|
364
|
-
console.log(' Output files:');
|
|
365
|
-
console.log(` - ${reportPath}`);
|
|
366
|
-
console.log(` - ${quarantinePath}`);
|
|
367
|
-
console.log(` - ${safePath}`);
|
|
368
|
-
console.log('='.repeat(60) + '\n');
|
|
369
|
-
// Recommendations
|
|
370
|
-
console.log('RECOMMENDATIONS:');
|
|
371
|
-
if (quarantinedSkills.length > 0) {
|
|
372
|
-
console.log(` - ${quarantinedSkills.length} skills have been quarantined`);
|
|
373
|
-
console.log(' - Review quarantine-skills.json for manual triage');
|
|
374
|
-
console.log(' - Critical/high findings require security review before import');
|
|
375
|
-
}
|
|
376
|
-
if (criticalFindings.length > 0) {
|
|
377
|
-
console.log(` - ${criticalFindings.length} CRITICAL findings detected`);
|
|
378
|
-
console.log(' - These skills should NOT be imported without thorough review');
|
|
379
|
-
}
|
|
380
|
-
if (safeSkills.length > 0) {
|
|
381
|
-
console.log(` - ${safeSkills.length} skills passed security checks`);
|
|
382
|
-
console.log(' - These are ready for import from safe-skills.json');
|
|
383
|
-
}
|
|
384
|
-
console.log();
|
|
385
|
-
}
|
|
386
|
-
// ============================================================================
|
|
387
|
-
// Entry Point
|
|
388
|
-
// ============================================================================
|
|
389
|
-
async function main() {
|
|
390
|
-
// Get input file from command line args or use default
|
|
391
|
-
const inputPath = process.argv[2] || CONFIG.DEFAULT_INPUT;
|
|
392
|
-
try {
|
|
393
|
-
await scanImportedSkills(inputPath);
|
|
394
|
-
}
|
|
395
|
-
catch (error) {
|
|
396
|
-
console.error('Fatal error:', error.message);
|
|
397
|
-
console.error(error.stack);
|
|
398
|
-
process.exit(1);
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
main().catch((error) => {
|
|
402
|
-
console.error('Unhandled error:', error);
|
|
403
|
-
process.exit(1);
|
|
404
|
-
});
|
|
13
|
+
export * from './skill-scanner/index.js';
|
|
14
|
+
// Re-run the CLI entry point
|
|
15
|
+
import './skill-scanner/index.js';
|
|
405
16
|
//# sourceMappingURL=scan-imported-skills.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan-imported-skills.js","sourceRoot":"","sources":["../../../src/scripts/scan-imported-skills.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scan-imported-skills.js","sourceRoot":"","sources":["../../../src/scripts/scan-imported-skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,cAAc,0BAA0B,CAAA;AAExC,6BAA6B;AAC7B,OAAO,0BAA0B,CAAA"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-1189: Skill Categorizer
|
|
3
|
+
*
|
|
4
|
+
* Skill categorization and severity determination logic.
|
|
5
|
+
*/
|
|
6
|
+
import type { SecurityFinding } from '../../security/index.js';
|
|
7
|
+
import type { SeverityCategory } from './types.js';
|
|
8
|
+
export type { SeverityCategory };
|
|
9
|
+
/**
|
|
10
|
+
* Determines the severity category based on the highest severity finding
|
|
11
|
+
*
|
|
12
|
+
* @param findings - Array of security findings
|
|
13
|
+
* @returns The highest severity category found
|
|
14
|
+
*/
|
|
15
|
+
export declare function determineSeverityCategory(findings: SecurityFinding[]): SeverityCategory;
|
|
16
|
+
/**
|
|
17
|
+
* Initialize empty severity counts
|
|
18
|
+
*
|
|
19
|
+
* @returns Record with all severity categories set to 0
|
|
20
|
+
*/
|
|
21
|
+
export declare function initializeSeverityCounts(): Record<SeverityCategory, number>;
|
|
22
|
+
/**
|
|
23
|
+
* Count skills by severity category
|
|
24
|
+
*
|
|
25
|
+
* @param results - Array of scan results with severity categories
|
|
26
|
+
* @returns Record mapping severity categories to counts
|
|
27
|
+
*/
|
|
28
|
+
export declare function countBySeverity(results: Array<{
|
|
29
|
+
severityCategory: SeverityCategory;
|
|
30
|
+
}>): Record<SeverityCategory, number>;
|
|
31
|
+
/**
|
|
32
|
+
* Sort severity categories by priority (most severe first)
|
|
33
|
+
*/
|
|
34
|
+
export declare const SEVERITY_PRIORITY: SeverityCategory[];
|
|
35
|
+
/**
|
|
36
|
+
* Compare two severity categories
|
|
37
|
+
*
|
|
38
|
+
* @param a - First severity category
|
|
39
|
+
* @param b - Second severity category
|
|
40
|
+
* @returns Negative if a is more severe, positive if b is more severe
|
|
41
|
+
*/
|
|
42
|
+
export declare function compareSeverity(a: SeverityCategory, b: SeverityCategory): number;
|
|
43
|
+
//# sourceMappingURL=categorizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"categorizer.d.ts","sourceRoot":"","sources":["../../../../src/scripts/skill-scanner/categorizer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAGlD,YAAY,EAAE,gBAAgB,EAAE,CAAA;AAEhC;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,gBAAgB,CAKvF;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAO3E;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,KAAK,CAAC;IAAE,gBAAgB,EAAE,gBAAgB,CAAA;CAAE,CAAC,GACrD,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAQlC;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,gBAAgB,EAA0C,CAAA;AAE1F;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAEhF"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-1189: Skill Categorizer
|
|
3
|
+
*
|
|
4
|
+
* Skill categorization and severity determination logic.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Determines the severity category based on the highest severity finding
|
|
8
|
+
*
|
|
9
|
+
* @param findings - Array of security findings
|
|
10
|
+
* @returns The highest severity category found
|
|
11
|
+
*/
|
|
12
|
+
export function determineSeverityCategory(findings) {
|
|
13
|
+
if (findings.some((f) => f.severity === 'critical'))
|
|
14
|
+
return 'CRITICAL';
|
|
15
|
+
if (findings.some((f) => f.severity === 'high'))
|
|
16
|
+
return 'HIGH';
|
|
17
|
+
if (findings.some((f) => f.severity === 'medium'))
|
|
18
|
+
return 'MEDIUM';
|
|
19
|
+
return 'LOW';
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Initialize empty severity counts
|
|
23
|
+
*
|
|
24
|
+
* @returns Record with all severity categories set to 0
|
|
25
|
+
*/
|
|
26
|
+
export function initializeSeverityCounts() {
|
|
27
|
+
return {
|
|
28
|
+
CRITICAL: 0,
|
|
29
|
+
HIGH: 0,
|
|
30
|
+
MEDIUM: 0,
|
|
31
|
+
LOW: 0,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Count skills by severity category
|
|
36
|
+
*
|
|
37
|
+
* @param results - Array of scan results with severity categories
|
|
38
|
+
* @returns Record mapping severity categories to counts
|
|
39
|
+
*/
|
|
40
|
+
export function countBySeverity(results) {
|
|
41
|
+
const counts = initializeSeverityCounts();
|
|
42
|
+
for (const result of results) {
|
|
43
|
+
counts[result.severityCategory]++;
|
|
44
|
+
}
|
|
45
|
+
return counts;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Sort severity categories by priority (most severe first)
|
|
49
|
+
*/
|
|
50
|
+
export const SEVERITY_PRIORITY = ['CRITICAL', 'HIGH', 'MEDIUM', 'LOW'];
|
|
51
|
+
/**
|
|
52
|
+
* Compare two severity categories
|
|
53
|
+
*
|
|
54
|
+
* @param a - First severity category
|
|
55
|
+
* @param b - Second severity category
|
|
56
|
+
* @returns Negative if a is more severe, positive if b is more severe
|
|
57
|
+
*/
|
|
58
|
+
export function compareSeverity(a, b) {
|
|
59
|
+
return SEVERITY_PRIORITY.indexOf(a) - SEVERITY_PRIORITY.indexOf(b);
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=categorizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"categorizer.js","sourceRoot":"","sources":["../../../../src/scripts/skill-scanner/categorizer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,QAA2B;IACnE,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC;QAAE,OAAO,UAAU,CAAA;IACtE,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC;QAAE,OAAO,MAAM,CAAA;IAC9D,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAA;IAClE,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO;QACL,QAAQ,EAAE,CAAC;QACX,IAAI,EAAE,CAAC;QACP,MAAM,EAAE,CAAC;QACT,GAAG,EAAE,CAAC;KACP,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,OAAsD;IAEtD,MAAM,MAAM,GAAG,wBAAwB,EAAE,CAAA;IAEzC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAA;IACnC,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAA;AAE1F;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,CAAmB,EAAE,CAAmB;IACtE,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AACpE,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-1189: File Scanner
|
|
3
|
+
*
|
|
4
|
+
* File system scanning and content extraction.
|
|
5
|
+
*/
|
|
6
|
+
import type { ImportedSkill } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Extracts scannable content from an imported skill
|
|
9
|
+
* Combines all text fields that should be scanned
|
|
10
|
+
*
|
|
11
|
+
* @param skill - The imported skill to extract content from
|
|
12
|
+
* @returns Combined text content for scanning
|
|
13
|
+
*/
|
|
14
|
+
export declare function extractScannableContent(skill: ImportedSkill): string;
|
|
15
|
+
/**
|
|
16
|
+
* Read and parse imported skills from a JSON file
|
|
17
|
+
*
|
|
18
|
+
* @param inputPath - Path to the imported skills JSON file
|
|
19
|
+
* @returns Array of imported skills
|
|
20
|
+
* @throws Error if file cannot be read or parsed
|
|
21
|
+
*/
|
|
22
|
+
export declare function readImportedSkills(inputPath: string): Promise<ImportedSkill[]>;
|
|
23
|
+
/**
|
|
24
|
+
* Ensure a directory exists, creating it if necessary
|
|
25
|
+
*
|
|
26
|
+
* @param dirPath - Path to the directory
|
|
27
|
+
*/
|
|
28
|
+
export declare function ensureDirectoryExists(dirPath: string): void;
|
|
29
|
+
/**
|
|
30
|
+
* Check if a file exists
|
|
31
|
+
*
|
|
32
|
+
* @param filePath - Path to the file
|
|
33
|
+
* @returns true if file exists
|
|
34
|
+
*/
|
|
35
|
+
export declare function fileExists(filePath: string): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Write JSON data to a file
|
|
38
|
+
*
|
|
39
|
+
* @param filePath - Path to the output file
|
|
40
|
+
* @param data - Data to write
|
|
41
|
+
*/
|
|
42
|
+
export declare function writeJsonFile(filePath: string, data: unknown): Promise<void>;
|
|
43
|
+
//# sourceMappingURL=file-scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-scanner.d.ts","sourceRoot":"","sources":["../../../../src/scripts/skill-scanner/file-scanner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAoBpE;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAmBpF;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAI3D;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAElF"}
|