agent-comms 1.33.0 → 2.0.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 (60) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/README.md +4 -2
  4. package/dist/core/mesh-store.d.ts +2 -2
  5. package/dist/core/mesh-store.d.ts.map +1 -1
  6. package/dist/core/mesh-store.js +2 -2
  7. package/dist/core/mesh-store.js.map +1 -1
  8. package/dist/core/wire-mesh-transport.d.ts +1 -1
  9. package/dist/core/wire-mesh-transport.d.ts.map +1 -1
  10. package/dist/core/wire-mesh-transport.js +11 -9
  11. package/dist/core/wire-mesh-transport.js.map +1 -1
  12. package/dist/core/wire-protocol.d.ts +1 -12
  13. package/dist/core/wire-protocol.d.ts.map +1 -1
  14. package/dist/core/wire-protocol.js +1 -1
  15. package/dist/core/wire-protocol.js.map +1 -1
  16. package/dist/test/approval.integration.test.js +54 -0
  17. package/dist/test/approval.integration.test.js.map +1 -1
  18. package/dist/test/become-coordinator-actual-port.integration.test.d.ts +2 -2
  19. package/dist/test/become-coordinator-actual-port.integration.test.js +38 -15
  20. package/dist/test/become-coordinator-actual-port.integration.test.js.map +1 -1
  21. package/dist/test/bridge-mesh.test.js +1 -1
  22. package/dist/test/bridge-mesh.test.js.map +1 -1
  23. package/dist/test/broadcast-window.integration.test.d.ts +2 -2
  24. package/dist/test/broadcast-window.integration.test.js +7 -6
  25. package/dist/test/broadcast-window.integration.test.js.map +1 -1
  26. package/dist/test/downtime-replay.integration.test.js +6 -5
  27. package/dist/test/downtime-replay.integration.test.js.map +1 -1
  28. package/dist/test/identity-restart.integration.test.d.ts +1 -1
  29. package/dist/test/identity-restart.integration.test.js +7 -6
  30. package/dist/test/identity-restart.integration.test.js.map +1 -1
  31. package/dist/test/listener-policy.integration.test.js +45 -44
  32. package/dist/test/listener-policy.integration.test.js.map +1 -1
  33. package/dist/test/mesh-smoke.runner.d.ts +1 -1
  34. package/dist/test/mesh-smoke.runner.js +5 -4
  35. package/dist/test/mesh-smoke.runner.js.map +1 -1
  36. package/dist/test/test-transport.d.ts +1 -5
  37. package/dist/test/test-transport.d.ts.map +1 -1
  38. package/dist/test/test-transport.js +3 -15
  39. package/dist/test/test-transport.js.map +1 -1
  40. package/package.json +1 -1
  41. package/dist/core/tls-transport.d.ts +0 -86
  42. package/dist/core/tls-transport.d.ts.map +0 -1
  43. package/dist/core/tls-transport.js +0 -758
  44. package/dist/core/tls-transport.js.map +0 -1
  45. package/dist/test/peer-id-verification.integration.test.d.ts +0 -7
  46. package/dist/test/peer-id-verification.integration.test.d.ts.map +0 -1
  47. package/dist/test/peer-id-verification.integration.test.js +0 -176
  48. package/dist/test/peer-id-verification.integration.test.js.map +0 -1
  49. package/dist/test/tls-transport.integration.test.d.ts +0 -9
  50. package/dist/test/tls-transport.integration.test.d.ts.map +0 -1
  51. package/dist/test/tls-transport.integration.test.js +0 -160
  52. package/dist/test/tls-transport.integration.test.js.map +0 -1
  53. package/dist/test/wire-mesh-transport-approval.integration.test.d.ts +0 -5
  54. package/dist/test/wire-mesh-transport-approval.integration.test.d.ts.map +0 -1
  55. package/dist/test/wire-mesh-transport-approval.integration.test.js +0 -214
  56. package/dist/test/wire-mesh-transport-approval.integration.test.js.map +0 -1
  57. package/dist/test/wire-mesh-transport.integration.test.d.ts +0 -5
  58. package/dist/test/wire-mesh-transport.integration.test.d.ts.map +0 -1
  59. package/dist/test/wire-mesh-transport.integration.test.js +0 -89
  60. package/dist/test/wire-mesh-transport.integration.test.js.map +0 -1
@@ -1,214 +0,0 @@
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 { createTlsTransport } from "@exadev/wire-mesh-core/adapters/tls-transport";
8
- import { acceptMeshSession } from "@exadev/wire-mesh-core/domain/mesh-session";
9
- import { MeshStore } from "../core/mesh-store.js";
10
- import { generateIdentity } from "../core/identity.js";
11
- import { toIdentityPort } from "../core/wire-mesh-identity.js";
12
- import { DOMAIN, FRAME_SCOPE, buildCommand, } from "../core/wire-mesh-transport.js";
13
- import { waitFor, wireWireMeshTestTransport } from "./test-transport.js";
14
- function findFreePort() {
15
- return new Promise((resolve, reject) => {
16
- const server = net.createServer();
17
- server.listen(0, "127.0.0.1", () => {
18
- const addr = server.address();
19
- const port = typeof addr === "object" && addr !== null ? addr.port : 0;
20
- server.close(() => resolve(port));
21
- });
22
- server.on("error", reject);
23
- });
24
- }
25
- /** Find a free port for a single test's use. An alias for findFreePort(): asking the OS for a fresh ephemeral port each call already guarantees distinctness from any other currently-bound port, so no arithmetic offset is layered on top -- a prior +offset scheme could push an already-high OS-assigned port past 65535 and fail with ERR_SOCKET_BAD_PORT. */
26
- function uniquePort() {
27
- return findFreePort();
28
- }
29
- describe("WireMeshTransport connection approval", () => {
30
- void test("accept establishes the peer connection", async () => {
31
- const portA = await uniquePort();
32
- const portB = await uniquePort();
33
- const storeA = new MeshStore(portA);
34
- wireWireMeshTestTransport(storeA);
35
- const storeB = new MeshStore(portB);
36
- wireWireMeshTestTransport(storeB);
37
- try {
38
- const receivedRequests = [];
39
- storeA.onDelivery = (_id, event) => {
40
- if (event.type === "connection_request") {
41
- receivedRequests.push(event);
42
- }
43
- };
44
- await storeA.init();
45
- await storeA.registerAgent({
46
- name: "coordinator",
47
- harness: "test",
48
- cwd: "/test/a",
49
- pid: process.pid,
50
- visibility: "visible",
51
- tags: [],
52
- });
53
- await storeB.startDataServerOnly();
54
- await storeB.registerAgent({
55
- name: "connector",
56
- harness: "test",
57
- cwd: "/test/b",
58
- pid: process.pid,
59
- visibility: "visible",
60
- tags: [],
61
- });
62
- storeB.connectToRemote("127.0.0.1", portA);
63
- await waitFor(() => receivedRequests.length === 1, "coordinator receives the connection request");
64
- const request = receivedRequests[0];
65
- assert.ok(request?.connectionId);
66
- await storeA.acceptConnection(request.connectionId);
67
- await waitFor(() => storeA.serialise().agents[storeB.peerId] !== undefined, "coordinator sees the connector agent");
68
- await waitFor(() => storeB.serialise().agents[storeA.peerId] !== undefined, "connector sees the coordinator agent");
69
- const agentsA = await storeA.listAgents(storeA.peerId);
70
- const agentsB = await storeB.listAgents(storeB.peerId);
71
- assert.ok(agentsA.some((a) => a.id === storeB.peerId), "Coordinator should see the connector agent");
72
- assert.ok(agentsB.some((a) => a.id === storeA.peerId), "Connector should see the coordinator agent");
73
- }
74
- finally {
75
- await storeB.shutdown();
76
- await storeA.shutdown();
77
- }
78
- });
79
- void test("reject closes with reason", async () => {
80
- const portA = await uniquePort();
81
- const portB = await uniquePort();
82
- const storeA = new MeshStore(portA);
83
- wireWireMeshTestTransport(storeA);
84
- const storeB = new MeshStore(portB);
85
- wireWireMeshTestTransport(storeB);
86
- try {
87
- const receivedRequests = [];
88
- storeA.onDelivery = (_id, event) => {
89
- if (event.type === "connection_request") {
90
- receivedRequests.push(event);
91
- }
92
- };
93
- await storeA.init();
94
- await storeA.registerAgent({
95
- name: "coordinator",
96
- harness: "test",
97
- cwd: "/test/a",
98
- pid: process.pid,
99
- visibility: "visible",
100
- tags: [],
101
- });
102
- await storeB.startDataServerOnly();
103
- await storeB.registerAgent({
104
- name: "connector",
105
- harness: "test",
106
- cwd: "/test/b",
107
- pid: process.pid,
108
- visibility: "visible",
109
- tags: [],
110
- });
111
- storeB.connectToRemote("127.0.0.1", portA);
112
- await waitFor(() => receivedRequests.length === 1, "coordinator receives the connection request");
113
- const request = receivedRequests[0];
114
- assert.ok(request?.connectionId);
115
- await storeA.rejectConnection(request.connectionId, "unauthorised");
116
- await waitFor(() => storeA.listPendingConnections().length === 0, "the pending connection clears");
117
- const agentsA = await storeA.listAgents(storeA.peerId);
118
- assert.ok(!agentsA.some((a) => a.id === storeB.peerId), "Rejected peer should not appear in agent list");
119
- }
120
- finally {
121
- await storeB.shutdown();
122
- await storeA.shutdown();
123
- }
124
- });
125
- void test("a message other than introduce/connect_request from an unapproved connection is refused, not routed", async () => {
126
- const portA = await uniquePort();
127
- const storeA = new MeshStore(portA);
128
- wireWireMeshTestTransport(storeA);
129
- try {
130
- await storeA.init();
131
- await storeA.registerAgent({
132
- name: "coordinator",
133
- harness: "test",
134
- cwd: "/test/a",
135
- pid: process.pid,
136
- visibility: "visible",
137
- tags: [],
138
- });
139
- // A hostile client that completes a TLS handshake (proving only which key it holds, not that a human approved it) and skips connect_request entirely, going straight for a forged state_update.
140
- const attackerIdentity = generateIdentity();
141
- const attackerTransport = createTlsTransport({
142
- certificatePem: attackerIdentity.certificate,
143
- privateKeyPem: attackerIdentity.privateKey,
144
- });
145
- const connection = await attackerTransport.connect(`127.0.0.1:${String(portA)}`);
146
- const attackerIdentityPort = await toIdentityPort(attackerIdentity);
147
- const session = await acceptMeshSession(connection, attackerIdentityPort, [DOMAIN]);
148
- const forgedAgent = {
149
- id: "forged-attacker-agent",
150
- version: 1,
151
- name: "forged",
152
- harness: "test",
153
- cwd: "/forged",
154
- pid: 1,
155
- startedAt: new Date().toISOString(),
156
- visibility: "visible",
157
- status: "active",
158
- tags: [],
159
- subscribedRooms: [],
160
- };
161
- const outcome = await session.sendManageRequest(buildCommand({
162
- method: "state_update",
163
- patch: { type: "agent_upsert", agent: forgedAgent },
164
- }), FRAME_SCOPE);
165
- assert.equal(outcome.result, "error", "an unapproved connection's message must be refused, not routed");
166
- assert.equal(storeA.serialise().agents[forgedAgent.id], undefined, "a forged state_update from an unapproved connection must never reach mesh-store's own state");
167
- }
168
- finally {
169
- await storeA.shutdown();
170
- }
171
- });
172
- });
173
- describe("WireMeshTransport listener management", () => {
174
- void test("addListener creates an additional listener; removeListener removes it", async () => {
175
- const port = await uniquePort();
176
- const store = new MeshStore(port);
177
- wireWireMeshTestTransport(store);
178
- try {
179
- await store.init();
180
- const before = store.listListeners();
181
- assert.strictEqual(before.length, 1, "starts with just the default listener");
182
- assert.ok(before[0]?.isDefault);
183
- const extraPort = await uniquePort();
184
- const id = await store.addListener("127.0.0.1", extraPort, "observe");
185
- const afterAdd = store.listListeners();
186
- assert.strictEqual(afterAdd.length, 2);
187
- const added = afterAdd.find((l) => l.id === id);
188
- assert.ok(added);
189
- assert.strictEqual(added.policy, "observe");
190
- assert.strictEqual(added.isDefault, false);
191
- await store.removeListener(id);
192
- const afterRemove = store.listListeners();
193
- assert.strictEqual(afterRemove.length, 1);
194
- }
195
- finally {
196
- await store.shutdown();
197
- }
198
- });
199
- void test("removeListener rejects removing the default listener", async () => {
200
- const port = await uniquePort();
201
- const store = new MeshStore(port);
202
- wireWireMeshTestTransport(store);
203
- try {
204
- await store.init();
205
- const [defaultListener] = store.listListeners();
206
- assert.ok(defaultListener);
207
- await assert.rejects(() => store.removeListener(defaultListener.id));
208
- }
209
- finally {
210
- await store.shutdown();
211
- }
212
- });
213
- });
214
- //# sourceMappingURL=wire-mesh-transport-approval.integration.test.js.map
@@ -1 +0,0 @@
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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"}
@@ -1,5 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,89 +0,0 @@
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
@@ -1 +0,0 @@
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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"}