agent-comms 3.20.0 → 3.22.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 (161) 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/cc-peer/front-runtime.d.ts.map +1 -1
  5. package/dist/bridges/cc-peer/front-runtime.js +2 -1
  6. package/dist/bridges/cc-peer/front-runtime.js.map +1 -1
  7. package/dist/bridges/cc-peer/run.d.ts.map +1 -1
  8. package/dist/bridges/cc-peer/run.js +2 -1
  9. package/dist/bridges/cc-peer/run.js.map +1 -1
  10. package/dist/bridges/user/web/actions.d.ts +59 -0
  11. package/dist/bridges/user/web/actions.d.ts.map +1 -0
  12. package/dist/bridges/user/web/actions.js +109 -0
  13. package/dist/bridges/user/web/actions.js.map +1 -0
  14. package/dist/bridges/user/web/contract.d.ts +1796 -0
  15. package/dist/bridges/user/web/contract.d.ts.map +1 -0
  16. package/dist/bridges/user/web/contract.js +120 -0
  17. package/dist/bridges/user/web/contract.js.map +1 -0
  18. package/dist/bridges/user/web/dist/bundle.js +1 -1
  19. package/dist/bridges/user/web/dist/sw.js +1 -1
  20. package/dist/bridges/user/web/event-publisher.d.ts +30 -0
  21. package/dist/bridges/user/web/event-publisher.d.ts.map +1 -0
  22. package/dist/bridges/user/web/event-publisher.js +84 -0
  23. package/dist/bridges/user/web/event-publisher.js.map +1 -0
  24. package/dist/bridges/user/web/frontend/components/App.d.ts.map +1 -1
  25. package/dist/bridges/user/web/frontend/components/App.js +1 -1
  26. package/dist/bridges/user/web/frontend/components/App.js.map +1 -1
  27. package/dist/bridges/user/web/frontend/components/ChatArea.d.ts +3 -2
  28. package/dist/bridges/user/web/frontend/components/ChatArea.d.ts.map +1 -1
  29. package/dist/bridges/user/web/frontend/components/ChatArea.js +6 -2
  30. package/dist/bridges/user/web/frontend/components/ChatArea.js.map +1 -1
  31. package/dist/bridges/user/web/frontend/main.js +5 -2
  32. package/dist/bridges/user/web/frontend/main.js.map +1 -1
  33. package/dist/bridges/user/web/router.d.ts +696 -0
  34. package/dist/bridges/user/web/router.d.ts.map +1 -0
  35. package/dist/bridges/user/web/router.js +50 -0
  36. package/dist/bridges/user/web/router.js.map +1 -0
  37. package/dist/bridges/user/web/server.d.ts +2 -0
  38. package/dist/bridges/user/web/server.d.ts.map +1 -1
  39. package/dist/bridges/user/web/server.js +94 -114
  40. package/dist/bridges/user/web/server.js.map +1 -1
  41. package/dist/bridges/user/web/test/contract.unit.test.d.ts +2 -0
  42. package/dist/bridges/user/web/test/contract.unit.test.d.ts.map +1 -0
  43. package/dist/bridges/user/web/test/contract.unit.test.js +56 -0
  44. package/dist/bridges/user/web/test/contract.unit.test.js.map +1 -0
  45. package/dist/bridges/user/web/test/orpc-router.integration.test.d.ts +7 -0
  46. package/dist/bridges/user/web/test/orpc-router.integration.test.d.ts.map +1 -0
  47. package/dist/bridges/user/web/test/orpc-router.integration.test.js +214 -0
  48. package/dist/bridges/user/web/test/orpc-router.integration.test.js.map +1 -0
  49. package/dist/core/bridge-mesh.d.ts +2 -0
  50. package/dist/core/bridge-mesh.d.ts.map +1 -1
  51. package/dist/core/bridge-mesh.js +5 -1
  52. package/dist/core/bridge-mesh.js.map +1 -1
  53. package/dist/core/bridge.d.ts +4 -0
  54. package/dist/core/bridge.d.ts.map +1 -1
  55. package/dist/core/bridge.js +19 -0
  56. package/dist/core/bridge.js.map +1 -1
  57. package/dist/core/data-frame-routing.d.ts +14 -0
  58. package/dist/core/data-frame-routing.d.ts.map +1 -0
  59. package/dist/core/data-frame-routing.js +37 -0
  60. package/dist/core/data-frame-routing.js.map +1 -0
  61. package/dist/core/gossip-directory.d.ts +11 -2
  62. package/dist/core/gossip-directory.d.ts.map +1 -1
  63. package/dist/core/gossip-directory.js +32 -4
  64. package/dist/core/gossip-directory.js.map +1 -1
  65. package/dist/core/hub-session.d.ts +5 -1
  66. package/dist/core/hub-session.d.ts.map +1 -1
  67. package/dist/core/hub-session.js +24 -0
  68. package/dist/core/hub-session.js.map +1 -1
  69. package/dist/core/mesh-graph-trace-tool.d.ts +12 -0
  70. package/dist/core/mesh-graph-trace-tool.d.ts.map +1 -0
  71. package/dist/core/mesh-graph-trace-tool.js +60 -0
  72. package/dist/core/mesh-graph-trace-tool.js.map +1 -0
  73. package/dist/core/mesh-graph.d.ts +14 -0
  74. package/dist/core/mesh-graph.d.ts.map +1 -0
  75. package/dist/core/mesh-graph.js +46 -0
  76. package/dist/core/mesh-graph.js.map +1 -0
  77. package/dist/core/mesh-network-actions.d.ts +28 -0
  78. package/dist/core/mesh-network-actions.d.ts.map +1 -0
  79. package/dist/core/mesh-network-actions.js +143 -0
  80. package/dist/core/mesh-network-actions.js.map +1 -0
  81. package/dist/core/mesh-store.d.ts +19 -1
  82. package/dist/core/mesh-store.d.ts.map +1 -1
  83. package/dist/core/mesh-store.js +56 -0
  84. package/dist/core/mesh-store.js.map +1 -1
  85. package/dist/core/package-version.d.ts +4 -0
  86. package/dist/core/package-version.d.ts.map +1 -1
  87. package/dist/core/package-version.js +2 -1
  88. package/dist/core/package-version.js.map +1 -1
  89. package/dist/core/peer-versions.d.ts +16 -0
  90. package/dist/core/peer-versions.d.ts.map +1 -0
  91. package/dist/core/peer-versions.js +42 -0
  92. package/dist/core/peer-versions.js.map +1 -0
  93. package/dist/core/room-lifecycle.d.ts +5 -5
  94. package/dist/core/room-lifecycle.d.ts.map +1 -1
  95. package/dist/core/room-lifecycle.js +11 -5
  96. package/dist/core/room-lifecycle.js.map +1 -1
  97. package/dist/core/room-lookup.d.ts +9 -0
  98. package/dist/core/room-lookup.d.ts.map +1 -0
  99. package/dist/core/room-lookup.js +26 -0
  100. package/dist/core/room-lookup.js.map +1 -0
  101. package/dist/core/room-messaging.d.ts +2 -2
  102. package/dist/core/room-messaging.d.ts.map +1 -1
  103. package/dist/core/room-messaging.js +5 -2
  104. package/dist/core/room-messaging.js.map +1 -1
  105. package/dist/core/tool.d.ts +19 -10
  106. package/dist/core/tool.d.ts.map +1 -1
  107. package/dist/core/tool.js +25 -151
  108. package/dist/core/tool.js.map +1 -1
  109. package/dist/core/transport.d.ts +39 -0
  110. package/dist/core/transport.d.ts.map +1 -1
  111. package/dist/core/types.d.ts +18 -0
  112. package/dist/core/types.d.ts.map +1 -1
  113. package/dist/core/types.js +10 -0
  114. package/dist/core/types.js.map +1 -1
  115. package/dist/core/version-report-actions.d.ts +18 -0
  116. package/dist/core/version-report-actions.d.ts.map +1 -0
  117. package/dist/core/version-report-actions.js +51 -0
  118. package/dist/core/version-report-actions.js.map +1 -0
  119. package/dist/core/wire-mesh-core-version.d.ts +6 -0
  120. package/dist/core/wire-mesh-core-version.d.ts.map +1 -0
  121. package/dist/core/wire-mesh-core-version.js +20 -0
  122. package/dist/core/wire-mesh-core-version.js.map +1 -0
  123. package/dist/core/wire-mesh-transport.d.ts +11 -2
  124. package/dist/core/wire-mesh-transport.d.ts.map +1 -1
  125. package/dist/core/wire-mesh-transport.js +29 -46
  126. package/dist/core/wire-mesh-transport.js.map +1 -1
  127. package/dist/test/agent-comms-version-gossip.integration.test.d.ts +5 -0
  128. package/dist/test/agent-comms-version-gossip.integration.test.d.ts.map +1 -0
  129. package/dist/test/agent-comms-version-gossip.integration.test.js +103 -0
  130. package/dist/test/agent-comms-version-gossip.integration.test.js.map +1 -0
  131. package/dist/test/mesh-graph-trace-tool.test.d.ts +2 -0
  132. package/dist/test/mesh-graph-trace-tool.test.d.ts.map +1 -0
  133. package/dist/test/mesh-graph-trace-tool.test.js +104 -0
  134. package/dist/test/mesh-graph-trace-tool.test.js.map +1 -0
  135. package/dist/test/mesh-graph-trace.integration.test.d.ts +5 -0
  136. package/dist/test/mesh-graph-trace.integration.test.d.ts.map +1 -0
  137. package/dist/test/mesh-graph-trace.integration.test.js +146 -0
  138. package/dist/test/mesh-graph-trace.integration.test.js.map +1 -0
  139. package/dist/test/peer-versions.test.d.ts +5 -0
  140. package/dist/test/peer-versions.test.d.ts.map +1 -0
  141. package/dist/test/peer-versions.test.js +68 -0
  142. package/dist/test/peer-versions.test.js.map +1 -0
  143. package/dist/test/query-version.integration.test.d.ts +5 -0
  144. package/dist/test/query-version.integration.test.d.ts.map +1 -0
  145. package/dist/test/query-version.integration.test.js +64 -0
  146. package/dist/test/query-version.integration.test.js.map +1 -0
  147. package/dist/test/send-by-room-name.test.d.ts +5 -0
  148. package/dist/test/send-by-room-name.test.d.ts.map +1 -0
  149. package/dist/test/send-by-room-name.test.js +77 -0
  150. package/dist/test/send-by-room-name.test.js.map +1 -0
  151. package/dist/test/tool-version-reporting.test.js +38 -0
  152. package/dist/test/tool-version-reporting.test.js.map +1 -1
  153. package/dist/test/version-report-actions.test.d.ts +5 -0
  154. package/dist/test/version-report-actions.test.d.ts.map +1 -0
  155. package/dist/test/version-report-actions.test.js +88 -0
  156. package/dist/test/version-report-actions.test.js.map +1 -0
  157. package/dist/test/wire-mesh-core-version.test.d.ts +5 -0
  158. package/dist/test/wire-mesh-core-version.test.d.ts.map +1 -0
  159. package/dist/test/wire-mesh-core-version.test.js +14 -0
  160. package/dist/test/wire-mesh-core-version.test.js.map +1 -0
  161. package/package.json +6 -3
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Real end-to-end coverage for agent-comms#199's mesh_graph/mesh_trace, against two genuine WireMeshTransport instances joined by a real connectToPeer session -- the same pattern wire-mesh-transport.test.ts's own "WireMeshTransport connectToPeer" describe block already uses, chosen for the identical reason: this needs the transport's own gossip/topology-self-advertisement and path.trace request/response to actually cross the wire, not a mocked session layer.
3
+ */
4
+ import { test, describe, expect } from "vitest";
5
+ import { generateIdentity } from "../core/identity.js";
6
+ import { toIdentityPort } from "../core/wire-mesh-identity.js";
7
+ import { deviceIdToHex } from "wire-mesh-core/domain/device-id";
8
+ import { MeshStore } from "../core/mesh-store.js";
9
+ import { WireMeshTransport } from "../core/wire-mesh-transport.js";
10
+ import { waitFor, wireTestTransportWithHub } from "./test-transport.js";
11
+ import { realHubOverWs, waitForCondition } from "./hub-helpers.js";
12
+ function noopEvents() {
13
+ return {
14
+ onMessage: () => undefined,
15
+ onPeerConnected: () => undefined,
16
+ onPeerDisconnected: () => undefined,
17
+ onIntroduction: () => undefined,
18
+ onConnectionRequest: () => undefined,
19
+ onPeerList: () => undefined,
20
+ onPeerJoined: () => undefined,
21
+ onBecomeCoordinator: () => undefined,
22
+ onRevocationAnnounce: () => undefined,
23
+ onPresenceAdvert: () => undefined,
24
+ };
25
+ }
26
+ async function peerId(identity) {
27
+ return deviceIdToHex(Uint8Array.from(identity.deviceId));
28
+ }
29
+ /** A device-id is SHA-256(public key) -- 32 raw bytes, 64 hex characters. */
30
+ const DEVICE_ID_BYTE_LENGTH = 32;
31
+ describe("WireMeshTransport meshGraph/meshTrace (agent-comms#199)", () => {
32
+ test("meshGraph reports the other side's own self-advertised direct edge once gossip has propagated", async () => {
33
+ const identityA = generateIdentity();
34
+ const identityB = generateIdentity();
35
+ const idA = await peerId(await toIdentityPort(identityA));
36
+ const idB = await peerId(await toIdentityPort(identityB));
37
+ const transportA = new WireMeshTransport(noopEvents(), identityA);
38
+ const transportB = new WireMeshTransport(noopEvents(), identityB);
39
+ try {
40
+ await transportA.startDataServer();
41
+ await transportB.connectToPeer({
42
+ id: idA,
43
+ port: transportA.dataPort,
44
+ startedAt: new Date().toISOString(),
45
+ }, idB);
46
+ await waitFor(() => transportA.meshGraph().nodes.includes(idB), "A learns B's own device-id via gossip");
47
+ await waitFor(() => transportB.meshGraph().nodes.includes(idA), "B learns A's own device-id via gossip");
48
+ // A's own knownDevices holds B's self-advert (never A's own), and B's own topology/peers self-report says its direct peer is A -- the connection each side authenticated over TLS.
49
+ const graphFromA = transportA.meshGraph();
50
+ expect(graphFromA.nodes).toContain(idB);
51
+ expect(graphFromA.edges).toContainEqual({
52
+ kind: "direct",
53
+ from: idB,
54
+ to: idA,
55
+ });
56
+ const graphFromB = transportB.meshGraph();
57
+ expect(graphFromB.nodes).toContain(idA);
58
+ expect(graphFromB.edges).toContainEqual({
59
+ kind: "direct",
60
+ from: idA,
61
+ to: idB,
62
+ });
63
+ }
64
+ finally {
65
+ await transportB.shutdown();
66
+ await transportA.shutdown();
67
+ }
68
+ });
69
+ test("meshTrace sends a real path.trace over the direct peer session and reports a real RTT", async () => {
70
+ const identityA = generateIdentity();
71
+ const identityB = generateIdentity();
72
+ const idA = await peerId(await toIdentityPort(identityA));
73
+ const idB = await peerId(await toIdentityPort(identityB));
74
+ const transportA = new WireMeshTransport(noopEvents(), identityA);
75
+ const transportB = new WireMeshTransport(noopEvents(), identityB);
76
+ try {
77
+ await transportA.startDataServer();
78
+ await transportB.connectToPeer({
79
+ id: idA,
80
+ port: transportA.dataPort,
81
+ startedAt: new Date().toISOString(),
82
+ }, idB);
83
+ const result = await transportB.meshTrace(idA);
84
+ expect(result.outcome.result, JSON.stringify(result)).toBe("ok");
85
+ expect(result.rttMs).toBeGreaterThanOrEqual(0);
86
+ expect(result.local.relayed).toBe(false);
87
+ expect(result.remote?.relayed).toBe(false);
88
+ }
89
+ finally {
90
+ await transportB.shutdown();
91
+ await transportA.shutdown();
92
+ }
93
+ });
94
+ test("meshTrace resolves a not_connected outcome for a device with no known path", async () => {
95
+ const identityA = generateIdentity();
96
+ const transportA = new WireMeshTransport(noopEvents(), identityA);
97
+ const unknownDeviceHex = "ab".repeat(DEVICE_ID_BYTE_LENGTH);
98
+ try {
99
+ const result = await transportA.meshTrace(unknownDeviceHex);
100
+ expect(result.outcome).toEqual({
101
+ result: "error",
102
+ code: "not_connected",
103
+ });
104
+ }
105
+ finally {
106
+ await transportA.shutdown();
107
+ }
108
+ });
109
+ test("meshGraph reports no nodes before any gossip has been received", async () => {
110
+ const identityA = generateIdentity();
111
+ const transportA = new WireMeshTransport(noopEvents(), identityA);
112
+ try {
113
+ expect(transportA.meshGraph()).toEqual({ nodes: [], edges: [] });
114
+ }
115
+ finally {
116
+ await transportA.shutdown();
117
+ }
118
+ });
119
+ test("meshTrace routes via the hub's own relay pairing when no direct peer session exists, reporting relayed on both sides", async () => {
120
+ const hub = await realHubOverWs();
121
+ try {
122
+ const storeA = new MeshStore();
123
+ const { transport: transportA } = await wireTestTransportWithHub(storeA);
124
+ const storeB = new MeshStore();
125
+ const { transport: transportB } = await wireTestTransportWithHub(storeB);
126
+ try {
127
+ await transportA.connectHub?.(hub.url);
128
+ await transportB.connectHub?.(hub.url);
129
+ await waitForCondition(() => transportA.hub.isConnected && transportB.hub.isConnected);
130
+ const result = await transportA.meshTrace(storeB.peerId);
131
+ expect(result.outcome.result, JSON.stringify(result)).toBe("ok");
132
+ expect(result.local.relayed).toBe(true);
133
+ expect(result.local.hubAddress).toBe(hub.url);
134
+ expect(result.remote?.relayed).toBe(true);
135
+ }
136
+ finally {
137
+ await storeA.shutdown();
138
+ await storeB.shutdown();
139
+ }
140
+ }
141
+ finally {
142
+ await hub.close();
143
+ }
144
+ });
145
+ });
146
+ //# sourceMappingURL=mesh-graph-trace.integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mesh-graph-trace.integration.test.js","sourceRoot":"","sources":["../../src/test/mesh-graph-trace.integration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Unit tests for peer-versions.ts's read side (agent-comms#198): extracting a specific device's gossiped wire-mesh-core/agent-comms/cc-peer versions back out of a fake listKnownDevices, without any real mesh machinery.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=peer-versions.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peer-versions.test.d.ts","sourceRoot":"","sources":["../../src/test/peer-versions.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Unit tests for peer-versions.ts's read side (agent-comms#198): extracting a specific device's gossiped wire-mesh-core/agent-comms/cc-peer versions back out of a fake listKnownDevices, without any real mesh machinery.
3
+ */
4
+ import { describe, it, expect } from "vitest";
5
+ import { getPeerAgentCommsVersions, getPeerWireMeshCoreVersion, } from "../core/peer-versions.js";
6
+ function fakeTransport(devices) {
7
+ return { listKnownDevices: () => devices };
8
+ }
9
+ describe("getPeerWireMeshCoreVersion", () => {
10
+ it("returns undefined when the transport has no listKnownDevices capability", () => {
11
+ expect(getPeerWireMeshCoreVersion({}, "device-1")).toBeUndefined();
12
+ });
13
+ it("returns undefined for a device this side has never heard gossip from", () => {
14
+ const transport = fakeTransport([
15
+ { deviceId: "other-device", advert: { "wire-mesh/version": "1.0.0" } },
16
+ ]);
17
+ expect(getPeerWireMeshCoreVersion(transport, "device-1")).toBeUndefined();
18
+ });
19
+ it("returns the gossiped version string when present", () => {
20
+ const transport = fakeTransport([
21
+ { deviceId: "device-1", advert: { "wire-mesh/version": "1.50.0" } },
22
+ ]);
23
+ expect(getPeerWireMeshCoreVersion(transport, "device-1")).toBe("1.50.0");
24
+ });
25
+ it("returns undefined when the gossiped value isn't a string", () => {
26
+ const transport = fakeTransport([
27
+ { deviceId: "device-1", advert: { "wire-mesh/version": 42 } },
28
+ ]);
29
+ expect(getPeerWireMeshCoreVersion(transport, "device-1")).toBeUndefined();
30
+ });
31
+ });
32
+ describe("getPeerAgentCommsVersions", () => {
33
+ it("returns undefined for a malformed advert (missing agentComms)", () => {
34
+ const transport = fakeTransport([
35
+ {
36
+ deviceId: "device-1",
37
+ advert: { "agent-comms/version": { ccPeer: "1.0.0" } },
38
+ },
39
+ ]);
40
+ expect(getPeerAgentCommsVersions(transport, "device-1")).toBeUndefined();
41
+ });
42
+ it("returns the parsed advert, ccPeer included, when well-formed", () => {
43
+ const transport = fakeTransport([
44
+ {
45
+ deviceId: "device-1",
46
+ advert: {
47
+ "agent-comms/version": { agentComms: "3.0.0", ccPeer: "1.5.0" },
48
+ },
49
+ },
50
+ ]);
51
+ expect(getPeerAgentCommsVersions(transport, "device-1")).toEqual({
52
+ agentComms: "3.0.0",
53
+ ccPeer: "1.5.0",
54
+ });
55
+ });
56
+ it("returns the parsed advert with no ccPeer field when the device isn't fronting/bridging one", () => {
57
+ const transport = fakeTransport([
58
+ {
59
+ deviceId: "device-1",
60
+ advert: { "agent-comms/version": { agentComms: "3.0.0" } },
61
+ },
62
+ ]);
63
+ expect(getPeerAgentCommsVersions(transport, "device-1")).toEqual({
64
+ agentComms: "3.0.0",
65
+ });
66
+ });
67
+ });
68
+ //# sourceMappingURL=peer-versions.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peer-versions.test.js","sourceRoot":"","sources":["../../src/test/peer-versions.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * WireMeshTransport.queryVersion (agent-comms#198's own cache-bust action): asks a specific device for its own, currently-running wire-mesh-core version live, right now, rather than trusting whatever it last gossiped. Rides sendRoomRequest's own routing against wire-mesh-core's deliberately-ungated core/version domain (spec/version.cddl).
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=query-version.integration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-version.integration.test.d.ts","sourceRoot":"","sources":["../../src/test/query-version.integration.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * WireMeshTransport.queryVersion (agent-comms#198's own cache-bust action): asks a specific device for its own, currently-running wire-mesh-core version live, right now, rather than trusting whatever it last gossiped. Rides sendRoomRequest's own routing against wire-mesh-core's deliberately-ungated core/version domain (spec/version.cddl).
3
+ */
4
+ import { test, describe, expect } from "vitest";
5
+ import { generateIdentity } from "../core/identity.js";
6
+ import { deviceIdToHex } from "wire-mesh-core/domain/device-id";
7
+ import { WireMeshTransport } from "../core/wire-mesh-transport.js";
8
+ import { getWireMeshCoreVersion } from "../core/wire-mesh-core-version.js";
9
+ function noopEvents() {
10
+ return {
11
+ onMessage: () => undefined,
12
+ onPeerConnected: () => undefined,
13
+ onPeerDisconnected: () => undefined,
14
+ onIntroduction: () => undefined,
15
+ onConnectionRequest: () => undefined,
16
+ onPeerList: () => undefined,
17
+ onPeerJoined: () => undefined,
18
+ onBecomeCoordinator: () => undefined,
19
+ onRevocationAnnounce: () => undefined,
20
+ onPresenceAdvert: () => undefined,
21
+ };
22
+ }
23
+ async function peerId(identity) {
24
+ return deviceIdToHex(Uint8Array.from(identity.deviceId));
25
+ }
26
+ describe("WireMeshTransport.queryVersion", () => {
27
+ test("asks a directly-connected peer for its own live wire-mesh-core version", async () => {
28
+ const identityA = generateIdentity();
29
+ const identityB = generateIdentity();
30
+ const idA = await peerId(identityA);
31
+ const idB = await peerId(identityB);
32
+ const transportA = new WireMeshTransport(noopEvents(), identityA);
33
+ const transportB = new WireMeshTransport(noopEvents(), identityB);
34
+ try {
35
+ await transportA.startDataServer();
36
+ await transportB.connectToPeer({
37
+ id: idA,
38
+ port: transportA.dataPort,
39
+ startedAt: new Date().toISOString(),
40
+ }, idB);
41
+ const outcome = await transportB.queryVersion(idA);
42
+ expect(outcome).toEqual({
43
+ result: "ok",
44
+ version: getWireMeshCoreVersion(),
45
+ });
46
+ }
47
+ finally {
48
+ await transportB.shutdown();
49
+ await transportA.shutdown();
50
+ }
51
+ });
52
+ test("answers unauthorized for a device with no live session and no gateway trust", async () => {
53
+ const identity = generateIdentity();
54
+ const transport = new WireMeshTransport(noopEvents(), identity);
55
+ try {
56
+ const outcome = await transport.queryVersion("nobody-home");
57
+ expect(outcome).toEqual({ result: "error", code: "unauthorized" });
58
+ }
59
+ finally {
60
+ await transport.shutdown();
61
+ }
62
+ });
63
+ });
64
+ //# sourceMappingURL=query-version.integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-version.integration.test.js","sourceRoot":"","sources":["../../src/test/query-version.integration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * agent-comms#212 -- create a room, then address it by its plain local name (exactly as the README's own usage examples and CommsAction's documented `send`/`join_room`/etc parameters show, e.g. `target: "code-review"`) fails with ROOM_NOT_FOUND. MeshStore's real room identity is the owner-qualified `<owner-hex>/<local-name>` path (room-path.ts's ownerNamedRoomPath), which no caller can construct from a bare name alone -- these tests prove every room-touching tool action accepts the same plain name createRoom's own confirmation message and listRooms/read_room already surface back to the caller.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=send-by-room-name.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send-by-room-name.test.d.ts","sourceRoot":"","sources":["../../src/test/send-by-room-name.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * agent-comms#212 -- create a room, then address it by its plain local name (exactly as the README's own usage examples and CommsAction's documented `send`/`join_room`/etc parameters show, e.g. `target: "code-review"`) fails with ROOM_NOT_FOUND. MeshStore's real room identity is the owner-qualified `<owner-hex>/<local-name>` path (room-path.ts's ownerNamedRoomPath), which no caller can construct from a bare name alone -- these tests prove every room-touching tool action accepts the same plain name createRoom's own confirmation message and listRooms/read_room already surface back to the caller.
3
+ */
4
+ import { describe, it, expect } from "vitest";
5
+ import { MeshStore } from "../core/mesh-store.js";
6
+ import { CommsTool } from "../core/tool.js";
7
+ import { buildAction } from "../core/bridge.js";
8
+ import { wireTestTransport } from "./test-transport.js";
9
+ const DEVICE_ID_HEX_LENGTH = 64;
10
+ async function makeToolAndOwner() {
11
+ const store = new MeshStore();
12
+ await wireTestTransport(store);
13
+ const owner = await store.registerAgent({
14
+ name: "owner",
15
+ harness: "pi",
16
+ cwd: "/tmp/p",
17
+ pid: process.pid,
18
+ visibility: "visible",
19
+ tags: [],
20
+ });
21
+ const tool = new CommsTool(store);
22
+ const ctx = {
23
+ agentId: owner.id,
24
+ harness: "pi",
25
+ cwd: "/tmp/p",
26
+ pid: process.pid,
27
+ };
28
+ return { store, tool, ctx };
29
+ }
30
+ describe("addressing a room by its plain local name", () => {
31
+ it("send finds a just-created room by name, not just its full owner-qualified id", async () => {
32
+ const { tool, ctx } = await makeToolAndOwner();
33
+ const created = await tool.handle(ctx, buildAction({
34
+ action: "create_room",
35
+ room: "code-review",
36
+ type: "public",
37
+ }));
38
+ expect(created.isError).toBe(false);
39
+ const sent = await tool.handle(ctx, buildAction({
40
+ action: "send",
41
+ target: "code-review",
42
+ content: "Batch 3 done.",
43
+ }));
44
+ expect(sent.isError).toBe(false);
45
+ expect(sent.content).not.toContain("ROOM_NOT_FOUND");
46
+ });
47
+ it("join_room re-joining by name and read_room by name both succeed after create_room", async () => {
48
+ const { tool, ctx } = await makeToolAndOwner();
49
+ await tool.handle(ctx, buildAction({ action: "create_room", room: "general", type: "public" }));
50
+ const joined = await tool.handle(ctx, buildAction({ action: "join_room", room: "general" }));
51
+ expect(joined.isError).toBe(false);
52
+ const read = await tool.handle(ctx, buildAction({ action: "read_room", room: "general" }));
53
+ expect(read.isError).toBe(false);
54
+ });
55
+ it("leave_room by name succeeds after create_room", async () => {
56
+ const { tool, ctx } = await makeToolAndOwner();
57
+ await tool.handle(ctx, buildAction({ action: "create_room", room: "standup", type: "public" }));
58
+ const left = await tool.handle(ctx, buildAction({ action: "leave_room", room: "standup" }));
59
+ expect(left.isError).toBe(false);
60
+ });
61
+ it("refuses to guess when two different owners' rooms share the same plain name", async () => {
62
+ const { store, tool, ctx } = await makeToolAndOwner();
63
+ const otherOwner = "b".repeat(DEVICE_ID_HEX_LENGTH);
64
+ await tool.handle(ctx, buildAction({ action: "create_room", room: "general", type: "public" }));
65
+ // A second room, owned by a different device, that happens to share the same local name -- names are only unique per-owner, so this is a legitimate state to end up in (e.g. via legacy full-state replication), not something createRoom itself needs to prevent.
66
+ await store.createRoom({
67
+ name: "general",
68
+ type: "public",
69
+ owner: otherOwner,
70
+ description: "",
71
+ });
72
+ const sent = await tool.handle(ctx, buildAction({ action: "send", target: "general", content: "hi" }));
73
+ expect(sent.isError).toBe(true);
74
+ expect(sent.content).toContain("AMBIGUOUS_ROOM_NAME");
75
+ });
76
+ });
77
+ //# sourceMappingURL=send-by-room-name.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send-by-room-name.test.js","sourceRoot":"","sources":["../../src/test/send-by-room-name.test.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ import { MeshStore } from "../core/mesh-store.js";
6
6
  import { CommsTool } from "../core/tool.js";
7
7
  import { buildAction } from "../core/bridge.js";
8
8
  import { getOwnPackageVersion } from "../core/package-version.js";
9
+ import { getWireMeshCoreVersion } from "../core/wire-mesh-core-version.js";
9
10
  import { wireTestTransport } from "./test-transport.js";
10
11
  async function registeredContext(store) {
11
12
  const agent = await store.registerAgent({
@@ -44,6 +45,31 @@ describe("whoami reports this bridge's own version", () => {
44
45
  const result = await tool.handle(ctx, buildAction({ action: "whoami" }));
45
46
  expect(result.content).toContain("Update available: 99.0.0");
46
47
  });
48
+ it("includes a Wire-mesh-core line matching the installed dependency's own version", async () => {
49
+ const store = new MeshStore();
50
+ await wireTestTransport(store);
51
+ const ctx = await registeredContext(store);
52
+ const tool = new CommsTool(store);
53
+ const result = await tool.handle(ctx, buildAction({ action: "whoami" }));
54
+ expect(result.content).toContain(`Wire-mesh-core: ${getWireMeshCoreVersion()}`);
55
+ });
56
+ it("does not mention a Cc-peer version when this store never wired one", async () => {
57
+ const store = new MeshStore();
58
+ await wireTestTransport(store);
59
+ const ctx = await registeredContext(store);
60
+ const tool = new CommsTool(store);
61
+ const result = await tool.handle(ctx, buildAction({ action: "whoami" }));
62
+ expect(result.content).not.toContain("Cc-peer:");
63
+ });
64
+ it("mentions the Cc-peer version once the store's own getter is set, as though fronting/bridging cc-peer", async () => {
65
+ const store = new MeshStore();
66
+ await wireTestTransport(store);
67
+ const ctx = await registeredContext(store);
68
+ const tool = new CommsTool(store);
69
+ store.getCcPeerVersion = () => "9.9.9";
70
+ const result = await tool.handle(ctx, buildAction({ action: "whoami" }));
71
+ expect(result.content).toContain("Cc-peer: 9.9.9");
72
+ });
47
73
  });
48
74
  describe("update reports this bridge's own version", () => {
49
75
  it("includes the package's own version in the Updated summary", async () => {
@@ -63,5 +89,17 @@ describe("update reports this bridge's own version", () => {
63
89
  const result = await tool.handle(ctx, buildAction({ action: "update", status: "idle" }));
64
90
  expect(result.content).toContain("Update available: 99.0.0");
65
91
  });
92
+ it("includes the installed wire-mesh-core version, and cc-peer's once wired", async () => {
93
+ const store = new MeshStore();
94
+ await wireTestTransport(store);
95
+ const ctx = await registeredContext(store);
96
+ const tool = new CommsTool(store);
97
+ const before = await tool.handle(ctx, buildAction({ action: "update", status: "busy" }));
98
+ expect(before.content).toContain(`wireMeshCore=${getWireMeshCoreVersion()}`);
99
+ expect(before.content).not.toContain("ccPeer=");
100
+ store.getCcPeerVersion = () => "9.9.9";
101
+ const after = await tool.handle(ctx, buildAction({ action: "update", status: "idle" }));
102
+ expect(after.content).toContain("ccPeer=9.9.9");
103
+ });
66
104
  });
67
105
  //# sourceMappingURL=tool-version-reporting.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool-version-reporting.test.js","sourceRoot":"","sources":["../../src/test/tool-version-reporting.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-version-reporting.test.js","sourceRoot":"","sources":["../../src/test/tool-version-reporting.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Unit tests for version-report-actions.ts's pure formatting/action helpers (agent-comms#198) -- exercised directly against fake stores rather than a real MeshStore, mirroring gateway-trust-actions.ts's own test style for the same reason: every one of these is a pure translation from whatever the store answers into either a CommsResult or a formatted line, with no mesh machinery of its own to set up.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=version-report-actions.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-report-actions.test.d.ts","sourceRoot":"","sources":["../../src/test/version-report-actions.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Unit tests for version-report-actions.ts's pure formatting/action helpers (agent-comms#198) -- exercised directly against fake stores rather than a real MeshStore, mirroring gateway-trust-actions.ts's own test style for the same reason: every one of these is a pure translation from whatever the store answers into either a CommsResult or a formatted line, with no mesh machinery of its own to set up.
3
+ */
4
+ import { describe, it, expect } from "vitest";
5
+ import { formatListedAgentVersions, formatSelfVersionLines, formatSelfVersionSuffix, handleQueryVersion, } from "../core/version-report-actions.js";
6
+ import { getOwnPackageVersion } from "../core/package-version.js";
7
+ import { getWireMeshCoreVersion } from "../core/wire-mesh-core-version.js";
8
+ describe("handleQueryVersion", () => {
9
+ it("reports not-mesh-backed when the store has no queryVersion method", async () => {
10
+ const result = await handleQueryVersion({}, { action: "query_version", device: "abc123" });
11
+ expect(result.isError).toBe(true);
12
+ expect(result.content).toContain("requires a mesh-backed store");
13
+ });
14
+ it("reports the peer's live version on success", async () => {
15
+ const store = {
16
+ queryVersion: async (deviceId) => {
17
+ await Promise.resolve();
18
+ expect(deviceId).toBe("abc123");
19
+ return { version: "1.2.3" };
20
+ },
21
+ };
22
+ const result = await handleQueryVersion(store, {
23
+ action: "query_version",
24
+ device: "abc123",
25
+ });
26
+ expect(result.isError).toBe(false);
27
+ expect(result.content).toBe("abc123 is running wire-mesh-core 1.2.3.");
28
+ });
29
+ it("reports the store's own error on failure", async () => {
30
+ const store = {
31
+ queryVersion: async () => {
32
+ await Promise.resolve();
33
+ return { error: "unauthorized" };
34
+ },
35
+ };
36
+ const result = await handleQueryVersion(store, {
37
+ action: "query_version",
38
+ device: "abc123",
39
+ });
40
+ expect(result.isError).toBe(true);
41
+ expect(result.content).toBe("Failed to query abc123's version: unauthorized");
42
+ });
43
+ });
44
+ describe("formatSelfVersionLines / formatSelfVersionSuffix", () => {
45
+ it("includes only the wire-mesh-core line when no cc-peer getter is wired", () => {
46
+ expect(formatSelfVersionLines(undefined)).toEqual([
47
+ `Wire-mesh-core: ${getWireMeshCoreVersion()}`,
48
+ ]);
49
+ expect(formatSelfVersionSuffix(undefined)).toBe(`, wireMeshCore=${getWireMeshCoreVersion()}`);
50
+ });
51
+ it("includes a cc-peer line/suffix once a getter answers one", () => {
52
+ const getCcPeerVersion = () => "9.9.9";
53
+ expect(formatSelfVersionLines(getCcPeerVersion)).toEqual([
54
+ `Wire-mesh-core: ${getWireMeshCoreVersion()}`,
55
+ "Cc-peer: 9.9.9",
56
+ ]);
57
+ expect(formatSelfVersionSuffix(getCcPeerVersion)).toBe(`, wireMeshCore=${getWireMeshCoreVersion()}, ccPeer=9.9.9`);
58
+ });
59
+ });
60
+ describe("formatListedAgentVersions", () => {
61
+ it("reads local versions for the requester's own entry, ignoring the store's peer getters", () => {
62
+ const store = {
63
+ getPeerAgentCommsVersion: () => "should-not-be-used",
64
+ getPeerWireMeshCoreVersion: () => "should-not-be-used",
65
+ getPeerCcPeerVersion: () => "should-not-be-used",
66
+ };
67
+ const formatted = formatListedAgentVersions(store, "self-device", true, () => "9.9.9");
68
+ expect(formatted).toBe(`agent-comms ${getOwnPackageVersion()}, wire-mesh-core ${getWireMeshCoreVersion()}, cc-peer 9.9.9`);
69
+ });
70
+ it("reads gossiped versions for another peer, defaulting to unknown when never gossiped", () => {
71
+ const knownPeer = formatListedAgentVersions({
72
+ getPeerAgentCommsVersion: () => "3.0.0",
73
+ getPeerWireMeshCoreVersion: () => "1.50.0",
74
+ }, "peer-device", false, undefined);
75
+ expect(knownPeer).toBe("agent-comms 3.0.0, wire-mesh-core 1.50.0");
76
+ const unknownPeer = formatListedAgentVersions({}, "peer-device", false, undefined);
77
+ expect(unknownPeer).toBe("agent-comms unknown, wire-mesh-core unknown");
78
+ });
79
+ it("includes a peer's cc-peer version only when the store actually reports one", () => {
80
+ const formatted = formatListedAgentVersions({
81
+ getPeerAgentCommsVersion: () => "3.0.0",
82
+ getPeerWireMeshCoreVersion: () => "1.50.0",
83
+ getPeerCcPeerVersion: () => "1.5.0",
84
+ }, "peer-device", false, undefined);
85
+ expect(formatted).toBe("agent-comms 3.0.0, wire-mesh-core 1.50.0, cc-peer 1.5.0");
86
+ });
87
+ });
88
+ //# sourceMappingURL=version-report-actions.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-report-actions.test.js","sourceRoot":"","sources":["../../src/test/version-report-actions.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * getWireMeshCoreVersion reads this process's own installed wire-mesh-core dependency's real package.json version (agent-comms#198) -- asserted here against a real semver-shaped string rather than a specific value, since the exact installed version is whatever the lockfile currently pins and would make this test rot the moment it's bumped.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=wire-mesh-core-version.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wire-mesh-core-version.test.d.ts","sourceRoot":"","sources":["../../src/test/wire-mesh-core-version.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}