@skillsmith/core 0.12.3 → 0.12.5
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 +168 -0
- package/README.md +2 -2
- package/dist/.tsbuildinfo +1 -1
- package/dist/src/config/owned-lock.acquire.d.ts +8 -0
- package/dist/src/config/owned-lock.acquire.d.ts.map +1 -1
- package/dist/src/config/owned-lock.acquire.js +19 -4
- package/dist/src/config/owned-lock.acquire.js.map +1 -1
- package/dist/src/config/owned-lock.claim.d.ts +4 -2
- package/dist/src/config/owned-lock.claim.d.ts.map +1 -1
- package/dist/src/config/owned-lock.claim.js +42 -8
- package/dist/src/config/owned-lock.claim.js.map +1 -1
- package/dist/src/config/owned-lock.d.ts.map +1 -1
- package/dist/src/config/owned-lock.js +1 -0
- package/dist/src/config/owned-lock.js.map +1 -1
- package/dist/src/config/owned-lock.test.js +126 -2
- package/dist/src/config/owned-lock.test.js.map +1 -1
- package/dist/src/config/owned-lock.types.d.ts +9 -0
- package/dist/src/config/owned-lock.types.d.ts.map +1 -1
- package/dist/src/db/createDatabase.d.ts.map +1 -1
- package/dist/src/db/createDatabase.js +0 -2
- package/dist/src/db/createDatabase.js.map +1 -1
- package/dist/src/exports/services.install.d.ts +1 -0
- package/dist/src/exports/services.install.d.ts.map +1 -1
- package/dist/src/exports/services.install.js +5 -0
- package/dist/src/exports/services.install.js.map +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/install/fan-out.cleanup.d.ts +37 -0
- package/dist/src/install/fan-out.cleanup.d.ts.map +1 -0
- package/dist/src/install/fan-out.cleanup.js +75 -0
- package/dist/src/install/fan-out.cleanup.js.map +1 -0
- package/dist/src/install/fan-out.d.ts +41 -31
- package/dist/src/install/fan-out.d.ts.map +1 -1
- package/dist/src/install/fan-out.js +213 -112
- package/dist/src/install/fan-out.js.map +1 -1
- package/dist/src/install/fan-out.leftovers.d.ts +60 -0
- package/dist/src/install/fan-out.leftovers.d.ts.map +1 -0
- package/dist/src/install/fan-out.leftovers.js +251 -0
- package/dist/src/install/fan-out.leftovers.js.map +1 -0
- package/dist/src/install/fan-out.locks.d.ts +12 -0
- package/dist/src/install/fan-out.locks.d.ts.map +1 -0
- package/dist/src/install/fan-out.locks.js +114 -0
- package/dist/src/install/fan-out.locks.js.map +1 -0
- package/dist/src/install/fan-out.manifest.d.ts +64 -0
- package/dist/src/install/fan-out.manifest.d.ts.map +1 -0
- package/dist/src/install/fan-out.manifest.js +130 -0
- package/dist/src/install/fan-out.manifest.js.map +1 -0
- package/dist/src/install/fan-out.overwrite.d.ts +51 -0
- package/dist/src/install/fan-out.overwrite.d.ts.map +1 -0
- package/dist/src/install/fan-out.overwrite.js +343 -0
- package/dist/src/install/fan-out.overwrite.js.map +1 -0
- package/dist/src/install/remove-if-same.d.ts +58 -0
- package/dist/src/install/remove-if-same.d.ts.map +1 -0
- package/dist/src/install/remove-if-same.js +222 -0
- package/dist/src/install/remove-if-same.js.map +1 -0
- package/dist/src/provenance/backfill.d.ts.map +1 -1
- package/dist/src/provenance/backfill.js +15 -2
- package/dist/src/provenance/backfill.js.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.scanners.d.ts.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.scanners.js +8 -1
- package/dist/src/security/scanner/SecurityScanner.scanners.js.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.value-gate.d.ts +22 -2
- package/dist/src/security/scanner/SecurityScanner.value-gate.d.ts.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.value-gate.js +143 -6
- package/dist/src/security/scanner/SecurityScanner.value-gate.js.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.weak-passwords.d.ts +2 -2
- package/dist/src/security/scanner/SecurityScanner.weak-passwords.d.ts.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.weak-passwords.js +185 -190
- package/dist/src/security/scanner/SecurityScanner.weak-passwords.js.map +1 -1
- package/dist/src/security/scanner/patterns.d.ts +47 -2
- package/dist/src/security/scanner/patterns.d.ts.map +1 -1
- package/dist/src/security/scanner/patterns.js +48 -3
- package/dist/src/security/scanner/patterns.js.map +1 -1
- package/dist/src/security/scanner/patterns.sensitive-path.d.ts +31 -3
- package/dist/src/security/scanner/patterns.sensitive-path.d.ts.map +1 -1
- package/dist/src/security/scanner/patterns.sensitive-path.js +59 -4
- package/dist/src/security/scanner/patterns.sensitive-path.js.map +1 -1
- package/dist/src/services/agent-pack/prompt-source.d.ts.map +1 -1
- package/dist/src/services/agent-pack/prompt-source.js +3 -2
- package/dist/src/services/agent-pack/prompt-source.js.map +1 -1
- package/dist/src/services/skill-installation.content.d.ts +7 -2
- package/dist/src/services/skill-installation.content.d.ts.map +1 -1
- package/dist/src/services/skill-installation.content.js +75 -28
- package/dist/src/services/skill-installation.content.js.map +1 -1
- package/dist/src/services/skill-installation.helpers.d.ts.map +1 -1
- package/dist/src/services/skill-installation.helpers.js +8 -0
- package/dist/src/services/skill-installation.helpers.js.map +1 -1
- package/dist/src/services/skill-installation.io.d.ts +1 -29
- package/dist/src/services/skill-installation.io.d.ts.map +1 -1
- package/dist/src/services/skill-installation.io.dirs.d.ts +15 -0
- package/dist/src/services/skill-installation.io.dirs.d.ts.map +1 -0
- package/dist/src/services/skill-installation.io.dirs.js +84 -0
- package/dist/src/services/skill-installation.io.dirs.js.map +1 -0
- package/dist/src/services/skill-installation.io.js +6 -176
- package/dist/src/services/skill-installation.io.js.map +1 -1
- package/dist/src/services/skill-installation.io.rollback.d.ts +138 -0
- package/dist/src/services/skill-installation.io.rollback.d.ts.map +1 -0
- package/dist/src/services/skill-installation.io.rollback.js +218 -0
- package/dist/src/services/skill-installation.io.rollback.js.map +1 -0
- package/dist/src/services/skill-installation.io.write.d.ts +69 -0
- package/dist/src/services/skill-installation.io.write.d.ts.map +1 -0
- package/dist/src/services/skill-installation.io.write.js +417 -0
- package/dist/src/services/skill-installation.io.write.js.map +1 -0
- package/dist/src/services/skill-installation.service.d.ts.map +1 -1
- package/dist/src/services/skill-installation.service.finalize.d.ts +62 -0
- package/dist/src/services/skill-installation.service.finalize.d.ts.map +1 -0
- package/dist/src/services/skill-installation.service.finalize.js +136 -0
- package/dist/src/services/skill-installation.service.finalize.js.map +1 -0
- package/dist/src/services/skill-installation.service.js +66 -80
- package/dist/src/services/skill-installation.service.js.map +1 -1
- package/dist/src/services/skill-installation.target-guard.d.ts +82 -0
- package/dist/src/services/skill-installation.target-guard.d.ts.map +1 -0
- package/dist/src/services/skill-installation.target-guard.js +410 -0
- package/dist/src/services/skill-installation.target-guard.js.map +1 -0
- package/dist/src/services/skill-installation.types.d.ts +13 -1
- package/dist/src/services/skill-installation.types.d.ts.map +1 -1
- package/dist/src/services/skill-installation.types.js.map +1 -1
- package/dist/src/services/skill-installation.uninstall.d.ts +3 -1
- package/dist/src/services/skill-installation.uninstall.d.ts.map +1 -1
- package/dist/src/services/skill-installation.uninstall.helpers.d.ts +59 -0
- package/dist/src/services/skill-installation.uninstall.helpers.d.ts.map +1 -0
- package/dist/src/services/skill-installation.uninstall.helpers.js +124 -0
- package/dist/src/services/skill-installation.uninstall.helpers.js.map +1 -0
- package/dist/src/services/skill-installation.uninstall.js +148 -25
- package/dist/src/services/skill-installation.uninstall.js.map +1 -1
- package/dist/src/utils/safe-fs.d.ts +69 -0
- package/dist/src/utils/safe-fs.d.ts.map +1 -1
- package/dist/src/utils/safe-fs.js +113 -2
- package/dist/src/utils/safe-fs.js.map +1 -1
- package/dist/tests/install/fan-out.test.js +1951 -13
- package/dist/tests/install/fan-out.test.js.map +1 -1
- package/dist/tests/install/remove-if-same.test.d.ts +2 -0
- package/dist/tests/install/remove-if-same.test.d.ts.map +1 -0
- package/dist/tests/install/remove-if-same.test.js +298 -0
- package/dist/tests/install/remove-if-same.test.js.map +1 -0
- package/dist/tests/integration/fan-out-lock-contention.test.d.ts +11 -0
- package/dist/tests/integration/fan-out-lock-contention.test.d.ts.map +1 -0
- package/dist/tests/integration/fan-out-lock-contention.test.js +53 -0
- package/dist/tests/integration/fan-out-lock-contention.test.js.map +1 -0
- package/dist/tests/provenance/backfill.test.js +43 -0
- package/dist/tests/provenance/backfill.test.js.map +1 -1
- package/dist/tests/security/scanner-regression-guard.test.js +33 -5
- package/dist/tests/security/scanner-regression-guard.test.js.map +1 -1
- package/dist/tests/security/sensitive-path-adversarial-review.test.js +120 -0
- package/dist/tests/security/sensitive-path-adversarial-review.test.js.map +1 -1
- package/dist/tests/security/sensitive-path-boolean-flag.test.d.ts +2 -0
- package/dist/tests/security/sensitive-path-boolean-flag.test.d.ts.map +1 -0
- package/dist/tests/security/sensitive-path-boolean-flag.test.js +151 -0
- package/dist/tests/security/sensitive-path-boolean-flag.test.js.map +1 -0
- package/dist/tests/security/sensitive-path-fp.test.js +71 -5
- package/dist/tests/security/sensitive-path-fp.test.js.map +1 -1
- package/dist/tests/security/sensitive-path-prefixed-secrets.test.d.ts +2 -0
- package/dist/tests/security/sensitive-path-prefixed-secrets.test.d.ts.map +1 -0
- package/dist/tests/security/sensitive-path-prefixed-secrets.test.js +176 -0
- package/dist/tests/security/sensitive-path-prefixed-secrets.test.js.map +1 -0
- package/dist/tests/security/weak-password-lexicon.test.js +14 -4
- package/dist/tests/security/weak-password-lexicon.test.js.map +1 -1
- package/dist/tests/unit/services/skill-installation.content.test.js +23 -0
- package/dist/tests/unit/services/skill-installation.content.test.js.map +1 -1
- package/dist/tests/unit/services/skill-installation.io.client-agent-path.test.js +35 -14
- package/dist/tests/unit/services/skill-installation.io.client-agent-path.test.js.map +1 -1
- package/dist/tests/unit/services/skill-installation.io.rollback.test.d.ts +2 -0
- package/dist/tests/unit/services/skill-installation.io.rollback.test.d.ts.map +1 -0
- package/dist/tests/unit/services/skill-installation.io.rollback.test.js +984 -0
- package/dist/tests/unit/services/skill-installation.io.rollback.test.js.map +1 -0
- package/dist/tests/unit/services/skill-installation.io.rollback.unit.test.d.ts +2 -0
- package/dist/tests/unit/services/skill-installation.io.rollback.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/services/skill-installation.io.rollback.unit.test.js +148 -0
- package/dist/tests/unit/services/skill-installation.io.rollback.unit.test.js.map +1 -0
- package/dist/tests/unit/services/skill-installation.service.error-codes.test.js +19 -0
- package/dist/tests/unit/services/skill-installation.service.error-codes.test.js.map +1 -1
- package/dist/tests/unit/services/skill-installation.service.finalize.test.d.ts +2 -0
- package/dist/tests/unit/services/skill-installation.service.finalize.test.d.ts.map +1 -0
- package/dist/tests/unit/services/skill-installation.service.finalize.test.js +147 -0
- package/dist/tests/unit/services/skill-installation.service.finalize.test.js.map +1 -0
- package/dist/tests/unit/services/skill-installation.service.test.js +43 -0
- package/dist/tests/unit/services/skill-installation.service.test.js.map +1 -1
- package/dist/tests/unit/services/skill-installation.target-guard.test.d.ts +2 -0
- package/dist/tests/unit/services/skill-installation.target-guard.test.d.ts.map +1 -0
- package/dist/tests/unit/services/skill-installation.target-guard.test.js +590 -0
- package/dist/tests/unit/services/skill-installation.target-guard.test.js.map +1 -0
- package/dist/tests/unit/services/skill-installation.uninstall.guard.test.d.ts +2 -0
- package/dist/tests/unit/services/skill-installation.uninstall.guard.test.d.ts.map +1 -0
- package/dist/tests/unit/services/skill-installation.uninstall.guard.test.js +473 -0
- package/dist/tests/unit/services/skill-installation.uninstall.guard.test.js.map +1 -0
- package/dist/tests/utils/safe-fs.test.js +129 -2
- package/dist/tests/utils/safe-fs.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -7,7 +7,7 @@ export declare const DEFAULT_ALLOWED_DOMAINS: string[];
|
|
|
7
7
|
export declare const ANON_PASTE_HOSTS: string[];
|
|
8
8
|
export declare const TRANSIENT_TRANSFER_HOSTS: string[];
|
|
9
9
|
export declare const URL_SHORTENER_DOMAINS: string[];
|
|
10
|
-
export { ENV_PATH_PATTERN, SENSITIVE_PATH_PATTERNS, VALUE_GATED_KEYWORD_PATTERNS, PATH_FORM_PATTERNS, VALUE_GATED_ASSIGNMENT_PATTERNS, } from './patterns.sensitive-path.js';
|
|
10
|
+
export { ENV_PATH_PATTERN, SENSITIVE_PATH_PATTERNS, VALUE_GATED_KEYWORD_PATTERNS, PATH_FORM_PATTERNS, VALUE_GATED_ASSIGNMENT_PATTERNS, OBSERVE_ONLY_MEDIUM_PATTERNS, } from './patterns.sensitive-path.js';
|
|
11
11
|
export { JAILBREAK_PATTERNS, AI_DEFENCE_PATTERNS } from './patterns.jailbreak.js';
|
|
12
12
|
export { EVIDENCE_TYPE_BY_PATTERN } from './patterns.jailbreak.evidence.js';
|
|
13
13
|
/**
|
|
@@ -83,8 +83,53 @@ export { EVIDENCE_TYPE_BY_PATTERN } from './patterns.jailbreak.evidence.js';
|
|
|
83
83
|
* one is *previously-flagged-content-now-clean* — without it, the
|
|
84
84
|
* `comparable` gate keeps reusing a stored `malicious` verdict produced by
|
|
85
85
|
* the pre-fix ruleset, and the fix never reaches an already-scanned skill.
|
|
86
|
+
*
|
|
87
|
+
* Bumped to `2026-09-09.1`: SMI-6441 added the MF-4b common-password veto on
|
|
88
|
+
* the assignment-value 2-token documentation-label carve-out. Direction
|
|
89
|
+
* note — unlike SMI-5207's bump immediately above (previously-flagged-
|
|
90
|
+
* content-now-clean), this one is *previously-clean-now-flagged*: without
|
|
91
|
+
* it, the `comparable` gate keeps reusing a stored clean verdict produced by
|
|
92
|
+
* the pre-SMI-6441 ruleset and the tightening never reaches an
|
|
93
|
+
* already-scanned skill.
|
|
94
|
+
*
|
|
95
|
+
* Bumped to `2026-09-10.1`: SMI-6505 added the embedded-key boolean-flag
|
|
96
|
+
* carve-out to the MF-4 assignment-value gate (`allow_credentials=True`, a
|
|
97
|
+
* FastAPI CORS flag, was scoring HIGH and blocking installation). Direction is
|
|
98
|
+
* *previously-flagged-content-now-clean*, the same as SMI-5207's bump two
|
|
99
|
+
* entries above and the opposite of SMI-6441's immediately above — so the bump
|
|
100
|
+
* is load-bearing for exactly the reason stated there: without it the
|
|
101
|
+
* `comparable` gate keeps reusing the stored pre-fix verdict, and an
|
|
102
|
+
* already-scanned skill stays blocked even though the rule no longer flags it.
|
|
103
|
+
* A severity-LOWERING change is the case where forgetting the bump is silent —
|
|
104
|
+
* nothing fails, the fix simply never arrives.
|
|
105
|
+
*
|
|
106
|
+
* Bumped to `2026-09-11.1`: SMI-6508 added MF-5, a fifth severity class
|
|
107
|
+
* (`OBSERVE_ONLY_MEDIUM_PATTERNS`, always MEDIUM) carrying the prefixed
|
|
108
|
+
* `secrets` assignment form — `API_SECRETS=`, `app_secrets=`, `mySecrets=` and
|
|
109
|
+
* the singular `API_SECRET=`, none of which the boundary-carrying
|
|
110
|
+
* SECRETS_ASSIGN_PATTERN could ever match. Direction is
|
|
111
|
+
* *previously-clean-content-now-flagged*, the same as SMI-6441's and the
|
|
112
|
+
* opposite of SMI-6505's immediately above: content that produced no
|
|
113
|
+
* `sensitive_path` finding can now produce a MEDIUM one purely because new
|
|
114
|
+
* detection exists, not because the content changed. Without the bump the
|
|
115
|
+
* `comparable` gate reuses the stored pre-MF-5 verdict and an already-scanned
|
|
116
|
+
* skill never receives the new finding at all.
|
|
117
|
+
*
|
|
118
|
+
* Bumped to `2026-09-11.2`: SMI-6508 follow-up — MF-5's entry was moved to the
|
|
119
|
+
* END of SENSITIVE_PATH_PATTERNS. It had shipped at index 4, and
|
|
120
|
+
* scanSensitivePaths `break`s on the FIRST matching entry in array order, so an
|
|
121
|
+
* always-MEDIUM entry ahead of 11 HIGH-capable ones SUPPRESSED them: `passed`
|
|
122
|
+
* flipped false→true and the install block vanished (appending `# a_secrets:`
|
|
123
|
+
* to a line was sufficient). Direction is *previously-clean-content-now-flagged*
|
|
124
|
+
* again, but for a sharper reason than the entry above — this bump does not
|
|
125
|
+
* merely deliver new detection, it INVALIDATES verdicts that `.1` computed
|
|
126
|
+
* wrongly. A skill scanned under `2026-09-11.1` may carry a stored `passed:
|
|
127
|
+
* true` that the suppression produced; without this bump the `comparable` gate
|
|
128
|
+
* would keep serving it, so the evasion would survive in stored data even
|
|
129
|
+
* though the code no longer permits it. Forgetting the bump here leaves a
|
|
130
|
+
* security hole open, not just a fix undelivered.
|
|
86
131
|
*/
|
|
87
|
-
export declare const SCANNER_RULESET_VERSION: "2026-09-
|
|
132
|
+
export declare const SCANNER_RULESET_VERSION: "2026-09-11.2";
|
|
88
133
|
export declare const SUSPICIOUS_PATTERNS: RegExp[];
|
|
89
134
|
export { CODE_EXECUTION_PATTERNS, IMPERATIVE_FETCH_EXEC_PROSE } from './patterns.exec.js';
|
|
90
135
|
export declare const SOCIAL_ENGINEERING_PATTERNS: RegExp[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../../../src/security/scanner/patterns.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,eAAO,MAAM,uBAAuB,UAanC,CAAA;AAWD,eAAO,MAAM,gBAAgB,UAe5B,CAAA;AAMD,eAAO,MAAM,wBAAwB,UAAwD,CAAA;AAK7F,eAAO,MAAM,qBAAqB,UAA6C,CAAA;AAW/E,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,4BAA4B,EAC5B,kBAAkB,EAClB,+BAA+B,
|
|
1
|
+
{"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../../../src/security/scanner/patterns.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,eAAO,MAAM,uBAAuB,UAanC,CAAA;AAWD,eAAO,MAAM,gBAAgB,UAe5B,CAAA;AAMD,eAAO,MAAM,wBAAwB,UAAwD,CAAA;AAK7F,eAAO,MAAM,qBAAqB,UAA6C,CAAA;AAW/E,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,4BAA4B,EAC5B,kBAAkB,EAClB,+BAA+B,EAC/B,4BAA4B,GAC7B,MAAM,8BAA8B,CAAA;AAUrC,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAIjF,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAA;AAE3E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsHG;AACH,eAAO,MAAM,uBAAuB,EAAG,cAAuB,CAAA;AAG9D,eAAO,MAAM,mBAAmB,UAY/B,CAAA;AAOD,OAAO,EAAE,uBAAuB,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAA;AAGzF,eAAO,MAAM,2BAA2B,UAavC,CAAA;AAGD,eAAO,MAAM,uBAAuB,UAenC,CAAA;AAGD,eAAO,MAAM,0BAA0B,UA2DtC,CAAA;AAMD,eAAO,MAAM,gCAAgC,UAG5C,CAAA;AAGD,eAAO,MAAM,6BAA6B,UA8EzC,CAAA;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,yBAAyB,UAuBrC,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,UAwBxB,CAAA"}
|
|
@@ -52,7 +52,7 @@ export const TRANSIENT_TRANSFER_HOSTS = ['transfer.sh', 'file.io', 'tmpfiles.org
|
|
|
52
52
|
// execution-correlated — a shortened URL piped to a shell has no legitimate
|
|
53
53
|
// install shape (a bare shortened link stays at url:medium like any tier here).
|
|
54
54
|
export const URL_SHORTENER_DOMAINS = ['bit.ly', 'tinyurl.com', 't.co', 'is.gd'];
|
|
55
|
-
// SMI-5207: the whole `sensitive_path` family (ENV_PATH_PATTERN, the
|
|
55
|
+
// SMI-5207: the whole `sensitive_path` family (ENV_PATH_PATTERN, the 16-entry
|
|
56
56
|
// SENSITIVE_PATH_PATTERNS array and the three ReadonlySets that classify its
|
|
57
57
|
// entries by severity gate) moved to patterns.sensitive-path.ts — this file
|
|
58
58
|
// had only 18 lines of headroom under the 500-line pre-commit gate, and the
|
|
@@ -61,7 +61,7 @@ export const URL_SHORTENER_DOMAINS = ['bit.ly', 'tinyurl.com', 't.co', 'is.gd'];
|
|
|
61
61
|
// scanner-regression-guard.test.ts) keeps working AND reference identity is
|
|
62
62
|
// preserved — scanSensitivePaths classifies patterns by reference, so this
|
|
63
63
|
// re-export is load-bearing exactly like the two below it; do not remove.
|
|
64
|
-
export { ENV_PATH_PATTERN, SENSITIVE_PATH_PATTERNS, VALUE_GATED_KEYWORD_PATTERNS, PATH_FORM_PATTERNS, VALUE_GATED_ASSIGNMENT_PATTERNS, } from './patterns.sensitive-path.js';
|
|
64
|
+
export { ENV_PATH_PATTERN, SENSITIVE_PATH_PATTERNS, VALUE_GATED_KEYWORD_PATTERNS, PATH_FORM_PATTERNS, VALUE_GATED_ASSIGNMENT_PATTERNS, OBSERVE_ONLY_MEDIUM_PATTERNS, } from './patterns.sensitive-path.js';
|
|
65
65
|
// Jailbreak attempt patterns
|
|
66
66
|
// SMI-5876 Wave 1: JAILBREAK_PATTERNS and AI_DEFENCE_PATTERNS (below) moved to
|
|
67
67
|
// patterns.jailbreak.ts together with the evidence-tier classification map
|
|
@@ -148,8 +148,53 @@ export { EVIDENCE_TYPE_BY_PATTERN } from './patterns.jailbreak.evidence.js';
|
|
|
148
148
|
* one is *previously-flagged-content-now-clean* — without it, the
|
|
149
149
|
* `comparable` gate keeps reusing a stored `malicious` verdict produced by
|
|
150
150
|
* the pre-fix ruleset, and the fix never reaches an already-scanned skill.
|
|
151
|
+
*
|
|
152
|
+
* Bumped to `2026-09-09.1`: SMI-6441 added the MF-4b common-password veto on
|
|
153
|
+
* the assignment-value 2-token documentation-label carve-out. Direction
|
|
154
|
+
* note — unlike SMI-5207's bump immediately above (previously-flagged-
|
|
155
|
+
* content-now-clean), this one is *previously-clean-now-flagged*: without
|
|
156
|
+
* it, the `comparable` gate keeps reusing a stored clean verdict produced by
|
|
157
|
+
* the pre-SMI-6441 ruleset and the tightening never reaches an
|
|
158
|
+
* already-scanned skill.
|
|
159
|
+
*
|
|
160
|
+
* Bumped to `2026-09-10.1`: SMI-6505 added the embedded-key boolean-flag
|
|
161
|
+
* carve-out to the MF-4 assignment-value gate (`allow_credentials=True`, a
|
|
162
|
+
* FastAPI CORS flag, was scoring HIGH and blocking installation). Direction is
|
|
163
|
+
* *previously-flagged-content-now-clean*, the same as SMI-5207's bump two
|
|
164
|
+
* entries above and the opposite of SMI-6441's immediately above — so the bump
|
|
165
|
+
* is load-bearing for exactly the reason stated there: without it the
|
|
166
|
+
* `comparable` gate keeps reusing the stored pre-fix verdict, and an
|
|
167
|
+
* already-scanned skill stays blocked even though the rule no longer flags it.
|
|
168
|
+
* A severity-LOWERING change is the case where forgetting the bump is silent —
|
|
169
|
+
* nothing fails, the fix simply never arrives.
|
|
170
|
+
*
|
|
171
|
+
* Bumped to `2026-09-11.1`: SMI-6508 added MF-5, a fifth severity class
|
|
172
|
+
* (`OBSERVE_ONLY_MEDIUM_PATTERNS`, always MEDIUM) carrying the prefixed
|
|
173
|
+
* `secrets` assignment form — `API_SECRETS=`, `app_secrets=`, `mySecrets=` and
|
|
174
|
+
* the singular `API_SECRET=`, none of which the boundary-carrying
|
|
175
|
+
* SECRETS_ASSIGN_PATTERN could ever match. Direction is
|
|
176
|
+
* *previously-clean-content-now-flagged*, the same as SMI-6441's and the
|
|
177
|
+
* opposite of SMI-6505's immediately above: content that produced no
|
|
178
|
+
* `sensitive_path` finding can now produce a MEDIUM one purely because new
|
|
179
|
+
* detection exists, not because the content changed. Without the bump the
|
|
180
|
+
* `comparable` gate reuses the stored pre-MF-5 verdict and an already-scanned
|
|
181
|
+
* skill never receives the new finding at all.
|
|
182
|
+
*
|
|
183
|
+
* Bumped to `2026-09-11.2`: SMI-6508 follow-up — MF-5's entry was moved to the
|
|
184
|
+
* END of SENSITIVE_PATH_PATTERNS. It had shipped at index 4, and
|
|
185
|
+
* scanSensitivePaths `break`s on the FIRST matching entry in array order, so an
|
|
186
|
+
* always-MEDIUM entry ahead of 11 HIGH-capable ones SUPPRESSED them: `passed`
|
|
187
|
+
* flipped false→true and the install block vanished (appending `# a_secrets:`
|
|
188
|
+
* to a line was sufficient). Direction is *previously-clean-content-now-flagged*
|
|
189
|
+
* again, but for a sharper reason than the entry above — this bump does not
|
|
190
|
+
* merely deliver new detection, it INVALIDATES verdicts that `.1` computed
|
|
191
|
+
* wrongly. A skill scanned under `2026-09-11.1` may carry a stored `passed:
|
|
192
|
+
* true` that the suppression produced; without this bump the `comparable` gate
|
|
193
|
+
* would keep serving it, so the evasion would survive in stored data even
|
|
194
|
+
* though the code no longer permits it. Forgetting the bump here leaves a
|
|
195
|
+
* security hole open, not just a fix undelivered.
|
|
151
196
|
*/
|
|
152
|
-
export const SCANNER_RULESET_VERSION = '2026-09-
|
|
197
|
+
export const SCANNER_RULESET_VERSION = '2026-09-11.2';
|
|
153
198
|
// Suspicious patterns that might indicate malicious intent
|
|
154
199
|
export const SUSPICIOUS_PATTERNS = [
|
|
155
200
|
/eval\s*\(/i,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../../../src/security/scanner/patterns.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,0BAA0B;AAC1B,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,YAAY;IACZ,uBAAuB;IACvB,2BAA2B;IAC3B,WAAW;IACX,WAAW;IACX,oBAAoB;IACpB,eAAe;IACf,WAAW;IACX,iBAAiB;IACjB,uBAAuB;IACvB,YAAY;IACZ,oBAAoB;CACrB,CAAA;AAED,0EAA0E;AAC1E,0EAA0E;AAC1E,6EAA6E;AAC7E,sDAAsD;AACtD,4EAA4E;AAC5E,yEAAyE;AACzE,6EAA6E;AAC7E,4EAA4E;AAC5E,6DAA6D;AAC7D,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,SAAS;IACT,cAAc;IACd,UAAU;IACV,cAAc;IACd,OAAO;IACP,QAAQ;IACR,YAAY;IACZ,YAAY;IACZ,cAAc;IACd,UAAU;IACV,cAAc;IACd,WAAW;IACX,UAAU;IACV,cAAc;CACf,CAAA;AAED,yEAAyE;AACzE,0EAA0E;AAC1E,sEAAsE;AACtE,0EAA0E;AAC1E,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,aAAa,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,CAAC,CAAA;AAE7F,sEAAsE;AACtE,4EAA4E;AAC5E,gFAAgF;AAChF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;AAE/E,8EAA8E;AAC9E,6EAA6E;AAC7E,4EAA4E;AAC5E,4EAA4E;AAC5E,2EAA2E;AAC3E,+DAA+D;AAC/D,4EAA4E;AAC5E,2EAA2E;AAC3E,0EAA0E;AAC1E,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,4BAA4B,EAC5B,kBAAkB,EAClB,+BAA+B,
|
|
1
|
+
{"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../../../src/security/scanner/patterns.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,9 +37,37 @@ export declare const PATH_FORM_PATTERNS: ReadonlySet<RegExp>;
|
|
|
37
37
|
* the assigned value. See scanSensitivePaths' assignmentHasRealValue().
|
|
38
38
|
*
|
|
39
39
|
* Partition check (guarded by a dedicated test): 1 (ENV) + 9 (PATH_FORM) +
|
|
40
|
-
* 3 (ASSIGNMENT) + 2 (VALUE_GATED_KEYWORD)
|
|
41
|
-
* unclassified future pattern falls through to
|
|
42
|
-
* `else` branch and stays HIGH.
|
|
40
|
+
* 3 (ASSIGNMENT) + 2 (VALUE_GATED_KEYWORD) + 1 (OBSERVE_ONLY_MEDIUM) = 16,
|
|
41
|
+
* total and disjoint. An unclassified future pattern falls through to
|
|
42
|
+
* scanSensitivePaths' fail-CLOSED `else` branch and stays HIGH.
|
|
43
43
|
*/
|
|
44
44
|
export declare const VALUE_GATED_ASSIGNMENT_PATTERNS: ReadonlySet<RegExp>;
|
|
45
|
+
/**
|
|
46
|
+
* SMI-6508 (MF-5): always MEDIUM, never value-gated and never escalated.
|
|
47
|
+
*
|
|
48
|
+
* WHY A NEW CLASS RATHER THAN THE MF-4 SET. Adding the prefixed form to
|
|
49
|
+
* VALUE_GATED_ASSIGNMENT_PATTERNS would make it HIGH-by-default, which blocks
|
|
50
|
+
* installation — there is no allowlist in that path and undoing it costs a
|
|
51
|
+
* package publish. Measured against 66,495 real skill contents in prod: the
|
|
52
|
+
* prefixed form newly matches 259 skills / 418 lines, of which the MF-4 value
|
|
53
|
+
* gate would call 191 "real value" → HIGH, newly blocking 132 skills (0.20% of
|
|
54
|
+
* the corpus, ~975 extrapolated to the full population). Shape analysis put
|
|
55
|
+
* roughly 46% of those 191 in false-positive-looking shapes — multi-word prose,
|
|
56
|
+
* lowercase identifiers, paths — and left 104 genuinely ambiguous.
|
|
57
|
+
*
|
|
58
|
+
* So the detection ships at MEDIUM: the finding becomes visible without costing
|
|
59
|
+
* a single install, and the accumulated real-world findings become the evidence
|
|
60
|
+
* for whether HIGH is justified later. Promoting it is a one-line move into the
|
|
61
|
+
* MF-4 set once that evidence exists.
|
|
62
|
+
*
|
|
63
|
+
* DELIBERATE ASYMMETRY. `DB_PASSWORD=` and `AWS_CREDENTIALS=` already reach
|
|
64
|
+
* HIGH today, because CREDENTIALS_ASSIGN_PATTERN and PASSWORD_ASSIGN_PATTERN
|
|
65
|
+
* carry no `\b` and so have always matched their prefixed forms. Those are
|
|
66
|
+
* grandfathered, not endorsed: their prefixed-form FP rate has never been
|
|
67
|
+
* measured. This entry is MEDIUM because we measured it and the others are not
|
|
68
|
+
* because we have not — that asymmetry reflects the evidence, and levelling it
|
|
69
|
+
* in either direction without measuring first would be the wrong fix. See
|
|
70
|
+
* SMI-6508.
|
|
71
|
+
*/
|
|
72
|
+
export declare const OBSERVE_ONLY_MEDIUM_PATTERNS: ReadonlySet<RegExp>;
|
|
45
73
|
//# sourceMappingURL=patterns.sensitive-path.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patterns.sensitive-path.d.ts","sourceRoot":"","sources":["../../../../src/security/scanner/patterns.sensitive-path.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAmCH,eAAO,MAAM,gBAAgB,QAAoE,CAAA;
|
|
1
|
+
{"version":3,"file":"patterns.sensitive-path.d.ts","sourceRoot":"","sources":["../../../../src/security/scanner/patterns.sensitive-path.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAmCH,eAAO,MAAM,gBAAgB,QAAoE,CAAA;AA0CjG,eAAO,MAAM,uBAAuB,UA4BnC,CAAA;AAID,eAAO,MAAM,4BAA4B,EAAE,WAAW,CAAC,MAAM,CAG3D,CAAA;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAUjD,CAAA;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,+BAA+B,EAAE,WAAW,CAAC,MAAM,CAI9D,CAAA;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,4BAA4B,EAAE,WAAW,CAAC,MAAM,CAE3D,CAAA"}
|
|
@@ -58,13 +58,26 @@ const API_KEY_KEYWORD = /api[_-]?key/i;
|
|
|
58
58
|
const AUTH_TOKEN_KEYWORD = /auth[_-]?token/i;
|
|
59
59
|
// SMI-5207: the 12 non-`.env` entries are hoisted from inline array literals to named
|
|
60
60
|
// consts so scanSensitivePaths can classify each by severity gate BY REFERENCE. The
|
|
61
|
-
// array's
|
|
61
|
+
// array's order is unchanged; its length grew 15 → 16 with SMI-6508's MF-5 entry — the regression-guard floor
|
|
62
62
|
// (scanner-regression-guard.test.ts) still holds.
|
|
63
63
|
// Contextual credentials: filename or assignment, not bare prose
|
|
64
64
|
const CREDENTIALS_FILE_PATTERN = /credentials\.(?:json|ya?ml|env|toml|txt)/i;
|
|
65
65
|
const CREDENTIALS_ASSIGN_PATTERN = /credentials\s*[:=]/i;
|
|
66
66
|
// Contextual secrets: assignment or path, not bare word
|
|
67
67
|
const SECRETS_ASSIGN_PATTERN = /\bsecrets?\s*[:=]/i;
|
|
68
|
+
/**
|
|
69
|
+
* SMI-6508 (MF-5): the PREFIXED assignment form — `API_SECRETS=`, `app_secrets:`,
|
|
70
|
+
* `mySecrets=`, and the singular `API_SECRET=`. Exactly complementary to
|
|
71
|
+
* SECRETS_ASSIGN_PATTERN above: that one carries `\b`, and `_` is a word
|
|
72
|
+
* character, so it cannot match after an underscore or a camelCase hump. The
|
|
73
|
+
* lookbehind here matches precisely the cases its boundary excludes, so the two
|
|
74
|
+
* never both fire on one match. `MY-SECRETS=` and `my.secrets=` stay with the
|
|
75
|
+
* bare pattern, since `-` and `.` are non-word characters its `\b` already
|
|
76
|
+
* accepts.
|
|
77
|
+
*
|
|
78
|
+
* MEDIUM by classification, NOT value-gated — see OBSERVE_ONLY_MEDIUM_PATTERNS.
|
|
79
|
+
*/
|
|
80
|
+
const SECRETS_PREFIXED_ASSIGN_PATTERN = /(?<=[A-Za-z0-9_])secrets?\s*[:=]/i;
|
|
68
81
|
const SECRETS_PATH_PATTERN = /\bsecrets?\/[a-z0-9_.-]+/i;
|
|
69
82
|
const PEM_PATTERN = /\.pem$/i;
|
|
70
83
|
const KEY_FILE_PATTERN = /\.key$/i;
|
|
@@ -94,6 +107,18 @@ export const SENSITIVE_PATH_PATTERNS = [
|
|
|
94
107
|
AWS_DIR_PATTERN,
|
|
95
108
|
CONFIG_DIR_PATTERN,
|
|
96
109
|
ETC_SYSTEM_FILE_PATTERN,
|
|
110
|
+
// SMI-6508 follow-up — MUST STAY LAST. scanSensitivePaths `break`s on the
|
|
111
|
+
// FIRST entry that matches, in THIS array's order, so an always-MEDIUM entry
|
|
112
|
+
// placed ahead of a HIGH-capable one SUPPRESSES it. This shipped briefly at
|
|
113
|
+
// index 4 and was a live scanner-evasion primitive: appending the comment
|
|
114
|
+
// `# a_secrets:` flipped `cat ~/.ssh/id_rsa` and `curl -F f=@/etc/passwd …`
|
|
115
|
+
// from a blocking HIGH to a passing MEDIUM, because MF-5 won the race
|
|
116
|
+
// against SSH_DIR / ETC_SYSTEM_FILE. Any future always-MEDIUM entry belongs
|
|
117
|
+
// here too, after every HIGH-capable pattern. The cost is deliberate and the
|
|
118
|
+
// right way round: on a co-occurring line the other entry reports instead,
|
|
119
|
+
// which slightly undercounts MF-5's own observability — never losing
|
|
120
|
+
// severity dominates never losing a count.
|
|
121
|
+
SECRETS_PREFIXED_ASSIGN_PATTERN,
|
|
97
122
|
];
|
|
98
123
|
// MF-1: the two bare-keyword patterns above emit HIGH only when accompanied by a real
|
|
99
124
|
// assigned secret value; scanSensitivePaths suppresses an otherwise-bare match.
|
|
@@ -125,13 +150,43 @@ export const PATH_FORM_PATTERNS = new Set([
|
|
|
125
150
|
* the assigned value. See scanSensitivePaths' assignmentHasRealValue().
|
|
126
151
|
*
|
|
127
152
|
* Partition check (guarded by a dedicated test): 1 (ENV) + 9 (PATH_FORM) +
|
|
128
|
-
* 3 (ASSIGNMENT) + 2 (VALUE_GATED_KEYWORD)
|
|
129
|
-
* unclassified future pattern falls through to
|
|
130
|
-
* `else` branch and stays HIGH.
|
|
153
|
+
* 3 (ASSIGNMENT) + 2 (VALUE_GATED_KEYWORD) + 1 (OBSERVE_ONLY_MEDIUM) = 16,
|
|
154
|
+
* total and disjoint. An unclassified future pattern falls through to
|
|
155
|
+
* scanSensitivePaths' fail-CLOSED `else` branch and stays HIGH.
|
|
131
156
|
*/
|
|
132
157
|
export const VALUE_GATED_ASSIGNMENT_PATTERNS = new Set([
|
|
133
158
|
CREDENTIALS_ASSIGN_PATTERN,
|
|
134
159
|
SECRETS_ASSIGN_PATTERN,
|
|
135
160
|
PASSWORD_ASSIGN_PATTERN,
|
|
136
161
|
]);
|
|
162
|
+
/**
|
|
163
|
+
* SMI-6508 (MF-5): always MEDIUM, never value-gated and never escalated.
|
|
164
|
+
*
|
|
165
|
+
* WHY A NEW CLASS RATHER THAN THE MF-4 SET. Adding the prefixed form to
|
|
166
|
+
* VALUE_GATED_ASSIGNMENT_PATTERNS would make it HIGH-by-default, which blocks
|
|
167
|
+
* installation — there is no allowlist in that path and undoing it costs a
|
|
168
|
+
* package publish. Measured against 66,495 real skill contents in prod: the
|
|
169
|
+
* prefixed form newly matches 259 skills / 418 lines, of which the MF-4 value
|
|
170
|
+
* gate would call 191 "real value" → HIGH, newly blocking 132 skills (0.20% of
|
|
171
|
+
* the corpus, ~975 extrapolated to the full population). Shape analysis put
|
|
172
|
+
* roughly 46% of those 191 in false-positive-looking shapes — multi-word prose,
|
|
173
|
+
* lowercase identifiers, paths — and left 104 genuinely ambiguous.
|
|
174
|
+
*
|
|
175
|
+
* So the detection ships at MEDIUM: the finding becomes visible without costing
|
|
176
|
+
* a single install, and the accumulated real-world findings become the evidence
|
|
177
|
+
* for whether HIGH is justified later. Promoting it is a one-line move into the
|
|
178
|
+
* MF-4 set once that evidence exists.
|
|
179
|
+
*
|
|
180
|
+
* DELIBERATE ASYMMETRY. `DB_PASSWORD=` and `AWS_CREDENTIALS=` already reach
|
|
181
|
+
* HIGH today, because CREDENTIALS_ASSIGN_PATTERN and PASSWORD_ASSIGN_PATTERN
|
|
182
|
+
* carry no `\b` and so have always matched their prefixed forms. Those are
|
|
183
|
+
* grandfathered, not endorsed: their prefixed-form FP rate has never been
|
|
184
|
+
* measured. This entry is MEDIUM because we measured it and the others are not
|
|
185
|
+
* because we have not — that asymmetry reflects the evidence, and levelling it
|
|
186
|
+
* in either direction without measuring first would be the wrong fix. See
|
|
187
|
+
* SMI-6508.
|
|
188
|
+
*/
|
|
189
|
+
export const OBSERVE_ONLY_MEDIUM_PATTERNS = new Set([
|
|
190
|
+
SECRETS_PREFIXED_ASSIGN_PATTERN,
|
|
191
|
+
]);
|
|
137
192
|
//# sourceMappingURL=patterns.sensitive-path.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patterns.sensitive-path.js","sourceRoot":"","sources":["../../../../src/security/scanner/patterns.sensitive-path.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,+BAA+B;AAC/B,qFAAqF;AACrF,0EAA0E;AAC1E,kFAAkF;AAClF,4EAA4E;AAC5E,EAAE;AACF,oFAAoF;AACpF,uFAAuF;AACvF,gFAAgF;AAChF,mFAAmF;AACnF,sFAAsF;AACtF,+EAA+E;AAC/E,2EAA2E;AAC3E,mFAAmF;AACnF,iEAAiE;AACjE,oCAAoC;AACpC,uFAAuF;AACvF,sFAAsF;AACtF,oFAAoF;AACpF,kFAAkF;AAClF,mDAAmD;AACnD,EAAE;AACF,mFAAmF;AACnF,mFAAmF;AACnF,kFAAkF;AAClF,qFAAqF;AACrF,gEAAgE;AAChE,6EAA6E;AAE7E,uFAAuF;AACvF,mFAAmF;AACnF,uFAAuF;AACvF,6EAA6E;AAC7E,MAAM,CAAC,MAAM,gBAAgB,GAAG,iEAAiE,CAAA;AAEjG,6FAA6F;AAC7F,MAAM,eAAe,GAAG,cAAc,CAAA;AACtC,MAAM,kBAAkB,GAAG,iBAAiB,CAAA;AAE5C,sFAAsF;AACtF,oFAAoF;AACpF,
|
|
1
|
+
{"version":3,"file":"patterns.sensitive-path.js","sourceRoot":"","sources":["../../../../src/security/scanner/patterns.sensitive-path.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-source.d.ts","sourceRoot":"","sources":["../../../../src/services/agent-pack/prompt-source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE5E,mFAAmF;AACnF,eAAO,MAAM,gBAAgB,EAAE,SAAS,MAAM,EAI7C,CAAA;AAED,0DAA0D;AAC1D,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAIjD,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,SAAS,WAAW,EA+B/C,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,IAAI,EAAE,SAAS,aAAa,EA0ExC,CAAA;AAED,mEAAmE;AACnE,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAI/C,CAAA;AAED,0FAA0F;AAC1F,eAAO,MAAM,gBAAgB,EAAE,SAAS,cAAc,EAgBrD,CAAA;AAED,oFAAoF;AACpF,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAI5C,CAAA;AAED,wDAAwD;AACxD,eAAO,MAAM,QAAQ,EAAE,SAAS,MAAM,EAMrC,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,uBAAuB,EAAE,SAAS,MAAM,EAEpD,CAAA;AAED,0EAA0E;AAC1E,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,
|
|
1
|
+
{"version":3,"file":"prompt-source.d.ts","sourceRoot":"","sources":["../../../../src/services/agent-pack/prompt-source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE5E,mFAAmF;AACnF,eAAO,MAAM,gBAAgB,EAAE,SAAS,MAAM,EAI7C,CAAA;AAED,0DAA0D;AAC1D,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAIjD,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,SAAS,WAAW,EA+B/C,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,IAAI,EAAE,SAAS,aAAa,EA0ExC,CAAA;AAED,mEAAmE;AACnE,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAI/C,CAAA;AAED,0FAA0F;AAC1F,eAAO,MAAM,gBAAgB,EAAE,SAAS,cAAc,EAgBrD,CAAA;AAED,oFAAoF;AACpF,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAI5C,CAAA;AAED,wDAAwD;AACxD,eAAO,MAAM,QAAQ,EAAE,SAAS,MAAM,EAMrC,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,uBAAuB,EAAE,SAAS,MAAM,EAEpD,CAAA;AAED,0EAA0E;AAC1E,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,EAelD,CAAA;AAED,8EAA8E;AAC9E,eAAO,MAAM,iBAAiB,4NAC6L,CAAA;AAE3N,6EAA6E;AAC7E,eAAO,MAAM,gBAAgB,+bACuZ,CAAA"}
|
|
@@ -200,8 +200,9 @@ export const CLI_FALLBACK_PARAGRAPHS = [
|
|
|
200
200
|
/** Command lines for the CLI Fallback fenced code block, one per line. */
|
|
201
201
|
export const CLI_FALLBACK_COMMANDS = [
|
|
202
202
|
'# Keep skills current',
|
|
203
|
-
'skillsmith diff <skill>
|
|
204
|
-
'skillsmith update
|
|
203
|
+
'skillsmith diff <skill> # what changed since your installed version',
|
|
204
|
+
'skillsmith update --all --dry-run # review updates first',
|
|
205
|
+
'skillsmith update <skill> # then update one skill at a time',
|
|
205
206
|
'',
|
|
206
207
|
'# Audit and clean up inventory',
|
|
207
208
|
'skillsmith audit collisions',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-source.js","sourceRoot":"","sources":["../../../../src/services/agent-pack/prompt-source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,mFAAmF;AACnF,MAAM,CAAC,MAAM,gBAAgB,GAAsB;IACjD,gMAAgM;IAChM,kYAAkY;IAClY,qUAAqU;CACtU,CAAA;AAED,0DAA0D;AAC1D,MAAM,CAAC,MAAM,oBAAoB,GAAsB;IACrD,kYAAkY;IAClY,wMAAwM;IACxM,2JAA2J;CAC5J,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAA2B;IACnD;QACE,EAAE,EAAE,qBAAqB;QACzB,KAAK,EAAE,yCAAyC;QAChD,IAAI,EAAE,sUAAsU;KAC7U;IACD;QACE,EAAE,EAAE,wBAAwB;QAC5B,KAAK,EAAE,wDAAwD;QAC/D,IAAI,EAAE,qRAAqR;KAC5R;IACD;QACE,EAAE,EAAE,YAAY;QAChB,KAAK,EAAE,qCAAqC;QAC5C,IAAI,EAAE,wPAAwP;KAC/P;IACD;QACE,EAAE,EAAE,gBAAgB;QACpB,KAAK,EAAE,8BAA8B;QACrC,IAAI,EAAE,sTAAsT;KAC7T;IACD;QACE,EAAE,EAAE,aAAa;QACjB,KAAK,EAAE,iCAAiC;QACxC,IAAI,EAAE,4PAA4P;KACnQ;IACD;QACE,EAAE,EAAE,kBAAkB;QACtB,KAAK,EAAE,2CAA2C;QAClD,IAAI,EAAE,ieAAie;KACxe;CACF,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,IAAI,GAA6B;IAC5C;QACE,EAAE,EAAE,cAAc;QAClB,KAAK,EAAE,wBAAwB;QAC/B,IAAI,EAAE;YACJ,uFAAuF;YACvF,oIAAoI;YACpI,sNAAsN;YACtN,6GAA6G;YAC7G,8bAA8b;YAC9b,+JAA+J;SAChK,CAAC,IAAI,CAAC,IAAI,CAAC;QACZ,KAAK,EAAE;YACL,gBAAgB;YAChB,eAAe;YACf,YAAY;YACZ,kBAAkB;YAClB,0BAA0B;SAC3B;KACF;IACD;QACE,EAAE,EAAE,WAAW;QACf,KAAK,EAAE,iCAAiC;QACxC,IAAI,EAAE;YACJ,2GAA2G;YAC3G,kKAAkK;YAClK,uNAAuN;YACvN,qGAAqG;YACrG,mIAAmI;SACpI,CAAC,IAAI,CAAC,IAAI,CAAC;QACZ,KAAK,EAAE;YACL,uBAAuB;YACvB,wBAAwB;YACxB,wBAAwB;YACxB,YAAY;SACb;KACF;IACD;QACE,EAAE,EAAE,oBAAoB;QACxB,KAAK,EAAE,iCAAiC;QACxC,IAAI,EAAE;YACJ,oDAAoD;YACpD,2GAA2G;YAC3G,8HAA8H;YAC9H,yJAAyJ;YACzJ,oIAAoI;SACrI,CAAC,IAAI,CAAC,IAAI,CAAC;QACZ,KAAK,EAAE;YACL,QAAQ;YACR,WAAW;YACX,gBAAgB;YAChB,eAAe;YACf,aAAa;YACb,eAAe;SAChB;KACF;IACD;QACE,EAAE,EAAE,gBAAgB;QACpB,KAAK,EAAE,qCAAqC;QAC5C,IAAI,EAAE,qTAAqT;QAC3T,KAAK,EAAE,CAAC,iBAAiB,EAAE,QAAQ,CAAC;KACrC;IACD;QACE,EAAE,EAAE,gBAAgB;QACpB,KAAK,EAAE,+BAA+B;QACtC,IAAI,EAAE,+SAA+S;QACrT,KAAK,EAAE,EAAE;KACV;IACD;QACE,EAAE,EAAE,cAAc;QAClB,KAAK,EAAE,qCAAqC;QAC5C,IAAI,EAAE,6YAA6Y;QACnZ,KAAK,EAAE,EAAE;KACV;CACF,CAAA;AAED,mEAAmE;AACnE,MAAM,CAAC,MAAM,kBAAkB,GAAsB;IACnD,qOAAqO;IACrO,iQAAiQ;IACjQ,6QAA6Q;CAC9Q,CAAA;AAED,0FAA0F;AAC1F,MAAM,CAAC,MAAM,gBAAgB,GAA8B;IACzD;QACE,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,uCAAuC;QAC9C,IAAI,EAAE,sTAAsT;KAC7T;IACD;QACE,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,qCAAqC;QAC5C,IAAI,EAAE,wOAAwO;KAC/O;IACD;QACE,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,+BAA+B;QACtC,IAAI,EAAE,uQAAuQ;KAC9Q;CACF,CAAA;AAED,oFAAoF;AACpF,MAAM,CAAC,MAAM,eAAe,GAAsB;IAChD,mTAAmT;IACnT,sJAAsJ;IACtJ,sZAAsZ;CACvZ,CAAA;AAED,wDAAwD;AACxD,MAAM,CAAC,MAAM,QAAQ,GAAsB;IACzC,2EAA2E;IAC3E,0HAA0H;IAC1H,wGAAwG;IACxG,iFAAiF;IACjF,qFAAqF;CACtF,CAAA;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAsB;IACxD,8PAA8P;CAC/P,CAAA;AAED,0EAA0E;AAC1E,MAAM,CAAC,MAAM,qBAAqB,GAAsB;IACtD,uBAAuB;IACvB,
|
|
1
|
+
{"version":3,"file":"prompt-source.js","sourceRoot":"","sources":["../../../../src/services/agent-pack/prompt-source.ts"],"names":[],"mappings":"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"}
|
|
@@ -60,8 +60,13 @@ import type { ManifestManager } from './skill-manifest.js';
|
|
|
60
60
|
* - any key that, after `path.resolve()` against `installPath`, resolves
|
|
61
61
|
* outside `installPath` (a lexical backstop behind the checks above,
|
|
62
62
|
* matching `writeInstallFiles()`'s own lexical escape check);
|
|
63
|
-
* - two keys that `path.normalize()` to the same on-disk path
|
|
64
|
-
*
|
|
63
|
+
* - two keys that `path.normalize()` to the same on-disk path CASE
|
|
64
|
+
* -INSENSITIVELY (SMI-6529 M4/M9) — a collision on any filesystem, but
|
|
65
|
+
* specifically catches a case-insensitive alias (e.g. "SKILL.md" and
|
|
66
|
+
* "skill.md" — literally the same inode on default APFS) that a
|
|
67
|
+
* case-sensitive string comparison would miss, in addition to the
|
|
68
|
+
* exact-string collision it already caught (e.g. "SKILL.md" and
|
|
69
|
+
* "./SKILL.md").
|
|
65
70
|
*/
|
|
66
71
|
export declare function validateContentKeys(content: Record<string, string>, installPath: string): {
|
|
67
72
|
valid: true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-installation.content.d.ts","sourceRoot":"","sources":["../../../src/services/skill-installation.content.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,KAAK,EACV,gBAAgB,EAChB,yBAAyB,EACzB,aAAa,EACd,MAAM,+BAA+B,CAAA;AAEtC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"skill-installation.content.d.ts","sourceRoot":"","sources":["../../../src/services/skill-installation.content.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,KAAK,EACV,gBAAgB,EAChB,yBAAyB,EACzB,aAAa,EACd,MAAM,+BAA+B,CAAA;AAEtC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAuD1D;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,WAAW,EAAE,MAAM,GAClB;IAAE,KAAK,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAqCnD;AA8DD;;yCAEyC;AACzC,MAAM,WAAW,wBAAyB,SAAQ,yBAAyB;IACzE,EAAE,EAAE,QAAQ,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,eAAe,CAAA;IACzB,MAAM,EAAE,QAAQ,CAAA;IAChB,UAAU,EAAE,gBAAgB,CAAA;IAC5B;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,aAAa,CAAC,CAuMjG"}
|
|
@@ -54,6 +54,7 @@ import { classifyBundledFile, extractPackageJsonLifecycleScripts, isRejectableSc
|
|
|
54
54
|
import { validateSkillMd } from './skill-installation.validate.js';
|
|
55
55
|
import { buildInstallFailure } from './skill-installation.errors.js';
|
|
56
56
|
import { writeInstallFiles } from './skill-installation.io.js';
|
|
57
|
+
import { checkInstallTarget } from './skill-installation.target-guard.js';
|
|
57
58
|
import { applyOptimization, generateTips, hashContent, manifestKeyFor, sanitizeInstallError, } from './skill-installation.helpers.js';
|
|
58
59
|
/** SMI-5905: content-based installs always scan at this trust tier — no skipScan opt-out. */
|
|
59
60
|
const CONTENT_INSTALL_TRUST_TIER = 'community';
|
|
@@ -78,10 +79,18 @@ function unsafeContentKeyReason(key) {
|
|
|
78
79
|
// absolute paths are covered by path.posix.isAbsolute().
|
|
79
80
|
if (path.posix.isAbsolute(key) || path.win32.isAbsolute(key))
|
|
80
81
|
return 'is an absolute path';
|
|
81
|
-
|
|
82
|
+
// SMI-6529 M9: split on BOTH separators (the backslash check above already
|
|
83
|
+
// rejects any key containing one, but this stays separator-agnostic rather
|
|
84
|
+
// than relying on that ordering) and drop empty ("a//b.md") and "."
|
|
85
|
+
// segments BEFORE inspecting them. The previous version only checked
|
|
86
|
+
// `segments[0]`, missing a ".git" segment at any OTHER position
|
|
87
|
+
// ("sub/.git/config") and missing it entirely behind a leading "."
|
|
88
|
+
// segment ("./.git/config"). Matching case-insensitively closes the
|
|
89
|
+
// "./.Git/HEAD" / ".GIT/config" class a case-sensitive `===` check missed.
|
|
90
|
+
const segments = key.split(/[/\\]/).filter((seg) => seg !== '' && seg !== '.');
|
|
82
91
|
if (segments.some((seg) => seg === '..'))
|
|
83
92
|
return 'contains a ".." path segment';
|
|
84
|
-
if (segments
|
|
93
|
+
if (segments.some((seg) => seg.toLowerCase() === '.git'))
|
|
85
94
|
return 'targets the .git directory';
|
|
86
95
|
return null;
|
|
87
96
|
}
|
|
@@ -94,8 +103,13 @@ function unsafeContentKeyReason(key) {
|
|
|
94
103
|
* - any key that, after `path.resolve()` against `installPath`, resolves
|
|
95
104
|
* outside `installPath` (a lexical backstop behind the checks above,
|
|
96
105
|
* matching `writeInstallFiles()`'s own lexical escape check);
|
|
97
|
-
* - two keys that `path.normalize()` to the same on-disk path
|
|
98
|
-
*
|
|
106
|
+
* - two keys that `path.normalize()` to the same on-disk path CASE
|
|
107
|
+
* -INSENSITIVELY (SMI-6529 M4/M9) — a collision on any filesystem, but
|
|
108
|
+
* specifically catches a case-insensitive alias (e.g. "SKILL.md" and
|
|
109
|
+
* "skill.md" — literally the same inode on default APFS) that a
|
|
110
|
+
* case-sensitive string comparison would miss, in addition to the
|
|
111
|
+
* exact-string collision it already caught (e.g. "SKILL.md" and
|
|
112
|
+
* "./SKILL.md").
|
|
99
113
|
*/
|
|
100
114
|
export function validateContentKeys(content, installPath) {
|
|
101
115
|
const resolvedInstall = path.resolve(installPath);
|
|
@@ -112,16 +126,21 @@ export function validateContentKeys(content, installPath) {
|
|
|
112
126
|
error: `Rejected content key "${key}": resolves outside the install directory.`,
|
|
113
127
|
};
|
|
114
128
|
}
|
|
129
|
+
// SMI-6529 M4/M9: lowercase the normalized path before comparing so a
|
|
130
|
+
// case-insensitive-filesystem alias ("SKILL.md" vs "skill.md") is caught
|
|
131
|
+
// alongside an exact-string duplicate ("SKILL.md" vs "./SKILL.md") —
|
|
132
|
+
// one check, not two.
|
|
115
133
|
const normalized = path.normalize(key);
|
|
116
|
-
const
|
|
134
|
+
const normalizedKey = normalized.toLowerCase();
|
|
135
|
+
const priorKey = seenByNormalizedPath.get(normalizedKey);
|
|
117
136
|
if (priorKey !== undefined) {
|
|
118
137
|
return {
|
|
119
138
|
valid: false,
|
|
120
|
-
error: `Rejected content keys "${priorKey}" and "${key}": both
|
|
121
|
-
'same on-disk path.',
|
|
139
|
+
error: `Rejected content keys "${priorKey}" and "${key}": both resolve to the ` +
|
|
140
|
+
'same on-disk path (case-insensitively).',
|
|
122
141
|
};
|
|
123
142
|
}
|
|
124
|
-
seenByNormalizedPath.set(
|
|
143
|
+
seenByNormalizedPath.set(normalizedKey, key);
|
|
125
144
|
}
|
|
126
145
|
return { valid: true };
|
|
127
146
|
}
|
|
@@ -237,12 +256,23 @@ export async function installFromContent(params) {
|
|
|
237
256
|
onProgress('manifest', 'Checking manifest');
|
|
238
257
|
const manifestData = await manifest.load();
|
|
239
258
|
const manifestKey = manifestKeyFor(skillName, client);
|
|
240
|
-
|
|
241
|
-
|
|
259
|
+
// SMI-6529 Wave A0: same pre-write install-target safety guard install()
|
|
260
|
+
// runs — refuses an untracked pre-existing directory or a git working
|
|
261
|
+
// tree even under force=true. Replaces the bare manifest-membership
|
|
262
|
+
// ALREADY_INSTALLED check this used to be.
|
|
263
|
+
const targetCheck = await checkInstallTarget({
|
|
264
|
+
installPath,
|
|
265
|
+
skillsDir,
|
|
266
|
+
manifestEntry: manifestData.installedSkills[manifestKey],
|
|
267
|
+
force,
|
|
268
|
+
});
|
|
269
|
+
if (!targetCheck.ok) {
|
|
270
|
+
return buildInstallFailure(targetCheck.code, {
|
|
242
271
|
skillId,
|
|
243
272
|
installPath,
|
|
244
273
|
trustTier,
|
|
245
|
-
error:
|
|
274
|
+
error: targetCheck.error,
|
|
275
|
+
...(targetCheck.tips !== undefined && { tips: targetCheck.tips }),
|
|
246
276
|
});
|
|
247
277
|
}
|
|
248
278
|
onProgress('scan', 'Running security scan');
|
|
@@ -283,26 +313,43 @@ export async function installFromContent(params) {
|
|
|
283
313
|
optimizationInfo.subagentPath = writeResult.subagentPath;
|
|
284
314
|
}
|
|
285
315
|
onProgress('manifest', 'Updating manifest');
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
316
|
+
try {
|
|
317
|
+
await manifest.updateSafely((currentManifest) => ({
|
|
318
|
+
...currentManifest,
|
|
319
|
+
installedSkills: {
|
|
320
|
+
...currentManifest.installedSkills,
|
|
321
|
+
[manifestKey]: {
|
|
322
|
+
id: skillId,
|
|
323
|
+
name: skillName,
|
|
324
|
+
version,
|
|
325
|
+
// SMI-5905: provenance for content-sourced installs (never a github: URL).
|
|
326
|
+
source: 'private-registry:' + skillId,
|
|
327
|
+
installPath,
|
|
328
|
+
installedAt: new Date().toISOString(),
|
|
329
|
+
lastUpdated: new Date().toISOString(),
|
|
330
|
+
originalContentHash: hashContent(finalSkillContent),
|
|
331
|
+
client,
|
|
332
|
+
},
|
|
301
333
|
},
|
|
302
|
-
}
|
|
303
|
-
}
|
|
334
|
+
}));
|
|
335
|
+
}
|
|
336
|
+
catch (manifestError) {
|
|
337
|
+
// SMI-6529 M7: the write itself already succeeded — a manifest-update
|
|
338
|
+
// failure here must undo it via the same rollback logic
|
|
339
|
+
// writeInstallFiles runs on its own internal failure, or the skill is
|
|
340
|
+
// left on disk with no manifest entry at all. `rollback()` throws an
|
|
341
|
+
// InstallRestoreError instead if the restore itself also fails, which
|
|
342
|
+
// supersedes `manifestError` below.
|
|
343
|
+
await writeResult.rollback(manifestError);
|
|
344
|
+
throw manifestError;
|
|
345
|
+
}
|
|
304
346
|
onProgress('done', 'Installation complete');
|
|
305
347
|
const tips = generateTips(skillName, optimizationInfo, client, skillsDir);
|
|
348
|
+
// SMI-6529 M10: a companion agent file was left untouched because this
|
|
349
|
+
// was a fresh install and something already occupied the target path.
|
|
350
|
+
if (writeResult.companionSkipped) {
|
|
351
|
+
tips.push('A companion agent file already existed at the target location and was not overwritten (fresh install). Remove it manually if you want Skillsmith to regenerate it.');
|
|
352
|
+
}
|
|
306
353
|
return {
|
|
307
354
|
success: true,
|
|
308
355
|
skillId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-installation.content.js","sourceRoot":"","sources":["../../../src/services/skill-installation.content.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAS5B,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAA;AAE1E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD,OAAO,EACL,mBAAmB,EACnB,kCAAkC,EAClC,gBAAgB,GACjB,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAA;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,cAAc,EACd,oBAAoB,GACrB,MAAM,iCAAiC,CAAA;AAExC,6FAA6F;AAC7F,MAAM,0BAA0B,GAAc,WAAW,CAAA;AAEzD,mEAAmE;AACnE,MAAM,QAAQ,GAAG,MAAM,CAAA;AAEvB;;;;;;GAMG;AACH,SAAS,sBAAsB,CAAC,GAAW;IACzC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,KAAK,GAAG;QAAE,OAAO,6BAA6B,CAAA;IACzE,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,qBAAqB,CAAA;IACxD,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,sBAAsB,CAAA;IACrD,sEAAsE;IACtE,2EAA2E;IAC3E,yDAAyD;IACzD,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,qBAAqB,CAAA;IAC1F,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"skill-installation.content.js","sourceRoot":"","sources":["../../../src/services/skill-installation.content.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-installation.helpers.d.ts","sourceRoot":"","sources":["../../../src/services/skill-installation.helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,8CAA8C,CAAA;AAI7F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AAE3D,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,+CAA+C,CAAA;AAC/F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAErF,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAA2C,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"skill-installation.helpers.d.ts","sourceRoot":"","sources":["../../../src/services/skill-installation.helpers.ts"],"names":[],"mappings":"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"}
|