agent-comms 3.23.0 → 3.25.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 +13 -1
  4. package/dist/bridges/user/web/dist/bundle.js +15 -15
  5. package/dist/bridges/user/web/dist/sw.js +1 -1
  6. package/dist/bridges/user/web/frontend/api.d.ts +3 -1
  7. package/dist/bridges/user/web/frontend/api.d.ts.map +1 -1
  8. package/dist/bridges/user/web/frontend/api.js +47 -0
  9. package/dist/bridges/user/web/frontend/api.js.map +1 -1
  10. package/dist/bridges/user/web/frontend/components/App.d.ts +2 -1
  11. package/dist/bridges/user/web/frontend/components/App.d.ts.map +1 -1
  12. package/dist/bridges/user/web/frontend/components/App.js +8 -2
  13. package/dist/bridges/user/web/frontend/components/App.js.map +1 -1
  14. package/dist/bridges/user/web/frontend/components/MeshGraphView.d.ts +14 -0
  15. package/dist/bridges/user/web/frontend/components/MeshGraphView.d.ts.map +1 -0
  16. package/dist/bridges/user/web/frontend/components/MeshGraphView.js +58 -0
  17. package/dist/bridges/user/web/frontend/components/MeshGraphView.js.map +1 -0
  18. package/dist/bridges/user/web/frontend/components/MeshPanel.d.ts +12 -0
  19. package/dist/bridges/user/web/frontend/components/MeshPanel.d.ts.map +1 -0
  20. package/dist/bridges/user/web/frontend/components/MeshPanel.js +39 -0
  21. package/dist/bridges/user/web/frontend/components/MeshPanel.js.map +1 -0
  22. package/dist/bridges/user/web/frontend/components/MeshTraceView.d.ts +18 -0
  23. package/dist/bridges/user/web/frontend/components/MeshTraceView.d.ts.map +1 -0
  24. package/dist/bridges/user/web/frontend/components/MeshTraceView.js +29 -0
  25. package/dist/bridges/user/web/frontend/components/MeshTraceView.js.map +1 -0
  26. package/dist/bridges/user/web/frontend/main.js +12 -2
  27. package/dist/bridges/user/web/frontend/main.js.map +1 -1
  28. package/dist/bridges/user/web/frontend/state.d.ts +4 -1
  29. package/dist/bridges/user/web/frontend/state.d.ts.map +1 -1
  30. package/dist/bridges/user/web/frontend/state.js +5 -0
  31. package/dist/bridges/user/web/frontend/state.js.map +1 -1
  32. package/dist/bridges/user/web/frontend/types.d.ts +28 -0
  33. package/dist/bridges/user/web/frontend/types.d.ts.map +1 -1
  34. package/dist/bridges/user/web/server.d.ts +6 -0
  35. package/dist/bridges/user/web/server.d.ts.map +1 -1
  36. package/dist/bridges/user/web/server.js +58 -2
  37. package/dist/bridges/user/web/server.js.map +1 -1
  38. package/dist/bridges/user/web/test/web-console-route.integration.test.d.ts +5 -0
  39. package/dist/bridges/user/web/test/web-console-route.integration.test.d.ts.map +1 -0
  40. package/dist/bridges/user/web/test/web-console-route.integration.test.js +112 -0
  41. package/dist/bridges/user/web/test/web-console-route.integration.test.js.map +1 -0
  42. package/dist/bridges/user/web/test/web-console-static.test.d.ts +5 -0
  43. package/dist/bridges/user/web/test/web-console-static.test.d.ts.map +1 -0
  44. package/dist/bridges/user/web/test/web-console-static.test.js +135 -0
  45. package/dist/bridges/user/web/test/web-console-static.test.js.map +1 -0
  46. package/dist/bridges/user/web/test/web-server.integration.test.js +42 -0
  47. package/dist/bridges/user/web/test/web-server.integration.test.js.map +1 -1
  48. package/dist/bridges/user/web/web-console-static.d.ts +21 -0
  49. package/dist/bridges/user/web/web-console-static.d.ts.map +1 -0
  50. package/dist/bridges/user/web/web-console-static.js +70 -0
  51. package/dist/bridges/user/web/web-console-static.js.map +1 -0
  52. package/dist/core/mesh-graph.d.ts +5 -1
  53. package/dist/core/mesh-graph.d.ts.map +1 -1
  54. package/dist/core/mesh-graph.js +21 -12
  55. package/dist/core/mesh-graph.js.map +1 -1
  56. package/dist/test/mesh-graph.test.d.ts +5 -0
  57. package/dist/test/mesh-graph.test.d.ts.map +1 -0
  58. package/dist/test/mesh-graph.test.js +87 -0
  59. package/dist/test/mesh-graph.test.js.map +1 -0
  60. package/package.json +3 -1
@@ -1 +1 @@
1
- {"version":3,"file":"web-server.integration.test.js","sourceRoot":"","sources":["../../../../../src/bridges/user/web/test/web-server.integration.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"web-server.integration.test.js","sourceRoot":"","sources":["../../../../../src/bridges/user/web/test/web-server.integration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Static-file serving for wire-mesh's web-console — a generic, protocol-level reference UI for any wire-mesh-compatible node, mounted alongside agent-comms' own richer dashboard as an alternate view.
3
+ *
4
+ * Serving is opt-in and off by default: web-console is a separate, unpublished Vite/React app (wire-mesh/ts/packages/web-console), not a dependency of this package, so there is no build output to serve unless someone has built one locally and pointed AGENT_COMMS_WEB_CONSOLE_DIST at it. When the variable is unset, empty, or doesn't resolve to a directory containing an index.html, the mount is never registered.
5
+ */
6
+ import type * as http from "node:http";
7
+ /** Route prefix web-console's static output is served under. */
8
+ export declare const WEB_CONSOLE_MOUNT = "/web-console";
9
+ /**
10
+ * Resolves the configured web-console dist directory, if any.
11
+ *
12
+ * Reads AGENT_COMMS_WEB_CONSOLE_DIST and confirms it points at a directory containing an index.html. Returns undefined otherwise — the caller should then skip registering the mount entirely rather than register it and 404 on every request.
13
+ */
14
+ export declare function resolveWebConsoleDist(): string | undefined;
15
+ /**
16
+ * Serves a request under the web-console mount from a resolved dist directory.
17
+ *
18
+ * Returns false when pathname falls outside the mount entirely, so the caller can fall through to its own routing. Returns true for every request inside the mount, including ones answered with a 404 (missing file, or a path-traversal attempt resolving outside distDir) — the caller's own response has already been written in that case too.
19
+ */
20
+ export declare function serveWebConsole(distDir: string, pathname: string, res: http.ServerResponse): boolean;
21
+ //# sourceMappingURL=web-console-static.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-console-static.d.ts","sourceRoot":"","sources":["../../../../src/bridges/user/web/web-console-static.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,KAAK,IAAI,MAAM,WAAW,CAAC;AAEvC,gEAAgE;AAChE,eAAO,MAAM,iBAAiB,iBAAiB,CAAC;AAuBhD;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,GAAG,SAAS,CAM1D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,IAAI,CAAC,cAAc,GACvB,OAAO,CAiCT"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Static-file serving for wire-mesh's web-console — a generic, protocol-level reference UI for any wire-mesh-compatible node, mounted alongside agent-comms' own richer dashboard as an alternate view.
3
+ *
4
+ * Serving is opt-in and off by default: web-console is a separate, unpublished Vite/React app (wire-mesh/ts/packages/web-console), not a dependency of this package, so there is no build output to serve unless someone has built one locally and pointed AGENT_COMMS_WEB_CONSOLE_DIST at it. When the variable is unset, empty, or doesn't resolve to a directory containing an index.html, the mount is never registered.
5
+ */
6
+ import * as fs from "node:fs";
7
+ import * as path from "node:path";
8
+ /** Route prefix web-console's static output is served under. */
9
+ export const WEB_CONSOLE_MOUNT = "/web-console";
10
+ const HTTP_OK = 200;
11
+ const HTTP_NOT_FOUND = 404;
12
+ const CONTENT_TYPES = {
13
+ ".html": "text/html; charset=utf-8",
14
+ ".js": "application/javascript; charset=utf-8",
15
+ ".mjs": "application/javascript; charset=utf-8",
16
+ ".css": "text/css; charset=utf-8",
17
+ ".json": "application/json; charset=utf-8",
18
+ ".map": "application/json; charset=utf-8",
19
+ ".svg": "image/svg+xml",
20
+ ".png": "image/png",
21
+ ".ico": "image/x-icon",
22
+ ".woff": "font/woff",
23
+ ".woff2": "font/woff2",
24
+ ".txt": "text/plain; charset=utf-8",
25
+ ".wasm": "application/wasm",
26
+ };
27
+ const DEFAULT_CONTENT_TYPE = "application/octet-stream";
28
+ /**
29
+ * Resolves the configured web-console dist directory, if any.
30
+ *
31
+ * Reads AGENT_COMMS_WEB_CONSOLE_DIST and confirms it points at a directory containing an index.html. Returns undefined otherwise — the caller should then skip registering the mount entirely rather than register it and 404 on every request.
32
+ */
33
+ export function resolveWebConsoleDist() {
34
+ const configured = process.env.AGENT_COMMS_WEB_CONSOLE_DIST;
35
+ if (configured === undefined || configured === "")
36
+ return undefined;
37
+ const dist = path.resolve(configured);
38
+ if (!fs.existsSync(path.join(dist, "index.html")))
39
+ return undefined;
40
+ return dist;
41
+ }
42
+ /**
43
+ * Serves a request under the web-console mount from a resolved dist directory.
44
+ *
45
+ * Returns false when pathname falls outside the mount entirely, so the caller can fall through to its own routing. Returns true for every request inside the mount, including ones answered with a 404 (missing file, or a path-traversal attempt resolving outside distDir) — the caller's own response has already been written in that case too.
46
+ */
47
+ export function serveWebConsole(distDir, pathname, res) {
48
+ if (pathname !== WEB_CONSOLE_MOUNT &&
49
+ !pathname.startsWith(`${WEB_CONSOLE_MOUNT}/`)) {
50
+ return false;
51
+ }
52
+ const suffix = pathname.slice(WEB_CONSOLE_MOUNT.length);
53
+ const relative = suffix === "" || suffix === "/" ? "index.html" : suffix.slice(1);
54
+ const resolvedDist = path.resolve(distDir);
55
+ const resolvedFile = path.resolve(resolvedDist, relative);
56
+ const withinDist = resolvedFile === resolvedDist ||
57
+ resolvedFile.startsWith(`${resolvedDist}${path.sep}`);
58
+ if (!withinDist ||
59
+ !fs.existsSync(resolvedFile) ||
60
+ !fs.statSync(resolvedFile).isFile()) {
61
+ res.writeHead(HTTP_NOT_FOUND);
62
+ res.end("Not found");
63
+ return true;
64
+ }
65
+ const contentType = CONTENT_TYPES[path.extname(resolvedFile)] ?? DEFAULT_CONTENT_TYPE;
66
+ res.writeHead(HTTP_OK, { "Content-Type": contentType });
67
+ res.end(fs.readFileSync(resolvedFile));
68
+ return true;
69
+ }
70
+ //# sourceMappingURL=web-console-static.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-console-static.js","sourceRoot":"","sources":["../../../../src/bridges/user/web/web-console-static.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,11 @@ import type { AcceptedMeshSession, IncomingManageRequest, ManageOutcome } from "
5
5
  import type { PeerAdvert } from "wire-mesh-core/generated/protocol";
6
6
  import type { HubSession } from "./hub-session.js";
7
7
  import type { MeshGraph, MeshTraceResult } from "./transport.js";
8
- /** Assembles this side's own best-effort view of the mesh's connection graph out of knownDevices (WireMeshTransport's own mesh-wide gossip aggregation, the identical map listKnownDevices already reads), converted to DirectoryEntry[] the same way hub-forwarding.ts's own pushHubCatchUp already does for its unrelated purpose. Device-ids are hex-encoded, never raw wire-mesh-core DeviceId bytes, matching listKnownDevices' own precedent. */
8
+ /**
9
+ * Assembles this side's own best-effort view of the mesh's connection graph out of knownDevices (WireMeshTransport's own mesh-wide gossip aggregation, the identical map listKnownDevices already reads), converted to DirectoryEntry[] the same way hub-forwarding.ts's own pushHubCatchUp already does for its unrelated purpose. Device-ids are hex-encoded, never raw wire-mesh-core DeviceId bytes, matching listKnownDevices' own precedent.
10
+ *
11
+ * assembleTopologyGraph's own nodes list is only devices this side holds a directory entry (gossip advert) for -- its edges are deliberately "unreconciled by design" (see its own doc comment) and can name a `to`/`via` endpoint reported by another device's advert that this side has never itself gossiped with directly, so that endpoint never gets its own directory entry and is absent from nodes. A MeshGraph whose edges reference an undeclared node isn't well-formed for any consumer (a force-directed layout, a table, anything), so every edge endpoint is unioned into the returned nodes list here, not left for each consumer to work around individually.
12
+ */
9
13
  export declare function computeMeshGraph(knownDevices: ReadonlyMap<string, Readonly<PeerAdvert>>): MeshGraph;
10
14
  /** Sends path.trace to targetDeviceHex, direct if a local peer session exists for it (peerSessions, WireMeshTransport's own addressing map), else via the hub's own relay pairing when connected to one, else resolving an ordinary not_connected outcome rather than throwing -- WireMeshTransport.sendRoomRequest's own identical direct-or-hub fallback, just for path.trace instead of a room-domain verb. Delegates the actual send/RTT-measurement/response-parsing to wire-mesh-core's own tracePath in the direct branch, and to HubSession.tracePath (which does the identical delegation on the hub's own session) in the relayed branch, so neither this function nor either of those duplicates that logic. */
11
15
  export declare function traceMeshPath(peerSessions: ReadonlyMap<string, AcceptedMeshSession>, hub: Readonly<Pick<HubSession, "isConnected" | "tracePath">>, targetDeviceHex: string, timeoutMs?: number): Promise<MeshTraceResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"mesh-graph.d.ts","sourceRoot":"","sources":["../../src/core/mesh-graph.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,OAAO,KAAK,EACV,mBAAmB,EAEnB,qBAAqB,EACrB,aAAa,EACd,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjE,ubAAub;AACvb,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,GACtD,SAAS,CAgBX;AAED,2rBAA2rB;AAC3rB,wBAAsB,aAAa,CACjC,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,mBAAmB,CAAC,EACtD,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,GAAG,WAAW,CAAC,CAAC,EAC5D,eAAe,EAAE,MAAM,EACvB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,eAAe,CAAC,CAiB1B;AAED,+1BAA+1B;AAC/1B,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,QAAQ,CAAC,qBAAqB,CAAC,GACvC,OAAO,CAAC,aAAa,CAAC,CAExB"}
1
+ {"version":3,"file":"mesh-graph.d.ts","sourceRoot":"","sources":["../../src/core/mesh-graph.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,OAAO,KAAK,EACV,mBAAmB,EAEnB,qBAAqB,EACrB,aAAa,EACd,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjE;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,GACtD,SAAS,CAoBX;AAED,2rBAA2rB;AAC3rB,wBAAsB,aAAa,CACjC,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,mBAAmB,CAAC,EACtD,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,GAAG,WAAW,CAAC,CAAC,EAC5D,eAAe,EAAE,MAAM,EACvB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,eAAe,CAAC,CAiB1B;AAED,+1BAA+1B;AAC/1B,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,QAAQ,CAAC,qBAAqB,CAAC,GACvC,OAAO,CAAC,aAAa,CAAC,CAExB"}
@@ -4,21 +4,30 @@
4
4
  import { deviceIdToHex } from "wire-mesh-core/domain/device-id";
5
5
  import { assembleTopologyGraph } from "wire-mesh-core/domain/topology";
6
6
  import { buildPathTraceResponse, tracePath, } from "wire-mesh-core/domain/path-trace";
7
- /** Assembles this side's own best-effort view of the mesh's connection graph out of knownDevices (WireMeshTransport's own mesh-wide gossip aggregation, the identical map listKnownDevices already reads), converted to DirectoryEntry[] the same way hub-forwarding.ts's own pushHubCatchUp already does for its unrelated purpose. Device-ids are hex-encoded, never raw wire-mesh-core DeviceId bytes, matching listKnownDevices' own precedent. */
7
+ /**
8
+ * Assembles this side's own best-effort view of the mesh's connection graph out of knownDevices (WireMeshTransport's own mesh-wide gossip aggregation, the identical map listKnownDevices already reads), converted to DirectoryEntry[] the same way hub-forwarding.ts's own pushHubCatchUp already does for its unrelated purpose. Device-ids are hex-encoded, never raw wire-mesh-core DeviceId bytes, matching listKnownDevices' own precedent.
9
+ *
10
+ * assembleTopologyGraph's own nodes list is only devices this side holds a directory entry (gossip advert) for -- its edges are deliberately "unreconciled by design" (see its own doc comment) and can name a `to`/`via` endpoint reported by another device's advert that this side has never itself gossiped with directly, so that endpoint never gets its own directory entry and is absent from nodes. A MeshGraph whose edges reference an undeclared node isn't well-formed for any consumer (a force-directed layout, a table, anything), so every edge endpoint is unioned into the returned nodes list here, not left for each consumer to work around individually.
11
+ */
8
12
  export function computeMeshGraph(knownDevices) {
9
13
  const directory = [...knownDevices.values()].map((advert) => ({ device: advert.device, advert }));
10
14
  const graph = assembleTopologyGraph(directory);
11
- return {
12
- nodes: graph.nodes.map(deviceIdToHex),
13
- edges: graph.edges.map((edge) => ({
14
- kind: edge.kind,
15
- from: deviceIdToHex(edge.from),
16
- to: deviceIdToHex(edge.to),
17
- ...(edge.kind === "relay" && edge.via !== undefined
18
- ? { via: deviceIdToHex(edge.via) }
19
- : {}),
20
- })),
21
- };
15
+ const edges = graph.edges.map((edge) => ({
16
+ kind: edge.kind,
17
+ from: deviceIdToHex(edge.from),
18
+ to: deviceIdToHex(edge.to),
19
+ ...(edge.kind === "relay" && edge.via !== undefined
20
+ ? { via: deviceIdToHex(edge.via) }
21
+ : {}),
22
+ }));
23
+ const nodes = new Set(graph.nodes.map(deviceIdToHex));
24
+ for (const edge of edges) {
25
+ nodes.add(edge.from);
26
+ nodes.add(edge.to);
27
+ if (edge.via !== undefined)
28
+ nodes.add(edge.via);
29
+ }
30
+ return { nodes: [...nodes], edges };
22
31
  }
23
32
  /** Sends path.trace to targetDeviceHex, direct if a local peer session exists for it (peerSessions, WireMeshTransport's own addressing map), else via the hub's own relay pairing when connected to one, else resolving an ordinary not_connected outcome rather than throwing -- WireMeshTransport.sendRoomRequest's own identical direct-or-hub fallback, just for path.trace instead of a room-domain verb. Delegates the actual send/RTT-measurement/response-parsing to wire-mesh-core's own tracePath in the direct branch, and to HubSession.tracePath (which does the identical delegation on the hub's own session) in the relayed branch, so neither this function nor either of those duplicates that logic. */
24
33
  export async function traceMeshPath(peerSessions, hub, targetDeviceHex, timeoutMs) {
@@ -1 +1 @@
1
- {"version":3,"file":"mesh-graph.js","sourceRoot":"","sources":["../../src/core/mesh-graph.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EACL,sBAAsB,EACtB,SAAS,GACV,MAAM,kCAAkC,CAAC;AAW1C,ubAAub;AACvb,MAAM,UAAU,gBAAgB,CAC9B,YAAuD;IAEvD,MAAM,SAAS,GAAqB,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAChE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAChD,CAAC;IACF,MAAM,KAAK,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAC/C,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC;QACrC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAChC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YAC9B,EAAE,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS;gBACjD,CAAC,CAAC,EAAE,GAAG,EAAE,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gBAClC,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,2rBAA2rB;AAC3rB,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,YAAsD,EACtD,GAA4D,EAC5D,eAAuB,EACvB,SAAkB;IAElB,MAAM,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACxD,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,SAAS,CAAC;YACf,OAAO,EAAE,aAAa;YACtB,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE;YAChC,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAClD,CAAC,CAAC;IACL,CAAC;IACD,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;QACpB,OAAO,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;IACnD,CAAC;IACD,OAAO;QACL,KAAK,EAAE,CAAC;QACR,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;QACzB,OAAO,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE;KACpD,CAAC;AACJ,CAAC;AAED,+1BAA+1B;AAC/1B,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAwC;IAExC,OAAO,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1D,CAAC"}
1
+ {"version":3,"file":"mesh-graph.js","sourceRoot":"","sources":["../../src/core/mesh-graph.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EACL,sBAAsB,EACtB,SAAS,GACV,MAAM,kCAAkC,CAAC;AAW1C;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAC9B,YAAuD;IAEvD,MAAM,SAAS,GAAqB,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAChE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAChD,CAAC;IACF,MAAM,KAAK,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACvC,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;QAC9B,EAAE,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS;YACjD,CAAC,CAAC,EAAE,GAAG,EAAE,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAClC,CAAC,CAAC,EAAE,CAAC;KACR,CAAC,CAAC,CAAC;IACJ,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;IACtD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnB,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS;YAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC;AACtC,CAAC;AAED,2rBAA2rB;AAC3rB,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,YAAsD,EACtD,GAA4D,EAC5D,eAAuB,EACvB,SAAkB;IAElB,MAAM,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACxD,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,SAAS,CAAC;YACf,OAAO,EAAE,aAAa;YACtB,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE;YAChC,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAClD,CAAC,CAAC;IACL,CAAC;IACD,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;QACpB,OAAO,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;IACnD,CAAC;IACD,OAAO;QACL,KAAK,EAAE,CAAC;QACR,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;QACzB,OAAO,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE;KACpD,CAAC;AACJ,CAAC;AAED,+1BAA+1B;AAC/1B,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAwC;IAExC,OAAO,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Unit tests for computeMeshGraph (agent-comms#199/#201).
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=mesh-graph.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mesh-graph.test.d.ts","sourceRoot":"","sources":["../../src/test/mesh-graph.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Unit tests for computeMeshGraph (agent-comms#199/#201).
3
+ */
4
+ import { describe, expect, it } from "vitest";
5
+ import { deviceIdFromHex, deviceIdToHex, } from "wire-mesh-core/domain/device-id";
6
+ import { computeMeshGraph } from "../core/mesh-graph.js";
7
+ /** A device-id is a hex-encoded SHA-256 hash: 32 bytes, 64 hex characters. */
8
+ const DEVICE_ID_HEX_LENGTH = 64;
9
+ const DEVICE_A_HEX = "a".repeat(DEVICE_ID_HEX_LENGTH);
10
+ const DEVICE_B_HEX = "b".repeat(DEVICE_ID_HEX_LENGTH);
11
+ const DEVICE_C_HEX = "c".repeat(DEVICE_ID_HEX_LENGTH);
12
+ const TOPOLOGY_PEERS_GOSSIP_KEY = "topology/peers";
13
+ function advertFor(deviceHex, topology) {
14
+ return {
15
+ device: deviceIdFromHex(deviceHex),
16
+ addresses: [],
17
+ "snapshot-seconds": 0,
18
+ ...(topology !== undefined
19
+ ? {
20
+ [TOPOLOGY_PEERS_GOSSIP_KEY]: {
21
+ direct: (topology.direct ?? []).map(deviceIdFromHex),
22
+ relayed: (topology.relayed ?? []).map((r) => ({
23
+ device: deviceIdFromHex(r.device),
24
+ ...(r.via !== undefined ? { via: deviceIdFromHex(r.via) } : {}),
25
+ })),
26
+ },
27
+ }
28
+ : {}),
29
+ };
30
+ }
31
+ describe("computeMeshGraph", () => {
32
+ it("returns an empty graph for no known devices", () => {
33
+ expect(computeMeshGraph(new Map())).toEqual({ nodes: [], edges: [] });
34
+ });
35
+ it("includes a direct edge's endpoint in nodes even without its own directory entry", () => {
36
+ // A's own directory entry self-reports a direct connection to B, but this side has never itself gossiped with B directly -- no directory entry for B exists. assembleTopologyGraph's own nodes list would omit B (it's only built from directory entries), which previously made the graph malformed for any consumer expecting every edge endpoint to also be a node (confirmed live: d3-force's forceLink threw "node not found" rendering exactly this shape).
37
+ const knownDevices = new Map([
38
+ [DEVICE_A_HEX, advertFor(DEVICE_A_HEX, { direct: [DEVICE_B_HEX] })],
39
+ ]);
40
+ const graph = computeMeshGraph(knownDevices);
41
+ expect(graph.nodes).toContain(DEVICE_A_HEX);
42
+ expect(graph.nodes).toContain(DEVICE_B_HEX);
43
+ expect(graph.edges).toEqual([
44
+ { kind: "direct", from: DEVICE_A_HEX, to: DEVICE_B_HEX },
45
+ ]);
46
+ });
47
+ it("includes a relay edge's device and via endpoints in nodes without their own directory entries", () => {
48
+ const knownDevices = new Map([
49
+ [
50
+ DEVICE_A_HEX,
51
+ advertFor(DEVICE_A_HEX, {
52
+ relayed: [{ device: DEVICE_B_HEX, via: DEVICE_C_HEX }],
53
+ }),
54
+ ],
55
+ ]);
56
+ const graph = computeMeshGraph(knownDevices);
57
+ expect(graph.nodes).toContain(DEVICE_A_HEX);
58
+ expect(graph.nodes).toContain(DEVICE_B_HEX);
59
+ expect(graph.nodes).toContain(DEVICE_C_HEX);
60
+ expect(graph.edges).toEqual([
61
+ {
62
+ kind: "relay",
63
+ from: DEVICE_A_HEX,
64
+ to: DEVICE_B_HEX,
65
+ via: DEVICE_C_HEX,
66
+ },
67
+ ]);
68
+ });
69
+ it("never duplicates a node already present from its own directory entry", () => {
70
+ const knownDevices = new Map([
71
+ [DEVICE_A_HEX, advertFor(DEVICE_A_HEX, { direct: [DEVICE_B_HEX] })],
72
+ [DEVICE_B_HEX, advertFor(DEVICE_B_HEX)],
73
+ ]);
74
+ const graph = computeMeshGraph(knownDevices);
75
+ expect(graph.nodes.filter((id) => id === DEVICE_B_HEX)).toHaveLength(1);
76
+ });
77
+ it("reports every node as a real hex-encoded device-id, matching deviceIdToHex", () => {
78
+ const knownDevices = new Map([
79
+ [DEVICE_A_HEX, advertFor(DEVICE_A_HEX, { direct: [DEVICE_B_HEX] })],
80
+ ]);
81
+ const graph = computeMeshGraph(knownDevices);
82
+ for (const node of graph.nodes) {
83
+ expect(deviceIdToHex(deviceIdFromHex(node))).toBe(node);
84
+ }
85
+ });
86
+ });
87
+ //# sourceMappingURL=mesh-graph.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mesh-graph.test.js","sourceRoot":"","sources":["../../src/test/mesh-graph.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": "3.23.0",
3
+ "version": "3.25.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@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c",
@@ -89,6 +89,7 @@
89
89
  "@testing-library/react": "16.3.3",
90
90
  "@testing-library/user-event": "14.6.7",
91
91
  "@types/bun": "1.3.14",
92
+ "@types/d3-force": "3.0.10",
92
93
  "@types/node": "^26.1.1",
93
94
  "@types/react": "19.3.0",
94
95
  "@types/react-dom": "19.3.0",
@@ -123,6 +124,7 @@
123
124
  "@orpc/server": "2.0.0-beta.35",
124
125
  "cbor2": "2.3.0",
125
126
  "cc-peer": "1.5.0",
127
+ "d3-force": "3.0.0",
126
128
  "openpgp": "6.3.1",
127
129
  "react": "19.3.0",
128
130
  "react-dom": "19.3.0",