@sparkleideas/swarm 3.0.0-alpha.6-patch.25 → 3.0.0-alpha.6-patch.27

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 (126) hide show
  1. package/dist/agent-pool.d.ts +52 -0
  2. package/dist/agent-pool.d.ts.map +1 -0
  3. package/dist/agent-pool.js +365 -0
  4. package/dist/agent-pool.js.map +1 -0
  5. package/dist/application/commands/create-task.command.d.ts +64 -0
  6. package/dist/application/commands/create-task.command.d.ts.map +1 -0
  7. package/dist/application/commands/create-task.command.js +77 -0
  8. package/dist/application/commands/create-task.command.js.map +1 -0
  9. package/dist/application/commands/spawn-agent.command.d.ts +63 -0
  10. package/dist/application/commands/spawn-agent.command.d.ts.map +1 -0
  11. package/dist/application/commands/spawn-agent.command.js +74 -0
  12. package/dist/application/commands/spawn-agent.command.js.map +1 -0
  13. package/dist/application/index.d.ts +9 -0
  14. package/dist/application/index.d.ts.map +1 -0
  15. package/dist/application/index.js +11 -0
  16. package/dist/application/index.js.map +1 -0
  17. package/dist/application/services/swarm-application-service.d.ts +112 -0
  18. package/dist/application/services/swarm-application-service.d.ts.map +1 -0
  19. package/dist/application/services/swarm-application-service.js +153 -0
  20. package/dist/application/services/swarm-application-service.js.map +1 -0
  21. package/dist/attention-coordinator.d.ts +212 -0
  22. package/dist/attention-coordinator.d.ts.map +1 -0
  23. package/dist/attention-coordinator.js +667 -0
  24. package/dist/attention-coordinator.js.map +1 -0
  25. package/dist/consensus/byzantine.d.ts +63 -0
  26. package/dist/consensus/byzantine.d.ts.map +1 -0
  27. package/dist/consensus/byzantine.js +316 -0
  28. package/dist/consensus/byzantine.js.map +1 -0
  29. package/dist/consensus/gossip.d.ts +69 -0
  30. package/dist/consensus/gossip.d.ts.map +1 -0
  31. package/dist/consensus/gossip.js +378 -0
  32. package/dist/consensus/gossip.js.map +1 -0
  33. package/dist/consensus/index.d.ts +49 -0
  34. package/dist/consensus/index.d.ts.map +1 -0
  35. package/dist/consensus/index.js +203 -0
  36. package/dist/consensus/index.js.map +1 -0
  37. package/dist/consensus/raft.d.ts +62 -0
  38. package/dist/consensus/raft.d.ts.map +1 -0
  39. package/dist/consensus/raft.js +324 -0
  40. package/dist/consensus/raft.js.map +1 -0
  41. package/dist/coordination/agent-registry.d.ts +68 -0
  42. package/dist/coordination/agent-registry.d.ts.map +1 -0
  43. package/dist/coordination/agent-registry.js +412 -0
  44. package/dist/coordination/agent-registry.js.map +1 -0
  45. package/dist/coordination/index.d.ts +8 -0
  46. package/dist/coordination/index.d.ts.map +1 -0
  47. package/dist/coordination/index.js +8 -0
  48. package/dist/coordination/index.js.map +1 -0
  49. package/dist/coordination/swarm-hub.d.ts +150 -0
  50. package/dist/coordination/swarm-hub.d.ts.map +1 -0
  51. package/dist/coordination/swarm-hub.js +617 -0
  52. package/dist/coordination/swarm-hub.js.map +1 -0
  53. package/dist/coordination/task-orchestrator.d.ts +96 -0
  54. package/dist/coordination/task-orchestrator.d.ts.map +1 -0
  55. package/dist/coordination/task-orchestrator.js +412 -0
  56. package/dist/coordination/task-orchestrator.js.map +1 -0
  57. package/dist/domain/entities/agent.d.ts +151 -0
  58. package/dist/domain/entities/agent.d.ts.map +1 -0
  59. package/dist/domain/entities/agent.js +280 -0
  60. package/dist/domain/entities/agent.js.map +1 -0
  61. package/dist/domain/entities/task.d.ts +133 -0
  62. package/dist/domain/entities/task.d.ts.map +1 -0
  63. package/dist/domain/entities/task.js +261 -0
  64. package/dist/domain/entities/task.js.map +1 -0
  65. package/dist/domain/index.d.ts +11 -0
  66. package/dist/domain/index.d.ts.map +1 -0
  67. package/dist/domain/index.js +11 -0
  68. package/dist/domain/index.js.map +1 -0
  69. package/dist/domain/repositories/agent-repository.interface.d.ts +57 -0
  70. package/dist/domain/repositories/agent-repository.interface.d.ts.map +1 -0
  71. package/dist/domain/repositories/agent-repository.interface.js +9 -0
  72. package/dist/domain/repositories/agent-repository.interface.js.map +1 -0
  73. package/dist/domain/repositories/task-repository.interface.d.ts +61 -0
  74. package/dist/domain/repositories/task-repository.interface.d.ts.map +1 -0
  75. package/dist/domain/repositories/task-repository.interface.js +9 -0
  76. package/dist/domain/repositories/task-repository.interface.js.map +1 -0
  77. package/dist/domain/services/coordination-service.d.ts +84 -0
  78. package/dist/domain/services/coordination-service.d.ts.map +1 -0
  79. package/dist/domain/services/coordination-service.js +231 -0
  80. package/dist/domain/services/coordination-service.js.map +1 -0
  81. package/dist/federation-hub.d.ts +284 -0
  82. package/dist/federation-hub.d.ts.map +1 -0
  83. package/dist/federation-hub.js +692 -0
  84. package/dist/federation-hub.js.map +1 -0
  85. package/dist/index.d.ts +107 -0
  86. package/dist/index.d.ts.map +1 -0
  87. package/dist/index.js +142 -0
  88. package/dist/index.js.map +1 -0
  89. package/dist/message-bus.d.ts +48 -0
  90. package/dist/message-bus.d.ts.map +1 -0
  91. package/dist/message-bus.js +499 -0
  92. package/dist/message-bus.js.map +1 -0
  93. package/dist/queen-coordinator.d.ts +577 -0
  94. package/dist/queen-coordinator.d.ts.map +1 -0
  95. package/dist/queen-coordinator.js +1308 -0
  96. package/dist/queen-coordinator.js.map +1 -0
  97. package/dist/shared/events.d.ts +63 -0
  98. package/dist/shared/events.d.ts.map +1 -0
  99. package/dist/shared/events.js +203 -0
  100. package/dist/shared/events.js.map +1 -0
  101. package/dist/shared/types.d.ts +212 -0
  102. package/dist/shared/types.d.ts.map +1 -0
  103. package/dist/shared/types.js +22 -0
  104. package/dist/shared/types.js.map +1 -0
  105. package/dist/topology-manager.d.ts +62 -0
  106. package/dist/topology-manager.d.ts.map +1 -0
  107. package/dist/topology-manager.js +538 -0
  108. package/dist/topology-manager.js.map +1 -0
  109. package/dist/types.d.ts +353 -0
  110. package/dist/types.d.ts.map +1 -0
  111. package/dist/types.js +43 -0
  112. package/dist/types.js.map +1 -0
  113. package/dist/unified-coordinator.d.ts +260 -0
  114. package/dist/unified-coordinator.d.ts.map +1 -0
  115. package/dist/unified-coordinator.js +1460 -0
  116. package/dist/unified-coordinator.js.map +1 -0
  117. package/dist/workers/index.d.ts +29 -0
  118. package/dist/workers/index.d.ts.map +1 -0
  119. package/dist/workers/index.js +49 -0
  120. package/dist/workers/index.js.map +1 -0
  121. package/dist/workers/worker-dispatch.d.ts +239 -0
  122. package/dist/workers/worker-dispatch.d.ts.map +1 -0
  123. package/dist/workers/worker-dispatch.js +846 -0
  124. package/dist/workers/worker-dispatch.js.map +1 -0
  125. package/package.json +1 -1
  126. package/tsconfig.build.tsbuildinfo +1 -0
@@ -0,0 +1,62 @@
1
+ /**
2
+ * V3 Topology Manager
3
+ * Manages swarm network topology with support for mesh, hierarchical, centralized, and hybrid modes
4
+ */
5
+ import { EventEmitter } from 'events';
6
+ import { TopologyConfig, TopologyState, TopologyNode, TopologyPartition, ITopologyManager } from './types.js';
7
+ export declare class TopologyManager extends EventEmitter implements ITopologyManager {
8
+ private config;
9
+ private state;
10
+ private nodeIndex;
11
+ private adjacencyList;
12
+ private lastRebalance;
13
+ private roleIndex;
14
+ private queenNode;
15
+ private coordinatorNode;
16
+ constructor(config?: Partial<TopologyConfig>);
17
+ initialize(config?: TopologyConfig): Promise<void>;
18
+ getState(): TopologyState;
19
+ addNode(agentId: string, role: TopologyNode['role']): Promise<TopologyNode>;
20
+ removeNode(agentId: string): Promise<void>;
21
+ updateNode(agentId: string, updates: Partial<TopologyNode>): Promise<void>;
22
+ getLeader(): string | undefined;
23
+ electLeader(): Promise<string>;
24
+ rebalance(): Promise<void>;
25
+ getNeighbors(agentId: string): string[];
26
+ findOptimalPath(from: string, to: string): string[];
27
+ private determineRole;
28
+ private hasQueen;
29
+ private calculateInitialConnections;
30
+ private createEdgesForNode;
31
+ private updatePartitions;
32
+ private shouldRebalance;
33
+ private rebalanceMesh;
34
+ private rebalanceHierarchical;
35
+ private rebalanceCentralized;
36
+ private rebalanceHybrid;
37
+ /**
38
+ * Add node to role index
39
+ */
40
+ private addToRoleIndex;
41
+ /**
42
+ * Remove node from role index
43
+ */
44
+ private removeFromRoleIndex;
45
+ /**
46
+ * Get queen node with O(1) lookup
47
+ */
48
+ getQueen(): TopologyNode | undefined;
49
+ /**
50
+ * Get coordinator node with O(1) lookup
51
+ */
52
+ getCoordinator(): TopologyNode | undefined;
53
+ getNode(agentId: string): TopologyNode | undefined;
54
+ getNodesByRole(role: TopologyNode['role']): TopologyNode[];
55
+ getActiveNodes(): TopologyNode[];
56
+ getPartition(partitionId: string): TopologyPartition | undefined;
57
+ isConnected(from: string, to: string): boolean;
58
+ getConnectionCount(): number;
59
+ getAverageConnections(): number;
60
+ }
61
+ export declare function createTopologyManager(config?: Partial<TopologyConfig>): TopologyManager;
62
+ //# sourceMappingURL=topology-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topology-manager.d.ts","sourceRoot":"","sources":["../src/topology-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EACL,cAAc,EACd,aAAa,EACb,YAAY,EAEZ,iBAAiB,EAEjB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAEpB,qBAAa,eAAgB,SAAQ,YAAa,YAAW,gBAAgB;IAC3E,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,SAAS,CAAwC;IACzD,OAAO,CAAC,aAAa,CAAuC;IAC5D,OAAO,CAAC,aAAa,CAAoB;IAGzC,OAAO,CAAC,SAAS,CAAqD;IACtE,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,eAAe,CAA6B;gBAExC,MAAM,GAAE,OAAO,CAAC,cAAc,CAAM;IAoB1C,UAAU,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IASxD,QAAQ,IAAI,aAAa;IASnB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IAqD3E,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkD1C,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBhF,SAAS,IAAI,MAAM,GAAG,SAAS;IAIzB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAiD9B,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IA6BhC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAIvC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE;IAmCnD,OAAO,CAAC,aAAa;IAqBrB,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,2BAA2B;YAiCrB,kBAAkB;YAuBlB,gBAAgB;IA6B9B,OAAO,CAAC,eAAe;YAiBT,aAAa;YA2Bb,qBAAqB;YA0BrB,oBAAoB;YAyBpB,eAAe;IA8C7B;;OAEG;IACH,OAAO,CAAC,cAAc;IAgBtB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAc3B;;OAEG;IACH,QAAQ,IAAI,YAAY,GAAG,SAAS;IAIpC;;OAEG;IACH,cAAc,IAAI,YAAY,GAAG,SAAS;IAM1C,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIlD,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,YAAY,EAAE;IAa1D,cAAc,IAAI,YAAY,EAAE;IAIhC,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAIhE,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO;IAI9C,kBAAkB,IAAI,MAAM;IAI5B,qBAAqB,IAAI,MAAM;CAKhC;AAED,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,eAAe,CAEvF"}
@@ -0,0 +1,538 @@
1
+ /**
2
+ * V3 Topology Manager
3
+ * Manages swarm network topology with support for mesh, hierarchical, centralized, and hybrid modes
4
+ */
5
+ import { EventEmitter } from 'events';
6
+ export class TopologyManager extends EventEmitter {
7
+ config;
8
+ state;
9
+ nodeIndex = new Map();
10
+ adjacencyList = new Map();
11
+ lastRebalance = new Date();
12
+ // O(1) role-based indexes for performance (fixes O(n) find operations)
13
+ roleIndex = new Map();
14
+ queenNode = null;
15
+ coordinatorNode = null;
16
+ constructor(config = {}) {
17
+ super();
18
+ this.config = {
19
+ type: config.type ?? 'mesh',
20
+ maxAgents: config.maxAgents ?? 100,
21
+ replicationFactor: config.replicationFactor ?? 2,
22
+ partitionStrategy: config.partitionStrategy ?? 'hash',
23
+ failoverEnabled: config.failoverEnabled ?? true,
24
+ autoRebalance: config.autoRebalance ?? true,
25
+ };
26
+ this.state = {
27
+ type: this.config.type,
28
+ nodes: [],
29
+ edges: [],
30
+ leader: undefined,
31
+ partitions: [],
32
+ };
33
+ }
34
+ async initialize(config) {
35
+ if (config) {
36
+ this.config = { ...this.config, ...config };
37
+ this.state.type = this.config.type;
38
+ }
39
+ this.emit('initialized', { type: this.config.type });
40
+ }
41
+ getState() {
42
+ return {
43
+ ...this.state,
44
+ nodes: [...this.state.nodes],
45
+ edges: [...this.state.edges],
46
+ partitions: [...this.state.partitions],
47
+ };
48
+ }
49
+ async addNode(agentId, role) {
50
+ if (this.nodeIndex.has(agentId)) {
51
+ throw new Error(`Node ${agentId} already exists in topology`);
52
+ }
53
+ if (this.nodeIndex.size >= this.config.maxAgents) {
54
+ throw new Error(`Maximum agents (${this.config.maxAgents}) reached`);
55
+ }
56
+ // Create node with connections based on topology type
57
+ const connections = this.calculateInitialConnections(agentId, role);
58
+ const node = {
59
+ id: `node_${agentId}`,
60
+ agentId,
61
+ role: this.determineRole(role),
62
+ status: 'syncing',
63
+ connections,
64
+ metadata: {
65
+ joinedAt: new Date().toISOString(),
66
+ version: '1.0.0',
67
+ },
68
+ };
69
+ // Add to state
70
+ this.nodeIndex.set(agentId, node);
71
+ this.state.nodes.push(node);
72
+ // Update role index for O(1) role-based lookups
73
+ this.addToRoleIndex(node);
74
+ // Initialize adjacency list
75
+ this.adjacencyList.set(agentId, new Set(connections));
76
+ // Create edges
77
+ await this.createEdgesForNode(node);
78
+ // Update partitions if needed
79
+ await this.updatePartitions(node);
80
+ // Mark as active after sync
81
+ node.status = 'active';
82
+ this.emit('node.added', { node });
83
+ // Trigger rebalance if needed
84
+ if (this.config.autoRebalance && this.shouldRebalance()) {
85
+ await this.rebalance();
86
+ }
87
+ return node;
88
+ }
89
+ async removeNode(agentId) {
90
+ const node = this.nodeIndex.get(agentId);
91
+ if (!node) {
92
+ return;
93
+ }
94
+ // Remove from state
95
+ this.state.nodes = this.state.nodes.filter(n => n.agentId !== agentId);
96
+ this.nodeIndex.delete(agentId);
97
+ // Update role index
98
+ this.removeFromRoleIndex(node);
99
+ // Remove all edges connected to this node
100
+ this.state.edges = this.state.edges.filter(e => e.from !== agentId && e.to !== agentId);
101
+ // Update adjacency list
102
+ this.adjacencyList.delete(agentId);
103
+ for (const neighbors of this.adjacencyList.values()) {
104
+ neighbors.delete(agentId);
105
+ }
106
+ // Update all nodes' connections
107
+ for (const n of this.state.nodes) {
108
+ n.connections = n.connections.filter(c => c !== agentId);
109
+ }
110
+ // If this was the leader, elect new one
111
+ if (this.state.leader === agentId) {
112
+ await this.electLeader();
113
+ }
114
+ // Update partitions
115
+ for (const partition of this.state.partitions) {
116
+ partition.nodes = partition.nodes.filter(n => n !== agentId);
117
+ if (partition.leader === agentId) {
118
+ partition.leader = partition.nodes[0] || '';
119
+ }
120
+ }
121
+ this.emit('node.removed', { agentId });
122
+ // Trigger rebalance if needed
123
+ if (this.config.autoRebalance) {
124
+ await this.rebalance();
125
+ }
126
+ }
127
+ async updateNode(agentId, updates) {
128
+ const node = this.nodeIndex.get(agentId);
129
+ if (!node) {
130
+ throw new Error(`Node ${agentId} not found`);
131
+ }
132
+ // Apply updates
133
+ if (updates.role !== undefined)
134
+ node.role = updates.role;
135
+ if (updates.status !== undefined)
136
+ node.status = updates.status;
137
+ if (updates.connections !== undefined) {
138
+ node.connections = updates.connections;
139
+ this.adjacencyList.set(agentId, new Set(updates.connections));
140
+ }
141
+ if (updates.metadata !== undefined) {
142
+ node.metadata = { ...node.metadata, ...updates.metadata };
143
+ }
144
+ this.emit('node.updated', { agentId, updates });
145
+ }
146
+ getLeader() {
147
+ return this.state.leader;
148
+ }
149
+ async electLeader() {
150
+ if (this.state.nodes.length === 0) {
151
+ throw new Error('No nodes available for leader election');
152
+ }
153
+ // For hierarchical topology, the queen is the leader (O(1) lookup)
154
+ if (this.config.type === 'hierarchical') {
155
+ const queen = this.queenNode;
156
+ if (queen) {
157
+ this.state.leader = queen.agentId;
158
+ return queen.agentId;
159
+ }
160
+ }
161
+ // For centralized topology, the coordinator is the leader (O(1) lookup)
162
+ if (this.config.type === 'centralized') {
163
+ const coordinator = this.coordinatorNode;
164
+ if (coordinator) {
165
+ this.state.leader = coordinator.agentId;
166
+ return coordinator.agentId;
167
+ }
168
+ }
169
+ // For mesh/hybrid, elect based on node capabilities
170
+ const candidates = this.state.nodes
171
+ .filter(n => n.status === 'active')
172
+ .sort((a, b) => {
173
+ // Prefer coordinators, then queens
174
+ const roleOrder = {
175
+ queen: 0,
176
+ coordinator: 1,
177
+ worker: 2,
178
+ peer: 2,
179
+ };
180
+ return roleOrder[a.role] - roleOrder[b.role];
181
+ });
182
+ if (candidates.length === 0) {
183
+ throw new Error('No active nodes available for leader election');
184
+ }
185
+ const leader = candidates[0];
186
+ this.state.leader = leader.agentId;
187
+ this.emit('leader.elected', { leaderId: leader.agentId });
188
+ return leader.agentId;
189
+ }
190
+ async rebalance() {
191
+ const now = new Date();
192
+ const timeSinceLastRebalance = now.getTime() - this.lastRebalance.getTime();
193
+ // Prevent too frequent rebalancing
194
+ if (timeSinceLastRebalance < 5000) {
195
+ return;
196
+ }
197
+ this.lastRebalance = now;
198
+ switch (this.config.type) {
199
+ case 'mesh':
200
+ await this.rebalanceMesh();
201
+ break;
202
+ case 'hierarchical':
203
+ await this.rebalanceHierarchical();
204
+ break;
205
+ case 'centralized':
206
+ await this.rebalanceCentralized();
207
+ break;
208
+ case 'hybrid':
209
+ await this.rebalanceHybrid();
210
+ break;
211
+ }
212
+ this.emit('topology.rebalanced', { type: this.config.type });
213
+ }
214
+ getNeighbors(agentId) {
215
+ return Array.from(this.adjacencyList.get(agentId) || []);
216
+ }
217
+ findOptimalPath(from, to) {
218
+ if (from === to) {
219
+ return [from];
220
+ }
221
+ // BFS for shortest path
222
+ const visited = new Set();
223
+ const queue = [{ node: from, path: [from] }];
224
+ while (queue.length > 0) {
225
+ const { node, path } = queue.shift();
226
+ if (node === to) {
227
+ return path;
228
+ }
229
+ if (visited.has(node)) {
230
+ continue;
231
+ }
232
+ visited.add(node);
233
+ const neighbors = this.adjacencyList.get(node) || new Set();
234
+ for (const neighbor of neighbors) {
235
+ if (!visited.has(neighbor)) {
236
+ queue.push({ node: neighbor, path: [...path, neighbor] });
237
+ }
238
+ }
239
+ }
240
+ // No path found
241
+ return [];
242
+ }
243
+ // ===== PRIVATE METHODS =====
244
+ determineRole(requestedRole) {
245
+ switch (this.config.type) {
246
+ case 'mesh':
247
+ return 'peer';
248
+ case 'hierarchical':
249
+ // First node becomes queen
250
+ if (this.state.nodes.length === 0) {
251
+ return 'queen';
252
+ }
253
+ return requestedRole === 'queen' && !this.hasQueen() ? 'queen' : 'worker';
254
+ case 'centralized':
255
+ // First node becomes coordinator
256
+ if (this.state.nodes.length === 0) {
257
+ return 'coordinator';
258
+ }
259
+ return 'worker';
260
+ case 'hybrid':
261
+ return requestedRole;
262
+ }
263
+ }
264
+ hasQueen() {
265
+ return this.queenNode !== null; // O(1) check using cached queen
266
+ }
267
+ calculateInitialConnections(agentId, role) {
268
+ const existingNodes = Array.from(this.nodeIndex.keys());
269
+ switch (this.config.type) {
270
+ case 'mesh':
271
+ // In mesh, connect to all existing nodes (up to a limit)
272
+ const maxMeshConnections = Math.min(10, existingNodes.length);
273
+ return existingNodes.slice(0, maxMeshConnections);
274
+ case 'hierarchical':
275
+ // Workers connect to queen, queen connects to workers (O(1) lookup)
276
+ if (role === 'queen' || existingNodes.length === 0) {
277
+ return existingNodes;
278
+ }
279
+ return this.queenNode ? [this.queenNode.agentId] : [];
280
+ case 'centralized':
281
+ // All nodes connect to coordinator (O(1) lookup)
282
+ if (role === 'coordinator' || existingNodes.length === 0) {
283
+ return existingNodes;
284
+ }
285
+ return this.coordinatorNode ? [this.coordinatorNode.agentId] : [];
286
+ case 'hybrid':
287
+ // Mix of mesh and hierarchical
288
+ const leaders = this.state.nodes.filter(n => n.role === 'queen' || n.role === 'coordinator');
289
+ const peers = existingNodes.slice(0, 3);
290
+ return [...new Set([...leaders.map(l => l.agentId), ...peers])];
291
+ }
292
+ }
293
+ async createEdgesForNode(node) {
294
+ for (const connectionId of node.connections) {
295
+ const edge = {
296
+ from: node.agentId,
297
+ to: connectionId,
298
+ weight: 1,
299
+ bidirectional: this.config.type === 'mesh',
300
+ latencyMs: 0,
301
+ };
302
+ this.state.edges.push(edge);
303
+ // Add bidirectional edge
304
+ if (edge.bidirectional) {
305
+ const existingNode = this.nodeIndex.get(connectionId);
306
+ if (existingNode && !existingNode.connections.includes(node.agentId)) {
307
+ existingNode.connections.push(node.agentId);
308
+ this.adjacencyList.get(connectionId)?.add(node.agentId);
309
+ }
310
+ }
311
+ }
312
+ }
313
+ async updatePartitions(node) {
314
+ if (this.config.type !== 'mesh' && this.config.type !== 'hybrid') {
315
+ return;
316
+ }
317
+ // Create partitions based on strategy
318
+ const nodesPerPartition = Math.ceil(this.config.maxAgents / 10);
319
+ const partitionIndex = Math.floor(this.state.nodes.length / nodesPerPartition);
320
+ if (this.state.partitions.length <= partitionIndex) {
321
+ // Create new partition
322
+ const partition = {
323
+ id: `partition_${partitionIndex}`,
324
+ nodes: [node.agentId],
325
+ leader: node.agentId,
326
+ replicaCount: 1,
327
+ };
328
+ this.state.partitions.push(partition);
329
+ }
330
+ else {
331
+ // Add to existing partition
332
+ const partition = this.state.partitions[partitionIndex];
333
+ partition.nodes.push(node.agentId);
334
+ partition.replicaCount = Math.min(partition.nodes.length, this.config.replicationFactor ?? 2);
335
+ }
336
+ }
337
+ shouldRebalance() {
338
+ // Check for uneven distribution
339
+ if (this.config.type === 'mesh') {
340
+ const avgConnections = this.state.nodes.reduce((sum, n) => sum + n.connections.length, 0) / Math.max(1, this.state.nodes.length);
341
+ for (const node of this.state.nodes) {
342
+ if (Math.abs(node.connections.length - avgConnections) > avgConnections * 0.5) {
343
+ return true;
344
+ }
345
+ }
346
+ }
347
+ return false;
348
+ }
349
+ async rebalanceMesh() {
350
+ const targetConnections = Math.min(5, this.state.nodes.length - 1);
351
+ for (const node of this.state.nodes) {
352
+ // Ensure minimum connections
353
+ while (node.connections.length < targetConnections) {
354
+ const candidates = this.state.nodes
355
+ .filter(n => n.agentId !== node.agentId &&
356
+ !node.connections.includes(n.agentId))
357
+ .sort(() => Math.random() - 0.5);
358
+ if (candidates.length > 0) {
359
+ node.connections.push(candidates[0].agentId);
360
+ this.adjacencyList.get(node.agentId)?.add(candidates[0].agentId);
361
+ // Bidirectional
362
+ candidates[0].connections.push(node.agentId);
363
+ this.adjacencyList.get(candidates[0].agentId)?.add(node.agentId);
364
+ }
365
+ else {
366
+ break;
367
+ }
368
+ }
369
+ }
370
+ }
371
+ async rebalanceHierarchical() {
372
+ // O(1) queen lookup
373
+ let queen = this.queenNode;
374
+ if (!queen) {
375
+ // Elect a queen if missing
376
+ if (this.state.nodes.length > 0) {
377
+ const newQueen = this.state.nodes[0];
378
+ newQueen.role = 'queen';
379
+ this.addToRoleIndex(newQueen);
380
+ queen = newQueen;
381
+ }
382
+ else {
383
+ return;
384
+ }
385
+ }
386
+ // Ensure all workers are connected to queen
387
+ for (const node of this.state.nodes) {
388
+ if (node.role === 'worker' && !node.connections.includes(queen.agentId)) {
389
+ node.connections.push(queen.agentId);
390
+ this.adjacencyList.get(node.agentId)?.add(queen.agentId);
391
+ queen.connections.push(node.agentId);
392
+ this.adjacencyList.get(queen.agentId)?.add(node.agentId);
393
+ }
394
+ }
395
+ }
396
+ async rebalanceCentralized() {
397
+ // O(1) coordinator lookup
398
+ let coordinator = this.coordinatorNode;
399
+ if (!coordinator) {
400
+ if (this.state.nodes.length > 0) {
401
+ const newCoord = this.state.nodes[0];
402
+ newCoord.role = 'coordinator';
403
+ this.addToRoleIndex(newCoord);
404
+ coordinator = newCoord;
405
+ }
406
+ else {
407
+ return;
408
+ }
409
+ }
410
+ // Ensure all nodes are connected to coordinator
411
+ for (const node of this.state.nodes) {
412
+ if (node.role !== 'coordinator' && !node.connections.includes(coordinator.agentId)) {
413
+ node.connections = [coordinator.agentId];
414
+ this.adjacencyList.set(node.agentId, new Set([coordinator.agentId]));
415
+ coordinator.connections.push(node.agentId);
416
+ this.adjacencyList.get(coordinator.agentId)?.add(node.agentId);
417
+ }
418
+ }
419
+ }
420
+ async rebalanceHybrid() {
421
+ // Hybrid combines mesh for workers and hierarchical for coordinators
422
+ const coordinators = this.state.nodes.filter(n => n.role === 'queen' || n.role === 'coordinator');
423
+ const workers = this.state.nodes.filter(n => n.role === 'worker' || n.role === 'peer');
424
+ // Connect workers in mesh (limited connections)
425
+ for (const worker of workers) {
426
+ const targetConnections = Math.min(3, workers.length - 1);
427
+ const currentWorkerConnections = worker.connections.filter(c => workers.some(w => w.agentId === c));
428
+ while (currentWorkerConnections.length < targetConnections) {
429
+ const candidates = workers.filter(w => w.agentId !== worker.agentId && !currentWorkerConnections.includes(w.agentId));
430
+ if (candidates.length === 0)
431
+ break;
432
+ const target = candidates[Math.floor(Math.random() * candidates.length)];
433
+ worker.connections.push(target.agentId);
434
+ currentWorkerConnections.push(target.agentId);
435
+ this.adjacencyList.get(worker.agentId)?.add(target.agentId);
436
+ }
437
+ }
438
+ // Connect all workers to at least one coordinator
439
+ if (coordinators.length > 0) {
440
+ for (const worker of workers) {
441
+ const hasCoordinator = worker.connections.some(c => coordinators.some(coord => coord.agentId === c));
442
+ if (!hasCoordinator) {
443
+ const coord = coordinators[Math.floor(Math.random() * coordinators.length)];
444
+ worker.connections.push(coord.agentId);
445
+ this.adjacencyList.get(worker.agentId)?.add(coord.agentId);
446
+ coord.connections.push(worker.agentId);
447
+ this.adjacencyList.get(coord.agentId)?.add(worker.agentId);
448
+ }
449
+ }
450
+ }
451
+ }
452
+ // ===== ROLE INDEX METHODS (O(1) lookups) =====
453
+ /**
454
+ * Add node to role index
455
+ */
456
+ addToRoleIndex(node) {
457
+ let roleSet = this.roleIndex.get(node.role);
458
+ if (!roleSet) {
459
+ roleSet = new Set();
460
+ this.roleIndex.set(node.role, roleSet);
461
+ }
462
+ roleSet.add(node.agentId);
463
+ // Cache queen/coordinator for O(1) access
464
+ if (node.role === 'queen') {
465
+ this.queenNode = node;
466
+ }
467
+ else if (node.role === 'coordinator') {
468
+ this.coordinatorNode = node;
469
+ }
470
+ }
471
+ /**
472
+ * Remove node from role index
473
+ */
474
+ removeFromRoleIndex(node) {
475
+ const roleSet = this.roleIndex.get(node.role);
476
+ if (roleSet) {
477
+ roleSet.delete(node.agentId);
478
+ }
479
+ // Clear cached queen/coordinator
480
+ if (node.role === 'queen' && this.queenNode?.agentId === node.agentId) {
481
+ this.queenNode = null;
482
+ }
483
+ else if (node.role === 'coordinator' && this.coordinatorNode?.agentId === node.agentId) {
484
+ this.coordinatorNode = null;
485
+ }
486
+ }
487
+ /**
488
+ * Get queen node with O(1) lookup
489
+ */
490
+ getQueen() {
491
+ return this.queenNode ?? undefined;
492
+ }
493
+ /**
494
+ * Get coordinator node with O(1) lookup
495
+ */
496
+ getCoordinator() {
497
+ return this.coordinatorNode ?? undefined;
498
+ }
499
+ // ===== UTILITY METHODS =====
500
+ getNode(agentId) {
501
+ return this.nodeIndex.get(agentId);
502
+ }
503
+ getNodesByRole(role) {
504
+ // Use role index for O(1) id lookup, then O(k) node retrieval where k = nodes with role
505
+ const roleSet = this.roleIndex.get(role);
506
+ if (!roleSet)
507
+ return [];
508
+ const nodes = [];
509
+ for (const agentId of roleSet) {
510
+ const node = this.nodeIndex.get(agentId);
511
+ if (node)
512
+ nodes.push(node);
513
+ }
514
+ return nodes;
515
+ }
516
+ getActiveNodes() {
517
+ return this.state.nodes.filter(n => n.status === 'active');
518
+ }
519
+ getPartition(partitionId) {
520
+ return this.state.partitions.find(p => p.id === partitionId);
521
+ }
522
+ isConnected(from, to) {
523
+ return this.adjacencyList.get(from)?.has(to) ?? false;
524
+ }
525
+ getConnectionCount() {
526
+ return this.state.edges.length;
527
+ }
528
+ getAverageConnections() {
529
+ if (this.state.nodes.length === 0)
530
+ return 0;
531
+ const total = this.state.nodes.reduce((sum, n) => sum + n.connections.length, 0);
532
+ return total / this.state.nodes.length;
533
+ }
534
+ }
535
+ export function createTopologyManager(config) {
536
+ return new TopologyManager(config);
537
+ }
538
+ //# sourceMappingURL=topology-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topology-manager.js","sourceRoot":"","sources":["../src/topology-manager.ts"],"names":[],"mappings":"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"}