@skillsmith/core 0.8.0 → 0.8.2
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/CHANGELOG.md +14 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/src/analytics/ROIDashboardService.compute.d.ts +17 -0
- package/dist/src/analytics/ROIDashboardService.compute.d.ts.map +1 -0
- package/dist/src/analytics/ROIDashboardService.compute.js +134 -0
- package/dist/src/analytics/ROIDashboardService.compute.js.map +1 -0
- package/dist/src/analytics/ROIDashboardService.d.ts +0 -8
- package/dist/src/analytics/ROIDashboardService.d.ts.map +1 -1
- package/dist/src/analytics/ROIDashboardService.js +9 -138
- package/dist/src/analytics/ROIDashboardService.js.map +1 -1
- package/dist/src/api/client.types.d.ts +5 -0
- package/dist/src/api/client.types.d.ts.map +1 -1
- package/dist/src/api/index.d.ts +1 -0
- package/dist/src/api/index.d.ts.map +1 -1
- package/dist/src/api/index.js +4 -0
- package/dist/src/api/index.js.map +1 -1
- package/dist/src/api/schemas.compatibility.test.d.ts +11 -0
- package/dist/src/api/schemas.compatibility.test.d.ts.map +1 -0
- package/dist/src/api/schemas.compatibility.test.js +38 -0
- package/dist/src/api/schemas.compatibility.test.js.map +1 -0
- package/dist/src/api/schemas.d.ts +16 -9
- package/dist/src/api/schemas.d.ts.map +1 -1
- package/dist/src/api/schemas.js +13 -4
- package/dist/src/api/schemas.js.map +1 -1
- package/dist/src/api/schemas.license.test.d.ts +11 -0
- package/dist/src/api/schemas.license.test.d.ts.map +1 -0
- package/dist/src/api/schemas.license.test.js +51 -0
- package/dist/src/api/schemas.license.test.js.map +1 -0
- package/dist/src/api/types.d.ts +18 -3
- package/dist/src/api/types.d.ts.map +1 -1
- package/dist/src/api/types.js +29 -2
- package/dist/src/api/types.js.map +1 -1
- package/dist/src/audit/remote-audit.d.ts +41 -0
- package/dist/src/audit/remote-audit.d.ts.map +1 -1
- package/dist/src/audit/remote-audit.js +71 -28
- package/dist/src/audit/remote-audit.js.map +1 -1
- package/dist/src/audit/remote-audit.test.js +89 -1
- package/dist/src/audit/remote-audit.test.js.map +1 -1
- package/dist/src/compatibility/slugs.d.ts +34 -0
- package/dist/src/compatibility/slugs.d.ts.map +1 -0
- package/dist/src/compatibility/slugs.js +57 -0
- package/dist/src/compatibility/slugs.js.map +1 -0
- package/dist/src/db/schema-sql.d.ts +1 -1
- package/dist/src/db/schema-sql.d.ts.map +1 -1
- package/dist/src/db/schema-sql.js +1 -1
- package/dist/src/exports/types.d.ts +1 -0
- package/dist/src/exports/types.d.ts.map +1 -1
- package/dist/src/exports/types.js +4 -0
- package/dist/src/exports/types.js.map +1 -1
- package/dist/src/index.d.ts +6 -3
- 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/indexer/GitHubIndexer.d.ts.map +1 -1
- package/dist/src/indexer/GitHubIndexer.js +1 -1
- package/dist/src/indexer/GitHubIndexer.js.map +1 -1
- package/dist/src/provenance/SourceRecoveryService.d.ts +61 -0
- package/dist/src/provenance/SourceRecoveryService.d.ts.map +1 -0
- package/dist/src/provenance/SourceRecoveryService.js +209 -0
- package/dist/src/provenance/SourceRecoveryService.js.map +1 -0
- package/dist/src/provenance/backfill.d.ts +47 -0
- package/dist/src/provenance/backfill.d.ts.map +1 -0
- package/dist/src/provenance/backfill.js +206 -0
- package/dist/src/provenance/backfill.js.map +1 -0
- package/dist/src/provenance/git-config.d.ts +22 -0
- package/dist/src/provenance/git-config.d.ts.map +1 -0
- package/dist/src/provenance/git-config.js +117 -0
- package/dist/src/provenance/git-config.js.map +1 -0
- package/dist/src/provenance/index.d.ts +13 -0
- package/dist/src/provenance/index.d.ts.map +1 -0
- package/dist/src/provenance/index.js +13 -0
- package/dist/src/provenance/index.js.map +1 -0
- package/dist/src/provenance/local-skill-scan.d.ts +35 -0
- package/dist/src/provenance/local-skill-scan.d.ts.map +1 -0
- package/dist/src/provenance/local-skill-scan.js +79 -0
- package/dist/src/provenance/local-skill-scan.js.map +1 -0
- package/dist/src/provenance/name-variants.d.ts +32 -0
- package/dist/src/provenance/name-variants.d.ts.map +1 -0
- package/dist/src/provenance/name-variants.js +59 -0
- package/dist/src/provenance/name-variants.js.map +1 -0
- package/dist/src/provenance/plugin-manifest.d.ts +16 -0
- package/dist/src/provenance/plugin-manifest.d.ts.map +1 -0
- package/dist/src/provenance/plugin-manifest.js +52 -0
- package/dist/src/provenance/plugin-manifest.js.map +1 -0
- package/dist/src/provenance/types.d.ts +98 -0
- package/dist/src/provenance/types.d.ts.map +1 -0
- package/dist/src/provenance/types.js +21 -0
- package/dist/src/provenance/types.js.map +1 -0
- package/dist/src/repositories/SkillRepository.d.ts.map +1 -1
- package/dist/src/repositories/SkillRepository.js +3 -1
- package/dist/src/repositories/SkillRepository.js.map +1 -1
- package/dist/src/scripts/__tests__/scan-imported-skills.test.js +10 -0
- package/dist/src/scripts/__tests__/scan-imported-skills.test.js.map +1 -1
- package/dist/src/scripts/validation/normalizers.d.ts.map +1 -1
- package/dist/src/scripts/validation/normalizers.js +9 -7
- package/dist/src/scripts/validation/normalizers.js.map +1 -1
- package/dist/src/scripts/validation/types.d.ts +8 -2
- package/dist/src/scripts/validation/types.d.ts.map +1 -1
- package/dist/src/scripts/validation/types.js +10 -2
- package/dist/src/scripts/validation/types.js.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.d.ts +0 -7
- package/dist/src/security/scanner/SecurityScanner.d.ts.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.exec.d.ts +56 -0
- package/dist/src/security/scanner/SecurityScanner.exec.d.ts.map +1 -0
- package/dist/src/security/scanner/SecurityScanner.exec.js +255 -0
- package/dist/src/security/scanner/SecurityScanner.exec.js.map +1 -0
- package/dist/src/security/scanner/SecurityScanner.helpers.d.ts.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.helpers.js +17 -1
- package/dist/src/security/scanner/SecurityScanner.helpers.js.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.js +34 -199
- package/dist/src/security/scanner/SecurityScanner.js.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.scanners.d.ts +22 -0
- package/dist/src/security/scanner/SecurityScanner.scanners.d.ts.map +1 -0
- package/dist/src/security/scanner/SecurityScanner.scanners.js +213 -0
- package/dist/src/security/scanner/SecurityScanner.scanners.js.map +1 -0
- package/dist/src/security/scanner/index.d.ts +1 -1
- package/dist/src/security/scanner/index.d.ts.map +1 -1
- package/dist/src/security/scanner/index.js +1 -1
- package/dist/src/security/scanner/index.js.map +1 -1
- package/dist/src/security/scanner/patterns.d.ts +21 -0
- package/dist/src/security/scanner/patterns.d.ts.map +1 -1
- package/dist/src/security/scanner/patterns.js +34 -0
- package/dist/src/security/scanner/patterns.js.map +1 -1
- package/dist/src/security/scanner/types.d.ts +3 -1
- package/dist/src/security/scanner/types.d.ts.map +1 -1
- package/dist/src/security/scanner/weights.d.ts.map +1 -1
- package/dist/src/security/scanner/weights.js +6 -0
- package/dist/src/security/scanner/weights.js.map +1 -1
- package/dist/src/services/SearchService.helpers.d.ts.map +1 -1
- package/dist/src/services/SearchService.helpers.js +2 -0
- package/dist/src/services/SearchService.helpers.js.map +1 -1
- package/dist/src/services/SearchService.types.d.ts +1 -0
- package/dist/src/services/SearchService.types.d.ts.map +1 -1
- package/dist/src/services/skill-installation.helpers.d.ts +2 -26
- package/dist/src/services/skill-installation.helpers.d.ts.map +1 -1
- package/dist/src/services/skill-installation.helpers.js +2 -120
- package/dist/src/services/skill-installation.helpers.js.map +1 -1
- package/dist/src/services/skill-installation.io.d.ts +43 -0
- package/dist/src/services/skill-installation.io.d.ts.map +1 -0
- package/dist/src/services/skill-installation.io.js +176 -0
- package/dist/src/services/skill-installation.io.js.map +1 -0
- package/dist/src/services/skill-installation.service.d.ts.map +1 -1
- package/dist/src/services/skill-installation.service.js +51 -113
- package/dist/src/services/skill-installation.service.js.map +1 -1
- package/dist/src/services/skill-installation.types.d.ts.map +1 -1
- package/dist/src/services/skill-installation.types.js +9 -0
- package/dist/src/services/skill-installation.types.js.map +1 -1
- package/dist/src/services/skill-installation.validate.d.ts +44 -0
- package/dist/src/services/skill-installation.validate.d.ts.map +1 -0
- package/dist/src/services/skill-installation.validate.js +134 -0
- package/dist/src/services/skill-installation.validate.js.map +1 -0
- package/dist/src/telemetry/wrap.d.ts +1 -1
- package/dist/src/telemetry/wrap.d.ts.map +1 -1
- package/dist/src/telemetry/wrap.js.map +1 -1
- package/dist/src/types/skill.d.ts +6 -1
- package/dist/src/types/skill.d.ts.map +1 -1
- package/dist/src/types/skill.js.map +1 -1
- package/dist/src/types.d.ts +25 -1
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +3 -1
- package/dist/src/types.js.map +1 -1
- package/dist/tests/GitHubIndexer.edge-cases.test.js +2 -2
- package/dist/tests/GitHubIndexer.repository.test.d.ts +10 -0
- package/dist/tests/GitHubIndexer.repository.test.d.ts.map +1 -0
- package/dist/tests/GitHubIndexer.repository.test.js +190 -0
- package/dist/tests/GitHubIndexer.repository.test.js.map +1 -0
- package/dist/tests/GitHubIndexer.test.d.ts +2 -1
- package/dist/tests/GitHubIndexer.test.d.ts.map +1 -1
- package/dist/tests/GitHubIndexer.test.js +5 -183
- package/dist/tests/GitHubIndexer.test.js.map +1 -1
- package/dist/tests/QuarantineRepository.review-state-machine.test.d.ts +14 -0
- package/dist/tests/QuarantineRepository.review-state-machine.test.d.ts.map +1 -0
- package/dist/tests/QuarantineRepository.review-state-machine.test.js +296 -0
- package/dist/tests/QuarantineRepository.review-state-machine.test.js.map +1 -0
- package/dist/tests/RawUrlSourceAdapter.security.test.js +3 -2
- package/dist/tests/RawUrlSourceAdapter.security.test.js.map +1 -1
- package/dist/tests/SecurityScanner.exec.test.d.ts +11 -0
- package/dist/tests/SecurityScanner.exec.test.d.ts.map +1 -0
- package/dist/tests/SecurityScanner.exec.test.js +190 -0
- package/dist/tests/SecurityScanner.exec.test.js.map +1 -0
- package/dist/tests/SwarmIndexer.test.js +2 -2
- package/dist/tests/api/client.validation.test.js +7 -4
- package/dist/tests/api/client.validation.test.js.map +1 -1
- package/dist/tests/fixtures/api-responses/index.js +1 -1
- package/dist/tests/fixtures/api-responses/index.js.map +1 -1
- package/dist/tests/integration/QuarantineService.concurrency.test.d.ts +34 -0
- package/dist/tests/integration/QuarantineService.concurrency.test.d.ts.map +1 -0
- package/dist/tests/integration/QuarantineService.concurrency.test.js +280 -0
- package/dist/tests/integration/QuarantineService.concurrency.test.js.map +1 -0
- package/dist/tests/integration/openapi-contract.test.d.ts +16 -0
- package/dist/tests/integration/openapi-contract.test.d.ts.map +1 -0
- package/dist/tests/integration/openapi-contract.test.js +231 -0
- package/dist/tests/integration/openapi-contract.test.js.map +1 -0
- package/dist/tests/provenance/SourceRecoveryService.test.d.ts +2 -0
- package/dist/tests/provenance/SourceRecoveryService.test.d.ts.map +1 -0
- package/dist/tests/provenance/SourceRecoveryService.test.js +205 -0
- package/dist/tests/provenance/SourceRecoveryService.test.js.map +1 -0
- package/dist/tests/provenance/backfill.test.d.ts +2 -0
- package/dist/tests/provenance/backfill.test.d.ts.map +1 -0
- package/dist/tests/provenance/backfill.test.js +296 -0
- package/dist/tests/provenance/backfill.test.js.map +1 -0
- package/dist/tests/provenance/git-config.test.d.ts +2 -0
- package/dist/tests/provenance/git-config.test.d.ts.map +1 -0
- package/dist/tests/provenance/git-config.test.js +73 -0
- package/dist/tests/provenance/git-config.test.js.map +1 -0
- package/dist/tests/provenance/local-skill-scan.test.d.ts +2 -0
- package/dist/tests/provenance/local-skill-scan.test.d.ts.map +1 -0
- package/dist/tests/provenance/local-skill-scan.test.js +51 -0
- package/dist/tests/provenance/local-skill-scan.test.js.map +1 -0
- package/dist/tests/provenance/name-variants.test.d.ts +2 -0
- package/dist/tests/provenance/name-variants.test.d.ts.map +1 -0
- package/dist/tests/provenance/name-variants.test.js +51 -0
- package/dist/tests/provenance/name-variants.test.js.map +1 -0
- package/dist/tests/provenance/plugin-manifest.test.d.ts +2 -0
- package/dist/tests/provenance/plugin-manifest.test.d.ts.map +1 -0
- package/dist/tests/provenance/plugin-manifest.test.js +49 -0
- package/dist/tests/provenance/plugin-manifest.test.js.map +1 -0
- package/dist/tests/scripts/import-to-database.test.js +7 -1
- package/dist/tests/scripts/import-to-database.test.js.map +1 -1
- package/dist/tests/security/scanner-regression-guard.test.js +5 -1
- package/dist/tests/security/scanner-regression-guard.test.js.map +1 -1
- package/dist/tests/security.test.js +45 -0
- package/dist/tests/security.test.js.map +1 -1
- package/dist/tests/services/aidefence-feedback.test.js +2 -0
- package/dist/tests/services/aidefence-feedback.test.js.map +1 -1
- package/dist/tests/services/dep-quarantine-check.test.js +1 -1
- package/dist/tests/services/dep-quarantine-check.test.js.map +1 -1
- package/dist/tests/skill-scanner/allowlist.test.js +8 -1
- package/dist/tests/skill-scanner/allowlist.test.js.map +1 -1
- package/dist/tests/unit/services/skill-installation.gap1.test.d.ts +12 -0
- package/dist/tests/unit/services/skill-installation.gap1.test.d.ts.map +1 -0
- package/dist/tests/unit/services/skill-installation.gap1.test.js +96 -0
- package/dist/tests/unit/services/skill-installation.gap1.test.js.map +1 -0
- package/dist/tests/unit/services/skill-installation.io.test.d.ts +11 -0
- package/dist/tests/unit/services/skill-installation.io.test.d.ts.map +1 -0
- package/dist/tests/unit/services/skill-installation.io.test.js +130 -0
- package/dist/tests/unit/services/skill-installation.io.test.js.map +1 -0
- package/dist/tests/validate-skills.dedup.test.d.ts +5 -0
- package/dist/tests/validate-skills.dedup.test.d.ts.map +1 -0
- package/dist/tests/validate-skills.dedup.test.js +241 -0
- package/dist/tests/validate-skills.dedup.test.js.map +1 -0
- package/dist/tests/validate-skills.normalizers.test.d.ts +5 -0
- package/dist/tests/validate-skills.normalizers.test.d.ts.map +1 -0
- package/dist/tests/validate-skills.normalizers.test.js +109 -0
- package/dist/tests/validate-skills.normalizers.test.js.map +1 -0
- package/dist/tests/validate-skills.test.d.ts +1 -1
- package/dist/tests/validate-skills.test.js +7 -345
- package/dist/tests/validate-skills.test.js.map +1 -1
- package/package.json +19 -8
|
@@ -6,14 +6,15 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { z } from 'zod';
|
|
8
8
|
/**
|
|
9
|
-
* Trust tier enum values
|
|
9
|
+
* Trust tier enum values — public-facing API values only.
|
|
10
|
+
* SMI-5205: experimental/unknown translated to community/unverified at response layer.
|
|
10
11
|
*/
|
|
11
12
|
export declare const TrustTierSchema: z.ZodEnum<{
|
|
13
|
+
official: "official";
|
|
12
14
|
verified: "verified";
|
|
13
15
|
curated: "curated";
|
|
14
16
|
community: "community";
|
|
15
|
-
|
|
16
|
-
unknown: "unknown";
|
|
17
|
+
unverified: "unverified";
|
|
17
18
|
}>;
|
|
18
19
|
/**
|
|
19
20
|
* Schema for individual search result from API
|
|
@@ -28,11 +29,11 @@ export declare const ApiSearchResultSchema: z.ZodObject<{
|
|
|
28
29
|
repo_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
29
30
|
quality_score: z.ZodNullable<z.ZodNumber>;
|
|
30
31
|
trust_tier: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
32
|
+
official: "official";
|
|
31
33
|
verified: "verified";
|
|
32
34
|
curated: "curated";
|
|
33
35
|
community: "community";
|
|
34
|
-
|
|
35
|
-
unknown: "unknown";
|
|
36
|
+
unverified: "unverified";
|
|
36
37
|
}>>>;
|
|
37
38
|
tags: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
38
39
|
stars: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
@@ -41,10 +42,12 @@ export declare const ApiSearchResultSchema: z.ZodObject<{
|
|
|
41
42
|
created_at: z.ZodOptional<z.ZodString>;
|
|
42
43
|
updated_at: z.ZodOptional<z.ZodString>;
|
|
43
44
|
categories: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
45
|
+
compatibility: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
44
46
|
security_score: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
45
47
|
last_scanned_at: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
46
48
|
security_findings: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodUnknown>>>;
|
|
47
49
|
quarantined: z.ZodOptional<z.ZodBoolean>;
|
|
50
|
+
license: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
48
51
|
}, z.core.$strip>;
|
|
49
52
|
/**
|
|
50
53
|
* Schema for generic API response wrapper
|
|
@@ -130,11 +133,11 @@ export declare const SearchResponseSchema: z.ZodObject<{
|
|
|
130
133
|
repo_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
131
134
|
quality_score: z.ZodNullable<z.ZodNumber>;
|
|
132
135
|
trust_tier: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
136
|
+
official: "official";
|
|
133
137
|
verified: "verified";
|
|
134
138
|
curated: "curated";
|
|
135
139
|
community: "community";
|
|
136
|
-
|
|
137
|
-
unknown: "unknown";
|
|
140
|
+
unverified: "unverified";
|
|
138
141
|
}>>>;
|
|
139
142
|
tags: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
140
143
|
stars: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
@@ -143,10 +146,12 @@ export declare const SearchResponseSchema: z.ZodObject<{
|
|
|
143
146
|
created_at: z.ZodOptional<z.ZodString>;
|
|
144
147
|
updated_at: z.ZodOptional<z.ZodString>;
|
|
145
148
|
categories: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
149
|
+
compatibility: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
146
150
|
security_score: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
147
151
|
last_scanned_at: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
148
152
|
security_findings: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodUnknown>>>;
|
|
149
153
|
quarantined: z.ZodOptional<z.ZodBoolean>;
|
|
154
|
+
license: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
150
155
|
}, z.core.$strip>>;
|
|
151
156
|
meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
152
157
|
}, z.core.$strip>;
|
|
@@ -163,11 +168,11 @@ export declare const SingleSkillResponseSchema: z.ZodObject<{
|
|
|
163
168
|
repo_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
164
169
|
quality_score: z.ZodNullable<z.ZodNumber>;
|
|
165
170
|
trust_tier: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
171
|
+
official: "official";
|
|
166
172
|
verified: "verified";
|
|
167
173
|
curated: "curated";
|
|
168
174
|
community: "community";
|
|
169
|
-
|
|
170
|
-
unknown: "unknown";
|
|
175
|
+
unverified: "unverified";
|
|
171
176
|
}>>>;
|
|
172
177
|
tags: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
173
178
|
stars: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
@@ -176,10 +181,12 @@ export declare const SingleSkillResponseSchema: z.ZodObject<{
|
|
|
176
181
|
created_at: z.ZodOptional<z.ZodString>;
|
|
177
182
|
updated_at: z.ZodOptional<z.ZodString>;
|
|
178
183
|
categories: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
184
|
+
compatibility: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
179
185
|
security_score: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
180
186
|
last_scanned_at: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
181
187
|
security_findings: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodUnknown>>>;
|
|
182
188
|
quarantined: z.ZodOptional<z.ZodBoolean>;
|
|
189
|
+
license: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
183
190
|
}, z.core.$strip>;
|
|
184
191
|
meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
185
192
|
}, z.core.$strip>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../src/api/schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAMvB
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../src/api/schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAMvB;;;GAGG;AACH,eAAO,MAAM,eAAe;;;;;;EAM1B,CAAA;AAMF;;;GAGG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAgChC,CAAA;AAMF;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,CAAC;;;kBAK5E;AAMD;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;;iBAKlC,CAAA;AAMF;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;iBAc/B,CAAA;AAEF;;GAEG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;iBAEpC,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,4BAA4B;;;;;;;;iBAYvC,CAAA;AAEF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AACxE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAC3E,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAA;AAMjF;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAA0D,CAAA;AAE3F;;GAEG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAiD,CAAA;AAMvF;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAE5E;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAE1E;;GAEG;AACH,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAEpF;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA"}
|
package/dist/src/api/schemas.js
CHANGED
|
@@ -9,14 +9,15 @@ import { z } from 'zod';
|
|
|
9
9
|
// Trust Tier Schema
|
|
10
10
|
// ============================================================================
|
|
11
11
|
/**
|
|
12
|
-
* Trust tier enum values
|
|
12
|
+
* Trust tier enum values — public-facing API values only.
|
|
13
|
+
* SMI-5205: experimental/unknown translated to community/unverified at response layer.
|
|
13
14
|
*/
|
|
14
15
|
export const TrustTierSchema = z.enum([
|
|
16
|
+
'official',
|
|
15
17
|
'verified',
|
|
16
18
|
'curated',
|
|
17
19
|
'community',
|
|
18
|
-
'
|
|
19
|
-
'unknown',
|
|
20
|
+
'unverified',
|
|
20
21
|
]);
|
|
21
22
|
// ============================================================================
|
|
22
23
|
// API Search Result Schema
|
|
@@ -33,7 +34,7 @@ export const ApiSearchResultSchema = z.object({
|
|
|
33
34
|
publisher: z.string().nullable().optional(),
|
|
34
35
|
repo_url: z.string().nullable().optional(),
|
|
35
36
|
quality_score: z.number().nullable(),
|
|
36
|
-
trust_tier: TrustTierSchema.optional().default('
|
|
37
|
+
trust_tier: TrustTierSchema.optional().default('unverified'),
|
|
37
38
|
tags: z.array(z.string()).default([]),
|
|
38
39
|
stars: z.number().nullable().optional(),
|
|
39
40
|
installable: z.boolean().nullable().optional(),
|
|
@@ -45,10 +46,18 @@ export const ApiSearchResultSchema = z.object({
|
|
|
45
46
|
// also be declared here or Zod strips them before get-skill.ts can read them.
|
|
46
47
|
// All .optional() — skills-search doesn't select these columns.
|
|
47
48
|
categories: z.array(z.string()).optional(),
|
|
49
|
+
// SMI-5178: cross-ecosystem compatibility slugs. Declared here so Zod does not
|
|
50
|
+
// strip the field skills-search now hydrates — without this the MCP compatibility
|
|
51
|
+
// filter reads `undefined` and the restrictive default is a no-op.
|
|
52
|
+
compatibility: z.array(z.string()).optional(),
|
|
48
53
|
security_score: z.number().nullable().optional(),
|
|
49
54
|
last_scanned_at: z.string().nullable().optional(),
|
|
50
55
|
security_findings: z.array(z.unknown()).nullable().optional(),
|
|
51
56
|
quarantined: z.boolean().optional(),
|
|
57
|
+
// SMI-5327: SPDX license surfaced by skills-get / skills-search. Declared here
|
|
58
|
+
// so Zod does not strip the field before get-skill.ts / search.ts read it
|
|
59
|
+
// (same reason as compatibility above). skills-search may omit it → optional.
|
|
60
|
+
license: z.string().nullable().optional(),
|
|
52
61
|
});
|
|
53
62
|
// ============================================================================
|
|
54
63
|
// API Response Schema Factory
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../src/api/schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../src/api/schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-5327: regression guard for the Zod strip boundary.
|
|
3
|
+
*
|
|
4
|
+
* ApiSearchResultSchema is a `z.object` (strip-by-default). `license` is surfaced
|
|
5
|
+
* by skills-get / skills-search (SMI-5320) but is silently dropped before the MCP
|
|
6
|
+
* `search` / `get_skill` tools can read it unless declared in the schema — which
|
|
7
|
+
* would make the license display a permanent "Unknown". This test fails the moment
|
|
8
|
+
* `license` is removed from the schema. Mirrors schemas.compatibility.test.ts.
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=schemas.license.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.license.test.d.ts","sourceRoot":"","sources":["../../../src/api/schemas.license.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-5327: regression guard for the Zod strip boundary.
|
|
3
|
+
*
|
|
4
|
+
* ApiSearchResultSchema is a `z.object` (strip-by-default). `license` is surfaced
|
|
5
|
+
* by skills-get / skills-search (SMI-5320) but is silently dropped before the MCP
|
|
6
|
+
* `search` / `get_skill` tools can read it unless declared in the schema — which
|
|
7
|
+
* would make the license display a permanent "Unknown". This test fails the moment
|
|
8
|
+
* `license` is removed from the schema. Mirrors schemas.compatibility.test.ts.
|
|
9
|
+
*/
|
|
10
|
+
import { describe, it, expect } from 'vitest';
|
|
11
|
+
import { ApiSearchResultSchema } from './schemas.js';
|
|
12
|
+
describe('ApiSearchResultSchema — license passthrough (SMI-5327)', () => {
|
|
13
|
+
it('retains an SPDX license string through parse (not stripped)', () => {
|
|
14
|
+
const parsed = ApiSearchResultSchema.parse({
|
|
15
|
+
id: 'acme/skill',
|
|
16
|
+
name: 'skill',
|
|
17
|
+
description: 'desc',
|
|
18
|
+
author: 'acme',
|
|
19
|
+
quality_score: 0.9,
|
|
20
|
+
trust_tier: 'verified',
|
|
21
|
+
tags: ['testing'],
|
|
22
|
+
license: 'MIT',
|
|
23
|
+
});
|
|
24
|
+
expect(parsed.license).toBe('MIT');
|
|
25
|
+
});
|
|
26
|
+
it('retains an explicit null license through parse (null = unknown, not dropped)', () => {
|
|
27
|
+
const parsed = ApiSearchResultSchema.parse({
|
|
28
|
+
id: 'acme/skill',
|
|
29
|
+
name: 'skill',
|
|
30
|
+
description: 'desc',
|
|
31
|
+
author: 'acme',
|
|
32
|
+
quality_score: 0.9,
|
|
33
|
+
trust_tier: 'verified',
|
|
34
|
+
tags: ['testing'],
|
|
35
|
+
license: null,
|
|
36
|
+
});
|
|
37
|
+
expect(parsed.license).toBeNull();
|
|
38
|
+
});
|
|
39
|
+
it('is optional — absent license parses without error', () => {
|
|
40
|
+
const parsed = ApiSearchResultSchema.parse({
|
|
41
|
+
id: 'acme/skill',
|
|
42
|
+
name: 'skill',
|
|
43
|
+
description: null,
|
|
44
|
+
author: null,
|
|
45
|
+
quality_score: null,
|
|
46
|
+
tags: [],
|
|
47
|
+
});
|
|
48
|
+
expect(parsed.license).toBeUndefined();
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
//# sourceMappingURL=schemas.license.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.license.test.js","sourceRoot":"","sources":["../../../src/api/schemas.license.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAEpD,QAAQ,CAAC,wDAAwD,EAAE,GAAG,EAAE;IACtE,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,CAAC;YACzC,EAAE,EAAE,YAAY;YAChB,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,MAAM;YACnB,MAAM,EAAE,MAAM;YACd,aAAa,EAAE,GAAG;YAClB,UAAU,EAAE,UAAU;YACtB,IAAI,EAAE,CAAC,SAAS,CAAC;YACjB,OAAO,EAAE,KAAK;SACf,CAAC,CAAA;QACF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACpC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8EAA8E,EAAE,GAAG,EAAE;QACtF,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,CAAC;YACzC,EAAE,EAAE,YAAY;YAChB,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,MAAM;YACnB,MAAM,EAAE,MAAM;YACd,aAAa,EAAE,GAAG;YAClB,UAAU,EAAE,UAAU;YACtB,IAAI,EAAE,CAAC,SAAS,CAAC;YACjB,OAAO,EAAE,IAAI;SACd,CAAC,CAAA;QACF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAA;IACnC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,CAAC;YACzC,EAAE,EAAE,YAAY;YAChB,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,IAAI;YACjB,MAAM,EAAE,IAAI;YACZ,aAAa,EAAE,IAAI;YACnB,IAAI,EAAE,EAAE;SACT,CAAC,CAAA;QACF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAA;IACxC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
package/dist/src/api/types.d.ts
CHANGED
|
@@ -2,17 +2,19 @@
|
|
|
2
2
|
* API Types matching OpenAPI specification
|
|
3
3
|
* @module api/types
|
|
4
4
|
*
|
|
5
|
-
* These types are aligned with docs/api/openapi.yaml for type-safe API interactions.
|
|
5
|
+
* These types are aligned with docs/internal/api/openapi.yaml for type-safe API interactions.
|
|
6
6
|
* Uses snake_case for API wire format compatibility.
|
|
7
7
|
*/
|
|
8
8
|
/**
|
|
9
9
|
* Trust tier levels from API
|
|
10
10
|
*/
|
|
11
|
-
export
|
|
11
|
+
export declare const API_TRUST_TIERS: readonly ["official", "verified", "curated", "community", "unverified"];
|
|
12
|
+
export type ApiTrustTier = (typeof API_TRUST_TIERS)[number];
|
|
12
13
|
/**
|
|
13
14
|
* Skill category filter values
|
|
14
15
|
*/
|
|
15
|
-
export
|
|
16
|
+
export declare const API_CATEGORIES: readonly ["Development", "Testing", "DevOps", "Documentation", "Productivity", "Security"];
|
|
17
|
+
export type ApiCategory = (typeof API_CATEGORIES)[number];
|
|
16
18
|
/**
|
|
17
19
|
* Project type for recommendations
|
|
18
20
|
*/
|
|
@@ -48,6 +50,13 @@ export interface ApiSkill {
|
|
|
48
50
|
updated_at: string;
|
|
49
51
|
/** Associated category names (joined from skill_categories by skills-get) */
|
|
50
52
|
categories?: string[];
|
|
53
|
+
/**
|
|
54
|
+
* SMI-5178: Cross-ecosystem compatibility slugs (e.g. ["claude-code","copilot"]),
|
|
55
|
+
* derived from skill_path by the indexer (SMI-5177). `[]`/absent = unknown/unscoped,
|
|
56
|
+
* NOT incompatible. Hydrated onto search results by skills-search; returned by
|
|
57
|
+
* skills-get via `.select('*')`.
|
|
58
|
+
*/
|
|
59
|
+
compatibility?: string[];
|
|
51
60
|
/**
|
|
52
61
|
* SMI-4240: Security scan fields returned by skills-get via `...skill` spread.
|
|
53
62
|
* All optional/nullable to preserve compatibility with pre-4240 responses and
|
|
@@ -61,6 +70,12 @@ export interface ApiSkill {
|
|
|
61
70
|
security_findings?: unknown[] | null;
|
|
62
71
|
/** True when the skill is quarantined due to security score threshold */
|
|
63
72
|
quarantined?: boolean;
|
|
73
|
+
/**
|
|
74
|
+
* SMI-5327: SPDX license identifier returned by skills-get / skills-search
|
|
75
|
+
* (e.g. "MIT", "Apache-2.0"). Null means "unknown / not detected" — NOT
|
|
76
|
+
* "no restrictions" or "freely usable".
|
|
77
|
+
*/
|
|
78
|
+
license?: string | null;
|
|
64
79
|
}
|
|
65
80
|
/**
|
|
66
81
|
* Search result from API (Skill with rank)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/api/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH;;GAEG;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/api/types.ts"],"names":[],"mappings":"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"}
|
package/dist/src/api/types.js
CHANGED
|
@@ -2,8 +2,35 @@
|
|
|
2
2
|
* API Types matching OpenAPI specification
|
|
3
3
|
* @module api/types
|
|
4
4
|
*
|
|
5
|
-
* These types are aligned with docs/api/openapi.yaml for type-safe API interactions.
|
|
5
|
+
* These types are aligned with docs/internal/api/openapi.yaml for type-safe API interactions.
|
|
6
6
|
* Uses snake_case for API wire format compatibility.
|
|
7
7
|
*/
|
|
8
|
-
|
|
8
|
+
// ============================================================================
|
|
9
|
+
// Trust Tier (matches OpenAPI trust_tier enum)
|
|
10
|
+
// ============================================================================
|
|
11
|
+
/**
|
|
12
|
+
* Trust tier levels from API
|
|
13
|
+
*/
|
|
14
|
+
// SMI-5205: 5-tier public model; experimental/unknown are internal only (translated at response layer)
|
|
15
|
+
export const API_TRUST_TIERS = [
|
|
16
|
+
'official',
|
|
17
|
+
'verified',
|
|
18
|
+
'curated',
|
|
19
|
+
'community',
|
|
20
|
+
'unverified',
|
|
21
|
+
];
|
|
22
|
+
// ============================================================================
|
|
23
|
+
// Category (matches OpenAPI category enum)
|
|
24
|
+
// ============================================================================
|
|
25
|
+
/**
|
|
26
|
+
* Skill category filter values
|
|
27
|
+
*/
|
|
28
|
+
export const API_CATEGORIES = [
|
|
29
|
+
'Development',
|
|
30
|
+
'Testing',
|
|
31
|
+
'DevOps',
|
|
32
|
+
'Documentation',
|
|
33
|
+
'Productivity',
|
|
34
|
+
'Security',
|
|
35
|
+
];
|
|
9
36
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/api/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/api/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,+EAA+E;AAC/E,+CAA+C;AAC/C,+EAA+E;AAE/E;;GAEG;AACH,uGAAuG;AACvG,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,UAAU;IACV,UAAU;IACV,SAAS;IACT,WAAW;IACX,YAAY;CACJ,CAAA;AAGV,+EAA+E;AAC/E,2CAA2C;AAC3C,+EAA+E;AAE/E;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,aAAa;IACb,SAAS;IACT,QAAQ;IACR,eAAe;IACf,cAAc;IACd,UAAU;CACF,CAAA"}
|
|
@@ -6,6 +6,24 @@ export interface InstallEventPayload {
|
|
|
6
6
|
trustTier?: string;
|
|
7
7
|
errorCode?: string;
|
|
8
8
|
}
|
|
9
|
+
/**
|
|
10
|
+
* SMI-5193: Search-event payload emitted from the MCP `search` tool to the
|
|
11
|
+
* Skillsmith telemetry endpoint (`/functions/v1/events`).
|
|
12
|
+
*
|
|
13
|
+
* **All keys MUST be snake_case** — the `events` edge function's
|
|
14
|
+
* `sanitizeMetadata` allowlists `results_count`, `duration_ms`, `has_query`,
|
|
15
|
+
* `trust_tier`, `category`. camelCase variants are silently dropped server-side
|
|
16
|
+
* (event accepted, metadata lost). The event name is `'search'` (in the edge
|
|
17
|
+
* function's `ALLOWED_EVENTS`); `'skill_search'` would 400 silently.
|
|
18
|
+
*/
|
|
19
|
+
export interface SearchEventPayload {
|
|
20
|
+
query: string;
|
|
21
|
+
results_count: number;
|
|
22
|
+
duration_ms: number;
|
|
23
|
+
has_query: boolean;
|
|
24
|
+
trust_tier?: string;
|
|
25
|
+
category?: string;
|
|
26
|
+
}
|
|
9
27
|
/**
|
|
10
28
|
* Emit a skill-install event to Skillsmith's remote telemetry endpoint.
|
|
11
29
|
*
|
|
@@ -25,4 +43,27 @@ export interface InstallEventPayload {
|
|
|
25
43
|
* metadata: { skill_id, source, success, duration_ms?, trust_tier?, error_code? }
|
|
26
44
|
*/
|
|
27
45
|
export declare function emitInstallEvent(payload: InstallEventPayload): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* SMI-5193: Emit a search event to Skillsmith's remote telemetry endpoint.
|
|
48
|
+
*
|
|
49
|
+
* Fire-and-forget (synchronous, returns `void`) — wraps `postTelemetryEvent`
|
|
50
|
+
* with `void` so the caller never awaits. The MCP search tool calls this
|
|
51
|
+
* after a search completes so the usage report's search count reflects MCP
|
|
52
|
+
* searches (landing in `search_metrics` via the `events` edge function).
|
|
53
|
+
*
|
|
54
|
+
* Silently skips in these cases:
|
|
55
|
+
* - No API key available (CLI offline / unauthenticated)
|
|
56
|
+
* - SKILLSMITH_TELEMETRY=0 (opt-out)
|
|
57
|
+
* - Network / endpoint failure
|
|
58
|
+
*
|
|
59
|
+
* CRITICAL — silent-failure modes that motivated this signature:
|
|
60
|
+
* - `event` MUST be `'search'` (in `events/index.ts` ALLOWED_EVENTS).
|
|
61
|
+
* `'skill_search'` would 400 silently.
|
|
62
|
+
* - `anonymous_id` is REQUIRED (validated as 16-128 char hex server-side).
|
|
63
|
+
* Missing → 400 silently.
|
|
64
|
+
* - Metadata keys MUST be snake_case — `sanitizeMetadata` allowlists
|
|
65
|
+
* `results_count`, `duration_ms`, `has_query`, `trust_tier`, `category`.
|
|
66
|
+
* camelCase variants are silently dropped.
|
|
67
|
+
*/
|
|
68
|
+
export declare function emitSearchEvent(payload: SearchEventPayload): void;
|
|
28
69
|
//# sourceMappingURL=remote-audit.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote-audit.d.ts","sourceRoot":"","sources":["../../../src/audit/remote-audit.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,CAAA;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;
|
|
1
|
+
{"version":3,"file":"remote-audit.d.ts","sourceRoot":"","sources":["../../../src/audit/remote-audit.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,CAAA;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,OAAO,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAsED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBlF;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAUjE"}
|
|
@@ -32,6 +32,31 @@ function isDisabled() {
|
|
|
32
32
|
const flag = process.env.SKILLSMITH_TELEMETRY;
|
|
33
33
|
return flag === '0' || flag === 'false' || flag === 'off';
|
|
34
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Best-effort POST to the Skillsmith events endpoint.
|
|
37
|
+
*
|
|
38
|
+
* Used by all `emit*Event` exports — never throws, swallows network/abort/
|
|
39
|
+
* endpoint errors, and respects the 2s timeout. Telemetry failures must
|
|
40
|
+
* never break the caller's flow.
|
|
41
|
+
*/
|
|
42
|
+
async function postTelemetryEvent(body) {
|
|
43
|
+
const controller = new AbortController();
|
|
44
|
+
const timer = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);
|
|
45
|
+
try {
|
|
46
|
+
await fetch(`${getApiBase()}${EVENT_ENDPOINT}`, {
|
|
47
|
+
method: 'POST',
|
|
48
|
+
headers: { 'content-type': 'application/json' },
|
|
49
|
+
signal: controller.signal,
|
|
50
|
+
body: JSON.stringify(body),
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// Best-effort: swallow all errors (network, abort, endpoint down).
|
|
55
|
+
}
|
|
56
|
+
finally {
|
|
57
|
+
clearTimeout(timer);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
35
60
|
/**
|
|
36
61
|
* Emit a skill-install event to Skillsmith's remote telemetry endpoint.
|
|
37
62
|
*
|
|
@@ -56,33 +81,51 @@ export async function emitInstallEvent(payload) {
|
|
|
56
81
|
const apiKey = getApiKey();
|
|
57
82
|
if (!apiKey)
|
|
58
83
|
return;
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
84
|
+
await postTelemetryEvent({
|
|
85
|
+
event: 'skill_install',
|
|
86
|
+
anonymous_id: hashForActor(apiKey),
|
|
87
|
+
metadata: {
|
|
88
|
+
skill_id: payload.skillId,
|
|
89
|
+
source: payload.source,
|
|
90
|
+
success: payload.success,
|
|
91
|
+
...(payload.durationMs !== undefined && { duration_ms: payload.durationMs }),
|
|
92
|
+
...(payload.trustTier !== undefined && { trust_tier: payload.trustTier }),
|
|
93
|
+
...(payload.errorCode !== undefined && { error_code: payload.errorCode }),
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* SMI-5193: Emit a search event to Skillsmith's remote telemetry endpoint.
|
|
99
|
+
*
|
|
100
|
+
* Fire-and-forget (synchronous, returns `void`) — wraps `postTelemetryEvent`
|
|
101
|
+
* with `void` so the caller never awaits. The MCP search tool calls this
|
|
102
|
+
* after a search completes so the usage report's search count reflects MCP
|
|
103
|
+
* searches (landing in `search_metrics` via the `events` edge function).
|
|
104
|
+
*
|
|
105
|
+
* Silently skips in these cases:
|
|
106
|
+
* - No API key available (CLI offline / unauthenticated)
|
|
107
|
+
* - SKILLSMITH_TELEMETRY=0 (opt-out)
|
|
108
|
+
* - Network / endpoint failure
|
|
109
|
+
*
|
|
110
|
+
* CRITICAL — silent-failure modes that motivated this signature:
|
|
111
|
+
* - `event` MUST be `'search'` (in `events/index.ts` ALLOWED_EVENTS).
|
|
112
|
+
* `'skill_search'` would 400 silently.
|
|
113
|
+
* - `anonymous_id` is REQUIRED (validated as 16-128 char hex server-side).
|
|
114
|
+
* Missing → 400 silently.
|
|
115
|
+
* - Metadata keys MUST be snake_case — `sanitizeMetadata` allowlists
|
|
116
|
+
* `results_count`, `duration_ms`, `has_query`, `trust_tier`, `category`.
|
|
117
|
+
* camelCase variants are silently dropped.
|
|
118
|
+
*/
|
|
119
|
+
export function emitSearchEvent(payload) {
|
|
120
|
+
if (isDisabled())
|
|
121
|
+
return;
|
|
122
|
+
const apiKey = getApiKey();
|
|
123
|
+
if (!apiKey)
|
|
124
|
+
return;
|
|
125
|
+
void postTelemetryEvent({
|
|
126
|
+
event: 'search',
|
|
127
|
+
anonymous_id: hashForActor(apiKey),
|
|
128
|
+
metadata: payload,
|
|
129
|
+
});
|
|
87
130
|
}
|
|
88
131
|
//# sourceMappingURL=remote-audit.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote-audit.js","sourceRoot":"","sources":["../../../src/audit/remote-audit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"remote-audit.js","sourceRoot":"","sources":["../../../src/audit/remote-audit.ts"],"names":[],"mappings":"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"}
|