@claude-flow/swarm 3.0.0-alpha.7 → 3.0.0-alpha.9

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 (130) hide show
  1. package/dist/agent-pool.d.ts.map +1 -1
  2. package/dist/agent-pool.js +10 -2
  3. package/dist/agent-pool.js.map +1 -1
  4. package/dist/attention-coordinator.d.ts +5 -4
  5. package/dist/attention-coordinator.d.ts.map +1 -1
  6. package/dist/attention-coordinator.js +17 -10
  7. package/dist/attention-coordinator.js.map +1 -1
  8. package/dist/consensus/byzantine.d.ts +2 -1
  9. package/dist/consensus/byzantine.d.ts.map +1 -1
  10. package/dist/consensus/byzantine.js +34 -8
  11. package/dist/consensus/byzantine.js.map +1 -1
  12. package/dist/consensus/gossip.d.ts +2 -1
  13. package/dist/consensus/gossip.d.ts.map +1 -1
  14. package/dist/consensus/gossip.js +27 -8
  15. package/dist/consensus/gossip.js.map +1 -1
  16. package/dist/consensus/index.d.ts +1 -1
  17. package/dist/consensus/index.d.ts.map +1 -1
  18. package/dist/consensus/index.js +2 -2
  19. package/dist/consensus/index.js.map +1 -1
  20. package/dist/consensus/raft.d.ts +2 -1
  21. package/dist/consensus/raft.d.ts.map +1 -1
  22. package/dist/consensus/raft.js +25 -9
  23. package/dist/consensus/raft.js.map +1 -1
  24. package/dist/coordination/agent-registry.d.ts +2 -2
  25. package/dist/coordination/agent-registry.d.ts.map +1 -1
  26. package/dist/coordination/agent-registry.js +1 -1
  27. package/dist/coordination/agent-registry.js.map +1 -1
  28. package/dist/coordination/swarm-hub.d.ts +5 -5
  29. package/dist/coordination/swarm-hub.d.ts.map +1 -1
  30. package/dist/coordination/swarm-hub.js +5 -5
  31. package/dist/coordination/swarm-hub.js.map +1 -1
  32. package/dist/coordination/task-orchestrator.d.ts +3 -3
  33. package/dist/coordination/task-orchestrator.d.ts.map +1 -1
  34. package/dist/coordination/task-orchestrator.js +1 -1
  35. package/dist/coordination/task-orchestrator.js.map +1 -1
  36. package/dist/index.d.ts +2 -0
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +4 -0
  39. package/dist/index.js.map +1 -1
  40. package/dist/message-bus.d.ts.map +1 -1
  41. package/dist/message-bus.js +13 -4
  42. package/dist/message-bus.js.map +1 -1
  43. package/dist/queen-coordinator.d.ts +1 -1
  44. package/dist/queen-coordinator.d.ts.map +1 -1
  45. package/dist/queen-coordinator.js +10 -3
  46. package/dist/queen-coordinator.js.map +1 -1
  47. package/dist/topology-manager.d.ts.map +1 -1
  48. package/dist/topology-manager.js +26 -1
  49. package/dist/topology-manager.js.map +1 -1
  50. package/dist/types.d.ts +3 -2
  51. package/dist/types.d.ts.map +1 -1
  52. package/dist/types.js.map +1 -1
  53. package/dist/unified-coordinator.d.ts +1 -1
  54. package/dist/unified-coordinator.d.ts.map +1 -1
  55. package/dist/unified-coordinator.js +85 -29
  56. package/dist/unified-coordinator.js.map +1 -1
  57. package/package.json +7 -2
  58. package/.claude-flow/data/pending-insights.jsonl +0 -12
  59. package/__tests__/byzantine-transport.test.ts +0 -147
  60. package/__tests__/consensus-failure-injection.test.ts +0 -161
  61. package/__tests__/consensus-transport.test.ts +0 -200
  62. package/__tests__/consensus.test.ts +0 -577
  63. package/__tests__/coordinator.test.ts +0 -501
  64. package/__tests__/federation-transport.test.ts +0 -145
  65. package/__tests__/gossip-transport.test.ts +0 -81
  66. package/__tests__/queen-coordinator.test.ts +0 -1335
  67. package/__tests__/raft-transport.test.ts +0 -121
  68. package/__tests__/topology.test.ts +0 -621
  69. package/ruvector.db +0 -0
  70. package/src/agent-pool.ts +0 -476
  71. package/src/application/commands/create-task.command.ts +0 -124
  72. package/src/application/commands/spawn-agent.command.ts +0 -122
  73. package/src/application/index.ts +0 -30
  74. package/src/application/services/swarm-application-service.ts +0 -200
  75. package/src/attention-coordinator.ts +0 -1000
  76. package/src/consensus/byzantine.ts +0 -514
  77. package/src/consensus/federation-transport.ts +0 -185
  78. package/src/consensus/gossip.ts +0 -599
  79. package/src/consensus/index.ts +0 -296
  80. package/src/consensus/raft.ts +0 -561
  81. package/src/consensus/transport.ts +0 -284
  82. package/src/coordination/agent-registry.ts +0 -544
  83. package/src/coordination/index.ts +0 -23
  84. package/src/coordination/swarm-hub.ts +0 -776
  85. package/src/coordination/task-orchestrator.ts +0 -605
  86. package/src/domain/entities/agent.d.ts +0 -151
  87. package/src/domain/entities/agent.d.ts.map +0 -1
  88. package/src/domain/entities/agent.js +0 -280
  89. package/src/domain/entities/agent.js.map +0 -1
  90. package/src/domain/entities/agent.ts +0 -370
  91. package/src/domain/entities/task.d.ts +0 -133
  92. package/src/domain/entities/task.d.ts.map +0 -1
  93. package/src/domain/entities/task.js +0 -261
  94. package/src/domain/entities/task.js.map +0 -1
  95. package/src/domain/entities/task.ts +0 -319
  96. package/src/domain/index.ts +0 -41
  97. package/src/domain/repositories/agent-repository.interface.d.ts +0 -57
  98. package/src/domain/repositories/agent-repository.interface.d.ts.map +0 -1
  99. package/src/domain/repositories/agent-repository.interface.js +0 -9
  100. package/src/domain/repositories/agent-repository.interface.js.map +0 -1
  101. package/src/domain/repositories/agent-repository.interface.ts +0 -69
  102. package/src/domain/repositories/task-repository.interface.d.ts +0 -61
  103. package/src/domain/repositories/task-repository.interface.d.ts.map +0 -1
  104. package/src/domain/repositories/task-repository.interface.js +0 -9
  105. package/src/domain/repositories/task-repository.interface.js.map +0 -1
  106. package/src/domain/repositories/task-repository.interface.ts +0 -75
  107. package/src/domain/services/coordination-service.ts +0 -320
  108. package/src/federation-hub.d.ts +0 -284
  109. package/src/federation-hub.d.ts.map +0 -1
  110. package/src/federation-hub.js +0 -692
  111. package/src/federation-hub.js.map +0 -1
  112. package/src/federation-hub.ts +0 -979
  113. package/src/index.ts +0 -348
  114. package/src/message-bus.ts +0 -607
  115. package/src/queen-coordinator.ts +0 -2025
  116. package/src/shared/events.ts +0 -285
  117. package/src/shared/types.ts +0 -389
  118. package/src/topology-manager.ts +0 -656
  119. package/src/types.ts +0 -545
  120. package/src/unified-coordinator.ts +0 -1844
  121. package/src/workers/index.ts +0 -65
  122. package/src/workers/worker-dispatch.d.ts +0 -234
  123. package/src/workers/worker-dispatch.d.ts.map +0 -1
  124. package/src/workers/worker-dispatch.js +0 -842
  125. package/src/workers/worker-dispatch.js.map +0 -1
  126. package/src/workers/worker-dispatch.ts +0 -1076
  127. package/tmp.json +0 -0
  128. package/tsconfig.json +0 -9
  129. package/tsconfig.tsbuildinfo +0 -1
  130. package/vitest.config.ts +0 -20
@@ -1,121 +0,0 @@
1
- /**
2
- * ADR-095 G2 — RaftConsensus + ConsensusTransport wiring.
3
- *
4
- * Verifies the real RequestVote / AppendEntries RPCs over a transport,
5
- * with proper Raft receiver rules (term comparison, vote-once-per-term,
6
- * log-up-to-date check). Legacy no-transport behavior is covered by the
7
- * existing consensus.test.ts.
8
- */
9
- import { describe, it, expect } from 'vitest';
10
- import { RaftConsensus } from '../src/consensus/raft.js';
11
- import { LocalTransport, LocalTransportRegistry } from '../src/consensus/transport.js';
12
-
13
- /** Build N raft nodes wired to a shared registry, each knowing the others as peers. */
14
- function buildCluster(ids: string[]): { nodes: Map<string, RaftConsensus>; transports: LocalTransport[]; reg: LocalTransportRegistry } {
15
- const reg = new LocalTransportRegistry();
16
- const transports: LocalTransport[] = [];
17
- const nodes = new Map<string, RaftConsensus>();
18
- for (const id of ids) {
19
- const t = new LocalTransport(id, { registry: reg });
20
- transports.push(t);
21
- const r = new RaftConsensus(id, { transport: t });
22
- for (const other of ids) if (other !== id) r.addPeer(other);
23
- nodes.set(id, r);
24
- }
25
- return { nodes, transports, reg };
26
- }
27
-
28
- describe('ADR-095 G2 — Raft RequestVote over transport', () => {
29
- it('a peer grants a vote to a candidate with an up-to-date log', async () => {
30
- const { nodes, transports } = buildCluster(['a', 'b']);
31
- const candidate = nodes.get('a')!;
32
- // Drive an election from `a`. It bumps its term and sends RequestVote to `b`.
33
- // We call the (public) consensus path indirectly — but the simplest way to
34
- // exercise requestVote is to reach it via startElection. Since that's private,
35
- // we instead poke the transport directly the way the candidate would:
36
- const reply = await transports[0].send('b', {
37
- type: 'request-vote',
38
- payload: { term: 1, candidateId: 'a', lastLogIndex: 0, lastLogTerm: 0 },
39
- term: 1,
40
- });
41
- expect(reply).not.toBeNull();
42
- expect(reply!.type).toBe('vote-response');
43
- const rp = reply!.payload as { term: number; granted: boolean };
44
- expect(rp.granted).toBe(true);
45
- expect(rp.term).toBe(1);
46
- // `b` recorded its vote for `a` this term — a second different candidate is denied.
47
- const reply2 = await transports[0].send('b', {
48
- type: 'request-vote',
49
- payload: { term: 1, candidateId: 'c', lastLogIndex: 0, lastLogTerm: 0 },
50
- term: 1,
51
- });
52
- expect((reply2!.payload as { granted: boolean }).granted).toBe(false);
53
- await Promise.all([nodes.get('a')!.shutdown(), nodes.get('b')!.shutdown(), ...transports.map(t => t.close())]);
54
- });
55
-
56
- it('a peer denies a vote to a stale-term candidate', async () => {
57
- const { nodes, transports } = buildCluster(['a', 'b']);
58
- // First, push `b` to term 5 via an AppendEntries from a "term-5 leader".
59
- await transports[0].send('b', {
60
- type: 'append-entries',
61
- payload: { term: 5, leaderId: 'a', entries: [], leaderCommit: 0 },
62
- term: 5,
63
- });
64
- // Now a candidate at term 2 (stale) asks `b` for a vote → denied.
65
- const reply = await transports[0].send('b', {
66
- type: 'request-vote',
67
- payload: { term: 2, candidateId: 'a', lastLogIndex: 0, lastLogTerm: 0 },
68
- term: 2,
69
- });
70
- expect((reply!.payload as { granted: boolean }).granted).toBe(false);
71
- expect((reply!.payload as { term: number }).term).toBe(5);
72
- await Promise.all([nodes.get('a')!.shutdown(), nodes.get('b')!.shutdown(), ...transports.map(t => t.close())]);
73
- });
74
-
75
- it('a peer denies a vote to a candidate with a behind log', async () => {
76
- const { nodes, transports } = buildCluster(['a', 'b']);
77
- // Give `b` a log entry at term 3, index 1 via an AppendEntries.
78
- await transports[0].send('b', {
79
- type: 'append-entries',
80
- payload: { term: 3, leaderId: 'a', entries: [{ term: 3, index: 1, command: { v: 1 }, timestamp: new Date().toISOString() }], leaderCommit: 1 },
81
- term: 3,
82
- });
83
- // Candidate at term 4 but with an empty log (lastLogTerm 0 < b's 3) → denied.
84
- const reply = await transports[0].send('b', {
85
- type: 'request-vote',
86
- payload: { term: 4, candidateId: 'a', lastLogIndex: 0, lastLogTerm: 0 },
87
- term: 4,
88
- });
89
- expect((reply!.payload as { granted: boolean }).granted).toBe(false);
90
- await Promise.all([nodes.get('a')!.shutdown(), nodes.get('b')!.shutdown(), ...transports.map(t => t.close())]);
91
- });
92
- });
93
-
94
- describe('ADR-095 G2 — Raft AppendEntries over transport', () => {
95
- it('a follower accepts a valid AppendEntries and updates commitIndex', async () => {
96
- const { nodes, transports } = buildCluster(['leader', 'follower']);
97
- const reply = await transports[0].send('follower', {
98
- type: 'append-entries',
99
- payload: {
100
- term: 2, leaderId: 'leader', leaderCommit: 1,
101
- entries: [{ term: 2, index: 1, command: { op: 'set', k: 'x', v: 1 }, timestamp: new Date().toISOString() }],
102
- },
103
- term: 2,
104
- });
105
- expect(reply!.type).toBe('append-entries-response');
106
- expect((reply!.payload as { success: boolean }).success).toBe(true);
107
- expect((reply!.payload as { term: number }).term).toBe(2);
108
- await Promise.all([nodes.get('leader')!.shutdown(), nodes.get('follower')!.shutdown(), ...transports.map(t => t.close())]);
109
- });
110
-
111
- it('a follower rejects a stale-term AppendEntries', async () => {
112
- const { nodes, transports } = buildCluster(['leader', 'follower']);
113
- // Bump follower to term 7.
114
- await transports[0].send('follower', { type: 'append-entries', payload: { term: 7, leaderId: 'leader', entries: [], leaderCommit: 0 }, term: 7 });
115
- // Stale leader at term 3 → rejected, follower reports its term.
116
- const reply = await transports[0].send('follower', { type: 'append-entries', payload: { term: 3, leaderId: 'leader', entries: [], leaderCommit: 0 }, term: 3 });
117
- expect((reply!.payload as { success: boolean }).success).toBe(false);
118
- expect((reply!.payload as { term: number }).term).toBe(7);
119
- await Promise.all([nodes.get('leader')!.shutdown(), nodes.get('follower')!.shutdown(), ...transports.map(t => t.close())]);
120
- });
121
- });