@claude-flow/hooks 3.0.0-alpha.1

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 (72) hide show
  1. package/README.md +440 -0
  2. package/bin/hooks-daemon.js +199 -0
  3. package/bin/statusline.js +77 -0
  4. package/dist/bridge/official-hooks-bridge.d.ts +99 -0
  5. package/dist/bridge/official-hooks-bridge.d.ts.map +1 -0
  6. package/dist/bridge/official-hooks-bridge.js +280 -0
  7. package/dist/bridge/official-hooks-bridge.js.map +1 -0
  8. package/dist/cli/guidance-cli.d.ts +17 -0
  9. package/dist/cli/guidance-cli.d.ts.map +1 -0
  10. package/dist/cli/guidance-cli.js +486 -0
  11. package/dist/cli/guidance-cli.js.map +1 -0
  12. package/dist/daemons/index.d.ts +204 -0
  13. package/dist/daemons/index.d.ts.map +1 -0
  14. package/dist/daemons/index.js +443 -0
  15. package/dist/daemons/index.js.map +1 -0
  16. package/dist/executor/index.d.ts +80 -0
  17. package/dist/executor/index.d.ts.map +1 -0
  18. package/dist/executor/index.js +273 -0
  19. package/dist/executor/index.js.map +1 -0
  20. package/dist/index.d.ts +51 -0
  21. package/dist/index.d.ts.map +1 -0
  22. package/dist/index.js +85 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/llm/index.d.ts +11 -0
  25. package/dist/llm/index.d.ts.map +1 -0
  26. package/dist/llm/index.js +11 -0
  27. package/dist/llm/index.js.map +1 -0
  28. package/dist/llm/llm-hooks.d.ts +93 -0
  29. package/dist/llm/llm-hooks.d.ts.map +1 -0
  30. package/dist/llm/llm-hooks.js +382 -0
  31. package/dist/llm/llm-hooks.js.map +1 -0
  32. package/dist/mcp/index.d.ts +61 -0
  33. package/dist/mcp/index.d.ts.map +1 -0
  34. package/dist/mcp/index.js +501 -0
  35. package/dist/mcp/index.js.map +1 -0
  36. package/dist/reasoningbank/guidance-provider.d.ts +78 -0
  37. package/dist/reasoningbank/guidance-provider.d.ts.map +1 -0
  38. package/dist/reasoningbank/guidance-provider.js +350 -0
  39. package/dist/reasoningbank/guidance-provider.js.map +1 -0
  40. package/dist/reasoningbank/index.d.ts +212 -0
  41. package/dist/reasoningbank/index.d.ts.map +1 -0
  42. package/dist/reasoningbank/index.js +785 -0
  43. package/dist/reasoningbank/index.js.map +1 -0
  44. package/dist/registry/index.d.ts +85 -0
  45. package/dist/registry/index.d.ts.map +1 -0
  46. package/dist/registry/index.js +212 -0
  47. package/dist/registry/index.js.map +1 -0
  48. package/dist/statusline/index.d.ts +128 -0
  49. package/dist/statusline/index.d.ts.map +1 -0
  50. package/dist/statusline/index.js +493 -0
  51. package/dist/statusline/index.js.map +1 -0
  52. package/dist/swarm/index.d.ts +271 -0
  53. package/dist/swarm/index.d.ts.map +1 -0
  54. package/dist/swarm/index.js +638 -0
  55. package/dist/swarm/index.js.map +1 -0
  56. package/dist/types.d.ts +525 -0
  57. package/dist/types.d.ts.map +1 -0
  58. package/dist/types.js +56 -0
  59. package/dist/types.js.map +1 -0
  60. package/dist/workers/index.d.ts +232 -0
  61. package/dist/workers/index.d.ts.map +1 -0
  62. package/dist/workers/index.js +1521 -0
  63. package/dist/workers/index.js.map +1 -0
  64. package/dist/workers/mcp-tools.d.ts +37 -0
  65. package/dist/workers/mcp-tools.d.ts.map +1 -0
  66. package/dist/workers/mcp-tools.js +414 -0
  67. package/dist/workers/mcp-tools.js.map +1 -0
  68. package/dist/workers/session-hook.d.ts +42 -0
  69. package/dist/workers/session-hook.d.ts.map +1 -0
  70. package/dist/workers/session-hook.js +172 -0
  71. package/dist/workers/session-hook.js.map +1 -0
  72. package/package.json +101 -0
@@ -0,0 +1,638 @@
1
+ /**
2
+ * V3 Swarm Communication Hooks
3
+ *
4
+ * Enables agent-to-agent communication, pattern broadcasting,
5
+ * consensus building, and task handoff coordination.
6
+ *
7
+ * @module @claude-flow/hooks/swarm
8
+ */
9
+ import { EventEmitter } from 'node:events';
10
+ import { reasoningBank } from '../reasoningbank/index.js';
11
+ const DEFAULT_CONFIG = {
12
+ agentId: `agent_${Date.now()}_${Math.random().toString(36).slice(2, 6)}`,
13
+ agentName: 'anonymous',
14
+ messageRetention: 3600000, // 1 hour
15
+ consensusTimeout: 30000, // 30 seconds
16
+ autoAcknowledge: true,
17
+ autoBroadcastPatterns: true,
18
+ patternBroadcastThreshold: 0.7,
19
+ };
20
+ // ============================================================================
21
+ // SwarmCommunication Class
22
+ // ============================================================================
23
+ /**
24
+ * Swarm Communication Hub
25
+ *
26
+ * Manages agent-to-agent communication within the swarm.
27
+ */
28
+ export class SwarmCommunication extends EventEmitter {
29
+ config;
30
+ messages = new Map();
31
+ broadcasts = new Map();
32
+ consensusRequests = new Map();
33
+ handoffs = new Map();
34
+ agents = new Map();
35
+ initialized = false;
36
+ cleanupTimer;
37
+ // Metrics
38
+ metrics = {
39
+ messagesSent: 0,
40
+ messagesReceived: 0,
41
+ patternsBroadcast: 0,
42
+ consensusInitiated: 0,
43
+ consensusResolved: 0,
44
+ handoffsInitiated: 0,
45
+ handoffsCompleted: 0,
46
+ };
47
+ constructor(config = {}) {
48
+ super();
49
+ this.config = { ...DEFAULT_CONFIG, ...config };
50
+ }
51
+ /**
52
+ * Initialize swarm communication
53
+ */
54
+ async initialize() {
55
+ if (this.initialized)
56
+ return;
57
+ // Register self in agent registry
58
+ this.registerAgent({
59
+ id: this.config.agentId,
60
+ name: this.config.agentName,
61
+ status: 'idle',
62
+ lastSeen: Date.now(),
63
+ capabilities: [],
64
+ patternsShared: 0,
65
+ handoffsReceived: 0,
66
+ handoffsCompleted: 0,
67
+ });
68
+ // Start cleanup interval (store reference to clear on shutdown)
69
+ this.cleanupTimer = setInterval(() => this.cleanup(), 60000);
70
+ // Listen for pattern storage to auto-broadcast
71
+ if (this.config.autoBroadcastPatterns) {
72
+ reasoningBank.on('pattern:stored', async (data) => {
73
+ const patterns = await reasoningBank.searchPatterns(data.id, 1);
74
+ if (patterns.length > 0 && patterns[0].pattern.quality >= this.config.patternBroadcastThreshold) {
75
+ await this.broadcastPattern(patterns[0].pattern);
76
+ }
77
+ });
78
+ }
79
+ this.initialized = true;
80
+ this.emit('initialized', { agentId: this.config.agentId });
81
+ }
82
+ /**
83
+ * Shutdown swarm communication and cleanup resources
84
+ */
85
+ async shutdown() {
86
+ if (!this.initialized)
87
+ return;
88
+ // Clear cleanup timer to prevent memory leaks
89
+ if (this.cleanupTimer) {
90
+ clearInterval(this.cleanupTimer);
91
+ this.cleanupTimer = undefined;
92
+ }
93
+ // Clear all maps
94
+ this.messages.clear();
95
+ this.broadcasts.clear();
96
+ this.consensusRequests.clear();
97
+ this.handoffs.clear();
98
+ this.agents.clear();
99
+ this.initialized = false;
100
+ this.emit('shutdown', { agentId: this.config.agentId });
101
+ }
102
+ // ============================================================================
103
+ // Agent-to-Agent Messaging
104
+ // ============================================================================
105
+ /**
106
+ * Send a message to another agent
107
+ */
108
+ async sendMessage(to, content, options = {}) {
109
+ await this.ensureInitialized();
110
+ const message = {
111
+ id: `msg_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`,
112
+ from: this.config.agentId,
113
+ to,
114
+ type: options.type || 'context',
115
+ content,
116
+ metadata: options.metadata || {},
117
+ timestamp: Date.now(),
118
+ ttl: options.ttl,
119
+ priority: options.priority || 'normal',
120
+ };
121
+ this.messages.set(message.id, message);
122
+ this.metrics.messagesSent++;
123
+ this.emit('message:sent', message);
124
+ // If target agent exists, simulate delivery
125
+ if (to === '*' || this.agents.has(to)) {
126
+ this.emit('message:delivered', message);
127
+ }
128
+ return message;
129
+ }
130
+ /**
131
+ * Get messages for this agent
132
+ */
133
+ getMessages(options = {}) {
134
+ const now = Date.now();
135
+ let messages = Array.from(this.messages.values())
136
+ .filter(m => (m.to === this.config.agentId || m.to === '*') &&
137
+ (!m.ttl || m.timestamp + m.ttl > now));
138
+ if (options.from) {
139
+ messages = messages.filter(m => m.from === options.from);
140
+ }
141
+ if (options.type) {
142
+ messages = messages.filter(m => m.type === options.type);
143
+ }
144
+ if (options.since !== undefined) {
145
+ const sinceTime = options.since;
146
+ messages = messages.filter(m => m.timestamp > sinceTime);
147
+ }
148
+ messages.sort((a, b) => {
149
+ const priorityOrder = { critical: 0, high: 1, normal: 2, low: 3 };
150
+ const pDiff = priorityOrder[a.priority] - priorityOrder[b.priority];
151
+ return pDiff !== 0 ? pDiff : b.timestamp - a.timestamp;
152
+ });
153
+ if (options.limit) {
154
+ messages = messages.slice(0, options.limit);
155
+ }
156
+ this.metrics.messagesReceived += messages.length;
157
+ return messages;
158
+ }
159
+ /**
160
+ * Broadcast context to all agents
161
+ */
162
+ async broadcastContext(content, metadata = {}) {
163
+ return this.sendMessage('*', content, {
164
+ type: 'context',
165
+ priority: 'normal',
166
+ metadata,
167
+ });
168
+ }
169
+ /**
170
+ * Query other agents
171
+ */
172
+ async queryAgents(query) {
173
+ return this.sendMessage('*', query, {
174
+ type: 'query',
175
+ priority: 'normal',
176
+ });
177
+ }
178
+ // ============================================================================
179
+ // Pattern Broadcasting
180
+ // ============================================================================
181
+ /**
182
+ * Broadcast a learned pattern to the swarm
183
+ */
184
+ async broadcastPattern(pattern, targetAgents) {
185
+ await this.ensureInitialized();
186
+ const broadcast = {
187
+ id: `bc_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`,
188
+ sourceAgent: this.config.agentId,
189
+ pattern,
190
+ broadcastTime: Date.now(),
191
+ recipients: targetAgents || Array.from(this.agents.keys()),
192
+ acknowledgments: [],
193
+ };
194
+ this.broadcasts.set(broadcast.id, broadcast);
195
+ this.metrics.patternsBroadcast++;
196
+ // Update agent stats
197
+ const agentState = this.agents.get(this.config.agentId);
198
+ if (agentState) {
199
+ agentState.patternsShared++;
200
+ }
201
+ // Send as message
202
+ await this.sendMessage(targetAgents ? targetAgents.join(',') : '*', JSON.stringify({
203
+ broadcastId: broadcast.id,
204
+ strategy: pattern.strategy,
205
+ domain: pattern.domain,
206
+ quality: pattern.quality,
207
+ }), {
208
+ type: 'pattern',
209
+ priority: 'normal',
210
+ metadata: { broadcastId: broadcast.id },
211
+ });
212
+ this.emit('pattern:broadcast', broadcast);
213
+ return broadcast;
214
+ }
215
+ /**
216
+ * Acknowledge receipt of a pattern broadcast
217
+ */
218
+ acknowledgeBroadcast(broadcastId) {
219
+ const broadcast = this.broadcasts.get(broadcastId);
220
+ if (!broadcast)
221
+ return false;
222
+ if (!broadcast.acknowledgments.includes(this.config.agentId)) {
223
+ broadcast.acknowledgments.push(this.config.agentId);
224
+ this.emit('pattern:acknowledged', { broadcastId, agentId: this.config.agentId });
225
+ }
226
+ return true;
227
+ }
228
+ /**
229
+ * Get recent pattern broadcasts
230
+ */
231
+ getPatternBroadcasts(options = {}) {
232
+ let broadcasts = Array.from(this.broadcasts.values());
233
+ if (options.since !== undefined) {
234
+ const sinceTime = options.since;
235
+ broadcasts = broadcasts.filter(b => b.broadcastTime > sinceTime);
236
+ }
237
+ if (options.domain) {
238
+ broadcasts = broadcasts.filter(b => b.pattern.domain === options.domain);
239
+ }
240
+ if (options.minQuality !== undefined) {
241
+ const minQ = options.minQuality;
242
+ broadcasts = broadcasts.filter(b => b.pattern.quality >= minQ);
243
+ }
244
+ return broadcasts.sort((a, b) => b.broadcastTime - a.broadcastTime);
245
+ }
246
+ /**
247
+ * Import a broadcast pattern into local ReasoningBank
248
+ */
249
+ async importBroadcastPattern(broadcastId) {
250
+ const broadcast = this.broadcasts.get(broadcastId);
251
+ if (!broadcast)
252
+ return false;
253
+ await reasoningBank.storePattern(broadcast.pattern.strategy, broadcast.pattern.domain, {
254
+ sourceAgent: broadcast.sourceAgent,
255
+ broadcastId,
256
+ imported: true,
257
+ });
258
+ this.acknowledgeBroadcast(broadcastId);
259
+ return true;
260
+ }
261
+ // ============================================================================
262
+ // Consensus Guidance
263
+ // ============================================================================
264
+ /**
265
+ * Initiate a consensus request
266
+ */
267
+ async initiateConsensus(question, options, timeout) {
268
+ await this.ensureInitialized();
269
+ const request = {
270
+ id: `cons_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`,
271
+ initiator: this.config.agentId,
272
+ question,
273
+ options,
274
+ votes: new Map(),
275
+ deadline: Date.now() + (timeout || this.config.consensusTimeout),
276
+ status: 'pending',
277
+ };
278
+ this.consensusRequests.set(request.id, request);
279
+ this.metrics.consensusInitiated++;
280
+ // Broadcast the consensus request
281
+ await this.sendMessage('*', JSON.stringify({
282
+ consensusId: request.id,
283
+ question,
284
+ options,
285
+ deadline: request.deadline,
286
+ }), {
287
+ type: 'consensus',
288
+ priority: 'high',
289
+ metadata: { consensusId: request.id },
290
+ });
291
+ // Set timeout for resolution
292
+ setTimeout(() => this.resolveConsensus(request.id), timeout || this.config.consensusTimeout);
293
+ this.emit('consensus:initiated', request);
294
+ return request;
295
+ }
296
+ /**
297
+ * Vote on a consensus request
298
+ */
299
+ voteConsensus(consensusId, vote) {
300
+ const request = this.consensusRequests.get(consensusId);
301
+ if (!request || request.status !== 'pending')
302
+ return false;
303
+ if (!request.options.includes(vote))
304
+ return false;
305
+ if (Date.now() > request.deadline)
306
+ return false;
307
+ request.votes.set(this.config.agentId, vote);
308
+ this.emit('consensus:voted', { consensusId, agentId: this.config.agentId, vote });
309
+ // Check if all known agents have voted
310
+ const agentCount = this.agents.size;
311
+ if (request.votes.size >= agentCount) {
312
+ this.resolveConsensus(consensusId);
313
+ }
314
+ return true;
315
+ }
316
+ /**
317
+ * Resolve a consensus request
318
+ */
319
+ resolveConsensus(consensusId) {
320
+ const request = this.consensusRequests.get(consensusId);
321
+ if (!request || request.status !== 'pending')
322
+ return;
323
+ const voteCounts = new Map();
324
+ for (const vote of request.votes.values()) {
325
+ voteCounts.set(vote, (voteCounts.get(vote) || 0) + 1);
326
+ }
327
+ let winner = '';
328
+ let maxVotes = 0;
329
+ for (const [option, count] of voteCounts) {
330
+ if (count > maxVotes) {
331
+ maxVotes = count;
332
+ winner = option;
333
+ }
334
+ }
335
+ const participation = this.agents.size > 0 ? request.votes.size / this.agents.size : 0;
336
+ const confidence = request.votes.size > 0 ? maxVotes / request.votes.size : 0;
337
+ request.status = request.votes.size > 0 ? 'resolved' : 'expired';
338
+ request.result = {
339
+ winner,
340
+ confidence,
341
+ participation,
342
+ };
343
+ if (request.status === 'resolved') {
344
+ this.metrics.consensusResolved++;
345
+ }
346
+ this.emit('consensus:resolved', request);
347
+ }
348
+ /**
349
+ * Get consensus request by ID
350
+ */
351
+ getConsensus(consensusId) {
352
+ return this.consensusRequests.get(consensusId);
353
+ }
354
+ /**
355
+ * Get pending consensus requests
356
+ */
357
+ getPendingConsensus() {
358
+ return Array.from(this.consensusRequests.values())
359
+ .filter(r => r.status === 'pending');
360
+ }
361
+ /**
362
+ * Generate consensus guidance text
363
+ */
364
+ generateConsensusGuidance(consensusId) {
365
+ const request = this.consensusRequests.get(consensusId);
366
+ if (!request)
367
+ return 'Consensus request not found';
368
+ const lines = [
369
+ `**Consensus: ${request.question}**`,
370
+ '',
371
+ `Status: ${request.status.toUpperCase()}`,
372
+ `Initiator: ${request.initiator}`,
373
+ '',
374
+ '**Options**:',
375
+ ];
376
+ for (const option of request.options) {
377
+ const votes = Array.from(request.votes.entries())
378
+ .filter(([_, v]) => v === option)
379
+ .map(([agent]) => agent);
380
+ lines.push(`- ${option}: ${votes.length} votes`);
381
+ }
382
+ if (request.result) {
383
+ lines.push('');
384
+ lines.push(`**Result**: ${request.result.winner}`);
385
+ lines.push(`Confidence: ${(request.result.confidence * 100).toFixed(0)}%`);
386
+ lines.push(`Participation: ${(request.result.participation * 100).toFixed(0)}%`);
387
+ }
388
+ return lines.join('\n');
389
+ }
390
+ // ============================================================================
391
+ // Task Handoff
392
+ // ============================================================================
393
+ /**
394
+ * Initiate a task handoff to another agent
395
+ */
396
+ async initiateHandoff(toAgent, taskDescription, context) {
397
+ await this.ensureInitialized();
398
+ const handoff = {
399
+ id: `ho_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`,
400
+ taskId: `task_${Date.now()}`,
401
+ description: taskDescription,
402
+ fromAgent: this.config.agentId,
403
+ toAgent,
404
+ context,
405
+ status: 'pending',
406
+ timestamp: Date.now(),
407
+ };
408
+ this.handoffs.set(handoff.id, handoff);
409
+ this.metrics.handoffsInitiated++;
410
+ // Send handoff message
411
+ await this.sendMessage(toAgent, JSON.stringify({
412
+ handoffId: handoff.id,
413
+ description: taskDescription,
414
+ context,
415
+ }), {
416
+ type: 'handoff',
417
+ priority: 'high',
418
+ metadata: { handoffId: handoff.id },
419
+ });
420
+ this.emit('handoff:initiated', handoff);
421
+ return handoff;
422
+ }
423
+ /**
424
+ * Accept a task handoff
425
+ */
426
+ acceptHandoff(handoffId) {
427
+ const handoff = this.handoffs.get(handoffId);
428
+ if (!handoff || handoff.toAgent !== this.config.agentId)
429
+ return false;
430
+ if (handoff.status !== 'pending')
431
+ return false;
432
+ handoff.status = 'accepted';
433
+ // Update agent stats
434
+ const agentState = this.agents.get(this.config.agentId);
435
+ if (agentState) {
436
+ agentState.handoffsReceived++;
437
+ agentState.currentTask = handoff.description;
438
+ agentState.status = 'busy';
439
+ }
440
+ this.emit('handoff:accepted', handoff);
441
+ return true;
442
+ }
443
+ /**
444
+ * Reject a task handoff
445
+ */
446
+ rejectHandoff(handoffId, reason) {
447
+ const handoff = this.handoffs.get(handoffId);
448
+ if (!handoff || handoff.toAgent !== this.config.agentId)
449
+ return false;
450
+ if (handoff.status !== 'pending')
451
+ return false;
452
+ handoff.status = 'rejected';
453
+ if (reason) {
454
+ handoff.context.blockers.push(reason);
455
+ }
456
+ this.emit('handoff:rejected', { handoff, reason });
457
+ return true;
458
+ }
459
+ /**
460
+ * Complete a task handoff
461
+ */
462
+ completeHandoff(handoffId, result) {
463
+ const handoff = this.handoffs.get(handoffId);
464
+ if (!handoff || handoff.toAgent !== this.config.agentId)
465
+ return false;
466
+ if (handoff.status !== 'accepted')
467
+ return false;
468
+ handoff.status = 'completed';
469
+ handoff.completedAt = Date.now();
470
+ if (result) {
471
+ handoff.context = { ...handoff.context, ...result };
472
+ }
473
+ // Update agent stats
474
+ const agentState = this.agents.get(this.config.agentId);
475
+ if (agentState) {
476
+ agentState.handoffsCompleted++;
477
+ agentState.currentTask = undefined;
478
+ agentState.status = 'idle';
479
+ }
480
+ this.metrics.handoffsCompleted++;
481
+ this.emit('handoff:completed', handoff);
482
+ return true;
483
+ }
484
+ /**
485
+ * Get handoff by ID
486
+ */
487
+ getHandoff(handoffId) {
488
+ return this.handoffs.get(handoffId);
489
+ }
490
+ /**
491
+ * Get pending handoffs for this agent
492
+ */
493
+ getPendingHandoffs() {
494
+ return Array.from(this.handoffs.values())
495
+ .filter(h => h.toAgent === this.config.agentId && h.status === 'pending');
496
+ }
497
+ /**
498
+ * Generate handoff context text for Claude
499
+ */
500
+ generateHandoffContext(handoffId) {
501
+ const handoff = this.handoffs.get(handoffId);
502
+ if (!handoff)
503
+ return 'Handoff not found';
504
+ const lines = [
505
+ `## Task Handoff from ${handoff.fromAgent}`,
506
+ '',
507
+ `**Task**: ${handoff.description}`,
508
+ `**Status**: ${handoff.status.toUpperCase()}`,
509
+ '',
510
+ ];
511
+ if (handoff.context.filesModified.length > 0) {
512
+ lines.push('**Files Modified**:');
513
+ for (const file of handoff.context.filesModified) {
514
+ lines.push(`- ${file}`);
515
+ }
516
+ lines.push('');
517
+ }
518
+ if (handoff.context.patternsUsed.length > 0) {
519
+ lines.push('**Patterns Used**:');
520
+ for (const pattern of handoff.context.patternsUsed) {
521
+ lines.push(`- ${pattern}`);
522
+ }
523
+ lines.push('');
524
+ }
525
+ if (handoff.context.decisions.length > 0) {
526
+ lines.push('**Decisions Made**:');
527
+ for (const decision of handoff.context.decisions) {
528
+ lines.push(`- ${decision}`);
529
+ }
530
+ lines.push('');
531
+ }
532
+ if (handoff.context.blockers.length > 0) {
533
+ lines.push('**Blockers**:');
534
+ for (const blocker of handoff.context.blockers) {
535
+ lines.push(`- ⚠️ ${blocker}`);
536
+ }
537
+ lines.push('');
538
+ }
539
+ if (handoff.context.nextSteps.length > 0) {
540
+ lines.push('**Next Steps**:');
541
+ for (const step of handoff.context.nextSteps) {
542
+ lines.push(`- [ ] ${step}`);
543
+ }
544
+ }
545
+ return lines.join('\n');
546
+ }
547
+ // ============================================================================
548
+ // Agent Registry
549
+ // ============================================================================
550
+ /**
551
+ * Register an agent in the swarm
552
+ */
553
+ registerAgent(agent) {
554
+ this.agents.set(agent.id, agent);
555
+ this.emit('agent:registered', agent);
556
+ }
557
+ /**
558
+ * Update agent status
559
+ */
560
+ updateAgentStatus(agentId, status) {
561
+ const agent = this.agents.get(agentId);
562
+ if (agent) {
563
+ agent.status = status;
564
+ agent.lastSeen = Date.now();
565
+ this.emit('agent:updated', agent);
566
+ }
567
+ }
568
+ /**
569
+ * Get all registered agents
570
+ */
571
+ getAgents() {
572
+ return Array.from(this.agents.values());
573
+ }
574
+ /**
575
+ * Get agent by ID
576
+ */
577
+ getAgent(agentId) {
578
+ return this.agents.get(agentId);
579
+ }
580
+ // ============================================================================
581
+ // Statistics & Utilities
582
+ // ============================================================================
583
+ /**
584
+ * Get communication statistics
585
+ */
586
+ getStats() {
587
+ return {
588
+ agentId: this.config.agentId,
589
+ agentCount: this.agents.size,
590
+ metrics: { ...this.metrics },
591
+ pendingMessages: this.getMessages({ limit: 1000 }).length,
592
+ pendingHandoffs: this.getPendingHandoffs().length,
593
+ pendingConsensus: this.getPendingConsensus().length,
594
+ };
595
+ }
596
+ /**
597
+ * Cleanup old messages and data
598
+ */
599
+ cleanup() {
600
+ const now = Date.now();
601
+ const retention = this.config.messageRetention;
602
+ // Cleanup old messages
603
+ for (const [id, message] of this.messages) {
604
+ if (now - message.timestamp > retention) {
605
+ this.messages.delete(id);
606
+ }
607
+ }
608
+ // Cleanup old broadcasts
609
+ for (const [id, broadcast] of this.broadcasts) {
610
+ if (now - broadcast.broadcastTime > retention) {
611
+ this.broadcasts.delete(id);
612
+ }
613
+ }
614
+ // Cleanup expired consensus requests
615
+ for (const [id, request] of this.consensusRequests) {
616
+ if (request.status === 'pending' && now > request.deadline) {
617
+ this.resolveConsensus(id);
618
+ }
619
+ }
620
+ // Mark offline agents
621
+ for (const agent of this.agents.values()) {
622
+ if (now - agent.lastSeen > 300000) { // 5 minutes
623
+ agent.status = 'offline';
624
+ }
625
+ }
626
+ }
627
+ async ensureInitialized() {
628
+ if (!this.initialized) {
629
+ await this.initialize();
630
+ }
631
+ }
632
+ }
633
+ // ============================================================================
634
+ // Exports
635
+ // ============================================================================
636
+ export const swarmComm = new SwarmCommunication();
637
+ export { SwarmCommunication as default, };
638
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/swarm/index.ts"],"names":[],"mappings":"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"}