@claude-flow/swarm 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.
- package/.agentic-flow/intelligence.json +16 -0
- package/MIGRATION.md +472 -0
- package/README.md +634 -0
- package/__tests__/consensus.test.ts +577 -0
- package/__tests__/coordinator.test.ts +501 -0
- package/__tests__/queen-coordinator.test.ts +1335 -0
- package/__tests__/topology.test.ts +621 -0
- package/dist/agent-pool.d.ts +52 -0
- package/dist/agent-pool.d.ts.map +1 -0
- package/dist/agent-pool.js +365 -0
- package/dist/agent-pool.js.map +1 -0
- package/dist/application/commands/create-task.command.d.ts +64 -0
- package/dist/application/commands/create-task.command.d.ts.map +1 -0
- package/dist/application/commands/create-task.command.js +77 -0
- package/dist/application/commands/create-task.command.js.map +1 -0
- package/dist/application/commands/spawn-agent.command.d.ts +63 -0
- package/dist/application/commands/spawn-agent.command.d.ts.map +1 -0
- package/dist/application/commands/spawn-agent.command.js +74 -0
- package/dist/application/commands/spawn-agent.command.js.map +1 -0
- package/dist/application/index.d.ts +9 -0
- package/dist/application/index.d.ts.map +1 -0
- package/dist/application/index.js +11 -0
- package/dist/application/index.js.map +1 -0
- package/dist/application/services/swarm-application-service.d.ts +112 -0
- package/dist/application/services/swarm-application-service.d.ts.map +1 -0
- package/dist/application/services/swarm-application-service.js +153 -0
- package/dist/application/services/swarm-application-service.js.map +1 -0
- package/dist/attention-coordinator.d.ts +212 -0
- package/dist/attention-coordinator.d.ts.map +1 -0
- package/dist/attention-coordinator.js +667 -0
- package/dist/attention-coordinator.js.map +1 -0
- package/dist/consensus/byzantine.d.ts +63 -0
- package/dist/consensus/byzantine.d.ts.map +1 -0
- package/dist/consensus/byzantine.js +316 -0
- package/dist/consensus/byzantine.js.map +1 -0
- package/dist/consensus/gossip.d.ts +69 -0
- package/dist/consensus/gossip.d.ts.map +1 -0
- package/dist/consensus/gossip.js +378 -0
- package/dist/consensus/gossip.js.map +1 -0
- package/dist/consensus/index.d.ts +49 -0
- package/dist/consensus/index.d.ts.map +1 -0
- package/dist/consensus/index.js +203 -0
- package/dist/consensus/index.js.map +1 -0
- package/dist/consensus/raft.d.ts +62 -0
- package/dist/consensus/raft.d.ts.map +1 -0
- package/dist/consensus/raft.js +324 -0
- package/dist/consensus/raft.js.map +1 -0
- package/dist/coordination/agent-registry.d.ts +68 -0
- package/dist/coordination/agent-registry.d.ts.map +1 -0
- package/dist/coordination/agent-registry.js +412 -0
- package/dist/coordination/agent-registry.js.map +1 -0
- package/dist/coordination/index.d.ts +8 -0
- package/dist/coordination/index.d.ts.map +1 -0
- package/dist/coordination/index.js +8 -0
- package/dist/coordination/index.js.map +1 -0
- package/dist/coordination/swarm-hub.d.ts +150 -0
- package/dist/coordination/swarm-hub.d.ts.map +1 -0
- package/dist/coordination/swarm-hub.js +617 -0
- package/dist/coordination/swarm-hub.js.map +1 -0
- package/dist/coordination/task-orchestrator.d.ts +96 -0
- package/dist/coordination/task-orchestrator.d.ts.map +1 -0
- package/dist/coordination/task-orchestrator.js +412 -0
- package/dist/coordination/task-orchestrator.js.map +1 -0
- package/dist/domain/entities/agent.d.ts +151 -0
- package/dist/domain/entities/agent.d.ts.map +1 -0
- package/dist/domain/entities/agent.js +280 -0
- package/dist/domain/entities/agent.js.map +1 -0
- package/dist/domain/entities/task.d.ts +133 -0
- package/dist/domain/entities/task.d.ts.map +1 -0
- package/dist/domain/entities/task.js +261 -0
- package/dist/domain/entities/task.js.map +1 -0
- package/dist/domain/index.d.ts +11 -0
- package/dist/domain/index.d.ts.map +1 -0
- package/dist/domain/index.js +11 -0
- package/dist/domain/index.js.map +1 -0
- package/dist/domain/repositories/agent-repository.interface.d.ts +57 -0
- package/dist/domain/repositories/agent-repository.interface.d.ts.map +1 -0
- package/dist/domain/repositories/agent-repository.interface.js +9 -0
- package/dist/domain/repositories/agent-repository.interface.js.map +1 -0
- package/dist/domain/repositories/task-repository.interface.d.ts +61 -0
- package/dist/domain/repositories/task-repository.interface.d.ts.map +1 -0
- package/dist/domain/repositories/task-repository.interface.js +9 -0
- package/dist/domain/repositories/task-repository.interface.js.map +1 -0
- package/dist/domain/services/coordination-service.d.ts +84 -0
- package/dist/domain/services/coordination-service.d.ts.map +1 -0
- package/dist/domain/services/coordination-service.js +231 -0
- package/dist/domain/services/coordination-service.js.map +1 -0
- package/dist/federation-hub.d.ts +284 -0
- package/dist/federation-hub.d.ts.map +1 -0
- package/dist/federation-hub.js +692 -0
- package/dist/federation-hub.js.map +1 -0
- package/dist/index.d.ts +107 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +142 -0
- package/dist/index.js.map +1 -0
- package/dist/message-bus.d.ts +48 -0
- package/dist/message-bus.d.ts.map +1 -0
- package/dist/message-bus.js +499 -0
- package/dist/message-bus.js.map +1 -0
- package/dist/queen-coordinator.d.ts +576 -0
- package/dist/queen-coordinator.d.ts.map +1 -0
- package/dist/queen-coordinator.js +1307 -0
- package/dist/queen-coordinator.js.map +1 -0
- package/dist/shared/events.d.ts +63 -0
- package/dist/shared/events.d.ts.map +1 -0
- package/dist/shared/events.js +203 -0
- package/dist/shared/events.js.map +1 -0
- package/dist/shared/types.d.ts +212 -0
- package/dist/shared/types.d.ts.map +1 -0
- package/dist/shared/types.js +22 -0
- package/dist/shared/types.js.map +1 -0
- package/dist/topology-manager.d.ts +62 -0
- package/dist/topology-manager.d.ts.map +1 -0
- package/dist/topology-manager.js +538 -0
- package/dist/topology-manager.js.map +1 -0
- package/dist/types.d.ts +353 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +43 -0
- package/dist/types.js.map +1 -0
- package/dist/unified-coordinator.d.ts +260 -0
- package/dist/unified-coordinator.d.ts.map +1 -0
- package/dist/unified-coordinator.js +1460 -0
- package/dist/unified-coordinator.js.map +1 -0
- package/dist/workers/index.d.ts +29 -0
- package/dist/workers/index.d.ts.map +1 -0
- package/dist/workers/index.js +49 -0
- package/dist/workers/index.js.map +1 -0
- package/dist/workers/worker-dispatch.d.ts +234 -0
- package/dist/workers/worker-dispatch.d.ts.map +1 -0
- package/dist/workers/worker-dispatch.js +842 -0
- package/dist/workers/worker-dispatch.js.map +1 -0
- package/package.json +33 -0
- package/src/agent-pool.ts +476 -0
- package/src/application/commands/create-task.command.ts +124 -0
- package/src/application/commands/spawn-agent.command.ts +122 -0
- package/src/application/index.ts +30 -0
- package/src/application/services/swarm-application-service.ts +200 -0
- package/src/attention-coordinator.ts +1000 -0
- package/src/consensus/byzantine.ts +431 -0
- package/src/consensus/gossip.ts +513 -0
- package/src/consensus/index.ts +267 -0
- package/src/consensus/raft.ts +443 -0
- package/src/coordination/agent-registry.ts +544 -0
- package/src/coordination/index.ts +23 -0
- package/src/coordination/swarm-hub.ts +776 -0
- package/src/coordination/task-orchestrator.ts +605 -0
- package/src/domain/entities/agent.d.ts +151 -0
- package/src/domain/entities/agent.d.ts.map +1 -0
- package/src/domain/entities/agent.js +280 -0
- package/src/domain/entities/agent.js.map +1 -0
- package/src/domain/entities/agent.ts +370 -0
- package/src/domain/entities/task.d.ts +133 -0
- package/src/domain/entities/task.d.ts.map +1 -0
- package/src/domain/entities/task.js +261 -0
- package/src/domain/entities/task.js.map +1 -0
- package/src/domain/entities/task.ts +319 -0
- package/src/domain/index.ts +41 -0
- package/src/domain/repositories/agent-repository.interface.d.ts +57 -0
- package/src/domain/repositories/agent-repository.interface.d.ts.map +1 -0
- package/src/domain/repositories/agent-repository.interface.js +9 -0
- package/src/domain/repositories/agent-repository.interface.js.map +1 -0
- package/src/domain/repositories/agent-repository.interface.ts +69 -0
- package/src/domain/repositories/task-repository.interface.d.ts +61 -0
- package/src/domain/repositories/task-repository.interface.d.ts.map +1 -0
- package/src/domain/repositories/task-repository.interface.js +9 -0
- package/src/domain/repositories/task-repository.interface.js.map +1 -0
- package/src/domain/repositories/task-repository.interface.ts +75 -0
- package/src/domain/services/coordination-service.ts +320 -0
- package/src/federation-hub.d.ts +284 -0
- package/src/federation-hub.d.ts.map +1 -0
- package/src/federation-hub.js +692 -0
- package/src/federation-hub.js.map +1 -0
- package/src/federation-hub.ts +979 -0
- package/src/index.ts +348 -0
- package/src/message-bus.ts +607 -0
- package/src/queen-coordinator.ts +2024 -0
- package/src/shared/events.ts +285 -0
- package/src/shared/types.ts +389 -0
- package/src/topology-manager.ts +656 -0
- package/src/types.ts +545 -0
- package/src/unified-coordinator.ts +1844 -0
- package/src/workers/index.ts +65 -0
- package/src/workers/worker-dispatch.d.ts +234 -0
- package/src/workers/worker-dispatch.d.ts.map +1 -0
- package/src/workers/worker-dispatch.js +842 -0
- package/src/workers/worker-dispatch.js.map +1 -0
- package/src/workers/worker-dispatch.ts +1072 -0
- package/tsconfig.json +9 -0
- package/tsconfig.tsbuildinfo +1 -0
- package/vitest.config.ts +20 -0
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Coordination Domain Service - Domain Layer
|
|
3
|
+
*
|
|
4
|
+
* Contains coordination logic that spans multiple entities.
|
|
5
|
+
* Handles task assignment, load balancing, and swarm orchestration.
|
|
6
|
+
*
|
|
7
|
+
* @module v3/swarm/domain/services
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Coordination Domain Service
|
|
11
|
+
*
|
|
12
|
+
* Provides domain-level coordination operations.
|
|
13
|
+
*/
|
|
14
|
+
export class CoordinationService {
|
|
15
|
+
agentRepository;
|
|
16
|
+
taskRepository;
|
|
17
|
+
constructor(agentRepository, taskRepository) {
|
|
18
|
+
this.agentRepository = agentRepository;
|
|
19
|
+
this.taskRepository = taskRepository;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Assign a task to the best available agent
|
|
23
|
+
*/
|
|
24
|
+
async assignTask(taskId, strategy = 'capability-match') {
|
|
25
|
+
const task = await this.taskRepository.findById(taskId);
|
|
26
|
+
if (!task) {
|
|
27
|
+
return { success: false, taskId, reason: 'Task not found' };
|
|
28
|
+
}
|
|
29
|
+
// Check dependencies
|
|
30
|
+
const completedTasks = await this.taskRepository.findByStatus('completed');
|
|
31
|
+
const completedIds = new Set(completedTasks.map((t) => t.id));
|
|
32
|
+
if (!task.areDependenciesSatisfied(completedIds)) {
|
|
33
|
+
return { success: false, taskId, reason: 'Dependencies not satisfied' };
|
|
34
|
+
}
|
|
35
|
+
// Find best agent
|
|
36
|
+
const agent = await this.findBestAgent(task, strategy);
|
|
37
|
+
if (!agent) {
|
|
38
|
+
return { success: false, taskId, reason: 'No available agents' };
|
|
39
|
+
}
|
|
40
|
+
// Assign task
|
|
41
|
+
task.assign(agent.id);
|
|
42
|
+
agent.assignTask(taskId);
|
|
43
|
+
await this.taskRepository.save(task);
|
|
44
|
+
await this.agentRepository.save(agent);
|
|
45
|
+
return { success: true, taskId, agentId: agent.id };
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Find the best agent for a task based on strategy
|
|
49
|
+
*/
|
|
50
|
+
async findBestAgent(task, strategy) {
|
|
51
|
+
const availableAgents = await this.agentRepository.findAvailable();
|
|
52
|
+
if (availableAgents.length === 0)
|
|
53
|
+
return null;
|
|
54
|
+
switch (strategy) {
|
|
55
|
+
case 'round-robin':
|
|
56
|
+
return this.roundRobinSelection(availableAgents);
|
|
57
|
+
case 'least-loaded':
|
|
58
|
+
return this.leastLoadedSelection(availableAgents);
|
|
59
|
+
case 'capability-match':
|
|
60
|
+
return this.capabilityMatchSelection(availableAgents, task);
|
|
61
|
+
case 'random':
|
|
62
|
+
return availableAgents[Math.floor(Math.random() * availableAgents.length)];
|
|
63
|
+
default:
|
|
64
|
+
return availableAgents[0];
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
roundRobinSelection(agents) {
|
|
68
|
+
// Sort by last active time and pick least recently used
|
|
69
|
+
return [...agents].sort((a, b) => a.lastActiveAt.getTime() - b.lastActiveAt.getTime())[0];
|
|
70
|
+
}
|
|
71
|
+
leastLoadedSelection(agents) {
|
|
72
|
+
return [...agents].sort((a, b) => a.getUtilization() - b.getUtilization())[0];
|
|
73
|
+
}
|
|
74
|
+
capabilityMatchSelection(agents, task) {
|
|
75
|
+
// Extract required capabilities from task type and metadata
|
|
76
|
+
const requiredCapabilities = this.extractRequiredCapabilities(task);
|
|
77
|
+
// Score agents by capability match
|
|
78
|
+
const scored = agents.map((agent) => {
|
|
79
|
+
let score = 0;
|
|
80
|
+
for (const cap of requiredCapabilities) {
|
|
81
|
+
if (agent.hasCapability(cap))
|
|
82
|
+
score++;
|
|
83
|
+
}
|
|
84
|
+
// Factor in utilization (prefer less loaded)
|
|
85
|
+
score -= agent.getUtilization() * 0.5;
|
|
86
|
+
return { agent, score };
|
|
87
|
+
});
|
|
88
|
+
scored.sort((a, b) => b.score - a.score);
|
|
89
|
+
// Return best match if any capabilities matched
|
|
90
|
+
if (scored.length > 0 && scored[0].score > 0) {
|
|
91
|
+
return scored[0].agent;
|
|
92
|
+
}
|
|
93
|
+
// Fallback to least loaded
|
|
94
|
+
return this.leastLoadedSelection(agents);
|
|
95
|
+
}
|
|
96
|
+
extractRequiredCapabilities(task) {
|
|
97
|
+
const capabilities = [task.type];
|
|
98
|
+
// Map task types to required capabilities
|
|
99
|
+
const capabilityMap = {
|
|
100
|
+
implementation: ['coding', 'testing'],
|
|
101
|
+
review: ['review', 'analysis'],
|
|
102
|
+
testing: ['testing', 'qa'],
|
|
103
|
+
documentation: ['documentation', 'writing'],
|
|
104
|
+
security: ['security', 'audit'],
|
|
105
|
+
performance: ['performance', 'optimization'],
|
|
106
|
+
};
|
|
107
|
+
if (capabilityMap[task.type]) {
|
|
108
|
+
capabilities.push(...capabilityMap[task.type]);
|
|
109
|
+
}
|
|
110
|
+
return capabilities;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Process completed tasks and release agents
|
|
114
|
+
*/
|
|
115
|
+
async processTaskCompletion(taskId, output) {
|
|
116
|
+
const task = await this.taskRepository.findById(taskId);
|
|
117
|
+
if (!task || !task.assignedAgentId)
|
|
118
|
+
return;
|
|
119
|
+
const agent = await this.agentRepository.findById(task.assignedAgentId);
|
|
120
|
+
task.complete(output);
|
|
121
|
+
await this.taskRepository.save(task);
|
|
122
|
+
if (agent) {
|
|
123
|
+
agent.completeTask(taskId);
|
|
124
|
+
await this.agentRepository.save(agent);
|
|
125
|
+
}
|
|
126
|
+
// Check for dependent tasks that can now be queued
|
|
127
|
+
await this.queueDependentTasks(taskId);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Queue tasks whose dependencies are now satisfied
|
|
131
|
+
*/
|
|
132
|
+
async queueDependentTasks(completedTaskId) {
|
|
133
|
+
const pendingTasks = await this.taskRepository.findPending();
|
|
134
|
+
const completedTasks = await this.taskRepository.findByStatus('completed');
|
|
135
|
+
const completedIds = new Set(completedTasks.map((t) => t.id));
|
|
136
|
+
for (const task of pendingTasks) {
|
|
137
|
+
if (task.dependencies.includes(completedTaskId) &&
|
|
138
|
+
task.areDependenciesSatisfied(completedIds)) {
|
|
139
|
+
task.queue();
|
|
140
|
+
await this.taskRepository.save(task);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Handle task failure with retry logic
|
|
146
|
+
*/
|
|
147
|
+
async processTaskFailure(taskId, error) {
|
|
148
|
+
const task = await this.taskRepository.findById(taskId);
|
|
149
|
+
if (!task)
|
|
150
|
+
return false;
|
|
151
|
+
const agentId = task.assignedAgentId;
|
|
152
|
+
task.fail(error);
|
|
153
|
+
await this.taskRepository.save(task);
|
|
154
|
+
if (agentId) {
|
|
155
|
+
const agent = await this.agentRepository.findById(agentId);
|
|
156
|
+
if (agent) {
|
|
157
|
+
agent.completeTask(taskId);
|
|
158
|
+
await this.agentRepository.save(agent);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
// Return true if task was requeued for retry
|
|
162
|
+
return task.status === 'queued';
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Get overall swarm health
|
|
166
|
+
*/
|
|
167
|
+
async getSwarmHealth() {
|
|
168
|
+
const agentStats = await this.agentRepository.getStatistics();
|
|
169
|
+
const taskStats = await this.taskRepository.getStatistics();
|
|
170
|
+
const queuedTasks = await this.taskRepository.findQueued();
|
|
171
|
+
const issues = [];
|
|
172
|
+
// Check for issues
|
|
173
|
+
if (agentStats.byStatus.error > 0) {
|
|
174
|
+
issues.push(`${agentStats.byStatus.error} agents in error state`);
|
|
175
|
+
}
|
|
176
|
+
if (queuedTasks.length > agentStats.byStatus.active * 10) {
|
|
177
|
+
issues.push('Task queue backlog detected');
|
|
178
|
+
}
|
|
179
|
+
if (agentStats.averageUtilization > 0.9) {
|
|
180
|
+
issues.push('High agent utilization');
|
|
181
|
+
}
|
|
182
|
+
const timedOutTasks = await this.taskRepository.findTimedOut();
|
|
183
|
+
if (timedOutTasks.length > 0) {
|
|
184
|
+
issues.push(`${timedOutTasks.length} timed out tasks`);
|
|
185
|
+
}
|
|
186
|
+
return {
|
|
187
|
+
healthy: issues.length === 0,
|
|
188
|
+
totalAgents: agentStats.total,
|
|
189
|
+
activeAgents: agentStats.byStatus.active + agentStats.byStatus.busy,
|
|
190
|
+
errorAgents: agentStats.byStatus.error,
|
|
191
|
+
pendingTasks: taskStats.byStatus.pending,
|
|
192
|
+
runningTasks: taskStats.byStatus.running,
|
|
193
|
+
queueDepth: queuedTasks.length,
|
|
194
|
+
averageUtilization: agentStats.averageUtilization,
|
|
195
|
+
issues,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Scale agents based on workload
|
|
200
|
+
*/
|
|
201
|
+
async calculateScalingRecommendation() {
|
|
202
|
+
const health = await this.getSwarmHealth();
|
|
203
|
+
const queuedTasks = await this.taskRepository.findQueued();
|
|
204
|
+
// Scale up if queue is deep and agents are highly utilized
|
|
205
|
+
if (queuedTasks.length > 10 && health.averageUtilization > 0.8) {
|
|
206
|
+
const additionalAgents = Math.ceil(queuedTasks.length / 5);
|
|
207
|
+
return {
|
|
208
|
+
action: 'scale-up',
|
|
209
|
+
count: additionalAgents,
|
|
210
|
+
reason: 'High queue depth with high agent utilization',
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
// Scale down if queue is empty and many agents are idle
|
|
214
|
+
if (queuedTasks.length === 0 && health.averageUtilization < 0.2) {
|
|
215
|
+
const excessAgents = Math.floor(health.totalAgents * 0.3);
|
|
216
|
+
if (excessAgents > 0) {
|
|
217
|
+
return {
|
|
218
|
+
action: 'scale-down',
|
|
219
|
+
count: excessAgents,
|
|
220
|
+
reason: 'Low utilization with empty queue',
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return {
|
|
225
|
+
action: 'none',
|
|
226
|
+
count: 0,
|
|
227
|
+
reason: 'Current scaling is appropriate',
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
//# sourceMappingURL=coordination-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coordination-service.js","sourceRoot":"","sources":["../../../src/domain/services/coordination-service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAqCH;;;;GAIG;AACH,MAAM,OAAO,mBAAmB;IAEX;IACA;IAFnB,YACmB,eAAiC,EACjC,cAA+B;QAD/B,oBAAe,GAAf,eAAe,CAAkB;QACjC,mBAAc,GAAd,cAAc,CAAiB;IAC/C,CAAC;IAEJ;;OAEG;IACH,KAAK,CAAC,UAAU,CACd,MAAc,EACd,WAAkC,kBAAkB;QAEpD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;QAC9D,CAAC;QAED,qBAAqB;QACrB,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAC3E,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAE9D,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,YAAY,CAAC,EAAE,CAAC;YACjD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,4BAA4B,EAAE,CAAC;QAC1E,CAAC;QAED,kBAAkB;QAClB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;QACnE,CAAC;QAED,cAAc;QACd,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACtB,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAEzB,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;IACtD,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa,CACzB,IAAU,EACV,QAA+B;QAE/B,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC;QAEnE,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAE9C,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,aAAa;gBAChB,OAAO,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC;YAEnD,KAAK,cAAc;gBACjB,OAAO,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,CAAC;YAEpD,KAAK,kBAAkB;gBACrB,OAAO,IAAI,CAAC,wBAAwB,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;YAE9D,KAAK,QAAQ;gBACX,OAAO,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;YAE7E;gBACE,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAEO,mBAAmB,CAAC,MAAe;QACzC,wDAAwD;QACxD,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CACrB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,CAC9D,CAAC,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,oBAAoB,CAAC,MAAe;QAC1C,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAChF,CAAC;IAEO,wBAAwB,CAAC,MAAe,EAAE,IAAU;QAC1D,4DAA4D;QAC5D,MAAM,oBAAoB,GAAG,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC;QAEpE,mCAAmC;QACnC,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAClC,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,KAAK,MAAM,GAAG,IAAI,oBAAoB,EAAE,CAAC;gBACvC,IAAI,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC;oBAAE,KAAK,EAAE,CAAC;YACxC,CAAC;YACD,6CAA6C;YAC7C,KAAK,IAAI,KAAK,CAAC,cAAc,EAAE,GAAG,GAAG,CAAC;YACtC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAEzC,gDAAgD;QAChD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YAC7C,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACzB,CAAC;QAED,2BAA2B;QAC3B,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IAEO,2BAA2B,CAAC,IAAU;QAC5C,MAAM,YAAY,GAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE3C,0CAA0C;QAC1C,MAAM,aAAa,GAA6B;YAC9C,cAAc,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;YACrC,MAAM,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC;YAC9B,OAAO,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC;YAC1B,aAAa,EAAE,CAAC,eAAe,EAAE,SAAS,CAAC;YAC3C,QAAQ,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC;YAC/B,WAAW,EAAE,CAAC,aAAa,EAAE,cAAc,CAAC;SAC7C,CAAC;QAEF,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,YAAY,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACjD,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,qBAAqB,CAAC,MAAc,EAAE,MAAgB;QAC1D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE,OAAO;QAE3C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAExE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACtB,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAErC,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAC3B,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;QAED,mDAAmD;QACnD,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,mBAAmB,CAAC,eAAuB;QACvD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;QAC7D,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAC3E,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAE9D,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAChC,IACE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC;gBAC3C,IAAI,CAAC,wBAAwB,CAAC,YAAY,CAAC,EAC3C,CAAC;gBACD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CAAC,MAAc,EAAE,KAAa;QACpD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAExB,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC;QAErC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjB,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAErC,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC3D,IAAI,KAAK,EAAE,CAAC;gBACV,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBAC3B,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;QAED,6CAA6C;QAC7C,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc;QAClB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC;QAC9D,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC;QAC5D,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;QAE3D,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,mBAAmB;QACnB,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,wBAAwB,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,WAAW,CAAC,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACzD,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,UAAU,CAAC,kBAAkB,GAAG,GAAG,EAAE,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACxC,CAAC;QAED,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;QAC/D,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,MAAM,kBAAkB,CAAC,CAAC;QACzD,CAAC;QAED,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;YAC5B,WAAW,EAAE,UAAU,CAAC,KAAK;YAC7B,YAAY,EAAE,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI;YACnE,WAAW,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK;YACtC,YAAY,EAAE,SAAS,CAAC,QAAQ,CAAC,OAAO;YACxC,YAAY,EAAE,SAAS,CAAC,QAAQ,CAAC,OAAO;YACxC,UAAU,EAAE,WAAW,CAAC,MAAM;YAC9B,kBAAkB,EAAE,UAAU,CAAC,kBAAkB;YACjD,MAAM;SACP,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,8BAA8B;QAKlC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC3C,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;QAE3D,2DAA2D;QAC3D,IAAI,WAAW,CAAC,MAAM,GAAG,EAAE,IAAI,MAAM,CAAC,kBAAkB,GAAG,GAAG,EAAE,CAAC;YAC/D,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC3D,OAAO;gBACL,MAAM,EAAE,UAAU;gBAClB,KAAK,EAAE,gBAAgB;gBACvB,MAAM,EAAE,8CAA8C;aACvD,CAAC;QACJ,CAAC;QAED,wDAAwD;QACxD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,kBAAkB,GAAG,GAAG,EAAE,CAAC;YAChE,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC;YAC1D,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;gBACrB,OAAO;oBACL,MAAM,EAAE,YAAY;oBACpB,KAAK,EAAE,YAAY;oBACnB,MAAM,EAAE,kCAAkC;iBAC3C,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO;YACL,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,gCAAgC;SACzC,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Federation Hub - Ephemeral Agent Coordination
|
|
3
|
+
*
|
|
4
|
+
* Provides cross-swarm coordination and ephemeral agent management
|
|
5
|
+
* for distributed multi-swarm architectures.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Ephemeral agent spawning (short-lived, task-specific)
|
|
9
|
+
* - Cross-swarm communication and coordination
|
|
10
|
+
* - Federation protocol for distributed consensus
|
|
11
|
+
* - Resource allocation and load balancing
|
|
12
|
+
* - Agent lifecycle management with auto-cleanup
|
|
13
|
+
*
|
|
14
|
+
* Performance Targets:
|
|
15
|
+
* - Agent spawn: <50ms
|
|
16
|
+
* - Cross-swarm message: <100ms
|
|
17
|
+
* - Federation sync: <500ms
|
|
18
|
+
* - Auto-cleanup: Background, non-blocking
|
|
19
|
+
*
|
|
20
|
+
* Implements ADR-001: agentic-flow@alpha compatibility
|
|
21
|
+
* Implements ADR-003: Unified coordination engine
|
|
22
|
+
*
|
|
23
|
+
* @module @claude-flow/swarm/federation-hub
|
|
24
|
+
* @version 3.0.0-alpha.1
|
|
25
|
+
*/
|
|
26
|
+
import { EventEmitter } from 'events';
|
|
27
|
+
export type FederationId = string;
|
|
28
|
+
export type SwarmId = string;
|
|
29
|
+
export type EphemeralAgentId = string;
|
|
30
|
+
export interface FederationConfig {
|
|
31
|
+
/** Federation identifier */
|
|
32
|
+
federationId?: FederationId;
|
|
33
|
+
/** Maximum ephemeral agents per swarm */
|
|
34
|
+
maxEphemeralAgents?: number;
|
|
35
|
+
/** Default TTL for ephemeral agents (ms) */
|
|
36
|
+
defaultTTL?: number;
|
|
37
|
+
/** Sync interval for federation state (ms) */
|
|
38
|
+
syncIntervalMs?: number;
|
|
39
|
+
/** Enable auto-cleanup of expired agents */
|
|
40
|
+
autoCleanup?: boolean;
|
|
41
|
+
/** Cleanup check interval (ms) */
|
|
42
|
+
cleanupIntervalMs?: number;
|
|
43
|
+
/** Cross-swarm communication timeout (ms) */
|
|
44
|
+
communicationTimeoutMs?: number;
|
|
45
|
+
/** Enable federation-wide consensus */
|
|
46
|
+
enableConsensus?: boolean;
|
|
47
|
+
/** Consensus quorum percentage */
|
|
48
|
+
consensusQuorum?: number;
|
|
49
|
+
}
|
|
50
|
+
export interface SwarmRegistration {
|
|
51
|
+
swarmId: SwarmId;
|
|
52
|
+
name: string;
|
|
53
|
+
endpoint?: string;
|
|
54
|
+
capabilities: string[];
|
|
55
|
+
maxAgents: number;
|
|
56
|
+
currentAgents: number;
|
|
57
|
+
status: 'active' | 'inactive' | 'degraded';
|
|
58
|
+
registeredAt: Date;
|
|
59
|
+
lastHeartbeat: Date;
|
|
60
|
+
metadata?: Record<string, unknown>;
|
|
61
|
+
}
|
|
62
|
+
export interface EphemeralAgent {
|
|
63
|
+
id: EphemeralAgentId;
|
|
64
|
+
swarmId: SwarmId;
|
|
65
|
+
type: string;
|
|
66
|
+
task: string;
|
|
67
|
+
status: 'spawning' | 'active' | 'completing' | 'terminated';
|
|
68
|
+
ttl: number;
|
|
69
|
+
createdAt: Date;
|
|
70
|
+
expiresAt: Date;
|
|
71
|
+
completedAt?: Date;
|
|
72
|
+
result?: unknown;
|
|
73
|
+
error?: Error;
|
|
74
|
+
metadata?: Record<string, unknown>;
|
|
75
|
+
}
|
|
76
|
+
export interface SpawnEphemeralOptions {
|
|
77
|
+
/** Target swarm (auto-select if not specified) */
|
|
78
|
+
swarmId?: SwarmId;
|
|
79
|
+
/** Agent type */
|
|
80
|
+
type: string;
|
|
81
|
+
/** Task description */
|
|
82
|
+
task: string;
|
|
83
|
+
/** Time-to-live in ms (default from config) */
|
|
84
|
+
ttl?: number;
|
|
85
|
+
/** Required capabilities */
|
|
86
|
+
capabilities?: string[];
|
|
87
|
+
/** Priority for swarm selection */
|
|
88
|
+
priority?: 'low' | 'normal' | 'high' | 'critical';
|
|
89
|
+
/** Wait for completion */
|
|
90
|
+
waitForCompletion?: boolean;
|
|
91
|
+
/** Completion timeout (ms) */
|
|
92
|
+
completionTimeout?: number;
|
|
93
|
+
/** Additional metadata */
|
|
94
|
+
metadata?: Record<string, unknown>;
|
|
95
|
+
}
|
|
96
|
+
export interface SpawnResult {
|
|
97
|
+
agentId: EphemeralAgentId;
|
|
98
|
+
swarmId: SwarmId;
|
|
99
|
+
status: 'spawned' | 'queued' | 'failed';
|
|
100
|
+
estimatedTTL: number;
|
|
101
|
+
result?: unknown;
|
|
102
|
+
error?: string;
|
|
103
|
+
}
|
|
104
|
+
export interface FederationMessage {
|
|
105
|
+
id: string;
|
|
106
|
+
type: 'broadcast' | 'direct' | 'consensus' | 'heartbeat';
|
|
107
|
+
sourceSwarmId: SwarmId;
|
|
108
|
+
targetSwarmId?: SwarmId;
|
|
109
|
+
payload: unknown;
|
|
110
|
+
timestamp: Date;
|
|
111
|
+
ttl?: number;
|
|
112
|
+
}
|
|
113
|
+
export interface ConsensusProposal {
|
|
114
|
+
id: string;
|
|
115
|
+
proposerId: SwarmId;
|
|
116
|
+
type: string;
|
|
117
|
+
value: unknown;
|
|
118
|
+
votes: Map<SwarmId, boolean>;
|
|
119
|
+
status: 'pending' | 'accepted' | 'rejected';
|
|
120
|
+
createdAt: Date;
|
|
121
|
+
expiresAt: Date;
|
|
122
|
+
}
|
|
123
|
+
export interface FederationStats {
|
|
124
|
+
federationId: FederationId;
|
|
125
|
+
totalSwarms: number;
|
|
126
|
+
activeSwarms: number;
|
|
127
|
+
totalEphemeralAgents: number;
|
|
128
|
+
activeEphemeralAgents: number;
|
|
129
|
+
completedAgents: number;
|
|
130
|
+
failedAgents: number;
|
|
131
|
+
avgAgentLifespanMs: number;
|
|
132
|
+
messagesExchanged: number;
|
|
133
|
+
consensusProposals: number;
|
|
134
|
+
uptime: number;
|
|
135
|
+
}
|
|
136
|
+
export interface FederationEvent {
|
|
137
|
+
type: FederationEventType;
|
|
138
|
+
federationId: FederationId;
|
|
139
|
+
swarmId?: SwarmId;
|
|
140
|
+
agentId?: EphemeralAgentId;
|
|
141
|
+
data?: unknown;
|
|
142
|
+
timestamp: Date;
|
|
143
|
+
}
|
|
144
|
+
export type FederationEventType = 'swarm_joined' | 'swarm_left' | 'swarm_degraded' | 'agent_spawned' | 'agent_completed' | 'agent_failed' | 'agent_expired' | 'message_sent' | 'message_received' | 'consensus_started' | 'consensus_completed' | 'federation_synced';
|
|
145
|
+
export declare class FederationHub extends EventEmitter {
|
|
146
|
+
private config;
|
|
147
|
+
private swarms;
|
|
148
|
+
private ephemeralAgents;
|
|
149
|
+
private messages;
|
|
150
|
+
private proposals;
|
|
151
|
+
private syncInterval?;
|
|
152
|
+
private cleanupInterval?;
|
|
153
|
+
private startTime;
|
|
154
|
+
private stats;
|
|
155
|
+
/** Index: swarmId -> Set of agentIds */
|
|
156
|
+
private agentsBySwarm;
|
|
157
|
+
/** Index: status -> Set of agentIds */
|
|
158
|
+
private agentsByStatus;
|
|
159
|
+
constructor(config?: FederationConfig);
|
|
160
|
+
/**
|
|
161
|
+
* Add agent to indexes - O(1)
|
|
162
|
+
*/
|
|
163
|
+
private addAgentToIndexes;
|
|
164
|
+
/**
|
|
165
|
+
* Remove agent from indexes - O(1)
|
|
166
|
+
*/
|
|
167
|
+
private removeAgentFromIndexes;
|
|
168
|
+
/**
|
|
169
|
+
* Update agent status in index - O(1)
|
|
170
|
+
*/
|
|
171
|
+
private updateAgentStatusIndex;
|
|
172
|
+
/**
|
|
173
|
+
* Get agents by swarm using index - O(k) where k is agents in swarm
|
|
174
|
+
*/
|
|
175
|
+
private getAgentIdsBySwarm;
|
|
176
|
+
/**
|
|
177
|
+
* Get agents by status using index - O(k) where k is agents with status
|
|
178
|
+
*/
|
|
179
|
+
private getAgentIdsByStatus;
|
|
180
|
+
/**
|
|
181
|
+
* Initialize the federation hub
|
|
182
|
+
*/
|
|
183
|
+
initialize(): Promise<void>;
|
|
184
|
+
/**
|
|
185
|
+
* Shutdown the federation hub
|
|
186
|
+
*/
|
|
187
|
+
shutdown(): Promise<void>;
|
|
188
|
+
/**
|
|
189
|
+
* Register a swarm with the federation
|
|
190
|
+
*/
|
|
191
|
+
registerSwarm(registration: Omit<SwarmRegistration, 'registeredAt' | 'lastHeartbeat'>): void;
|
|
192
|
+
/**
|
|
193
|
+
* Unregister a swarm from the federation
|
|
194
|
+
*/
|
|
195
|
+
unregisterSwarm(swarmId: SwarmId): boolean;
|
|
196
|
+
/**
|
|
197
|
+
* Update swarm heartbeat
|
|
198
|
+
*/
|
|
199
|
+
heartbeat(swarmId: SwarmId, currentAgents?: number): boolean;
|
|
200
|
+
/**
|
|
201
|
+
* Get all registered swarms
|
|
202
|
+
*/
|
|
203
|
+
getSwarms(): SwarmRegistration[];
|
|
204
|
+
/**
|
|
205
|
+
* Get swarm by ID
|
|
206
|
+
*/
|
|
207
|
+
getSwarm(swarmId: SwarmId): SwarmRegistration | undefined;
|
|
208
|
+
/**
|
|
209
|
+
* Spawn an ephemeral agent
|
|
210
|
+
*/
|
|
211
|
+
spawnEphemeralAgent(options: SpawnEphemeralOptions): Promise<SpawnResult>;
|
|
212
|
+
/**
|
|
213
|
+
* Complete an ephemeral agent's task
|
|
214
|
+
*/
|
|
215
|
+
completeAgent(agentId: EphemeralAgentId, result?: unknown): boolean;
|
|
216
|
+
/**
|
|
217
|
+
* Terminate an ephemeral agent
|
|
218
|
+
*/
|
|
219
|
+
terminateAgent(agentId: EphemeralAgentId, error?: Error): Promise<boolean>;
|
|
220
|
+
/**
|
|
221
|
+
* Get ephemeral agent by ID
|
|
222
|
+
*/
|
|
223
|
+
getAgent(agentId: EphemeralAgentId): EphemeralAgent | undefined;
|
|
224
|
+
/**
|
|
225
|
+
* Get all ephemeral agents
|
|
226
|
+
*/
|
|
227
|
+
getAgents(swarmId?: SwarmId): EphemeralAgent[];
|
|
228
|
+
/**
|
|
229
|
+
* Get active ephemeral agents
|
|
230
|
+
*/
|
|
231
|
+
getActiveAgents(swarmId?: SwarmId): EphemeralAgent[];
|
|
232
|
+
/**
|
|
233
|
+
* Send a message to another swarm
|
|
234
|
+
*/
|
|
235
|
+
sendMessage(sourceSwarmId: SwarmId, targetSwarmId: SwarmId, payload: unknown): Promise<boolean>;
|
|
236
|
+
/**
|
|
237
|
+
* Broadcast a message to all swarms
|
|
238
|
+
*/
|
|
239
|
+
broadcast(sourceSwarmId: SwarmId, payload: unknown): Promise<number>;
|
|
240
|
+
/**
|
|
241
|
+
* Get recent messages
|
|
242
|
+
*/
|
|
243
|
+
getMessages(limit?: number): FederationMessage[];
|
|
244
|
+
/**
|
|
245
|
+
* Propose a value for federation-wide consensus
|
|
246
|
+
*/
|
|
247
|
+
propose(proposerId: SwarmId, type: string, value: unknown, timeoutMs?: number): Promise<ConsensusProposal>;
|
|
248
|
+
/**
|
|
249
|
+
* Vote on a proposal
|
|
250
|
+
*/
|
|
251
|
+
vote(swarmId: SwarmId, proposalId: string, approve: boolean): boolean;
|
|
252
|
+
/**
|
|
253
|
+
* Get proposal by ID
|
|
254
|
+
*/
|
|
255
|
+
getProposal(proposalId: string): ConsensusProposal | undefined;
|
|
256
|
+
/**
|
|
257
|
+
* Get all pending proposals
|
|
258
|
+
*/
|
|
259
|
+
getPendingProposals(): ConsensusProposal[];
|
|
260
|
+
/**
|
|
261
|
+
* Get federation statistics
|
|
262
|
+
*/
|
|
263
|
+
getStats(): FederationStats;
|
|
264
|
+
private selectOptimalSwarm;
|
|
265
|
+
private getSwarmAgentCount;
|
|
266
|
+
private getActiveSwarmCount;
|
|
267
|
+
private waitForAgentCompletion;
|
|
268
|
+
private syncFederation;
|
|
269
|
+
private cleanupExpiredAgents;
|
|
270
|
+
private emitEvent;
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Create a new Federation Hub instance
|
|
274
|
+
*/
|
|
275
|
+
export declare function createFederationHub(config?: FederationConfig): FederationHub;
|
|
276
|
+
/**
|
|
277
|
+
* Get or create the default federation hub
|
|
278
|
+
*/
|
|
279
|
+
export declare function getDefaultFederationHub(): FederationHub;
|
|
280
|
+
/**
|
|
281
|
+
* Reset the default federation hub
|
|
282
|
+
*/
|
|
283
|
+
export declare function resetDefaultFederationHub(): Promise<void>;
|
|
284
|
+
//# sourceMappingURL=federation-hub.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"federation-hub.d.ts","sourceRoot":"","sources":["../src/federation-hub.ts"],"names":[],"mappings":"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"}
|