@dharma-ai-labs/agent-fabric 0.2.93 → 0.2.94
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/demoEnrollment.d.ts +6 -0
- package/dist/demoEnrollment.d.ts.map +1 -1
- package/dist/demoEnrollment.js +35 -2
- package/dist/demoEnrollment.js.map +1 -1
- package/dist/demoEnrollment.test.js +43 -9
- package/dist/demoEnrollment.test.js.map +1 -1
- package/dist/demoPackage.d.ts +62 -0
- package/dist/demoPackage.d.ts.map +1 -0
- package/dist/demoPackage.js +403 -0
- package/dist/demoPackage.js.map +1 -0
- package/dist/demoPackage.test.d.ts +2 -0
- package/dist/demoPackage.test.d.ts.map +1 -0
- package/dist/demoPackage.test.js +354 -0
- package/dist/demoPackage.test.js.map +1 -0
- package/dist/demoPeer.test.js +14 -2
- package/dist/demoPeer.test.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -2
- package/dist/index.js.map +1 -1
- package/dist/index.test.js +2 -2
- package/dist/usage.d.ts +1 -1
- package/dist/usage.d.ts.map +1 -1
- package/dist/usage.js +1 -1
- package/dist/usage.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,403 @@
|
|
|
1
|
+
import { createHash, createPrivateKey, createPublicKey, randomBytes, randomUUID, sign } from 'node:crypto';
|
|
2
|
+
import { mkdir, mkdtemp, readFile, rm, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { dirname, isAbsolute, relative, resolve } from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import { verifyCanonicalObject } from '@dharma-ai-labs/agent-fabric-contracts';
|
|
6
|
+
import { deleteActiveSkillAuthorizationAnchor, loadActiveSkillAuthorizationAnchor, loadOrCreateDeviceIdentity, normalizeHqUrl, saveActiveSkillAuthorizationAnchor } from '@dharma-ai-labs/agent-fabric-relay-client';
|
|
7
|
+
import { getActiveSkillBundleAuthorization, installSkillBundle, rollbackUnconfirmedSkillBundle, verifySkillBundle } from '@dharma-ai-labs/agent-fabric-skill-manager';
|
|
8
|
+
import { loadDemoSigningTrust, scopePath, verifyDemoDevice } from './demoEnrollment.js';
|
|
9
|
+
import { receiveRepositoryPackageDelivery } from './repositoryPackageDelivery.js';
|
|
10
|
+
import { inventoryRepositoryPackage } from './repositoryPackage.js';
|
|
11
|
+
import { initializeRepositoryKnowledge } from './repositoryKnowledge.js';
|
|
12
|
+
import { assertRepositoryInstallerOwnership, writeRepositoryInstallerFile } from './repositoryInstallerFiles.js';
|
|
13
|
+
import { pollRepositoryCandidate, synchronizeRepositoryCandidate } from './repositoryCandidateSync.js';
|
|
14
|
+
import { validateRepositorySourceAuthorization } from './repositorySourceAuthorization.js';
|
|
15
|
+
const UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
|
16
|
+
function apiError(value, status) {
|
|
17
|
+
const response = value && typeof value === 'object' && !Array.isArray(value)
|
|
18
|
+
? value : {};
|
|
19
|
+
const nested = response.error && typeof response.error === 'object' && !Array.isArray(response.error)
|
|
20
|
+
? response.error : null;
|
|
21
|
+
const code = typeof nested?.code === 'string' ? nested.code
|
|
22
|
+
: typeof response.error === 'string' ? response.error : `http_${status}`;
|
|
23
|
+
const message = typeof nested?.message === 'string' ? nested.message
|
|
24
|
+
: typeof response.message === 'string' ? response.message : 'Demo package request failed.';
|
|
25
|
+
return Object.assign(new Error(`${code}: ${message}`), { code });
|
|
26
|
+
}
|
|
27
|
+
async function signedJson(input, method, route, body, deps) {
|
|
28
|
+
const origin = normalizeHqUrl(input.hqUrl);
|
|
29
|
+
const url = new URL(route, origin);
|
|
30
|
+
if (url.origin !== origin || !url.pathname.startsWith(`/api/demo/fabric/repositories/${input.repositoryId}/`)) {
|
|
31
|
+
throw new Error('Demo package route does not match the enrolled repository.');
|
|
32
|
+
}
|
|
33
|
+
url.searchParams.set('orgId', input.organizationId);
|
|
34
|
+
const rawBody = method === 'POST' ? JSON.stringify(body) : '';
|
|
35
|
+
if (Buffer.byteLength(rawBody) > 8_388_608)
|
|
36
|
+
throw new Error('Demo package upload exceeds eight MiB.');
|
|
37
|
+
const configPath = scopePath(input, origin);
|
|
38
|
+
const before = JSON.parse(await readFile(configPath, 'utf8'));
|
|
39
|
+
if (before.schema !== 'dharma.demo-device/v1' || before.hqUrl !== origin
|
|
40
|
+
|| before.organizationId !== input.organizationId || before.repositoryId !== input.repositoryId
|
|
41
|
+
|| before.normalizedRepository !== input.normalizedRepository
|
|
42
|
+
|| before.installationId !== input.installationId || !UUID.test(before.deviceId)
|
|
43
|
+
|| !Number.isSafeInteger(before.nextSequence) || before.nextSequence < 1) {
|
|
44
|
+
throw new Error('Demo device config does not match the requested repository.');
|
|
45
|
+
}
|
|
46
|
+
// A previous response may have been lost after the server consumed its sequence.
|
|
47
|
+
await verifyDemoDevice(input, { ...deps, expectedAcceptedSequence: before.nextSequence });
|
|
48
|
+
const config = JSON.parse(await readFile(configPath, 'utf8'));
|
|
49
|
+
if (!config.signedReady || !UUID.test(config.deviceId))
|
|
50
|
+
throw new Error('Demo device is not signed ready.');
|
|
51
|
+
const identity = await loadOrCreateDeviceIdentity({ hqUrl: origin,
|
|
52
|
+
organizationId: `${input.organizationId}:${input.repositoryId}`,
|
|
53
|
+
installationId: input.installationId, store: deps.store });
|
|
54
|
+
if (identity.publicKeyEd25519 !== config.publicKeyEd25519)
|
|
55
|
+
throw new Error('Demo device key mismatch.');
|
|
56
|
+
const sessionId = randomUUID();
|
|
57
|
+
const messageId = randomUUID();
|
|
58
|
+
const timestamp = new Date().toISOString();
|
|
59
|
+
const nonce = randomBytes(24).toString('base64url');
|
|
60
|
+
const sequence = config.nextSequence;
|
|
61
|
+
const payload = Buffer.from(JSON.stringify({
|
|
62
|
+
bodyHash: `sha256:${createHash('sha256').update(rawBody).digest('hex')}`,
|
|
63
|
+
deviceId: config.deviceId, messageId, method, nonce,
|
|
64
|
+
organizationId: input.organizationId,
|
|
65
|
+
pathname: `${url.pathname}${url.search}`, sequence, sessionId, timestamp,
|
|
66
|
+
}));
|
|
67
|
+
const headers = {
|
|
68
|
+
'x-dharma-device-id': config.deviceId,
|
|
69
|
+
'x-dharma-session-id': sessionId,
|
|
70
|
+
'x-dharma-message-id': messageId,
|
|
71
|
+
'x-dharma-timestamp': timestamp,
|
|
72
|
+
'x-dharma-nonce': nonce,
|
|
73
|
+
'x-dharma-sequence': String(sequence),
|
|
74
|
+
'x-dharma-signature': sign(null, payload, { key: identity.privateJwk, format: 'jwk' }).toString('base64url'),
|
|
75
|
+
};
|
|
76
|
+
if (method === 'POST')
|
|
77
|
+
headers['content-type'] = 'application/json';
|
|
78
|
+
const response = await (deps.fetcher || fetch)(url, {
|
|
79
|
+
method, headers, body: method === 'POST' ? rawBody : undefined,
|
|
80
|
+
});
|
|
81
|
+
// Authentication can reject before consuming a sequence. The signed status
|
|
82
|
+
// reconciles both outcomes without persisting source bytes or guessing.
|
|
83
|
+
await verifyDemoDevice(input, { ...deps, expectedAcceptedSequence: sequence });
|
|
84
|
+
const result = await response.json().catch(() => null);
|
|
85
|
+
if (!response.ok)
|
|
86
|
+
throw apiError(result, response.status);
|
|
87
|
+
if (!result || typeof result !== 'object' || Array.isArray(result)
|
|
88
|
+
|| result.ok !== true) {
|
|
89
|
+
throw new Error('Demo package response is not a verified JSON receipt.');
|
|
90
|
+
}
|
|
91
|
+
return result;
|
|
92
|
+
}
|
|
93
|
+
function transport(input, deps) {
|
|
94
|
+
const standard = `/agent-fabric/repository-agents/${input.repositoryId}/package-candidates`;
|
|
95
|
+
const target = `/api/demo/fabric/repositories/${input.repositoryId}/package-candidates`;
|
|
96
|
+
const map = (route) => {
|
|
97
|
+
if (route !== standard && !route.startsWith(`${standard}/`)) {
|
|
98
|
+
throw new Error('Repository candidate route is outside this Demo binding.');
|
|
99
|
+
}
|
|
100
|
+
return `${target}${route.slice(standard.length)}`;
|
|
101
|
+
};
|
|
102
|
+
return {
|
|
103
|
+
signedGet: route => signedJson(input, 'GET', map(route), undefined, deps),
|
|
104
|
+
signedPost: (route, body) => signedJson(input, 'POST', map(route), body, deps),
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
async function ensureDemoLocalKnowledge(input) {
|
|
108
|
+
const ownership = await assertRepositoryInstallerOwnership(input.workspace, input.scope.repositoryId);
|
|
109
|
+
if (ownership === 'absent') {
|
|
110
|
+
await mkdir(resolve(input.workspace, '.agents/skills'), { recursive: true, mode: 0o700 });
|
|
111
|
+
await mkdir(resolve(input.workspace, '.agents/skills/dharma-agent-fabric'), { mode: 0o700 });
|
|
112
|
+
await writeRepositoryInstallerFile(input.workspace, '.agents/skills/dharma-agent-fabric/.dharma-agent-fabric.json', `${JSON.stringify({ managedBy: 'dharma-agent-fabric', workspaceId: input.scope.repositoryId })}\n`);
|
|
113
|
+
}
|
|
114
|
+
if (ownership !== 'signed') {
|
|
115
|
+
await mkdir(resolve(input.workspace, '.agents/skills/dharma-agent-fabric/references'), { recursive: true, mode: 0o700 });
|
|
116
|
+
const onboarding = await readFile(fileURLToPath(new URL('../AGENT_FABRIC_ONBOARDING.md', import.meta.url)), 'utf8');
|
|
117
|
+
await writeRepositoryInstallerFile(input.workspace, '.agents/skills/dharma-agent-fabric/SKILL.md', `---\nname: dharma-agent-fabric\ndescription: Shared repository knowledge and team coordination.\n---\n\n${onboarding}`);
|
|
118
|
+
await writeRepositoryInstallerFile(input.workspace, '.agents/skills/dharma-agent-fabric/references/organization.md', `# Demo repository\n\nOrganization: ${input.scope.organizationId}\nRepository: ${input.scope.normalizedRepository}\n`);
|
|
119
|
+
return initializeRepositoryKnowledge({ workspace: input.workspace,
|
|
120
|
+
organizationId: input.scope.organizationId,
|
|
121
|
+
repositoryAgentId: input.scope.repositoryId });
|
|
122
|
+
}
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
async function reconcileDemoInstallerMarker(input) {
|
|
126
|
+
try {
|
|
127
|
+
return await assertRepositoryInstallerOwnership(input.workspace, input.repositoryId);
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
if (input.repositoryId === input.legacySpaceId)
|
|
131
|
+
throw error;
|
|
132
|
+
const legacy = await assertRepositoryInstallerOwnership(input.workspace, input.legacySpaceId);
|
|
133
|
+
if (legacy !== 'installer')
|
|
134
|
+
throw error;
|
|
135
|
+
await writeRepositoryInstallerFile(input.workspace, '.agents/skills/dharma-agent-fabric/.dharma-agent-fabric.json', `${JSON.stringify({ managedBy: 'dharma-agent-fabric', workspaceId: input.repositoryId })}\n`);
|
|
136
|
+
return assertRepositoryInstallerOwnership(input.workspace, input.repositoryId);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
function demoInstallPolicy(authorization) {
|
|
140
|
+
return { organizationId: authorization.organizationId,
|
|
141
|
+
skills: { automaticInstall: authorization.policy.automaticValidatedPublication } };
|
|
142
|
+
}
|
|
143
|
+
async function installActiveDemoPackage(input, deps) {
|
|
144
|
+
const { scope } = input;
|
|
145
|
+
const root = `/api/demo/fabric/repositories/${scope.repositoryId}/packages`;
|
|
146
|
+
const active = await signedJson(scope, 'GET', `${root}/active`, undefined, deps);
|
|
147
|
+
if (active.organizationId !== scope.organizationId || active.repositoryId !== scope.repositoryId
|
|
148
|
+
|| active.repositoryPackageState !== 'published' || !active.package
|
|
149
|
+
|| typeof active.package !== 'object' || Array.isArray(active.package)) {
|
|
150
|
+
return null;
|
|
151
|
+
}
|
|
152
|
+
const published = active.package;
|
|
153
|
+
if (!UUID.test(String(published.releaseId || '')) || !published.envelope || !published.bundle
|
|
154
|
+
|| !published.index || typeof published.index !== 'object') {
|
|
155
|
+
throw new Error('Active Demo package receipt is incomplete.');
|
|
156
|
+
}
|
|
157
|
+
const envelope = published.envelope;
|
|
158
|
+
const descriptor = envelope.descriptor;
|
|
159
|
+
if (!descriptor || descriptor.policyHash !== input.authorization.policyHash
|
|
160
|
+
|| descriptor.organizationId !== scope.organizationId
|
|
161
|
+
|| descriptor.repositoryBindingId !== scope.repositoryId
|
|
162
|
+
|| descriptor.releaseId !== published.releaseId) {
|
|
163
|
+
throw new Error('Active Demo release does not match the current repository authorization.');
|
|
164
|
+
}
|
|
165
|
+
const trust = await loadDemoSigningTrust(scope);
|
|
166
|
+
const bundle = published.bundle;
|
|
167
|
+
const { signature, ...unsignedEnvelope } = envelope;
|
|
168
|
+
const now = Date.now();
|
|
169
|
+
const signingKey = trust.keyset.keys.filter(key => ['active', 'overlap'].includes(key.status)
|
|
170
|
+
&& Date.parse(key.notBefore) <= now && Date.parse(key.notAfter) > now)
|
|
171
|
+
.map(key => createPublicKey({ key: { kty: 'OKP', crv: 'Ed25519',
|
|
172
|
+
x: key.publicKeyEd25519 }, format: 'jwk' }))
|
|
173
|
+
.find(key => {
|
|
174
|
+
if (typeof signature !== 'string' || !verifyCanonicalObject(unsignedEnvelope, signature, key))
|
|
175
|
+
return false;
|
|
176
|
+
try {
|
|
177
|
+
verifySkillBundle(bundle, key);
|
|
178
|
+
return true;
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
return false;
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
if (!signingKey)
|
|
185
|
+
throw new Error('Demo release is not signed by a currently trusted organization key.');
|
|
186
|
+
const releaseId = String(published.releaseId);
|
|
187
|
+
const delivery = await receiveRepositoryPackageDelivery({
|
|
188
|
+
envelope, bundle, serverPublicKey: signingKey,
|
|
189
|
+
scope: { organizationId: scope.organizationId, repositoryBindingId: scope.repositoryId,
|
|
190
|
+
repositoryAgentId: scope.repositoryId, deviceId: trust.deviceId,
|
|
191
|
+
workspaceId: input.workspaceId, provider: input.provider },
|
|
192
|
+
fetchIndex: async () => published.index,
|
|
193
|
+
fetchChunk: async (fileIndex, chunkIndex) => {
|
|
194
|
+
const response = await signedJson(scope, 'GET', `${root}/${releaseId}/chunks/${fileIndex}/${chunkIndex}`, undefined, deps);
|
|
195
|
+
if (response.organizationId !== scope.organizationId || response.repositoryId !== scope.repositoryId
|
|
196
|
+
|| response.releaseId !== releaseId)
|
|
197
|
+
throw new Error('Demo package chunk scope changed.');
|
|
198
|
+
return response.chunk;
|
|
199
|
+
},
|
|
200
|
+
});
|
|
201
|
+
const installerWorkspaceId = scope.repositoryId;
|
|
202
|
+
const config = { hqUrl: normalizeHqUrl(scope.hqUrl), organizationId: scope.organizationId,
|
|
203
|
+
deviceId: trust.deviceId };
|
|
204
|
+
const anchorInput = { config, workspaceId: installerWorkspaceId,
|
|
205
|
+
organizationAgentId: scope.repositoryId, provider: input.provider, store: deps.store };
|
|
206
|
+
const prior = await loadActiveSkillAuthorizationAnchor(anchorInput);
|
|
207
|
+
if (prior) {
|
|
208
|
+
const priorBundle = JSON.parse(await readFile(resolve(input.nativeSkillDirectory, '.dharma-managed', 'workspaces', installerWorkspaceId, 'active', 'AUTHORIZATION.json'), 'utf8'));
|
|
209
|
+
const priorSigningKey = trust.keyset.keys.filter(key => ['active', 'overlap'].includes(key.status)
|
|
210
|
+
&& Date.parse(key.notBefore) <= now && Date.parse(key.notAfter) > now)
|
|
211
|
+
.map(key => createPublicKey({ key: { kty: 'OKP', crv: 'Ed25519',
|
|
212
|
+
x: key.publicKeyEd25519 }, format: 'jwk' }))
|
|
213
|
+
.find(key => {
|
|
214
|
+
try {
|
|
215
|
+
verifySkillBundle(priorBundle, key);
|
|
216
|
+
return true;
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
if (!priorSigningKey)
|
|
223
|
+
throw new Error('Active Demo package is not signed by a currently trusted key.');
|
|
224
|
+
const priorAuthorization = await getActiveSkillBundleAuthorization({ nativeSkillDirectory: input.nativeSkillDirectory,
|
|
225
|
+
workspaceId: installerWorkspaceId, provider: input.provider,
|
|
226
|
+
organizationId: scope.organizationId, organizationAgentId: scope.repositoryId,
|
|
227
|
+
deviceId: trust.deviceId, serverPublicKey: priorSigningKey,
|
|
228
|
+
devicePublicKey: createPublicKey({ key: { kty: 'OKP', crv: 'Ed25519',
|
|
229
|
+
x: JSON.parse(await readFile(scopePath(scope, config.hqUrl), 'utf8')).publicKeyEd25519 }, format: 'jwk' }),
|
|
230
|
+
expectedReceiptHash: prior.receiptHash });
|
|
231
|
+
if (!priorAuthorization || priorAuthorization.bundleId !== prior.bundleId) {
|
|
232
|
+
throw new Error('Protected Demo package receipt does not match the active installation.');
|
|
233
|
+
}
|
|
234
|
+
if (prior.bundleId === bundle.bundleId)
|
|
235
|
+
return { releaseId, bundleId: bundle.bundleId,
|
|
236
|
+
receiptHash: prior.receiptHash, alreadyInstalled: true };
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
const pointer = resolve(input.nativeSkillDirectory, '.dharma-managed', 'workspaces', installerWorkspaceId, 'ACTIVE_BUNDLE');
|
|
240
|
+
try {
|
|
241
|
+
await readFile(pointer);
|
|
242
|
+
throw new Error('Existing Demo package has no protected receipt anchor.');
|
|
243
|
+
}
|
|
244
|
+
catch (error) {
|
|
245
|
+
if (error.code !== 'ENOENT')
|
|
246
|
+
throw error;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
const currentScope = await signedJson(scope, 'GET', `/api/demo/fabric/repositories/${scope.repositoryId}/package-scope`, undefined, deps);
|
|
250
|
+
const currentAuthorization = validateRepositorySourceAuthorization(currentScope.sourceAuthorization, { organizationId: scope.organizationId, workspaceId: input.workspaceId,
|
|
251
|
+
repositoryBindingId: scope.repositoryId, repositoryAgentId: scope.repositoryId }, new Date());
|
|
252
|
+
const currentActive = await signedJson(scope, 'GET', `${root}/active`, undefined, deps);
|
|
253
|
+
if (currentAuthorization.policyHash !== input.authorization.policyHash
|
|
254
|
+
|| currentActive.repositoryPackageState !== 'published'
|
|
255
|
+
|| currentActive.package?.releaseId !== releaseId) {
|
|
256
|
+
throw new Error('Demo policy or active release changed before installation.');
|
|
257
|
+
}
|
|
258
|
+
delivery.assertCurrent();
|
|
259
|
+
const parent = resolve(scope.stateRoot, 'demo-package-sources');
|
|
260
|
+
await mkdir(parent, { recursive: true, mode: 0o700 });
|
|
261
|
+
const sourceRoot = await mkdtemp(resolve(parent, 'attempt-'));
|
|
262
|
+
try {
|
|
263
|
+
for (const file of delivery.files) {
|
|
264
|
+
delivery.assertCurrent();
|
|
265
|
+
const destination = resolve(sourceRoot, file.path);
|
|
266
|
+
const within = relative(sourceRoot, destination);
|
|
267
|
+
if (within === '..' || within.startsWith('../') || within.startsWith('..\\') || isAbsolute(within)) {
|
|
268
|
+
throw new Error('Demo package file escapes its staging directory.');
|
|
269
|
+
}
|
|
270
|
+
await mkdir(dirname(destination), { recursive: true, mode: 0o700 });
|
|
271
|
+
await writeFile(destination, Buffer.from(file.contentBase64, 'base64'), { flag: 'wx', mode: 0o600 });
|
|
272
|
+
}
|
|
273
|
+
delivery.assertCurrent();
|
|
274
|
+
const identity = await loadOrCreateDeviceIdentity({ hqUrl: config.hqUrl,
|
|
275
|
+
organizationId: `${scope.organizationId}:${scope.repositoryId}`,
|
|
276
|
+
installationId: scope.installationId, store: deps.store });
|
|
277
|
+
const receipt = await installSkillBundle({ bundle: delivery.bundle, sourceDirectory: sourceRoot,
|
|
278
|
+
nativeSkillDirectory: input.nativeSkillDirectory, policy: demoInstallPolicy(currentAuthorization),
|
|
279
|
+
serverPublicKey: signingKey, devicePrivateKey: createPrivateKey({ key: identity.privateJwk, format: 'jwk' }),
|
|
280
|
+
deviceId: trust.deviceId, organizationAgentId: scope.repositoryId,
|
|
281
|
+
workspaceId: installerWorkspaceId, provider: input.provider });
|
|
282
|
+
if (receipt.status !== 'active')
|
|
283
|
+
throw new Error(`Demo signed package installation ${receipt.status}.`);
|
|
284
|
+
try {
|
|
285
|
+
await saveActiveSkillAuthorizationAnchor({ ...anchorInput, bundleId: receipt.bundleId,
|
|
286
|
+
receiptHash: receipt.receiptHash, activatedAt: receipt.completedAt,
|
|
287
|
+
expiresAt: delivery.bundle.expiresAt ?? null });
|
|
288
|
+
}
|
|
289
|
+
catch (error) {
|
|
290
|
+
const recoveryErrors = [];
|
|
291
|
+
try {
|
|
292
|
+
await rollbackUnconfirmedSkillBundle({ nativeSkillDirectory: input.nativeSkillDirectory,
|
|
293
|
+
workspaceId: installerWorkspaceId, receipt });
|
|
294
|
+
}
|
|
295
|
+
catch (failure) {
|
|
296
|
+
recoveryErrors.push(failure);
|
|
297
|
+
}
|
|
298
|
+
try {
|
|
299
|
+
if (prior)
|
|
300
|
+
await saveActiveSkillAuthorizationAnchor({ ...anchorInput,
|
|
301
|
+
bundleId: prior.bundleId, receiptHash: prior.receiptHash,
|
|
302
|
+
activatedAt: prior.activatedAt, expiresAt: prior.expiresAt });
|
|
303
|
+
else
|
|
304
|
+
await deleteActiveSkillAuthorizationAnchor(anchorInput);
|
|
305
|
+
}
|
|
306
|
+
catch (failure) {
|
|
307
|
+
recoveryErrors.push(failure);
|
|
308
|
+
}
|
|
309
|
+
if (recoveryErrors.length)
|
|
310
|
+
throw new AggregateError([error, ...recoveryErrors], 'Demo package anchor persistence failed and local recovery was incomplete.');
|
|
311
|
+
throw error;
|
|
312
|
+
}
|
|
313
|
+
return { releaseId, bundleId: receipt.bundleId, receiptHash: receipt.receiptHash,
|
|
314
|
+
alreadyInstalled: false };
|
|
315
|
+
}
|
|
316
|
+
finally {
|
|
317
|
+
await rm(sourceRoot, { recursive: true, force: true });
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
async function acknowledgeDemoInstallation(input, deps) {
|
|
321
|
+
const { scope, installed } = input;
|
|
322
|
+
const path = resolve(input.nativeSkillDirectory, '.dharma-managed', 'workspaces', scope.repositoryId, 'active', 'INSTALL_RECEIPT.json');
|
|
323
|
+
const bytes = await readFile(path);
|
|
324
|
+
if (bytes.length > 131_072)
|
|
325
|
+
throw new Error('Demo installation receipt exceeds its limit.');
|
|
326
|
+
const receipt = JSON.parse(bytes.toString('utf8'));
|
|
327
|
+
if (receipt.schema !== 'dharma.install-receipt/v1'
|
|
328
|
+
|| receipt.workspaceId !== scope.repositoryId
|
|
329
|
+
|| receipt.bundleId !== installed.bundleId
|
|
330
|
+
|| receipt.receiptHash !== installed.receiptHash
|
|
331
|
+
|| receipt.status !== 'active') {
|
|
332
|
+
throw new Error('Local Demo installation receipt does not match the protected release.');
|
|
333
|
+
}
|
|
334
|
+
const result = await signedJson(scope, 'POST', `/api/demo/fabric/repositories/${scope.repositoryId}/packages/${installed.releaseId}/install-receipts`, { receipt }, deps);
|
|
335
|
+
if (result.organizationId !== scope.organizationId || result.repositoryId !== scope.repositoryId
|
|
336
|
+
|| result.releaseId !== installed.releaseId || result.bundleId !== installed.bundleId
|
|
337
|
+
|| result.receiptHash !== installed.receiptHash) {
|
|
338
|
+
throw new Error('Demo package acknowledgement does not match the active installation.');
|
|
339
|
+
}
|
|
340
|
+
return { receiptHash: installed.receiptHash, duplicate: result.duplicate === true };
|
|
341
|
+
}
|
|
342
|
+
export async function demoRepositoryPackage(input, deps = {}) {
|
|
343
|
+
const { scope } = input;
|
|
344
|
+
const root = `/api/demo/fabric/repositories/${scope.repositoryId}`;
|
|
345
|
+
const view = await signedJson(scope, 'GET', `${root}/package-scope`, undefined, deps);
|
|
346
|
+
if (view.organizationId !== scope.organizationId || view.repositoryId !== scope.repositoryId
|
|
347
|
+
|| view.repositoryAgentId !== scope.repositoryId
|
|
348
|
+
|| view.normalizedRepository !== scope.normalizedRepository
|
|
349
|
+
|| typeof view.workspaceId !== 'string' || !UUID.test(view.workspaceId)) {
|
|
350
|
+
throw new Error('Demo package scope does not match this enrolled repository.');
|
|
351
|
+
}
|
|
352
|
+
const candidateScope = { organizationId: scope.organizationId, workspaceId: view.workspaceId,
|
|
353
|
+
repositoryBindingId: scope.repositoryId, repositoryAgentId: scope.repositoryId };
|
|
354
|
+
const candidateTransport = transport(scope, deps);
|
|
355
|
+
const outboxRoot = resolve(scope.stateRoot, 'demo-repository-candidates', scope.organizationId, scope.repositoryId);
|
|
356
|
+
if (input.statusOnly) {
|
|
357
|
+
const candidate = await pollRepositoryCandidate({ transport: candidateTransport,
|
|
358
|
+
outboxRoot, scope: candidateScope });
|
|
359
|
+
return { ok: true, stage: 'demo_repository_package_status', repositoryId: scope.repositoryId,
|
|
360
|
+
repositoryPackageState: view.repositoryPackageState, candidate, ready: false,
|
|
361
|
+
activationState: view.repositoryPackageState === 'published'
|
|
362
|
+
? 'signed_delivery_pending' : 'candidate_pending' };
|
|
363
|
+
}
|
|
364
|
+
if (!view.sourceAuthorization)
|
|
365
|
+
throw new Error('Demo repository has no active source authorization.');
|
|
366
|
+
const sourceAuthorization = validateRepositorySourceAuthorization(view.sourceAuthorization, candidateScope, new Date());
|
|
367
|
+
await reconcileDemoInstallerMarker({ workspace: input.workspace,
|
|
368
|
+
repositoryId: scope.repositoryId, legacySpaceId: view.workspaceId });
|
|
369
|
+
if (view.repositoryPackageState === 'published') {
|
|
370
|
+
const nativeSkillDirectory = input.nativeSkillDirectory ?? resolve(input.workspace, '.agents/skills');
|
|
371
|
+
const installed = await installActiveDemoPackage({ scope,
|
|
372
|
+
workspaceId: view.workspaceId, provider: input.provider ?? 'codex',
|
|
373
|
+
nativeSkillDirectory,
|
|
374
|
+
authorization: sourceAuthorization }, deps);
|
|
375
|
+
if (installed) {
|
|
376
|
+
const acknowledgement = await acknowledgeDemoInstallation({ scope, nativeSkillDirectory,
|
|
377
|
+
installed }, deps);
|
|
378
|
+
return { ok: true, stage: 'demo_repository_package_installed',
|
|
379
|
+
repositoryId: scope.repositoryId, repositoryPackageState: 'published',
|
|
380
|
+
candidate: null, installed, acknowledgement,
|
|
381
|
+
ready: false, activationState: 'signed_package_active' };
|
|
382
|
+
}
|
|
383
|
+
return { ok: true, stage: 'demo_repository_package_delivery_pending',
|
|
384
|
+
repositoryId: scope.repositoryId, repositoryPackageState: 'published',
|
|
385
|
+
candidate: null, ready: false, activationState: 'signed_delivery_pending' };
|
|
386
|
+
}
|
|
387
|
+
const knowledge = await ensureDemoLocalKnowledge({ workspace: input.workspace,
|
|
388
|
+
scope, workspaceId: view.workspaceId });
|
|
389
|
+
const snapshot = await inventoryRepositoryPackage({ workspace: input.workspace,
|
|
390
|
+
organizationId: scope.organizationId, workspaceId: view.workspaceId,
|
|
391
|
+
repositoryBindingId: scope.repositoryId, repositoryAgentId: scope.repositoryId,
|
|
392
|
+
sourceAuthorization });
|
|
393
|
+
const candidate = await synchronizeRepositoryCandidate({ transport: candidateTransport,
|
|
394
|
+
outboxRoot, scope: candidateScope, snapshot,
|
|
395
|
+
initialRepository: view.repositoryPackageState !== 'published' });
|
|
396
|
+
return { ok: true, stage: 'demo_repository_package_candidate', repositoryId: scope.repositoryId,
|
|
397
|
+
repositoryPackageState: view.repositoryPackageState, candidate,
|
|
398
|
+
firstLearning: knowledge ? { disposition: knowledge.disposition,
|
|
399
|
+
knowledgeBaseId: knowledge.catalog.knowledgeBaseId } : { disposition: 'signed_release_reused' },
|
|
400
|
+
ready: false, activationState: candidate.state === 'published'
|
|
401
|
+
? 'signed_delivery_pending' : 'candidate_pending' };
|
|
402
|
+
}
|
|
403
|
+
//# sourceMappingURL=demoPackage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"demoPackage.js","sourceRoot":"","sources":["../src/demoPackage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"demoPackage.test.d.ts","sourceRoot":"","sources":["../src/demoPackage.test.ts"],"names":[],"mappings":""}
|