@marifold/core 0.69.0 → 0.70.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/dist/agent/AgentRunner.d.ts +7 -1
  2. package/dist/agent/AgentRunner.d.ts.map +1 -1
  3. package/dist/agent/AgentRunner.js +50 -16
  4. package/dist/agent/AgentRunner.js.map +1 -1
  5. package/dist/agent/RunArtifacts.d.ts +6 -1
  6. package/dist/agent/RunArtifacts.d.ts.map +1 -1
  7. package/dist/agent/RunArtifacts.js +16 -3
  8. package/dist/agent/RunArtifacts.js.map +1 -1
  9. package/dist/agent/RunWorkspace.d.ts +3 -0
  10. package/dist/agent/RunWorkspace.d.ts.map +1 -1
  11. package/dist/agent/RunWorkspace.js +5 -0
  12. package/dist/agent/RunWorkspace.js.map +1 -1
  13. package/dist/agent/ScopedProcess.d.ts.map +1 -1
  14. package/dist/agent/ScopedProcess.js +1 -0
  15. package/dist/agent/ScopedProcess.js.map +1 -1
  16. package/dist/agent/ToolRegistry.d.ts +6 -1
  17. package/dist/agent/ToolRegistry.d.ts.map +1 -1
  18. package/dist/agent/ToolRegistry.js +4 -1
  19. package/dist/agent/ToolRegistry.js.map +1 -1
  20. package/dist/agent/tools/ReadFileTool.d.ts.map +1 -1
  21. package/dist/agent/tools/ReadFileTool.js +4 -0
  22. package/dist/agent/tools/ReadFileTool.js.map +1 -1
  23. package/dist/agent/tools/WriteFileTool.d.ts.map +1 -1
  24. package/dist/agent/tools/WriteFileTool.js +4 -0
  25. package/dist/agent/tools/WriteFileTool.js.map +1 -1
  26. package/dist/app/SkillAppInstanceRegistry.d.ts.map +1 -1
  27. package/dist/app/SkillAppInstanceRegistry.js +5 -0
  28. package/dist/app/SkillAppInstanceRegistry.js.map +1 -1
  29. package/dist/config/ChatGptCatalogVersion.d.ts +3 -0
  30. package/dist/config/ChatGptCatalogVersion.d.ts.map +1 -0
  31. package/dist/config/ChatGptCatalogVersion.js +55 -0
  32. package/dist/config/ChatGptCatalogVersion.js.map +1 -0
  33. package/dist/config/ProviderInspector.d.ts.map +1 -1
  34. package/dist/config/ProviderInspector.js +2 -5
  35. package/dist/config/ProviderInspector.js.map +1 -1
  36. package/dist/errors/MarifoldError.d.ts +1 -1
  37. package/dist/errors/MarifoldError.d.ts.map +1 -1
  38. package/dist/errors/MarifoldError.js.map +1 -1
  39. package/dist/images/AvatarThumbnail.d.ts +3 -0
  40. package/dist/images/AvatarThumbnail.d.ts.map +1 -0
  41. package/dist/images/AvatarThumbnail.js +16 -0
  42. package/dist/images/AvatarThumbnail.js.map +1 -0
  43. package/dist/index.d.ts +11 -0
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +19 -4
  46. package/dist/index.js.map +1 -1
  47. package/dist/profiles/ProfileManager.d.ts.map +1 -1
  48. package/dist/profiles/ProfileManager.js +2 -3
  49. package/dist/profiles/ProfileManager.js.map +1 -1
  50. package/dist/runs/RunRegistry.d.ts +27 -1
  51. package/dist/runs/RunRegistry.d.ts.map +1 -1
  52. package/dist/runs/RunRegistry.js +75 -16
  53. package/dist/runs/RunRegistry.js.map +1 -1
  54. package/dist/runtime/MarifoldRuntime.d.ts +9 -2
  55. package/dist/runtime/MarifoldRuntime.d.ts.map +1 -1
  56. package/dist/runtime/MarifoldRuntime.js +26 -5
  57. package/dist/runtime/MarifoldRuntime.js.map +1 -1
  58. package/dist/workspace/DeviceDelegateTool.d.ts +40 -0
  59. package/dist/workspace/DeviceDelegateTool.d.ts.map +1 -0
  60. package/dist/workspace/DeviceDelegateTool.js +79 -0
  61. package/dist/workspace/DeviceDelegateTool.js.map +1 -0
  62. package/dist/workspace/WorkspaceArtifactTransfer.d.ts +8 -0
  63. package/dist/workspace/WorkspaceArtifactTransfer.d.ts.map +1 -0
  64. package/dist/workspace/WorkspaceArtifactTransfer.js +45 -0
  65. package/dist/workspace/WorkspaceArtifactTransfer.js.map +1 -0
  66. package/dist/workspace/WorkspaceExecutor.d.ts +19 -0
  67. package/dist/workspace/WorkspaceExecutor.d.ts.map +1 -0
  68. package/dist/workspace/WorkspaceExecutor.js +212 -0
  69. package/dist/workspace/WorkspaceExecutor.js.map +1 -0
  70. package/dist/workspace/WorkspaceManager.d.ts +43 -0
  71. package/dist/workspace/WorkspaceManager.d.ts.map +1 -0
  72. package/dist/workspace/WorkspaceManager.js +378 -0
  73. package/dist/workspace/WorkspaceManager.js.map +1 -0
  74. package/dist/workspace/WorkspaceRuns.d.ts +18 -0
  75. package/dist/workspace/WorkspaceRuns.d.ts.map +1 -0
  76. package/dist/workspace/WorkspaceRuns.js +152 -0
  77. package/dist/workspace/WorkspaceRuns.js.map +1 -0
  78. package/dist/workspace/WorkspaceStore.d.ts +49 -0
  79. package/dist/workspace/WorkspaceStore.d.ts.map +1 -0
  80. package/dist/workspace/WorkspaceStore.js +419 -0
  81. package/dist/workspace/WorkspaceStore.js.map +1 -0
  82. package/dist/workspace/WorkspaceTerminal.d.ts +4 -0
  83. package/dist/workspace/WorkspaceTerminal.d.ts.map +1 -0
  84. package/dist/workspace/WorkspaceTerminal.js +80 -0
  85. package/dist/workspace/WorkspaceTerminal.js.map +1 -0
  86. package/dist/workspace/bridge/BridgePeer.d.ts +48 -0
  87. package/dist/workspace/bridge/BridgePeer.d.ts.map +1 -0
  88. package/dist/workspace/bridge/BridgePeer.js +307 -0
  89. package/dist/workspace/bridge/BridgePeer.js.map +1 -0
  90. package/dist/workspace/bridge/ChunkTransfers.d.ts +19 -0
  91. package/dist/workspace/bridge/ChunkTransfers.d.ts.map +1 -0
  92. package/dist/workspace/bridge/ChunkTransfers.js +125 -0
  93. package/dist/workspace/bridge/ChunkTransfers.js.map +1 -0
  94. package/package.json +6 -3
@@ -0,0 +1,378 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.WorkspaceManager = void 0;
37
+ const MarifoldError_1 = require("../errors/MarifoldError");
38
+ const os = __importStar(require("node:os"));
39
+ const workspace_protocol_1 = require("@marifold/workspace-protocol");
40
+ const WorkspaceStore_1 = require("./WorkspaceStore");
41
+ const BridgePeer_1 = require("./bridge/BridgePeer");
42
+ class WorkspaceManager {
43
+ store;
44
+ peers = new Map();
45
+ hostStatus = new Map();
46
+ presence = new Map();
47
+ onMembershipRemoved;
48
+ heartbeat;
49
+ remoteHandler;
50
+ executorHandler;
51
+ constructor(configPath) {
52
+ this.store = new WorkspaceStore_1.WorkspaceStore(configPath);
53
+ }
54
+ start(handler, executor) {
55
+ this.remoteHandler = handler;
56
+ this.executorHandler = executor;
57
+ this.store.interruptRequests();
58
+ for (const c of this.store.list())
59
+ this.connect(c);
60
+ this.heartbeat = setInterval(() => {
61
+ for (const c of this.store.list())
62
+ if (c.role === 'guest')
63
+ void this.checkHost(c);
64
+ }, 15000);
65
+ }
66
+ close() {
67
+ clearInterval(this.heartbeat);
68
+ for (const peer of this.peers.values())
69
+ peer.close();
70
+ this.store.close();
71
+ }
72
+ list() {
73
+ return this.store
74
+ .list()
75
+ .map(({ id, name, role, bridgeUrl, deviceId, hostDeviceId, executor }) => ({
76
+ id,
77
+ name,
78
+ role,
79
+ bridgeUrl,
80
+ deviceId,
81
+ hostDeviceId,
82
+ executor,
83
+ online: role === 'host' ? Boolean(this.peers.get(id)?.online) : this.hostStatus.get(id) === true,
84
+ }));
85
+ }
86
+ async create(name, url, registrationToken) {
87
+ const c = await this.store.create(name, url, os.hostname());
88
+ try {
89
+ const response = await fetch(`${c.bridgeUrl}/v1/hosts`, {
90
+ method: 'POST',
91
+ headers: { authorization: `Bearer ${registrationToken}`, 'content-type': 'application/json' },
92
+ body: JSON.stringify({ workspaceId: c.id, hostDeviceId: c.hostDeviceId, host: c.host }),
93
+ signal: AbortSignal.timeout(10000),
94
+ redirect: 'error',
95
+ });
96
+ if (!response.ok)
97
+ throw new Error(`Bridge registration failed (HTTP ${response.status}).`);
98
+ const peer = this.connect(c);
99
+ await peer.ready();
100
+ return { workspace: this.list().find((w) => w.id === c.id), invitation: this.store.invite(c.id) };
101
+ }
102
+ catch (error) {
103
+ this.peers.get(c.id)?.close();
104
+ this.peers.delete(c.id);
105
+ this.store.remove(c.id);
106
+ throw error;
107
+ }
108
+ }
109
+ async add(url, token, executor = false) {
110
+ if (token.length > 16384)
111
+ throw new Error('Invalid invitation.');
112
+ const invitation = (0, workspace_protocol_1.record)(JSON.parse(Buffer.from(token, 'base64url').toString('utf8')));
113
+ if (invitation.version !== 1 ||
114
+ invitation.expiresAt < Date.now() ||
115
+ (0, workspace_protocol_1.bridgeOrigin)(url) !== invitation.bridgeUrl ||
116
+ typeof invitation.secret !== 'string')
117
+ throw new Error('Invitation expired or belongs to a different bridge.');
118
+ const workspaceId = (0, workspace_protocol_1.identifier)(invitation.workspaceId);
119
+ if (this.store.list().some((c) => c.id === workspaceId))
120
+ throw new Error('Workspace already connected.');
121
+ const identity = await (0, workspace_protocol_1.createIdentity)();
122
+ const pendingId = `pending_${(0, workspace_protocol_1.randomId)()}`;
123
+ const temporary = new BridgePeer_1.BridgePeer({
124
+ bridgeUrl: invitation.bridgeUrl,
125
+ workspaceId,
126
+ deviceId: pendingId,
127
+ identity,
128
+ host: invitation.host,
129
+ onRequest: async () => {
130
+ throw new Error('Pairing is not an execution connection.');
131
+ },
132
+ });
133
+ temporary.start();
134
+ try {
135
+ await temporary.ready();
136
+ const reply = (0, workspace_protocol_1.record)(await temporary.request('join', { secret: invitation.secret, name: os.hostname() }));
137
+ const certificate = reply.certificate;
138
+ if (!(0, workspace_protocol_1.validMembership)(certificate, invitation.host) ||
139
+ certificate.membership.workspaceId !== workspaceId ||
140
+ JSON.stringify(certificate.membership.identity) !== JSON.stringify((0, workspace_protocol_1.publicIdentity)(identity)))
141
+ throw new Error('Host returned invalid membership.');
142
+ const c = {
143
+ id: workspaceId,
144
+ name: String(reply.name),
145
+ role: 'guest',
146
+ bridgeUrl: invitation.bridgeUrl,
147
+ hostDeviceId: temporary.hostId,
148
+ deviceId: certificate.membership.deviceId,
149
+ identity,
150
+ host: invitation.host,
151
+ certificate,
152
+ executor,
153
+ };
154
+ this.store.save(c);
155
+ const peer = this.connect(c);
156
+ await peer.ready();
157
+ await this.checkHost(c);
158
+ return this.list().find((w) => w.id === c.id);
159
+ }
160
+ finally {
161
+ temporary.close();
162
+ }
163
+ }
164
+ devices(id) {
165
+ const c = this.store.get(id);
166
+ return this.store
167
+ .devices(c.id)
168
+ .filter((d) => !d.revoked)
169
+ .map((d) => {
170
+ const m = d.certificate.membership;
171
+ const host = m.deviceId === c.hostDeviceId;
172
+ const p = this.presence.get(`${c.id}:${m.deviceId}`);
173
+ return {
174
+ id: m.deviceId,
175
+ name: m.name,
176
+ host,
177
+ platform: host ? os.platform() : (p?.platform ?? ''),
178
+ architecture: host ? os.arch() : (p?.architecture ?? ''),
179
+ executor: host || p?.executor === true,
180
+ online: host || Boolean(p && Date.now() - p.seen < 35000),
181
+ };
182
+ });
183
+ }
184
+ async request(id, operation, input, requestId = (0, workspace_protocol_1.randomId)()) {
185
+ const c = this.store.get(id);
186
+ if (c.role === 'host')
187
+ return this.dispatch(c, { type: 'request', operation, input, id: requestId }, { id: c.deviceId, identity: c.host, certificate: c.certificate });
188
+ const peer = this.peers.get(c.id);
189
+ if (!peer?.online || this.hostStatus.get(c.id) !== true)
190
+ throw new MarifoldError_1.MarifoldError('WORKSPACE_OFFLINE', 'Workspace host is offline.');
191
+ const read = ['devices', 'run.events', 'artifact.read'].includes(operation) ||
192
+ (operation === 'api' && (0, workspace_protocol_1.record)(input).method === 'GET');
193
+ let result;
194
+ try {
195
+ result = await peer.request(operation, input, c.hostDeviceId, c.host, requestId, read ? 60000 : 120000);
196
+ }
197
+ catch (error) {
198
+ if (!peer.online ||
199
+ this.hostStatus.get(c.id) !== true)
200
+ throw new MarifoldError_1.MarifoldError('WORKSPACE_OFFLINE', 'Workspace host is unavailable.');
201
+ if (read && error instanceof Error && error.message.includes('timed out'))
202
+ throw new MarifoldError_1.MarifoldError('WORKSPACE_TIMEOUT', 'Workspace request timed out while the bridge remained connected.');
203
+ throw error;
204
+ }
205
+ if (operation === 'rename' && typeof (0, workspace_protocol_1.record)(result).name === 'string')
206
+ this.store.rename(c.id, String((0, workspace_protocol_1.record)(result).name));
207
+ return result;
208
+ }
209
+ async execute(id, device, operation, input, requestId = (0, workspace_protocol_1.randomId)()) {
210
+ const c = this.store.get(id);
211
+ if (c.role !== 'host')
212
+ throw new Error('Only the workspace host coordinates execution.');
213
+ const member = this.store.devices(c.id).find((d) => d.certificate.membership.deviceId === device && !d.revoked);
214
+ if (!member)
215
+ throw new Error('Execution device is not a workspace member.');
216
+ const peer = this.peers.get(c.id);
217
+ if (!peer?.online)
218
+ throw new MarifoldError_1.MarifoldError('WORKSPACE_OFFLINE', 'Execution device is unavailable.');
219
+ return peer.request(operation, input, device, member.certificate.membership.identity, requestId, operation === 'executor.execute' ? 120000 : 10000);
220
+ }
221
+ async remove(id) {
222
+ const c = this.store.get(id);
223
+ this.onMembershipRemoved?.(c.id);
224
+ if (c.role === 'host') {
225
+ const peer = this.peers.get(c.id);
226
+ if (peer?.online) {
227
+ for (const d of this.store.devices(c.id))
228
+ if (d.certificate.membership.deviceId !== c.deviceId)
229
+ await peer.revoke(d.certificate.membership.deviceId);
230
+ await peer.revoke(c.deviceId);
231
+ }
232
+ }
233
+ else if (this.peers.get(c.id)?.online) {
234
+ // Leaving locally must remain available even when the host disappears.
235
+ try {
236
+ await this.peers.get(c.id).request('leave', {}, c.hostDeviceId, c.host, (0, workspace_protocol_1.randomId)(), 3000);
237
+ }
238
+ catch {
239
+ /* Host can revoke an offline former device separately. */
240
+ }
241
+ }
242
+ this.peers.get(c.id)?.close();
243
+ this.peers.delete(c.id);
244
+ this.hostStatus.delete(c.id);
245
+ this.store.remove(c.id);
246
+ }
247
+ async setExecutor(id, enabled) {
248
+ const connection = this.store.get(id);
249
+ if (connection.role !== 'guest')
250
+ throw new Error('The workspace host always executes its local tools.');
251
+ this.store.save({ ...connection, executor: enabled });
252
+ await this.checkHost(this.store.get(connection.id));
253
+ }
254
+ connect(c) {
255
+ this.peers.get(c.id)?.close();
256
+ const peer = new BridgePeer_1.BridgePeer({
257
+ bridgeUrl: c.bridgeUrl,
258
+ workspaceId: c.id,
259
+ deviceId: c.deviceId,
260
+ hostDeviceId: c.hostDeviceId,
261
+ identity: c.identity,
262
+ host: c.host,
263
+ certificate: c.certificate,
264
+ accept: (certificate) => c.role !== 'host' ||
265
+ this.store.devices(c.id).some((d) => !d.revoked && d.certificate.signature === certificate.signature),
266
+ onRequest: (request, sender) => this.dispatch(c, request, sender),
267
+ onStatus: (online) => {
268
+ if (!online)
269
+ this.hostStatus.set(c.id, false);
270
+ else if (c.role === 'host') {
271
+ for (const d of this.store.devices(c.id))
272
+ if (d.revoked)
273
+ void this.peers
274
+ .get(c.id)
275
+ ?.revoke(d.certificate.membership.deviceId)
276
+ .catch(() => undefined);
277
+ }
278
+ else if (c.role === 'guest')
279
+ queueMicrotask(() => {
280
+ void this.checkHost(c);
281
+ });
282
+ },
283
+ });
284
+ this.peers.set(c.id, peer);
285
+ peer.start();
286
+ return peer;
287
+ }
288
+ async checkHost(c) {
289
+ try {
290
+ const peer = this.peers.get(c.id);
291
+ if (!peer?.online)
292
+ throw new Error('offline');
293
+ const status = (0, workspace_protocol_1.record)(await peer.request('status', { platform: os.platform(), architecture: os.arch(), executor: this.store.get(c.id).executor }, c.hostDeviceId, c.host, (0, workspace_protocol_1.randomId)(), 10000));
294
+ if (typeof status.name === 'string' && status.name !== c.name)
295
+ this.store.rename(c.id, status.name);
296
+ this.hostStatus.set(c.id, true);
297
+ }
298
+ catch {
299
+ this.hostStatus.set(c.id, false);
300
+ }
301
+ }
302
+ async dispatch(c, request, sender) {
303
+ const context = { workspaceId: c.id, senderDeviceId: sender.id, hostDeviceId: c.hostDeviceId };
304
+ if (c.role === 'guest') {
305
+ if (sender.id !== c.hostDeviceId || !this.store.get(c.id).executor || !request.operation.startsWith('executor.'))
306
+ throw new Error('This device has not enabled this execution capability.');
307
+ if (!this.executorHandler)
308
+ throw new Error('Executor unavailable.');
309
+ if (['executor.lease', 'executor.assess', 'executor.artifact', 'executor.artifacts', 'executor.cancel'].includes(request.operation))
310
+ return this.executorHandler(request.operation, request.input, context);
311
+ return this.store.once(c.id, sender.id, request.id, request, () => this.executorHandler(request.operation, request.input, context));
312
+ }
313
+ if (request.operation === 'status') {
314
+ const info = (0, workspace_protocol_1.record)(request.input);
315
+ this.presence.set(`${c.id}:${sender.id}`, {
316
+ seen: Date.now(),
317
+ platform: String(info.platform ?? ''),
318
+ architecture: String(info.architecture ?? ''),
319
+ executor: info.executor === true,
320
+ });
321
+ return { name: this.store.get(c.id).name, hostDeviceId: c.hostDeviceId };
322
+ }
323
+ if (sender.certificate && ['run.events', 'artifact.read'].includes(request.operation))
324
+ return this.remoteHandler(request.operation, request.input, context);
325
+ if (sender.certificate &&
326
+ request.operation === 'api' &&
327
+ ((0, workspace_protocol_1.record)(request.input).method === 'GET' || (0, workspace_protocol_1.record)(request.input).path === '/v1/terminal/snapshot'))
328
+ return this.remoteHandler(request.operation, request.input, context);
329
+ if (sender.certificate && request.operation === 'devices')
330
+ return { devices: this.devices(c.id) };
331
+ return this.store.once(c.id, sender.id, request.id, request, async () => {
332
+ const input = (0, workspace_protocol_1.record)(request.input);
333
+ if (request.operation === 'join') {
334
+ if (sender.certificate || typeof input.secret !== 'string')
335
+ throw new Error('Invalid pairing request.');
336
+ return {
337
+ name: this.store.get(c.id).name,
338
+ certificate: this.store.enroll(c.id, input.secret, (0, workspace_protocol_1.randomId)(), String(input.name), sender.identity),
339
+ };
340
+ }
341
+ if (!sender.certificate)
342
+ throw new Error('Workspace membership required.');
343
+ if (request.operation === 'invite')
344
+ return { invitation: this.store.invite(c.id) };
345
+ if (request.operation === 'rename') {
346
+ this.store.rename(c.id, String(input.name));
347
+ return { name: this.store.get(c.id).name };
348
+ }
349
+ if (request.operation === 'devices')
350
+ return { devices: this.devices(c.id) };
351
+ if (request.operation === 'revoke' || request.operation === 'leave') {
352
+ const deviceId = request.operation === 'leave' ? sender.id : (0, workspace_protocol_1.identifier)(input.deviceId);
353
+ this.store.revoke(c.id, deviceId);
354
+ this.onMembershipRemoved?.(c.id, deviceId);
355
+ // The host's authoritative membership check takes effect immediately.
356
+ // Allow the departing device's final response to enter the relay first.
357
+ if (deviceId === sender.id)
358
+ setTimeout(() => {
359
+ void this.peers
360
+ .get(c.id)
361
+ ?.revoke(deviceId)
362
+ .catch(() => undefined);
363
+ }, 1000).unref();
364
+ else
365
+ await this.peers.get(c.id)?.revoke(deviceId);
366
+ return { revoked: true };
367
+ }
368
+ if (!this.remoteHandler)
369
+ throw new Error('Workspace operation unavailable.');
370
+ return this.remoteHandler(request.operation, request.input, context);
371
+ }, () => {
372
+ if (request.operation === 'join')
373
+ this.store.validateInvitation(c.id, (0, workspace_protocol_1.record)(request.input).secret);
374
+ });
375
+ }
376
+ }
377
+ exports.WorkspaceManager = WorkspaceManager;
378
+ //# sourceMappingURL=WorkspaceManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkspaceManager.js","sourceRoot":"","sources":["../../src/workspace/WorkspaceManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { type DeviceChildRun } from './DeviceDelegateTool';
2
+ import type { AgentRunner } from '../agent/AgentRunner';
3
+ import type { MarifoldRuntime } from '../runtime/MarifoldRuntime';
4
+ import type { RunStartInput } from '../runs/RunRegistry';
5
+ import type { WorkspaceManager, WorkspaceOperationContext } from './WorkspaceManager';
6
+ export declare class WorkspaceRuns {
7
+ private readonly runtime;
8
+ private readonly manager;
9
+ private delegate?;
10
+ setDelegate(start: (parentRunId: string, input: RunStartInput) => DeviceChildRun): void;
11
+ constructor(runtime: MarifoldRuntime, manager: WorkspaceManager);
12
+ resolve(input: RunStartInput, selection: {
13
+ workspaceId?: string;
14
+ executionDeviceId?: string;
15
+ }, origin?: WorkspaceOperationContext): Promise<RunStartInput>;
16
+ createRunner(input: RunStartInput): AgentRunner;
17
+ }
18
+ //# sourceMappingURL=WorkspaceRuns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkspaceRuns.d.ts","sourceRoot":"","sources":["../../src/workspace/WorkspaceRuns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG/E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AASxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAEtF,qBAAa,aAAa;IAMtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAN1B,OAAO,CAAC,QAAQ,CAAC,CAAgE;IACjF,WAAW,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,KAAK,cAAc,GAAG,IAAI,CAEtF;IACD,YACmB,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,gBAAgB,EACxC;IACE,OAAO,CACX,KAAK,EAAE,aAAa,EACpB,SAAS,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;KAAE,EAC/D,MAAM,CAAC,EAAE,yBAAyB,GACjC,OAAO,CAAC,aAAa,CAAC,CAyBxB;IACD,YAAY,CAAC,KAAK,EAAE,aAAa,GAAG,WAAW,CAiH9C;CACF"}
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WorkspaceRuns = void 0;
4
+ const DeviceDelegateTool_1 = require("./DeviceDelegateTool");
5
+ const workspace_protocol_1 = require("@marifold/workspace-protocol");
6
+ const ToolRegistry_1 = require("../agent/ToolRegistry");
7
+ const WorkspaceExecutor_1 = require("./WorkspaceExecutor");
8
+ class WorkspaceRuns {
9
+ runtime;
10
+ manager;
11
+ delegate;
12
+ setDelegate(start) {
13
+ this.delegate = start;
14
+ }
15
+ constructor(runtime, manager) {
16
+ this.runtime = runtime;
17
+ this.manager = manager;
18
+ }
19
+ async resolve(input, selection, origin) {
20
+ const workspaceId = origin?.workspaceId ?? selection.workspaceId;
21
+ if (!workspaceId) {
22
+ if (selection.executionDeviceId)
23
+ throw new Error('Select a workspace before an execution device.');
24
+ return input;
25
+ }
26
+ const connection = this.manager.store.get(workspaceId);
27
+ if (connection.role !== 'host')
28
+ throw new Error('Run must be submitted to the workspace host.');
29
+ const originId = origin?.senderDeviceId ?? connection.deviceId;
30
+ const devices = this.manager.devices(connection.id);
31
+ const skill = input.lean || /^\s*\$[\w-]+/.test(input.userTurn ?? input.objective);
32
+ const explicit = selection.executionDeviceId;
33
+ const executionDeviceId = explicit === 'host'
34
+ ? connection.hostDeviceId
35
+ : (explicit ??
36
+ (skill
37
+ ? connection.hostDeviceId
38
+ : (devices.find((d) => d.id === originId && d.executor)?.id ?? connection.hostDeviceId)));
39
+ if (skill && executionDeviceId !== connection.hostDeviceId)
40
+ throw new Error('Skills execute on the workspace host in this version.');
41
+ const device = devices.find((d) => d.id === executionDeviceId);
42
+ if (!device || !device.online || !device.executor)
43
+ throw new Error('The selected execution device is unavailable or has disabled execution.');
44
+ return { ...input, execution: { workspaceId: connection.id, originDeviceId: originId, executionDeviceId } };
45
+ }
46
+ createRunner(input) {
47
+ const execution = input.execution;
48
+ if (!execution)
49
+ return this.runtime.createAgentRunner(input.profile);
50
+ const { workspaceId, executionDeviceId } = execution;
51
+ const host = this.manager.store.get(workspaceId);
52
+ const devices = this.manager.devices(workspaceId);
53
+ const contextInstructions = [
54
+ `Device context (metadata): ${JSON.stringify({ workspaceId, originDeviceId: execution.originDeviceId, executionDeviceId, devices })}. All file paths and tools belong to the execution device. Skills and Apps run on the host. Device delegation is limited to this workspace.`,
55
+ ];
56
+ const registry = executionDeviceId === host.hostDeviceId
57
+ ? this.runtime.createDefaultToolRegistry(input.profile)
58
+ : this.runtime.createHostContextTools(input.profile);
59
+ if (!input.parentRunId && !input.lean && input.registryRunId && this.delegate) {
60
+ registry.register(new DeviceDelegateTool_1.DeviceDelegateTool(async (selected, objective) => {
61
+ const matches = this.manager
62
+ .devices(workspaceId)
63
+ .filter((d) => d.id === selected || d.name === selected || (selected === 'host' && d.host));
64
+ if (matches.length !== 1)
65
+ throw new Error('Device name is ambiguous or unknown; use its ID.');
66
+ const child = await this.resolve({
67
+ objective,
68
+ profile: input.profile,
69
+ provider: input.provider,
70
+ model: input.model,
71
+ think: input.think,
72
+ files: input.files,
73
+ images: input.images,
74
+ }, { executionDeviceId: matches[0].id }, { workspaceId, senderDeviceId: execution.originDeviceId, hostDeviceId: host.hostDeviceId });
75
+ return this.delegate(input.registryRunId, child);
76
+ }));
77
+ }
78
+ if (executionDeviceId === host.hostDeviceId)
79
+ return this.runtime.createAgentRunner(input.profile, registry, undefined, { contextInstructions });
80
+ let runId;
81
+ let lease;
82
+ let signal;
83
+ const request = (operation, body, id) => this.manager.execute(workspaceId, executionDeviceId, operation, body, id);
84
+ const stop = () => {
85
+ clearInterval(lease);
86
+ signal?.removeEventListener('abort', cancel);
87
+ };
88
+ const cancel = () => {
89
+ stop();
90
+ void request('executor.cancel', { runId }).catch(() => undefined);
91
+ };
92
+ for (const tool of (0, WorkspaceExecutor_1.executionTools)()) {
93
+ let grant;
94
+ registry.register({
95
+ definition: tool.definition,
96
+ kind: tool.kind,
97
+ summarizeCall: (value) => `[${devices.find((device) => device.id === executionDeviceId)?.name ?? executionDeviceId}] ${tool.summarizeCall(value)}`,
98
+ assessRisk: async (value, context) => {
99
+ signal = context.signal;
100
+ if (signal?.aborted)
101
+ throw new Error('Run cancelled.');
102
+ signal?.removeEventListener('abort', cancel);
103
+ signal?.addEventListener('abort', cancel, { once: true });
104
+ const assessment = (await request('executor.assess', {
105
+ runId,
106
+ tool: tool.definition.name,
107
+ input: value,
108
+ }));
109
+ grant = assessment.grant;
110
+ return assessment;
111
+ },
112
+ execute: async (value, context) => {
113
+ if (context.signal?.aborted)
114
+ throw new Error('Run cancelled.');
115
+ const permission = grant;
116
+ grant = undefined;
117
+ try {
118
+ return (await request('executor.execute', { runId, tool: tool.definition.name, input: value, grant: permission }, (0, workspace_protocol_1.randomId)()));
119
+ }
120
+ catch (error) {
121
+ cancel();
122
+ throw new ToolRegistry_1.UncertainToolOutcomeError(`Execution stopped. The remote call may have completed; inspect the target device before retrying. ${error instanceof Error ? error.message : ''}`);
123
+ }
124
+ },
125
+ });
126
+ }
127
+ return this.runtime.createAgentRunner(input.profile, registry, undefined, {
128
+ contextInstructions,
129
+ deviceInstructions: `This run uses a model on the workspace host and tools on execution device ${executionDeviceId}. The requesting device is ${execution.originDeviceId}. All tool paths, home directory, and operating system belong to the execution device. Do not substitute host paths. Skills and Apps must be run on the host in a separate run.`,
130
+ createWorkspace: async (options) => {
131
+ runId = options.id;
132
+ const workspace = (await request('executor.prepare', {
133
+ runId,
134
+ cwd: input.cwd,
135
+ files: options.files,
136
+ images: options.images,
137
+ }));
138
+ lease = setInterval(() => {
139
+ void request('executor.lease', { runId }).catch(() => undefined);
140
+ }, 10000);
141
+ lease.unref();
142
+ return workspace;
143
+ },
144
+ listArtifacts: async () => {
145
+ stop();
146
+ return (await request('executor.artifacts', { runId }));
147
+ },
148
+ });
149
+ }
150
+ }
151
+ exports.WorkspaceRuns = WorkspaceRuns;
152
+ //# sourceMappingURL=WorkspaceRuns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkspaceRuns.js","sourceRoot":"","sources":["../../src/workspace/WorkspaceRuns.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import type { PrivateIdentity, PublicIdentity, SignedMembership, WorkspaceSummary } from '@marifold/workspace-protocol';
2
+ export interface WorkspaceConnection extends Omit<WorkspaceSummary, 'online'> {
3
+ identity: PrivateIdentity;
4
+ certificate: SignedMembership;
5
+ host: PublicIdentity;
6
+ executor: boolean;
7
+ }
8
+ export declare class WorkspaceStore {
9
+ readonly directory: string;
10
+ private readonly db;
11
+ private closed;
12
+ private readonly lockPath;
13
+ private readonly lockValue;
14
+ private lastPruned;
15
+ constructor(configPath: string);
16
+ private acquireLock;
17
+ private releaseLock;
18
+ close(): void;
19
+ private prune;
20
+ readonly runJournal: {
21
+ load: () => Array<{
22
+ record: import('../runs/RunRegistry').RunRecord;
23
+ events: import('../runs/RunRegistry').SequencedEvent[];
24
+ }>;
25
+ save: (record: import('../runs/RunRegistry').RunRecord, event?: import('../runs/RunRegistry').SequencedEvent) => void;
26
+ };
27
+ list(): WorkspaceConnection[];
28
+ get(idOrName: string): WorkspaceConnection;
29
+ save(connection: WorkspaceConnection): void;
30
+ create(name: string, bridgeUrl: string, deviceName: string): Promise<WorkspaceConnection>;
31
+ invite(id: string): string;
32
+ validateInvitation(workspace: string, secret: unknown): void;
33
+ enroll(id: string, secret: string, deviceId: string, name: string, identity: PublicIdentity): SignedMembership;
34
+ addDevice(certificate: SignedMembership): void;
35
+ devices(workspace: string): Array<{
36
+ certificate: SignedMembership;
37
+ revoked: boolean;
38
+ }>;
39
+ revoke(workspace: string, deviceId: string): void;
40
+ rename(id: string, name: string): void;
41
+ remove(id: string): void;
42
+ defaultId(): string;
43
+ setDefault(id: string): void;
44
+ interruptRequests(): void;
45
+ once<T>(workspace: string, sender: string, id: string, input: unknown, operation: () => Promise<T>, validate?: () => void): Promise<T>;
46
+ private readIdentity;
47
+ private writeIdentity;
48
+ }
49
+ //# sourceMappingURL=WorkspaceStore.d.ts.map