@dharma-ai-labs/agent-fabric-skill-manager 0.2.9 → 0.2.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +30 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +56 -5
- package/dist/index.js.map +1 -1
- package/dist/index.test.js +55 -0
- package/dist/index.test.js.map +1 -1
- package/dist/installationScope.d.ts +21 -0
- package/dist/installationScope.d.ts.map +1 -0
- package/dist/installationScope.js +334 -0
- package/dist/installationScope.js.map +1 -0
- package/dist/installationScope.test.d.ts +2 -0
- package/dist/installationScope.test.d.ts.map +1 -0
- package/dist/installationScope.test.js +343 -0
- package/dist/installationScope.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import test from 'node:test';
|
|
3
|
+
import * as fs from 'node:fs/promises';
|
|
4
|
+
import * as syncFs from 'node:fs';
|
|
5
|
+
import * as crypto from 'node:crypto';
|
|
6
|
+
import * as path from 'node:path';
|
|
7
|
+
import * as util from 'node:util';
|
|
8
|
+
import * as asyncHooks from 'node:async_hooks';
|
|
9
|
+
import * as childProcess from 'node:child_process';
|
|
10
|
+
import { tmpdir } from 'node:os';
|
|
11
|
+
import { runInNewContext } from 'node:vm';
|
|
12
|
+
import ts from 'typescript';
|
|
13
|
+
import * as contracts from '@dharma-ai-labs/agent-fabric-contracts';
|
|
14
|
+
import * as policyModule from '@dharma-ai-labs/agent-fabric-policy';
|
|
15
|
+
import { calculateBundleHash, contentHash, getActiveSkillBundleAuthorization, installSkillBundle, readVerifiedRepositoryKnowledge, rollbackUnconfirmedSkillBundle } from './index.js';
|
|
16
|
+
async function fixture(t) {
|
|
17
|
+
const root = await fs.mkdtemp(path.join(tmpdir(), 'dharma-skill-install-scope-'));
|
|
18
|
+
t.after(() => fs.rm(root, { recursive: true, force: true }));
|
|
19
|
+
const source = path.join(root, 'source'), native = path.join(root, 'native');
|
|
20
|
+
await fs.mkdir(path.join(source, 'skill'), { recursive: true });
|
|
21
|
+
await fs.writeFile(path.join(source, 'skill/SKILL.md'), '# Logical job\nA retry preserves identity.');
|
|
22
|
+
const server = crypto.generateKeyPairSync('ed25519'), device = crypto.generateKeyPairSync('ed25519');
|
|
23
|
+
const workspaceId = crypto.randomUUID(), deviceId = crypto.randomUUID(), organizationAgentId = crypto.randomUUID();
|
|
24
|
+
const base = { schema: 'dharma.skill-bundle/v2', bundleId: crypto.randomUUID(), organizationId: 'org_synthetic',
|
|
25
|
+
version: '1.0.0', operation: 'install', skills: [{ skillId: 'dharma-agent-fabric', version: '1.0.0',
|
|
26
|
+
repository: 'https://example.invalid/synthetic.git', commit: 'a'.repeat(40), path: 'skill',
|
|
27
|
+
contentHash: await contentHash(path.join(source, 'skill')) }], riskClass: 'R1',
|
|
28
|
+
targetSelectors: { organizationAgentIds: [organizationAgentId], deviceIds: [], workspaceIds: [workspaceId], providers: ['codex'] },
|
|
29
|
+
activationPolicy: 'next_session', rollbackBundleId: null, evaluationReceiptId: 'synthetic',
|
|
30
|
+
createdAt: new Date().toISOString(), expiresAt: new Date(Date.now() + 60_000).toISOString() };
|
|
31
|
+
const bundleHash = calculateBundleHash(base);
|
|
32
|
+
const bundle = { ...base, bundleHash, signature: contracts.signCanonicalObject({ ...base, bundleHash }, server.privateKey) };
|
|
33
|
+
const input = { bundle, sourceDirectory: source, nativeSkillDirectory: native,
|
|
34
|
+
policy: { organizationId: 'org_synthetic', skills: { automaticInstall: true } }, serverPublicKey: server.publicKey,
|
|
35
|
+
devicePrivateKey: device.privateKey, deviceId, organizationAgentId, workspaceId, provider: 'codex' };
|
|
36
|
+
let current = true;
|
|
37
|
+
const hostScope = { signal: new AbortController().signal, current: async () => current };
|
|
38
|
+
return { root, input, hostScope, withdraw: () => { current = false; }, native, server,
|
|
39
|
+
pointer: path.join(native, '.dharma-managed/workspaces', workspaceId, 'ACTIVE_BUNDLE') };
|
|
40
|
+
}
|
|
41
|
+
// Execute the actual module; seams instrument only synthetic owned filesystem effects.
|
|
42
|
+
async function module(overrides = {}) {
|
|
43
|
+
const dependency = async (name) => {
|
|
44
|
+
const text = await fs.readFile(new URL(`../src/${name}.ts`, import.meta.url), 'utf8');
|
|
45
|
+
const compiled = ts.transpileModule(text, { compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2023 } });
|
|
46
|
+
const exports = {};
|
|
47
|
+
runInNewContext(compiled.outputText, { exports, Buffer, process, Date, AbortSignal, AbortController, setTimeout, clearTimeout,
|
|
48
|
+
require: (id) => {
|
|
49
|
+
if (id === 'node:fs/promises')
|
|
50
|
+
return { ...fs, ...overrides };
|
|
51
|
+
if (id === 'node:fs')
|
|
52
|
+
return syncFs;
|
|
53
|
+
if (id === 'node:async_hooks')
|
|
54
|
+
return asyncHooks;
|
|
55
|
+
if (id === 'node:util')
|
|
56
|
+
return util;
|
|
57
|
+
if (id === 'node:crypto')
|
|
58
|
+
return crypto;
|
|
59
|
+
if (id === 'node:path')
|
|
60
|
+
return path;
|
|
61
|
+
if (id === 'node:child_process')
|
|
62
|
+
return childProcess;
|
|
63
|
+
if (id === '@dharma-ai-labs/agent-fabric-contracts')
|
|
64
|
+
return contracts;
|
|
65
|
+
if (id === '@dharma-ai-labs/agent-fabric-policy')
|
|
66
|
+
return policyModule;
|
|
67
|
+
if (id === './installationScope.js')
|
|
68
|
+
return scope;
|
|
69
|
+
throw new Error('unexpected synthetic dependency');
|
|
70
|
+
} }, { timeout: 1000, contextCodeGeneration: { strings: false, wasm: false } });
|
|
71
|
+
return exports;
|
|
72
|
+
};
|
|
73
|
+
let scope = {};
|
|
74
|
+
try {
|
|
75
|
+
scope = await dependency('installationScope');
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
if (error.code !== 'ENOENT')
|
|
79
|
+
throw error;
|
|
80
|
+
}
|
|
81
|
+
return dependency('index');
|
|
82
|
+
}
|
|
83
|
+
test('signed installation refuses withdrawn host authority before filesystem effects', async (t) => {
|
|
84
|
+
const f = await fixture(t);
|
|
85
|
+
let effects = 0;
|
|
86
|
+
f.withdraw();
|
|
87
|
+
const api = await module({ readdir: async (...args) => { effects++; return fs.readdir(...args); } });
|
|
88
|
+
await assert.rejects(api.installSkillBundle({ ...f.input, hostScope: f.hostScope }), { message: 'skill_installation_scope_unavailable' });
|
|
89
|
+
assert.equal(effects, 0);
|
|
90
|
+
await assert.rejects(fs.lstat(f.native), { code: 'ENOENT' });
|
|
91
|
+
});
|
|
92
|
+
test('signed installation cannot write after its first metadata observation withdraws authority', async (t) => {
|
|
93
|
+
const f = await fixture(t);
|
|
94
|
+
let writes = 0;
|
|
95
|
+
const api = await module({ readdir: async (...args) => {
|
|
96
|
+
try {
|
|
97
|
+
return await fs.readdir(...args);
|
|
98
|
+
}
|
|
99
|
+
finally {
|
|
100
|
+
f.withdraw();
|
|
101
|
+
}
|
|
102
|
+
}, mkdir: async (...args) => { writes++; return fs.mkdir(...args); } });
|
|
103
|
+
await assert.rejects(api.installSkillBundle({ ...f.input, hostScope: f.hostScope }), { message: 'skill_installation_scope_unavailable' });
|
|
104
|
+
assert.equal(writes, 0);
|
|
105
|
+
await assert.rejects(fs.lstat(f.pointer), { code: 'ENOENT' });
|
|
106
|
+
});
|
|
107
|
+
test('signed installation stops after a source hash read withdraws authority', async (t) => {
|
|
108
|
+
const f = await fixture(t);
|
|
109
|
+
let copies = 0;
|
|
110
|
+
const api = await module({ readFile: async (...args) => {
|
|
111
|
+
const result = await fs.readFile(...args);
|
|
112
|
+
if (String(args[0]).endsWith('SKILL.md'))
|
|
113
|
+
f.withdraw();
|
|
114
|
+
return result;
|
|
115
|
+
}, cp: async (...args) => { copies++; return fs.cp(...args); } });
|
|
116
|
+
await assert.rejects(api.installSkillBundle({ ...f.input, hostScope: f.hostScope }), { message: 'skill_installation_scope_unavailable' });
|
|
117
|
+
assert.equal(copies, 0);
|
|
118
|
+
await assert.rejects(fs.lstat(f.pointer), { code: 'ENOENT' });
|
|
119
|
+
});
|
|
120
|
+
test('signed installation cannot publish receipt or pointer after a copy withdraws authority', async (t) => {
|
|
121
|
+
const f = await fixture(t);
|
|
122
|
+
let receiptWrites = 0;
|
|
123
|
+
const api = await module({ cp: async (...args) => { const value = await fs.cp(...args); f.withdraw(); return value; },
|
|
124
|
+
writeFile: async (...args) => {
|
|
125
|
+
if (/INSTALL_RECEIPT|ACTIVE_BUNDLE/.test(String(args[0])))
|
|
126
|
+
receiptWrites++;
|
|
127
|
+
return fs.writeFile(...args);
|
|
128
|
+
} });
|
|
129
|
+
await assert.rejects(api.installSkillBundle({ ...f.input, hostScope: f.hostScope }), { message: 'skill_installation_scope_unavailable' });
|
|
130
|
+
assert.equal(receiptWrites, 0);
|
|
131
|
+
await assert.rejects(fs.lstat(f.pointer), { code: 'ENOENT' });
|
|
132
|
+
});
|
|
133
|
+
test('signed installation cannot activate after the provider callback withdraws authority', async (t) => {
|
|
134
|
+
const f = await fixture(t);
|
|
135
|
+
let receiptWrites = 0;
|
|
136
|
+
const api = await module({ writeFile: async (...args) => {
|
|
137
|
+
if (/INSTALL_RECEIPT|ACTIVE_BUNDLE/.test(String(args[0])))
|
|
138
|
+
receiptWrites++;
|
|
139
|
+
return fs.writeFile(...args);
|
|
140
|
+
} });
|
|
141
|
+
await assert.rejects(api.installSkillBundle({ ...f.input, hostScope: f.hostScope, providerActivationCheck: async () => {
|
|
142
|
+
f.withdraw();
|
|
143
|
+
return { name: 'provider:codex:activation', status: 'pass', details: null };
|
|
144
|
+
} }), { message: 'skill_installation_scope_unavailable' });
|
|
145
|
+
assert.equal(receiptWrites, 0);
|
|
146
|
+
await assert.rejects(fs.lstat(f.pointer), { code: 'ENOENT' });
|
|
147
|
+
});
|
|
148
|
+
test('signed installation retains the original endpoint despite input mutation after first await', async (t) => {
|
|
149
|
+
const f = await fixture(t), supplied = { ...f.input, hostScope: f.hostScope };
|
|
150
|
+
const api = await module({ readdir: async (...args) => {
|
|
151
|
+
supplied.deviceId = '99999999-9999-4999-8999-999999999999';
|
|
152
|
+
return fs.readdir(...args);
|
|
153
|
+
} });
|
|
154
|
+
const receipt = await api.installSkillBundle(supplied);
|
|
155
|
+
assert.equal(receipt.deviceId, f.input.deviceId);
|
|
156
|
+
assert.equal(receipt.status, 'active');
|
|
157
|
+
});
|
|
158
|
+
test('signed installation emits fixed native failures without invoking error getters', async (t) => {
|
|
159
|
+
const f = await fixture(t);
|
|
160
|
+
let getters = 0;
|
|
161
|
+
const failure = Object.defineProperty(new Error('private storage canary'), 'code', { get: () => { getters++; throw new Error('private getter canary'); } });
|
|
162
|
+
const api = await module({ readdir: async () => { throw failure; } });
|
|
163
|
+
await assert.rejects(api.installSkillBundle({ ...f.input, hostScope: f.hostScope }), { message: 'skill_installation_storage_unavailable' });
|
|
164
|
+
assert.equal(getters, 0);
|
|
165
|
+
});
|
|
166
|
+
test('actual compiled signed installation returns a verified receipt under live host authority', async (t) => {
|
|
167
|
+
const f = await fixture(t);
|
|
168
|
+
const receipt = await installSkillBundle({ ...f.input, ...{ hostScope: f.hostScope } });
|
|
169
|
+
assert.equal(receipt.status, 'active');
|
|
170
|
+
assert.equal(receipt.deviceId, f.input.deviceId);
|
|
171
|
+
assert.equal((await fs.readFile(f.pointer, 'utf8')).trim(), f.input.bundle.bundleId);
|
|
172
|
+
const { signature, ...unsigned } = receipt;
|
|
173
|
+
assert.equal(contracts.verifyCanonicalObject(unsigned, signature, crypto.createPublicKey(f.input.devicePrivateKey)), true);
|
|
174
|
+
});
|
|
175
|
+
async function knowledgeFixture(t) {
|
|
176
|
+
const f = await fixture(t), relative = '.agents/skills/dharma-agent-fabric', source = path.join(f.input.sourceDirectory, relative);
|
|
177
|
+
await fs.mkdir(path.dirname(source), { recursive: true });
|
|
178
|
+
await fs.rename(path.join(f.input.sourceDirectory, 'skill'), source);
|
|
179
|
+
await fs.mkdir(path.join(source, 'knowledge'));
|
|
180
|
+
await fs.writeFile(path.join(source, 'knowledge/CATALOG.json'), '{"synthetic":"catalog"}');
|
|
181
|
+
await fs.writeFile(path.join(source, 'MANIFEST.json'), '{"synthetic":"manifest"}');
|
|
182
|
+
const { signature: _signature, bundleHash: _hash, ...base } = f.input.bundle;
|
|
183
|
+
base.skills[0].path = relative;
|
|
184
|
+
base.skills[0].contentHash = await contentHash(source);
|
|
185
|
+
const bundleHash = calculateBundleHash(base);
|
|
186
|
+
f.input.bundle = { ...base, bundleHash, signature: contracts.signCanonicalObject({ ...base, bundleHash }, f.server.privateKey) };
|
|
187
|
+
const receipt = await installSkillBundle(f.input);
|
|
188
|
+
const readInput = { nativeSkillDirectory: f.native, workspaceId: f.input.workspaceId, provider: f.input.provider,
|
|
189
|
+
organizationId: f.input.bundle.organizationId, organizationAgentId: f.input.organizationAgentId, deviceId: f.input.deviceId,
|
|
190
|
+
serverPublicKey: f.input.serverPublicKey, devicePublicKey: crypto.createPublicKey(f.input.devicePrivateKey),
|
|
191
|
+
expectedReceiptHash: receipt.receiptHash, hostScope: f.hostScope };
|
|
192
|
+
return { ...f, receipt, readInput };
|
|
193
|
+
}
|
|
194
|
+
test('all public managed-release readers refuse withdrawn authority before metadata access', async (t) => {
|
|
195
|
+
const f = await knowledgeFixture(t);
|
|
196
|
+
let reads = 0;
|
|
197
|
+
const api = await module({ lstat: async (...args) => { reads++; return fs.lstat(...args); },
|
|
198
|
+
readdir: async (...args) => { reads++; return fs.readdir(...args); } });
|
|
199
|
+
f.withdraw();
|
|
200
|
+
for (const name of ['getActiveSkillBundleAuthorization', 'getExpiredSkillBundleAuthorizationForReplacement',
|
|
201
|
+
'getInstalledSkillBundleIdForRecovery', 'getLegacySkillBundleIdForUpgrade', 'readVerifiedRepositoryKnowledge']) {
|
|
202
|
+
await assert.rejects(api[name]({ ...f.readInput }), { message: 'skill_installation_scope_unavailable' }, name);
|
|
203
|
+
}
|
|
204
|
+
assert.equal(reads, 0);
|
|
205
|
+
assert.equal((await fs.readFile(f.pointer, 'utf8')).trim(), f.input.bundle.bundleId);
|
|
206
|
+
});
|
|
207
|
+
test('verified reader closes a handle acquired immediately before withdrawal without reading it', async (t) => {
|
|
208
|
+
const f = await knowledgeFixture(t);
|
|
209
|
+
let closes = 0, reads = 0;
|
|
210
|
+
const api = await module({ open: async (...args) => {
|
|
211
|
+
const handle = await fs.open(...args), close = handle.close.bind(handle), read = handle.read.bind(handle);
|
|
212
|
+
handle.close = async () => { closes++; return close(); };
|
|
213
|
+
handle.read = ((...values) => { reads++; return Reflect.apply(read, handle, values); });
|
|
214
|
+
f.withdraw();
|
|
215
|
+
return handle;
|
|
216
|
+
} });
|
|
217
|
+
await assert.rejects(api.readVerifiedRepositoryKnowledge(f.readInput), { message: 'skill_installation_scope_unavailable' });
|
|
218
|
+
assert.equal(closes, 1);
|
|
219
|
+
assert.equal(reads, 0);
|
|
220
|
+
});
|
|
221
|
+
test('verified reader closes a directory acquired immediately before withdrawal', async (t) => {
|
|
222
|
+
const f = await knowledgeFixture(t);
|
|
223
|
+
let closes = 0, reads = 0;
|
|
224
|
+
const api = await module({ opendir: async (...args) => {
|
|
225
|
+
const dir = await fs.opendir(...args), close = dir.close.bind(dir), read = dir.read.bind(dir);
|
|
226
|
+
dir.close = (async () => { closes++; return close(); });
|
|
227
|
+
dir.read = (async () => { reads++; return read(); });
|
|
228
|
+
f.withdraw();
|
|
229
|
+
return dir;
|
|
230
|
+
} });
|
|
231
|
+
await assert.rejects(api.readVerifiedRepositoryKnowledge(f.readInput), { message: 'skill_installation_scope_unavailable' });
|
|
232
|
+
assert.equal(closes, 1);
|
|
233
|
+
assert.equal(reads, 0);
|
|
234
|
+
});
|
|
235
|
+
test('scoped rollback stops after its first read withdraws authority and preserves the accepted release', async (t) => {
|
|
236
|
+
const f = await knowledgeFixture(t), pointer = await fs.readFile(f.pointer);
|
|
237
|
+
let writes = 0;
|
|
238
|
+
const api = await module({ readdir: async (...args) => {
|
|
239
|
+
const result = await fs.readdir(...args);
|
|
240
|
+
f.withdraw();
|
|
241
|
+
return result;
|
|
242
|
+
}, rm: async (...args) => { writes++; return fs.rm(...args); },
|
|
243
|
+
rename: async (...args) => { writes++; return fs.rename(...args); } });
|
|
244
|
+
await assert.rejects(api.rollbackUnconfirmedSkillBundle({ nativeSkillDirectory: f.native, workspaceId: f.input.workspaceId,
|
|
245
|
+
receipt: f.receipt, hostScope: f.hostScope }), { message: 'skill_installation_scope_unavailable' });
|
|
246
|
+
assert.equal(writes, 0);
|
|
247
|
+
assert.deepEqual(await fs.readFile(f.pointer), pointer);
|
|
248
|
+
});
|
|
249
|
+
test('scoped recursive copy stops between files and preserves its partial staging evidence', async (t) => {
|
|
250
|
+
const f = await knowledgeFixture(t);
|
|
251
|
+
let copies = 0;
|
|
252
|
+
// A fresh release identity avoids deleting the previously accepted immutable release.
|
|
253
|
+
const { signature: _signature, bundleHash: _hash, ...base } = f.input.bundle;
|
|
254
|
+
base.bundleId = crypto.randomUUID();
|
|
255
|
+
const bundleHash = calculateBundleHash(base);
|
|
256
|
+
const bundle = { ...base, bundleHash, signature: contracts.signCanonicalObject({ ...base, bundleHash }, f.server.privateKey) };
|
|
257
|
+
const pointer = await fs.readFile(f.pointer);
|
|
258
|
+
const api = await module({ cp: async (...args) => {
|
|
259
|
+
const result = await fs.cp(...args);
|
|
260
|
+
copies++;
|
|
261
|
+
f.withdraw();
|
|
262
|
+
return result;
|
|
263
|
+
} });
|
|
264
|
+
await assert.rejects(api.installSkillBundle({ ...f.input, bundle, hostScope: f.hostScope }), { message: 'skill_installation_scope_unavailable' });
|
|
265
|
+
assert.equal(copies, 1);
|
|
266
|
+
assert.deepEqual(await fs.readFile(f.pointer), pointer);
|
|
267
|
+
const staging = path.join(f.native, '.dharma-managed/workspaces', f.input.workspaceId, 'releases', bundle.bundleId, 'dharma-agent-fabric');
|
|
268
|
+
assert.ok((await fs.readdir(staging)).length > 0);
|
|
269
|
+
});
|
|
270
|
+
test('scoped input getters and proxies cannot execute before installation admission', async (t) => {
|
|
271
|
+
const f = await fixture(t);
|
|
272
|
+
let hooks = 0, effects = 0;
|
|
273
|
+
const api = await module({ readdir: async (...args) => { effects++; return fs.readdir(...args); } });
|
|
274
|
+
const getter = Object.defineProperty({ ...f.input, hostScope: f.hostScope }, 'bundle', { get: () => { hooks++; throw new Error('private input canary'); } });
|
|
275
|
+
await assert.rejects(api.installSkillBundle(getter), { message: 'skill_installation_input_invalid' });
|
|
276
|
+
const proxy = new Proxy(f.input.bundle, { ownKeys: () => { hooks++; throw new Error('private proxy canary'); } });
|
|
277
|
+
await assert.rejects(api.installSkillBundle({ ...f.input, bundle: proxy, hostScope: f.hostScope }), { message: 'skill_installation_input_invalid' });
|
|
278
|
+
assert.equal(hooks, 0);
|
|
279
|
+
assert.equal(effects, 0);
|
|
280
|
+
});
|
|
281
|
+
test('invalid explicit scope cannot downgrade installation to legacy authority', async (t) => {
|
|
282
|
+
const f = await fixture(t), api = await module();
|
|
283
|
+
for (const hostScope of [null, false, 0])
|
|
284
|
+
await assert.rejects(api.installSkillBundle({ ...f.input, hostScope }), { message: 'skill_installation_scope_unavailable' });
|
|
285
|
+
await assert.rejects(fs.lstat(f.native), { code: 'ENOENT' });
|
|
286
|
+
});
|
|
287
|
+
test('detached provider work retains the closed installation scope instead of falling back to legacy reads', async (t) => {
|
|
288
|
+
const f = await fixture(t), api = await module();
|
|
289
|
+
let late;
|
|
290
|
+
await api.installSkillBundle({ ...f.input, hostScope: f.hostScope, providerActivationCheck: async () => {
|
|
291
|
+
late = new Promise((accept, reject) => setTimeout(() => {
|
|
292
|
+
api.contentHash(path.join(f.input.sourceDirectory, 'skill')).then(accept, reject);
|
|
293
|
+
}, 200));
|
|
294
|
+
void late.catch(() => { });
|
|
295
|
+
return { name: 'provider:codex:activation', status: 'pass', details: null };
|
|
296
|
+
} });
|
|
297
|
+
await assert.rejects(late, { message: 'skill_installation_scope_unavailable' });
|
|
298
|
+
});
|
|
299
|
+
test('scoped smoke execution is refused before any unqualified child launch', async (t) => {
|
|
300
|
+
const f = await fixture(t), api = await module();
|
|
301
|
+
await assert.rejects(api.installSkillBundle({ ...f.input, policy: { ...f.input.policy, tasks: {} },
|
|
302
|
+
smokeCommandId: 'unqualified', hostScope: f.hostScope }), { message: 'skill_installation_smoke_unqualified' });
|
|
303
|
+
await assert.rejects(fs.lstat(f.pointer), { code: 'ENOENT' });
|
|
304
|
+
});
|
|
305
|
+
test('actual compiled scoped repository reader returns the receipt-pinned catalog and manifest', async (t) => {
|
|
306
|
+
const f = await knowledgeFixture(t);
|
|
307
|
+
const result = await readVerifiedRepositoryKnowledge(f.readInput);
|
|
308
|
+
assert.ok(result);
|
|
309
|
+
assert.equal(result.catalogBytes.toString('utf8'), '{"synthetic":"catalog"}');
|
|
310
|
+
assert.equal(result.manifestBytes.toString('utf8'), '{"synthetic":"manifest"}');
|
|
311
|
+
assert.equal(result.authorization.bundleId, f.input.bundle.bundleId);
|
|
312
|
+
});
|
|
313
|
+
test('actual compiled scoped rollback restores the prior independently verified receipt and content', async (t) => {
|
|
314
|
+
const f = await knowledgeFixture(t), original = f.input.bundle;
|
|
315
|
+
const source = path.join(f.input.sourceDirectory, original.skills[0].path);
|
|
316
|
+
await fs.writeFile(path.join(source, 'SKILL.md'), '# Later approved synthetic procedure');
|
|
317
|
+
const { signature: _signature, bundleHash: _hash, ...base } = original;
|
|
318
|
+
base.bundleId = crypto.randomUUID();
|
|
319
|
+
base.skills = base.skills.map(skill => ({ ...skill }));
|
|
320
|
+
base.skills[0].contentHash = await contentHash(source);
|
|
321
|
+
const bundleHash = calculateBundleHash(base);
|
|
322
|
+
const bundle = { ...base, bundleHash, signature: contracts.signCanonicalObject({ ...base, bundleHash }, f.server.privateKey) };
|
|
323
|
+
const receipt = await installSkillBundle({ ...f.input, bundle, hostScope: f.hostScope });
|
|
324
|
+
assert.equal(receipt.previousBundleId, original.bundleId);
|
|
325
|
+
await rollbackUnconfirmedSkillBundle({ nativeSkillDirectory: f.native, workspaceId: f.input.workspaceId,
|
|
326
|
+
receipt, hostScope: f.hostScope });
|
|
327
|
+
assert.equal((await getActiveSkillBundleAuthorization(f.readInput))?.bundleId, original.bundleId);
|
|
328
|
+
assert.equal(await fs.readFile(path.join(f.native, 'dharma-agent-fabric/SKILL.md'), 'utf8'), '# Logical job\nA retry preserves identity.');
|
|
329
|
+
});
|
|
330
|
+
test('actual compiled scoped clear preserves unrelated native files and publishes its verified receipt', async (t) => {
|
|
331
|
+
const f = await knowledgeFixture(t), unrelated = path.join(f.native, 'unmanaged.md');
|
|
332
|
+
await fs.writeFile(unrelated, 'user-owned synthetic notes');
|
|
333
|
+
const { signature: _signature, bundleHash: _hash, ...original } = f.input.bundle;
|
|
334
|
+
const base = { ...original, bundleId: crypto.randomUUID(), operation: 'clear', skills: [] };
|
|
335
|
+
const bundleHash = calculateBundleHash(base);
|
|
336
|
+
const bundle = { ...base, bundleHash, signature: contracts.signCanonicalObject({ ...base, bundleHash }, f.server.privateKey) };
|
|
337
|
+
const receipt = await installSkillBundle({ ...f.input, bundle, hostScope: f.hostScope });
|
|
338
|
+
assert.equal(receipt.status, 'active');
|
|
339
|
+
assert.equal((await getActiveSkillBundleAuthorization({ ...f.readInput, expectedReceiptHash: receipt.receiptHash }))?.bundleId, bundle.bundleId);
|
|
340
|
+
assert.equal(await fs.readFile(unrelated, 'utf8'), 'user-owned synthetic notes');
|
|
341
|
+
await assert.rejects(fs.lstat(path.join(f.native, 'dharma-agent-fabric')), { code: 'ENOENT' });
|
|
342
|
+
});
|
|
343
|
+
//# sourceMappingURL=installationScope.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installationScope.test.js","sourceRoot":"","sources":["../src/installationScope.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dharma-ai-labs/agent-fabric-skill-manager",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.11",
|
|
4
4
|
"description": "Signed Skill bundle verification, activation, receipts, and rollback for Dharma Agent Fabric",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://github.com/dharma-ai-labs/dharma-agent-fabric/tree/main/packages/skill-manager#readme",
|