agent-comms 8.15.1 → 8.15.2
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-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/dist/core/coordinator-role.d.ts +2 -0
- package/dist/core/coordinator-role.d.ts.map +1 -1
- package/dist/core/coordinator-role.js +7 -1
- package/dist/core/coordinator-role.js.map +1 -1
- package/dist/core/election-sessions.d.ts +3 -0
- package/dist/core/election-sessions.d.ts.map +1 -1
- package/dist/core/election-sessions.js +27 -5
- package/dist/core/election-sessions.js.map +1 -1
- package/dist/test/coordinator-role.unit.test.js +54 -0
- package/dist/test/coordinator-role.unit.test.js.map +1 -1
- package/dist/test/election-sessions.unit.test.d.ts +5 -0
- package/dist/test/election-sessions.unit.test.d.ts.map +1 -0
- package/dist/test/election-sessions.unit.test.js +104 -0
- package/dist/test/election-sessions.unit.test.js.map +1 -0
- package/package.json +2 -2
|
@@ -35,6 +35,8 @@ export declare class CoordinatorRole {
|
|
|
35
35
|
/** Set while this side waits out claimWaitMs for an incumbent it can reach. */
|
|
36
36
|
private claimWait;
|
|
37
37
|
private stopped;
|
|
38
|
+
/** The claim, as `term:holder`, each peer was last answered with. A peer whose view lags keeps sending the claims it knows, and answering each one with the same incumbent only multiplies the traffic: the answer is repeated only when the incumbent changes or the peer's session is enrolled afresh, since the earlier answer may have been lost with the old session. */
|
|
39
|
+
private readonly answered;
|
|
38
40
|
constructor(deps: Readonly<CoordinatorRoleDeps>);
|
|
39
41
|
private get election();
|
|
40
42
|
/** Whether this side holds the role now. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coordinator-role.d.ts","sourceRoot":"","sources":["../../src/core/coordinator-role.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEtE,yGAAyG;AACzG,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,mRAAmR;AACnR,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,IAAI,CAC1B,aAAa,EACb,2BAA2B,GAAG,sBAAsB,GAAG,iBAAiB,CACzE,CAAC;IACF,0XAA0X;IAC1X,WAAW,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,gFAAgF;IAChF,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACnC;AAYD,qBAAa,eAAe;
|
|
1
|
+
{"version":3,"file":"coordinator-role.d.ts","sourceRoot":"","sources":["../../src/core/coordinator-role.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEtE,yGAAyG;AACzG,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,mRAAmR;AACnR,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,IAAI,CAC1B,aAAa,EACb,2BAA2B,GAAG,sBAAsB,GAAG,iBAAiB,CACzE,CAAC;IACF,0XAA0X;IAC1X,WAAW,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,gFAAgF;IAChF,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACnC;AAYD,qBAAa,eAAe;IAad,OAAO,CAAC,QAAQ,CAAC,IAAI;IAZjC,4KAA4K;IAC5K,OAAO,CAAC,gBAAgB,CAAkC;IAC1D,oKAAoK;IACpK,OAAO,CAAC,OAAO,CAAS;IACxB,4MAA4M;IAC5M,OAAO,CAAC,WAAW,CAAoC;IACvD,+EAA+E;IAC/E,OAAO,CAAC,SAAS,CAA4C;IAC7D,OAAO,CAAC,OAAO,CAAS;IACxB,8WAA8W;IAC9W,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;gBAEzB,IAAI,EAAE,QAAQ,CAAC,mBAAmB,CAAC;IAEhE,OAAO,KAAK,QAAQ,GAKnB;IAED,4CAA4C;IAC5C,QAAQ,IAAI,OAAO;IAInB,kGAAkG;IAClG,OAAO,IAAI,oBAAoB,GAAG,SAAS;IAM3C,2NAA2N;IACrN,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAKpC,gSAAgS;IAChS,sBAAsB,IAAI,IAAI;IAK9B,qMAAqM;IAC/L,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAOnE,unBAAunB;IACjnB,WAAW,CACf,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAClC,KAAK,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAChC,OAAO,CAAC,IAAI,CAAC;IAwBhB,ibAAib;IAC3a,eAAe,CACnB,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GACrC,OAAO,CAAC,IAAI,CAAC;IAShB,oIAAoI;IAC9H,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,OAAO,CAAC,gBAAgB;IAUxB,uNAAuN;IACvN,OAAO,CAAC,oBAAoB;IAO5B,4OAA4O;IAC5O,OAAO,CAAC,cAAc;YAaR,KAAK;IAMnB,OAAO,CAAC,eAAe;IAMvB,wNAAwN;YAC1M,WAAW;IAMzB,mSAAmS;YACrR,YAAY;CAM3B"}
|
|
@@ -22,6 +22,8 @@ export class CoordinatorRole {
|
|
|
22
22
|
/** Set while this side waits out claimWaitMs for an incumbent it can reach. */
|
|
23
23
|
claimWait;
|
|
24
24
|
stopped = false;
|
|
25
|
+
/** The claim, as `term:holder`, each peer was last answered with. A peer whose view lags keeps sending the claims it knows, and answering each one with the same incumbent only multiplies the traffic: the answer is repeated only when the incumbent changes or the peer's session is enrolled afresh, since the earlier answer may have been lost with the old session. */
|
|
26
|
+
answered = new Map();
|
|
25
27
|
constructor(deps) {
|
|
26
28
|
this.deps = deps;
|
|
27
29
|
}
|
|
@@ -56,6 +58,7 @@ export class CoordinatorRole {
|
|
|
56
58
|
}
|
|
57
59
|
/** Tells a peer whose machine-local session was just enrolled which claim this side accepts, so a joiner learns the incumbent instead of claiming over it. A no-op while this side knows of none. */
|
|
58
60
|
async announceTo(handle) {
|
|
61
|
+
this.answered.delete(handle.id);
|
|
59
62
|
const frame = this.electionInstance?.announceCurrent();
|
|
60
63
|
if (frame === undefined)
|
|
61
64
|
return;
|
|
@@ -67,6 +70,7 @@ export class CoordinatorRole {
|
|
|
67
70
|
return;
|
|
68
71
|
const result = this.election.evaluate(frame);
|
|
69
72
|
if (result.outcome === "accepted") {
|
|
73
|
+
this.answered.clear();
|
|
70
74
|
this.cancelClaimWait();
|
|
71
75
|
if (this.incumbentUnreachable())
|
|
72
76
|
this.startClaimWait();
|
|
@@ -75,7 +79,9 @@ export class CoordinatorRole {
|
|
|
75
79
|
else if (result.outcome === "retained" &&
|
|
76
80
|
!sameClaim(frame, result.incumbent)) {
|
|
77
81
|
const incumbent = this.election.announceCurrent();
|
|
78
|
-
|
|
82
|
+
const answer = `${String(result.incumbent.term)}:${deviceIdToHex(result.incumbent.coordinator)}`;
|
|
83
|
+
if (incumbent !== undefined && this.answered.get(handle.id) !== answer) {
|
|
84
|
+
this.answered.set(handle.id, answer);
|
|
79
85
|
await this.deps
|
|
80
86
|
.requireTransport()
|
|
81
87
|
.sendCoordinatorClaim(handle, incumbent);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coordinator-role.js","sourceRoot":"","sources":["../../src/core/coordinator-role.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,mBAAmB,EACnB,gBAAgB,GAEjB,MAAM,4CAA4C,CAAC;AACpD,OAAO,EACL,eAAe,EACf,aAAa,GACd,MAAM,iCAAiC,CAAC;AA0BzC,SAAS,SAAS,CAChB,KAAiC,EACjC,KAAiC;IAEjC,OAAO,CACL,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;QACzB,gBAAgB,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAC7D,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,eAAe;
|
|
1
|
+
{"version":3,"file":"coordinator-role.js","sourceRoot":"","sources":["../../src/core/coordinator-role.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,8 @@ export declare class ElectionSessions {
|
|
|
12
12
|
private readonly events;
|
|
13
13
|
/** Each enrolled session, with the handle its claims are reported under. */
|
|
14
14
|
private readonly enrolled;
|
|
15
|
+
/** Outbound state per session. A claim is state a later claim supersedes, so a session holds at most one send in flight and one waiting claim: a peer that reads slowly can never make this side's write queue grow with every claim it is answered with. */
|
|
16
|
+
private readonly outbound;
|
|
15
17
|
constructor(events: Readonly<Pick<TransportEvents, "onCoordinatorClaim" | "onElectionSessionEnrolled" | "onError">>);
|
|
16
18
|
/** Starts reading every coordinator-frame the session's peer gossips, for as long as the session lives, handing each to onCoordinatorClaim only while the session is enrolled. Called exactly once per session, as soon as it is opened and before anything could enrol it. */
|
|
17
19
|
watch(session: AcceptedMeshSession, handle: Readonly<ConnectionHandle>): void;
|
|
@@ -28,6 +30,7 @@ export declare class ElectionSessions {
|
|
|
28
30
|
broadcast(frame: Readonly<CoordinatorFrame>): Promise<void>;
|
|
29
31
|
/** Sends a claim over every enrolled session to one peer, as an announcement or an answer its peer is waiting to converge on; a peer with no enrolled session is not machine-local and never carries a claim. */
|
|
30
32
|
sendTo(peerId: string, frame: Readonly<CoordinatorFrame>): Promise<void>;
|
|
33
|
+
/** Sends a claim over one session. While an earlier send on it is still unresolved the claim replaces any one already waiting and this call returns at once; the send in flight then writes the newest waiting claim when it settles, so every send that does happen is awaited and the claim a peer finally reads is the newest one. */
|
|
31
34
|
private sendOver;
|
|
32
35
|
}
|
|
33
36
|
//# sourceMappingURL=election-sessions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"election-sessions.d.ts","sourceRoot":"","sources":["../../src/core/election-sessions.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"election-sessions.d.ts","sourceRoot":"","sources":["../../src/core/election-sessions.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAQxE,qBAAa,gBAAgB;IAUzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IATzB,4EAA4E;IAC5E,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAGrB;IACJ,6PAA6P;IAC7P,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgD;gBAGtD,MAAM,EAAE,QAAQ,CAC/B,IAAI,CACF,eAAe,EACf,oBAAoB,GAAG,2BAA2B,GAAG,SAAS,CAC/D,CACF;IAGH,+QAA+Q;IAC/Q,KAAK,CACH,OAAO,EAAE,mBAAmB,EAC5B,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GACjC,IAAI;IAUP,mNAAmN;IACnN,KAAK,CACH,OAAO,EAAE,mBAAmB,EAC5B,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GACjC,IAAI;IAKP,gEAAgE;IAChE,MAAM,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAK1C,KAAK,IAAI,IAAI;IAKb,yIAAyI;IACzI,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAInC,qIAAqI;IACrI,OAAO,IAAI,WAAW,CAAC,MAAM,CAAC;IAI9B,oNAAoN;IAC9M,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAQjE,iNAAiN;IAC3M,MAAM,CACV,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAChC,OAAO,CAAC,IAAI,CAAC;IAUhB,yUAAyU;YAC3T,QAAQ;CA8BvB"}
|
|
@@ -9,6 +9,8 @@ export class ElectionSessions {
|
|
|
9
9
|
events;
|
|
10
10
|
/** Each enrolled session, with the handle its claims are reported under. */
|
|
11
11
|
enrolled = new Map();
|
|
12
|
+
/** Outbound state per session. A claim is state a later claim supersedes, so a session holds at most one send in flight and one waiting claim: a peer that reads slowly can never make this side's write queue grow with every claim it is answered with. */
|
|
13
|
+
outbound = new Map();
|
|
12
14
|
constructor(events) {
|
|
13
15
|
this.events = events;
|
|
14
16
|
}
|
|
@@ -30,9 +32,11 @@ export class ElectionSessions {
|
|
|
30
32
|
/** Forgets a closed session. A no-op for one never enrolled. */
|
|
31
33
|
delete(session) {
|
|
32
34
|
this.enrolled.delete(session);
|
|
35
|
+
this.outbound.delete(session);
|
|
33
36
|
}
|
|
34
37
|
clear() {
|
|
35
38
|
this.enrolled.clear();
|
|
39
|
+
this.outbound.clear();
|
|
36
40
|
}
|
|
37
41
|
/** Whether this store holds a live machine-local session with the device (hex): a full member of its local mesh on this same machine. */
|
|
38
42
|
hasPeer(deviceHex) {
|
|
@@ -52,12 +56,30 @@ export class ElectionSessions {
|
|
|
52
56
|
.filter(([, handle]) => handle.id === peerId)
|
|
53
57
|
.map(async ([session, handle]) => this.sendOver(session, handle, frame)));
|
|
54
58
|
}
|
|
59
|
+
/** Sends a claim over one session. While an earlier send on it is still unresolved the claim replaces any one already waiting and this call returns at once; the send in flight then writes the newest waiting claim when it settles, so every send that does happen is awaited and the claim a peer finally reads is the newest one. */
|
|
55
60
|
async sendOver(session, handle, frame) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
+
const slot = this.outbound.get(session) ?? {
|
|
62
|
+
sending: false,
|
|
63
|
+
waiting: undefined,
|
|
64
|
+
};
|
|
65
|
+
this.outbound.set(session, slot);
|
|
66
|
+
if (slot.sending) {
|
|
67
|
+
slot.waiting = frame;
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
slot.sending = true;
|
|
71
|
+
let next = frame;
|
|
72
|
+
while (next !== undefined) {
|
|
73
|
+
await session.sendCoordinatorClaim(next).catch((error) => {
|
|
74
|
+
this.events.onError?.(error instanceof Error
|
|
75
|
+
? error
|
|
76
|
+
: new Error(`sendCoordinatorClaim(${handle.id}): ${String(error)}`));
|
|
77
|
+
});
|
|
78
|
+
// A session closed meanwhile has no one left to read what waits.
|
|
79
|
+
next = this.outbound.get(session) === slot ? slot.waiting : undefined;
|
|
80
|
+
slot.waiting = undefined;
|
|
81
|
+
}
|
|
82
|
+
slot.sending = false;
|
|
61
83
|
}
|
|
62
84
|
}
|
|
63
85
|
//# sourceMappingURL=election-sessions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"election-sessions.js","sourceRoot":"","sources":["../../src/core/election-sessions.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"election-sessions.js","sourceRoot":"","sources":["../../src/core/election-sessions.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,13 @@ import { deviceIdFromHex } from "wire-mesh-core/domain/device-id";
|
|
|
6
6
|
import { CoordinatorRole } from "../core/coordinator-role.js";
|
|
7
7
|
import { ROOM_REQUEST_TIMEOUT_MS } from "../core/request-timeouts.js";
|
|
8
8
|
const DEVICE_ID_HEX_LENGTH = 64;
|
|
9
|
+
/** The term a holder is raised to before a lower-term claim from a lagging peer counts as stale. */
|
|
10
|
+
const RAISED_TERM = 2;
|
|
11
|
+
/** A term above RAISED_TERM, as a later takeover would use. */
|
|
12
|
+
const LATER_TERM = RAISED_TERM + 1;
|
|
13
|
+
/** How many times a lagging peer repeats the same stale claim. */
|
|
14
|
+
/** Answers a holder has sent after: one to the first peer, one to the second, none to the first's repeat. */
|
|
15
|
+
const FIRST_ANSWERS = 2;
|
|
9
16
|
/** Delivers every frame a member sends to its recipients, one hop, the way a machine-local session does. Frames are queued rather than delivered inline so a reply cannot re-enter the sender mid-evaluation, matching the asynchronous delivery a real session gives. */
|
|
10
17
|
class Bus {
|
|
11
18
|
members = new Map();
|
|
@@ -146,6 +153,53 @@ test("a stale claim is answered with the incumbent, and its sender converges on
|
|
|
146
153
|
});
|
|
147
154
|
expect(bus.holders()).toEqual([holder.id]);
|
|
148
155
|
});
|
|
156
|
+
test("a peer that keeps sending the same stale claim is answered with the incumbent once, not once per claim", async () => {
|
|
157
|
+
const bus = new Bus();
|
|
158
|
+
const holder = bus.add(hexId("9"));
|
|
159
|
+
await holder.role.claimIfVacant();
|
|
160
|
+
await holder.role.handleClaim({ id: holder.id }, claimFor(holder.id, RAISED_TERM));
|
|
161
|
+
holder.sent.length = 0;
|
|
162
|
+
const stale = claimFor(hexId("1"), 0);
|
|
163
|
+
for (let repeat = 0; repeat < DEVICE_ID_HEX_LENGTH; repeat += 1) {
|
|
164
|
+
await holder.role.handleClaim({ id: hexId("1") }, stale);
|
|
165
|
+
}
|
|
166
|
+
expect(holder.sent).toEqual([claimFor(holder.id, RAISED_TERM)]);
|
|
167
|
+
});
|
|
168
|
+
test("each peer is answered once per incumbent, and again once the incumbent changes", async () => {
|
|
169
|
+
const bus = new Bus();
|
|
170
|
+
const holder = bus.add(hexId("9"));
|
|
171
|
+
await holder.role.claimIfVacant();
|
|
172
|
+
await holder.role.handleClaim({ id: holder.id }, claimFor(holder.id, RAISED_TERM));
|
|
173
|
+
holder.sent.length = 0;
|
|
174
|
+
const staleFromOne = claimFor(hexId("1"), 0);
|
|
175
|
+
const staleFromTwo = claimFor(hexId("2"), 0);
|
|
176
|
+
await holder.role.handleClaim({ id: hexId("1") }, staleFromOne);
|
|
177
|
+
await holder.role.handleClaim({ id: hexId("2") }, staleFromTwo);
|
|
178
|
+
await holder.role.handleClaim({ id: hexId("1") }, staleFromOne);
|
|
179
|
+
expect(holder.sent).toEqual([
|
|
180
|
+
claimFor(holder.id, RAISED_TERM),
|
|
181
|
+
claimFor(holder.id, RAISED_TERM),
|
|
182
|
+
]);
|
|
183
|
+
await holder.role.handleClaim({ id: hexId("3") }, claimFor(hexId("3"), LATER_TERM + 1));
|
|
184
|
+
holder.sent.length = 0;
|
|
185
|
+
await holder.role.handleClaim({ id: hexId("1") }, staleFromOne);
|
|
186
|
+
await holder.role.handleClaim({ id: hexId("1") }, staleFromOne);
|
|
187
|
+
expect(holder.sent).toEqual([claimFor(hexId("3"), LATER_TERM + 1)]);
|
|
188
|
+
});
|
|
189
|
+
test("a peer whose session was enrolled afresh is answered again, since its earlier answer may have been lost with the old session", async () => {
|
|
190
|
+
const bus = new Bus();
|
|
191
|
+
const holder = bus.add(hexId("9"));
|
|
192
|
+
await holder.role.claimIfVacant();
|
|
193
|
+
await holder.role.handleClaim({ id: holder.id }, claimFor(holder.id, RAISED_TERM));
|
|
194
|
+
holder.sent.length = 0;
|
|
195
|
+
const stale = claimFor(hexId("1"), 0);
|
|
196
|
+
await holder.role.handleClaim({ id: hexId("1") }, stale);
|
|
197
|
+
await holder.role.handleClaim({ id: hexId("1") }, stale);
|
|
198
|
+
expect(holder.sent).toHaveLength(1);
|
|
199
|
+
await holder.role.announceTo({ id: hexId("1") });
|
|
200
|
+
await holder.role.handleClaim({ id: hexId("1") }, stale);
|
|
201
|
+
expect(holder.sent).toHaveLength(FIRST_ANSWERS + 1);
|
|
202
|
+
});
|
|
149
203
|
test("two stores that agree on the incumbent never echo it back and forth", async () => {
|
|
150
204
|
const bus = new Bus();
|
|
151
205
|
const holder = bus.add(hexId("2"));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coordinator-role.unit.test.js","sourceRoot":"","sources":["../../src/test/coordinator-role.unit.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"coordinator-role.unit.test.js","sourceRoot":"","sources":["../../src/test/coordinator-role.unit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ElectionSessions' outbound claims over a session whose peer reads slowly: a claim is idempotent state that a later claim supersedes, so at most one send is in flight per session and a newer claim replaces a waiting one instead of queueing behind it (agent-comms#434, claims piling up in the write queue of a session whose peer did not keep up).
|
|
3
|
+
*/
|
|
4
|
+
export {};
|
|
5
|
+
//# sourceMappingURL=election-sessions.unit.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"election-sessions.unit.test.d.ts","sourceRoot":"","sources":["../../src/test/election-sessions.unit.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ElectionSessions' outbound claims over a session whose peer reads slowly: a claim is idempotent state that a later claim supersedes, so at most one send is in flight per session and a newer claim replaces a waiting one instead of queueing behind it (agent-comms#434, claims piling up in the write queue of a session whose peer did not keep up).
|
|
3
|
+
*/
|
|
4
|
+
import { expect, test } from "vitest";
|
|
5
|
+
import { deviceIdFromHex } from "wire-mesh-core/domain/device-id";
|
|
6
|
+
import { ElectionSessions } from "../core/election-sessions.js";
|
|
7
|
+
const DEVICE_ID_HEX_LENGTH = 64;
|
|
8
|
+
/** Claims sent in order to a peer that keeps up. */
|
|
9
|
+
const IN_ORDER = 3;
|
|
10
|
+
/** Claims a busy election sends behind one unread send: more than one, so all but the newest are replaced. */
|
|
11
|
+
const BURST = IN_ORDER + 1;
|
|
12
|
+
const LAST_OF_BURST = BURST - 1;
|
|
13
|
+
/** A session whose sendCoordinatorClaim settles only when the test says the peer has read the frame. */
|
|
14
|
+
function fakeSession() {
|
|
15
|
+
const sent = [];
|
|
16
|
+
const waiting = [];
|
|
17
|
+
const session = {
|
|
18
|
+
coordinatorFrames: (async function* () { })(),
|
|
19
|
+
sendCoordinatorClaim: async (frame) => {
|
|
20
|
+
sent.push(frame);
|
|
21
|
+
await new Promise((resolve) => {
|
|
22
|
+
waiting.push(resolve);
|
|
23
|
+
});
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
return {
|
|
27
|
+
session,
|
|
28
|
+
sent,
|
|
29
|
+
finishOne: () => {
|
|
30
|
+
waiting.shift()?.();
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
function claim(term) {
|
|
35
|
+
return {
|
|
36
|
+
type: "coordinator",
|
|
37
|
+
term,
|
|
38
|
+
coordinator: deviceIdFromHex("1".repeat(DEVICE_ID_HEX_LENGTH)),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function enrolled(fake, id = "a") {
|
|
42
|
+
const sessions = new ElectionSessions({
|
|
43
|
+
onCoordinatorClaim: () => { },
|
|
44
|
+
onElectionSessionEnrolled: () => { },
|
|
45
|
+
onError: (error) => {
|
|
46
|
+
throw error;
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
sessions.enrol(fake.session, { id });
|
|
50
|
+
return sessions;
|
|
51
|
+
}
|
|
52
|
+
const tick = async () => {
|
|
53
|
+
await new Promise((resolve) => {
|
|
54
|
+
setImmediate(resolve);
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
test("claims sent while the previous one is still unread are replaced by the newest, so the queue stays at one", async () => {
|
|
58
|
+
const fake = fakeSession();
|
|
59
|
+
const sessions = enrolled(fake);
|
|
60
|
+
for (let term = 0; term < BURST; term += 1) {
|
|
61
|
+
void sessions.broadcast(claim(term));
|
|
62
|
+
}
|
|
63
|
+
await tick();
|
|
64
|
+
expect(fake.sent).toEqual([claim(0)]);
|
|
65
|
+
fake.finishOne();
|
|
66
|
+
await tick();
|
|
67
|
+
expect(fake.sent).toEqual([claim(0), claim(LAST_OF_BURST)]);
|
|
68
|
+
});
|
|
69
|
+
test("every claim is sent in order when the peer keeps up", async () => {
|
|
70
|
+
const fake = fakeSession();
|
|
71
|
+
const sessions = enrolled(fake);
|
|
72
|
+
for (let term = 0; term < IN_ORDER; term += 1) {
|
|
73
|
+
const sending = sessions.broadcast(claim(term));
|
|
74
|
+
await tick();
|
|
75
|
+
fake.finishOne();
|
|
76
|
+
await sending;
|
|
77
|
+
}
|
|
78
|
+
expect(fake.sent).toEqual([claim(0), claim(1), claim(2)]);
|
|
79
|
+
});
|
|
80
|
+
test("a slow session does not hold back claims to another session", async () => {
|
|
81
|
+
const slow = fakeSession();
|
|
82
|
+
const quick = fakeSession();
|
|
83
|
+
const sessions = enrolled(slow, "slow");
|
|
84
|
+
sessions.enrol(quick.session, { id: "quick" });
|
|
85
|
+
void sessions.broadcast(claim(0));
|
|
86
|
+
void sessions.broadcast(claim(1));
|
|
87
|
+
await tick();
|
|
88
|
+
quick.finishOne();
|
|
89
|
+
await tick();
|
|
90
|
+
expect(slow.sent).toEqual([claim(0)]);
|
|
91
|
+
expect(quick.sent).toEqual([claim(0), claim(1)]);
|
|
92
|
+
});
|
|
93
|
+
test("a session that closes forgets its waiting claim", async () => {
|
|
94
|
+
const fake = fakeSession();
|
|
95
|
+
const sessions = enrolled(fake);
|
|
96
|
+
void sessions.broadcast(claim(0));
|
|
97
|
+
void sessions.broadcast(claim(1));
|
|
98
|
+
await tick();
|
|
99
|
+
sessions.delete(fake.session);
|
|
100
|
+
fake.finishOne();
|
|
101
|
+
await tick();
|
|
102
|
+
expect(fake.sent).toEqual([claim(0)]);
|
|
103
|
+
});
|
|
104
|
+
//# sourceMappingURL=election-sessions.unit.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"election-sessions.unit.test.js","sourceRoot":"","sources":["../../src/test/election-sessions.unit.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-comms",
|
|
3
3
|
"description": "Cross-harness communication mesh for LLM agents — rooms, DMs, presence, and real-time push delivery over TCP",
|
|
4
|
-
"version": "8.15.
|
|
4
|
+
"version": "8.15.2",
|
|
5
5
|
"bin": {
|
|
6
6
|
"agent-comms": "dist/cli.js"
|
|
7
7
|
},
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"react-dom": "19.3.0",
|
|
24
24
|
"typebox": "1.3.6",
|
|
25
25
|
"web-ui-primitives": "1.1.3",
|
|
26
|
-
"wire-mesh-core": "4.0.
|
|
26
|
+
"wire-mesh-core": "4.0.6",
|
|
27
27
|
"ws": "8.21.1",
|
|
28
28
|
"zod": "4.4.3"
|
|
29
29
|
},
|