@skillsmith/core 0.12.3 → 0.12.4
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 +164 -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
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Post-write success path for SkillInstallationService.install().
|
|
3
|
+
* @module @skillsmith/core/services/skill-installation.service.finalize
|
|
4
|
+
* @see SMI-6529 Wave A0: pure move out of skill-installation.service.ts to make
|
|
5
|
+
* headroom for the pre-write target guard (checkInstallTarget) — no behavior
|
|
6
|
+
* change. Mirrors this service's existing domain-driven split convention
|
|
7
|
+
* (skill-installation.io.ts, skill-installation.content.ts, etc).
|
|
8
|
+
*
|
|
9
|
+
* Everything `install()` does AFTER `writeInstallFiles()` succeeds: update the
|
|
10
|
+
* manifest, record co-install/dependency-intelligence/AI-defence signals
|
|
11
|
+
* (all best-effort), and assemble the final `success: true` InstallResult.
|
|
12
|
+
*/
|
|
13
|
+
import { extractDepIntel, persistDependencies, generateTips } from './skill-installation.helpers.js';
|
|
14
|
+
import { checkDepsAgainstQuarantine } from './skill-installation.validate.js';
|
|
15
|
+
import { recordAiDefenceFeedback, collectTrendWarnings } from './skill-installation.feedback.js';
|
|
16
|
+
function errorText(err) {
|
|
17
|
+
return (err?.code ??
|
|
18
|
+
(err instanceof Error ? err.message : String(err)));
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Everything after a successful `writeInstallFiles()`: manifest update,
|
|
22
|
+
* best-effort dependency/quarantine/trend/AI-defence bookkeeping, and the
|
|
23
|
+
* final `InstallResult`. Never throws for a best-effort step — only the
|
|
24
|
+
* manifest update itself (via `updateSafely`) can propagate.
|
|
25
|
+
*/
|
|
26
|
+
export async function finalizeSuccessfulInstall(params) {
|
|
27
|
+
const { manifest, coInstallRecorder, sessionInstalledSkillIds, skillDependencyRepo, quarantineLookup, riskHistoryRepo, aiDefenceFeedback, onProgress, client, skillsDir, skillId, owner, repo, skillName, installPath, manifestKey, contentHash, skillMdContent, optimizationInfo, securityReport, configWarnings, skipScanRequested, contentHashMismatch, trustTier, extraTips, } = params;
|
|
28
|
+
onProgress('manifest', 'Updating manifest');
|
|
29
|
+
await manifest.updateSafely((currentManifest) => ({
|
|
30
|
+
...currentManifest,
|
|
31
|
+
installedSkills: {
|
|
32
|
+
...currentManifest.installedSkills,
|
|
33
|
+
[manifestKey]: {
|
|
34
|
+
id: skillId,
|
|
35
|
+
name: skillName,
|
|
36
|
+
version: '1.0.0',
|
|
37
|
+
source: 'github:' + owner + '/' + repo,
|
|
38
|
+
installPath,
|
|
39
|
+
installedAt: new Date().toISOString(),
|
|
40
|
+
lastUpdated: new Date().toISOString(),
|
|
41
|
+
originalContentHash: contentHash, // hash of optimized content (post-applyOptimization)
|
|
42
|
+
client,
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
}));
|
|
46
|
+
// SMI-6529 N4 (round 4): best-effort — this call used to sit outside any
|
|
47
|
+
// try/catch, so a throw from it (e.g. a SQLite busy/lock error) propagated
|
|
48
|
+
// all the way out of `finalizeSuccessfulInstall()` AFTER the manifest write
|
|
49
|
+
// above had already committed successfully. The caller (service.ts /
|
|
50
|
+
// content.ts) treats ANY exception from this function as "undo the write,"
|
|
51
|
+
// so an unrelated co-install-recording hiccup was rolling back files and a
|
|
52
|
+
// manifest entry that were both already correct. Co-install session
|
|
53
|
+
// tracking has no bearing on whether the install itself succeeded.
|
|
54
|
+
// Round 28 (pre-merge gate, PR-07): still best-effort — the install itself
|
|
55
|
+
// succeeded and must not be undone — but no longer silent. A swallowed
|
|
56
|
+
// failure here left the operator with no sign that session bookkeeping is
|
|
57
|
+
// incomplete, which is the same "could not tell" class this wave removed
|
|
58
|
+
// everywhere else.
|
|
59
|
+
const bookkeepingProblems = [];
|
|
60
|
+
if (coInstallRecorder) {
|
|
61
|
+
try {
|
|
62
|
+
coInstallRecorder.recordSessionCoInstalls([...sessionInstalledSkillIds, skillId]);
|
|
63
|
+
sessionInstalledSkillIds.push(skillId);
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
bookkeepingProblems.push(`co-install session tracking was not recorded for ${skillId} (${errorText(err)}). The ` +
|
|
67
|
+
`install itself succeeded.`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Persist dependency intelligence (best-effort)
|
|
71
|
+
const depIntel = extractDepIntel(skillMdContent);
|
|
72
|
+
try {
|
|
73
|
+
persistDependencies(skillDependencyRepo, skillId, skillMdContent, depIntel.dep_declared);
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
bookkeepingProblems.push(`dependency intelligence was not persisted for ${skillId} (${errorText(err)}). The install ` +
|
|
77
|
+
`itself succeeded.`);
|
|
78
|
+
}
|
|
79
|
+
let quarantinedDeps; // SMI-3871
|
|
80
|
+
if (quarantineLookup) {
|
|
81
|
+
try {
|
|
82
|
+
const dqResult = checkDepsAgainstQuarantine(depIntel, quarantineLookup);
|
|
83
|
+
if (dqResult.quarantinedDeps.length > 0) {
|
|
84
|
+
quarantinedDeps = dqResult.quarantinedDeps;
|
|
85
|
+
depIntel.dep_warnings.push(...dqResult.warnings);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
catch (err) {
|
|
89
|
+
// This one matters most of the three: a failed check is not a clean
|
|
90
|
+
// check, and silence here reads as "no quarantined dependencies".
|
|
91
|
+
bookkeepingProblems.push(`dependencies could not be checked against the quarantine list (${errorText(err)}), so ` +
|
|
92
|
+
`this install is not evidence that none are quarantined.`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
const trendWarnings = securityReport
|
|
96
|
+
? collectTrendWarnings({
|
|
97
|
+
historyRepo: riskHistoryRepo,
|
|
98
|
+
skillId,
|
|
99
|
+
scanReport: securityReport,
|
|
100
|
+
contentHash,
|
|
101
|
+
})
|
|
102
|
+
: [];
|
|
103
|
+
recordAiDefenceFeedback({
|
|
104
|
+
feedback: aiDefenceFeedback,
|
|
105
|
+
skillMdContent,
|
|
106
|
+
scanReport: securityReport,
|
|
107
|
+
blocked: false,
|
|
108
|
+
});
|
|
109
|
+
onProgress('done', 'Installation complete');
|
|
110
|
+
const tips = generateTips(skillName, optimizationInfo, client, skillsDir);
|
|
111
|
+
tips.unshift(...trendWarnings);
|
|
112
|
+
tips.push(...configWarnings);
|
|
113
|
+
tips.push(...bookkeepingProblems);
|
|
114
|
+
if (skipScanRequested) {
|
|
115
|
+
tips.unshift('Security scan was skipped. This skill was not scanned for malicious content.');
|
|
116
|
+
}
|
|
117
|
+
if (contentHashMismatch) {
|
|
118
|
+
tips.unshift("Content has changed since Skillsmith last indexed this skill. This may mean the author updated it, or the content was modified. Review recent changes at the skill's repository before using.");
|
|
119
|
+
}
|
|
120
|
+
if (extraTips && extraTips.length > 0) {
|
|
121
|
+
tips.push(...extraTips);
|
|
122
|
+
}
|
|
123
|
+
return {
|
|
124
|
+
success: true,
|
|
125
|
+
skillId,
|
|
126
|
+
installPath,
|
|
127
|
+
securityReport,
|
|
128
|
+
trustTier,
|
|
129
|
+
optimization: optimizationInfo,
|
|
130
|
+
depIntel,
|
|
131
|
+
contentHashMismatch,
|
|
132
|
+
quarantinedDeps,
|
|
133
|
+
tips,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=skill-installation.service.finalize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-installation.service.finalize.js","sourceRoot":"","sources":["../../../src/services/skill-installation.service.finalize.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,13 +4,15 @@ import * as os from 'os';
|
|
|
4
4
|
import { SecurityScanner } from '../security/index.js';
|
|
5
5
|
import { TRUST_TIER_SCANNER_OPTIONS, } from './skill-installation.types.js';
|
|
6
6
|
import { installFromContent } from './skill-installation.content.js';
|
|
7
|
-
import { recordAiDefenceFeedback
|
|
7
|
+
import { recordAiDefenceFeedback } from './skill-installation.feedback.js';
|
|
8
8
|
import { ManifestManager } from './skill-manifest.js';
|
|
9
|
-
import { hashContent,
|
|
9
|
+
import { hashContent, applyOptimization, performUninstall, sanitizeInstallError, manifestKeyFor, } from './skill-installation.helpers.js';
|
|
10
10
|
import { CANONICAL_CLIENT } from '../install/paths.js';
|
|
11
|
-
import { parseSkillIdInternal, validateSkillMd,
|
|
11
|
+
import { parseSkillIdInternal, validateSkillMd, resolveRegistryInstall, } from './skill-installation.validate.js';
|
|
12
12
|
import { fetchFromGitHub, writeInstallFiles, fetchAndScanOptionalFiles, } from './skill-installation.io.js';
|
|
13
13
|
import { buildInstallFailure, buildConfirmationRequired } from './skill-installation.errors.js';
|
|
14
|
+
import { checkInstallTarget } from './skill-installation.target-guard.js';
|
|
15
|
+
import { finalizeSuccessfulInstall } from './skill-installation.service.finalize.js';
|
|
14
16
|
const DEFAULT_SKILLS_DIR = path.join(os.homedir(), '.claude', 'skills');
|
|
15
17
|
const DEFAULT_MANIFEST_PATH = path.join(os.homedir(), '.skillsmith', 'manifest.json');
|
|
16
18
|
export class SkillInstallationService {
|
|
@@ -88,12 +90,25 @@ export class SkillInstallationService {
|
|
|
88
90
|
this.onProgress('manifest', 'Checking manifest');
|
|
89
91
|
const manifest = await this.manifest.load();
|
|
90
92
|
const manifestKey = manifestKeyFor(skillName, this.client);
|
|
91
|
-
|
|
92
|
-
|
|
93
|
+
// SMI-6529 Wave A0: pre-write install-target safety guard — refuses an
|
|
94
|
+
// untracked pre-existing directory, a git working tree, or (when `update`
|
|
95
|
+
// sets `expectedInstallPath`) a write anywhere other than the directory it
|
|
96
|
+
// diffed against. Runs BEFORE any content fetch or disk write. Replaces
|
|
97
|
+
// the bare manifest-membership ALREADY_INSTALLED check this used to be.
|
|
98
|
+
const targetCheck = await checkInstallTarget({
|
|
99
|
+
installPath,
|
|
100
|
+
skillsDir: this.skillsDir,
|
|
101
|
+
manifestEntry: manifest.installedSkills[manifestKey],
|
|
102
|
+
force: options.force ?? false,
|
|
103
|
+
expectedInstallPath: options.expectedInstallPath,
|
|
104
|
+
});
|
|
105
|
+
if (!targetCheck.ok) {
|
|
106
|
+
return buildInstallFailure(targetCheck.code, {
|
|
93
107
|
skillId,
|
|
94
108
|
installPath,
|
|
95
109
|
trustTier,
|
|
96
|
-
error:
|
|
110
|
+
error: targetCheck.error,
|
|
111
|
+
...(targetCheck.tips !== undefined && { tips: targetCheck.tips }),
|
|
97
112
|
});
|
|
98
113
|
}
|
|
99
114
|
this.onProgress('fetch', 'Fetching SKILL.md from GitHub');
|
|
@@ -278,86 +293,57 @@ export class SkillInstallationService {
|
|
|
278
293
|
if (writeResult.subagentPath) {
|
|
279
294
|
optimizationInfo.subagentPath = writeResult.subagentPath;
|
|
280
295
|
}
|
|
281
|
-
//
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
...currentManifest.installedSkills,
|
|
287
|
-
[manifestKey]: {
|
|
288
|
-
id: skillId,
|
|
289
|
-
name: skillName,
|
|
290
|
-
version: '1.0.0',
|
|
291
|
-
source: 'github:' + owner + '/' + repo,
|
|
292
|
-
installPath,
|
|
293
|
-
installedAt: new Date().toISOString(),
|
|
294
|
-
lastUpdated: new Date().toISOString(),
|
|
295
|
-
originalContentHash: contentHash, // hash of optimized content (post-applyOptimization)
|
|
296
|
-
client: this.client,
|
|
297
|
-
},
|
|
298
|
-
},
|
|
299
|
-
}));
|
|
300
|
-
if (this.coInstallRecorder) {
|
|
301
|
-
this.coInstallRecorder.recordSessionCoInstalls([...this.sessionInstalledSkillIds, skillId]);
|
|
302
|
-
this.sessionInstalledSkillIds.push(skillId);
|
|
296
|
+
// SMI-6529 M10: a companion agent file was left untouched because this
|
|
297
|
+
// was a fresh install and something already occupied the target path.
|
|
298
|
+
const extraTips = [];
|
|
299
|
+
if (writeResult.companionSkipped) {
|
|
300
|
+
extraTips.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.');
|
|
303
301
|
}
|
|
304
|
-
//
|
|
305
|
-
|
|
302
|
+
// SMI-6529 (Wave A0): everything after a successful write — manifest
|
|
303
|
+
// update, best-effort dependency/quarantine/trend/AI-defence bookkeeping,
|
|
304
|
+
// and the final result — moved to a sibling module (pure move, no
|
|
305
|
+
// behavior change) to keep this file under the 500-line CI gate once
|
|
306
|
+
// the target guard above was added.
|
|
306
307
|
try {
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
depIntel.dep_warnings.push(...dqResult.warnings);
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
catch {
|
|
322
|
-
/* best-effort */
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
const trendWarnings = securityReport
|
|
326
|
-
? collectTrendWarnings({
|
|
327
|
-
historyRepo: this.riskHistoryRepo,
|
|
308
|
+
return await finalizeSuccessfulInstall({
|
|
309
|
+
manifest: this.manifest,
|
|
310
|
+
coInstallRecorder: this.coInstallRecorder,
|
|
311
|
+
sessionInstalledSkillIds: this.sessionInstalledSkillIds,
|
|
312
|
+
skillDependencyRepo: this.skillDependencyRepo,
|
|
313
|
+
quarantineLookup: this.quarantineLookup,
|
|
314
|
+
riskHistoryRepo: this.riskHistoryRepo,
|
|
315
|
+
aiDefenceFeedback: this.aiDefenceFeedback,
|
|
316
|
+
onProgress: this.onProgress,
|
|
317
|
+
client: this.client,
|
|
318
|
+
skillsDir: this.skillsDir,
|
|
328
319
|
skillId,
|
|
329
|
-
|
|
320
|
+
owner,
|
|
321
|
+
repo,
|
|
322
|
+
skillName,
|
|
323
|
+
installPath,
|
|
324
|
+
manifestKey,
|
|
330
325
|
contentHash,
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
const tips = generateTips(skillName, optimizationInfo, this.client, this.skillsDir);
|
|
341
|
-
tips.unshift(...trendWarnings);
|
|
342
|
-
tips.push(...optionalFiles.configWarnings);
|
|
343
|
-
if (options.skipScan) {
|
|
344
|
-
tips.unshift('Security scan was skipped. This skill was not scanned for malicious content.');
|
|
326
|
+
skillMdContent,
|
|
327
|
+
optimizationInfo,
|
|
328
|
+
securityReport,
|
|
329
|
+
configWarnings: optionalFiles.configWarnings,
|
|
330
|
+
skipScanRequested: options.skipScan,
|
|
331
|
+
contentHashMismatch,
|
|
332
|
+
trustTier,
|
|
333
|
+
extraTips,
|
|
334
|
+
});
|
|
345
335
|
}
|
|
346
|
-
|
|
347
|
-
|
|
336
|
+
catch (finalizeError) {
|
|
337
|
+
// SMI-6529 M7: the write itself already succeeded — a failure HERE
|
|
338
|
+
// (the manifest update, the only step in finalizeSuccessfulInstall
|
|
339
|
+
// that can actually throw) must undo it via the SAME rollback logic
|
|
340
|
+
// writeInstallFiles runs on its own internal failure, or the skill
|
|
341
|
+
// is left on disk with no manifest entry at all. `rollback()` throws
|
|
342
|
+
// an InstallRestoreError instead if the restore itself also fails,
|
|
343
|
+
// which supersedes `finalizeError` below.
|
|
344
|
+
await writeResult.rollback(finalizeError);
|
|
345
|
+
throw finalizeError;
|
|
348
346
|
}
|
|
349
|
-
return {
|
|
350
|
-
success: true,
|
|
351
|
-
skillId,
|
|
352
|
-
installPath,
|
|
353
|
-
securityReport,
|
|
354
|
-
trustTier,
|
|
355
|
-
optimization: optimizationInfo,
|
|
356
|
-
depIntel,
|
|
357
|
-
contentHashMismatch,
|
|
358
|
-
quarantinedDeps,
|
|
359
|
-
tips,
|
|
360
|
-
};
|
|
361
347
|
}
|
|
362
348
|
catch (error) {
|
|
363
349
|
return buildInstallFailure('UNKNOWN', {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-installation.service.js","sourceRoot":"","sources":["../../../src/services/skill-installation.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"skill-installation.service.js","sourceRoot":"","sources":["../../../src/services/skill-installation.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Pre-write install-target safety guard.
|
|
3
|
+
* @module @skillsmith/core/services/skill-installation.target-guard
|
|
4
|
+
* @see SMI-6529 Wave A0
|
|
5
|
+
*
|
|
6
|
+
* On a real user machine, `skillsmith update --all` overwrote uncommitted
|
|
7
|
+
* local work in git-cloned skill directories and wrote into the wrong
|
|
8
|
+
* directory (a target named after the upstream repo, not the directory
|
|
9
|
+
* being updated). `checkInstallTarget()` is the single pre-write gate every
|
|
10
|
+
* `install()`/`installFromContent()` call runs BEFORE any content fetch or
|
|
11
|
+
* disk write — it never mutates anything itself, only inspects the
|
|
12
|
+
* filesystem and the manifest and reports whether the write may proceed.
|
|
13
|
+
*
|
|
14
|
+
* Rules are evaluated in order; the first that fails wins:
|
|
15
|
+
* (pre) A matching manifest entry's `installPath` must be a usable, real
|
|
16
|
+
* absolute path — a missing or non-absolute value refuses rather than
|
|
17
|
+
* reaching `path.resolve()`/`fs.realpath()` (SMI-6529 L17).
|
|
18
|
+
* (a) `expectedInstallPath` (set by `update`) must match `installPath`
|
|
19
|
+
* exactly, AND must exist on disk — `force` does NOT override this.
|
|
20
|
+
* (b) `installPath` missing (ENOENT) -> fresh install, nothing else to
|
|
21
|
+
* check, UNLESS the manifest key it will occupy already has an entry
|
|
22
|
+
* whose recorded path is a live conflict (SMI-6529 M8) — see below.
|
|
23
|
+
* Any other `lstat` error is rethrown (fail closed).
|
|
24
|
+
* (c) `installPath` must be a directory, or a symlink that resolves to a
|
|
25
|
+
* directory inside `skillsDir`.
|
|
26
|
+
* (d) Filesystem-only git-working-tree check (never spawns git): a `.git`
|
|
27
|
+
* entry (file or directory) at `installPath` or any ancestor up to and
|
|
28
|
+
* including `skillsDir` refuses the write — `force` does NOT override
|
|
29
|
+
* this. Walks BOTH the lexical ancestor chain and (SMI-6529 H1) the
|
|
30
|
+
* REALPATH ancestor chain, since a symlinked `installPath` can resolve
|
|
31
|
+
* into a git clone whose ancestry `path.dirname()` on the symlink's own
|
|
32
|
+
* lexical string never crosses into.
|
|
33
|
+
* (e) The manifest must already track this exact path (by realpath) —
|
|
34
|
+
* an untracked pre-existing directory is refused — `force` does NOT
|
|
35
|
+
* override this either. Even a path-matching entry refuses if it is
|
|
36
|
+
* itself untracked by Skillsmith's trust model (`provenance:'local'`
|
|
37
|
+
* or `source:'unknown'` — ADR-139 adoption or a user's local
|
|
38
|
+
* assertion) — `force` does NOT override this either.
|
|
39
|
+
* (f) Tracked + matching path: existing `ALREADY_INSTALLED` behavior
|
|
40
|
+
* (refuse without `force`, proceed with it).
|
|
41
|
+
*/
|
|
42
|
+
import type { InstallErrorCode, SkillManifestEntry } from './skill-installation.types.js';
|
|
43
|
+
/** The refusal codes {@link checkInstallTarget} can return. */
|
|
44
|
+
export type InstallTargetFailureCode = Extract<InstallErrorCode, 'INSTALL_TARGET_MISMATCH' | 'INSTALL_TARGET_NOT_DIRECTORY' | 'INSTALL_TARGET_GIT_WORKTREE' | 'INSTALL_TARGET_UNTRACKED' | 'ALREADY_INSTALLED'>;
|
|
45
|
+
/** Input to {@link checkInstallTarget}: the write target, its skills root, and the manifest entry at its key. */
|
|
46
|
+
export interface CheckInstallTargetParams {
|
|
47
|
+
installPath: string;
|
|
48
|
+
skillsDir: string;
|
|
49
|
+
/** The manifest entry at the computed manifest key, or undefined when untracked. */
|
|
50
|
+
manifestEntry: SkillManifestEntry | undefined;
|
|
51
|
+
force: boolean;
|
|
52
|
+
/** Set by `update` — see {@link InstallOptions.expectedInstallPath}'s own doc comment. */
|
|
53
|
+
expectedInstallPath?: string;
|
|
54
|
+
}
|
|
55
|
+
/** Whether the write may proceed; `preExisted` says whether the target directory was already there. */
|
|
56
|
+
export type CheckInstallTargetResult = {
|
|
57
|
+
ok: true;
|
|
58
|
+
preExisted: boolean;
|
|
59
|
+
} | {
|
|
60
|
+
ok: false;
|
|
61
|
+
code: InstallTargetFailureCode;
|
|
62
|
+
error: string;
|
|
63
|
+
tips?: string[];
|
|
64
|
+
};
|
|
65
|
+
/** The outcome of walking for a `.git` entry: a real hit, a fail-closed
|
|
66
|
+
* "couldn't verify" at some ancestor, or nothing found (return `null`). */
|
|
67
|
+
export type GitWalkResult = {
|
|
68
|
+
kind: 'found';
|
|
69
|
+
path: string;
|
|
70
|
+
} | {
|
|
71
|
+
kind: 'error';
|
|
72
|
+
path: string;
|
|
73
|
+
errorCode: string;
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* The pre-write gate: decide, without changing anything, whether an install
|
|
77
|
+
* or update may write into `installPath`. The rules (pre) and (a)–(f) in the
|
|
78
|
+
* module comment are checked in order, and the first to fail wins. Callers
|
|
79
|
+
* run it before any content fetch or disk write.
|
|
80
|
+
*/
|
|
81
|
+
export declare function checkInstallTarget(params: CheckInstallTargetParams): Promise<CheckInstallTargetResult>;
|
|
82
|
+
//# sourceMappingURL=skill-installation.target-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-installation.target-guard.d.ts","sourceRoot":"","sources":["../../../src/services/skill-installation.target-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAEzF,+DAA+D;AAC/D,MAAM,MAAM,wBAAwB,GAAG,OAAO,CAC5C,gBAAgB,EACd,yBAAyB,GACzB,8BAA8B,GAC9B,6BAA6B,GAC7B,0BAA0B,GAC1B,mBAAmB,CACtB,CAAA;AAED,iHAAiH;AACjH,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,oFAAoF;IACpF,aAAa,EAAE,kBAAkB,GAAG,SAAS,CAAA;IAC7C,KAAK,EAAE,OAAO,CAAA;IACd,0FAA0F;IAC1F,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC7B;AAED,uGAAuG;AACvG,MAAM,MAAM,wBAAwB,GAChC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,GACjC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,wBAAwB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAAA;AAwCjF;2EAC2E;AAC3E,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAA;AAgHtD;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,wBAAwB,GAC/B,OAAO,CAAC,wBAAwB,CAAC,CAoPnC"}
|