@claude-flow/swarm 3.0.0-alpha.1 → 3.0.0-alpha.7
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/.claude-flow/data/pending-insights.jsonl +12 -0
- package/__tests__/byzantine-transport.test.ts +147 -0
- package/__tests__/consensus-failure-injection.test.ts +161 -0
- package/__tests__/consensus-transport.test.ts +200 -0
- package/__tests__/federation-transport.test.ts +145 -0
- package/__tests__/gossip-transport.test.ts +81 -0
- package/__tests__/queen-coordinator.test.ts +2 -2
- package/__tests__/raft-transport.test.ts +121 -0
- package/dist/attention-coordinator.js +2 -2
- package/dist/attention-coordinator.js.map +1 -1
- package/dist/consensus/byzantine.d.ts +26 -0
- package/dist/consensus/byzantine.d.ts.map +1 -1
- package/dist/consensus/byzantine.js +92 -14
- package/dist/consensus/byzantine.js.map +1 -1
- package/dist/consensus/federation-transport.d.ts +82 -0
- package/dist/consensus/federation-transport.d.ts.map +1 -0
- package/dist/consensus/federation-transport.js +144 -0
- package/dist/consensus/federation-transport.js.map +1 -0
- package/dist/consensus/gossip.d.ts +31 -1
- package/dist/consensus/gossip.d.ts.map +1 -1
- package/dist/consensus/gossip.js +89 -12
- package/dist/consensus/gossip.js.map +1 -1
- package/dist/consensus/index.d.ts +4 -0
- package/dist/consensus/index.d.ts.map +1 -1
- package/dist/consensus/index.js +9 -0
- package/dist/consensus/index.js.map +1 -1
- package/dist/consensus/raft.d.ts +19 -0
- package/dist/consensus/raft.d.ts.map +1 -1
- package/dist/consensus/raft.js +113 -3
- package/dist/consensus/raft.js.map +1 -1
- package/dist/consensus/transport.d.ts +141 -0
- package/dist/consensus/transport.d.ts.map +1 -0
- package/dist/consensus/transport.js +205 -0
- package/dist/consensus/transport.js.map +1 -0
- package/dist/federation-hub.js +1 -1
- package/dist/federation-hub.js.map +1 -1
- package/dist/queen-coordinator.d.ts +2 -1
- package/dist/queen-coordinator.d.ts.map +1 -1
- package/dist/queen-coordinator.js +4 -3
- package/dist/queen-coordinator.js.map +1 -1
- package/dist/workers/worker-dispatch.d.ts +6 -1
- package/dist/workers/worker-dispatch.d.ts.map +1 -1
- package/dist/workers/worker-dispatch.js +45 -41
- package/dist/workers/worker-dispatch.js.map +1 -1
- package/package.json +2 -3
- package/ruvector.db +0 -0
- package/src/attention-coordinator.ts +2 -2
- package/src/consensus/byzantine.ts +98 -15
- package/src/consensus/federation-transport.ts +185 -0
- package/src/consensus/gossip.ts +102 -16
- package/src/consensus/index.ts +29 -0
- package/src/consensus/raft.ts +125 -7
- package/src/consensus/transport.ts +284 -0
- package/src/federation-hub.ts +1 -1
- package/src/queen-coordinator.ts +4 -3
- package/src/workers/worker-dispatch.d.ts +1 -1
- package/src/workers/worker-dispatch.ts +45 -41
- package/tmp.json +0 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/.agentic-flow/intelligence.json +0 -16
package/dist/consensus/raft.d.ts
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Leader election and log replication for distributed coordination
|
|
4
4
|
*/
|
|
5
5
|
import { EventEmitter } from 'events';
|
|
6
|
+
import type { ConsensusTransport } from './transport.js';
|
|
6
7
|
import { ConsensusProposal, ConsensusVote, ConsensusResult, ConsensusConfig } from '../types.js';
|
|
7
8
|
export type RaftState = 'follower' | 'candidate' | 'leader';
|
|
8
9
|
export interface RaftNode {
|
|
@@ -24,6 +25,15 @@ export interface RaftConfig extends Partial<ConsensusConfig> {
|
|
|
24
25
|
electionTimeoutMinMs?: number;
|
|
25
26
|
electionTimeoutMaxMs?: number;
|
|
26
27
|
heartbeatIntervalMs?: number;
|
|
28
|
+
/**
|
|
29
|
+
* ADR-095 G2 — optional pluggable transport. When set, RequestVote and
|
|
30
|
+
* AppendEntries RPCs go over it (request-response) and this node also
|
|
31
|
+
* answers inbound RequestVote / AppendEntries from peers using proper
|
|
32
|
+
* Raft receiver rules (term comparison, vote-once-per-term, log-up-to-date
|
|
33
|
+
* check). When unset, behavior is unchanged: the legacy in-process path
|
|
34
|
+
* mutates the local `peers` map directly (single-process).
|
|
35
|
+
*/
|
|
36
|
+
transport?: ConsensusTransport;
|
|
27
37
|
}
|
|
28
38
|
export declare class RaftConsensus extends EventEmitter {
|
|
29
39
|
private config;
|
|
@@ -33,7 +43,16 @@ export declare class RaftConsensus extends EventEmitter {
|
|
|
33
43
|
private electionTimeout?;
|
|
34
44
|
private heartbeatInterval?;
|
|
35
45
|
private proposalCounter;
|
|
46
|
+
private readonly transport?;
|
|
36
47
|
constructor(nodeId: string, config?: RaftConfig);
|
|
48
|
+
/** Index/term of the last entry in this node's log (Raft "up-to-date" comparison). */
|
|
49
|
+
private lastLogInfo;
|
|
50
|
+
/**
|
|
51
|
+
* ADR-095 G2 — Raft receiver. Answers inbound RequestVote / AppendEntries
|
|
52
|
+
* with proper Raft rules. Returns the RPC response the transport relays
|
|
53
|
+
* back to the caller (the transport's `send` resolves with it).
|
|
54
|
+
*/
|
|
55
|
+
private handleInboundRaftMessage;
|
|
37
56
|
initialize(): Promise<void>;
|
|
38
57
|
shutdown(): Promise<void>;
|
|
39
58
|
addPeer(peerId: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raft.d.ts","sourceRoot":"","sources":["../../src/consensus/raft.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,eAAe,EAEhB,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE5D,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,YAAY,EAAE,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,UAAW,SAAQ,OAAO,CAAC,eAAe,CAAC;IAC1D,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"raft.d.ts","sourceRoot":"","sources":["../../src/consensus/raft.ts"],"names":[],"mappings":"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"}
|
package/dist/consensus/raft.js
CHANGED
|
@@ -12,6 +12,7 @@ export class RaftConsensus extends EventEmitter {
|
|
|
12
12
|
electionTimeout;
|
|
13
13
|
heartbeatInterval;
|
|
14
14
|
proposalCounter = 0;
|
|
15
|
+
transport;
|
|
15
16
|
constructor(nodeId, config = {}) {
|
|
16
17
|
super();
|
|
17
18
|
this.config = {
|
|
@@ -22,7 +23,9 @@ export class RaftConsensus extends EventEmitter {
|
|
|
22
23
|
electionTimeoutMinMs: config.electionTimeoutMinMs ?? 150,
|
|
23
24
|
electionTimeoutMaxMs: config.electionTimeoutMaxMs ?? 300,
|
|
24
25
|
heartbeatIntervalMs: config.heartbeatIntervalMs ?? 50,
|
|
26
|
+
transport: config.transport,
|
|
25
27
|
};
|
|
28
|
+
this.transport = config.transport;
|
|
26
29
|
this.node = {
|
|
27
30
|
id: nodeId,
|
|
28
31
|
state: 'follower',
|
|
@@ -31,6 +34,66 @@ export class RaftConsensus extends EventEmitter {
|
|
|
31
34
|
commitIndex: 0,
|
|
32
35
|
lastApplied: 0,
|
|
33
36
|
};
|
|
37
|
+
if (this.transport) {
|
|
38
|
+
this.transport.onMessage(async (msg) => this.handleInboundRaftMessage(msg));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/** Index/term of the last entry in this node's log (Raft "up-to-date" comparison). */
|
|
42
|
+
lastLogInfo() {
|
|
43
|
+
const last = this.node.log[this.node.log.length - 1];
|
|
44
|
+
return last ? { index: last.index, term: last.term } : { index: 0, term: 0 };
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* ADR-095 G2 — Raft receiver. Answers inbound RequestVote / AppendEntries
|
|
48
|
+
* with proper Raft rules. Returns the RPC response the transport relays
|
|
49
|
+
* back to the caller (the transport's `send` resolves with it).
|
|
50
|
+
*/
|
|
51
|
+
async handleInboundRaftMessage(msg) {
|
|
52
|
+
const p = (msg.payload ?? {});
|
|
53
|
+
const term = typeof p.term === 'number' ? p.term : 0;
|
|
54
|
+
// §5.1 — any RPC with a higher term makes us a follower and adopts it.
|
|
55
|
+
if (term > this.node.currentTerm) {
|
|
56
|
+
this.node.currentTerm = term;
|
|
57
|
+
this.node.votedFor = undefined;
|
|
58
|
+
this.node.state = 'follower';
|
|
59
|
+
}
|
|
60
|
+
if (msg.type === 'request-vote') {
|
|
61
|
+
const candidateId = String(p.candidateId ?? msg.from);
|
|
62
|
+
const candLastIndex = typeof p.lastLogIndex === 'number' ? p.lastLogIndex : 0;
|
|
63
|
+
const candLastTerm = typeof p.lastLogTerm === 'number' ? p.lastLogTerm : 0;
|
|
64
|
+
const my = this.lastLogInfo();
|
|
65
|
+
const logOk = candLastTerm > my.term || (candLastTerm === my.term && candLastIndex >= my.index);
|
|
66
|
+
const termOk = term >= this.node.currentTerm;
|
|
67
|
+
const notVotedOrSame = this.node.votedFor === undefined || this.node.votedFor === candidateId;
|
|
68
|
+
const granted = termOk && notVotedOrSame && logOk;
|
|
69
|
+
if (granted) {
|
|
70
|
+
this.node.votedFor = candidateId;
|
|
71
|
+
this.resetElectionTimeout();
|
|
72
|
+
}
|
|
73
|
+
return { type: 'vote-response', from: this.node.id, to: msg.from, payload: { term: this.node.currentTerm, granted }, term: this.node.currentTerm };
|
|
74
|
+
}
|
|
75
|
+
if (msg.type === 'append-entries') {
|
|
76
|
+
// §5.2/5.3 — reject if leader's term is stale.
|
|
77
|
+
if (term < this.node.currentTerm) {
|
|
78
|
+
return { type: 'append-entries-response', from: this.node.id, to: msg.from, payload: { term: this.node.currentTerm, success: false }, term: this.node.currentTerm };
|
|
79
|
+
}
|
|
80
|
+
// Valid leader heartbeat/append → become/stay follower, reset election timer.
|
|
81
|
+
this.node.state = 'follower';
|
|
82
|
+
this.resetElectionTimeout();
|
|
83
|
+
const entries = Array.isArray(p.entries) ? p.entries : [];
|
|
84
|
+
// (Simplified log matching: append entries not already present by index.
|
|
85
|
+
// Full prevLogIndex/prevLogTerm conflict resolution is the next refinement.)
|
|
86
|
+
for (const e of entries) {
|
|
87
|
+
if (!this.node.log.some(x => x.index === e.index))
|
|
88
|
+
this.node.log.push(e);
|
|
89
|
+
}
|
|
90
|
+
const leaderCommit = typeof p.leaderCommit === 'number' ? p.leaderCommit : this.node.commitIndex;
|
|
91
|
+
if (leaderCommit > this.node.commitIndex) {
|
|
92
|
+
this.node.commitIndex = Math.min(leaderCommit, this.lastLogInfo().index);
|
|
93
|
+
}
|
|
94
|
+
return { type: 'append-entries-response', from: this.node.id, to: msg.from, payload: { term: this.node.currentTerm, success: true }, term: this.node.currentTerm };
|
|
95
|
+
}
|
|
96
|
+
return;
|
|
34
97
|
}
|
|
35
98
|
async initialize() {
|
|
36
99
|
this.resetElectionTimeout();
|
|
@@ -185,11 +248,33 @@ export class RaftConsensus extends EventEmitter {
|
|
|
185
248
|
this.resetElectionTimeout();
|
|
186
249
|
}
|
|
187
250
|
async requestVote(peerId) {
|
|
251
|
+
// ADR-095 G2 — over the transport when wired: real RequestVote RPC.
|
|
252
|
+
if (this.transport) {
|
|
253
|
+
const my = this.lastLogInfo();
|
|
254
|
+
try {
|
|
255
|
+
const reply = await this.transport.send(peerId, {
|
|
256
|
+
type: 'request-vote',
|
|
257
|
+
payload: { term: this.node.currentTerm, candidateId: this.node.id, lastLogIndex: my.index, lastLogTerm: my.term },
|
|
258
|
+
term: this.node.currentTerm,
|
|
259
|
+
});
|
|
260
|
+
const rp = (reply?.payload ?? {});
|
|
261
|
+
// §5.1 — if the responder's term is higher, step down.
|
|
262
|
+
if (typeof rp.term === 'number' && rp.term > this.node.currentTerm) {
|
|
263
|
+
this.node.currentTerm = rp.term;
|
|
264
|
+
this.node.votedFor = undefined;
|
|
265
|
+
this.node.state = 'follower';
|
|
266
|
+
return false;
|
|
267
|
+
}
|
|
268
|
+
return rp.granted === true;
|
|
269
|
+
}
|
|
270
|
+
catch {
|
|
271
|
+
return false; // unreachable peer / timeout — counts as no vote.
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
// Legacy in-process path — mutates the local fake peer state.
|
|
188
275
|
const peer = this.peers.get(peerId);
|
|
189
276
|
if (!peer)
|
|
190
277
|
return false;
|
|
191
|
-
// Simulate vote request (in real implementation, this would be RPC)
|
|
192
|
-
// For now, grant vote if candidate's term is higher
|
|
193
278
|
if (this.node.currentTerm > peer.currentTerm) {
|
|
194
279
|
peer.votedFor = this.node.id;
|
|
195
280
|
peer.currentTerm = this.node.currentTerm;
|
|
@@ -217,10 +302,35 @@ export class RaftConsensus extends EventEmitter {
|
|
|
217
302
|
}
|
|
218
303
|
}
|
|
219
304
|
async appendEntries(peerId, entries) {
|
|
305
|
+
// ADR-095 G2 — over the transport when wired: real AppendEntries RPC.
|
|
306
|
+
if (this.transport) {
|
|
307
|
+
try {
|
|
308
|
+
const reply = await this.transport.send(peerId, {
|
|
309
|
+
type: 'append-entries',
|
|
310
|
+
payload: { term: this.node.currentTerm, leaderId: this.node.id, entries, leaderCommit: this.node.commitIndex },
|
|
311
|
+
term: this.node.currentTerm,
|
|
312
|
+
});
|
|
313
|
+
const rp = (reply?.payload ?? {});
|
|
314
|
+
if (typeof rp.term === 'number' && rp.term > this.node.currentTerm) {
|
|
315
|
+
this.node.currentTerm = rp.term;
|
|
316
|
+
this.node.votedFor = undefined;
|
|
317
|
+
this.node.state = 'follower';
|
|
318
|
+
if (this.heartbeatInterval) {
|
|
319
|
+
clearInterval(this.heartbeatInterval);
|
|
320
|
+
this.heartbeatInterval = undefined;
|
|
321
|
+
}
|
|
322
|
+
return false;
|
|
323
|
+
}
|
|
324
|
+
return rp.success === true;
|
|
325
|
+
}
|
|
326
|
+
catch {
|
|
327
|
+
return false; // unreachable peer / timeout.
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
// Legacy in-process path.
|
|
220
331
|
const peer = this.peers.get(peerId);
|
|
221
332
|
if (!peer)
|
|
222
333
|
return false;
|
|
223
|
-
// Simulate AppendEntries RPC
|
|
224
334
|
if (this.node.currentTerm >= peer.currentTerm) {
|
|
225
335
|
peer.currentTerm = this.node.currentTerm;
|
|
226
336
|
peer.state = 'follower';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raft.js","sourceRoot":"","sources":["../../src/consensus/raft.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"raft.js","sourceRoot":"","sources":["../../src/consensus/raft.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAKL,eAAe,GAChB,MAAM,aAAa,CAAC;AAoCrB,MAAM,OAAO,aAAc,SAAQ,YAAY;IACrC,MAAM,CAAa;IACnB,IAAI,CAAW;IACf,KAAK,GAA0B,IAAI,GAAG,EAAE,CAAC;IACzC,SAAS,GAAmC,IAAI,GAAG,EAAE,CAAC;IACtD,eAAe,CAAkB;IACjC,iBAAiB,CAAkB;IACnC,eAAe,GAAW,CAAC,CAAC;IACnB,SAAS,CAAsB;IAEhD,YAAY,MAAc,EAAE,SAAqB,EAAE;QACjD,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG;YACZ,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,eAAe,CAAC,2BAA2B;YAC1E,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,eAAe,CAAC,4BAA4B;YAC3E,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;YACjC,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,IAAI;YAC3C,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,IAAI,GAAG;YACxD,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,IAAI,GAAG;YACxD,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,IAAI,EAAE;YACrD,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,CAAC;QACF,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAElC,IAAI,CAAC,IAAI,GAAG;YACV,EAAE,EAAE,MAAM;YACV,KAAK,EAAE,UAAU;YACjB,WAAW,EAAE,CAAC;YACd,GAAG,EAAE,EAAE;YACP,WAAW,EAAE,CAAC;YACd,WAAW,EAAE,CAAC;SACf,CAAC;QAEF,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,GAAqB,EAAE,EAAE,CAAC,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC,CAAC;QAChG,CAAC;IACH,CAAC;IAED,sFAAsF;IAC9E,WAAW;QACjB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAC/E,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,wBAAwB,CAAC,GAAqB;QAC1D,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAA4B,CAAC;QACzD,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAErD,uEAAuE;QACvE,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;QAC/B,CAAC;QAED,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YAChC,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;YACtD,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9E,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3E,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,YAAY,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC,IAAI,IAAI,aAAa,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;YAChG,MAAM,MAAM,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;YAC7C,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,WAAW,CAAC;YAC9F,MAAM,OAAO,GAAG,MAAM,IAAI,cAAc,IAAI,KAAK,CAAC;YAClD,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC;gBACjC,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC9B,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACrJ,CAAC;QAED,IAAI,GAAG,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;YAClC,+CAA+C;YAC/C,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjC,OAAO,EAAE,IAAI,EAAE,yBAAyB,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtK,CAAC;YACD,8EAA8E;YAC9E,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;YAC7B,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,OAA0B,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9E,yEAAyE;YACzE,6EAA6E;YAC7E,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACxB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC;oBAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC3E,CAAC;YACD,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;YACjG,IAAI,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACzC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC;YAC3E,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,yBAAyB,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACrK,CAAC;QACD,OAAO;IACT,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACxC,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACxB,CAAC;IAED,OAAO,CAAC,MAAc;QACpB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE;YACrB,EAAE,EAAE,MAAM;YACV,KAAK,EAAE,UAAU;YACjB,WAAW,EAAE,CAAC;YACd,GAAG,EAAE,EAAE;YACP,WAAW,EAAE,CAAC;YACd,WAAW,EAAE,CAAC;SACf,CAAC,CAAC;IACL,CAAC;IAED,UAAU,CAAC,MAAc;QACvB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAAc;QAC1B,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,QAAQ,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;QAElE,MAAM,QAAQ,GAAsB;YAClC,EAAE,EAAE,UAAU;YACd,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;YACxB,KAAK;YACL,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW;YAC3B,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,KAAK,EAAE,IAAI,GAAG,EAAE;YAChB,MAAM,EAAE,SAAS;SAClB,CAAC;QAEF,mBAAmB;QACnB,MAAM,QAAQ,GAAiB;YAC7B,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW;YAC3B,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC;YAC/B,OAAO,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE;YAC9B,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE7B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAEzC,0BAA0B;QAC1B,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;YAC/B,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;YACrB,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,GAAG;YACf,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC,CAAC;QAEH,yBAAyB;QACzB,MAAM,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAE1C,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,UAAkB,EAAE,IAAmB;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,YAAY,UAAU,YAAY,CAAC,CAAC;QACtD,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAClC,OAAO;QACT,CAAC;QAED,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAEvC,6BAA6B;QAC7B,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,UAAkB;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE;gBACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAChD,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,aAAa,CAAC,aAAa,CAAC,CAAC;oBAC7B,MAAM,CAAC,IAAI,KAAK,CAAC,YAAY,UAAU,YAAY,CAAC,CAAC,CAAC;oBACtD,OAAO;gBACT,CAAC;gBAED,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBAClC,aAAa,CAAC,aAAa,CAAC,CAAC;oBAC7B,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;oBAC7D,OAAO;gBACT,CAAC;gBAED,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC,EAAE,CAAC;oBAC9D,aAAa,CAAC,aAAa,CAAC,CAAC;oBAC7B,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;oBAC5B,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;gBAC/D,CAAC;YACH,CAAC,EAAE,EAAE,CAAC,CAAC;QACT,CAAC,CAAC,CAAC;IACL,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IACzB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;IAC/B,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC;IACtC,CAAC;IAED,WAAW;QACT,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC5B,CAAC;IAED,8BAA8B;IAEtB,oBAAoB;QAC1B,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACrC,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7C,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,GAAG,EAAE;YACrC,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,CAAC,EAAE,OAAO,CAAC,CAAC;IACd,CAAC;IAEO,qBAAqB;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB,IAAI,GAAG,CAAC;QACpD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB,IAAI,GAAG,CAAC;QACpD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IAC3D,CAAC;IAEO,KAAK,CAAC,aAAa;QACzB,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAElC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC5B,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW;YAC3B,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;SAC1B,CAAC,CAAC;QAEH,gBAAgB;QAChB,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAE9D,2BAA2B;QAC3B,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACxC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAC/C,IAAI,OAAO,EAAE,CAAC;gBACZ,aAAa,EAAE,CAAC;YAClB,CAAC;YAED,IAAI,aAAa,IAAI,WAAW,EAAE,CAAC;gBACjC,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,OAAO;YACT,CAAC;QACH,CAAC;QAED,qCAAqC;QACrC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC9B,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,MAAc;QACtC,oEAAoE;QACpE,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE;oBAC9C,IAAI,EAAE,cAAc;oBACpB,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,CAAC,IAAI,EAAE;oBACjH,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW;iBAC5B,CAAC,CAAC;gBACH,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE,CAA4B,CAAC;gBAC7D,uDAAuD;gBACvD,IAAI,OAAO,EAAE,CAAC,IAAI,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;oBACnE,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,IAAI,CAAC;oBAChC,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;oBAC/B,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;oBAC7B,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,OAAO,EAAE,CAAC,OAAO,KAAK,IAAI,CAAC;YAC7B,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC,CAAC,kDAAkD;YAClE,CAAC;QACH,CAAC;QAED,8DAA8D;QAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACxB,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAC7C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;YACzC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,YAAY;QAClB,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;QAE3B,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACrC,CAAC;QAED,2BAA2B;QAC3B,IAAI,CAAC,iBAAiB,GAAG,WAAW,CAAC,GAAG,EAAE;YACxC,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC;QAE1C,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAC1B,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW;YAC3B,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;SACvB,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,cAAc;QAC1B,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACxC,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,MAAc,EAAE,OAAuB;QACjE,sEAAsE;QACtE,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE;oBAC9C,IAAI,EAAE,gBAAgB;oBACtB,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;oBAC9G,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW;iBAC5B,CAAC,CAAC;gBACH,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE,CAA4B,CAAC;gBAC7D,IAAI,OAAO,EAAE,CAAC,IAAI,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;oBACnE,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,IAAI,CAAC;oBAChC,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;oBAC/B,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;oBAC7B,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;wBAAC,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;wBAAC,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;oBAAC,CAAC;oBAC1G,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,OAAO,EAAE,CAAC,OAAO,KAAK,IAAI,CAAC;YAC7B,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC,CAAC,8BAA8B;YAC9C,CAAC;QACH,CAAC;QAED,0BAA0B;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACxB,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAC9C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;YACzC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;YACxB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,KAAmB;QACpD,MAAM,mBAAmB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAC3D,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAC9C,CAAC;QAEF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;QAC9D,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CACjC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,CAAC,KAAK,CACzC,CAAC,MAAM,CAAC;QAET,+BAA+B;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3D,IAAI,YAAY,GAAG,CAAC,IAAI,QAAQ,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,UAAkB;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC/C,OAAO;QACT,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;QACxC,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;QAC1C,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAC/D,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CACf,CAAC,MAAM,CAAC;QAET,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;QAEnD,IAAI,cAAc,IAAI,MAAM,EAAE,CAAC;YAC7B,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;aAAM,IAAI,aAAa,GAAG,cAAc,GAAG,WAAW,GAAG,MAAM,EAAE,CAAC;YACjE,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,QAA2B,EAAE,UAAkB;QAClE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;QACxC,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAC/D,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CACf,CAAC,MAAM,CAAC;QAET,OAAO;YACL,UAAU,EAAE,QAAQ,CAAC,EAAE;YACvB,QAAQ,EAAE,QAAQ,CAAC,MAAM,KAAK,UAAU;YACxC,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC;gBACnC,CAAC,CAAC,cAAc,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI;gBACtC,CAAC,CAAC,CAAC;YACL,iBAAiB,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,WAAW;YACpD,UAAU,EAAE,QAAQ,CAAC,KAAK;YAC1B,MAAM,EAAE,CAAC;YACT,UAAU;SACX,CAAC;IACJ,CAAC;IAED,6CAA6C;IAC7C,iBAAiB,CACf,WAAmB,EACnB,IAAY,EACZ,YAAoB,EACpB,WAAmB;QAEnB,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACjC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QACjC,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;YAC3E,sCAAsC;YACtC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC1D,MAAM,UAAU,GAAG,SAAS,EAAE,IAAI,IAAI,CAAC,CAAC;YACxC,MAAM,WAAW,GAAG,SAAS,EAAE,KAAK,IAAI,CAAC,CAAC;YAE1C,IAAI,WAAW,GAAG,UAAU;gBACxB,CAAC,WAAW,KAAK,UAAU,IAAI,YAAY,IAAI,WAAW,CAAC,EAAE,CAAC;gBAChE,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC;gBACjC,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC5B,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,oCAAoC;IACpC,mBAAmB,CACjB,QAAgB,EAChB,IAAY,EACZ,OAAuB,EACvB,YAAoB;QAEpB,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACjC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;QAC/B,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAE9B,iBAAiB;QACjB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;QAE/B,sBAAsB;QACtB,IAAI,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACzC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAC9B,YAAY,EACZ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CACrB,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAc,EAAE,MAAmB;IACrE,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ADR-095 G2 — pluggable transport for hive-mind consensus protocols.
|
|
3
|
+
*
|
|
4
|
+
* The raft/byzantine/gossip consensus implementations historically used a
|
|
5
|
+
* local `EventEmitter` for *everything* — both observability events
|
|
6
|
+
* ("leader.elected", "consensus.achieved") AND inter-node messages
|
|
7
|
+
* (append-entries, vote requests, pre-prepare/prepare/commit). The latter
|
|
8
|
+
* never actually crossed a process or node boundary: a node "sent" a
|
|
9
|
+
* message by `emit`ting it locally and synthesizing the peer's reply
|
|
10
|
+
* inline. That's the single-process limitation #G2 names.
|
|
11
|
+
*
|
|
12
|
+
* This module separates the inter-node-message dimension behind a
|
|
13
|
+
* `ConsensusTransport` interface. Two implementations:
|
|
14
|
+
*
|
|
15
|
+
* - `LocalTransport` — an in-process registry. Multiple consensus
|
|
16
|
+
* instances in the same Node process share a registry and deliver
|
|
17
|
+
* messages to each other synchronously. Matches the current
|
|
18
|
+
* single-process behavior; the default so nothing breaks.
|
|
19
|
+
* - `FederationTransport` (separate file, ADR-104 wire) — serializes
|
|
20
|
+
* ConsensusMessages into federation envelopes, signs them with the
|
|
21
|
+
* node's Ed25519 key, sends over WS via agentic-flow/transport/loader,
|
|
22
|
+
* and dispatches inbound envelopes with signature verification.
|
|
23
|
+
*
|
|
24
|
+
* Observability events stay on the consensus class's own EventEmitter —
|
|
25
|
+
* this is purely the messaging layer.
|
|
26
|
+
*
|
|
27
|
+
* No new dependencies: Ed25519 signing uses Node's built-in `crypto`
|
|
28
|
+
* (`generateKeyPairSync('ed25519')` + `sign`/`verify` with `null` algorithm,
|
|
29
|
+
* which is correct for Ed25519).
|
|
30
|
+
*/
|
|
31
|
+
/** A message exchanged between consensus nodes. */
|
|
32
|
+
export interface ConsensusMessage {
|
|
33
|
+
/** Protocol message type — e.g. 'append-entries', 'request-vote', 'pre-prepare', 'prepare', 'commit', 'gossip', 'gossip-ack'. */
|
|
34
|
+
readonly type: string;
|
|
35
|
+
/** Sender node id. */
|
|
36
|
+
readonly from: string;
|
|
37
|
+
/** Recipient node id. Omit for broadcast. */
|
|
38
|
+
readonly to?: string;
|
|
39
|
+
/** Protocol payload (term, log entries, vote, digest, …). */
|
|
40
|
+
readonly payload: unknown;
|
|
41
|
+
/** Raft term, when applicable. Lets the transport drop stale-term messages cheaply. */
|
|
42
|
+
readonly term?: number;
|
|
43
|
+
/** PBFT view number, when applicable. */
|
|
44
|
+
readonly viewNumber?: number;
|
|
45
|
+
/** Monotonic per-sender sequence number — replay defense. */
|
|
46
|
+
readonly seq?: number;
|
|
47
|
+
/** Ed25519 signature (base64) over `canonicalizeForSigning(msg)`. */
|
|
48
|
+
readonly signature?: string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* A reply to a `send()`. Protocols use this for the request-response legs
|
|
52
|
+
* (request-vote → vote-response, append-entries → append-entries-response).
|
|
53
|
+
* Broadcasts don't get replies; responses arrive via `onMessage`.
|
|
54
|
+
*/
|
|
55
|
+
export type ConsensusReply = ConsensusMessage | null;
|
|
56
|
+
export type ConsensusMessageHandler = (msg: ConsensusMessage) => Promise<ConsensusReply | void> | ConsensusReply | void;
|
|
57
|
+
export interface ConsensusTransport {
|
|
58
|
+
/** This node's id (the one consensus protocols use as `from`). */
|
|
59
|
+
readonly nodeId: string;
|
|
60
|
+
/**
|
|
61
|
+
* Send a message to a specific peer. Resolves with the peer's reply
|
|
62
|
+
* (or `null` if the peer ack'd without a reply), rejects on timeout or
|
|
63
|
+
* unreachable peer. `timeoutMs` defaults to the transport's configured value.
|
|
64
|
+
*/
|
|
65
|
+
send(to: string, msg: Omit<ConsensusMessage, 'from'>, timeoutMs?: number): Promise<ConsensusReply>;
|
|
66
|
+
/** Broadcast to all currently-reachable peers. Resolves once dispatched; replies (if any) arrive via onMessage. */
|
|
67
|
+
broadcast(msg: Omit<ConsensusMessage, 'from'>): Promise<void>;
|
|
68
|
+
/** Register the inbound-message handler. Calling again replaces the previous handler. */
|
|
69
|
+
onMessage(handler: ConsensusMessageHandler): void;
|
|
70
|
+
/** Currently-reachable peer node ids (excludes self). */
|
|
71
|
+
peers(): readonly string[];
|
|
72
|
+
/** Tear down. After close(), send/broadcast reject. */
|
|
73
|
+
close(): Promise<void>;
|
|
74
|
+
}
|
|
75
|
+
export interface NodeKeyPair {
|
|
76
|
+
/** Ed25519 private key in PKCS8 PEM. */
|
|
77
|
+
readonly privateKeyPem: string;
|
|
78
|
+
/** Ed25519 public key in SPKI PEM. */
|
|
79
|
+
readonly publicKeyPem: string;
|
|
80
|
+
}
|
|
81
|
+
/** Generate a fresh Ed25519 keypair for a consensus node. */
|
|
82
|
+
export declare function generateNodeKeyPair(): NodeKeyPair;
|
|
83
|
+
/**
|
|
84
|
+
* Canonical byte string for signing. Deterministic across hosts: deep-sorted-key
|
|
85
|
+
* JSON of the message's content fields (everything except `signature`).
|
|
86
|
+
*/
|
|
87
|
+
export declare function canonicalizeForSigning(msg: Omit<ConsensusMessage, 'signature'>): Buffer;
|
|
88
|
+
/** Stable digest of a message's content — handy for dedup and logging. */
|
|
89
|
+
export declare function messageDigest(msg: Omit<ConsensusMessage, 'signature'>): string;
|
|
90
|
+
/** Sign a message with an Ed25519 private key (PEM). Returns base64 signature. */
|
|
91
|
+
export declare function signMessage(msg: Omit<ConsensusMessage, 'signature'>, privateKeyPem: string): string;
|
|
92
|
+
/**
|
|
93
|
+
* Verify a signed message against a peer's Ed25519 public key (PEM).
|
|
94
|
+
* Returns true iff the signature is present and valid over the message's
|
|
95
|
+
* content fields. Fail-closed: a missing signature returns false.
|
|
96
|
+
*/
|
|
97
|
+
export declare function verifyMessage(msg: ConsensusMessage, publicKeyPem: string): boolean;
|
|
98
|
+
/**
|
|
99
|
+
* Shared registry of LocalTransport instances. Multiple consensus nodes in
|
|
100
|
+
* the same process register here; send/broadcast deliver to peers' handlers.
|
|
101
|
+
* Use a fresh registry per test to keep tests isolated.
|
|
102
|
+
*/
|
|
103
|
+
export declare class LocalTransportRegistry {
|
|
104
|
+
private readonly nodes;
|
|
105
|
+
register(t: LocalTransport): void;
|
|
106
|
+
unregister(nodeId: string): void;
|
|
107
|
+
get(nodeId: string): LocalTransport | undefined;
|
|
108
|
+
peerIds(exclude: string): string[];
|
|
109
|
+
}
|
|
110
|
+
/** Process-wide default registry. Tests should pass their own. */
|
|
111
|
+
export declare const defaultLocalRegistry: LocalTransportRegistry;
|
|
112
|
+
export interface LocalTransportOptions {
|
|
113
|
+
readonly registry?: LocalTransportRegistry;
|
|
114
|
+
readonly defaultTimeoutMs?: number;
|
|
115
|
+
/** Optional Ed25519 keypair — when set, outbound messages are signed and inbound are verified against the sender's pubkey (resolved via `resolvePeerPublicKey`). */
|
|
116
|
+
readonly keyPair?: NodeKeyPair;
|
|
117
|
+
/** Map a peer nodeId → its Ed25519 public key PEM. Required if `keyPair` is set and you want verification. */
|
|
118
|
+
readonly resolvePeerPublicKey?: (nodeId: string) => string | undefined;
|
|
119
|
+
}
|
|
120
|
+
export declare class LocalTransport implements ConsensusTransport {
|
|
121
|
+
readonly nodeId: string;
|
|
122
|
+
private readonly registry;
|
|
123
|
+
private readonly defaultTimeoutMs;
|
|
124
|
+
private readonly keyPair?;
|
|
125
|
+
private readonly resolvePeerPublicKey?;
|
|
126
|
+
private handler;
|
|
127
|
+
private closed;
|
|
128
|
+
private seqCounter;
|
|
129
|
+
/** Per-sender last-seen seq for replay defense (only used when signed). */
|
|
130
|
+
private readonly lastSeenSeq;
|
|
131
|
+
constructor(nodeId: string, opts?: LocalTransportOptions);
|
|
132
|
+
onMessage(handler: ConsensusMessageHandler): void;
|
|
133
|
+
peers(): readonly string[];
|
|
134
|
+
private stamp;
|
|
135
|
+
/** Deliver an inbound message to a target's handler, with optional sig + replay checks. */
|
|
136
|
+
private deliver;
|
|
137
|
+
send(to: string, msg: Omit<ConsensusMessage, 'from'>, timeoutMs?: number): Promise<ConsensusReply>;
|
|
138
|
+
broadcast(msg: Omit<ConsensusMessage, 'from'>): Promise<void>;
|
|
139
|
+
close(): Promise<void>;
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/consensus/transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ADR-095 G2 — pluggable transport for hive-mind consensus protocols.
|
|
3
|
+
*
|
|
4
|
+
* The raft/byzantine/gossip consensus implementations historically used a
|
|
5
|
+
* local `EventEmitter` for *everything* — both observability events
|
|
6
|
+
* ("leader.elected", "consensus.achieved") AND inter-node messages
|
|
7
|
+
* (append-entries, vote requests, pre-prepare/prepare/commit). The latter
|
|
8
|
+
* never actually crossed a process or node boundary: a node "sent" a
|
|
9
|
+
* message by `emit`ting it locally and synthesizing the peer's reply
|
|
10
|
+
* inline. That's the single-process limitation #G2 names.
|
|
11
|
+
*
|
|
12
|
+
* This module separates the inter-node-message dimension behind a
|
|
13
|
+
* `ConsensusTransport` interface. Two implementations:
|
|
14
|
+
*
|
|
15
|
+
* - `LocalTransport` — an in-process registry. Multiple consensus
|
|
16
|
+
* instances in the same Node process share a registry and deliver
|
|
17
|
+
* messages to each other synchronously. Matches the current
|
|
18
|
+
* single-process behavior; the default so nothing breaks.
|
|
19
|
+
* - `FederationTransport` (separate file, ADR-104 wire) — serializes
|
|
20
|
+
* ConsensusMessages into federation envelopes, signs them with the
|
|
21
|
+
* node's Ed25519 key, sends over WS via agentic-flow/transport/loader,
|
|
22
|
+
* and dispatches inbound envelopes with signature verification.
|
|
23
|
+
*
|
|
24
|
+
* Observability events stay on the consensus class's own EventEmitter —
|
|
25
|
+
* this is purely the messaging layer.
|
|
26
|
+
*
|
|
27
|
+
* No new dependencies: Ed25519 signing uses Node's built-in `crypto`
|
|
28
|
+
* (`generateKeyPairSync('ed25519')` + `sign`/`verify` with `null` algorithm,
|
|
29
|
+
* which is correct for Ed25519).
|
|
30
|
+
*/
|
|
31
|
+
import { createHash, generateKeyPairSync, sign as cryptoSign, verify as cryptoVerify, createPrivateKey, createPublicKey } from 'node:crypto';
|
|
32
|
+
/** Generate a fresh Ed25519 keypair for a consensus node. */
|
|
33
|
+
export function generateNodeKeyPair() {
|
|
34
|
+
const { privateKey, publicKey } = generateKeyPairSync('ed25519');
|
|
35
|
+
return {
|
|
36
|
+
privateKeyPem: privateKey.export({ format: 'pem', type: 'pkcs8' }).toString(),
|
|
37
|
+
publicKeyPem: publicKey.export({ format: 'pem', type: 'spki' }).toString(),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Recursively sort object keys so JSON serialization is deterministic
|
|
42
|
+
* regardless of insertion order — at every nesting level, not just the top.
|
|
43
|
+
* Arrays keep their order (order is semantically meaningful, e.g. log entries).
|
|
44
|
+
*/
|
|
45
|
+
function deepSortKeys(v) {
|
|
46
|
+
if (Array.isArray(v))
|
|
47
|
+
return v.map(deepSortKeys);
|
|
48
|
+
if (v && typeof v === 'object') {
|
|
49
|
+
const out = {};
|
|
50
|
+
for (const k of Object.keys(v).sort()) {
|
|
51
|
+
const val = v[k];
|
|
52
|
+
if (val !== undefined)
|
|
53
|
+
out[k] = deepSortKeys(val);
|
|
54
|
+
}
|
|
55
|
+
return out;
|
|
56
|
+
}
|
|
57
|
+
return v;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Canonical byte string for signing. Deterministic across hosts: deep-sorted-key
|
|
61
|
+
* JSON of the message's content fields (everything except `signature`).
|
|
62
|
+
*/
|
|
63
|
+
export function canonicalizeForSigning(msg) {
|
|
64
|
+
return Buffer.from(JSON.stringify(deepSortKeys(msg)), 'utf-8');
|
|
65
|
+
}
|
|
66
|
+
/** Stable digest of a message's content — handy for dedup and logging. */
|
|
67
|
+
export function messageDigest(msg) {
|
|
68
|
+
return createHash('sha256').update(canonicalizeForSigning(msg)).digest('hex');
|
|
69
|
+
}
|
|
70
|
+
/** Sign a message with an Ed25519 private key (PEM). Returns base64 signature. */
|
|
71
|
+
export function signMessage(msg, privateKeyPem) {
|
|
72
|
+
const key = createPrivateKey(privateKeyPem);
|
|
73
|
+
const sig = cryptoSign(null, canonicalizeForSigning(msg), key);
|
|
74
|
+
return sig.toString('base64');
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Verify a signed message against a peer's Ed25519 public key (PEM).
|
|
78
|
+
* Returns true iff the signature is present and valid over the message's
|
|
79
|
+
* content fields. Fail-closed: a missing signature returns false.
|
|
80
|
+
*/
|
|
81
|
+
export function verifyMessage(msg, publicKeyPem) {
|
|
82
|
+
if (typeof msg.signature !== 'string' || msg.signature.length === 0)
|
|
83
|
+
return false;
|
|
84
|
+
try {
|
|
85
|
+
const { signature, ...content } = msg;
|
|
86
|
+
const key = createPublicKey(publicKeyPem);
|
|
87
|
+
return cryptoVerify(null, canonicalizeForSigning(content), key, Buffer.from(signature, 'base64'));
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// ---------------------------------------------------------------------------
|
|
94
|
+
// LocalTransport — in-process registry. The default. Matches single-process.
|
|
95
|
+
// ---------------------------------------------------------------------------
|
|
96
|
+
/**
|
|
97
|
+
* Shared registry of LocalTransport instances. Multiple consensus nodes in
|
|
98
|
+
* the same process register here; send/broadcast deliver to peers' handlers.
|
|
99
|
+
* Use a fresh registry per test to keep tests isolated.
|
|
100
|
+
*/
|
|
101
|
+
export class LocalTransportRegistry {
|
|
102
|
+
nodes = new Map();
|
|
103
|
+
register(t) {
|
|
104
|
+
this.nodes.set(t.nodeId, t);
|
|
105
|
+
}
|
|
106
|
+
unregister(nodeId) {
|
|
107
|
+
this.nodes.delete(nodeId);
|
|
108
|
+
}
|
|
109
|
+
get(nodeId) {
|
|
110
|
+
return this.nodes.get(nodeId);
|
|
111
|
+
}
|
|
112
|
+
peerIds(exclude) {
|
|
113
|
+
return [...this.nodes.keys()].filter(id => id !== exclude);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/** Process-wide default registry. Tests should pass their own. */
|
|
117
|
+
export const defaultLocalRegistry = new LocalTransportRegistry();
|
|
118
|
+
export class LocalTransport {
|
|
119
|
+
nodeId;
|
|
120
|
+
registry;
|
|
121
|
+
defaultTimeoutMs;
|
|
122
|
+
keyPair;
|
|
123
|
+
resolvePeerPublicKey;
|
|
124
|
+
handler = null;
|
|
125
|
+
closed = false;
|
|
126
|
+
seqCounter = 0;
|
|
127
|
+
/** Per-sender last-seen seq for replay defense (only used when signed). */
|
|
128
|
+
lastSeenSeq = new Map();
|
|
129
|
+
constructor(nodeId, opts = {}) {
|
|
130
|
+
this.nodeId = nodeId;
|
|
131
|
+
this.registry = opts.registry ?? defaultLocalRegistry;
|
|
132
|
+
this.defaultTimeoutMs = opts.defaultTimeoutMs ?? 5_000;
|
|
133
|
+
this.keyPair = opts.keyPair;
|
|
134
|
+
this.resolvePeerPublicKey = opts.resolvePeerPublicKey;
|
|
135
|
+
this.registry.register(this);
|
|
136
|
+
}
|
|
137
|
+
onMessage(handler) {
|
|
138
|
+
this.handler = handler;
|
|
139
|
+
}
|
|
140
|
+
peers() {
|
|
141
|
+
return this.registry.peerIds(this.nodeId);
|
|
142
|
+
}
|
|
143
|
+
stamp(msg) {
|
|
144
|
+
const base = {
|
|
145
|
+
...msg,
|
|
146
|
+
from: this.nodeId,
|
|
147
|
+
seq: this.keyPair ? ++this.seqCounter : msg.seq,
|
|
148
|
+
};
|
|
149
|
+
if (this.keyPair) {
|
|
150
|
+
return { ...base, signature: signMessage(base, this.keyPair.privateKeyPem) };
|
|
151
|
+
}
|
|
152
|
+
return base;
|
|
153
|
+
}
|
|
154
|
+
/** Deliver an inbound message to a target's handler, with optional sig + replay checks. */
|
|
155
|
+
async deliver(target, msg) {
|
|
156
|
+
if (target.closed)
|
|
157
|
+
throw new Error(`LocalTransport: peer ${target.nodeId} is closed`);
|
|
158
|
+
// Verification path — only when the *target* expects signed messages.
|
|
159
|
+
if (target.keyPair && target.resolvePeerPublicKey) {
|
|
160
|
+
const pub = target.resolvePeerPublicKey(msg.from);
|
|
161
|
+
if (!pub || !verifyMessage(msg, pub)) {
|
|
162
|
+
throw new Error(`LocalTransport: signature verification failed for message from ${msg.from}`);
|
|
163
|
+
}
|
|
164
|
+
// Replay defense: seq must be strictly increasing per sender.
|
|
165
|
+
if (typeof msg.seq === 'number') {
|
|
166
|
+
const last = target.lastSeenSeq.get(msg.from) ?? 0;
|
|
167
|
+
if (msg.seq <= last)
|
|
168
|
+
throw new Error(`LocalTransport: replayed/out-of-order seq from ${msg.from} (${msg.seq} <= ${last})`);
|
|
169
|
+
target.lastSeenSeq.set(msg.from, msg.seq);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
if (!target.handler)
|
|
173
|
+
return null;
|
|
174
|
+
const reply = await target.handler(msg);
|
|
175
|
+
return (reply ?? null);
|
|
176
|
+
}
|
|
177
|
+
async send(to, msg, timeoutMs) {
|
|
178
|
+
if (this.closed)
|
|
179
|
+
throw new Error('LocalTransport: closed');
|
|
180
|
+
const target = this.registry.get(to);
|
|
181
|
+
if (!target)
|
|
182
|
+
throw new Error(`LocalTransport: unreachable peer ${to}`);
|
|
183
|
+
const stamped = this.stamp(msg);
|
|
184
|
+
const t = timeoutMs ?? this.defaultTimeoutMs;
|
|
185
|
+
return Promise.race([
|
|
186
|
+
this.deliver(target, stamped),
|
|
187
|
+
new Promise((_, rej) => setTimeout(() => rej(new Error(`LocalTransport: send to ${to} timed out (${t}ms)`)), t)),
|
|
188
|
+
]);
|
|
189
|
+
}
|
|
190
|
+
async broadcast(msg) {
|
|
191
|
+
if (this.closed)
|
|
192
|
+
throw new Error('LocalTransport: closed');
|
|
193
|
+
const stamped = this.stamp(msg);
|
|
194
|
+
await Promise.allSettled(this.registry.peerIds(this.nodeId).map(id => {
|
|
195
|
+
const target = this.registry.get(id);
|
|
196
|
+
return target ? this.deliver(target, stamped).catch(() => { }) : Promise.resolve();
|
|
197
|
+
}));
|
|
198
|
+
}
|
|
199
|
+
async close() {
|
|
200
|
+
this.closed = true;
|
|
201
|
+
this.handler = null;
|
|
202
|
+
this.registry.unregister(this.nodeId);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/consensus/transport.ts"],"names":[],"mappings":"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"}
|
package/dist/federation-hub.js
CHANGED
|
@@ -279,7 +279,7 @@ export class FederationHub extends EventEmitter {
|
|
|
279
279
|
};
|
|
280
280
|
this.ephemeralAgents.set(agentId, agent);
|
|
281
281
|
this.addAgentToIndexes(agent);
|
|
282
|
-
//
|
|
282
|
+
// Async spawn with status transition (spawning -> active)
|
|
283
283
|
setTimeout(() => {
|
|
284
284
|
const a = this.ephemeralAgents.get(agentId);
|
|
285
285
|
if (a && a.status === 'spawning') {
|