agent-comms 3.7.0 → 3.9.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 (159) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/README.md +5 -1
  4. package/dist/bridges/cc-peer/default-front.d.ts +20 -0
  5. package/dist/bridges/cc-peer/default-front.d.ts.map +1 -0
  6. package/dist/bridges/cc-peer/default-front.js +28 -0
  7. package/dist/bridges/cc-peer/default-front.js.map +1 -0
  8. package/dist/bridges/cc-peer/front-controller.d.ts +50 -0
  9. package/dist/bridges/cc-peer/front-controller.d.ts.map +1 -0
  10. package/dist/bridges/cc-peer/front-controller.js +84 -0
  11. package/dist/bridges/cc-peer/front-controller.js.map +1 -0
  12. package/dist/bridges/cc-peer/front-relay.d.ts +42 -0
  13. package/dist/bridges/cc-peer/front-relay.d.ts.map +1 -0
  14. package/dist/bridges/cc-peer/front-relay.js +43 -0
  15. package/dist/bridges/cc-peer/front-relay.js.map +1 -0
  16. package/dist/bridges/cc-peer/front-runtime.d.ts +18 -0
  17. package/dist/bridges/cc-peer/front-runtime.d.ts.map +1 -0
  18. package/dist/bridges/cc-peer/front-runtime.js +76 -0
  19. package/dist/bridges/cc-peer/front-runtime.js.map +1 -0
  20. package/dist/bridges/cc-peer/front.d.ts +32 -0
  21. package/dist/bridges/cc-peer/front.d.ts.map +1 -0
  22. package/dist/bridges/cc-peer/front.js +37 -0
  23. package/dist/bridges/cc-peer/front.js.map +1 -0
  24. package/dist/bridges/cc-peer/run.d.ts.map +1 -1
  25. package/dist/bridges/cc-peer/run.js +2 -0
  26. package/dist/bridges/cc-peer/run.js.map +1 -1
  27. package/dist/bridges/claude-code/channel.d.ts.map +1 -1
  28. package/dist/bridges/claude-code/channel.js +2 -0
  29. package/dist/bridges/claude-code/channel.js.map +1 -1
  30. package/dist/bridges/codex/tool.d.ts.map +1 -1
  31. package/dist/bridges/codex/tool.js +2 -0
  32. package/dist/bridges/codex/tool.js.map +1 -1
  33. package/dist/bridges/mcp/server.d.ts.map +1 -1
  34. package/dist/bridges/mcp/server.js +2 -0
  35. package/dist/bridges/mcp/server.js.map +1 -1
  36. package/dist/bridges/opencode/plugin.d.ts.map +1 -1
  37. package/dist/bridges/opencode/plugin.js +2 -0
  38. package/dist/bridges/opencode/plugin.js.map +1 -1
  39. package/dist/bridges/pi/extension.d.ts.map +1 -1
  40. package/dist/bridges/pi/extension.js +2 -0
  41. package/dist/bridges/pi/extension.js.map +1 -1
  42. package/dist/bridges/user/controller.d.ts.map +1 -1
  43. package/dist/bridges/user/controller.js +4 -0
  44. package/dist/bridges/user/controller.js.map +1 -1
  45. package/dist/core/bridge-mesh.d.ts +13 -2
  46. package/dist/core/bridge-mesh.d.ts.map +1 -1
  47. package/dist/core/bridge-mesh.js +27 -5
  48. package/dist/core/bridge-mesh.js.map +1 -1
  49. package/dist/core/delegation-policy.d.ts +20 -0
  50. package/dist/core/delegation-policy.d.ts.map +1 -0
  51. package/dist/core/delegation-policy.js +10 -0
  52. package/dist/core/delegation-policy.js.map +1 -0
  53. package/dist/core/device-membership-verification.d.ts +28 -0
  54. package/dist/core/device-membership-verification.d.ts.map +1 -0
  55. package/dist/core/device-membership-verification.js +43 -0
  56. package/dist/core/device-membership-verification.js.map +1 -0
  57. package/dist/core/device-membership.d.ts +42 -0
  58. package/dist/core/device-membership.d.ts.map +1 -0
  59. package/dist/core/device-membership.js +53 -0
  60. package/dist/core/device-membership.js.map +1 -0
  61. package/dist/core/identity-store.d.ts +18 -0
  62. package/dist/core/identity-store.d.ts.map +1 -1
  63. package/dist/core/identity-store.js +62 -0
  64. package/dist/core/identity-store.js.map +1 -1
  65. package/dist/core/index.d.ts +3 -1
  66. package/dist/core/index.d.ts.map +1 -1
  67. package/dist/core/index.js +2 -1
  68. package/dist/core/index.js.map +1 -1
  69. package/dist/core/mesh-store.d.ts +4 -0
  70. package/dist/core/mesh-store.d.ts.map +1 -1
  71. package/dist/core/mesh-store.js +9 -0
  72. package/dist/core/mesh-store.js.map +1 -1
  73. package/dist/core/package-version.d.ts +6 -0
  74. package/dist/core/package-version.d.ts.map +1 -0
  75. package/dist/core/package-version.js +28 -0
  76. package/dist/core/package-version.js.map +1 -0
  77. package/dist/core/peer-lifecycle.d.ts +2 -0
  78. package/dist/core/peer-lifecycle.d.ts.map +1 -1
  79. package/dist/core/peer-lifecycle.js +1 -0
  80. package/dist/core/peer-lifecycle.js.map +1 -1
  81. package/dist/core/room-lifecycle.d.ts.map +1 -1
  82. package/dist/core/room-lifecycle.js +5 -4
  83. package/dist/core/room-lifecycle.js.map +1 -1
  84. package/dist/core/room-protocol.d.ts.map +1 -1
  85. package/dist/core/room-protocol.js +4 -3
  86. package/dist/core/room-protocol.js.map +1 -1
  87. package/dist/core/room-token-verification.d.ts +3 -0
  88. package/dist/core/room-token-verification.d.ts.map +1 -1
  89. package/dist/core/room-token-verification.js +4 -0
  90. package/dist/core/room-token-verification.js.map +1 -1
  91. package/dist/core/test/package-version.unit.test.d.ts +5 -0
  92. package/dist/core/test/package-version.unit.test.d.ts.map +1 -0
  93. package/dist/core/test/package-version.unit.test.js +30 -0
  94. package/dist/core/test/package-version.unit.test.js.map +1 -0
  95. package/dist/core/test/version-check.unit.test.d.ts +5 -0
  96. package/dist/core/test/version-check.unit.test.d.ts.map +1 -0
  97. package/dist/core/test/version-check.unit.test.js +176 -0
  98. package/dist/core/test/version-check.unit.test.js.map +1 -0
  99. package/dist/core/tool.d.ts +7 -1
  100. package/dist/core/tool.d.ts.map +1 -1
  101. package/dist/core/tool.js +34 -11
  102. package/dist/core/tool.js.map +1 -1
  103. package/dist/core/user-identity.d.ts +10 -0
  104. package/dist/core/user-identity.d.ts.map +1 -1
  105. package/dist/core/user-identity.js +60 -8
  106. package/dist/core/user-identity.js.map +1 -1
  107. package/dist/core/version-check.d.ts +36 -0
  108. package/dist/core/version-check.d.ts.map +1 -0
  109. package/dist/core/version-check.js +118 -0
  110. package/dist/core/version-check.js.map +1 -0
  111. package/dist/test/bridge-mesh-version-drift.test.d.ts +7 -0
  112. package/dist/test/bridge-mesh-version-drift.test.d.ts.map +1 -0
  113. package/dist/test/bridge-mesh-version-drift.test.js +98 -0
  114. package/dist/test/bridge-mesh-version-drift.test.js.map +1 -0
  115. package/dist/test/bridge-mesh.test.js +16 -2
  116. package/dist/test/bridge-mesh.test.js.map +1 -1
  117. package/dist/test/cc-peer-default-front.test.d.ts +2 -0
  118. package/dist/test/cc-peer-default-front.test.d.ts.map +1 -0
  119. package/dist/test/cc-peer-default-front.test.js +71 -0
  120. package/dist/test/cc-peer-default-front.test.js.map +1 -0
  121. package/dist/test/cc-peer-front-controller.test.d.ts +2 -0
  122. package/dist/test/cc-peer-front-controller.test.d.ts.map +1 -0
  123. package/dist/test/cc-peer-front-controller.test.js +206 -0
  124. package/dist/test/cc-peer-front-controller.test.js.map +1 -0
  125. package/dist/test/cc-peer-front-relay.test.d.ts +2 -0
  126. package/dist/test/cc-peer-front-relay.test.d.ts.map +1 -0
  127. package/dist/test/cc-peer-front-relay.test.js +177 -0
  128. package/dist/test/cc-peer-front-relay.test.js.map +1 -0
  129. package/dist/test/cc-peer-front.test.d.ts +2 -0
  130. package/dist/test/cc-peer-front.test.d.ts.map +1 -0
  131. package/dist/test/cc-peer-front.test.js +109 -0
  132. package/dist/test/cc-peer-front.test.js.map +1 -0
  133. package/dist/test/delegation-policy.test.d.ts +5 -0
  134. package/dist/test/delegation-policy.test.d.ts.map +1 -0
  135. package/dist/test/delegation-policy.test.js +52 -0
  136. package/dist/test/delegation-policy.test.js.map +1 -0
  137. package/dist/test/device-membership-verification.test.d.ts +2 -0
  138. package/dist/test/device-membership-verification.test.d.ts.map +1 -0
  139. package/dist/test/device-membership-verification.test.js +214 -0
  140. package/dist/test/device-membership-verification.test.js.map +1 -0
  141. package/dist/test/device-membership.test.d.ts +2 -0
  142. package/dist/test/device-membership.test.d.ts.map +1 -0
  143. package/dist/test/device-membership.test.js +201 -0
  144. package/dist/test/device-membership.test.js.map +1 -0
  145. package/dist/test/identity-store.test.js +120 -1
  146. package/dist/test/identity-store.test.js.map +1 -1
  147. package/dist/test/mesh-store-orchestration.test.js +27 -0
  148. package/dist/test/mesh-store-orchestration.test.js.map +1 -1
  149. package/dist/test/peer-lifecycle.test.js +12 -0
  150. package/dist/test/peer-lifecycle.test.js.map +1 -1
  151. package/dist/test/room-lifecycle.test.js +24 -1
  152. package/dist/test/room-lifecycle.test.js.map +1 -1
  153. package/dist/test/tool-version-reporting.test.d.ts +5 -0
  154. package/dist/test/tool-version-reporting.test.d.ts.map +1 -0
  155. package/dist/test/tool-version-reporting.test.js +67 -0
  156. package/dist/test/tool-version-reporting.test.js.map +1 -0
  157. package/dist/test/user-identity.test.js +54 -1
  158. package/dist/test/user-identity.test.js.map +1 -1
  159. package/package.json +1 -1
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Unit tests for the whoami/update CommsTool actions surfacing this bridge's own version and, when a newer release is known, a drift warning -- see issue #166 (the extension checkout at ~/.agents/extensions/agent-comms sat at v1.24.0 for two months while npm published 3.x, and nothing surfaced the drift until someone inspected running process command lines by hand).
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 { getOwnPackageVersion } from "../core/package-version.js";
9
+ import { wireTestTransport } from "./test-transport.js";
10
+ async function registeredContext(store) {
11
+ const agent = await store.registerAgent({
12
+ name: "owner",
13
+ harness: "pi",
14
+ cwd: "/tmp/p",
15
+ pid: process.pid,
16
+ visibility: "visible",
17
+ tags: [],
18
+ });
19
+ return { agentId: agent.id, harness: "pi", cwd: "/tmp/p", pid: process.pid };
20
+ }
21
+ describe("whoami reports this bridge's own version", () => {
22
+ it("includes a Version line matching the package's own version", async () => {
23
+ const store = new MeshStore();
24
+ await wireTestTransport(store);
25
+ const ctx = await registeredContext(store);
26
+ const tool = new CommsTool(store);
27
+ const result = await tool.handle(ctx, buildAction({ action: "whoami" }));
28
+ expect(result.isError).toBe(false);
29
+ expect(result.content).toContain(`Version: ${getOwnPackageVersion()}`);
30
+ });
31
+ it("does not mention an available update when no newer version is known", async () => {
32
+ const store = new MeshStore();
33
+ await wireTestTransport(store);
34
+ const ctx = await registeredContext(store);
35
+ const tool = new CommsTool(store);
36
+ const result = await tool.handle(ctx, buildAction({ action: "whoami" }));
37
+ expect(result.content).not.toContain("Update available");
38
+ });
39
+ it("mentions the newer version when the injected checker reports drift", async () => {
40
+ const store = new MeshStore();
41
+ await wireTestTransport(store);
42
+ const ctx = await registeredContext(store);
43
+ const tool = new CommsTool(store, undefined, () => "99.0.0");
44
+ const result = await tool.handle(ctx, buildAction({ action: "whoami" }));
45
+ expect(result.content).toContain("Update available: 99.0.0");
46
+ });
47
+ });
48
+ describe("update reports this bridge's own version", () => {
49
+ it("includes the package's own version in the Updated summary", async () => {
50
+ const store = new MeshStore();
51
+ await wireTestTransport(store);
52
+ const ctx = await registeredContext(store);
53
+ const tool = new CommsTool(store);
54
+ const result = await tool.handle(ctx, buildAction({ action: "update", status: "busy" }));
55
+ expect(result.isError).toBe(false);
56
+ expect(result.content).toContain(`version=${getOwnPackageVersion()}`);
57
+ });
58
+ it("mentions the newer version when the injected checker reports drift", async () => {
59
+ const store = new MeshStore();
60
+ await wireTestTransport(store);
61
+ const ctx = await registeredContext(store);
62
+ const tool = new CommsTool(store, undefined, () => "99.0.0");
63
+ const result = await tool.handle(ctx, buildAction({ action: "update", status: "idle" }));
64
+ expect(result.content).toContain("Update available: 99.0.0");
65
+ });
66
+ });
67
+ //# sourceMappingURL=tool-version-reporting.test.js.map
@@ -0,0 +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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"}
@@ -5,7 +5,7 @@ import * as fs from "node:fs";
5
5
  import { tmpdir } from "node:os";
6
6
  import path from "node:path";
7
7
  import { test, expect, vi, afterEach } from "vitest";
8
- import { loadOrCreateUserIdentity } from "../core/user-identity.js";
8
+ import { deleteIssuedDeviceGrant, loadIssuedDeviceGrant, loadOrCreateUserIdentity, saveIssuedDeviceGrant, } from "../core/user-identity.js";
9
9
  import { CERTIFICATE_VALIDITY_MS } from "../core/identity.js";
10
10
  // node:fs's writeFileSync is wrapped (not replaced) so every test gets the real filesystem by default; only the one race test below overrides it, via mockImplementationOnce, to simulate a concurrent writer winning the exclusive create -- vi.spyOn cannot target an ESM named export directly ("Module namespace is not configurable"), so the wrap has to happen at vi.mock time instead.
11
11
  vi.mock("node:fs", async (importOriginal) => {
@@ -88,4 +88,57 @@ test("losing the creation race re-reads the winner's identity instead of overwri
88
88
  expect(loser.fingerprint).toBe(winner.fingerprint);
89
89
  expect(loser.deviceId).toEqual(winner.deviceId);
90
90
  });
91
+ test("loadIssuedDeviceGrant is undefined for a device this principal has never admitted", () => {
92
+ const dir = tempDir();
93
+ loadOrCreateUserIdentity({ dir });
94
+ expect(loadIssuedDeviceGrant({ dir }, "device-hex-1")).toBeUndefined();
95
+ });
96
+ test("saveIssuedDeviceGrant persists a token-id, loadIssuedDeviceGrant reloads it keyed by device hex", () => {
97
+ const dir = tempDir();
98
+ loadOrCreateUserIdentity({ dir });
99
+ const tokenId = Uint8Array.from([1, 2, 2, 1]);
100
+ saveIssuedDeviceGrant({ dir }, "device-hex-1", tokenId);
101
+ expect(loadIssuedDeviceGrant({ dir }, "device-hex-1")).toEqual(tokenId);
102
+ });
103
+ test("saveIssuedDeviceGrant overwrites only the given device's own record, leaving others and the identity's own key material untouched", () => {
104
+ const dir = tempDir();
105
+ const identity = loadOrCreateUserIdentity({ dir });
106
+ const tokenIdA = Uint8Array.from([1]);
107
+ const tokenIdB = Uint8Array.from([2]);
108
+ saveIssuedDeviceGrant({ dir }, "device-a", tokenIdA);
109
+ saveIssuedDeviceGrant({ dir }, "device-b", tokenIdB);
110
+ const tokenIdAReplacement = Uint8Array.from([2, 1]);
111
+ saveIssuedDeviceGrant({ dir }, "device-a", tokenIdAReplacement);
112
+ expect(loadIssuedDeviceGrant({ dir }, "device-a")).toEqual(tokenIdAReplacement);
113
+ expect(loadIssuedDeviceGrant({ dir }, "device-b")).toEqual(tokenIdB);
114
+ const reloaded = loadOrCreateUserIdentity({ dir });
115
+ expect(reloaded.privateKey).toBe(identity.privateKey);
116
+ });
117
+ test("deleteIssuedDeviceGrant removes one device's own record, leaving others in place", () => {
118
+ const dir = tempDir();
119
+ loadOrCreateUserIdentity({ dir });
120
+ saveIssuedDeviceGrant({ dir }, "device-a", Uint8Array.from([1]));
121
+ saveIssuedDeviceGrant({ dir }, "device-b", Uint8Array.from([2]));
122
+ deleteIssuedDeviceGrant({ dir }, "device-a");
123
+ expect(loadIssuedDeviceGrant({ dir }, "device-a")).toBeUndefined();
124
+ expect(loadIssuedDeviceGrant({ dir }, "device-b")).toEqual(Uint8Array.from([2]));
125
+ });
126
+ test("deleteIssuedDeviceGrant is a no-op when nothing was recorded for that device", () => {
127
+ const dir = tempDir();
128
+ loadOrCreateUserIdentity({ dir });
129
+ expect(() => {
130
+ deleteIssuedDeviceGrant({ dir }, "never-admitted");
131
+ }).not.toThrow();
132
+ });
133
+ test("a renewed identity keeps its issuedDeviceGrants record", () => {
134
+ const dir = tempDir();
135
+ loadOrCreateUserIdentity({ dir });
136
+ saveIssuedDeviceGrant({ dir }, "device-a", Uint8Array.from([1, 2, 1]));
137
+ const file = identityFile(dir);
138
+ const stored = JSON.parse(fs.readFileSync(file, "utf-8"));
139
+ stored.expiresAt = new Date(Date.now() + NEAR_EXPIRY_OFFSET_MS).toISOString();
140
+ fs.writeFileSync(file, JSON.stringify(stored));
141
+ loadOrCreateUserIdentity({ dir });
142
+ expect(loadIssuedDeviceGrant({ dir }, "device-a")).toEqual(Uint8Array.from([1, 2, 1]));
143
+ });
91
144
  //# sourceMappingURL=user-identity.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"user-identity.test.js","sourceRoot":"","sources":["../../src/test/user-identity.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"user-identity.test.js","sourceRoot":"","sources":["../../src/test/user-identity.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.7.0",
3
+ "version": "3.9.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",