agent-comms 8.5.0 → 8.6.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 (214) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/README.md +21 -1
  4. package/dist/bridges/cc-peer/front-runtime.d.ts.map +1 -1
  5. package/dist/bridges/cc-peer/front-runtime.js +4 -2
  6. package/dist/bridges/cc-peer/front-runtime.js.map +1 -1
  7. package/dist/bridges/user/controller.d.ts.map +1 -1
  8. package/dist/bridges/user/controller.js +4 -1
  9. package/dist/bridges/user/controller.js.map +1 -1
  10. package/dist/bridges/user/web/contract.d.ts +12 -0
  11. package/dist/bridges/user/web/contract.d.ts.map +1 -1
  12. package/dist/bridges/user/web/contract.js +9 -0
  13. package/dist/bridges/user/web/contract.js.map +1 -1
  14. package/dist/bridges/user/web/dist/bundle.js +1 -1
  15. package/dist/bridges/user/web/dist/mesh-worker.js +1 -1
  16. package/dist/bridges/user/web/dist/sw.js +1 -1
  17. package/dist/bridges/user/web/frontend/components/MeshGraphView.d.ts +3 -1
  18. package/dist/bridges/user/web/frontend/components/MeshGraphView.d.ts.map +1 -1
  19. package/dist/bridges/user/web/frontend/components/MeshGraphView.js +2 -4
  20. package/dist/bridges/user/web/frontend/components/MeshGraphView.js.map +1 -1
  21. package/dist/bridges/user/web/frontend/components/MeshPanel.d.ts +1 -1
  22. package/dist/bridges/user/web/frontend/components/MeshPanel.d.ts.map +1 -1
  23. package/dist/bridges/user/web/frontend/components/MeshPanel.js +6 -1
  24. package/dist/bridges/user/web/frontend/components/MeshPanel.js.map +1 -1
  25. package/dist/bridges/user/web/frontend/components/MeshTraceView.d.ts +3 -1
  26. package/dist/bridges/user/web/frontend/components/MeshTraceView.d.ts.map +1 -1
  27. package/dist/bridges/user/web/frontend/components/MeshTraceView.js +2 -4
  28. package/dist/bridges/user/web/frontend/components/MeshTraceView.js.map +1 -1
  29. package/dist/bridges/user/web/frontend/main.js +6 -13
  30. package/dist/bridges/user/web/frontend/main.js.map +1 -1
  31. package/dist/bridges/user/web/frontend/mesh-client.d.ts +2 -0
  32. package/dist/bridges/user/web/frontend/mesh-client.d.ts.map +1 -1
  33. package/dist/bridges/user/web/frontend/mesh-client.js +1 -0
  34. package/dist/bridges/user/web/frontend/mesh-client.js.map +1 -1
  35. package/dist/bridges/user/web/frontend/mesh-invalidation.d.ts +11 -0
  36. package/dist/bridges/user/web/frontend/mesh-invalidation.d.ts.map +1 -0
  37. package/dist/bridges/user/web/frontend/mesh-invalidation.js +26 -0
  38. package/dist/bridges/user/web/frontend/mesh-invalidation.js.map +1 -0
  39. package/dist/bridges/user/web/frontend/mesh-worker.d.ts.map +1 -1
  40. package/dist/bridges/user/web/frontend/mesh-worker.js +1 -0
  41. package/dist/bridges/user/web/frontend/mesh-worker.js.map +1 -1
  42. package/dist/bridges/user/web/frontend/tab-contract.d.ts +5 -0
  43. package/dist/bridges/user/web/frontend/tab-contract.d.ts.map +1 -1
  44. package/dist/bridges/user/web/reads.d.ts +3 -0
  45. package/dist/bridges/user/web/reads.d.ts.map +1 -1
  46. package/dist/bridges/user/web/reads.js +4 -0
  47. package/dist/bridges/user/web/reads.js.map +1 -1
  48. package/dist/bridges/user/web/router.d.ts +5 -0
  49. package/dist/bridges/user/web/router.d.ts.map +1 -1
  50. package/dist/bridges/user/web/router.js +2 -1
  51. package/dist/bridges/user/web/router.js.map +1 -1
  52. package/dist/core/agent-registry.d.ts.map +1 -1
  53. package/dist/core/agent-registry.js +18 -6
  54. package/dist/core/agent-registry.js.map +1 -1
  55. package/dist/core/agent-table.d.ts +18 -0
  56. package/dist/core/agent-table.d.ts.map +1 -0
  57. package/dist/core/agent-table.js +38 -0
  58. package/dist/core/agent-table.js.map +1 -0
  59. package/dist/core/atomic-file.d.ts +1 -1
  60. package/dist/core/atomic-file.js +1 -1
  61. package/dist/core/bridge-mesh.d.ts.map +1 -1
  62. package/dist/core/bridge-mesh.js +4 -1
  63. package/dist/core/bridge-mesh.js.map +1 -1
  64. package/dist/core/bridge.d.ts +4 -0
  65. package/dist/core/bridge.d.ts.map +1 -1
  66. package/dist/core/bridge.js +22 -1
  67. package/dist/core/bridge.js.map +1 -1
  68. package/dist/core/delivery-engine.d.ts.map +1 -1
  69. package/dist/core/delivery-engine.js +4 -0
  70. package/dist/core/delivery-engine.js.map +1 -1
  71. package/dist/core/display-name.d.ts +29 -0
  72. package/dist/core/display-name.d.ts.map +1 -0
  73. package/dist/core/display-name.js +57 -0
  74. package/dist/core/display-name.js.map +1 -0
  75. package/dist/core/gateway-trust-actions.d.ts +3 -2
  76. package/dist/core/gateway-trust-actions.d.ts.map +1 -1
  77. package/dist/core/gateway-trust-actions.js +9 -7
  78. package/dist/core/gateway-trust-actions.js.map +1 -1
  79. package/dist/core/gossip-directory.d.ts +2 -0
  80. package/dist/core/gossip-directory.d.ts.map +1 -1
  81. package/dist/core/gossip-directory.js +9 -0
  82. package/dist/core/gossip-directory.js.map +1 -1
  83. package/dist/core/gossip-extensions.d.ts +2 -0
  84. package/dist/core/gossip-extensions.d.ts.map +1 -1
  85. package/dist/core/gossip-extensions.js +3 -0
  86. package/dist/core/gossip-extensions.js.map +1 -1
  87. package/dist/core/group-proofs.d.ts +8 -2
  88. package/dist/core/group-proofs.d.ts.map +1 -1
  89. package/dist/core/group-proofs.js +34 -1
  90. package/dist/core/group-proofs.js.map +1 -1
  91. package/dist/core/machine-grouping.d.ts +14 -1
  92. package/dist/core/machine-grouping.d.ts.map +1 -1
  93. package/dist/core/machine-grouping.js +47 -11
  94. package/dist/core/machine-grouping.js.map +1 -1
  95. package/dist/core/machine-identity.d.ts +4 -0
  96. package/dist/core/machine-identity.d.ts.map +1 -1
  97. package/dist/core/machine-identity.js +26 -2
  98. package/dist/core/machine-identity.js.map +1 -1
  99. package/dist/core/machine-list-groups.d.ts +3 -2
  100. package/dist/core/machine-list-groups.d.ts.map +1 -1
  101. package/dist/core/machine-list-groups.js +3 -3
  102. package/dist/core/machine-list-groups.js.map +1 -1
  103. package/dist/core/machine-name-claim.d.ts +22 -0
  104. package/dist/core/machine-name-claim.d.ts.map +1 -0
  105. package/dist/core/machine-name-claim.js +52 -0
  106. package/dist/core/machine-name-claim.js.map +1 -0
  107. package/dist/core/membership-proofs.d.ts +2 -0
  108. package/dist/core/membership-proofs.d.ts.map +1 -1
  109. package/dist/core/membership-proofs.js +3 -2
  110. package/dist/core/membership-proofs.js.map +1 -1
  111. package/dist/core/mesh-graph-trace-tool.d.ts +3 -2
  112. package/dist/core/mesh-graph-trace-tool.d.ts.map +1 -1
  113. package/dist/core/mesh-graph-trace-tool.js +8 -5
  114. package/dist/core/mesh-graph-trace-tool.js.map +1 -1
  115. package/dist/core/mesh-store-shared.d.ts +3 -1
  116. package/dist/core/mesh-store-shared.d.ts.map +1 -1
  117. package/dist/core/mesh-store-shared.js.map +1 -1
  118. package/dist/core/mesh-store.d.ts +3 -0
  119. package/dist/core/mesh-store.d.ts.map +1 -1
  120. package/dist/core/mesh-store.js +10 -0
  121. package/dist/core/mesh-store.js.map +1 -1
  122. package/dist/core/name-claim.d.ts +38 -0
  123. package/dist/core/name-claim.d.ts.map +1 -0
  124. package/dist/core/name-claim.js +93 -0
  125. package/dist/core/name-claim.js.map +1 -0
  126. package/dist/core/naming-actions.d.ts +21 -0
  127. package/dist/core/naming-actions.d.ts.map +1 -0
  128. package/dist/core/naming-actions.js +58 -0
  129. package/dist/core/naming-actions.js.map +1 -0
  130. package/dist/core/naming.d.ts +50 -0
  131. package/dist/core/naming.d.ts.map +1 -0
  132. package/dist/core/naming.js +81 -0
  133. package/dist/core/naming.js.map +1 -0
  134. package/dist/core/petnames.d.ts +22 -0
  135. package/dist/core/petnames.d.ts.map +1 -0
  136. package/dist/core/petnames.js +102 -0
  137. package/dist/core/petnames.js.map +1 -0
  138. package/dist/core/store.d.ts +4 -0
  139. package/dist/core/store.d.ts.map +1 -1
  140. package/dist/core/store.js +19 -2
  141. package/dist/core/store.js.map +1 -1
  142. package/dist/core/tool.d.ts +6 -0
  143. package/dist/core/tool.d.ts.map +1 -1
  144. package/dist/core/tool.js +45 -12
  145. package/dist/core/tool.js.map +1 -1
  146. package/dist/core/types.d.ts +24 -0
  147. package/dist/core/types.d.ts.map +1 -1
  148. package/dist/core/types.js +14 -0
  149. package/dist/core/types.js.map +1 -1
  150. package/dist/test/agent-table.unit.test.d.ts +5 -0
  151. package/dist/test/agent-table.unit.test.d.ts.map +1 -0
  152. package/dist/test/agent-table.unit.test.js +53 -0
  153. package/dist/test/agent-table.unit.test.js.map +1 -0
  154. package/dist/test/delivery-engine-delivery.unit.test.js +1 -0
  155. package/dist/test/delivery-engine-delivery.unit.test.js.map +1 -1
  156. package/dist/test/delivery-engine-directed-notify.unit.test.js +1 -0
  157. package/dist/test/delivery-engine-directed-notify.unit.test.js.map +1 -1
  158. package/dist/test/delivery-engine-own-agent.unit.test.js +1 -0
  159. package/dist/test/delivery-engine-own-agent.unit.test.js.map +1 -1
  160. package/dist/test/delivery-engine.unit.test.js +1 -0
  161. package/dist/test/delivery-engine.unit.test.js.map +1 -1
  162. package/dist/test/display-name.unit.test.d.ts +5 -0
  163. package/dist/test/display-name.unit.test.d.ts.map +1 -0
  164. package/dist/test/display-name.unit.test.js +65 -0
  165. package/dist/test/display-name.unit.test.js.map +1 -0
  166. package/dist/test/gateway-trust-tool.integration.test.js +4 -3
  167. package/dist/test/gateway-trust-tool.integration.test.js.map +1 -1
  168. package/dist/test/identity-restart.integration.test.js +1 -0
  169. package/dist/test/identity-restart.integration.test.js.map +1 -1
  170. package/dist/test/machine-grouping.unit.test.js +7 -0
  171. package/dist/test/machine-grouping.unit.test.js.map +1 -1
  172. package/dist/test/machine-identity.unit.test.js +16 -1
  173. package/dist/test/machine-identity.unit.test.js.map +1 -1
  174. package/dist/test/machine-list-groups.unit.test.js +10 -6
  175. package/dist/test/machine-list-groups.unit.test.js.map +1 -1
  176. package/dist/test/machine-membership-trust.integration.test.js +3 -2
  177. package/dist/test/machine-membership-trust.integration.test.js.map +1 -1
  178. package/dist/test/name-claim.unit.test.d.ts +5 -0
  179. package/dist/test/name-claim.unit.test.d.ts.map +1 -0
  180. package/dist/test/name-claim.unit.test.js +135 -0
  181. package/dist/test/name-claim.unit.test.js.map +1 -0
  182. package/dist/test/naming.integration.test.d.ts +5 -0
  183. package/dist/test/naming.integration.test.d.ts.map +1 -0
  184. package/dist/test/naming.integration.test.js +188 -0
  185. package/dist/test/naming.integration.test.js.map +1 -0
  186. package/dist/test/petnames.unit.test.d.ts +5 -0
  187. package/dist/test/petnames.unit.test.d.ts.map +1 -0
  188. package/dist/test/petnames.unit.test.js +94 -0
  189. package/dist/test/petnames.unit.test.js.map +1 -0
  190. package/dist/test/room-join-admission.integration.test.js +1 -0
  191. package/dist/test/room-join-admission.integration.test.js.map +1 -1
  192. package/dist/test/room-lifecycle-bare-name.unit.test.js +1 -0
  193. package/dist/test/room-lifecycle-bare-name.unit.test.js.map +1 -1
  194. package/dist/test/room-lifecycle-membership.unit.test.js +1 -0
  195. package/dist/test/room-lifecycle-membership.unit.test.js.map +1 -1
  196. package/dist/test/room-lifecycle-remote.unit.test.js +1 -0
  197. package/dist/test/room-lifecycle-remote.unit.test.js.map +1 -1
  198. package/dist/test/room-lifecycle.unit.test.js +1 -0
  199. package/dist/test/room-lifecycle.unit.test.js.map +1 -1
  200. package/dist/test/room-messaging-durable-send.unit.test.js +1 -0
  201. package/dist/test/room-messaging-durable-send.unit.test.js.map +1 -1
  202. package/dist/test/room-messaging.unit.test.js +1 -0
  203. package/dist/test/room-messaging.unit.test.js.map +1 -1
  204. package/dist/test/room-protocol-notify.unit.test.js +1 -0
  205. package/dist/test/room-protocol-notify.unit.test.js.map +1 -1
  206. package/dist/test/room-protocol.helper.d.ts.map +1 -1
  207. package/dist/test/room-protocol.helper.js +1 -0
  208. package/dist/test/room-protocol.helper.js.map +1 -1
  209. package/dist/test/room-send-retry.integration.test.js +1 -0
  210. package/dist/test/room-send-retry.integration.test.js.map +1 -1
  211. package/dist/test/test-transport.d.ts.map +1 -1
  212. package/dist/test/test-transport.js +4 -2
  213. package/dist/test/test-transport.js.map +1 -1
  214. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"group-proofs.d.ts","sourceRoot":"","sources":["../../src/core/group-proofs.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EACV,yBAAyB,EACzB,sBAAsB,EACvB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,eAAe;IAC9B,+CAA+C;IAC/C,WAAW,EAAE,MAAM,iBAAiB,CAAC;IACrC,iEAAiE;IACjE,YAAY,EAAE,MAAM,iBAAiB,GAAG,SAAS,CAAC;IAClD,kCAAkC;IAClC,SAAS,EAAE,MAAM,MAAM,CAAC;IACxB,gDAAgD;IAChD,gBAAgB,EAAE,MAAM,aAAa,CAAC;IACtC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACjC;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmB;IAC7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAC3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;gBAE/B,IAAI,EAAE,QAAQ,CAAC,eAAe,CAAC;IA6B3C,sHAAsH;IACtH,YAAY,IAAI,IAAI,CAAC,gBAAgB,EAAE,YAAY,GAAG,SAAS,CAAC;IAShE,sFAAsF;IACtF,KAAK,IAAI,IAAI;IAKb,IAAI,IAAI,IAAI;IAKZ,sGAAsG;IAChG,MAAM,CACV,KAAK,EAAE,QAAQ,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,GACvE,OAAO,CAAC,sBAAsB,CAAC;IAIlC,qLAAqL;IAC/K,QAAQ,CACZ,KAAK,EAAE,QAAQ,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,GACpD,OAAO,CAAC,yBAAyB,CAAC;IAIrC,uFAAuF;IACjF,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAGvD"}
1
+ {"version":3,"file":"group-proofs.d.ts","sourceRoot":"","sources":["../../src/core/group-proofs.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AASpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EACV,yBAAyB,EACzB,sBAAsB,EACvB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,eAAe;IAC9B,+CAA+C;IAC/C,WAAW,EAAE,MAAM,iBAAiB,CAAC;IACrC,iEAAiE;IACjE,YAAY,EAAE,MAAM,iBAAiB,GAAG,SAAS,CAAC;IAClD,kCAAkC;IAClC,SAAS,EAAE,MAAM,MAAM,CAAC;IACxB,gDAAgD;IAChD,gBAAgB,EAAE,MAAM,aAAa,CAAC;IACtC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACjC;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmB;IAC7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAC3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAmB;IAC/C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA0B;gBAE1C,IAAI,EAAE,QAAQ,CAAC,eAAe,CAAC;IA4C3C,sHAAsH;IACtH,YAAY,IAAI,IAAI,CAClB,gBAAgB,EAChB,YAAY,GAAG,SAAS,GAAG,aAAa,CACzC;IAWD,sFAAsF;IACtF,KAAK,IAAI,IAAI;IAMb,IAAI,IAAI,IAAI;IAMZ,+KAA+K;IACzK,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9D,sGAAsG;IAChG,MAAM,CACV,KAAK,EAAE,QAAQ,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,GACvE,OAAO,CAAC,sBAAsB,CAAC;IAIlC,qLAAqL;IAC/K,QAAQ,CACZ,KAAK,EAAE,QAAQ,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,GACpD,OAAO,CAAC,yBAAyB,CAAC;IAIrC,uFAAuF;IACjF,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAItD,kGAAkG;IAC5F,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAGnD"}
@@ -1,14 +1,20 @@
1
1
  /**
2
- * This device's membership proofs under both of its grouping issuers, its user principal (agent-comms#266) and its machine (agent-comms#343), with the checks for other devices' proofs and the machine grouping list_agents shows. Split out of MeshStore, which hands it its identity, peer id, transport and error sink.
2
+ * This device's membership proofs under both of its grouping issuers, its user principal (agent-comms#266) and its machine (agent-comms#343), and the machine's self display name claim (agent-comms#345), with the checks for other devices' proofs and claims and the machine grouping and names list_agents shows. Split out of MeshStore, which hands it its identity, peer id, transport and error sink.
3
3
  */
4
4
  import { deviceIdToHex } from "wire-mesh-core/domain/device-id";
5
5
  import { MembershipProofs } from "./membership-proofs.js";
6
6
  import { MachineGrouping } from "./machine-grouping.js";
7
+ import { MachineNameClaim } from "./machine-name-claim.js";
8
+ import { loadMachineDisplayName, saveMachineDisplayName, } from "./machine-identity.js";
9
+ import { verifyNameClaim } from "./name-claim.js";
7
10
  export class GroupProofs {
8
11
  principal;
9
12
  machine;
10
13
  grouping;
14
+ machineName;
15
+ getIdentity;
11
16
  constructor(deps) {
17
+ this.getIdentity = deps.getIdentity;
12
18
  const shared = {
13
19
  getIdentity: deps.getIdentity,
14
20
  getPeerId: deps.getPeerId,
@@ -33,25 +39,48 @@ export class GroupProofs {
33
39
  : deviceIdToHex(identity.machineIdentity.deviceId);
34
40
  },
35
41
  onError: deps.onError,
42
+ verifyName: async ({ claim, subject }) => {
43
+ const { identity, clock } = deps.getIdentity();
44
+ return verifyNameClaim({ claim, subject, identity, clock });
45
+ },
46
+ getOwnMachineName: () => {
47
+ const identity = deps.peekIdentity();
48
+ return identity === undefined
49
+ ? undefined
50
+ : loadMachineDisplayName(identity.machineIdentityOptions);
51
+ },
52
+ });
53
+ this.machineName = new MachineNameClaim({
54
+ getIdentity: deps.getIdentity,
55
+ onError: deps.onError,
36
56
  });
37
57
  }
38
58
  /** The agent/self advert fields carrying this device's current proofs, each absent until it has first been minted. */
39
59
  advertFields() {
40
60
  const membership = this.principal.current();
41
61
  const machine = this.machine.current();
62
+ const machineName = this.machineName.current();
42
63
  return {
43
64
  ...(membership !== undefined ? { membership } : {}),
44
65
  ...(machine !== undefined ? { machine } : {}),
66
+ ...(machineName !== undefined ? { machineName } : {}),
45
67
  };
46
68
  }
47
69
  /** Starts keeping both proofs fresh; called once the store's identity is attached. */
48
70
  start() {
49
71
  this.principal.start();
50
72
  this.machine.start();
73
+ this.machineName.start();
51
74
  }
52
75
  stop() {
53
76
  this.principal.stop();
54
77
  this.machine.stop();
78
+ this.machineName.stop();
79
+ }
80
+ /** Sets (or, given undefined, clears) this machine's self display name and re-mints its claim now rather than on the next refresh. Throws if the store has no identity yet. */
81
+ async saveMachineName(name) {
82
+ saveMachineDisplayName(this.getIdentity().machineIdentityOptions, name);
83
+ return this.machineName.refresh();
55
84
  }
56
85
  /** Whether a gossiped proof shows that issuerHex, a principal or a machine, vouches for deviceHex. */
57
86
  async verify(claim) {
@@ -65,5 +94,9 @@ export class GroupProofs {
65
94
  async machinesByDevice() {
66
95
  return this.grouping.machinesByDevice();
67
96
  }
97
+ /** The self display name of each machine this side can place a device on, keyed by machine id. */
98
+ async machineNames() {
99
+ return this.grouping.machineNames();
100
+ }
68
101
  }
69
102
  //# sourceMappingURL=group-proofs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"group-proofs.js","sourceRoot":"","sources":["../../src/core/group-proofs.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAGhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAmBxD,MAAM,OAAO,WAAW;IACL,SAAS,CAAmB;IAC5B,OAAO,CAAmB;IAC1B,QAAQ,CAAkB;IAE3C,YAAY,IAA+B;QACzC,MAAM,MAAM,GAAG;YACb,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC;QACF,IAAI,CAAC,SAAS,GAAG,IAAI,gBAAgB,CAAC;YACpC,GAAG,MAAM;YACT,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,YAAY;SAC9C,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,GAAG,IAAI,gBAAgB,CAAC;YAClC,GAAG,MAAM;YACT,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,eAAe;SACjD,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,GAAG,IAAI,eAAe,CAAC;YAClC,gBAAgB,EAAE,GAAG,EAAE,CACrB,IAAI,CAAC,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,EAAE,IAAI,EAAE;YACpD,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC/C,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,YAAY,EAAE,GAAG,EAAE;gBACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;gBACrC,OAAO,QAAQ,KAAK,SAAS;oBAC3B,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACvD,CAAC;YACD,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC,CAAC;IACL,CAAC;IAED,sHAAsH;IACtH,YAAY;QACV,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACvC,OAAO;YACL,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnD,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9C,CAAC;IACJ,CAAC;IAED,sFAAsF;IACtF,KAAK;QACH,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAED,IAAI;QACF,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;IAED,sGAAsG;IACtG,KAAK,CAAC,MAAM,CACV,KAAwE;QAExE,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,qLAAqL;IACrL,KAAK,CAAC,QAAQ,CACZ,KAAqD;QAErD,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,uFAAuF;IACvF,KAAK,CAAC,gBAAgB;QACpB,OAAO,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;IAC1C,CAAC;CACF"}
1
+ {"version":3,"file":"group-proofs.js","sourceRoot":"","sources":["../../src/core/group-proofs.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,12 @@
1
1
  /**
2
2
  * Which machine each listed agent runs on (agent-comms#343), for list_agents' machine-grouped output. This device's own machine is known directly; every other device's is read from the machine proof in its gossiped agent/self advert and identified cryptographically (membership-proof.ts's identifyMembershipProofIssuer), so a device is grouped under a machine only when that machine's key signed a current proof for it. A device with no such proof (a hidden agent, which sends no agent/self advert, or a bridge that predates machine proofs) has no machine here.
3
3
  *
4
+ * The same pass reads each machine's self display name claim (agent-comms#345) from the adverts of the devices it vouches for, and keeps a name only when the claim is signed by that very machine's key: the issuer is authentic, the content is the machine's own choice.
5
+ *
4
6
  * Grouping is display, not trust: a proof names who vouches for a device id, not that the device gossiping it is that device, so nothing here is used to authorise anything. Identifying a proof is cryptography, so verdicts are remembered per proof text until the proof lapses, and the cache is bounded. For the same reason a failure to identify one proof is reported and leaves that device unplaced rather than failing the listing it feeds.
5
7
  */
6
8
  import type { IdentifiedMembershipProof } from "./membership-proof.js";
9
+ import type { NameClaimVerdict } from "./name-claim.js";
7
10
  export interface MachineGroupingDeps {
8
11
  /** Every device this side has heard gossip from, with its latest advert. */
9
12
  listKnownDevices: () => readonly {
@@ -21,14 +24,24 @@ export interface MachineGroupingDeps {
21
24
  getMachineId: () => string | undefined;
22
25
  /** Where a proof that could not be identified at all (identify rejected) is reported. */
23
26
  onError: (error: Error) => void;
27
+ /** Verifies a gossiped name claim about subject (name-claim.ts's verifyNameClaim, as this node sees it). */
28
+ verifyName: (claim: Readonly<{
29
+ claim: string;
30
+ subject: string;
31
+ }>) => Promise<NameClaimVerdict>;
32
+ /** This host's own machine name, read locally. */
33
+ getOwnMachineName: () => string | undefined;
24
34
  }
25
35
  export declare class MachineGrouping {
26
36
  private readonly deps;
27
37
  private readonly verdicts;
38
+ private readonly names;
28
39
  constructor(deps: Readonly<MachineGroupingDeps>);
29
40
  /** The machine (hex) of each device this side can place on one, keyed by device id: this device's own, and every gossiped device with a current, valid machine proof. */
30
41
  machinesByDevice(): Promise<Map<string, string>>;
42
+ /** The self display name of each machine this side can place a device on, keyed by machine id: this host's own from its file, every other one from a claim its own key signed, gossiped by a device it vouches for. */
43
+ machineNames(): Promise<Map<string, string>>;
44
+ private nameFor;
31
45
  private machineFor;
32
- private remember;
33
46
  }
34
47
  //# sourceMappingURL=machine-grouping.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"machine-grouping.d.ts","sourceRoot":"","sources":["../../src/core/machine-grouping.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAKvE,MAAM,WAAW,mBAAmB;IAClC,4EAA4E;IAC5E,gBAAgB,EAAE,MAAM,SAAS;QAC/B,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;KAC3C,EAAE,CAAC;IACJ,2KAA2K;IAC3K,QAAQ,EAAE,CACR,KAAK,EAAE,QAAQ,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,KAClD,OAAO,CAAC,yBAAyB,CAAC,CAAC;IACxC,kCAAkC;IAClC,SAAS,EAAE,MAAM,MAAM,CAAC;IACxB,2FAA2F;IAC3F,YAAY,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACvC,yFAAyF;IACzF,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACjC;AAUD,qBAAa,eAAe;IAGd,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoC;gBAEhC,IAAI,EAAE,QAAQ,CAAC,mBAAmB,CAAC;IAEhE,yKAAyK;IACnK,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAgBxC,UAAU;IA6BxB,OAAO,CAAC,QAAQ;CAQjB"}
1
+ {"version":3,"file":"machine-grouping.d.ts","sourceRoot":"","sources":["../../src/core/machine-grouping.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAKxD,MAAM,WAAW,mBAAmB;IAClC,4EAA4E;IAC5E,gBAAgB,EAAE,MAAM,SAAS;QAC/B,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;KAC3C,EAAE,CAAC;IACJ,2KAA2K;IAC3K,QAAQ,EAAE,CACR,KAAK,EAAE,QAAQ,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,KAClD,OAAO,CAAC,yBAAyB,CAAC,CAAC;IACxC,kCAAkC;IAClC,SAAS,EAAE,MAAM,MAAM,CAAC;IACxB,2FAA2F;IAC3F,YAAY,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACvC,yFAAyF;IACzF,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAChC,4GAA4G;IAC5G,UAAU,EAAE,CACV,KAAK,EAAE,QAAQ,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,KAChD,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC/B,kDAAkD;IAClD,iBAAiB,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;CAC7C;AAgBD,qBAAa,eAAe;IAId,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoC;IAC7D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiC;gBAE1B,IAAI,EAAE,QAAQ,CAAC,mBAAmB,CAAC;IAEhE,yKAAyK;IACnK,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAgBtD,uNAAuN;IACjN,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAiBpC,OAAO;YAmBP,UAAU;CA6BzB"}
@@ -1,14 +1,17 @@
1
1
  /**
2
2
  * Which machine each listed agent runs on (agent-comms#343), for list_agents' machine-grouped output. This device's own machine is known directly; every other device's is read from the machine proof in its gossiped agent/self advert and identified cryptographically (membership-proof.ts's identifyMembershipProofIssuer), so a device is grouped under a machine only when that machine's key signed a current proof for it. A device with no such proof (a hidden agent, which sends no agent/self advert, or a bridge that predates machine proofs) has no machine here.
3
3
  *
4
+ * The same pass reads each machine's self display name claim (agent-comms#345) from the adverts of the devices it vouches for, and keeps a name only when the claim is signed by that very machine's key: the issuer is authentic, the content is the machine's own choice.
5
+ *
4
6
  * Grouping is display, not trust: a proof names who vouches for a device id, not that the device gossiping it is that device, so nothing here is used to authorise anything. Identifying a proof is cryptography, so verdicts are remembered per proof text until the proof lapses, and the cache is bounded. For the same reason a failure to identify one proof is reported and leaves that device unplaced rather than failing the listing it feeds.
5
7
  */
6
- import { readMembershipProof } from "./gossip-directory.js";
7
- /** The most proofs whose verdict is remembered. */
8
+ import { readMachineNameClaim, readMembershipProof, } from "./gossip-directory.js";
9
+ /** The most proofs, and separately the most name claims, whose verdict is remembered. */
8
10
  const VERDICT_CACHE_LIMIT = 1024;
9
11
  export class MachineGrouping {
10
12
  deps;
11
13
  verdicts = new Map();
14
+ names = new Map();
12
15
  constructor(deps) {
13
16
  this.deps = deps;
14
17
  }
@@ -32,6 +35,38 @@ export class MachineGrouping {
32
35
  }
33
36
  return machines;
34
37
  }
38
+ /** The self display name of each machine this side can place a device on, keyed by machine id: this host's own from its file, every other one from a claim its own key signed, gossiped by a device it vouches for. */
39
+ async machineNames() {
40
+ const names = new Map();
41
+ const machines = await this.machinesByDevice();
42
+ const own = this.deps.getMachineId();
43
+ const ownName = this.deps.getOwnMachineName();
44
+ if (own !== undefined && ownName !== undefined)
45
+ names.set(own, ownName);
46
+ for (const { deviceId, advert } of this.deps.listKnownDevices()) {
47
+ const machine = machines.get(deviceId);
48
+ if (machine === undefined || names.has(machine))
49
+ continue;
50
+ const claim = readMachineNameClaim(advert);
51
+ if (claim === undefined)
52
+ continue;
53
+ const name = await this.nameFor(claim, machine);
54
+ if (name !== undefined)
55
+ names.set(machine, name);
56
+ }
57
+ return names;
58
+ }
59
+ async nameFor(claim, subject) {
60
+ const cached = this.names.get(claim);
61
+ if (cached?.subject === subject && cached.until > Date.now()) {
62
+ return cached.name;
63
+ }
64
+ const verdict = await this.deps.verifyName({ claim, subject });
65
+ remember(this.names, claim, verdict.ok
66
+ ? { subject, name: verdict.name, until: verdict.expires }
67
+ : { subject, name: undefined, until: Number.POSITIVE_INFINITY });
68
+ return verdict.ok ? verdict.name : undefined;
69
+ }
35
70
  async machineFor(proof, deviceHex) {
36
71
  const cached = this.verdicts.get(proof);
37
72
  if (cached?.deviceHex === deviceHex && cached.until > Date.now()) {
@@ -48,19 +83,20 @@ export class MachineGrouping {
48
83
  }));
49
84
  return undefined;
50
85
  }
51
- this.remember(proof, verdict.ok
86
+ remember(this.verdicts, proof, verdict.ok
52
87
  ? { deviceHex, machine: verdict.issuerHex, until: verdict.expires }
53
88
  : { deviceHex, machine: undefined, until: Number.POSITIVE_INFINITY });
54
89
  return verdict.ok ? verdict.issuerHex : undefined;
55
90
  }
56
- remember(proof, verdict) {
57
- this.verdicts.delete(proof);
58
- this.verdicts.set(proof, verdict);
59
- if (this.verdicts.size > VERDICT_CACHE_LIMIT) {
60
- const oldest = this.verdicts.keys().next();
61
- if (oldest.done !== true)
62
- this.verdicts.delete(oldest.value);
63
- }
91
+ }
92
+ /** Records verdict under key, evicting the oldest entry once the cache holds more than VERDICT_CACHE_LIMIT. */
93
+ function remember(cache, key, verdict) {
94
+ cache.delete(key);
95
+ cache.set(key, verdict);
96
+ if (cache.size > VERDICT_CACHE_LIMIT) {
97
+ const oldest = cache.keys().next();
98
+ if (oldest.done !== true)
99
+ cache.delete(oldest.value);
64
100
  }
65
101
  }
66
102
  //# sourceMappingURL=machine-grouping.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"machine-grouping.js","sourceRoot":"","sources":["../../src/core/machine-grouping.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"machine-grouping.js","sourceRoot":"","sources":["../../src/core/machine-grouping.ts"],"names":[],"mappings":"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"}
@@ -12,4 +12,8 @@ export interface MachineIdentityOptions {
12
12
  export declare function machineIdentityFile(options?: Readonly<MachineIdentityOptions>): string;
13
13
  /** Loads this account's machine identity for this host, creating it on first use (exclusive create, renewal in place, an unusable file refused rather than regenerated). */
14
14
  export declare function loadOrCreateMachineIdentity(options?: Readonly<MachineIdentityOptions>): PeerIdentity;
15
+ /** The name this machine asserts for itself, or undefined when it has none or the machine identity has not been created yet. Read from disk on every call, so a name set by any bridge on the host is seen by all of them. */
16
+ export declare function loadMachineDisplayName(options?: Readonly<MachineIdentityOptions>): string | undefined;
17
+ /** Sets (or, given undefined, clears) the name this machine asserts for itself, keeping the key material and every other field. Throws if the machine identity has not been created yet. */
18
+ export declare function saveMachineDisplayName(options: Readonly<MachineIdentityOptions> | undefined, displayName: string | undefined): void;
15
19
  //# sourceMappingURL=machine-identity.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"machine-identity.d.ts","sourceRoot":"","sources":["../../src/core/machine-identity.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAMlD,MAAM,WAAW,sBAAsB;IACrC,gHAAgH;IAChH,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,6CAA6C;AAC7C,wBAAgB,mBAAmB,CACjC,OAAO,CAAC,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GACzC,MAAM,CAGR;AAED,4KAA4K;AAC5K,wBAAgB,2BAA2B,CACzC,OAAO,CAAC,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GACzC,YAAY,CAKd"}
1
+ {"version":3,"file":"machine-identity.d.ts","sourceRoot":"","sources":["../../src/core/machine-identity.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AASlD,MAAM,WAAW,sBAAsB;IACrC,gHAAgH;IAChH,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,6CAA6C;AAC7C,wBAAgB,mBAAmB,CACjC,OAAO,CAAC,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GACzC,MAAM,CAGR;AAED,4KAA4K;AAC5K,wBAAgB,2BAA2B,CACzC,OAAO,CAAC,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GACzC,YAAY,CAKd;AAcD,8NAA8N;AAC9N,wBAAgB,sBAAsB,CACpC,OAAO,CAAC,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GACzC,MAAM,GAAG,SAAS,CAGpB;AAED,4LAA4L;AAC5L,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GAAG,SAAS,EACrD,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B,IAAI,CAYN"}
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import * as os from "node:os";
7
7
  import * as path from "node:path";
8
- import { isStoredIssuerKey, loadOrCreateIssuerIdentity, } from "./issuer-identity-file.js";
8
+ import { isStoredIssuerKey, loadOrCreateIssuerIdentity, readIssuerRecord, writeIssuerRecord, } from "./issuer-identity-file.js";
9
9
  /** The machine identity file for options. */
10
10
  export function machineIdentityFile(options) {
11
11
  const dir = options?.dir ?? path.join(os.homedir(), ".agent-comms");
@@ -13,6 +13,30 @@ export function machineIdentityFile(options) {
13
13
  }
14
14
  /** Loads this account's machine identity for this host, creating it on first use (exclusive create, renewal in place, an unusable file refused rather than regenerated). */
15
15
  export function loadOrCreateMachineIdentity(options) {
16
- return loadOrCreateIssuerIdentity(machineIdentityFile(options), isStoredIssuerKey);
16
+ return loadOrCreateIssuerIdentity(machineIdentityFile(options), isStoredMachineIdentity);
17
+ }
18
+ function isStoredMachineIdentity(value) {
19
+ if (!isStoredIssuerKey(value))
20
+ return false;
21
+ return !("displayName" in value) || typeof value.displayName === "string";
22
+ }
23
+ /** The name this machine asserts for itself, or undefined when it has none or the machine identity has not been created yet. Read from disk on every call, so a name set by any bridge on the host is seen by all of them. */
24
+ export function loadMachineDisplayName(options) {
25
+ return readIssuerRecord(machineIdentityFile(options), isStoredMachineIdentity)
26
+ ?.displayName;
27
+ }
28
+ /** Sets (or, given undefined, clears) the name this machine asserts for itself, keeping the key material and every other field. Throws if the machine identity has not been created yet. */
29
+ export function saveMachineDisplayName(options, displayName) {
30
+ const file = machineIdentityFile(options);
31
+ const stored = readIssuerRecord(file, isStoredMachineIdentity);
32
+ if (stored === undefined) {
33
+ throw new Error(`no machine identity persisted yet; call loadOrCreateMachineIdentity first (${file})`);
34
+ }
35
+ const next = { ...stored };
36
+ if (displayName === undefined)
37
+ delete next.displayName;
38
+ else
39
+ next.displayName = displayName;
40
+ writeIssuerRecord(file, next);
17
41
  }
18
42
  //# sourceMappingURL=machine-identity.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"machine-identity.js","sourceRoot":"","sources":["../../src/core/machine-identity.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EACL,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,2BAA2B,CAAC;AAOnC,6CAA6C;AAC7C,MAAM,UAAU,mBAAmB,CACjC,OAA0C;IAE1C,MAAM,GAAG,GAAG,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC,CAAC;IACpE,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAC;AACjD,CAAC;AAED,4KAA4K;AAC5K,MAAM,UAAU,2BAA2B,CACzC,OAA0C;IAE1C,OAAO,0BAA0B,CAC/B,mBAAmB,CAAC,OAAO,CAAC,EAC5B,iBAAiB,CAClB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"machine-identity.js","sourceRoot":"","sources":["../../src/core/machine-identity.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EACL,iBAAiB,EACjB,0BAA0B,EAC1B,gBAAgB,EAChB,iBAAiB,GAElB,MAAM,2BAA2B,CAAC;AAOnC,6CAA6C;AAC7C,MAAM,UAAU,mBAAmB,CACjC,OAA0C;IAE1C,MAAM,GAAG,GAAG,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC,CAAC;IACpE,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAC;AACjD,CAAC;AAED,4KAA4K;AAC5K,MAAM,UAAU,2BAA2B,CACzC,OAA0C;IAE1C,OAAO,0BAA0B,CAC/B,mBAAmB,CAAC,OAAO,CAAC,EAC5B,uBAAuB,CACxB,CAAC;AACJ,CAAC;AAOD,SAAS,uBAAuB,CAC9B,KAAc;IAEd,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5C,OAAO,CAAC,CAAC,aAAa,IAAI,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,CAAC;AAC5E,CAAC;AAED,8NAA8N;AAC9N,MAAM,UAAU,sBAAsB,CACpC,OAA0C;IAE1C,OAAO,gBAAgB,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,uBAAuB,CAAC;QAC5E,EAAE,WAAW,CAAC;AAClB,CAAC;AAED,4LAA4L;AAC5L,MAAM,UAAU,sBAAsB,CACpC,OAAqD,EACrD,WAA+B;IAE/B,MAAM,IAAI,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC;IAC/D,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,8EAA8E,IAAI,GAAG,CACtF,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAA0B,EAAE,GAAG,MAAM,EAAE,CAAC;IAClD,IAAI,WAAW,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,WAAW,CAAC;;QAClD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACpC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAChC,CAAC"}
@@ -2,11 +2,12 @@
2
2
  * list_agents' machine grouping (agent-comms#343): the listed agents split into one group per machine, this host first, then every other machine by id, then the agents no machine proof places. Split out of tool.ts to keep that file under the repo's max-lines cap.
3
3
  */
4
4
  import type { AgentIdentity } from "./types.js";
5
+ import type { Namer } from "./naming.js";
5
6
  /** One run of listed agents and the heading above it; no heading when nothing is grouped at all. */
6
7
  export interface AgentGroup {
7
8
  heading: string | undefined;
8
9
  agents: AgentIdentity[];
9
10
  }
10
- /** agents grouped by machine, each group keeping the agents' listed order. machines maps device id to machine id (MeshStore.listAgentMachines); undefined on a store with no machine identity, in which case, as when no agent is placed on a machine, the list is one ungrouped run. */
11
- export declare function groupAgentsByMachine(agents: readonly AgentIdentity[], machines: ReadonlyMap<string, string> | undefined, ownMachine: string | undefined): AgentGroup[];
11
+ /** agents grouped by machine, each group keeping the agents' listed order and each heading naming its machine by the display convention (namer). machines maps device id to machine id (MeshStore.listAgentMachines); undefined on a store with no machine identity, in which case, as when no agent is placed on a machine, the list is one ungrouped run. */
12
+ export declare function groupAgentsByMachine(agents: readonly AgentIdentity[], machines: ReadonlyMap<string, string> | undefined, ownMachine: string | undefined, namer: Namer): AgentGroup[];
12
13
  //# sourceMappingURL=machine-list-groups.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"machine-list-groups.d.ts","sourceRoot":"","sources":["../../src/core/machine-list-groups.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,oGAAoG;AACpG,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB;AAED,yRAAyR;AACzR,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,aAAa,EAAE,EAChC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EACjD,UAAU,EAAE,MAAM,GAAG,SAAS,GAC7B,UAAU,EAAE,CAiCd"}
1
+ {"version":3,"file":"machine-list-groups.d.ts","sourceRoot":"","sources":["../../src/core/machine-list-groups.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,oGAAoG;AACpG,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB;AAED,+VAA+V;AAC/V,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,aAAa,EAAE,EAChC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EACjD,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,KAAK,EAAE,KAAK,GACX,UAAU,EAAE,CAiCd"}
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * list_agents' machine grouping (agent-comms#343): the listed agents split into one group per machine, this host first, then every other machine by id, then the agents no machine proof places. Split out of tool.ts to keep that file under the repo's max-lines cap.
3
3
  */
4
- /** agents grouped by machine, each group keeping the agents' listed order. machines maps device id to machine id (MeshStore.listAgentMachines); undefined on a store with no machine identity, in which case, as when no agent is placed on a machine, the list is one ungrouped run. */
5
- export function groupAgentsByMachine(agents, machines, ownMachine) {
4
+ /** agents grouped by machine, each group keeping the agents' listed order and each heading naming its machine by the display convention (namer). machines maps device id to machine id (MeshStore.listAgentMachines); undefined on a store with no machine identity, in which case, as when no agent is placed on a machine, the list is one ungrouped run. */
5
+ export function groupAgentsByMachine(agents, machines, ownMachine, namer) {
6
6
  if (machines === undefined ||
7
7
  !agents.some((agent) => machines.has(agent.id))) {
8
8
  return [{ heading: undefined, agents: [...agents] }];
@@ -30,7 +30,7 @@ export function groupAgentsByMachine(agents, machines, ownMachine) {
30
30
  return a.localeCompare(b);
31
31
  })
32
32
  .map(([machine, members]) => ({
33
- heading: `Machine ${machine}${machine === ownMachine ? " (this machine)" : ""}:`,
33
+ heading: `Machine ${namer(machine)}${machine === ownMachine ? " (this machine)" : ""}:`,
34
34
  agents: members,
35
35
  }));
36
36
  if (unplaced.length > 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"machine-list-groups.js","sourceRoot":"","sources":["../../src/core/machine-list-groups.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,yRAAyR;AACzR,MAAM,UAAU,oBAAoB,CAClC,MAAgC,EAChC,QAAiD,EACjD,UAA8B;IAE9B,IACE,QAAQ,KAAK,SAAS;QACtB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAC/C,CAAC;QACD,OAAO,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,GAAG,EAA2B,CAAC;IACrD,MAAM,QAAQ,GAAoB,EAAE,CAAC;IACrC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;;YACpD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IACD,MAAM,MAAM,GAAiB,CAAC,GAAG,SAAS,CAAC;SACxC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;QACjB,IAAI,CAAC,KAAK,UAAU;YAAE,OAAO,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,UAAU;YAAE,OAAO,CAAC,CAAC;QAC/B,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5B,OAAO,EAAE,WAAW,OAAO,GAAG,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,GAAG;QAChF,MAAM,EAAE,OAAO;KAChB,CAAC,CAAC,CAAC;IACN,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"machine-list-groups.js","sourceRoot":"","sources":["../../src/core/machine-list-groups.ts"],"names":[],"mappings":"AAAA;;GAEG;AAWH,+VAA+V;AAC/V,MAAM,UAAU,oBAAoB,CAClC,MAAgC,EAChC,QAAiD,EACjD,UAA8B,EAC9B,KAAY;IAEZ,IACE,QAAQ,KAAK,SAAS;QACtB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAC/C,CAAC;QACD,OAAO,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,GAAG,EAA2B,CAAC;IACrD,MAAM,QAAQ,GAAoB,EAAE,CAAC;IACrC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;;YACpD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IACD,MAAM,MAAM,GAAiB,CAAC,GAAG,SAAS,CAAC;SACxC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;QACjB,IAAI,CAAC,KAAK,UAAU;YAAE,OAAO,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,UAAU;YAAE,OAAO,CAAC,CAAC;QAC/B,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5B,OAAO,EAAE,WAAW,KAAK,CAAC,OAAO,CAAC,GAAG,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,GAAG;QACvF,MAAM,EAAE,OAAO;KAChB,CAAC,CAAC,CAAC;IACN,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * This host's self display name claim (agent-comms#345), kept fresh beside the machine proof: re-minted on the proofs' own cadence from whatever name machine-identity.json currently holds, so a name set or cleared by any bridge on the host reaches every bridge's advert within one refresh, and the setting bridge's at once.
3
+ */
4
+ import type { MeshStoreIdentity } from "./mesh-store-shared.js";
5
+ export interface MachineNameClaimDeps {
6
+ /** Throws if the store has no identity yet. */
7
+ getIdentity: () => MeshStoreIdentity;
8
+ onError: (error: Error) => void;
9
+ }
10
+ export declare class MachineNameClaim {
11
+ private readonly deps;
12
+ private claim;
13
+ private timer;
14
+ constructor(deps: Readonly<MachineNameClaimDeps>);
15
+ /** The current claim, undefined while the machine has no name or before the first claim is minted. */
16
+ current(): string | undefined;
17
+ start(): void;
18
+ stop(): void;
19
+ /** Re-reads the machine's name and re-mints its claim now; drops the claim when the machine has no name. A failed mint is reported and the previous claim is kept until the next refresh. */
20
+ refresh(): Promise<void>;
21
+ }
22
+ //# sourceMappingURL=machine-name-claim.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"machine-name-claim.d.ts","sourceRoot":"","sources":["../../src/core/machine-name-claim.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAKhE,MAAM,WAAW,oBAAoB;IACnC,+CAA+C;IAC/C,WAAW,EAAE,MAAM,iBAAiB,CAAC;IACrC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACjC;AAED,qBAAa,gBAAgB;IAIf,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHjC,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,KAAK,CAA6C;gBAE7B,IAAI,EAAE,QAAQ,CAAC,oBAAoB,CAAC;IAEjE,sGAAsG;IACtG,OAAO,IAAI,MAAM,GAAG,SAAS;IAI7B,KAAK,IAAI,IAAI;IASb,IAAI,IAAI,IAAI;IAKZ,6LAA6L;IACvL,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAoB/B"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * This host's self display name claim (agent-comms#345), kept fresh beside the machine proof: re-minted on the proofs' own cadence from whatever name machine-identity.json currently holds, so a name set or cleared by any bridge on the host reaches every bridge's advert within one refresh, and the setting bridge's at once.
3
+ */
4
+ import { loadMachineDisplayName } from "./machine-identity.js";
5
+ import { MEMBERSHIP_PROOF_LIFETIME_MS } from "./membership-proof.js";
6
+ import { PROOF_REFRESH_INTERVAL_MS } from "./membership-proofs.js";
7
+ import { mintNameClaim } from "./name-claim.js";
8
+ export class MachineNameClaim {
9
+ deps;
10
+ claim;
11
+ timer;
12
+ constructor(deps) {
13
+ this.deps = deps;
14
+ }
15
+ /** The current claim, undefined while the machine has no name or before the first claim is minted. */
16
+ current() {
17
+ return this.claim;
18
+ }
19
+ start() {
20
+ this.stop();
21
+ void this.refresh();
22
+ this.timer = setInterval(() => {
23
+ void this.refresh();
24
+ }, PROOF_REFRESH_INTERVAL_MS);
25
+ this.timer.unref();
26
+ }
27
+ stop() {
28
+ clearInterval(this.timer);
29
+ this.timer = undefined;
30
+ }
31
+ /** Re-reads the machine's name and re-mints its claim now; drops the claim when the machine has no name. A failed mint is reported and the previous claim is kept until the next refresh. */
32
+ async refresh() {
33
+ const identity = this.deps.getIdentity();
34
+ const name = loadMachineDisplayName(identity.machineIdentityOptions);
35
+ if (name === undefined) {
36
+ this.claim = undefined;
37
+ return;
38
+ }
39
+ try {
40
+ this.claim = await mintNameClaim({
41
+ issuer: identity.machineIdentity,
42
+ clock: identity.clock,
43
+ name,
44
+ lifetimeMs: MEMBERSHIP_PROOF_LIFETIME_MS,
45
+ });
46
+ }
47
+ catch (error) {
48
+ this.deps.onError(error instanceof Error ? error : new Error(String(error)));
49
+ }
50
+ }
51
+ }
52
+ //# sourceMappingURL=machine-name-claim.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"machine-name-claim.js","sourceRoot":"","sources":["../../src/core/machine-name-claim.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAQhD,MAAM,OAAO,gBAAgB;IAIE;IAHrB,KAAK,CAAqB;IAC1B,KAAK,CAA6C;IAE1D,YAA6B,IAAoC;QAApC,SAAI,GAAJ,IAAI,CAAgC;IAAG,CAAC;IAErE,sGAAsG;IACtG,OAAO;QACL,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;QACpB,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YAC5B,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;QACtB,CAAC,EAAE,yBAAyB,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,IAAI;QACF,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;IACzB,CAAC;IAED,6LAA6L;IAC7L,KAAK,CAAC,OAAO;QACX,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,sBAAsB,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;QACrE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;YACvB,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,GAAG,MAAM,aAAa,CAAC;gBAC/B,MAAM,EAAE,QAAQ,CAAC,eAAe;gBAChC,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,IAAI;gBACJ,UAAU,EAAE,4BAA4B;aACzC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,OAAO,CACf,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAC1D,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
@@ -4,6 +4,8 @@
4
4
  import type { IdentityPort } from "wire-mesh-core/ports/identity";
5
5
  import type { MeshStoreIdentity } from "./mesh-store-shared.js";
6
6
  import { type IdentifiedMembershipProof, type MembershipProofVerdict } from "./membership-proof.js";
7
+ /** How often an advertised proof, or a name claim riding beside it, is re-minted. */
8
+ export declare const PROOF_REFRESH_INTERVAL_MS: number;
7
9
  export interface MembershipProofsDeps {
8
10
  /** Throws if the store has no identity yet. */
9
11
  getIdentity: () => MeshStoreIdentity;
@@ -1 +1 @@
1
- {"version":3,"file":"membership-proofs.d.ts","sourceRoot":"","sources":["../../src/core/membership-proofs.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAElE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAKL,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAC5B,MAAM,uBAAuB,CAAC;AAO/B,MAAM,WAAW,oBAAoB;IACnC,+CAA+C;IAC/C,WAAW,EAAE,MAAM,iBAAiB,CAAC;IACrC,mHAAmH;IACnH,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,iBAAiB,CAAC,KAAK,YAAY,CAAC;IAClE,kCAAkC;IAClC,SAAS,EAAE,MAAM,MAAM,CAAC;IACxB,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACjC;AAED,qBAAa,gBAAgB;IAKf,OAAO,CAAC,QAAQ,CAAC,IAAI;IAJjC,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAA6C;gBAE7B,IAAI,EAAE,QAAQ,CAAC,oBAAoB,CAAC;IAEjE,8EAA8E;IAC9E,OAAO,IAAI,MAAM,GAAG,SAAS;IAI7B,oJAAoJ;IACpJ,KAAK,IAAI,IAAI;IASb,IAAI,IAAI,IAAI;IAKZ,8IAA8I;IACxI,MAAM,CACV,KAAK,EAAE,QAAQ,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,GACvE,OAAO,CAAC,sBAAsB,CAAC;IAYlC,wFAAwF;IAClF,QAAQ,CACZ,KAAK,EAAE,QAAQ,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,GACpD,OAAO,CAAC,yBAAyB,CAAC;IAWrC,OAAO,CAAC,OAAO;CAuBhB"}
1
+ {"version":3,"file":"membership-proofs.d.ts","sourceRoot":"","sources":["../../src/core/membership-proofs.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAElE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAKL,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAC5B,MAAM,uBAAuB,CAAC;AAI/B,qFAAqF;AACrF,eAAO,MAAM,yBAAyB,QACiB,CAAC;AAExD,MAAM,WAAW,oBAAoB;IACnC,+CAA+C;IAC/C,WAAW,EAAE,MAAM,iBAAiB,CAAC;IACrC,mHAAmH;IACnH,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,iBAAiB,CAAC,KAAK,YAAY,CAAC;IAClE,kCAAkC;IAClC,SAAS,EAAE,MAAM,MAAM,CAAC;IACxB,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACjC;AAED,qBAAa,gBAAgB;IAKf,OAAO,CAAC,QAAQ,CAAC,IAAI;IAJjC,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAA6C;gBAE7B,IAAI,EAAE,QAAQ,CAAC,oBAAoB,CAAC;IAEjE,8EAA8E;IAC9E,OAAO,IAAI,MAAM,GAAG,SAAS;IAI7B,oJAAoJ;IACpJ,KAAK,IAAI,IAAI;IASb,IAAI,IAAI,IAAI;IAKZ,8IAA8I;IACxI,MAAM,CACV,KAAK,EAAE,QAAQ,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,GACvE,OAAO,CAAC,sBAAsB,CAAC;IAYlC,wFAAwF;IAClF,QAAQ,CACZ,KAAK,EAAE,QAAQ,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,GACpD,OAAO,CAAC,yBAAyB,CAAC;IAWrC,OAAO,CAAC,OAAO;CAuBhB"}
@@ -5,7 +5,8 @@ import { deviceIdFromHex } from "wire-mesh-core/domain/device-id";
5
5
  import { MEMBERSHIP_PROOF_LIFETIME_MS, identifyMembershipProofIssuer, mintMembershipProof, verifyMembershipProof, } from "./membership-proof.js";
6
6
  /** How many times per proof lifetime the proof is re-minted, so a missed tick or two never lets the advertised proof lapse. */
7
7
  const REFRESHES_PER_LIFETIME = 3;
8
- const REFRESH_INTERVAL_MS = MEMBERSHIP_PROOF_LIFETIME_MS / REFRESHES_PER_LIFETIME;
8
+ /** How often an advertised proof, or a name claim riding beside it, is re-minted. */
9
+ export const PROOF_REFRESH_INTERVAL_MS = MEMBERSHIP_PROOF_LIFETIME_MS / REFRESHES_PER_LIFETIME;
9
10
  export class MembershipProofs {
10
11
  deps;
11
12
  proof;
@@ -24,7 +25,7 @@ export class MembershipProofs {
24
25
  this.refresh();
25
26
  this.timer = setInterval(() => {
26
27
  this.refresh();
27
- }, REFRESH_INTERVAL_MS);
28
+ }, PROOF_REFRESH_INTERVAL_MS);
28
29
  this.timer.unref();
29
30
  }
30
31
  stop() {
@@ -1 +1 @@
1
- {"version":3,"file":"membership-proofs.js","sourceRoot":"","sources":["../../src/core/membership-proofs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"membership-proofs.js","sourceRoot":"","sources":["../../src/core/membership-proofs.ts"],"names":[],"mappings":"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"}
@@ -3,8 +3,9 @@
3
3
  */
4
4
  import type { CommsAction } from "./types.js";
5
5
  import type { CommsResult, MeshOnlyFeatures } from "./tool.js";
6
- /** Reports every known device (nodes) and every self-reported connection edge between them (edges), assembled from the cached gossip directory -- a cheap, possibly-stale snapshot; meshTraceAction below is the live, cache-bust counterpart for one specific device. */
7
- export declare function meshGraphAction(store: Readonly<Pick<MeshOnlyFeatures, "meshGraph">>): CommsResult;
6
+ import { type Namer } from "./naming.js";
7
+ /** Reports every known device (nodes, each by its full id, which mesh_trace takes, and its display name from namer) and every self-reported connection edge between them (edges, by display name), assembled from the cached gossip directory: a cheap, possibly-stale snapshot; meshTraceAction below is the live, cache-bust counterpart for one specific device. */
8
+ export declare function meshGraphAction(store: Readonly<Pick<MeshOnlyFeatures, "meshGraph">>, namer: Namer): CommsResult;
8
9
  /** Sends path.trace to action.target and reports the real end-to-end RTT plus each side's own relayed/hub-address knowledge -- the live counterpart to meshGraphAction's gossiped snapshot. */
9
10
  export declare function meshTraceAction(store: Readonly<Pick<MeshOnlyFeatures, "meshTrace">>, action: CommsAction & {
10
11
  action: "mesh_trace";
@@ -1 +1 @@
1
- {"version":3,"file":"mesh-graph-trace-tool.d.ts","sourceRoot":"","sources":["../../src/core/mesh-graph-trace-tool.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAc/D,0QAA0Q;AAC1Q,wBAAgB,eAAe,CAC7B,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC,GACnD,WAAW,CAiBb;AAED,+LAA+L;AAC/L,wBAAsB,eAAe,CACnC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC,EACpD,MAAM,EAAE,WAAW,GAAG;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,GAC7C,OAAO,CAAC,WAAW,CAAC,CA+BtB"}
1
+ {"version":3,"file":"mesh-graph-trace-tool.d.ts","sourceRoot":"","sources":["../../src/core/mesh-graph-trace-tool.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE/D,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAatD,uWAAuW;AACvW,wBAAgB,eAAe,CAC7B,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC,EACpD,KAAK,EAAE,KAAK,GACX,WAAW,CAmBb;AAED,+LAA+L;AAC/L,wBAAsB,eAAe,CACnC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC,EACpD,MAAM,EAAE,WAAW,GAAG;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,GAC7C,OAAO,CAAC,WAAW,CAAC,CA+BtB"}
@@ -2,6 +2,7 @@
2
2
  * CommsTool's mesh_graph/mesh_trace action handlers (agent-comms#199) -- split out of tool.ts purely to keep that file under the repo's max-lines cap, the same reason gateway-trust-actions.ts/connection-code-tool.ts were split from it. Free functions over MeshOnlyFeatures's own meshGraph/meshTrace methods rather than class methods, since CommsTool owns no state of its own for this concern.
3
3
  */
4
4
  import { tryMeshAction } from "./tool.js";
5
+ import { idWithNames } from "./naming.js";
5
6
  /** Column width the "direct"/"relay" edge-kind label is padded to in meshGraphAction's own listing, matching tool.ts's own aligned-column convention for every other tabular action result. */
6
7
  const MESH_GRAPH_EDGE_KIND_COLUMN_WIDTH = 6;
7
8
  /** Uniform "this bridge isn't backed by a mesh transport" result, mirroring tool.ts's own notMeshBacked for the other MeshOnlyFeatures methods (not exported from there, so re-declared locally the same way gateway-trust-actions.ts's own gatewayTrustUnavailable already does). */
@@ -11,20 +12,22 @@ function meshFeatureUnavailable(action) {
11
12
  content: `${action} requires a mesh-backed store (this session is running on FileStore)`,
12
13
  };
13
14
  }
14
- /** Reports every known device (nodes) and every self-reported connection edge between them (edges), assembled from the cached gossip directory -- a cheap, possibly-stale snapshot; meshTraceAction below is the live, cache-bust counterpart for one specific device. */
15
- export function meshGraphAction(store) {
15
+ /** Reports every known device (nodes, each by its full id, which mesh_trace takes, and its display name from namer) and every self-reported connection edge between them (edges, by display name), assembled from the cached gossip directory: a cheap, possibly-stale snapshot; meshTraceAction below is the live, cache-bust counterpart for one specific device. */
16
+ export function meshGraphAction(store, namer) {
16
17
  if (!store.meshGraph)
17
18
  return meshFeatureUnavailable("mesh_graph");
18
19
  const graph = store.meshGraph();
19
20
  if (graph.nodes.length === 0)
20
21
  return { content: "No known devices in the mesh graph.", isError: false };
21
22
  const edgeLines = graph.edges.map((edge) => {
22
- const via = edge.kind === "relay" && edge.via !== undefined ? ` via ${edge.via}` : "";
23
- return ` ${edge.kind.padEnd(MESH_GRAPH_EDGE_KIND_COLUMN_WIDTH)} ${edge.from} -> ${edge.to}${via}`;
23
+ const via = edge.kind === "relay" && edge.via !== undefined
24
+ ? ` via ${namer(edge.via)}`
25
+ : "";
26
+ return ` ${edge.kind.padEnd(MESH_GRAPH_EDGE_KIND_COLUMN_WIDTH)} ${namer(edge.from)} -> ${namer(edge.to)}${via}`;
24
27
  });
25
28
  const edgesBlock = edgeLines.length > 0 ? edgeLines.join("\n") : " (no edges reported)";
26
29
  return {
27
- content: `Mesh graph:\nNodes (${String(graph.nodes.length)}): ${graph.nodes.join(", ")}\nEdges:\n${edgesBlock}`,
30
+ content: `Mesh graph:\nNodes (${String(graph.nodes.length)}):\n${graph.nodes.map((node) => ` ${idWithNames(node, namer)}`).join("\n")}\nEdges:\n${edgesBlock}`,
28
31
  isError: false,
29
32
  };
30
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mesh-graph-trace-tool.js","sourceRoot":"","sources":["../../src/core/mesh-graph-trace-tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mesh-graph-trace-tool.js","sourceRoot":"","sources":["../../src/core/mesh-graph-trace-tool.ts"],"names":[],"mappings":"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"}