digital-workers 2.0.2 → 2.1.3

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 (69) hide show
  1. package/.turbo/turbo-build.log +4 -5
  2. package/CHANGELOG.md +31 -0
  3. package/LICENSE +21 -0
  4. package/README.md +134 -180
  5. package/dist/actions.d.ts.map +1 -1
  6. package/dist/actions.js +1 -0
  7. package/dist/actions.js.map +1 -1
  8. package/dist/agent-comms.d.ts +438 -0
  9. package/dist/agent-comms.d.ts.map +1 -0
  10. package/dist/agent-comms.js +666 -0
  11. package/dist/agent-comms.js.map +1 -0
  12. package/dist/capability-tiers.d.ts +230 -0
  13. package/dist/capability-tiers.d.ts.map +1 -0
  14. package/dist/capability-tiers.js +388 -0
  15. package/dist/capability-tiers.js.map +1 -0
  16. package/dist/cascade-context.d.ts +523 -0
  17. package/dist/cascade-context.d.ts.map +1 -0
  18. package/dist/cascade-context.js +494 -0
  19. package/dist/cascade-context.js.map +1 -0
  20. package/dist/error-escalation.d.ts +416 -0
  21. package/dist/error-escalation.d.ts.map +1 -0
  22. package/dist/error-escalation.js +656 -0
  23. package/dist/error-escalation.js.map +1 -0
  24. package/dist/index.d.ts +10 -0
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +34 -0
  27. package/dist/index.js.map +1 -1
  28. package/dist/load-balancing.d.ts +395 -0
  29. package/dist/load-balancing.d.ts.map +1 -0
  30. package/dist/load-balancing.js +905 -0
  31. package/dist/load-balancing.js.map +1 -0
  32. package/dist/types.d.ts +8 -0
  33. package/dist/types.d.ts.map +1 -1
  34. package/dist/types.js +1 -0
  35. package/dist/types.js.map +1 -1
  36. package/package.json +14 -14
  37. package/src/actions.js +436 -0
  38. package/src/actions.ts +9 -8
  39. package/src/agent-comms.ts +1238 -0
  40. package/src/approve.js +234 -0
  41. package/src/ask.js +226 -0
  42. package/src/capability-tiers.ts +545 -0
  43. package/src/cascade-context.ts +648 -0
  44. package/src/decide.js +244 -0
  45. package/src/do.js +227 -0
  46. package/src/error-escalation.ts +1135 -0
  47. package/src/generate.js +298 -0
  48. package/src/goals.js +205 -0
  49. package/src/index.js +68 -0
  50. package/src/index.ts +223 -0
  51. package/src/is.js +317 -0
  52. package/src/kpis.js +270 -0
  53. package/src/load-balancing.ts +1381 -0
  54. package/src/notify.js +219 -0
  55. package/src/role.js +110 -0
  56. package/src/team.js +130 -0
  57. package/src/transports.js +357 -0
  58. package/src/types.js +71 -0
  59. package/src/types.ts +8 -0
  60. package/test/actions.test.js +401 -0
  61. package/test/agent-comms.test.ts +1397 -0
  62. package/test/capability-tiers.test.ts +631 -0
  63. package/test/cascade-context.test.ts +692 -0
  64. package/test/error-escalation.test.ts +1205 -0
  65. package/test/load-balancing-thread-safety.test.ts +464 -0
  66. package/test/load-balancing.test.ts +1145 -0
  67. package/test/standalone.test.js +250 -0
  68. package/test/types.test.js +371 -0
  69. package/test/types.test.ts +35 -0
@@ -0,0 +1,666 @@
1
+ /**
2
+ * Agent-to-Agent Communication Layer
3
+ *
4
+ * Provides structured messaging, coordination patterns, and handoff protocols
5
+ * for communication between agents in the digital-workers system.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ // =============================================================================
10
+ // AgentMessageBus Implementation
11
+ // =============================================================================
12
+ /**
13
+ * Agent message bus for routing messages between agents
14
+ */
15
+ export class AgentMessageBus {
16
+ subscriptions = new Map();
17
+ pendingAcks = new Map();
18
+ messageStatus = new Map();
19
+ handoffs = new Map();
20
+ storedMessages = [];
21
+ messageQueue = new Map();
22
+ processingAgent = new Set();
23
+ disposed = false;
24
+ options;
25
+ constructor(options = {}) {
26
+ this.options = {
27
+ persistence: options.persistence ?? false,
28
+ defaultTtl: options.defaultTtl ?? 30000,
29
+ maxQueueSize: options.maxQueueSize ?? 1000,
30
+ };
31
+ }
32
+ /**
33
+ * Send a message to an agent
34
+ */
35
+ async send(message) {
36
+ if (this.disposed) {
37
+ return this.createFailedEnvelope(message, 'Message bus disposed');
38
+ }
39
+ const envelope = {
40
+ message,
41
+ deliveryAttempts: 1,
42
+ firstAttemptAt: new Date(),
43
+ lastAttemptAt: new Date(),
44
+ status: 'pending',
45
+ };
46
+ // Store message if persistence is enabled
47
+ if (this.options.persistence) {
48
+ this.storedMessages.push({ envelope: envelope, storedAt: new Date() });
49
+ }
50
+ // Get subscriptions for recipient
51
+ const subs = this.subscriptions.get(message.recipient);
52
+ if (!subs || subs.length === 0) {
53
+ envelope.status = 'failed';
54
+ envelope.error = `Agent '${message.recipient}' not found`;
55
+ this.messageStatus.set(message.id, 'failed');
56
+ return envelope;
57
+ }
58
+ // Track pending acknowledgment
59
+ if (message.type === 'request') {
60
+ const senderAcks = this.pendingAcks.get(message.sender) ?? new Set();
61
+ senderAcks.add(message.id);
62
+ this.pendingAcks.set(message.sender, senderAcks);
63
+ }
64
+ // Setup TTL expiration
65
+ if (message.ttl) {
66
+ setTimeout(() => {
67
+ if (this.messageStatus.get(message.id) !== 'acknowledged') {
68
+ this.messageStatus.set(message.id, 'expired');
69
+ }
70
+ }, message.ttl);
71
+ }
72
+ // Deliver to matching subscribers
73
+ try {
74
+ await this.deliverMessage(message, subs);
75
+ envelope.status = 'delivered';
76
+ this.messageStatus.set(message.id, 'delivered');
77
+ }
78
+ catch (error) {
79
+ envelope.status = 'failed';
80
+ envelope.error = error instanceof Error ? error.message : String(error);
81
+ this.messageStatus.set(message.id, 'failed');
82
+ }
83
+ return envelope;
84
+ }
85
+ /**
86
+ * Deliver message to subscribers with queue handling
87
+ */
88
+ async deliverMessage(message, subs) {
89
+ const matchingSubs = subs.filter((sub) => this.matchesFilter(message, sub.options));
90
+ if (matchingSubs.length === 0) {
91
+ return;
92
+ }
93
+ // Queue messages if agent is busy
94
+ if (this.processingAgent.has(message.recipient)) {
95
+ const queue = this.messageQueue.get(message.recipient) ?? [];
96
+ queue.push(message);
97
+ this.messageQueue.set(message.recipient, queue);
98
+ return;
99
+ }
100
+ this.processingAgent.add(message.recipient);
101
+ try {
102
+ await Promise.all(matchingSubs.map((sub) => sub.handler(message)));
103
+ }
104
+ finally {
105
+ this.processingAgent.delete(message.recipient);
106
+ await this.processQueue(message.recipient, subs);
107
+ }
108
+ }
109
+ /**
110
+ * Process queued messages
111
+ */
112
+ async processQueue(agentId, subs) {
113
+ const queue = this.messageQueue.get(agentId);
114
+ if (!queue || queue.length === 0)
115
+ return;
116
+ const nextMessage = queue.shift();
117
+ this.messageQueue.set(agentId, queue);
118
+ await this.deliverMessage(nextMessage, subs);
119
+ }
120
+ /**
121
+ * Check if message matches subscription filter
122
+ */
123
+ matchesFilter(message, options) {
124
+ if (!options)
125
+ return true;
126
+ if (options.types && !options.types.includes(message.type))
127
+ return false;
128
+ if (options.from && message.sender !== options.from)
129
+ return false;
130
+ return true;
131
+ }
132
+ /**
133
+ * Subscribe to messages for an agent
134
+ */
135
+ subscribe(agentId, handler, options) {
136
+ const subs = this.subscriptions.get(agentId) ?? [];
137
+ const subscription = { handler, options };
138
+ subs.push(subscription);
139
+ this.subscriptions.set(agentId, subs);
140
+ return () => {
141
+ const currentSubs = this.subscriptions.get(agentId) ?? [];
142
+ const index = currentSubs.indexOf(subscription);
143
+ if (index !== -1) {
144
+ currentSubs.splice(index, 1);
145
+ this.subscriptions.set(agentId, currentSubs);
146
+ }
147
+ };
148
+ }
149
+ /**
150
+ * Acknowledge a message
151
+ */
152
+ async acknowledge(messageId, agentId, status) {
153
+ this.messageStatus.set(messageId, 'acknowledged');
154
+ // Remove from pending acks
155
+ for (const entry of Array.from(this.pendingAcks.entries())) {
156
+ const [sender, acks] = entry;
157
+ if (acks.has(messageId)) {
158
+ acks.delete(messageId);
159
+ this.pendingAcks.set(sender, acks);
160
+ break;
161
+ }
162
+ }
163
+ }
164
+ /**
165
+ * Get pending acknowledgments for a sender
166
+ */
167
+ getPendingAcks(senderId) {
168
+ const acks = this.pendingAcks.get(senderId);
169
+ return acks ? Array.from(acks) : [];
170
+ }
171
+ /**
172
+ * Get message delivery status
173
+ */
174
+ getMessageStatus(messageId) {
175
+ return this.messageStatus.get(messageId);
176
+ }
177
+ /**
178
+ * Get handoff status
179
+ */
180
+ getHandoffStatus(handoffId) {
181
+ return this.handoffs.get(handoffId)?.status;
182
+ }
183
+ /**
184
+ * Get handoff history (previous attempts)
185
+ */
186
+ getHandoffHistory(handoffId) {
187
+ return this.handoffs.get(handoffId)?.previousAttempts ?? [];
188
+ }
189
+ /**
190
+ * Register a handoff
191
+ */
192
+ registerHandoff(request, originalMessage) {
193
+ const state = {
194
+ request,
195
+ status: 'pending',
196
+ previousAttempts: request.previousAttempt ? [request.previousAttempt] : [],
197
+ originalMessage,
198
+ };
199
+ // Setup timeout if specified
200
+ if (request.timeout) {
201
+ state.timeoutId = setTimeout(() => {
202
+ const currentState = this.handoffs.get(request.id);
203
+ if (currentState && currentState.status === 'pending') {
204
+ currentState.status = 'expired';
205
+ this.handoffs.set(request.id, currentState);
206
+ // Notify initiator of timeout
207
+ if (request.onTimeout) {
208
+ const timeoutMsg = {
209
+ id: `timeout_${request.id}`,
210
+ type: 'handoff',
211
+ sender: 'system',
212
+ recipient: request.fromAgent,
213
+ payload: { action: 'timeout', handoffId: request.id },
214
+ timestamp: new Date(),
215
+ };
216
+ request.onTimeout(timeoutMsg);
217
+ }
218
+ }
219
+ }, request.timeout);
220
+ }
221
+ this.handoffs.set(request.id, state);
222
+ }
223
+ /**
224
+ * Get handoff request info
225
+ */
226
+ getHandoffRequest(handoffId) {
227
+ return this.handoffs.get(handoffId)?.request;
228
+ }
229
+ /**
230
+ * Update handoff status
231
+ */
232
+ updateHandoffStatus(handoffId, status) {
233
+ const state = this.handoffs.get(handoffId);
234
+ if (state) {
235
+ // Clear timeout if pending timeout exists
236
+ if (state.timeoutId) {
237
+ clearTimeout(state.timeoutId);
238
+ }
239
+ state.status = status;
240
+ this.handoffs.set(handoffId, state);
241
+ }
242
+ }
243
+ /**
244
+ * Get stored messages (for persistence)
245
+ */
246
+ getStoredMessages() {
247
+ return this.storedMessages.map((s) => s.envelope);
248
+ }
249
+ /**
250
+ * Get message history for an agent
251
+ */
252
+ getMessageHistory(agentId, options) {
253
+ let messages = this.storedMessages
254
+ .filter((s) => s.envelope.message.recipient === agentId ||
255
+ s.envelope.message.sender === agentId)
256
+ .map((s) => s.envelope);
257
+ if (options?.from) {
258
+ messages = messages.filter((m) => m.message.timestamp >= options.from);
259
+ }
260
+ if (options?.to) {
261
+ messages = messages.filter((m) => m.message.timestamp <= options.to);
262
+ }
263
+ if (options?.limit) {
264
+ messages = messages.slice(-options.limit);
265
+ }
266
+ return messages;
267
+ }
268
+ /**
269
+ * Clear old messages
270
+ */
271
+ clearMessages(options) {
272
+ if (options?.olderThan) {
273
+ this.storedMessages = this.storedMessages.filter((s) => s.storedAt >= options.olderThan);
274
+ }
275
+ else {
276
+ this.storedMessages = [];
277
+ }
278
+ }
279
+ /**
280
+ * Dispose the message bus
281
+ */
282
+ dispose() {
283
+ this.disposed = true;
284
+ this.subscriptions.clear();
285
+ this.pendingAcks.clear();
286
+ this.messageStatus.clear();
287
+ this.messageQueue.clear();
288
+ this.processingAgent.clear();
289
+ // Clear all handoff timeouts
290
+ for (const state of Array.from(this.handoffs.values())) {
291
+ if (state.timeoutId) {
292
+ clearTimeout(state.timeoutId);
293
+ }
294
+ }
295
+ this.handoffs.clear();
296
+ }
297
+ /**
298
+ * Create a failed envelope
299
+ */
300
+ createFailedEnvelope(message, error) {
301
+ return {
302
+ message,
303
+ deliveryAttempts: 0,
304
+ firstAttemptAt: new Date(),
305
+ lastAttemptAt: new Date(),
306
+ status: 'failed',
307
+ error,
308
+ };
309
+ }
310
+ }
311
+ // =============================================================================
312
+ // Factory Function
313
+ // =============================================================================
314
+ /**
315
+ * Create a new message bus instance
316
+ */
317
+ export function createMessageBus(options) {
318
+ return new AgentMessageBus(options);
319
+ }
320
+ // =============================================================================
321
+ // Helper Functions
322
+ // =============================================================================
323
+ /**
324
+ * Generate a unique message ID
325
+ */
326
+ function generateMessageId() {
327
+ return `msg_${Date.now()}_${Math.random().toString(36).substring(2, 11)}`;
328
+ }
329
+ /**
330
+ * Generate a unique handoff ID
331
+ */
332
+ function generateHandoffId() {
333
+ return `handoff_${Date.now()}_${Math.random().toString(36).substring(2, 11)}`;
334
+ }
335
+ /**
336
+ * Generate a unique correlation ID
337
+ */
338
+ function generateCorrelationId() {
339
+ return `corr_${Date.now()}_${Math.random().toString(36).substring(2, 11)}`;
340
+ }
341
+ /**
342
+ * Resolve agent ID from Worker, WorkerRef, or string
343
+ */
344
+ function resolveAgentId(agent) {
345
+ if (typeof agent === 'string')
346
+ return agent;
347
+ return agent.id;
348
+ }
349
+ /**
350
+ * Send a message to a specific agent
351
+ */
352
+ export async function sendToAgent(bus, sender, recipient, payload, options) {
353
+ const message = {
354
+ id: generateMessageId(),
355
+ type: 'notification',
356
+ sender: resolveAgentId(sender),
357
+ recipient: resolveAgentId(recipient),
358
+ payload,
359
+ timestamp: new Date(),
360
+ priority: options?.priority,
361
+ ttl: options?.ttl,
362
+ correlationId: options?.correlationId,
363
+ metadata: options?.metadata,
364
+ };
365
+ return bus.send(message);
366
+ }
367
+ /**
368
+ * Broadcast a message to multiple agents
369
+ */
370
+ export async function broadcastToGroup(bus, sender, recipients, payload, options) {
371
+ const correlationId = options?.correlationId ?? generateCorrelationId();
372
+ const results = await Promise.all(recipients.map((recipient) => sendToAgent(bus, sender, recipient, payload, {
373
+ ...options,
374
+ correlationId,
375
+ })));
376
+ return results;
377
+ }
378
+ /**
379
+ * Send a request to an agent and await response
380
+ */
381
+ export async function requestFromAgent(bus, sender, recipient, payload, options) {
382
+ const senderId = resolveAgentId(sender);
383
+ const recipientId = resolveAgentId(recipient);
384
+ const messageId = generateMessageId();
385
+ const timeout = options?.timeout ?? 30000;
386
+ return new Promise((resolve, reject) => {
387
+ let timeoutId;
388
+ let unsubscribe;
389
+ // Setup response handler
390
+ unsubscribe = bus.subscribe(senderId, (response) => {
391
+ if (response.correlationId === messageId) {
392
+ clearTimeout(timeoutId);
393
+ unsubscribe?.();
394
+ if (response.type === 'error') {
395
+ const errorPayload = response.payload;
396
+ reject(new Error(errorPayload.error ?? 'Request failed'));
397
+ }
398
+ else {
399
+ resolve(response);
400
+ }
401
+ }
402
+ });
403
+ // Setup timeout
404
+ timeoutId = setTimeout(() => {
405
+ unsubscribe?.();
406
+ reject(new Error('Request timeout'));
407
+ }, timeout);
408
+ // Send request
409
+ const message = {
410
+ id: messageId,
411
+ type: 'request',
412
+ sender: senderId,
413
+ recipient: recipientId,
414
+ payload,
415
+ timestamp: new Date(),
416
+ correlationId: messageId,
417
+ replyTo: senderId,
418
+ priority: options?.priority,
419
+ ttl: options?.ttl,
420
+ metadata: options?.metadata,
421
+ };
422
+ bus.send(message).then((envelope) => {
423
+ // Fail fast if delivery failed (recipient not found, etc.)
424
+ if (envelope.status === 'failed') {
425
+ clearTimeout(timeoutId);
426
+ unsubscribe?.();
427
+ reject(new Error(envelope.error ?? 'Message delivery failed'));
428
+ }
429
+ }).catch((error) => {
430
+ clearTimeout(timeoutId);
431
+ unsubscribe?.();
432
+ reject(error);
433
+ });
434
+ });
435
+ }
436
+ /**
437
+ * Register a message handler for an agent
438
+ */
439
+ export function onMessage(bus, agentId, handler, options) {
440
+ return bus.subscribe(agentId, handler, {
441
+ from: options?.from,
442
+ types: options?.types,
443
+ });
444
+ }
445
+ /**
446
+ * Send an acknowledgment for a received message
447
+ */
448
+ export async function acknowledge(bus, message, status, result) {
449
+ // Send ack message to original sender
450
+ const ackMessage = {
451
+ id: generateMessageId(),
452
+ type: 'ack',
453
+ sender: message.recipient,
454
+ recipient: message.sender,
455
+ payload: {
456
+ messageId: message.id,
457
+ status,
458
+ timestamp: new Date(),
459
+ agentId: message.recipient,
460
+ result,
461
+ },
462
+ timestamp: new Date(),
463
+ correlationId: message.id,
464
+ };
465
+ await bus.send(ackMessage);
466
+ await bus.acknowledge(message.id, message.recipient, status);
467
+ }
468
+ /**
469
+ * Execute request-response pattern
470
+ */
471
+ export async function requestResponse(bus, options) {
472
+ return requestFromAgent(bus, options.from, options.to, options.payload, {
473
+ timeout: options.timeout,
474
+ priority: options.priority,
475
+ });
476
+ }
477
+ /**
478
+ * Execute fan-out pattern - distribute work to multiple agents
479
+ */
480
+ export async function fanOut(bus, options) {
481
+ const correlationId = generateCorrelationId();
482
+ const timeout = options.timeout ?? 30000;
483
+ const fromId = resolveAgentId(options.from);
484
+ const results = await Promise.all(options.to.map(async (agent) => {
485
+ const agentId = resolveAgentId(agent);
486
+ try {
487
+ const response = await requestFromAgent(bus, fromId, agentId, options.payload, { timeout, correlationId });
488
+ return {
489
+ agentId,
490
+ success: true,
491
+ payload: response.payload,
492
+ };
493
+ }
494
+ catch (error) {
495
+ if (!options.continueOnError) {
496
+ throw error;
497
+ }
498
+ return {
499
+ agentId,
500
+ success: false,
501
+ error: error instanceof Error ? error.message : String(error),
502
+ };
503
+ }
504
+ }));
505
+ return results;
506
+ }
507
+ /**
508
+ * Execute fan-in pattern - collect responses from multiple agents
509
+ */
510
+ export async function fanIn(bus, options) {
511
+ const results = await Promise.all(options.sources.map((source) => {
512
+ const sourceId = resolveAgentId(source);
513
+ return options.onSourceMessage(sourceId);
514
+ }));
515
+ return results;
516
+ }
517
+ /**
518
+ * Execute pipeline pattern - chain agents in sequence
519
+ */
520
+ export async function pipeline(bus, options) {
521
+ const initiatorId = resolveAgentId(options.initiator);
522
+ let currentPayload = options.input;
523
+ let lastResponse;
524
+ for (const stage of options.stages) {
525
+ const stageId = resolveAgentId(stage);
526
+ lastResponse = await requestFromAgent(bus, initiatorId, stageId, currentPayload, { timeout: options.stageTimeout });
527
+ currentPayload = lastResponse.payload;
528
+ }
529
+ return lastResponse;
530
+ }
531
+ /**
532
+ * Initiate a handoff to another agent
533
+ */
534
+ export async function initiateHandoff(bus, options) {
535
+ const handoffId = generateHandoffId();
536
+ const fromAgentId = resolveAgentId(options.fromAgent);
537
+ const toAgentId = resolveAgentId(options.toAgent);
538
+ const request = {
539
+ id: handoffId,
540
+ fromAgent: fromAgentId,
541
+ toAgent: toAgentId,
542
+ context: options.context,
543
+ reason: options.reason,
544
+ timestamp: new Date(),
545
+ timeout: options.timeout,
546
+ previousAttempt: options.previousAttempt,
547
+ onTimeout: options.onTimeout,
548
+ };
549
+ // Register handoff in bus
550
+ bus.registerHandoff(request);
551
+ // Send handoff request message
552
+ const message = {
553
+ id: generateMessageId(),
554
+ type: 'handoff',
555
+ sender: fromAgentId,
556
+ recipient: toAgentId,
557
+ payload: {
558
+ action: 'request',
559
+ handoffId,
560
+ context: options.context,
561
+ reason: options.reason,
562
+ },
563
+ timestamp: new Date(),
564
+ correlationId: handoffId,
565
+ };
566
+ await bus.send(message);
567
+ return { handoffId, status: 'pending' };
568
+ }
569
+ /**
570
+ * Accept a pending handoff
571
+ */
572
+ export async function acceptHandoff(bus, handoffId, agentId) {
573
+ const status = bus.getHandoffStatus(handoffId);
574
+ if (!status) {
575
+ throw new Error('Handoff not found');
576
+ }
577
+ if (status !== 'pending') {
578
+ throw new Error(`Cannot accept handoff in '${status}' state`);
579
+ }
580
+ bus.updateHandoffStatus(handoffId, 'accepted');
581
+ // Get the handoff request to find the initiating agent
582
+ const request = bus.getHandoffRequest(handoffId);
583
+ if (request) {
584
+ const acceptMessage = {
585
+ id: generateMessageId(),
586
+ type: 'handoff',
587
+ sender: agentId,
588
+ recipient: request.fromAgent,
589
+ payload: {
590
+ action: 'accepted',
591
+ handoffId,
592
+ },
593
+ timestamp: new Date(),
594
+ correlationId: handoffId,
595
+ };
596
+ await bus.send(acceptMessage);
597
+ }
598
+ return { handoffId, status: 'accepted' };
599
+ }
600
+ /**
601
+ * Reject a pending handoff
602
+ */
603
+ export async function rejectHandoff(bus, handoffId, agentId, options) {
604
+ const status = bus.getHandoffStatus(handoffId);
605
+ if (!status) {
606
+ throw new Error('Handoff not found');
607
+ }
608
+ bus.updateHandoffStatus(handoffId, 'rejected');
609
+ // Get the handoff request to find the initiating agent
610
+ const request = bus.getHandoffRequest(handoffId);
611
+ if (request) {
612
+ const rejectMessage = {
613
+ id: generateMessageId(),
614
+ type: 'handoff',
615
+ sender: agentId,
616
+ recipient: request.fromAgent,
617
+ payload: {
618
+ action: 'rejected',
619
+ handoffId,
620
+ reason: options?.reason,
621
+ },
622
+ timestamp: new Date(),
623
+ correlationId: handoffId,
624
+ };
625
+ await bus.send(rejectMessage);
626
+ }
627
+ return { handoffId, status: 'rejected', reason: options?.reason };
628
+ }
629
+ /**
630
+ * Complete a handoff (mark work as done)
631
+ */
632
+ export async function completeHandoff(bus, handoffId, agentId, options) {
633
+ const status = bus.getHandoffStatus(handoffId);
634
+ if (!status) {
635
+ throw new Error('Handoff not found');
636
+ }
637
+ if (status !== 'accepted') {
638
+ throw new Error('Handoff not accepted');
639
+ }
640
+ bus.updateHandoffStatus(handoffId, 'completed');
641
+ // Get the handoff request to find the initiating agent
642
+ const request = bus.getHandoffRequest(handoffId);
643
+ if (request) {
644
+ const completeMessage = {
645
+ id: generateMessageId(),
646
+ type: 'handoff',
647
+ sender: agentId,
648
+ recipient: request.fromAgent,
649
+ payload: {
650
+ action: 'completed',
651
+ handoffId,
652
+ result: options?.result,
653
+ },
654
+ timestamp: new Date(),
655
+ correlationId: handoffId,
656
+ };
657
+ await bus.send(completeMessage);
658
+ }
659
+ return {
660
+ handoffId,
661
+ status: 'completed',
662
+ result: options?.result,
663
+ completedAt: new Date(),
664
+ };
665
+ }
666
+ //# sourceMappingURL=agent-comms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-comms.js","sourceRoot":"","sources":["../src/agent-comms.ts"],"names":[],"mappings":"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"}