agent-comms 1.14.0 → 1.15.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.
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +1 -1
- package/dist/bridges/claude-code/channel.d.ts.map +1 -1
- package/dist/bridges/claude-code/channel.js +6 -1
- package/dist/bridges/claude-code/channel.js.map +1 -1
- package/dist/bridges/codex/tool.d.ts.map +1 -1
- package/dist/bridges/codex/tool.js +6 -1
- package/dist/bridges/codex/tool.js.map +1 -1
- package/dist/bridges/mcp/index.d.ts.map +1 -1
- package/dist/bridges/mcp/index.js +6 -1
- package/dist/bridges/mcp/index.js.map +1 -1
- package/dist/bridges/opencode/plugin.d.ts.map +1 -1
- package/dist/bridges/opencode/plugin.js +5 -0
- package/dist/bridges/opencode/plugin.js.map +1 -1
- package/dist/bridges/pi/index.d.ts.map +1 -1
- package/dist/bridges/pi/index.js +39 -17
- package/dist/bridges/pi/index.js.map +1 -1
- package/dist/bridges/user/controller.d.ts +9 -1
- package/dist/bridges/user/controller.d.ts.map +1 -1
- package/dist/bridges/user/controller.js +25 -1
- package/dist/bridges/user/controller.js.map +1 -1
- package/dist/bridges/user/tui.js +2 -0
- package/dist/bridges/user/tui.js.map +1 -1
- package/dist/bridges/user/web/build.d.ts +2 -0
- package/dist/bridges/user/web/build.d.ts.map +1 -1
- package/dist/bridges/user/web/build.js +44 -0
- package/dist/bridges/user/web/build.js.map +1 -1
- package/dist/bridges/user/web/frontend/components/App.d.ts +5 -0
- package/dist/bridges/user/web/frontend/components/App.d.ts.map +1 -1
- package/dist/bridges/user/web/frontend/components/App.js +1 -1
- package/dist/bridges/user/web/frontend/components/App.js.map +1 -1
- package/dist/bridges/user/web/frontend/components/ProjectTree.js +6 -3
- package/dist/bridges/user/web/frontend/components/ProjectTree.js.map +1 -1
- package/dist/bridges/user/web/frontend/components/RelayPanel.d.ts +15 -0
- package/dist/bridges/user/web/frontend/components/RelayPanel.d.ts.map +1 -0
- package/dist/bridges/user/web/frontend/components/RelayPanel.js +46 -0
- package/dist/bridges/user/web/frontend/components/RelayPanel.js.map +1 -0
- package/dist/bridges/user/web/frontend/components/Sidebar.d.ts +7 -2
- package/dist/bridges/user/web/frontend/components/Sidebar.d.ts.map +1 -1
- package/dist/bridges/user/web/frontend/components/Sidebar.js +15 -9
- package/dist/bridges/user/web/frontend/components/Sidebar.js.map +1 -1
- package/dist/bridges/user/web/frontend/input.js +1 -1
- package/dist/bridges/user/web/frontend/input.js.map +1 -1
- package/dist/bridges/user/web/frontend/main.js +73 -5
- package/dist/bridges/user/web/frontend/main.js.map +1 -1
- package/dist/bridges/user/web/frontend/mesh-client.d.ts +43 -0
- package/dist/bridges/user/web/frontend/mesh-client.d.ts.map +1 -0
- package/dist/bridges/user/web/frontend/mesh-client.js +132 -0
- package/dist/bridges/user/web/frontend/mesh-client.js.map +1 -0
- package/dist/bridges/user/web/frontend/mesh-worker.d.ts +14 -0
- package/dist/bridges/user/web/frontend/mesh-worker.d.ts.map +1 -0
- package/dist/bridges/user/web/frontend/mesh-worker.js +274 -0
- package/dist/bridges/user/web/frontend/mesh-worker.js.map +1 -0
- package/dist/bridges/user/web/frontend/relay-client.d.ts +40 -0
- package/dist/bridges/user/web/frontend/relay-client.d.ts.map +1 -0
- package/dist/bridges/user/web/frontend/relay-client.js +97 -0
- package/dist/bridges/user/web/frontend/relay-client.js.map +1 -0
- package/dist/bridges/user/web/frontend/relay-worker.d.ts +15 -0
- package/dist/bridges/user/web/frontend/relay-worker.d.ts.map +1 -0
- package/dist/bridges/user/web/frontend/relay-worker.js +366 -0
- package/dist/bridges/user/web/frontend/relay-worker.js.map +1 -0
- package/dist/bridges/user/web/frontend/sw.d.ts +16 -0
- package/dist/bridges/user/web/frontend/sw.d.ts.map +1 -0
- package/dist/bridges/user/web/frontend/sw.js +145 -0
- package/dist/bridges/user/web/frontend/sw.js.map +1 -0
- package/dist/bridges/user/web/frontend/url-sync.d.ts +48 -0
- package/dist/bridges/user/web/frontend/url-sync.d.ts.map +1 -0
- package/dist/bridges/user/web/frontend/url-sync.js +74 -0
- package/dist/bridges/user/web/frontend/url-sync.js.map +1 -0
- package/dist/bridges/user/web/server.d.ts +10 -3
- package/dist/bridges/user/web/server.d.ts.map +1 -1
- package/dist/bridges/user/web/server.js +254 -12
- package/dist/bridges/user/web/server.js.map +1 -1
- package/dist/core/bridge.d.ts +28 -0
- package/dist/core/bridge.d.ts.map +1 -1
- package/dist/core/bridge.js +137 -0
- package/dist/core/bridge.js.map +1 -1
- package/dist/core/comms-store.d.ts +22 -1
- package/dist/core/comms-store.d.ts.map +1 -1
- package/dist/core/discovery-mdns.d.ts +33 -0
- package/dist/core/discovery-mdns.d.ts.map +1 -0
- package/dist/core/discovery-mdns.js +182 -0
- package/dist/core/discovery-mdns.js.map +1 -0
- package/dist/core/discovery-tailscale.d.ts +40 -0
- package/dist/core/discovery-tailscale.d.ts.map +1 -0
- package/dist/core/discovery-tailscale.js +158 -0
- package/dist/core/discovery-tailscale.js.map +1 -0
- package/dist/core/discovery.d.ts +82 -0
- package/dist/core/discovery.d.ts.map +1 -0
- package/dist/core/discovery.js +194 -0
- package/dist/core/discovery.js.map +1 -0
- package/dist/core/federation.d.ts +100 -0
- package/dist/core/federation.d.ts.map +1 -0
- package/dist/core/federation.js +411 -0
- package/dist/core/federation.js.map +1 -0
- package/dist/core/identity.d.ts +31 -0
- package/dist/core/identity.d.ts.map +1 -0
- package/dist/core/identity.js +251 -0
- package/dist/core/identity.js.map +1 -0
- package/dist/core/index.d.ts +11 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +6 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/mesh-store.d.ts +72 -26
- package/dist/core/mesh-store.d.ts.map +1 -1
- package/dist/core/mesh-store.js +467 -352
- package/dist/core/mesh-store.js.map +1 -1
- package/dist/core/push-manager.d.ts +41 -0
- package/dist/core/push-manager.d.ts.map +1 -0
- package/dist/core/push-manager.js +60 -0
- package/dist/core/push-manager.js.map +1 -0
- package/dist/core/store.d.ts +21 -1
- package/dist/core/store.d.ts.map +1 -1
- package/dist/core/store.js +44 -0
- package/dist/core/store.js.map +1 -1
- package/dist/core/tcp-transport.d.ts +77 -0
- package/dist/core/tcp-transport.d.ts.map +1 -0
- package/dist/core/tcp-transport.js +596 -0
- package/dist/core/tcp-transport.js.map +1 -0
- package/dist/core/test/identity.unit.test.d.ts +5 -0
- package/dist/core/test/identity.unit.test.d.ts.map +1 -0
- package/dist/core/test/identity.unit.test.js +70 -0
- package/dist/core/test/identity.unit.test.js.map +1 -0
- package/dist/core/tls-transport.d.ts +69 -0
- package/dist/core/tls-transport.d.ts.map +1 -0
- package/dist/core/tls-transport.js +602 -0
- package/dist/core/tls-transport.js.map +1 -0
- package/dist/core/tool.d.ts +23 -2
- package/dist/core/tool.d.ts.map +1 -1
- package/dist/core/tool.js +269 -1
- package/dist/core/tool.js.map +1 -1
- package/dist/core/transport.d.ts +166 -0
- package/dist/core/transport.d.ts.map +1 -0
- package/dist/core/transport.js +20 -0
- package/dist/core/transport.js.map +1 -0
- package/dist/core/types.d.ts +136 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +71 -0
- package/dist/core/types.js.map +1 -1
- package/dist/core/vapid.d.ts +22 -0
- package/dist/core/vapid.d.ts.map +1 -0
- package/dist/core/vapid.js +50 -0
- package/dist/core/vapid.js.map +1 -0
- package/dist/core/web-push.d.ts +37 -0
- package/dist/core/web-push.d.ts.map +1 -0
- package/dist/core/web-push.js +198 -0
- package/dist/core/web-push.js.map +1 -0
- package/dist/core/wire-protocol.d.ts +131 -0
- package/dist/core/wire-protocol.d.ts.map +1 -0
- package/dist/core/wire-protocol.js +54 -0
- package/dist/core/wire-protocol.js.map +1 -0
- package/dist/core/ws-transport.d.ts +71 -0
- package/dist/core/ws-transport.d.ts.map +1 -0
- package/dist/core/ws-transport.js +560 -0
- package/dist/core/ws-transport.js.map +1 -0
- package/dist/test/approval.integration.test.d.ts +9 -0
- package/dist/test/approval.integration.test.d.ts.map +1 -0
- package/dist/test/approval.integration.test.js +361 -0
- package/dist/test/approval.integration.test.js.map +1 -0
- package/dist/test/delivery-receipt.helper.d.ts +16 -0
- package/dist/test/delivery-receipt.helper.d.ts.map +1 -0
- package/dist/test/delivery-receipt.helper.js +409 -0
- package/dist/test/delivery-receipt.helper.js.map +1 -0
- package/dist/test/delivery-receipt.runner.d.ts +13 -0
- package/dist/test/delivery-receipt.runner.d.ts.map +1 -0
- package/dist/test/delivery-receipt.runner.js +51 -0
- package/dist/test/delivery-receipt.runner.js.map +1 -0
- package/dist/test/federation.integration.test.d.ts +15 -0
- package/dist/test/federation.integration.test.d.ts.map +1 -0
- package/dist/test/federation.integration.test.js +218 -0
- package/dist/test/federation.integration.test.js.map +1 -0
- package/dist/test/listener-policy.integration.test.d.ts +9 -0
- package/dist/test/listener-policy.integration.test.d.ts.map +1 -0
- package/dist/test/listener-policy.integration.test.js +239 -0
- package/dist/test/listener-policy.integration.test.js.map +1 -0
- package/dist/test/tls-transport.integration.test.d.ts +8 -0
- package/dist/test/tls-transport.integration.test.d.ts.map +1 -0
- package/dist/test/tls-transport.integration.test.js +158 -0
- package/dist/test/tls-transport.integration.test.js.map +1 -0
- package/dist/test/visibility.integration.test.d.ts +12 -0
- package/dist/test/visibility.integration.test.d.ts.map +1 -0
- package/dist/test/visibility.integration.test.js +181 -0
- package/dist/test/visibility.integration.test.js.map +1 -0
- package/package.json +4 -1
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TlsTransport integration test — verifies that two MeshStore instances
|
|
3
|
+
* can communicate over TLS with certificate pinning.
|
|
4
|
+
*
|
|
5
|
+
* Run: node dist/test/tls-transport.integration.test.js
|
|
6
|
+
*/
|
|
7
|
+
import * as net from "node:net";
|
|
8
|
+
import * as assert from "node:assert/strict";
|
|
9
|
+
import { MeshStore } from "../core/mesh-store.js";
|
|
10
|
+
import { TlsTransport } from "../core/tls-transport.js";
|
|
11
|
+
import { generateIdentity } from "../core/identity.js";
|
|
12
|
+
function sleep(ms) {
|
|
13
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
14
|
+
}
|
|
15
|
+
function allocFreePort() {
|
|
16
|
+
return new Promise((resolve, reject) => {
|
|
17
|
+
const server = net.createServer();
|
|
18
|
+
server.listen(0, "127.0.0.1", () => {
|
|
19
|
+
const addr = server.address();
|
|
20
|
+
const port = addr && typeof addr === "object" ? addr.port : 0;
|
|
21
|
+
server.close(() => resolve(port));
|
|
22
|
+
});
|
|
23
|
+
server.on("error", reject);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
async function cleanup(...stores) {
|
|
27
|
+
for (const s of stores) {
|
|
28
|
+
await s.shutdown();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
async function testTlsPeerCommunication() {
|
|
32
|
+
const port = await allocFreePort();
|
|
33
|
+
const identityA = generateIdentity();
|
|
34
|
+
const identityB = generateIdentity();
|
|
35
|
+
// Verify identities are different
|
|
36
|
+
assert.notStrictEqual(identityA.fingerprint, identityB.fingerprint);
|
|
37
|
+
console.log(" Identity A:", identityA.fingerprint.substring(0, 23) + "...");
|
|
38
|
+
console.log(" Identity B:", identityB.fingerprint.substring(0, 23) + "...");
|
|
39
|
+
// Create stores with TLS transport
|
|
40
|
+
const storeA = new MeshStore(port);
|
|
41
|
+
storeA.peerId = identityA.fingerprint;
|
|
42
|
+
storeA.setTransport(new TlsTransport(storeA.events, identityA));
|
|
43
|
+
const deliveriesA = [];
|
|
44
|
+
storeA.onDelivery = () => {
|
|
45
|
+
deliveriesA.push(1);
|
|
46
|
+
};
|
|
47
|
+
await storeA.init();
|
|
48
|
+
await storeA.registerAgent({
|
|
49
|
+
name: "a",
|
|
50
|
+
harness: "test",
|
|
51
|
+
cwd: "/test/a",
|
|
52
|
+
pid: process.pid,
|
|
53
|
+
visibility: "visible",
|
|
54
|
+
tags: [],
|
|
55
|
+
});
|
|
56
|
+
await sleep(100);
|
|
57
|
+
const storeB = new MeshStore(port);
|
|
58
|
+
storeB.peerId = identityB.fingerprint;
|
|
59
|
+
storeB.setTransport(new TlsTransport(storeB.events, identityB));
|
|
60
|
+
const deliveriesB = [];
|
|
61
|
+
storeB.onDelivery = (_id, ev) => {
|
|
62
|
+
deliveriesB.push(ev);
|
|
63
|
+
};
|
|
64
|
+
await storeB.init();
|
|
65
|
+
await storeB.registerAgent({
|
|
66
|
+
name: "b",
|
|
67
|
+
harness: "test",
|
|
68
|
+
cwd: "/test/b",
|
|
69
|
+
pid: process.pid,
|
|
70
|
+
visibility: "visible",
|
|
71
|
+
tags: [],
|
|
72
|
+
});
|
|
73
|
+
await sleep(300);
|
|
74
|
+
// Create room and exchange messages
|
|
75
|
+
const room = await storeA.createRoom({
|
|
76
|
+
name: `tls-test-${port}`,
|
|
77
|
+
type: "public",
|
|
78
|
+
owner: storeA.peerId,
|
|
79
|
+
description: "TLS transport test",
|
|
80
|
+
});
|
|
81
|
+
await sleep(200);
|
|
82
|
+
await storeB.joinRoom(room.id, storeB.peerId);
|
|
83
|
+
await sleep(200);
|
|
84
|
+
deliveriesB.length = 0;
|
|
85
|
+
await storeA.sendRoomMessage(room.id, storeA.peerId, "Hello over TLS!");
|
|
86
|
+
await sleep(300);
|
|
87
|
+
assert.ok(deliveriesB.length >= 1, `B should receive at least 1 delivery, got ${String(deliveriesB.length)}`);
|
|
88
|
+
const roomMsg = deliveriesB.find((ev) => ev.type === "room_message");
|
|
89
|
+
assert.ok(roomMsg !== undefined, "Should find room_message event");
|
|
90
|
+
const message = roomMsg.message;
|
|
91
|
+
assert.strictEqual(message.content, "Hello over TLS!");
|
|
92
|
+
assert.strictEqual(message.from, identityA.fingerprint);
|
|
93
|
+
console.log(" ✓ Room message received over TLS");
|
|
94
|
+
// Test DM
|
|
95
|
+
deliveriesB.length = 0;
|
|
96
|
+
await storeA.sendDm(storeA.peerId, storeB.peerId, "Direct over TLS!");
|
|
97
|
+
await sleep(300);
|
|
98
|
+
const dm = deliveriesB.find((ev) => ev.type === "dm");
|
|
99
|
+
assert.ok(dm !== undefined, "Should find dm event");
|
|
100
|
+
const dmMessage = dm.message;
|
|
101
|
+
assert.strictEqual(dmMessage.content, "Direct over TLS!");
|
|
102
|
+
assert.strictEqual(dmMessage.from, identityA.fingerprint);
|
|
103
|
+
console.log(" ✓ DM received over TLS");
|
|
104
|
+
await cleanup(storeA, storeB);
|
|
105
|
+
}
|
|
106
|
+
async function testFingerprintIsPeerId() {
|
|
107
|
+
const identity = generateIdentity();
|
|
108
|
+
const port = await allocFreePort();
|
|
109
|
+
const store = new MeshStore(port);
|
|
110
|
+
store.peerId = identity.fingerprint;
|
|
111
|
+
store.setTransport(new TlsTransport(store.events, identity));
|
|
112
|
+
await store.init();
|
|
113
|
+
const agent = await store.registerAgent({
|
|
114
|
+
name: "fp-test",
|
|
115
|
+
harness: "test",
|
|
116
|
+
cwd: "/test/fp",
|
|
117
|
+
pid: process.pid,
|
|
118
|
+
visibility: "visible",
|
|
119
|
+
tags: [],
|
|
120
|
+
});
|
|
121
|
+
// The agent ID should be the certificate fingerprint
|
|
122
|
+
assert.strictEqual(agent.id, identity.fingerprint);
|
|
123
|
+
console.log(" ✓ Peer ID equals certificate fingerprint");
|
|
124
|
+
await store.shutdown();
|
|
125
|
+
}
|
|
126
|
+
// ---------------------------------------------------------------------------
|
|
127
|
+
// Runner
|
|
128
|
+
// ---------------------------------------------------------------------------
|
|
129
|
+
const testName = process.argv[2];
|
|
130
|
+
if (testName === undefined) {
|
|
131
|
+
console.error("Usage: node tls-transport.integration.test.ts <test-name>");
|
|
132
|
+
process.exit(1);
|
|
133
|
+
}
|
|
134
|
+
const tests = {
|
|
135
|
+
"tls-communication": testTlsPeerCommunication,
|
|
136
|
+
"tls-fingerprint": testFingerprintIsPeerId,
|
|
137
|
+
};
|
|
138
|
+
const fn = tests[testName];
|
|
139
|
+
if (!fn) {
|
|
140
|
+
console.error(`Unknown test: ${testName}`);
|
|
141
|
+
console.error(`Available: ${Object.keys(tests).join(", ")}`);
|
|
142
|
+
process.exit(1);
|
|
143
|
+
}
|
|
144
|
+
fn()
|
|
145
|
+
.then(async () => {
|
|
146
|
+
const maxWait = 2000;
|
|
147
|
+
const start = Date.now();
|
|
148
|
+
while ((process._getActiveHandles?.()?.length ?? 0) > 0 &&
|
|
149
|
+
Date.now() - start < maxWait) {
|
|
150
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
151
|
+
}
|
|
152
|
+
process.exit(0);
|
|
153
|
+
})
|
|
154
|
+
.catch((err) => {
|
|
155
|
+
console.error(`FAIL [${testName}]:`, err);
|
|
156
|
+
process.exit(1);
|
|
157
|
+
});
|
|
158
|
+
//# sourceMappingURL=tls-transport.integration.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tls-transport.integration.test.js","sourceRoot":"","sources":["../../src/test/tls-transport.integration.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,aAAa;IACpB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE;YACjC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9D,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,GAAG,MAAmB;IAC3C,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;IACrB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,wBAAwB;IACrC,MAAM,IAAI,GAAG,MAAM,aAAa,EAAE,CAAC;IACnC,MAAM,SAAS,GAAiB,gBAAgB,EAAE,CAAC;IACnD,MAAM,SAAS,GAAiB,gBAAgB,EAAE,CAAC;IAEnD,kCAAkC;IAClC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;IAE7E,mCAAmC;IACnC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,WAAW,CAAC;IACtC,MAAM,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IAEhE,MAAM,WAAW,GAAc,EAAE,CAAC;IAClC,MAAM,CAAC,UAAU,GAAG,GAAG,EAAE;QACvB,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC,CAAC;IACF,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;IACpB,MAAM,MAAM,CAAC,aAAa,CAAC;QACzB,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,MAAM;QACf,GAAG,EAAE,SAAS;QACd,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,UAAU,EAAE,SAAS;QACrB,IAAI,EAAE,EAAE;KACT,CAAC,CAAC;IACH,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAEjB,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,WAAW,CAAC;IACtC,MAAM,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IAEhE,MAAM,WAAW,GAA8B,EAAE,CAAC;IAClD,MAAM,CAAC,UAAU,GAAG,CAAC,GAAW,EAAE,EAAW,EAAE,EAAE;QAC/C,WAAW,CAAC,IAAI,CAAC,EAA6B,CAAC,CAAC;IAClD,CAAC,CAAC;IACF,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;IACpB,MAAM,MAAM,CAAC,aAAa,CAAC;QACzB,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,MAAM;QACf,GAAG,EAAE,SAAS;QACd,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,UAAU,EAAE,SAAS;QACrB,IAAI,EAAE,EAAE;KACT,CAAC,CAAC;IACH,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAEjB,oCAAoC;IACpC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC;QACnC,IAAI,EAAE,YAAY,IAAI,EAAE;QACxB,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,MAAM,CAAC,MAAM;QACpB,WAAW,EAAE,oBAAoB;KAClC,CAAC,CAAC;IACH,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IACjB,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAEjB,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;IACvB,MAAM,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACxE,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAEjB,MAAM,CAAC,EAAE,CACP,WAAW,CAAC,MAAM,IAAI,CAAC,EACvB,6CAA6C,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAC1E,CAAC;IACF,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;IACrE,MAAM,CAAC,EAAE,CAAC,OAAO,KAAK,SAAS,EAAE,gCAAgC,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAkC,CAAC;IAC3D,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;IACvD,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IAExD,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IAElD,UAAU;IACV,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;IACvB,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IACtE,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAEjB,MAAM,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACtD,MAAM,CAAC,EAAE,CAAC,EAAE,KAAK,SAAS,EAAE,sBAAsB,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,EAAE,CAAC,OAAkC,CAAC;IACxD,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;IAC1D,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IAE1D,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAExC,MAAM,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAChC,CAAC;AAED,KAAK,UAAU,uBAAuB;IACpC,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,MAAM,aAAa,EAAE,CAAC;IAEnC,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;IAClC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC;IACpC,KAAK,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE7D,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;IACnB,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,aAAa,CAAC;QACtC,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,MAAM;QACf,GAAG,EAAE,UAAU;QACf,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,UAAU,EAAE,SAAS;QACrB,IAAI,EAAE,EAAE;KACT,CAAC,CAAC;IAEH,qDAAqD;IACrD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAE1D,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;AACzB,CAAC;AAED,8EAA8E;AAC9E,SAAS;AACT,8EAA8E;AAE9E,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;IAC3B,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,KAAK,GAAwC;IACjD,mBAAmB,EAAE,wBAAwB;IAC7C,iBAAiB,EAAE,uBAAuB;CAC3C,CAAC;AAEF,MAAM,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC3B,IAAI,CAAC,EAAE,EAAE,CAAC;IACR,OAAO,CAAC,KAAK,CAAC,iBAAiB,QAAQ,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,KAAK,CAAC,cAAc,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,EAAE,EAAE;KACD,IAAI,CAAC,KAAK,IAAI,EAAE;IACf,MAAM,OAAO,GAAG,IAAI,CAAC;IACrB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,OACE,CACE,OACD,CAAC,iBAAiB,EAAE,EAAE,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;QACzC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,OAAO,EAC5B,CAAC;QACD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC;KACD,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IACtB,OAAO,CAAC,KAAK,CAAC,SAAS,QAAQ,IAAI,EAAE,GAAG,CAAC,CAAC;IAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integration tests for mesh visibility controls.
|
|
3
|
+
*
|
|
4
|
+
* Verifies that the DiscoveryManager visibility state machine works:
|
|
5
|
+
* - Default visibility is discoverable
|
|
6
|
+
* - Setting to quiet pauses advertising
|
|
7
|
+
* - Setting to dark stops all discovery
|
|
8
|
+
* - Per-adapter visibility overrides global
|
|
9
|
+
* - Actions route through CommsTool correctly
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=visibility.integration.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visibility.integration.test.d.ts","sourceRoot":"","sources":["../../src/test/visibility.integration.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integration tests for mesh visibility controls.
|
|
3
|
+
*
|
|
4
|
+
* Verifies that the DiscoveryManager visibility state machine works:
|
|
5
|
+
* - Default visibility is discoverable
|
|
6
|
+
* - Setting to quiet pauses advertising
|
|
7
|
+
* - Setting to dark stops all discovery
|
|
8
|
+
* - Per-adapter visibility overrides global
|
|
9
|
+
* - Actions route through CommsTool correctly
|
|
10
|
+
*/
|
|
11
|
+
import * as assert from "node:assert/strict";
|
|
12
|
+
import { test, describe } from "node:test";
|
|
13
|
+
import { MeshStore } from "../core/mesh-store.js";
|
|
14
|
+
import { CommsTool } from "../core/tool.js";
|
|
15
|
+
import { buildAction } from "../core/bridge.js";
|
|
16
|
+
import { DiscoveryManager } from "../core/discovery.js";
|
|
17
|
+
const TEST_PORT = 19881;
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
// DiscoveryManager unit tests (no mesh init)
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
describe("DiscoveryManager visibility", () => {
|
|
22
|
+
void test("default visibility is discoverable", () => {
|
|
23
|
+
const dm = new DiscoveryManager();
|
|
24
|
+
assert.equal(dm.getVisibility(), "discoverable");
|
|
25
|
+
});
|
|
26
|
+
void test("setVisibility changes global visibility", async () => {
|
|
27
|
+
const dm = new DiscoveryManager();
|
|
28
|
+
await dm.setVisibility("quiet");
|
|
29
|
+
assert.equal(dm.getVisibility(), "quiet");
|
|
30
|
+
await dm.setVisibility("dark");
|
|
31
|
+
assert.equal(dm.getVisibility(), "dark");
|
|
32
|
+
await dm.setVisibility("discoverable");
|
|
33
|
+
assert.equal(dm.getVisibility(), "discoverable");
|
|
34
|
+
});
|
|
35
|
+
void test("per-adapter visibility overrides global", async () => {
|
|
36
|
+
const dm = new DiscoveryManager();
|
|
37
|
+
await dm.setVisibility("quiet", "mdns");
|
|
38
|
+
assert.equal(dm.getVisibility("mdns"), "quiet");
|
|
39
|
+
// Global unchanged
|
|
40
|
+
assert.equal(dm.getVisibility(), "discoverable");
|
|
41
|
+
// Unset adapter falls back to global
|
|
42
|
+
assert.equal(dm.getVisibility("tailscale"), "discoverable");
|
|
43
|
+
});
|
|
44
|
+
void test("per-adapter visibility is independent", async () => {
|
|
45
|
+
const dm = new DiscoveryManager();
|
|
46
|
+
await dm.setVisibility("quiet", "mdns");
|
|
47
|
+
await dm.setVisibility("dark", "tailscale");
|
|
48
|
+
assert.equal(dm.getVisibility("mdns"), "quiet");
|
|
49
|
+
assert.equal(dm.getVisibility("tailscale"), "dark");
|
|
50
|
+
assert.equal(dm.getVisibility(), "discoverable");
|
|
51
|
+
});
|
|
52
|
+
void test("discover returns empty for dark backends", async () => {
|
|
53
|
+
const dm = new DiscoveryManager();
|
|
54
|
+
await dm.setVisibility("dark");
|
|
55
|
+
const results = await dm.discover();
|
|
56
|
+
assert.equal(results.length, 0);
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
// ---------------------------------------------------------------------------
|
|
60
|
+
// MeshStore delegation
|
|
61
|
+
// ---------------------------------------------------------------------------
|
|
62
|
+
describe("MeshStore visibility delegation", () => {
|
|
63
|
+
void test("setVisibility delegates to discovery manager", async () => {
|
|
64
|
+
const store = new MeshStore(TEST_PORT);
|
|
65
|
+
await store.init();
|
|
66
|
+
assert.equal(store.getVisibility(), "discoverable");
|
|
67
|
+
await store.setVisibility("quiet");
|
|
68
|
+
assert.equal(store.getVisibility(), "quiet");
|
|
69
|
+
await store.setVisibility("dark");
|
|
70
|
+
assert.equal(store.getVisibility(), "dark");
|
|
71
|
+
await store.setVisibility("discoverable");
|
|
72
|
+
assert.equal(store.getVisibility(), "discoverable");
|
|
73
|
+
await store.shutdown();
|
|
74
|
+
});
|
|
75
|
+
void test("setVisibility with adapter delegates per-adapter", async () => {
|
|
76
|
+
const store = new MeshStore(TEST_PORT);
|
|
77
|
+
await store.init();
|
|
78
|
+
await store.setVisibility("quiet", "mdns");
|
|
79
|
+
assert.equal(store.getVisibility("mdns"), "quiet");
|
|
80
|
+
assert.equal(store.getVisibility(), "discoverable");
|
|
81
|
+
await store.shutdown();
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
// ---------------------------------------------------------------------------
|
|
85
|
+
// CommsTool actions
|
|
86
|
+
// ---------------------------------------------------------------------------
|
|
87
|
+
describe("CommsTool visibility actions", () => {
|
|
88
|
+
void test("mesh_set_visibility action sets visibility", async () => {
|
|
89
|
+
const store = new MeshStore(TEST_PORT);
|
|
90
|
+
await store.init();
|
|
91
|
+
const agent = await store.registerAgent({
|
|
92
|
+
name: "visibility-test",
|
|
93
|
+
harness: "test",
|
|
94
|
+
cwd: "/test",
|
|
95
|
+
pid: process.pid,
|
|
96
|
+
visibility: "visible",
|
|
97
|
+
tags: [],
|
|
98
|
+
});
|
|
99
|
+
const tool = new CommsTool(store);
|
|
100
|
+
const result = await tool.handle({ agentId: agent.id, harness: "test", cwd: "/test", pid: process.pid }, { action: "mesh_set_visibility", visibility: "quiet" });
|
|
101
|
+
assert.ok(!result.isError, `Expected success, got: ${result.content}`);
|
|
102
|
+
assert.ok(result.content.includes("quiet"));
|
|
103
|
+
assert.equal(store.getVisibility(), "quiet");
|
|
104
|
+
await store.shutdown();
|
|
105
|
+
});
|
|
106
|
+
void test("mesh_set_visibility with adapter sets per-adapter", async () => {
|
|
107
|
+
const store = new MeshStore(TEST_PORT);
|
|
108
|
+
await store.init();
|
|
109
|
+
const agent = await store.registerAgent({
|
|
110
|
+
name: "visibility-test",
|
|
111
|
+
harness: "test",
|
|
112
|
+
cwd: "/test",
|
|
113
|
+
pid: process.pid,
|
|
114
|
+
visibility: "visible",
|
|
115
|
+
tags: [],
|
|
116
|
+
});
|
|
117
|
+
const tool = new CommsTool(store);
|
|
118
|
+
const result = await tool.handle({ agentId: agent.id, harness: "test", cwd: "/test", pid: process.pid }, { action: "mesh_set_visibility", visibility: "dark", adapter: "mdns" });
|
|
119
|
+
assert.ok(!result.isError, `Expected success, got: ${result.content}`);
|
|
120
|
+
assert.equal(store.getVisibility("mdns"), "dark");
|
|
121
|
+
assert.equal(store.getVisibility(), "discoverable");
|
|
122
|
+
await store.shutdown();
|
|
123
|
+
});
|
|
124
|
+
void test("mesh_get_visibility returns current visibility", async () => {
|
|
125
|
+
const store = new MeshStore(TEST_PORT);
|
|
126
|
+
await store.init();
|
|
127
|
+
const agent = await store.registerAgent({
|
|
128
|
+
name: "visibility-test",
|
|
129
|
+
harness: "test",
|
|
130
|
+
cwd: "/test",
|
|
131
|
+
pid: process.pid,
|
|
132
|
+
visibility: "visible",
|
|
133
|
+
tags: [],
|
|
134
|
+
});
|
|
135
|
+
const tool = new CommsTool(store);
|
|
136
|
+
const result = await tool.handle({ agentId: agent.id, harness: "test", cwd: "/test", pid: process.pid }, { action: "mesh_get_visibility" });
|
|
137
|
+
assert.ok(!result.isError);
|
|
138
|
+
assert.ok(result.content.includes("discoverable"));
|
|
139
|
+
await store.setVisibility("dark");
|
|
140
|
+
const result2 = await tool.handle({ agentId: agent.id, harness: "test", cwd: "/test", pid: process.pid }, { action: "mesh_get_visibility" });
|
|
141
|
+
assert.ok(result2.content.includes("dark"));
|
|
142
|
+
await store.shutdown();
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
// ---------------------------------------------------------------------------
|
|
146
|
+
// buildAction parsing
|
|
147
|
+
// ---------------------------------------------------------------------------
|
|
148
|
+
describe("buildAction visibility parsing", () => {
|
|
149
|
+
void test("buildAction parses mesh_set_visibility", () => {
|
|
150
|
+
const action = buildAction({
|
|
151
|
+
action: "mesh_set_visibility",
|
|
152
|
+
meshVisibility: "quiet",
|
|
153
|
+
});
|
|
154
|
+
assert.equal(action.action, "mesh_set_visibility");
|
|
155
|
+
if (action.action === "mesh_set_visibility") {
|
|
156
|
+
assert.equal(action.visibility, "quiet");
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
void test("buildAction parses mesh_set_visibility with adapter", () => {
|
|
160
|
+
const action = buildAction({
|
|
161
|
+
action: "mesh_set_visibility",
|
|
162
|
+
meshVisibility: "dark",
|
|
163
|
+
adapter: "mdns",
|
|
164
|
+
});
|
|
165
|
+
assert.equal(action.action, "mesh_set_visibility");
|
|
166
|
+
if (action.action === "mesh_set_visibility") {
|
|
167
|
+
assert.equal(action.visibility, "dark");
|
|
168
|
+
assert.equal(action.adapter, "mdns");
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
void test("buildAction parses mesh_get_visibility", () => {
|
|
172
|
+
const action = buildAction({
|
|
173
|
+
action: "mesh_get_visibility",
|
|
174
|
+
});
|
|
175
|
+
assert.equal(action.action, "mesh_get_visibility");
|
|
176
|
+
});
|
|
177
|
+
void test("buildAction throws for mesh_set_visibility without meshVisibility", () => {
|
|
178
|
+
assert.throws(() => buildAction({ action: "mesh_set_visibility" }), /meshVisibility/);
|
|
179
|
+
});
|
|
180
|
+
});
|
|
181
|
+
//# sourceMappingURL=visibility.integration.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visibility.integration.test.js","sourceRoot":"","sources":["../../src/test/visibility.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.
|
|
3
|
+
"version": "1.15.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",
|
|
@@ -51,6 +51,9 @@
|
|
|
51
51
|
"publish:mcp-registry": "tsx scripts/publish-mcp-registry.ts",
|
|
52
52
|
"lint": "eslint .",
|
|
53
53
|
"test": "node --test dist/test/coordinator-socket-error.integration.test.js",
|
|
54
|
+
"test:visibility": "node --test dist/test/visibility.integration.test.js",
|
|
55
|
+
"test:delivery": "node dist/test/delivery-receipt.runner.js",
|
|
56
|
+
"test:all": "pnpm test && pnpm test:delivery",
|
|
54
57
|
"test:frontend": "tsx --test src/bridges/user/web/frontend/test/**/*.unit.test.ts",
|
|
55
58
|
"test:e2e": "playwright test",
|
|
56
59
|
"typecheck": "tsc --noEmit"
|