agent-comms 2.9.0 → 2.10.0

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 (37) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/README.md +1 -1
  4. package/dist/core/mesh-store.d.ts +26 -2
  5. package/dist/core/mesh-store.d.ts.map +1 -1
  6. package/dist/core/mesh-store.js +143 -24
  7. package/dist/core/mesh-store.js.map +1 -1
  8. package/dist/test/delivery-receipt.helper.js +44 -10
  9. package/dist/test/delivery-receipt.helper.js.map +1 -1
  10. package/dist/test/identity-restart.integration.test.js +18 -2
  11. package/dist/test/identity-restart.integration.test.js.map +1 -1
  12. package/dist/test/invite-replay.test.d.ts +5 -0
  13. package/dist/test/invite-replay.test.d.ts.map +1 -0
  14. package/dist/test/invite-replay.test.js +67 -0
  15. package/dist/test/invite-replay.test.js.map +1 -0
  16. package/dist/test/mesh-e2e.integration.test.js +20 -4
  17. package/dist/test/mesh-e2e.integration.test.js.map +1 -1
  18. package/dist/test/mesh-smoke.runner.js +15 -1
  19. package/dist/test/mesh-smoke.runner.js.map +1 -1
  20. package/dist/test/room-send-retry-queue.test.d.ts +5 -0
  21. package/dist/test/room-send-retry-queue.test.d.ts.map +1 -0
  22. package/dist/test/room-send-retry-queue.test.js +142 -0
  23. package/dist/test/room-send-retry-queue.test.js.map +1 -0
  24. package/dist/test/room-send-retry.integration.test.d.ts +5 -0
  25. package/dist/test/room-send-retry.integration.test.d.ts.map +1 -0
  26. package/dist/test/{downtime-replay.integration.test.js → room-send-retry.integration.test.js} +16 -21
  27. package/dist/test/room-send-retry.integration.test.js.map +1 -0
  28. package/dist/test/state-sync-convergence.test.js +23 -1
  29. package/dist/test/state-sync-convergence.test.js.map +1 -1
  30. package/package.json +2 -2
  31. package/dist/test/downtime-replay.integration.test.d.ts +0 -7
  32. package/dist/test/downtime-replay.integration.test.d.ts.map +0 -1
  33. package/dist/test/downtime-replay.integration.test.js.map +0 -1
  34. package/dist/test/downtime-replay.test.d.ts +0 -5
  35. package/dist/test/downtime-replay.test.d.ts.map +0 -1
  36. package/dist/test/downtime-replay.test.js +0 -156
  37. package/dist/test/downtime-replay.test.js.map +0 -1
@@ -1,7 +0,0 @@
1
- /**
2
- * Integration test for issue #28: a bridge restarted with a persisted identity must be push-delivered the events that accumulated while its process was down, not just find them in synced history.
3
- *
4
- * Peer B goes away; A sends a room message while B is down; B restarts in the same identity slot and must fire onDelivery for the missed message.
5
- */
6
- export {};
7
- //# sourceMappingURL=downtime-replay.integration.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"downtime-replay.integration.test.d.ts","sourceRoot":"","sources":["../../src/test/downtime-replay.integration.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"downtime-replay.integration.test.js","sourceRoot":"","sources":["../../src/test/downtime-replay.integration.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- /**
2
- * Unit tests for downtime delivery replay (#28): events that accumulated in peers' delivery queues while a target's process was down fire onDelivery when the target applies its first snapshot, without transport involvement.
3
- */
4
- export {};
5
- //# sourceMappingURL=downtime-replay.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"downtime-replay.test.d.ts","sourceRoot":"","sources":["../../src/test/downtime-replay.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -1,156 +0,0 @@
1
- /**
2
- * Unit tests for downtime delivery replay (#28): events that accumulated in peers' delivery queues while a target's process was down fire onDelivery when the target applies its first snapshot, without transport involvement.
3
- */
4
- import * as assert from "node:assert/strict";
5
- import { test } from "node:test";
6
- import { MeshStore } from "../core/mesh-store.js";
7
- import { ownerNamedRoomPath } from "../core/room-path.js";
8
- import { wireTestTransport } from "./test-transport.js";
9
- /** A wire-accurate snapshot: production always applies parsed (cloned) state. */
10
- function snapshotOf(store) {
11
- return structuredClone(store.serialise());
12
- }
13
- /** A local-only store: transport is set (registerAgent's own broadcastPatch needs one) but never started, so no ports and no flake -- the stores in these tests never actually connect. */
14
- async function makeStore() {
15
- const store = new MeshStore();
16
- await wireTestTransport(store);
17
- return store;
18
- }
19
- void test("events queued while the target was down replay on its first snapshot", async () => {
20
- const sender = await makeStore();
21
- const author = await sender.registerAgent({
22
- name: "author",
23
- harness: "pi",
24
- cwd: "/tmp/p",
25
- pid: process.pid,
26
- visibility: "visible",
27
- tags: [],
28
- });
29
- // The target exists on the mesh (known to the sender) but its process is "down": modelled by only ever syncing snapshots into a future store.
30
- const target = await makeStore();
31
- const targetAgent = await target.registerAgent({
32
- name: "target",
33
- harness: "claude-code",
34
- cwd: "/tmp/t",
35
- pid: process.pid,
36
- visibility: "visible",
37
- tags: [],
38
- });
39
- // Make the sender aware of the target, then take the target's store away.
40
- sender.applyStateSync(target.serialise());
41
- const roomId = ownerNamedRoomPath(author.id, "room");
42
- await sender.createRoom({
43
- name: "room",
44
- type: "public",
45
- owner: author.id,
46
- description: "x",
47
- });
48
- await sender.joinRoom(roomId, targetAgent.id);
49
- // While the target is down, a room message is sent to it.
50
- await sender.sendRoomMessage(roomId, author.id, "while you were away");
51
- const pending = snapshotOf(sender).deliveryQueues[targetAgent.id];
52
- assert.ok(pending !== undefined && pending.length > 0);
53
- // The target returns (fresh process, same agent id) and receives the sender's snapshot: the pending event must fire onDelivery.
54
- const returned = await makeStore();
55
- const deliveries = [];
56
- returned.onDelivery = (_id, ev) => {
57
- deliveries.push(ev);
58
- };
59
- returned.peerId = targetAgent.id;
60
- returned.applyStateSync(snapshotOf(sender));
61
- assert.equal(deliveries.some((ev) => ev.type === "room_message" &&
62
- ev.message.content === "while you were away"), true);
63
- // Transient notifications carry no consumption evidence, so they merge into the queue (drain bridges still see them) but never replay-fire.
64
- assert.equal(deliveries.filter((ev) => ev.type === "room_members").length, 0);
65
- const queue = snapshotOf(returned).deliveryQueues[targetAgent.id] ?? [];
66
- assert.equal(queue.some((ev) => ev.type === "room_members"), true);
67
- // A second snapshot of the same state does not duplicate the push.
68
- returned.applyStateSync(snapshotOf(sender));
69
- assert.equal(deliveries.filter((ev) => ev.type === "room_message" &&
70
- ev.message.content === "while you were away").length, 1);
71
- });
72
- void test("a queue is bounded oldest-first so downtime cannot grow it without limit", async () => {
73
- const sender = await makeStore();
74
- const author = await sender.registerAgent({
75
- name: "author",
76
- harness: "pi",
77
- cwd: "/tmp/p",
78
- pid: process.pid,
79
- visibility: "visible",
80
- tags: [],
81
- });
82
- const target = await makeStore();
83
- const targetAgent = await target.registerAgent({
84
- name: "target",
85
- harness: "claude-code",
86
- cwd: "/tmp/t",
87
- pid: process.pid,
88
- visibility: "visible",
89
- tags: [],
90
- });
91
- sender.applyStateSync(target.serialise());
92
- const roomId = ownerNamedRoomPath(author.id, "room");
93
- await sender.createRoom({
94
- name: "room",
95
- type: "public",
96
- owner: author.id,
97
- description: "x",
98
- });
99
- await sender.joinRoom(roomId, targetAgent.id);
100
- for (let i = 0; i < 120; i++) {
101
- await sender.sendRoomMessage(roomId, author.id, `msg-${String(i)}`);
102
- }
103
- const queued = snapshotOf(sender).deliveryQueues[targetAgent.id] ?? [];
104
- assert.equal(queued.length, 100);
105
- assert.equal(queued[0]?.type === "room_message" &&
106
- queued[0].message.content === "msg-20", true);
107
- });
108
- void test("a pending invite replays until accepted or declined", async () => {
109
- const sender = await makeStore();
110
- const author = await sender.registerAgent({
111
- name: "owner",
112
- harness: "pi",
113
- cwd: "/tmp/p",
114
- pid: process.pid,
115
- visibility: "visible",
116
- tags: [],
117
- });
118
- const target = await makeStore();
119
- const targetAgent = await target.registerAgent({
120
- name: "invitee",
121
- harness: "claude-code",
122
- cwd: "/tmp/t",
123
- pid: process.pid,
124
- visibility: "visible",
125
- tags: [],
126
- });
127
- sender.applyStateSync(target.serialise());
128
- const roomId = ownerNamedRoomPath(author.id, "private-room");
129
- await sender.createRoom({
130
- name: "private-room",
131
- type: "private",
132
- owner: author.id,
133
- description: "x",
134
- });
135
- await sender.inviteToRoom(roomId, targetAgent.id, author.id);
136
- const returned = await makeStore();
137
- const deliveries = [];
138
- returned.onDelivery = (_id, ev) => {
139
- deliveries.push(ev);
140
- };
141
- returned.peerId = targetAgent.id;
142
- // Still on the invited list: the invite replays.
143
- returned.applyStateSync(snapshotOf(sender));
144
- assert.equal(deliveries.filter((ev) => ev.type === "room_invite").length, 1);
145
- // Declined (no longer invited): the same snapshot no longer replays it.
146
- await sender.declineInvite(roomId, targetAgent.id, "not now");
147
- const declined = await makeStore();
148
- const deliveries2 = [];
149
- declined.onDelivery = (_id, ev) => {
150
- deliveries2.push(ev);
151
- };
152
- declined.peerId = targetAgent.id;
153
- declined.applyStateSync(snapshotOf(sender));
154
- assert.equal(deliveries2.filter((ev) => ev.type === "room_invite").length, 0);
155
- });
156
- //# sourceMappingURL=downtime-replay.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"downtime-replay.test.js","sourceRoot":"","sources":["../../src/test/downtime-replay.test.ts"],"names":[],"mappings":"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"}