@dharma-ai-labs/agent-fabric-skill-manager 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +50 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +455 -36
- package/dist/index.js.map +1 -1
- package/dist/index.test.js +392 -18
- package/dist/index.test.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.test.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import assert from 'node:assert/strict';
|
|
2
2
|
import { test } from 'node:test';
|
|
3
3
|
import { generateKeyPairSync, randomUUID } from 'node:crypto';
|
|
4
|
-
import { mkdir, mkdtemp, readFile, writeFile } from 'node:fs/promises';
|
|
4
|
+
import { cp, mkdir, mkdtemp, readFile, readdir, rename, rm, writeFile } from 'node:fs/promises';
|
|
5
5
|
import { tmpdir } from 'node:os';
|
|
6
6
|
import { resolve } from 'node:path';
|
|
7
7
|
import { signCanonicalObject } from '@dharma-ai-labs/agent-fabric-contracts';
|
|
8
|
-
import { calculateBundleHash, contentHash, installSkillBundle } from './index.js';
|
|
8
|
+
import { calculateBundleHash, contentHash, getActiveSkillBundleAuthorization, getExpiredSkillBundleAuthorizationForReplacement, getInstalledSkillBundleIdForRecovery, getLegacySkillBundleIdForUpgrade, installSkillBundle, rollbackUnconfirmedSkillBundle, verifySkillBundle } from './index.js';
|
|
9
|
+
const organizationAgentId = '11111111-1111-4111-8111-111111111111';
|
|
9
10
|
const policy = {
|
|
10
11
|
schema: 'dharma.organization-policy/v1', organizationId: 'org_test', revision: '1',
|
|
11
12
|
evidence: { defaultMode: 'deep', registeredWorkspaceOnly: true, excludePaths: [], maximumCapsuleBytes: 1, maximumDailyUploadBytes: 1, maximumExpansionBytes: 1 },
|
|
@@ -14,20 +15,121 @@ const policy = {
|
|
|
14
15
|
allowedCommands: {
|
|
15
16
|
smokePass: { argv: [process.execPath, '-e', 'process.exit(0)'], timeoutSeconds: 5 },
|
|
16
17
|
smokeFail: { argv: [process.execPath, '-e', 'process.exit(9)'], timeoutSeconds: 5 },
|
|
18
|
+
smokeSlow: { argv: [process.execPath, '-e', 'setTimeout(() => process.exit(0), 700)'], timeoutSeconds: 5 },
|
|
17
19
|
},
|
|
18
20
|
},
|
|
19
21
|
skills: { automaticInstall: true, automaticPromotionMaxRisk: 'R2', canaryPercent: 10 }, retention: {}, budgets: {},
|
|
20
22
|
};
|
|
21
|
-
|
|
22
|
-
const
|
|
23
|
+
test('legacy v1 bundle can identify itself only for a signed-server upgrade poll', async () => {
|
|
24
|
+
const native = await mkdtemp(resolve(tmpdir(), 'fabric-legacy-skill-'));
|
|
25
|
+
const workspaceId = 'workspace-legacy';
|
|
26
|
+
const bundleId = randomUUID();
|
|
27
|
+
const managed = resolve(native, '.dharma-managed', 'workspaces', workspaceId);
|
|
28
|
+
const active = resolve(managed, 'active');
|
|
29
|
+
await mkdir(active, { recursive: true });
|
|
30
|
+
await writeFile(resolve(managed, 'ACTIVE_BUNDLE'), `${bundleId}\n`);
|
|
31
|
+
await writeFile(resolve(active, 'BUNDLE.json'), JSON.stringify({ schema: 'dharma.skill-bundle/v1', bundleId }));
|
|
32
|
+
await writeFile(resolve(active, 'AUTHORIZATION.json'), JSON.stringify({ schema: 'dharma.skill-bundle/v1', bundleId }));
|
|
33
|
+
assert.equal(await getLegacySkillBundleIdForUpgrade({ nativeSkillDirectory: native, workspaceId }), bundleId);
|
|
34
|
+
await writeFile(resolve(active, 'AUTHORIZATION.json'), JSON.stringify({ schema: 'dharma.skill-bundle/v2', bundleId }));
|
|
35
|
+
assert.equal(await getLegacySkillBundleIdForUpgrade({ nativeSkillDirectory: native, workspaceId }), null);
|
|
36
|
+
});
|
|
37
|
+
test('legacy v1 installation without authorization metadata remains upgradeable', async () => {
|
|
38
|
+
const native = await mkdtemp(resolve(tmpdir(), 'fabric-legacy-no-authorization-'));
|
|
39
|
+
const workspaceId = 'workspace-legacy-no-authorization';
|
|
40
|
+
const bundleId = randomUUID();
|
|
41
|
+
const managed = resolve(native, '.dharma-managed', 'workspaces', workspaceId);
|
|
42
|
+
const active = resolve(managed, 'active');
|
|
43
|
+
await mkdir(active, { recursive: true });
|
|
44
|
+
await writeFile(resolve(managed, 'ACTIVE_BUNDLE'), `${bundleId}\n`);
|
|
45
|
+
await writeFile(resolve(active, 'BUNDLE.json'), JSON.stringify({ bundleId, workspaceId, skillIds: ['dharma-boundary'] }));
|
|
46
|
+
assert.equal(await getLegacySkillBundleIdForUpgrade({ nativeSkillDirectory: native, workspaceId }), bundleId);
|
|
47
|
+
assert.equal(await getInstalledSkillBundleIdForRecovery({ nativeSkillDirectory: native, workspaceId }), bundleId);
|
|
48
|
+
await writeFile(resolve(active, 'BUNDLE.json'), JSON.stringify({ bundleId, workspaceId: 'another-workspace', skillIds: ['dharma-boundary'] }));
|
|
49
|
+
assert.equal(await getLegacySkillBundleIdForUpgrade({ nativeSkillDirectory: native, workspaceId }), null);
|
|
50
|
+
await assert.rejects(getInstalledSkillBundleIdForRecovery({ nativeSkillDirectory: native, workspaceId }), /recovery metadata is invalid/);
|
|
51
|
+
});
|
|
52
|
+
test('expired v2 installation remains identifiable only for a replacement poll', async () => {
|
|
53
|
+
const native = await mkdtemp(resolve(tmpdir(), 'fabric-expired-recovery-'));
|
|
54
|
+
const workspaceId = 'workspace-expired-recovery';
|
|
55
|
+
const bundleId = randomUUID();
|
|
56
|
+
const managed = resolve(native, '.dharma-managed', 'workspaces', workspaceId);
|
|
57
|
+
const active = resolve(managed, 'active');
|
|
58
|
+
await mkdir(active, { recursive: true });
|
|
59
|
+
await writeFile(resolve(managed, 'ACTIVE_BUNDLE'), `${bundleId}\n`);
|
|
60
|
+
await writeFile(resolve(active, 'BUNDLE.json'), JSON.stringify({ bundleId, skillIds: [] }));
|
|
61
|
+
await writeFile(resolve(active, 'AUTHORIZATION.json'), JSON.stringify({
|
|
62
|
+
schema: 'dharma.skill-bundle/v2', bundleId, expiresAt: '2026-08-16T00:00:00.000Z',
|
|
63
|
+
}));
|
|
64
|
+
assert.equal(await getInstalledSkillBundleIdForRecovery({ nativeSkillDirectory: native, workspaceId }), bundleId);
|
|
65
|
+
});
|
|
66
|
+
test('expired replacement polling verifies the signed bundle, endpoint, and protected receipt', async () => {
|
|
67
|
+
const root = await mkdtemp(resolve(tmpdir(), 'fabric-expired-authorization-'));
|
|
68
|
+
const source = resolve(root, 'source', 'skill');
|
|
69
|
+
const native = resolve(root, 'native');
|
|
70
|
+
await mkdir(source, { recursive: true });
|
|
71
|
+
await writeFile(resolve(source, 'SKILL.md'), '# Expired candidate\n');
|
|
72
|
+
const server = generateKeyPairSync('ed25519');
|
|
73
|
+
const device = generateKeyPairSync('ed25519');
|
|
74
|
+
const deviceId = randomUUID();
|
|
75
|
+
const workspaceId = randomUUID();
|
|
76
|
+
const expiresAt = new Date(Date.now() + 30_000).toISOString();
|
|
77
|
+
const bundle = await signedBundle(source, randomUUID(), server.privateKey, 'dharma-boundary', expiresAt);
|
|
78
|
+
const receipt = await installSkillBundle({
|
|
79
|
+
bundle, sourceDirectory: resolve(root, 'source'), nativeSkillDirectory: native, policy,
|
|
80
|
+
serverPublicKey: server.publicKey, devicePrivateKey: device.privateKey, deviceId,
|
|
81
|
+
organizationAgentId, workspaceId, provider: 'codex',
|
|
82
|
+
});
|
|
83
|
+
await assert.rejects(getActiveSkillBundleAuthorization({
|
|
84
|
+
nativeSkillDirectory: native, workspaceId, provider: 'codex', organizationId: 'org_test',
|
|
85
|
+
organizationAgentId, deviceId, serverPublicKey: server.publicKey, devicePublicKey: device.publicKey,
|
|
86
|
+
expectedReceiptHash: receipt.receiptHash, now: new Date(Date.parse(expiresAt) + 1),
|
|
87
|
+
}), /has expired/);
|
|
88
|
+
assert.equal((await getExpiredSkillBundleAuthorizationForReplacement({
|
|
89
|
+
nativeSkillDirectory: native, workspaceId, provider: 'codex', organizationId: 'org_test',
|
|
90
|
+
organizationAgentId, deviceId, serverPublicKey: server.publicKey, devicePublicKey: device.publicKey,
|
|
91
|
+
expectedReceiptHash: receipt.receiptHash, now: new Date(Date.parse(expiresAt) + 1),
|
|
92
|
+
}))?.bundleId, bundle.bundleId);
|
|
93
|
+
await assert.rejects(getExpiredSkillBundleAuthorizationForReplacement({
|
|
94
|
+
nativeSkillDirectory: native, workspaceId, provider: 'codex', organizationId: 'org_test',
|
|
95
|
+
organizationAgentId, deviceId, serverPublicKey: server.publicKey, devicePublicKey: device.publicKey,
|
|
96
|
+
expectedReceiptHash: `sha256:${'0'.repeat(64)}`, now: new Date(Date.parse(expiresAt) + 1),
|
|
97
|
+
}), /not the current protected authorization/);
|
|
98
|
+
});
|
|
99
|
+
test('legacy v1 bundle cannot authorize installation or task execution', async () => {
|
|
100
|
+
const server = generateKeyPairSync('ed25519');
|
|
101
|
+
const source = await mkdtemp(resolve(tmpdir(), 'fabric-legacy-auth-'));
|
|
102
|
+
await writeFile(resolve(source, 'SKILL.md'), '# Legacy bundle\n');
|
|
103
|
+
const signed = await signedBundle(source, randomUUID(), server.privateKey);
|
|
104
|
+
const { signature: _signature, bundleHash: _bundleHash, ...v2Unsigned } = signed;
|
|
105
|
+
const v1Unsigned = { ...v2Unsigned, schema: 'dharma.skill-bundle/v1' };
|
|
106
|
+
const bundleHash = calculateBundleHash(v1Unsigned);
|
|
107
|
+
const v1Bundle = {
|
|
108
|
+
...v1Unsigned,
|
|
109
|
+
bundleHash,
|
|
110
|
+
signature: signCanonicalObject({ ...v1Unsigned, bundleHash }, server.privateKey),
|
|
111
|
+
};
|
|
112
|
+
assert.throws(() => verifySkillBundle(v1Bundle, server.publicKey), /schema is not authorized for installation or task execution/);
|
|
113
|
+
});
|
|
114
|
+
async function signedBundle(source, bundleId, privateKey, skillId = 'dharma-boundary', expiresAt = null) {
|
|
115
|
+
const skill = { skillId, version: '1.0.0', repository: 'https://github.com/customer/agent-control.git', commit: 'abc123', contentHash: await contentHash(source), path: 'skill' };
|
|
23
116
|
const base = {
|
|
24
|
-
schema: 'dharma.skill-bundle/
|
|
25
|
-
riskClass: 'R2',
|
|
26
|
-
|
|
117
|
+
schema: 'dharma.skill-bundle/v2', bundleId, organizationId: 'org_test', version: '1.0.0', operation: 'install', skills: [skill],
|
|
118
|
+
riskClass: 'R2',
|
|
119
|
+
targetSelectors: { organizationAgentIds: [organizationAgentId], deviceIds: [], workspaceIds: [], providers: ['codex'] },
|
|
120
|
+
activationPolicy: 'next_session',
|
|
121
|
+
rollbackBundleId: null, evaluationReceiptId: 'eval-1', createdAt: new Date().toISOString(), expiresAt,
|
|
27
122
|
};
|
|
28
123
|
const bundleHash = calculateBundleHash(base);
|
|
29
124
|
return { ...base, bundleHash, signature: signCanonicalObject({ ...base, bundleHash }, privateKey) };
|
|
30
125
|
}
|
|
126
|
+
async function activeBundle(nativeSkillDirectory, workspaceId, serverPublicKey, devicePublicKey, deviceId, provider = 'codex', expectedReceiptHash) {
|
|
127
|
+
const receipt = JSON.parse(await readFile(resolve(nativeSkillDirectory, '.dharma-managed', 'workspaces', workspaceId, 'active', 'INSTALL_RECEIPT.json'), 'utf8'));
|
|
128
|
+
return getActiveSkillBundleAuthorization({
|
|
129
|
+
nativeSkillDirectory, workspaceId, provider, organizationId: 'org_test', organizationAgentId, deviceId,
|
|
130
|
+
serverPublicKey, devicePublicKey, expectedReceiptHash: expectedReceiptHash || receipt.receiptHash,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
31
133
|
test('verified skill activates and a failed canary restores the prior bundle', async () => {
|
|
32
134
|
const root = await mkdtemp(resolve(tmpdir(), 'dharma-skill-'));
|
|
33
135
|
const source = resolve(root, 'source', 'skill');
|
|
@@ -41,17 +143,108 @@ test('verified skill activates and a failed canary restores the prior bundle', a
|
|
|
41
143
|
const firstBundleId = randomUUID();
|
|
42
144
|
const secondBundleId = randomUUID();
|
|
43
145
|
const first = await signedBundle(source, firstBundleId, server.privateKey);
|
|
44
|
-
const receipt = await installSkillBundle({ bundle: first, sourceDirectory: resolve(root, 'source'), nativeSkillDirectory: native, policy, serverPublicKey: server.publicKey, devicePrivateKey: device.privateKey, deviceId, workspaceId, provider: 'codex', smokeCommandId: 'smokePass' });
|
|
146
|
+
const receipt = await installSkillBundle({ bundle: first, sourceDirectory: resolve(root, 'source'), nativeSkillDirectory: native, policy, serverPublicKey: server.publicKey, devicePrivateKey: device.privateKey, deviceId, organizationAgentId, workspaceId, provider: 'codex', smokeCommandId: 'smokePass' });
|
|
45
147
|
assert.equal(receipt.status, 'active');
|
|
46
|
-
|
|
148
|
+
const managed = resolve(native, '.dharma-managed', 'workspaces', workspaceId);
|
|
149
|
+
assert.match(await readFile(resolve(managed, 'active/dharma-boundary/SKILL.md'), 'utf8'), /evidence boundary/);
|
|
47
150
|
assert.match(await readFile(resolve(native, 'dharma-boundary/SKILL.md'), 'utf8'), /evidence boundary/);
|
|
48
151
|
await writeFile(resolve(source, 'SKILL.md'), '# Broken candidate\n');
|
|
49
152
|
const second = await signedBundle(source, secondBundleId, server.privateKey);
|
|
50
|
-
const rollback = await installSkillBundle({ bundle: second, sourceDirectory: resolve(root, 'source'), nativeSkillDirectory: native, policy, serverPublicKey: server.publicKey, devicePrivateKey: device.privateKey, deviceId, workspaceId, provider: 'codex', smokeCommandId: 'smokeFail' });
|
|
153
|
+
const rollback = await installSkillBundle({ bundle: second, sourceDirectory: resolve(root, 'source'), nativeSkillDirectory: native, policy, serverPublicKey: server.publicKey, devicePrivateKey: device.privateKey, deviceId, organizationAgentId, workspaceId, provider: 'codex', smokeCommandId: 'smokeFail' });
|
|
51
154
|
assert.equal(rollback.status, 'rolled_back');
|
|
52
|
-
assert.match(await readFile(resolve(
|
|
155
|
+
assert.match(await readFile(resolve(managed, 'active/dharma-boundary/SKILL.md'), 'utf8'), /evidence boundary/);
|
|
53
156
|
assert.match(await readFile(resolve(native, 'dharma-boundary/SKILL.md'), 'utf8'), /evidence boundary/);
|
|
54
|
-
assert.equal((await readFile(resolve(
|
|
157
|
+
assert.equal((await readFile(resolve(managed, 'ACTIVE_BUNDLE'), 'utf8')).trim(), firstBundleId);
|
|
158
|
+
});
|
|
159
|
+
test('a server-rejected active receipt restores the prior local authorization', async () => {
|
|
160
|
+
const root = await mkdtemp(resolve(tmpdir(), 'dharma-skill-server-reject-'));
|
|
161
|
+
const source = resolve(root, 'source', 'skill');
|
|
162
|
+
const native = resolve(root, 'native');
|
|
163
|
+
await mkdir(source, { recursive: true });
|
|
164
|
+
await writeFile(resolve(source, 'SKILL.md'), '# Prior release\n');
|
|
165
|
+
const server = generateKeyPairSync('ed25519');
|
|
166
|
+
const device = generateKeyPairSync('ed25519');
|
|
167
|
+
const deviceId = randomUUID();
|
|
168
|
+
const workspaceId = randomUUID();
|
|
169
|
+
const prior = await signedBundle(source, randomUUID(), server.privateKey);
|
|
170
|
+
await installSkillBundle({
|
|
171
|
+
bundle: prior, sourceDirectory: resolve(root, 'source'), nativeSkillDirectory: native, policy,
|
|
172
|
+
serverPublicKey: server.publicKey, devicePrivateKey: device.privateKey, deviceId,
|
|
173
|
+
organizationAgentId, workspaceId, provider: 'codex',
|
|
174
|
+
});
|
|
175
|
+
await writeFile(resolve(source, 'SKILL.md'), '# Unconfirmed release\n');
|
|
176
|
+
const unconfirmed = await signedBundle(source, randomUUID(), server.privateKey);
|
|
177
|
+
const receipt = await installSkillBundle({
|
|
178
|
+
bundle: unconfirmed, sourceDirectory: resolve(root, 'source'), nativeSkillDirectory: native, policy,
|
|
179
|
+
serverPublicKey: server.publicKey, devicePrivateKey: device.privateKey, deviceId,
|
|
180
|
+
organizationAgentId, workspaceId, provider: 'codex',
|
|
181
|
+
});
|
|
182
|
+
await rollbackUnconfirmedSkillBundle({ nativeSkillDirectory: native, workspaceId, receipt });
|
|
183
|
+
const managed = resolve(native, '.dharma-managed', 'workspaces', workspaceId);
|
|
184
|
+
assert.equal((await readFile(resolve(managed, 'ACTIVE_BUNDLE'), 'utf8')).trim(), prior.bundleId);
|
|
185
|
+
assert.match(await readFile(resolve(managed, 'active/dharma-boundary/SKILL.md'), 'utf8'), /Prior release/);
|
|
186
|
+
assert.match(await readFile(resolve(native, 'dharma-boundary/SKILL.md'), 'utf8'), /Prior release/);
|
|
187
|
+
assert.deepEqual((await readdir(managed)).filter((name) => name.startsWith('.rollback-')), []);
|
|
188
|
+
});
|
|
189
|
+
test('the next authorization read recovers a rollback interrupted between filesystem swaps', async () => {
|
|
190
|
+
const root = await mkdtemp(resolve(tmpdir(), 'dharma-skill-interrupted-rollback-'));
|
|
191
|
+
const source = resolve(root, 'source', 'skill');
|
|
192
|
+
const native = resolve(root, 'native');
|
|
193
|
+
await mkdir(source, { recursive: true });
|
|
194
|
+
await writeFile(resolve(source, 'SKILL.md'), '# Durable active release\n');
|
|
195
|
+
const server = generateKeyPairSync('ed25519');
|
|
196
|
+
const device = generateKeyPairSync('ed25519');
|
|
197
|
+
const workspaceId = randomUUID();
|
|
198
|
+
const activeBundle = await signedBundle(source, randomUUID(), server.privateKey);
|
|
199
|
+
await installSkillBundle({
|
|
200
|
+
bundle: activeBundle, sourceDirectory: resolve(root, 'source'), nativeSkillDirectory: native, policy,
|
|
201
|
+
serverPublicKey: server.publicKey, devicePrivateKey: device.privateKey, deviceId: randomUUID(),
|
|
202
|
+
organizationAgentId, workspaceId, provider: 'codex',
|
|
203
|
+
});
|
|
204
|
+
const managed = resolve(native, '.dharma-managed', 'workspaces', workspaceId);
|
|
205
|
+
const transaction = resolve(managed, '.rollback-interrupted-test');
|
|
206
|
+
await mkdir(transaction, { recursive: true });
|
|
207
|
+
await writeFile(resolve(transaction, 'ROLLBACK_RECOVERY.json'), JSON.stringify({
|
|
208
|
+
schema: 'dharma.skill-rollback-recovery/v1',
|
|
209
|
+
workspaceId,
|
|
210
|
+
currentBundleId: activeBundle.bundleId,
|
|
211
|
+
currentSkillIds: ['dharma-boundary'],
|
|
212
|
+
}));
|
|
213
|
+
await rename(resolve(managed, 'active'), resolve(transaction, 'backup-active'));
|
|
214
|
+
await writeFile(resolve(native, 'dharma-boundary/SKILL.md'), '# Partially rolled back native state\n');
|
|
215
|
+
assert.equal(await getInstalledSkillBundleIdForRecovery({ nativeSkillDirectory: native, workspaceId }), activeBundle.bundleId);
|
|
216
|
+
assert.match(await readFile(resolve(managed, 'active/dharma-boundary/SKILL.md'), 'utf8'), /Durable active release/);
|
|
217
|
+
assert.match(await readFile(resolve(native, 'dharma-boundary/SKILL.md'), 'utf8'), /Durable active release/);
|
|
218
|
+
assert.deepEqual((await readdir(managed)).filter((name) => name.startsWith('.rollback-')), []);
|
|
219
|
+
});
|
|
220
|
+
test('receipt persistence failure restores the prior bundle before publishing activation', async () => {
|
|
221
|
+
const root = await mkdtemp(resolve(tmpdir(), 'dharma-skill-receipt-failure-'));
|
|
222
|
+
const source = resolve(root, 'source', 'skill');
|
|
223
|
+
const native = resolve(root, 'native');
|
|
224
|
+
await mkdir(source, { recursive: true });
|
|
225
|
+
await writeFile(resolve(source, 'SKILL.md'), '# Prior durable release\n');
|
|
226
|
+
const server = generateKeyPairSync('ed25519');
|
|
227
|
+
const device = generateKeyPairSync('ed25519');
|
|
228
|
+
const deviceId = randomUUID();
|
|
229
|
+
const workspaceId = randomUUID();
|
|
230
|
+
const prior = await signedBundle(source, randomUUID(), server.privateKey);
|
|
231
|
+
await installSkillBundle({
|
|
232
|
+
bundle: prior, sourceDirectory: resolve(root, 'source'), nativeSkillDirectory: native, policy,
|
|
233
|
+
serverPublicKey: server.publicKey, devicePrivateKey: device.privateKey, deviceId,
|
|
234
|
+
organizationAgentId, workspaceId, provider: 'codex',
|
|
235
|
+
});
|
|
236
|
+
await writeFile(resolve(source, 'SKILL.md'), '# Candidate with colliding receipt path\n');
|
|
237
|
+
const candidate = await signedBundle(source, randomUUID(), server.privateKey, 'INSTALL_RECEIPT.json');
|
|
238
|
+
await assert.rejects(installSkillBundle({
|
|
239
|
+
bundle: candidate, sourceDirectory: resolve(root, 'source'), nativeSkillDirectory: native, policy,
|
|
240
|
+
serverPublicKey: server.publicKey, devicePrivateKey: device.privateKey, deviceId,
|
|
241
|
+
organizationAgentId, workspaceId, provider: 'codex',
|
|
242
|
+
}), /EISDIR|illegal operation on a directory/);
|
|
243
|
+
const managed = resolve(native, '.dharma-managed', 'workspaces', workspaceId);
|
|
244
|
+
assert.equal((await readFile(resolve(managed, 'ACTIVE_BUNDLE'), 'utf8')).trim(), prior.bundleId);
|
|
245
|
+
assert.match(await readFile(resolve(managed, 'active/dharma-boundary/SKILL.md'), 'utf8'), /Prior durable/);
|
|
246
|
+
assert.match(await readFile(resolve(native, 'dharma-boundary/SKILL.md'), 'utf8'), /Prior durable/);
|
|
247
|
+
await assert.rejects(readFile(resolve(native, 'INSTALL_RECEIPT.json', 'SKILL.md')), /ENOENT/);
|
|
55
248
|
});
|
|
56
249
|
test('R3 bundles cannot install without explicit organization approval', async () => {
|
|
57
250
|
const root = await mkdtemp(resolve(tmpdir(), 'dharma-skill-r3-'));
|
|
@@ -64,7 +257,144 @@ test('R3 bundles cannot install without explicit organization approval', async (
|
|
|
64
257
|
const { signature: _old, bundleHash: _oldHash, ...unsigned } = bundle;
|
|
65
258
|
const bundleHash = calculateBundleHash(unsigned);
|
|
66
259
|
const signed = { ...unsigned, bundleHash, signature: signCanonicalObject({ ...unsigned, bundleHash }, server.privateKey) };
|
|
67
|
-
await assert.rejects(() => installSkillBundle({ bundle: signed, sourceDirectory: resolve(root, 'source'), nativeSkillDirectory: resolve(root, 'native'), policy, serverPublicKey: server.publicKey, devicePrivateKey: device.privateKey, deviceId: randomUUID(), workspaceId: randomUUID(), provider: 'codex' }), /require organization approval/);
|
|
260
|
+
await assert.rejects(() => installSkillBundle({ bundle: signed, sourceDirectory: resolve(root, 'source'), nativeSkillDirectory: resolve(root, 'native'), policy, serverPublicKey: server.publicKey, devicePrivateKey: device.privateKey, deviceId: randomUUID(), organizationAgentId, workspaceId: randomUUID(), provider: 'codex' }), /require organization approval/);
|
|
261
|
+
});
|
|
262
|
+
test('signed target selectors reject installation for a different logical agent', async () => {
|
|
263
|
+
const root = await mkdtemp(resolve(tmpdir(), 'dharma-skill-target-'));
|
|
264
|
+
const source = resolve(root, 'source', 'skill');
|
|
265
|
+
await mkdir(source, { recursive: true });
|
|
266
|
+
await writeFile(resolve(source, 'SKILL.md'), '# Targeted boundary\n');
|
|
267
|
+
const server = generateKeyPairSync('ed25519');
|
|
268
|
+
const device = generateKeyPairSync('ed25519');
|
|
269
|
+
const bundle = await signedBundle(source, randomUUID(), server.privateKey);
|
|
270
|
+
await assert.rejects(() => installSkillBundle({
|
|
271
|
+
bundle, sourceDirectory: resolve(root, 'source'), nativeSkillDirectory: resolve(root, 'native'), policy,
|
|
272
|
+
serverPublicKey: server.publicKey, devicePrivateKey: device.privateKey, deviceId: randomUUID(),
|
|
273
|
+
organizationAgentId: randomUUID(), workspaceId: randomUUID(), provider: 'codex',
|
|
274
|
+
}), /not authorized for this repository agent/);
|
|
275
|
+
});
|
|
276
|
+
test('signed bundles fail closed on malformed or expired authorization windows', async () => {
|
|
277
|
+
const root = await mkdtemp(resolve(tmpdir(), 'dharma-skill-expiry-'));
|
|
278
|
+
const source = resolve(root, 'source', 'skill');
|
|
279
|
+
await mkdir(source, { recursive: true });
|
|
280
|
+
await writeFile(resolve(source, 'SKILL.md'), '# Expiring candidate\n');
|
|
281
|
+
const server = generateKeyPairSync('ed25519');
|
|
282
|
+
const current = await signedBundle(source, randomUUID(), server.privateKey);
|
|
283
|
+
for (const expiresAt of ['not-a-date', '2026-08-16T11:59:59.000Z']) {
|
|
284
|
+
const { signature: _signature, bundleHash: _bundleHash, ...unsigned } = { ...current, expiresAt };
|
|
285
|
+
const bundleHash = calculateBundleHash(unsigned);
|
|
286
|
+
const bundle = { ...unsigned, bundleHash, signature: signCanonicalObject({ ...unsigned, bundleHash }, server.privateKey) };
|
|
287
|
+
assert.throws(() => verifySkillBundle(bundle, server.publicKey, new Date('2026-08-16T12:00:00.000Z')), /expiry is invalid|has expired/);
|
|
288
|
+
}
|
|
289
|
+
});
|
|
290
|
+
test('a bundle that expires during smoke validation is not activated', async () => {
|
|
291
|
+
const root = await mkdtemp(resolve(tmpdir(), 'dharma-skill-expiry-race-'));
|
|
292
|
+
const source = resolve(root, 'source', 'skill');
|
|
293
|
+
const native = resolve(root, 'native');
|
|
294
|
+
await mkdir(source, { recursive: true });
|
|
295
|
+
await writeFile(resolve(source, 'SKILL.md'), '# Short-lived candidate\n');
|
|
296
|
+
const server = generateKeyPairSync('ed25519');
|
|
297
|
+
const device = generateKeyPairSync('ed25519');
|
|
298
|
+
const workspaceId = randomUUID();
|
|
299
|
+
const bundle = await signedBundle(source, randomUUID(), server.privateKey, 'dharma-boundary', new Date(Date.now() + 500).toISOString());
|
|
300
|
+
const receipt = await installSkillBundle({
|
|
301
|
+
bundle,
|
|
302
|
+
sourceDirectory: resolve(root, 'source'),
|
|
303
|
+
nativeSkillDirectory: native,
|
|
304
|
+
policy,
|
|
305
|
+
serverPublicKey: server.publicKey,
|
|
306
|
+
devicePrivateKey: device.privateKey,
|
|
307
|
+
deviceId: randomUUID(),
|
|
308
|
+
organizationAgentId,
|
|
309
|
+
workspaceId,
|
|
310
|
+
provider: 'codex',
|
|
311
|
+
smokeCommandId: 'smokeSlow',
|
|
312
|
+
});
|
|
313
|
+
assert.equal(receipt.status, 'failed');
|
|
314
|
+
assert.equal(receipt.checks.find((check) => check.name === 'authorization:activation-window')?.status, 'fail');
|
|
315
|
+
await assert.rejects(readFile(resolve(native, '.dharma-managed', 'workspaces', workspaceId, 'ACTIVE_BUNDLE')), /ENOENT/);
|
|
316
|
+
});
|
|
317
|
+
test('active bundle identity must match the installed release manifest', async () => {
|
|
318
|
+
const root = await mkdtemp(resolve(tmpdir(), 'dharma-skill-pointer-'));
|
|
319
|
+
const source = resolve(root, 'source', 'skill');
|
|
320
|
+
const native = resolve(root, 'native');
|
|
321
|
+
await mkdir(source, { recursive: true });
|
|
322
|
+
await writeFile(resolve(source, 'SKILL.md'), '# Candidate provenance\n');
|
|
323
|
+
const server = generateKeyPairSync('ed25519');
|
|
324
|
+
const device = generateKeyPairSync('ed25519');
|
|
325
|
+
const workspaceId = randomUUID();
|
|
326
|
+
const deviceId = randomUUID();
|
|
327
|
+
const bundle = await signedBundle(source, randomUUID(), server.privateKey);
|
|
328
|
+
await installSkillBundle({
|
|
329
|
+
bundle, sourceDirectory: resolve(root, 'source'), nativeSkillDirectory: native, policy,
|
|
330
|
+
serverPublicKey: server.publicKey, devicePrivateKey: device.privateKey,
|
|
331
|
+
deviceId, organizationAgentId, workspaceId, provider: 'codex',
|
|
332
|
+
});
|
|
333
|
+
const managed = resolve(native, '.dharma-managed', 'workspaces', workspaceId);
|
|
334
|
+
await writeFile(resolve(managed, 'ACTIVE_BUNDLE'), `${randomUUID()}\n`);
|
|
335
|
+
await assert.rejects(() => activeBundle(native, workspaceId, server.publicKey, device.publicKey, deviceId), /does not match the installed release manifest/);
|
|
336
|
+
});
|
|
337
|
+
test('an active bundle pointer fails closed when its release manifest is missing', async () => {
|
|
338
|
+
const root = await mkdtemp(resolve(tmpdir(), 'dharma-skill-missing-manifest-'));
|
|
339
|
+
const native = resolve(root, 'native');
|
|
340
|
+
const workspaceId = randomUUID();
|
|
341
|
+
const managed = resolve(native, '.dharma-managed', 'workspaces', workspaceId);
|
|
342
|
+
await mkdir(resolve(managed, 'active'), { recursive: true });
|
|
343
|
+
await writeFile(resolve(managed, 'ACTIVE_BUNDLE'), `${randomUUID()}\n`);
|
|
344
|
+
await assert.rejects(getInstalledSkillBundleIdForRecovery({ nativeSkillDirectory: native, workspaceId }), /Active bundle manifest is missing/);
|
|
345
|
+
});
|
|
346
|
+
test('active bundle authorization rejects locally rewritten release metadata', async () => {
|
|
347
|
+
const root = await mkdtemp(resolve(tmpdir(), 'dharma-skill-forged-'));
|
|
348
|
+
const source = resolve(root, 'source', 'skill');
|
|
349
|
+
const native = resolve(root, 'native');
|
|
350
|
+
await mkdir(source, { recursive: true });
|
|
351
|
+
await writeFile(resolve(source, 'SKILL.md'), '# Candidate provenance\n');
|
|
352
|
+
const server = generateKeyPairSync('ed25519');
|
|
353
|
+
const device = generateKeyPairSync('ed25519');
|
|
354
|
+
const workspaceId = randomUUID();
|
|
355
|
+
const bundle = await signedBundle(source, randomUUID(), server.privateKey);
|
|
356
|
+
const deviceId = randomUUID();
|
|
357
|
+
await installSkillBundle({
|
|
358
|
+
bundle, sourceDirectory: resolve(root, 'source'), nativeSkillDirectory: native, policy,
|
|
359
|
+
serverPublicKey: server.publicKey, devicePrivateKey: device.privateKey,
|
|
360
|
+
deviceId, organizationAgentId, workspaceId, provider: 'codex',
|
|
361
|
+
});
|
|
362
|
+
const active = resolve(native, '.dharma-managed', 'workspaces', workspaceId, 'active');
|
|
363
|
+
const authorization = JSON.parse(await readFile(resolve(active, 'AUTHORIZATION.json'), 'utf8'));
|
|
364
|
+
await writeFile(resolve(active, 'AUTHORIZATION.json'), `${JSON.stringify({ ...authorization, version: 'forged' })}\n`);
|
|
365
|
+
await assert.rejects(() => activeBundle(native, workspaceId, server.publicKey, device.publicKey, deviceId), /signature is invalid|hash is invalid/);
|
|
366
|
+
});
|
|
367
|
+
test('protected receipt hash rejects replay of a previously active installation', async () => {
|
|
368
|
+
const root = await mkdtemp(resolve(tmpdir(), 'dharma-skill-replay-'));
|
|
369
|
+
const source = resolve(root, 'source', 'skill');
|
|
370
|
+
const native = resolve(root, 'native');
|
|
371
|
+
await mkdir(source, { recursive: true });
|
|
372
|
+
await writeFile(resolve(source, 'SKILL.md'), '# First active bundle\n');
|
|
373
|
+
const server = generateKeyPairSync('ed25519');
|
|
374
|
+
const device = generateKeyPairSync('ed25519');
|
|
375
|
+
const deviceId = randomUUID();
|
|
376
|
+
const workspaceId = randomUUID();
|
|
377
|
+
const first = await signedBundle(source, randomUUID(), server.privateKey);
|
|
378
|
+
const firstReceipt = await installSkillBundle({
|
|
379
|
+
bundle: first, sourceDirectory: resolve(root, 'source'), nativeSkillDirectory: native, policy,
|
|
380
|
+
serverPublicKey: server.publicKey, devicePrivateKey: device.privateKey, deviceId,
|
|
381
|
+
organizationAgentId, workspaceId, provider: 'codex',
|
|
382
|
+
});
|
|
383
|
+
const managed = resolve(native, '.dharma-managed', 'workspaces', workspaceId);
|
|
384
|
+
const savedFirst = resolve(root, 'saved-first');
|
|
385
|
+
await cp(resolve(managed, 'active'), savedFirst, { recursive: true });
|
|
386
|
+
await writeFile(resolve(source, 'SKILL.md'), '# Second active bundle\n');
|
|
387
|
+
const second = await signedBundle(source, randomUUID(), server.privateKey);
|
|
388
|
+
const secondReceipt = await installSkillBundle({
|
|
389
|
+
bundle: second, sourceDirectory: resolve(root, 'source'), nativeSkillDirectory: native, policy,
|
|
390
|
+
serverPublicKey: server.publicKey, devicePrivateKey: device.privateKey, deviceId,
|
|
391
|
+
organizationAgentId, workspaceId, provider: 'codex',
|
|
392
|
+
});
|
|
393
|
+
assert.notEqual(firstReceipt.receiptHash, secondReceipt.receiptHash);
|
|
394
|
+
await rm(resolve(managed, 'active'), { recursive: true, force: true });
|
|
395
|
+
await cp(savedFirst, resolve(managed, 'active'), { recursive: true });
|
|
396
|
+
await writeFile(resolve(managed, 'ACTIVE_BUNDLE'), `${first.bundleId}\n`);
|
|
397
|
+
await assert.rejects(activeBundle(native, workspaceId, server.publicKey, device.publicKey, deviceId, 'codex', secondReceipt.receiptHash), /not the current protected authorization/);
|
|
68
398
|
});
|
|
69
399
|
test('signed clear baseline removes managed skills and preserves unmanaged provider skills', async () => {
|
|
70
400
|
const root = await mkdtemp(resolve(tmpdir(), 'dharma-skill-clear-'));
|
|
@@ -79,20 +409,64 @@ test('signed clear baseline removes managed skills and preserves unmanaged provi
|
|
|
79
409
|
const deviceId = randomUUID();
|
|
80
410
|
const workspaceId = randomUUID();
|
|
81
411
|
const installed = await signedBundle(source, randomUUID(), server.privateKey);
|
|
82
|
-
await installSkillBundle({ bundle: installed, sourceDirectory: resolve(root, 'source'), nativeSkillDirectory: native, policy, serverPublicKey: server.publicKey, devicePrivateKey: device.privateKey, deviceId, workspaceId, provider: 'codex' });
|
|
412
|
+
await installSkillBundle({ bundle: installed, sourceDirectory: resolve(root, 'source'), nativeSkillDirectory: native, policy, serverPublicKey: server.publicKey, devicePrivateKey: device.privateKey, deviceId, organizationAgentId, workspaceId, provider: 'codex' });
|
|
83
413
|
const clearBase = {
|
|
84
|
-
schema: 'dharma.skill-bundle/
|
|
85
|
-
operation: 'clear', skills: [], riskClass: 'R0',
|
|
414
|
+
schema: 'dharma.skill-bundle/v2', bundleId: randomUUID(), organizationId: 'org_test', version: '0.0.0',
|
|
415
|
+
operation: 'clear', skills: [], riskClass: 'R0',
|
|
416
|
+
targetSelectors: { organizationAgentIds: [organizationAgentId], deviceIds: [], workspaceIds: [], providers: ['codex'] },
|
|
86
417
|
activationPolicy: 'immediate_safe_reload', rollbackBundleId: null, evaluationReceiptId: 'baseline:no-managed-skills',
|
|
87
418
|
createdAt: new Date().toISOString(), expiresAt: null,
|
|
88
419
|
};
|
|
89
420
|
const bundleHash = calculateBundleHash(clearBase);
|
|
90
421
|
const clear = { ...clearBase, bundleHash, signature: signCanonicalObject({ ...clearBase, bundleHash }, server.privateKey) };
|
|
91
|
-
const receipt = await installSkillBundle({ bundle: clear, sourceDirectory: resolve(root, 'empty'), nativeSkillDirectory: native, policy, serverPublicKey: server.publicKey, devicePrivateKey: device.privateKey, deviceId, workspaceId, provider: 'codex' });
|
|
422
|
+
const receipt = await installSkillBundle({ bundle: clear, sourceDirectory: resolve(root, 'empty'), nativeSkillDirectory: native, policy, serverPublicKey: server.publicKey, devicePrivateKey: device.privateKey, deviceId, organizationAgentId, workspaceId, provider: 'codex' });
|
|
92
423
|
assert.equal(receipt.status, 'active');
|
|
93
424
|
assert.equal(receipt.previousBundleId, installed.bundleId);
|
|
94
425
|
await assert.rejects(readFile(resolve(native, 'dharma-boundary', 'SKILL.md')), /ENOENT/);
|
|
95
426
|
assert.match(await readFile(resolve(native, 'customer-skill', 'SKILL.md'), 'utf8'), /Customer owned/);
|
|
96
|
-
assert.equal((await readFile(resolve(native, '.dharma-managed
|
|
427
|
+
assert.equal((await readFile(resolve(native, '.dharma-managed', 'workspaces', workspaceId, 'ACTIVE_BUNDLE'), 'utf8')).trim(), clear.bundleId);
|
|
428
|
+
});
|
|
429
|
+
test('two repository workspaces retain independent active bundles and native skills', async () => {
|
|
430
|
+
const root = await mkdtemp(resolve(tmpdir(), 'dharma-skill-multi-workspace-'));
|
|
431
|
+
const native = resolve(root, 'native');
|
|
432
|
+
const sourceA = resolve(root, 'source-a', 'skill');
|
|
433
|
+
const sourceB = resolve(root, 'source-b', 'skill');
|
|
434
|
+
await mkdir(sourceA, { recursive: true });
|
|
435
|
+
await mkdir(sourceB, { recursive: true });
|
|
436
|
+
await writeFile(resolve(sourceA, 'SKILL.md'), '# Garment evidence boundary\n');
|
|
437
|
+
await writeFile(resolve(sourceB, 'SKILL.md'), '# Support authority boundary\n');
|
|
438
|
+
const server = generateKeyPairSync('ed25519');
|
|
439
|
+
const device = generateKeyPairSync('ed25519');
|
|
440
|
+
const deviceId = randomUUID();
|
|
441
|
+
const workspaceA = randomUUID();
|
|
442
|
+
const workspaceB = randomUUID();
|
|
443
|
+
const bundleA = await signedBundle(sourceA, randomUUID(), server.privateKey, 'garment-boundary');
|
|
444
|
+
const bundleB = await signedBundle(sourceB, randomUUID(), server.privateKey, 'support-boundary');
|
|
445
|
+
await installSkillBundle({
|
|
446
|
+
bundle: bundleA, sourceDirectory: resolve(root, 'source-a'), nativeSkillDirectory: native,
|
|
447
|
+
policy, serverPublicKey: server.publicKey, devicePrivateKey: device.privateKey,
|
|
448
|
+
deviceId, organizationAgentId, workspaceId: workspaceA, provider: 'codex',
|
|
449
|
+
});
|
|
450
|
+
await installSkillBundle({
|
|
451
|
+
bundle: bundleB, sourceDirectory: resolve(root, 'source-b'), nativeSkillDirectory: native,
|
|
452
|
+
policy, serverPublicKey: server.publicKey, devicePrivateKey: device.privateKey,
|
|
453
|
+
deviceId, organizationAgentId, workspaceId: workspaceB, provider: 'codex',
|
|
454
|
+
});
|
|
455
|
+
assert.equal((await activeBundle(native, workspaceA, server.publicKey, device.publicKey, deviceId))?.bundleId, bundleA.bundleId);
|
|
456
|
+
assert.equal((await activeBundle(native, workspaceB, server.publicKey, device.publicKey, deviceId))?.bundleId, bundleB.bundleId);
|
|
457
|
+
assert.match(await readFile(resolve(native, 'garment-boundary/SKILL.md'), 'utf8'), /Garment/);
|
|
458
|
+
assert.match(await readFile(resolve(native, 'support-boundary/SKILL.md'), 'utf8'), /Support/);
|
|
459
|
+
await writeFile(resolve(sourceA, 'SKILL.md'), '# Broken garment candidate\n');
|
|
460
|
+
const brokenA = await signedBundle(sourceA, randomUUID(), server.privateKey, 'garment-boundary');
|
|
461
|
+
const rollback = await installSkillBundle({
|
|
462
|
+
bundle: brokenA, sourceDirectory: resolve(root, 'source-a'), nativeSkillDirectory: native,
|
|
463
|
+
policy, serverPublicKey: server.publicKey, devicePrivateKey: device.privateKey,
|
|
464
|
+
deviceId, organizationAgentId, workspaceId: workspaceA, provider: 'codex', smokeCommandId: 'smokeFail',
|
|
465
|
+
});
|
|
466
|
+
assert.equal(rollback.status, 'rolled_back');
|
|
467
|
+
assert.equal((await activeBundle(native, workspaceA, server.publicKey, device.publicKey, deviceId))?.bundleId, bundleA.bundleId);
|
|
468
|
+
assert.equal((await activeBundle(native, workspaceB, server.publicKey, device.publicKey, deviceId))?.bundleId, bundleB.bundleId);
|
|
469
|
+
assert.match(await readFile(resolve(native, 'garment-boundary/SKILL.md'), 'utf8'), /Garment/);
|
|
470
|
+
assert.match(await readFile(resolve(native, 'support-boundary/SKILL.md'), 'utf8'), /Support/);
|
|
97
471
|
});
|
|
98
472
|
//# sourceMappingURL=index.test.js.map
|