agent-comms 1.30.0 → 1.32.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 (39) 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/bridges/mcp/index.d.ts.map +1 -1
  5. package/dist/bridges/mcp/index.js +3 -11
  6. package/dist/bridges/mcp/index.js.map +1 -1
  7. package/dist/core/bridge-mesh.d.ts +14 -0
  8. package/dist/core/bridge-mesh.d.ts.map +1 -0
  9. package/dist/core/bridge-mesh.js +19 -0
  10. package/dist/core/bridge-mesh.js.map +1 -0
  11. package/dist/core/index.d.ts +2 -0
  12. package/dist/core/index.d.ts.map +1 -1
  13. package/dist/core/index.js +1 -0
  14. package/dist/core/index.js.map +1 -1
  15. package/dist/core/wire-mesh-transport.d.ts +57 -0
  16. package/dist/core/wire-mesh-transport.d.ts.map +1 -0
  17. package/dist/core/wire-mesh-transport.js +466 -0
  18. package/dist/core/wire-mesh-transport.js.map +1 -0
  19. package/dist/test/bridge-mesh.test.d.ts +5 -0
  20. package/dist/test/bridge-mesh.test.d.ts.map +1 -0
  21. package/dist/test/bridge-mesh.test.js +67 -0
  22. package/dist/test/bridge-mesh.test.js.map +1 -0
  23. package/dist/test/delivery-receipt.runner.d.ts +2 -7
  24. package/dist/test/delivery-receipt.runner.d.ts.map +1 -1
  25. package/dist/test/delivery-receipt.runner.js +4 -9
  26. package/dist/test/delivery-receipt.runner.js.map +1 -1
  27. package/dist/test/test-transport.d.ts +4 -0
  28. package/dist/test/test-transport.d.ts.map +1 -1
  29. package/dist/test/test-transport.js +13 -0
  30. package/dist/test/test-transport.js.map +1 -1
  31. package/dist/test/wire-mesh-transport-approval.integration.test.d.ts +5 -0
  32. package/dist/test/wire-mesh-transport-approval.integration.test.d.ts.map +1 -0
  33. package/dist/test/wire-mesh-transport-approval.integration.test.js +164 -0
  34. package/dist/test/wire-mesh-transport-approval.integration.test.js.map +1 -0
  35. package/dist/test/wire-mesh-transport.integration.test.d.ts +5 -0
  36. package/dist/test/wire-mesh-transport.integration.test.d.ts.map +1 -0
  37. package/dist/test/wire-mesh-transport.integration.test.js +89 -0
  38. package/dist/test/wire-mesh-transport.integration.test.js.map +1 -0
  39. package/package.json +4 -6
@@ -1,6 +1,10 @@
1
1
  /** Wires a real TlsTransport with a freshly generated identity onto a freshly constructed MeshStore -- the same setTransport() call every production bridge makes immediately after construction. MeshStore has no default transport, so every test that constructs one needs this (or an equivalent explicit setTransport() call) before init() or any other transport-using method runs. */
2
2
  import type { MeshStore } from "../core/mesh-store.js";
3
3
  export declare function wireTestTransport(store: MeshStore): void;
4
+ /**
5
+ * Wires a real WireMeshTransport onto a freshly constructed MeshStore -- the P2 substrate swap's own analogue of wireTestTransport above. Sets peerId to deviceIdToHex(identity.deviceId) rather than the certificate fingerprint: production bridges don't cut MeshStore.peerId over to this until step 4 of the migration's own sequencing, but WireMeshTransport's own internal session bookkeeping is already keyed by device-id, so a test exercising it end-to-end through a real MeshStore needs the two identity spaces to actually correlate.
6
+ */
7
+ export declare function wireWireMeshTestTransport(store: MeshStore): void;
4
8
  /**
5
9
  * Polls condition() until it returns true or timeoutMs elapses, rather than a fixed sleep() before a single check. A real TLS handshake plus the peer_list -> connectToPeer -> state_sync -> handlePeerConnected round trip genuinely takes variable, load-dependent wall-clock time -- comfortably inside a fixed sleep on a fast local machine, not reliably so under a throttled CI runner. Throws with a descriptive message on timeout rather than letting the caller's own assertion fail with a less specific one.
6
10
  */
@@ -1 +1 @@
1
- {"version":3,"file":"test-transport.d.ts","sourceRoot":"","sources":["../../src/test/test-transport.ts"],"names":[],"mappings":"AAAA,8XAA8X;AAI9X,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CASxD;AAMD;;GAEG;AACH,wBAAsB,OAAO,CAC3B,SAAS,EAAE,MAAM,OAAO,EACxB,WAAW,EAAE,MAAM,EACnB,SAAS,SAA8B,GACtC,OAAO,CAAC,IAAI,CAAC,CAYf"}
1
+ {"version":3,"file":"test-transport.d.ts","sourceRoot":"","sources":["../../src/test/test-transport.ts"],"names":[],"mappings":"AAAA,8XAA8X;AAM9X,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CASxD;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAOhE;AAMD;;GAEG;AACH,wBAAsB,OAAO,CAC3B,SAAS,EAAE,MAAM,OAAO,EACxB,WAAW,EAAE,MAAM,EACnB,SAAS,SAA8B,GACtC,OAAO,CAAC,IAAI,CAAC,CAYf"}
@@ -1,6 +1,8 @@
1
1
  /** Wires a real TlsTransport with a freshly generated identity onto a freshly constructed MeshStore -- the same setTransport() call every production bridge makes immediately after construction. MeshStore has no default transport, so every test that constructs one needs this (or an equivalent explicit setTransport() call) before init() or any other transport-using method runs. */
2
2
  import { TlsTransport } from "../core/tls-transport.js";
3
+ import { WireMeshTransport } from "../core/wire-mesh-transport.js";
3
4
  import { generateIdentity } from "../core/identity.js";
5
+ import { deviceIdToHex } from "@exadev/wire-mesh-core/domain/device-id";
4
6
  export function wireTestTransport(store) {
5
7
  const identity = generateIdentity();
6
8
  // Every real bridge sets peerId to the identity's own certificate fingerprint before wiring the transport -- TlsTransport's cert-pinning trust model means a peer's advertised ID and the fingerprint the other side actually authenticates the connection against must be the same value, or introduction/state-sync never recognises the peer as itself.
@@ -11,6 +13,17 @@ export function wireTestTransport(store) {
11
13
  console.error(`[transport error, peerId=${store.peerId}]`, e.message);
12
14
  };
13
15
  }
16
+ /**
17
+ * Wires a real WireMeshTransport onto a freshly constructed MeshStore -- the P2 substrate swap's own analogue of wireTestTransport above. Sets peerId to deviceIdToHex(identity.deviceId) rather than the certificate fingerprint: production bridges don't cut MeshStore.peerId over to this until step 4 of the migration's own sequencing, but WireMeshTransport's own internal session bookkeeping is already keyed by device-id, so a test exercising it end-to-end through a real MeshStore needs the two identity spaces to actually correlate.
18
+ */
19
+ export function wireWireMeshTestTransport(store) {
20
+ const identity = generateIdentity();
21
+ store.peerId = deviceIdToHex(Uint8Array.from(identity.deviceId));
22
+ store.setTransport(new WireMeshTransport(store.events, identity));
23
+ store.onError = (e) => {
24
+ console.error(`[transport error, peerId=${store.peerId}]`, e.message);
25
+ };
26
+ }
14
27
  // Generous on purpose: waitFor returns the instant its condition holds, so a long ceiling costs nothing on the happy path (a local run settles in well under a second) and only matters for the worst case -- a loaded CI runner working through a real, sequential chain of TLS handshakes (each one genuine X.509 certificate work, not instant) for the accept-flow's second connection direction, confirmed to need meaningfully more than 5s on at least one real CI run.
15
28
  const DEFAULT_WAIT_FOR_TIMEOUT_MS = 20_000;
16
29
  const WAIT_FOR_POLL_INTERVAL_MS = 20;
@@ -1 +1 @@
1
- {"version":3,"file":"test-transport.js","sourceRoot":"","sources":["../../src/test/test-transport.ts"],"names":[],"mappings":"AAAA,8XAA8X;AAE9X,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD,MAAM,UAAU,iBAAiB,CAAC,KAAgB;IAChD,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;IACpC,2VAA2V;IAC3V,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC;IACpC,KAAK,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC7D,4PAA4P;IAC5P,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,EAAE;QACpB,OAAO,CAAC,KAAK,CAAC,4BAA4B,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IACxE,CAAC,CAAC;AACJ,CAAC;AAED,+cAA+c;AAC/c,MAAM,2BAA2B,GAAG,MAAM,CAAC;AAC3C,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAErC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,SAAwB,EACxB,WAAmB,EACnB,SAAS,GAAG,2BAA2B;IAEvC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;QACpB,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CACb,2BAA2B,MAAM,CAAC,SAAS,CAAC,OAAO,WAAW,EAAE,CACjE,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAC5B,UAAU,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAC/C,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"test-transport.js","sourceRoot":"","sources":["../../src/test/test-transport.ts"],"names":[],"mappings":"AAAA,8XAA8X;AAE9X,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAGxE,MAAM,UAAU,iBAAiB,CAAC,KAAgB;IAChD,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;IACpC,2VAA2V;IAC3V,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC;IACpC,KAAK,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC7D,4PAA4P;IAC5P,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,EAAE;QACpB,OAAO,CAAC,KAAK,CAAC,4BAA4B,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IACxE,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,KAAgB;IACxD,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;IACpC,KAAK,CAAC,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjE,KAAK,CAAC,YAAY,CAAC,IAAI,iBAAiB,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAClE,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,EAAE;QACpB,OAAO,CAAC,KAAK,CAAC,4BAA4B,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IACxE,CAAC,CAAC;AACJ,CAAC;AAED,+cAA+c;AAC/c,MAAM,2BAA2B,GAAG,MAAM,CAAC;AAC3C,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAErC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,SAAwB,EACxB,WAAmB,EACnB,SAAS,GAAG,2BAA2B;IAEvC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;QACpB,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CACb,2BAA2B,MAAM,CAAC,SAAS,CAAC,OAAO,WAAW,EAAE,CACjE,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAC5B,UAAU,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAC/C,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Parity test for WireMeshTransport's connection-approval flow (connectToRemote/acceptConnection/rejectConnection) and listener management, mirroring approval.integration.test.ts's own scenarios against the new substrate.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=wire-mesh-transport-approval.integration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wire-mesh-transport-approval.integration.test.d.ts","sourceRoot":"","sources":["../../src/test/wire-mesh-transport-approval.integration.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,164 @@
1
+ /**
2
+ * Parity test for WireMeshTransport's connection-approval flow (connectToRemote/acceptConnection/rejectConnection) and listener management, mirroring approval.integration.test.ts's own scenarios against the new substrate.
3
+ */
4
+ import * as assert from "node:assert/strict";
5
+ import { test, describe } from "node:test";
6
+ import * as net from "node:net";
7
+ import { MeshStore } from "../core/mesh-store.js";
8
+ import { waitFor, wireWireMeshTestTransport } from "./test-transport.js";
9
+ function findFreePort() {
10
+ return new Promise((resolve, reject) => {
11
+ const server = net.createServer();
12
+ server.listen(0, "127.0.0.1", () => {
13
+ const addr = server.address();
14
+ const port = typeof addr === "object" && addr !== null ? addr.port : 0;
15
+ server.close(() => resolve(port));
16
+ });
17
+ server.on("error", reject);
18
+ });
19
+ }
20
+ let portOffset = 0;
21
+ async function uniquePort() {
22
+ portOffset += 10;
23
+ const base = await findFreePort();
24
+ return base + portOffset;
25
+ }
26
+ describe("WireMeshTransport connection approval", () => {
27
+ void test("accept establishes the peer connection", async () => {
28
+ const portA = await uniquePort();
29
+ const portB = portA + 100;
30
+ const storeA = new MeshStore(portA);
31
+ wireWireMeshTestTransport(storeA);
32
+ const storeB = new MeshStore(portB);
33
+ wireWireMeshTestTransport(storeB);
34
+ try {
35
+ const receivedRequests = [];
36
+ storeA.onDelivery = (_id, event) => {
37
+ if (event.type === "connection_request") {
38
+ receivedRequests.push(event);
39
+ }
40
+ };
41
+ await storeA.init();
42
+ await storeA.registerAgent({
43
+ name: "coordinator",
44
+ harness: "test",
45
+ cwd: "/test/a",
46
+ pid: process.pid,
47
+ visibility: "visible",
48
+ tags: [],
49
+ });
50
+ await storeB.startDataServerOnly();
51
+ await storeB.registerAgent({
52
+ name: "connector",
53
+ harness: "test",
54
+ cwd: "/test/b",
55
+ pid: process.pid,
56
+ visibility: "visible",
57
+ tags: [],
58
+ });
59
+ storeB.connectToRemote("127.0.0.1", portA);
60
+ await waitFor(() => receivedRequests.length === 1, "coordinator receives the connection request");
61
+ const request = receivedRequests[0];
62
+ assert.ok(request?.connectionId);
63
+ await storeA.acceptConnection(request.connectionId);
64
+ await waitFor(() => storeA.serialise().agents[storeB.peerId] !== undefined, "coordinator sees the connector agent");
65
+ await waitFor(() => storeB.serialise().agents[storeA.peerId] !== undefined, "connector sees the coordinator agent");
66
+ const agentsA = await storeA.listAgents(storeA.peerId);
67
+ const agentsB = await storeB.listAgents(storeB.peerId);
68
+ assert.ok(agentsA.some((a) => a.id === storeB.peerId), "Coordinator should see the connector agent");
69
+ assert.ok(agentsB.some((a) => a.id === storeA.peerId), "Connector should see the coordinator agent");
70
+ }
71
+ finally {
72
+ await storeB.shutdown();
73
+ await storeA.shutdown();
74
+ }
75
+ });
76
+ void test("reject closes with reason", async () => {
77
+ const portA = await uniquePort();
78
+ const portB = portA + 100;
79
+ const storeA = new MeshStore(portA);
80
+ wireWireMeshTestTransport(storeA);
81
+ const storeB = new MeshStore(portB);
82
+ wireWireMeshTestTransport(storeB);
83
+ try {
84
+ const receivedRequests = [];
85
+ storeA.onDelivery = (_id, event) => {
86
+ if (event.type === "connection_request") {
87
+ receivedRequests.push(event);
88
+ }
89
+ };
90
+ await storeA.init();
91
+ await storeA.registerAgent({
92
+ name: "coordinator",
93
+ harness: "test",
94
+ cwd: "/test/a",
95
+ pid: process.pid,
96
+ visibility: "visible",
97
+ tags: [],
98
+ });
99
+ await storeB.startDataServerOnly();
100
+ await storeB.registerAgent({
101
+ name: "connector",
102
+ harness: "test",
103
+ cwd: "/test/b",
104
+ pid: process.pid,
105
+ visibility: "visible",
106
+ tags: [],
107
+ });
108
+ storeB.connectToRemote("127.0.0.1", portA);
109
+ await waitFor(() => receivedRequests.length === 1, "coordinator receives the connection request");
110
+ const request = receivedRequests[0];
111
+ assert.ok(request?.connectionId);
112
+ await storeA.rejectConnection(request.connectionId, "unauthorised");
113
+ await waitFor(() => storeA.listPendingConnections().length === 0, "the pending connection clears");
114
+ const agentsA = await storeA.listAgents(storeA.peerId);
115
+ assert.ok(!agentsA.some((a) => a.id === storeB.peerId), "Rejected peer should not appear in agent list");
116
+ }
117
+ finally {
118
+ await storeB.shutdown();
119
+ await storeA.shutdown();
120
+ }
121
+ });
122
+ });
123
+ describe("WireMeshTransport listener management", () => {
124
+ void test("addListener creates an additional listener; removeListener removes it", async () => {
125
+ const port = await uniquePort();
126
+ const store = new MeshStore(port);
127
+ wireWireMeshTestTransport(store);
128
+ try {
129
+ await store.init();
130
+ const before = store.listListeners();
131
+ assert.strictEqual(before.length, 1, "starts with just the default listener");
132
+ assert.ok(before[0]?.isDefault);
133
+ const extraPort = await uniquePort();
134
+ const id = await store.addListener("127.0.0.1", extraPort, "observe");
135
+ const afterAdd = store.listListeners();
136
+ assert.strictEqual(afterAdd.length, 2);
137
+ const added = afterAdd.find((l) => l.id === id);
138
+ assert.ok(added);
139
+ assert.strictEqual(added.policy, "observe");
140
+ assert.strictEqual(added.isDefault, false);
141
+ await store.removeListener(id);
142
+ const afterRemove = store.listListeners();
143
+ assert.strictEqual(afterRemove.length, 1);
144
+ }
145
+ finally {
146
+ await store.shutdown();
147
+ }
148
+ });
149
+ void test("removeListener rejects removing the default listener", async () => {
150
+ const port = await uniquePort();
151
+ const store = new MeshStore(port);
152
+ wireWireMeshTestTransport(store);
153
+ try {
154
+ await store.init();
155
+ const [defaultListener] = store.listListeners();
156
+ assert.ok(defaultListener);
157
+ await assert.rejects(() => store.removeListener(defaultListener.id));
158
+ }
159
+ finally {
160
+ await store.shutdown();
161
+ }
162
+ });
163
+ });
164
+ //# sourceMappingURL=wire-mesh-transport-approval.integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wire-mesh-transport-approval.integration.test.js","sourceRoot":"","sources":["../../src/test/wire-mesh-transport-approval.integration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * End-to-end parity test for WireMeshTransport, mirroring mesh-e2e.integration.test.ts's own scenario (coordinator discovery, room creation, messaging, delivery push) but against the new substrate instead of TlsTransport -- the concrete proof this phase's own charter ("semantics unchanged") holds for the core mesh-formation path, using waitFor polling rather than fixed sleeps for the same reason approval.integration.test.ts already does.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=wire-mesh-transport.integration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wire-mesh-transport.integration.test.d.ts","sourceRoot":"","sources":["../../src/test/wire-mesh-transport.integration.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * End-to-end parity test for WireMeshTransport, mirroring mesh-e2e.integration.test.ts's own scenario (coordinator discovery, room creation, messaging, delivery push) but against the new substrate instead of TlsTransport -- the concrete proof this phase's own charter ("semantics unchanged") holds for the core mesh-formation path, using waitFor polling rather than fixed sleeps for the same reason approval.integration.test.ts already does.
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 { CommsTool } from "../core/tool.js";
8
+ import { buildAction } from "../core/bridge.js";
9
+ import { waitFor, wireWireMeshTestTransport } from "./test-transport.js";
10
+ async function createStore(port, name, harness) {
11
+ const store = new MeshStore(port);
12
+ wireWireMeshTestTransport(store);
13
+ const deliveries = [];
14
+ store.onDelivery = (_agentId, event) => {
15
+ deliveries.push(event);
16
+ };
17
+ const tool = new CommsTool(store);
18
+ await store.init();
19
+ await store.registerAgent({
20
+ name,
21
+ harness,
22
+ cwd: `/test/${name}`,
23
+ pid: process.pid,
24
+ visibility: "visible",
25
+ tags: [],
26
+ });
27
+ return { store, tool, deliveries };
28
+ }
29
+ void test("WireMeshTransport: coordinator discovery, rooms, messaging, and delivery match TlsTransport's own semantics", async () => {
30
+ const port = 20_000 + Math.floor(Math.random() * 1000);
31
+ const a = await createStore(port, "peer-a", "test-a");
32
+ let b;
33
+ try {
34
+ b = await createStore(port, "peer-b", "test-b");
35
+ await waitFor(() => a.store.serialise().agents[b?.store.peerId ?? ""] !== undefined, "A sees B's agent");
36
+ await waitFor(() => b?.store.serialise().agents[a.store.peerId] !== undefined, "B sees A's agent");
37
+ const agentsA = await a.store.listAgents(a.store.peerId);
38
+ const agentsB = await b.store.listAgents(b.store.peerId);
39
+ assert.ok(agentsA.length >= 2, "A should see both agents");
40
+ assert.ok(agentsB.length >= 2, "B should see both agents");
41
+ const roomId = `test-room-${String(Date.now())}`;
42
+ const room = await a.store.createRoom({
43
+ name: roomId,
44
+ type: "public",
45
+ owner: a.store.peerId,
46
+ description: "Test room",
47
+ });
48
+ await waitFor(() => b?.store.serialise().rooms[room.id] !== undefined, "B sees the room");
49
+ await b.store.joinRoom(room.id, b.store.peerId);
50
+ await waitFor(() => a.store.serialise().rooms[room.id]?.members.length === 2, "A sees B join the room");
51
+ const roomA = await a.store.getRoom(room.id);
52
+ const roomB = await b.store.getRoom(room.id);
53
+ assert.strictEqual(roomA?.members.length, 2, "A should see 2 room members");
54
+ assert.strictEqual(roomB?.members.length, 2, "B should see 2 room members");
55
+ b.deliveries.length = 0;
56
+ await a.store.sendRoomMessage(room.id, a.store.peerId, "Hello from A!");
57
+ await waitFor(() => b?.deliveries.length !== 0, "B receives the room message");
58
+ const roomMsg = b.deliveries[0];
59
+ assert.ok(roomMsg);
60
+ assert.strictEqual(roomMsg.type, "room_message");
61
+ assert.strictEqual(roomMsg.message.content, "Hello from A!");
62
+ b.deliveries.length = 0;
63
+ await a.store.sendDm(a.store.peerId, b.store.peerId, "Hey B!");
64
+ await waitFor(() => b?.deliveries.length !== 0, "B receives the DM");
65
+ const dmEvent = b.deliveries[0];
66
+ assert.ok(dmEvent);
67
+ assert.strictEqual(dmEvent.type, "dm");
68
+ const messages = await b.store.readRoomMessages(room.id);
69
+ assert.ok(messages.length >= 1, "B should see the message");
70
+ a.deliveries.length = 0;
71
+ const action = buildAction({
72
+ action: "send",
73
+ target: room.id,
74
+ content: "Hello from B via tool!",
75
+ });
76
+ await b.tool.handle({
77
+ agentId: b.store.peerId,
78
+ harness: "test-b",
79
+ cwd: "/test/peer-b",
80
+ pid: process.pid,
81
+ }, action);
82
+ await waitFor(() => a.deliveries.length !== 0, "A receives B's tool-sent message");
83
+ }
84
+ finally {
85
+ await b?.store.shutdown();
86
+ await a.store.shutdown();
87
+ }
88
+ });
89
+ //# sourceMappingURL=wire-mesh-transport.integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wire-mesh-transport.integration.test.js","sourceRoot":"","sources":["../../src/test/wire-mesh-transport.integration.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-comms",
3
- "version": "1.30.0",
3
+ "version": "1.32.0",
4
4
  "description": "Cross-harness communication mesh for LLM agents — rooms, DMs, presence, and real-time push delivery over TCP",
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@10.33.0",
@@ -52,11 +52,9 @@
52
52
  "generate:server-json": "tsx scripts/sync-release-metadata.ts",
53
53
  "publish:mcp-registry": "tsx scripts/publish-mcp-registry.ts",
54
54
  "lint": "eslint .",
55
- "test": "node --test --test-concurrency=1 dist/test/coordinator-socket-error.integration.test.js dist/test/identity-store.test.js dist/test/identity-cert.test.js dist/test/identity-device-id.test.js dist/test/wire-mesh-identity.test.js dist/test/broadcast-window.integration.test.js dist/test/identity-restart.integration.test.js dist/test/mesh-e2e.integration.test.js dist/test/tls-transport.integration.test.js dist/test/peer-id-verification.integration.test.js dist/test/become-coordinator-actual-port.integration.test.js dist/test/state-sync-convergence.test.js dist/test/downtime-replay.test.js dist/test/downtime-replay.integration.test.js dist/test/filestore.test.js dist/test/handshake.test.js dist/test/approval.integration.test.js dist/test/listener-policy.integration.test.js dist/test/mesh-smoke.integration.test.js",
56
- "test:visibility": "node --test dist/test/visibility.integration.test.js",
57
- "test:delivery": "node dist/test/delivery-receipt.runner.js",
58
- "test:federation": "node dist/test/federation.integration.test.js",
59
- "test:all": "pnpm test && pnpm test:delivery && pnpm test:federation",
55
+ "test": "tsx --test --test-concurrency=1 'src/test/**/*.test.ts'",
56
+ "test:delivery": "tsx src/test/delivery-receipt.runner.ts",
57
+ "test:all": "pnpm test && pnpm test:delivery",
60
58
  "test:frontend": "tsx --test src/bridges/user/web/frontend/test/**/*.unit.test.ts",
61
59
  "test:e2e": "playwright test",
62
60
  "typecheck": "tsc --noEmit"