agent-comms 3.21.0 → 3.23.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 (86) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/README.md +1 -1
  4. package/dist/bridges/user/web/actions.d.ts +59 -0
  5. package/dist/bridges/user/web/actions.d.ts.map +1 -0
  6. package/dist/bridges/user/web/actions.js +109 -0
  7. package/dist/bridges/user/web/actions.js.map +1 -0
  8. package/dist/bridges/user/web/contract.d.ts +2 -0
  9. package/dist/bridges/user/web/contract.d.ts.map +1 -1
  10. package/dist/bridges/user/web/dist/mesh-worker.js +1 -1
  11. package/dist/bridges/user/web/dist/sw.js +1 -1
  12. package/dist/bridges/user/web/event-publisher.d.ts +30 -0
  13. package/dist/bridges/user/web/event-publisher.d.ts.map +1 -0
  14. package/dist/bridges/user/web/event-publisher.js +84 -0
  15. package/dist/bridges/user/web/event-publisher.js.map +1 -0
  16. package/dist/bridges/user/web/frontend/mesh-worker.d.ts +10 -8
  17. package/dist/bridges/user/web/frontend/mesh-worker.d.ts.map +1 -1
  18. package/dist/bridges/user/web/frontend/mesh-worker.js +143 -90
  19. package/dist/bridges/user/web/frontend/mesh-worker.js.map +1 -1
  20. package/dist/bridges/user/web/router.d.ts +696 -0
  21. package/dist/bridges/user/web/router.d.ts.map +1 -0
  22. package/dist/bridges/user/web/router.js +50 -0
  23. package/dist/bridges/user/web/router.js.map +1 -0
  24. package/dist/bridges/user/web/server.d.ts +3 -0
  25. package/dist/bridges/user/web/server.d.ts.map +1 -1
  26. package/dist/bridges/user/web/server.js +95 -114
  27. package/dist/bridges/user/web/server.js.map +1 -1
  28. package/dist/bridges/user/web/test/orpc-router.integration.test.d.ts +7 -0
  29. package/dist/bridges/user/web/test/orpc-router.integration.test.d.ts.map +1 -0
  30. package/dist/bridges/user/web/test/orpc-router.integration.test.js +214 -0
  31. package/dist/bridges/user/web/test/orpc-router.integration.test.js.map +1 -0
  32. package/dist/core/bridge.d.ts +3 -0
  33. package/dist/core/bridge.d.ts.map +1 -1
  34. package/dist/core/bridge.js +14 -0
  35. package/dist/core/bridge.js.map +1 -1
  36. package/dist/core/data-frame-routing.d.ts +14 -0
  37. package/dist/core/data-frame-routing.d.ts.map +1 -0
  38. package/dist/core/data-frame-routing.js +37 -0
  39. package/dist/core/data-frame-routing.js.map +1 -0
  40. package/dist/core/gossip-directory.d.ts +5 -0
  41. package/dist/core/gossip-directory.d.ts.map +1 -1
  42. package/dist/core/gossip-directory.js +7 -0
  43. package/dist/core/gossip-directory.js.map +1 -1
  44. package/dist/core/hub-session.d.ts +5 -1
  45. package/dist/core/hub-session.d.ts.map +1 -1
  46. package/dist/core/hub-session.js +24 -0
  47. package/dist/core/hub-session.js.map +1 -1
  48. package/dist/core/mesh-graph-trace-tool.d.ts +12 -0
  49. package/dist/core/mesh-graph-trace-tool.d.ts.map +1 -0
  50. package/dist/core/mesh-graph-trace-tool.js +60 -0
  51. package/dist/core/mesh-graph-trace-tool.js.map +1 -0
  52. package/dist/core/mesh-graph.d.ts +14 -0
  53. package/dist/core/mesh-graph.d.ts.map +1 -0
  54. package/dist/core/mesh-graph.js +46 -0
  55. package/dist/core/mesh-graph.js.map +1 -0
  56. package/dist/core/mesh-network-actions.d.ts +28 -0
  57. package/dist/core/mesh-network-actions.d.ts.map +1 -0
  58. package/dist/core/mesh-network-actions.js +143 -0
  59. package/dist/core/mesh-network-actions.js.map +1 -0
  60. package/dist/core/mesh-store.d.ts +5 -1
  61. package/dist/core/mesh-store.d.ts.map +1 -1
  62. package/dist/core/mesh-store.js +16 -0
  63. package/dist/core/mesh-store.js.map +1 -1
  64. package/dist/core/tool.d.ts +3 -10
  65. package/dist/core/tool.d.ts.map +1 -1
  66. package/dist/core/tool.js +15 -147
  67. package/dist/core/tool.js.map +1 -1
  68. package/dist/core/transport.d.ts +35 -0
  69. package/dist/core/transport.d.ts.map +1 -1
  70. package/dist/core/types.d.ts +12 -0
  71. package/dist/core/types.d.ts.map +1 -1
  72. package/dist/core/types.js +6 -0
  73. package/dist/core/types.js.map +1 -1
  74. package/dist/core/wire-mesh-transport.d.ts +7 -2
  75. package/dist/core/wire-mesh-transport.d.ts.map +1 -1
  76. package/dist/core/wire-mesh-transport.js +22 -38
  77. package/dist/core/wire-mesh-transport.js.map +1 -1
  78. package/dist/test/mesh-graph-trace-tool.test.d.ts +2 -0
  79. package/dist/test/mesh-graph-trace-tool.test.d.ts.map +1 -0
  80. package/dist/test/mesh-graph-trace-tool.test.js +104 -0
  81. package/dist/test/mesh-graph-trace-tool.test.js.map +1 -0
  82. package/dist/test/mesh-graph-trace.integration.test.d.ts +5 -0
  83. package/dist/test/mesh-graph-trace.integration.test.d.ts.map +1 -0
  84. package/dist/test/mesh-graph-trace.integration.test.js +146 -0
  85. package/dist/test/mesh-graph-trace.integration.test.js.map +1 -0
  86. package/package.json +2 -2
@@ -15,7 +15,7 @@
15
15
  "url": "https://github.com/ExaDev/agent-comms.git"
16
16
  },
17
17
  "description": "Cross-harness LLM agent communication mesh — rooms, DMs, and presence",
18
- "version": "3.21.0"
18
+ "version": "3.23.0"
19
19
  }
20
20
  ]
21
21
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "agent-comms",
3
3
  "description": "Cross-harness LLM agent communication mesh — rooms, DMs, and presence",
4
- "version": "3.21.0",
4
+ "version": "3.23.0",
5
5
  "author": {
6
6
  "name": "ExaDev"
7
7
  },
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [![GitHub](https://img.shields.io/badge/GitHub-181717?logo=github&logoColor=white)](https://github.com/ExaDev/agent-comms)
4
4
  [![npm](https://img.shields.io/badge/npm-CB3837?logo=npm&logoColor=white)](https://www.npmjs.com/package/agent-comms)
5
- [![version](https://img.shields.io/badge/version-3.21.0-blue)](https://github.com/ExaDev/agent-comms/releases/tag/v3.21.0)
5
+ [![version](https://img.shields.io/badge/version-3.23.0-blue)](https://github.com/ExaDev/agent-comms/releases/tag/v3.23.0)
6
6
  [![CI](https://img.shields.io/github/actions/workflow/status/ExaDev/agent-comms/ci.yml?branch=main)](https://github.com/ExaDev/agent-comms/actions)
7
7
 
8
8
  Cross-harness communication mesh for LLM agents: rooms, DMs, presence, and visibility over TCP with zero filesystem dependencies.
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Plain action functions -- one per browser-facing action, extracted from server.ts's executeAction switch so both the legacy /api/action REST dispatcher and the new oRPC router call the same implementation instead of two copies drifting apart.
3
+ *
4
+ * Each function preserves executeAction's exact prior validation behaviour (empty string treated the same as missing) even though the oRPC contract's own Zod schemas already enforce presence and type -- the contract validates shape, these functions still validate the same business rules the REST path has always enforced.
5
+ */
6
+ import type { PushManager } from "../../../core/push-manager.js";
7
+ import type { ChatController } from "../controller.js";
8
+ import type { ActionResult } from "./contract.js";
9
+ export declare function sendAction(controller: ChatController, input: Readonly<{
10
+ target: string;
11
+ content: string;
12
+ }>): Promise<ActionResult>;
13
+ export declare function dmAction(controller: ChatController, input: Readonly<{
14
+ target: string;
15
+ content: string;
16
+ }>): Promise<ActionResult>;
17
+ export declare function joinRoomAction(controller: ChatController, input: Readonly<{
18
+ room: string;
19
+ }>): Promise<ActionResult>;
20
+ export declare function leaveRoomAction(controller: ChatController, input: Readonly<{
21
+ room?: string | undefined;
22
+ }>): Promise<ActionResult>;
23
+ export declare function createRoomAction(controller: ChatController, input: Readonly<{
24
+ name: string;
25
+ type: "public" | "private" | "secret";
26
+ description?: string | undefined;
27
+ }>): Promise<ActionResult>;
28
+ export declare function listRoomsAction(controller: ChatController): Promise<ActionResult>;
29
+ export declare function listAgentsAction(controller: ChatController): Promise<ActionResult>;
30
+ export declare function readRoomAction(controller: ChatController, input: Readonly<{
31
+ room?: string | undefined;
32
+ }>): Promise<ActionResult>;
33
+ export declare function destroyRoomAction(controller: ChatController, input: Readonly<{
34
+ room: string;
35
+ }>): Promise<ActionResult>;
36
+ export declare function inviteAction(controller: ChatController, input: Readonly<{
37
+ room: string;
38
+ agent: string;
39
+ }>): Promise<ActionResult>;
40
+ export declare function declineInviteAction(controller: ChatController, input: Readonly<{
41
+ room: string;
42
+ reason: string;
43
+ }>): Promise<ActionResult>;
44
+ export declare function kickAction(controller: ChatController, input: Readonly<{
45
+ room: string;
46
+ agent: string;
47
+ }>): Promise<ActionResult>;
48
+ export declare function renameAgentAction(controller: ChatController, input: Readonly<{
49
+ agent: string;
50
+ name: string;
51
+ }>): Promise<ActionResult>;
52
+ export declare function pushSubscribeAction(controller: ChatController, pushManager: PushManager | undefined, input: Readonly<{
53
+ subscription: unknown;
54
+ agentId?: string | undefined;
55
+ }>): ActionResult;
56
+ export declare function pushUnsubscribeAction(controller: ChatController, pushManager: PushManager | undefined, input: Readonly<{
57
+ agentId?: string | undefined;
58
+ }>): ActionResult;
59
+ //# sourceMappingURL=actions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../../../src/bridges/user/web/actions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Plain action functions -- one per browser-facing action, extracted from server.ts's executeAction switch so both the legacy /api/action REST dispatcher and the new oRPC router call the same implementation instead of two copies drifting apart.
3
+ *
4
+ * Each function preserves executeAction's exact prior validation behaviour (empty string treated the same as missing) even though the oRPC contract's own Zod schemas already enforce presence and type -- the contract validates shape, these functions still validate the same business rules the REST path has always enforced.
5
+ */
6
+ export async function sendAction(controller, input) {
7
+ if (input.target === "" || input.content === "") {
8
+ return { content: "Missing target or content", isError: true };
9
+ }
10
+ return controller.send(input.target, input.content);
11
+ }
12
+ export async function dmAction(controller, input) {
13
+ if (input.target === "" || input.content === "") {
14
+ return { content: "Missing target or content", isError: true };
15
+ }
16
+ return controller.dm(input.target, input.content);
17
+ }
18
+ export async function joinRoomAction(controller, input) {
19
+ if (input.room === "")
20
+ return { content: "Missing room", isError: true };
21
+ const result = await controller.switchRoom(input.room);
22
+ if (!result.isError) {
23
+ const msgs = await controller.readRoom();
24
+ return { content: `${result.content}\n${msgs.content}`, isError: false };
25
+ }
26
+ return result;
27
+ }
28
+ export async function leaveRoomAction(controller, input) {
29
+ return controller.leaveRoom(input.room);
30
+ }
31
+ export async function createRoomAction(controller, input) {
32
+ if (input.name === "")
33
+ return { content: "Missing name", isError: true };
34
+ return controller.createRoom(input.name, input.type, input.description ?? "");
35
+ }
36
+ export async function listRoomsAction(controller) {
37
+ return controller.listRooms();
38
+ }
39
+ export async function listAgentsAction(controller) {
40
+ return controller.listAgents();
41
+ }
42
+ export async function readRoomAction(controller, input) {
43
+ return controller.readRoom(input.room);
44
+ }
45
+ export async function destroyRoomAction(controller, input) {
46
+ if (input.room === "")
47
+ return { content: "Missing room", isError: true };
48
+ return controller.destroyRoom(input.room);
49
+ }
50
+ export async function inviteAction(controller, input) {
51
+ if (input.room === "" || input.agent === "") {
52
+ return { content: "Missing room or agent", isError: true };
53
+ }
54
+ return controller.invite(input.room, input.agent);
55
+ }
56
+ export async function declineInviteAction(controller, input) {
57
+ if (input.room === "" || input.reason === "") {
58
+ return { content: "Missing room or reason", isError: true };
59
+ }
60
+ return controller.declineInvite(input.room, input.reason);
61
+ }
62
+ export async function kickAction(controller, input) {
63
+ if (input.room === "" || input.agent === "") {
64
+ return { content: "Missing room or agent", isError: true };
65
+ }
66
+ return controller.kick(input.room, input.agent);
67
+ }
68
+ export async function renameAgentAction(controller, input) {
69
+ if (input.agent === "" || input.name === "") {
70
+ return { content: "Missing agent or name", isError: true };
71
+ }
72
+ return controller.renameAgent(input.agent, input.name);
73
+ }
74
+ function isPushSubscription(value) {
75
+ if (typeof value !== "object" || value === null)
76
+ return false;
77
+ if (!("endpoint" in value) || typeof value.endpoint !== "string")
78
+ return false;
79
+ if (!("keys" in value))
80
+ return false;
81
+ const keys = value.keys;
82
+ if (typeof keys !== "object" || keys === null)
83
+ return false;
84
+ if (!("p256dh" in keys) || typeof keys.p256dh !== "string")
85
+ return false;
86
+ if (!("auth" in keys) || typeof keys.auth !== "string")
87
+ return false;
88
+ return true;
89
+ }
90
+ export function pushSubscribeAction(controller, pushManager, input) {
91
+ if (!pushManager) {
92
+ return { content: "Push notifications unavailable", isError: true };
93
+ }
94
+ if (!isPushSubscription(input.subscription)) {
95
+ return { content: "Invalid push subscription", isError: true };
96
+ }
97
+ const agentId = input.agentId ?? controller.agentId;
98
+ pushManager.addSubscription(agentId, input.subscription);
99
+ return { content: "Push subscription registered", isError: false };
100
+ }
101
+ export function pushUnsubscribeAction(controller, pushManager, input) {
102
+ if (!pushManager) {
103
+ return { content: "Push notifications unavailable", isError: true };
104
+ }
105
+ const agentId = input.agentId ?? controller.agentId;
106
+ pushManager.removeSubscription(agentId);
107
+ return { content: "Push subscription removed", isError: false };
108
+ }
109
+ //# sourceMappingURL=actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.js","sourceRoot":"","sources":["../../../../src/bridges/user/web/actions.ts"],"names":[],"mappings":"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"}
@@ -1792,5 +1792,7 @@ export type MeshEvent = z.infer<typeof MeshEventSchema>;
1792
1792
  export type MeshStatePatch = z.infer<typeof MeshStatePatchSchema>;
1793
1793
  export type SerialisedState = z.infer<typeof SerialisedStateSchema>;
1794
1794
  export type ActionResult = z.infer<typeof ActionResultSchema>;
1795
+ /** Type-only handle onto the contract's shape for building a typed client (`ContractRouterClient<MeshContract>`) without importing the contract's own runtime value -- browser code that only needs the type (mesh-worker.ts, mesh-client.ts) can `import type` this and never bundle Zod/core's schemas at all, since a type-only import is erased entirely at build time. */
1796
+ export type MeshContract = typeof meshContract;
1795
1797
  export {};
1796
1798
  //# sourceMappingURL=contract.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../../../src/bridges/user/web/contract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../../../src/bridges/user/web/contract.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- var AgentCommsMeshWorker=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=new Map,n=new Map,r=new Map,i=new Map;function a(e){for(let[n,r]of Object.entries(e.agents))t.set(n,r);for(let[t,r]of Object.entries(e.rooms))n.set(t,r);for(let[t,n]of Object.entries(e.messages))r.set(t,n);for(let[t,n]of Object.entries(e.dms))i.set(t,n)}function o(e){switch(e.type){case`agent_upsert`:t.set(e.agent.id,e.agent);break;case`agent_offline`:{let n=t.get(e.agentId);n&&(n.status=`offline`,t.set(e.agentId,n));break}case`room_upsert`:n.set(e.room.id,e.room);break;case`room_delete`:n.delete(e.roomId);break;case`message_add`:{let t=r.get(e.roomId)??[];t.push(e.message),r.set(e.roomId,t);break}case`dm_add`:{let t=i.get(e.key)??[];t.push(e.message),i.set(e.key,t);break}case`delivery`:break;case`message_read`:if(e.room!==void 0){let t=r.get(e.room);if(t){let n=t.find(t=>t.id===e.messageId);n&&!n.readBy.includes(e.readBy)&&n.readBy.push(e.readBy)}}else for(let[,t]of i){let n=t.find(t=>t.id===e.messageId);n&&!n.readBy.includes(e.readBy)&&n.readBy.push(e.readBy)}}}function s(){return{agents:[...t.values()],rooms:[...n.values()]}}var c,l,u;function d(e){u=e,l!==void 0&&(clearTimeout(l),l=void 0);let t=new WebSocket(e);c=t,t.onopen=()=>{_({type:`connected`})},t.onclose=()=>{c=void 0,_({type:`disconnected`}),p()},t.onerror=()=>{},t.onmessage=e=>{m(JSON.parse(typeof e.data==`string`?e.data:String(e.data)))}}var f=3e3;function p(){u!==void 0&&(l=setTimeout(()=>{u!==void 0&&d(u)},f))}function m(e){if(h(e)){e.method===`state_sync`?(a(e.state),_({type:`state`,state:s()})):(o(e.patch),_({type:`patch`,patch:e.patch}));return}typeof e==`object`&&e&&`type`in e&&(e.type===`result`&&`result`in e&&typeof e.result==`object`&&e.result!==null&&`content`in e.result&&typeof e.result.content==`string`&&`isError`in e.result&&typeof e.result.isError==`boolean`?_({type:`actionResult`,id:``,result:{content:e.result.content,isError:e.result.isError}}):e.type===`error`&&`message`in e&&typeof e.message==`string`&&_({type:`actionError`,id:``,message:e.message}))}function h(e){if(typeof e!=`object`||!e||!(`method`in e))return!1;let t=e.method;return typeof t==`string`&&(t===`state_sync`||t===`state_update`)}var g=new Set;function _(e){let t=JSON.stringify(e);for(let e of g)try{e.postMessage(t)}catch{}}function v(e){switch(e.type){case`init`:d(e.url);break;case`action`:c?.readyState===WebSocket.OPEN&&c.send(JSON.stringify(e.action));break;case`getState`:_({type:`state`,state:s()})}}function y(e){if(typeof e!=`object`||!e||!(`type`in e))return!1;let t=e.type;return typeof t==`string`&&(t===`init`||t===`action`||t===`getState`)}return typeof self<`u`&&self.addEventListener(`connect`,e=>{let t=e.ports[0];if(t!==void 0){g.add(t);try{t.postMessage(JSON.stringify({type:`state`,state:s()}))}catch{}t.onmessage=e=>{let t=JSON.parse(typeof e.data==`string`?e.data:String(e.data));y(t)&&v(t)}}}),e.agents=t,e.applyPatch=o,e.applyStateSync=a,e.dms=i,e.getStateSnapshot=s,e.messages=r,e.rooms=n,e})({});
1
+ var AgentCommsMeshWorker=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e){return Array.isArray(e)?e:e==null?[]:[e]}var n=class extends Error{constructor(...e){super(...e),this.name=`AbortError`}};function r(e){let t=Promise.resolve();return(...n)=>t=t.catch(()=>{}).then(()=>e(...n))}var i=class{index=BigInt(1);generate(){let e=this.index.toString(36);return this.index++,e}};function a(e){return!e||typeof e!=`object`?!1:`next`in e&&typeof e.next==`function`&&Symbol.asyncIterator in e&&typeof e[Symbol.asyncIterator]==`function`}var o=Symbol.asyncDispose??Symbol.for(`asyncDispose`),s=class{isDone=!1;isExecuteComplete=!1;cleanup;next;constructor(e,t){this.cleanup=t,this.next=r(async()=>{if(this.isDone)return{done:!0,value:void 0};let t;try{let t=await e();return t.done&&(this.isDone=!0),t}catch(e){throw t={value:e},this.isDone=!0,e}finally{this.isDone&&!this.isExecuteComplete&&(this.isExecuteComplete=!0,await this.cleanup(t?{kind:`error`,error:t.value}:{kind:`success`}))}})}async return(e){return this.isDone=!0,this.isExecuteComplete||(this.isExecuteComplete=!0,await this.cleanup({kind:`cancelled`})),{done:!0,value:e}}async throw(e){throw this.isDone=!0,this.isExecuteComplete||(this.isExecuteComplete=!0,await this.cleanup({kind:`cancelled`,error:e})),e}async[o](){this.isDone=!0,this.isExecuteComplete||(this.isExecuteComplete=!0,await this.cleanup({kind:`cancelled`}))}[Symbol.asyncIterator](){return this}};function c(e){return JSON.stringify(e)}function l(e){for(let t of Object.values(e))if(t!==void 0)return!0;return!1}function u(e){if(!e)return!1;let t=typeof e;return t===`object`||t===`function`}var d=new WeakMap;function f(e,t,{bind:n=!0}={}){let r=Reflect.get(e,t);if(!n||typeof r!=`function`)return r;let i=d.get(r);i||d.set(r,i=new WeakMap);let a=i.get(e);return a||i.set(e,a=r.bind(e)),a}var p=class{items=[];pendingPulls=[];closed;push(e){if(this.closed)throw this.closed.reason;let t=this.pendingPulls.shift();t?t[0](e):this.items.push(e)}async pull(){if(this.items.length>0)return this.items.shift();if(this.closed)throw this.closed.reason;return new Promise((e,t)=>{this.pendingPulls.push([e,t])})}close(e){this.closed||(e??=new n(`Queue was closed.`),this.closed={reason:e},this.pendingPulls.forEach(([,t])=>t(e)),this.pendingPulls.length=0)}abort(e){e??=new n(`Queue was aborted.`),this.items.length=0,this.close(e)}};function m(e,{signal:t}={}){return new Promise((n,r)=>{if(t?.aborted){r(t.reason);return}let i=null,a=setTimeout(()=>{i&&t?.removeEventListener(`abort`,i),n()},e);t&&t.addEventListener(`abort`,i=()=>{clearTimeout(a),r(t?.reason)},{once:!0})})}var h=/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/g;function g(e){try{return encodeURIComponent(e)}catch{return encodeURIComponent(e.replace(h,`�`))}}function _(e){if(!e.includes(`%`))return e;try{return decodeURIComponent(e)}catch{return e}}function ee(e){return e[0]??{}}async function te(e){return typeof e.bytes==`function`?e.bytes():new Uint8Array(await e.arrayBuffer())}function ne(e){return typeof e==`string`?e:e instanceof ArrayBuffer?new Uint8Array(e):Array.isArray(e)?ie(e):e instanceof Uint8Array?e:new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}function re(e){return typeof e==`string`?new TextEncoder().encode(e):e instanceof ArrayBuffer?new Uint8Array(e):e instanceof Uint8Array?e:new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}function ie(e){let t=e.map(re),n=t.reduce((e,t)=>e+t.byteLength,0),r=new Uint8Array(n),i=0;for(let e of t)r.set(e,i),i+=e.byteLength;return r}var v=`orpc`;function ae(e){return e instanceof Error&&e.name.includes(`Abort`)}Object.getPrototypeOf(async function*(){}).constructor;function y(e){let t;return()=>{if(t)return t.result;let n=e();return t={result:n},n}}function oe(e){return`/${e.map(encodeURIComponent).join(`/`)}`}var se=Symbol.for(`ORPC_TRACER`);function b(){return globalThis[se]}function ce(e){let t=b();if(t)return typeof e==`string`?t.startSpan(e):t.startSpan(e.name,e.parent)}function x(e,t){e&&e.recordException(ae(t)?`info`:`error`,le(t))}function le(e){if(e instanceof Error){let t={message:e.message,name:e.name,stack:e.stack};return`code`in e&&(typeof e.code==`string`||typeof e.code==`number`)&&(t.code=e.code),t}return{message:String(e)}}async function S(e,t){let n=b();if(!n)return t();let r=typeof e==`string`?e:e.name,i=typeof e==`string`?void 0:e.parent;return n.startActiveSpan(r,i,async e=>{try{return await t(e)}catch(t){throw x(e,t),t}finally{e.end()}})}function C(e,t){let n=b();return!e||!n?t():n.withActiveSpan(e,t)}function w(e,{runWith:t,mapResult:n,mapError:r,onError:i,onFinish:a}){t??=e=>e();let o;return new s(async()=>{try{let r;try{r=await t(()=>e.next()),o=r.done}catch(e){throw o=!0,e}return n?await n(r):r}catch(e){throw await i?.(e),r?await r(e):e}},async n=>{try{if(!o)try{await t(async()=>e.return?.())}catch(e){throw await i?.(e),e}}finally{await a?.()}})}function ue(e,t){let n=y(()=>ce(e));return w(t,{runWith:e=>C(n(),e),mapResult(e){return n()?.addEvent(e.done?`completed`:`yielded`),e},onError(e){x(n(),e)},onFinish(){n()?.end()}})}function T(e,...t){return typeof e==`function`?e(...t):e}function E(e,t){return new Proxy(typeof e==`function`?t:e,{get(n,r){return f(r in t?t:T(e),r)},has(n,r){return Reflect.has(t,r)||Reflect.has(T(e),r)}})}function*de(e){if(!u(e))return;let t=Object.getPrototypeOf(e);for(;t!=null;)t.constructor&&(yield t.constructor),t=Object.getPrototypeOf(t)}function D(e){if(!e||typeof e!=`object`)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||!t||!t.constructor}var fe=(()=>{let e=function(){};return e.prototype=Object.create(null),Object.freeze(e.prototype),e})();function pe(){let e={};return e.promise=new Promise((t,n)=>{e.resolve=t,e.reject=n}),e}function me(e,{runWith:t,mapResult:n,mapError:r,onError:i,onFinish:a}){t??=e=>e();let o=y(()=>e.getReader()),s=y(async()=>a?.());return new ReadableStream({async pull(e){let a;try{let e=await t(()=>o().read());a=n?await n(e):e}catch(t){try{await i?.(t),e.error(r?await r(t):t)}finally{await s()}return}a.done?(e.close(),await s()):e.enqueue(a.value)},async cancel(e){try{try{await t(()=>o().cancel(e))}catch(e){throw await i?.(e),e}}finally{await s()}}})}function O(e,t){let n=y(()=>ce(e));return me(t,{runWith:e=>C(n(),e),mapResult(e){return n()?.addEvent(e.done?`closed`:`enqueued`),e},onError(e){x(n(),e)},onFinish(){n()?.end()}})}function k(e,t,n){if(!e?.length)return n(t);let r=(t,i)=>{let a=e[i];return a?a({...t,next:(e=t)=>r(e,i+1)}):n(t)};return r(t,0)}function he(e){let t=e.length,n=new Map;for(let r=0;r<t;r++){let t=e[r],i=n.get(t.name);i===void 0?n.set(t.name,[r]):i.push(r)}let r=Array.from({length:t},()=>new Set);for(let i=0;i<t;i++){let t=e[i],a=t.before;if(a!==void 0)for(let e of a){let t=n.get(e);if(t!==void 0)for(let e of t){let t=r[e];t!==void 0&&t.add(i)}}let o=t.after;if(o!==void 0){let e=r[i];if(e!==void 0)for(let t of o){let r=n.get(t);if(r!==void 0)for(let t of r)e.add(t)}}}let i=[],a=new Set,o=new Set;function s(t){if(o.has(t))return;if(a.has(t)){let n=e[t],r=n===void 0?`unknown`:n.name;throw Error(`Circular dependency detected involving plugin "${r}"`)}a.add(t);let n=r[t];if(n!==void 0)for(let e of n)s(e);a.delete(t),o.add(t);let c=e[t];c!==void 0&&i.push(c)}for(let e=0;e<t;e++)s(e);return i}async function ge(e,t){if(!e)return t();e.throwIfAborted();let{promise:n,reject:r,resolve:i}=pe(),a;e.addEventListener(`abort`,a=()=>{r(e.reason),a=void 0});try{return t().then(i,r),await n}finally{a&&e.removeEventListener(`abort`,a)}}var A=class extends TypeError{},j=class extends Error{constructor(e,t={}){super(t?.message??`Error Event`,t),this.data=e}},_e=/\r\n|[\n\r]/;function ve(e){return _e.test(e)}function ye(e){if(ve(e))throw new A(`Event's id must not contain a carriage return or newline character`)}function be(e){if(!Number.isInteger(e)||e<0)throw new A(`Event's retry must be a integer and >= 0`)}function xe(e){if(ve(e))throw new A(`Event's comment must not contain a carriage return or newline character`)}var M=Symbol.for(`STANDARD_SERVER_EVENT_META`),Se=Symbol.for(`STANDARD_SERVER_EVENT_SOURCE`);function N(e,t){let n;if(t.id!==void 0&&(ye(t.id),n??={},n.id=t.id),t.retry!==void 0&&(be(t.retry),n??={},n.retry=t.retry),t.comments!==void 0){for(let e of t.comments)xe(e);n??={},n.comments=t.comments}return n?new Proxy(e,{get(e,t,r){return t===Se?e:t===M?n:f(e,t)}}):e}function Ce(e){if(!u(e))return[e,void 0];let t=e[M];return[e[Se]??e,t]}function P(e){if(u(e))return e[M]}function we(e,t=`inline`){return`${t}; filename="${e.replace(/[^\x20-\x7E]/g,`_`).replace(/[\\"]/g,`\\$&`)}"; filename*=utf-8''${g(e).replace(/['()*]/g,e=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`).replace(/%(7C|60|5E)/g,(e,t)=>String.fromCharCode(Number.parseInt(t,16)))}`}function Te(e){let t=e.match(/(?:^|;)\s*filename\*=([^;]*)/i)?.[1]?.trim(),n=t?.match(/^([^']*)'[^']*'(.*)$/);if(n){let[,e=``,t=``]=n;if(/^(?:utf-8|us-ascii)$/i.test(e))return _(t)}else if(t)return _(t);let r=e.match(/(?:^|;)\s*filename=(?:"((?:\\.|[^"\\])*)"|([^";]*))/i);return r?.[1]===void 0?r?.[2]?.trim()||void 0:r[1].replace(/\\(.)/g,`$1`)}function F(e){if(typeof e==`string`||e===void 0)return e;if(e.length!==0)return e.join(`, `)}function Ee(e,n){let r={...e,...n};for(let[i,a]of Object.entries(n)){if(!Object.hasOwn(e,i))continue;let n=e[i];r[i]=n===void 0||a===void 0?n??a:[...t(n),...t(a)]}return r}function De(e){let t=e.indexOf(`#`),n=e.indexOf(`?`),r=n!==-1&&(t===-1||n<t),i=r?n:t===-1?e.length:t,a=t===-1?e.length:t;return[e.slice(0,i),r?e.slice(n,a):void 0,t===-1?void 0:e.slice(t)]}function Oe(e){return u(e)?Object.values(e).every(e=>e===void 0||typeof e==`string`||Array.isArray(e)&&e.every(e=>typeof e==`string`)):!1}function ke(e){return Number.isInteger(e)}var Ae={BAD_REQUEST:400,UNAUTHORIZED:401,PAYMENT_REQUIRED:402,FORBIDDEN:403,NOT_FOUND:404,METHOD_NOT_SUPPORTED:405,NOT_ACCEPTABLE:406,TIMEOUT:408,CONFLICT:409,GONE:410,PRECONDITION_FAILED:412,PAYLOAD_TOO_LARGE:413,UNSUPPORTED_MEDIA_TYPE:415,UNPROCESSABLE_CONTENT:422,PRECONDITION_REQUIRED:428,TOO_MANY_REQUESTS:429,CLIENT_CLOSED_REQUEST:499,INTERNAL_SERVER_ERROR:500,NOT_IMPLEMENTED:501,BAD_GATEWAY:502,SERVICE_UNAVAILABLE:503,GATEWAY_TIMEOUT:504},I,L=class e extends Error{static{let t=Symbol.for(`ORPC_ERROR_CONSTRUCTORS`);globalThis[t]??=new WeakSet,I=globalThis[t],I.add(e)}name=`ORPCError`;defined=!1;code;data;constructor(e,...t){let n=ee(t),r=n.message??e.split(`_`).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(` `);super(r,n),this.code=e,this.data=n.data}toJSON(){return{defined:this.defined,code:this.code,message:this.message,data:this.data}}static[Symbol.hasInstance](e){if(!I.has(this))return super[Symbol.hasInstance](e);for(let t of de(e))if(I.has(t))return!0;return!1}},je=class extends Error{name=`MalformedResponseError`;response;constructor(e){super(e.message,e),this.response=e.response}};function Me(e){return e instanceof L?e:new L(`INTERNAL_SERVER_ERROR`,{cause:e})}function R(e){if(!D(e))return!1;let t=[`defined`,`code`,`message`,`data`];return!Object.keys(e).some(e=>!t.includes(e))&&`defined`in e&&typeof e.defined==`boolean`&&`code`in e&&typeof e.code==`string`&&`message`in e&&typeof e.message==`string`}function z(e,t={}){let n=new L(e.code,{...e,...t});return n.defined=e.defined,n}function B(e){let t=new L(`MALFORMED_ORPC_RESPONSE`,{message:e.message??Fe(e.response),data:e.response});return t.cause=new je({...e,message:t.message}),t}var Ne=1,Pe=256;function V(e){return e.length>=Ne&&e.length<=Pe}function Fe(e){return typeof e.body==`string`&&V(e.body)?e.body:D(e.body)&&typeof e.body.message==`string`&&V(e.body.message)?e.body.message:(Object.entries(Ae).find(([,t])=>t===e.status)?.[0])?.split(`_`).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(` `)}function H(e,{mapResult:t,mapError:n,...r}){return w(e,{...r,mapResult:t&&(async e=>{let n=await t(e);if(n.value!==e.value){let t=P(e.value);if(t&&u(n.value))return{done:n.done,value:N(n.value,t)}}return n}),mapError:n&&(async e=>{let t=await n(e);if(t!==e){let n=P(e);if(n&&u(t))return N(t,n)}return t})})}var Ie=/^\/([\s\S]*)\/([a-z]*)$/,U={undefined:{condition(e){return e===void 0},serialize(){return null},deserialize(){},isTerminal:!0},bigint:{condition(e){return typeof e==`bigint`},serialize(e){return e.toString()},deserialize(e){return BigInt(e)},isTerminal:!0},date:{condition(e){return e instanceof Date},serialize(e){return Number.isNaN(e.getTime())?null:e.toISOString()},deserialize(e){return new Date(e??`Invalid Date`)},isTerminal:!0},nan:{condition(e){return typeof e==`number`&&Number.isNaN(e)},serialize(){return null},deserialize(){return NaN},isTerminal:!0},url:{condition(e){return e instanceof URL},serialize(e){return e.toString()},deserialize(e){return new URL(e)},isTerminal:!0},regexp:{condition(e){return e instanceof RegExp},serialize(e){return e.toString()},deserialize(e){let[,t,n]=e.match(Ie);return new RegExp(t,n)},isTerminal:!0},set:{condition(e){return e instanceof Set},serialize(e){return Array.from(e)},deserialize(e){return new Set(e)}},map:{condition(e){return e instanceof Map},serialize(e){return Array.from(e.entries())},deserialize(e){return new Map(e)}}},Le=class{handlers;inlineBuiltInHandlers;handlerEntries;omitUndefinedProperties;constructor(e={}){this.omitUndefinedProperties=e.omitUndefinedProperties!==!1,this.handlers=Object.assign(new fe,U);let t=e.handlers;if(t===void 0){this.inlineBuiltInHandlers=!0;return}let n=!0,r=[];for(let e in t){let i=t[e];this.handlers[e]=i,n&&e in U&&(n=!1),n&&i!==void 0&&r.push([e,i])}if(!n){r=[];for(let e in this.handlers){let t=this.handlers[e];t!==void 0&&r.push([e,t])}}this.inlineBuiltInHandlers=n,this.handlerEntries=r}serialize(e){let t=[],n=[],r=[],i=this.serializeValue(e,[],t,n,r);return t=t.length===0?void 0:t,n.length===0?{json:i,meta:t}:{json:i,meta:t,maps:n,blobs:r}}serializeValue(e,t,n,r,i){if(this.inlineBuiltInHandlers)switch(typeof e){case`string`:case`boolean`:return e;case`number`:return Number.isNaN(e)?(n.push([`nan`,...t]),null):e;case`undefined`:return n.push([`undefined`,...t]),null;case`bigint`:return n.push([`bigint`,...t]),e.toString();case`object`:if(e===null)return e;if(e instanceof Date)return n.push([`date`,...t]),Number.isNaN(e.getTime())?null:e.toISOString();if(e instanceof URL)return n.push([`url`,...t]),e.toString();if(e instanceof RegExp)return n.push([`regexp`,...t]),e.toString();if(e instanceof Set){let a=this.serializeValue(Array.from(e),t,n,r,i);return n.push([`set`,...t]),a}if(e instanceof Map){let a=this.serializeValue(Array.from(e.entries()),t,n,r,i);return n.push([`map`,...t]),a}}let a=this.handlerEntries;if(a)for(let o=0;o<a.length;o++){let s=a[o],c=s[1];if(c.condition(e)){let a=c.serialize(e);if(c.isTerminal)return n.push([s[0],...t]),a instanceof Blob&&(r.push(t.slice()),i.push(a)),a;let o=this.serializeValue(a,t,n,r,i);return n.push([s[0],...t]),o}}if(e instanceof Blob)return r.push(t.slice()),i.push(e),e;if(Array.isArray(e)){let a=[];for(let o=0;o<e.length;o++)t.push(o),a.push(this.serializeValue(e[o],t,n,r,i)),t.pop();return a}if(D(e)){let a=new fe;for(let o in e){let s=e[o];(o!==`toJSON`||typeof s!=`function`)&&(s===void 0&&this.omitUndefinedProperties||(t.push(o),a[o]=this.serializeValue(s,t,n,r,i),t.pop()))}return a}return e}deserialize(e){let t={data:e.json};if(e.blobs?.length)for(let n=0;n<e.maps.length;n++){let r=e.maps[n],i=t,a=`data`;for(let e=0;e<r.length;e++)if(i=i[a],a=r[e],!Object.hasOwn(i,a))throw Error(`Security error: Invalid serialized data. Segment "${a}" does not exist.`);i[a]=e.blobs[n]}if(e.meta)for(let n of e.meta){let e=n[0],r=t,i=`data`;for(let e=1;e<n.length;e++)if(r=r[i],i=n[e],!Object.hasOwn(r,i))throw Error(`Security error: Invalid serialized data. Segment "${i}" does not exist.`);r[i]=this.handlers[e].deserialize(r[i])}return t.data}},Re=class{jsonSerializer;defaultSerializeOptions;constructor(e={}){this.jsonSerializer=new Le(e),this.defaultSerializeOptions=e.serialize}serialize(e,t={}){if(e===void 0||e instanceof ReadableStream||e instanceof Blob)return e;if(a(e))return H(e,{mapResult:e=>e.value===void 0?e:{done:e.done,value:this.serializeValue(e.value,!1)},mapError:e=>new j(this.serializeValue(Me(e).toJSON(),!1),{cause:e})});let n=t.useFormDataForBlobFields??this.defaultSerializeOptions?.useFormDataForBlobFields??!0;return this.serializeValue(e,n)}serializeValue(e,t){let{json:n,meta:r,maps:i,blobs:a}=this.jsonSerializer.serialize(e);if(!t||!a?.length)return{json:n,meta:r};let o=new FormData;return o.set(`data`,c({json:n,meta:r,maps:i})),a.forEach((e,t)=>{o.set(t.toString(),e)}),o}deserialize(e){return e===void 0||e instanceof ReadableStream||e instanceof Blob?e:a(e)?H(e,{mapResult:e=>e.value===void 0?e:{done:e.done,value:this.deserializeValue(e.value)},mapError:e=>{if(!(e instanceof j))return e;let t=this.deserializeValue(e.data);return R(t)?z(t,{cause:e}):new j(t,{cause:e})}}):this.deserializeValue(e)}deserializeValue(e){if(!(e instanceof FormData))return this.jsonSerializer.deserialize(e);let t=JSON.parse(e.get(`data`)),n=[];for(let[t,r]of e)r instanceof Blob&&(n[Number(t)]=r);return this.jsonSerializer.deserialize({...t,blobs:n})}},ze=new Set([`then`,`bind`,`call`,`apply`,`valueOf`,`toString`,`toJSON`]);function Be(e){return{...e,context:e.context??{}}}function Ve(e){return[e[0],Be(e[1]??{})]}function W(e,{path:n=[],...r}={}){let i=(...i)=>{let[a,o]=Ve(i);return k([...t(r.interceptors),...t(r.scoped?.interceptors)],{...o,input:a,path:n},({path:t,input:n,...r})=>e.call(t,n,r))},a=new Map;return new Proxy(i,{get(t,i){if(typeof i!=`string`||ze.has(i))return Reflect.get(t,i);let o=a.get(i);return o===void 0&&(o=W(e,{...r,path:[...n,i],scoped:r.scoped?.[i]}),a.set(i,o)),o}})}function He(e,t){return new s(async()=>{for(;;){let{json:t}=await e.pull();switch(t.event){case void 0:case`message`:{let e=t.data;return u(e)&&(e=N(e,t)),{value:e,done:!1}}case`error`:throw N(new j(t.data),t);case`close`:{let e=t.data;return u(e)&&(e=N(e,t)),{value:e,done:!0}}}}},t)}var Ue=class{constructor(e,t,n){this.iterator=e,this.messageId=t,this.send=n}isDone=!1;async cancel(){this.isDone||(this.isDone=!0,await this.iterator.return?.())}async transmit(){for(;;)try{let e=await this.iterator.next();if(this.isDone)return;e.done&&(this.isDone=!0);try{let[t,n]=Ce(e.value);await this.send({kind:`event-stream`,id:this.messageId,json:{...n,event:e.done?`close`:void 0,data:t}})}catch(e){throw await this.cancel(),e}if(this.isDone)return}catch(e){if(e instanceof j){if(!this.isDone){this.isDone=!0;let[t,n]=Ce(e);await this.send({kind:`event-stream`,id:this.messageId,json:{...n,event:`error`,data:t.data}})}return}throw this.isDone=!0,e}}};function We(e,t){return new ReadableStream({async pull(n){try{let{json:r,binary:i}=await e.pull();i&&n.enqueue(i instanceof Uint8Array?i:new Uint8Array(await i.arrayBuffer())),r.close&&(await t({kind:`success`}),n.close())}catch(e){await t({kind:`error`,error:e}),n.error(e)}},async cancel(e){await t({kind:`cancelled`,error:e})}})}var Ge=class{constructor(e,t,n){this.messageId=t,this.send=n,this.reader=e.getReader()}isDone=!1;reader;async cancel(){this.isDone||(this.isDone=!0,await this.reader.cancel())}async transmit(){for(;;)try{let e=await this.reader.read();if(this.isDone)return;e.done&&(this.isDone=!0);try{await this.send({json:{close:e.done?!0:void 0},binary:e.value,kind:`octet-stream`,id:this.messageId})}catch(e){throw await this.cancel(),e}if(this.isDone)return}catch(e){throw this.isDone=!0,e}}};function Ke(e,t){let n=F(e.json.headers?.[`content-type`]),r=F(e.json.headers?.[`standard-server`]);if(e.json.body===void 0&&e.binary===void 0){if(n===void 0&&r===`event-stream`){let e=new p;return{resolveBody:async()=>He(e,t),eventStreamMessageQueue:e}}if(n!==void 0){let e=new p;return{resolveBody:async()=>We(e,t),octetStreamMessageQueue:e}}}return{resolveBody:async()=>{let i;try{if(e.binary){if(r===`form-data`){let t={};return n!==void 0&&(t[`content-type`]=n),await new Response(e.binary,{headers:t}).formData()}let t=F(e.json.headers?.[`content-disposition`]),i=t===void 0?void 0:Te(t);return new File([e.binary],i??`blob`,{type:n??`application/octet-stream`})}if(r===`url-search-params`){if(typeof e.json.body!=`string`)throw TypeError(`Expected body to be a string for url-search-params bodyHint`);return new URLSearchParams(e.json.body)}return e.json.body}catch(e){throw i={value:e},e}finally{await t(i?{kind:`error`,error:i.value}:{kind:`success`})}}}}async function qe(e,t){if(t={...t},e instanceof ReadableStream)return t[`content-type`]??=`application/octet-stream`,{jsonBody:void 0,headers:t,binary:void 0};if(e instanceof Blob)return t[`content-type`]=e.type,t[`content-disposition`]??=we(e instanceof File?e.name??``:`blob`),Number.isFinite(e.size)&&(t[`content-length`]=e.size.toString()),{jsonBody:void 0,headers:t,binary:e};if(t[`standard-server`]=void 0,t[`content-type`]=void 0,a(e))return t[`standard-server`]=`event-stream`,{jsonBody:void 0,headers:t,binary:void 0};if(e instanceof FormData){let n=await new Response(e).blob();return t[`standard-server`]=`form-data`,t[`content-type`]=n.type,t[`content-length`]=n.size.toString(),{jsonBody:void 0,headers:t,binary:n}}return e instanceof URLSearchParams?(t[`standard-server`]=`url-search-params`,{jsonBody:e.toString(),headers:t,binary:void 0}):{jsonBody:e,headers:t,binary:void 0}}var Je=class{constructor(e){this.send=e}idGenerator=new i;requests=new Map;request(e){return new Promise((t,n)=>{let r=e.signal;r?.throwIfAborted();let i=this.idGenerator.generate(),a={resolve:t,reject:n};if(this.requests.set(i,a),r){let e=()=>{this.abortById(i,r.reason).catch(()=>{})};r.addEventListener(`abort`,e),a.removeAbortListener=()=>r.removeEventListener(`abort`,e)}this.transmitRequest(i,a,e)})}async transmitRequest(e,t,n){try{let r=await qe(n.body,n.headers);if(n.signal?.throwIfAborted(),this.requests.get(e)!==t)return;if(await this.send({id:e,kind:`request`,json:{method:n.method===`POST`?void 0:n.method,url:n.url,headers:l(r.headers)?r.headers:void 0,body:r.jsonBody},binary:r.binary}),a(n.body)){let r=new Ue(n.body,e,this.send);this.requests.get(e)===t?(t.eventStreamTransmitter=r,await r.transmit().catch(n=>{if(t.eventStreamTransmitter)return this.abortById(e,n)})):await r.cancel()}else if(n.body instanceof ReadableStream){let r=new Ge(n.body,e,this.send);this.requests.get(e)===t?(t.octetStreamTransmitter=r,await r.transmit().catch(n=>{if(t.octetStreamTransmitter)return this.abortById(e,n)})):await r.cancel()}}catch(t){await this.closeById(e,t)}}async message(e){let t=e.id,r=this.requests.get(t);if(!r)return;if(e.kind===`stream/cancel`){let e=Promise.all([r.eventStreamTransmitter?.cancel(),r.octetStreamTransmitter?.cancel()]);r.eventStreamTransmitter=void 0,r.octetStreamTransmitter=void 0,await e;return}if(e.kind===`cancel`){await this.closeById(t,new n(`Server canceled the request`));return}if(e.kind===`event-stream`){r.eventStreamMessageQueue?.push(e);return}if(e.kind===`octet-stream`){r.octetStreamMessageQueue?.push(e);return}if(!r.resolve)return;let i=r.resolve;r.resolve=void 0;try{let n=Ke(e,async e=>{e.kind===`cancelled`?await this.abortById(t,e.error):(r.eventStreamMessageQueue||r.octetStreamMessageQueue)&&await this.closeById(t,e.error)});r.eventStreamMessageQueue=n.eventStreamMessageQueue,r.octetStreamMessageQueue=n.octetStreamMessageQueue,i({headers:e.json.headers??{},status:e.json.status??200,resolveBody:n.resolveBody}),r.reject=void 0,!r.eventStreamMessageQueue&&!r.octetStreamMessageQueue&&await this.closeById(t)}catch(e){await this.closeById(t,e)}}async close(e){e??=new n(`Peer was closed`),await Promise.all(Array.from(this.requests.keys()).map(t=>this.closeById(t,e)))}async closeById(e,t){let r=this.requests.get(e);if(!r)return;this.requests.delete(e),(r.reject||r.eventStreamMessageQueue||r.octetStreamMessageQueue)&&(t??=new n(`Request was closed`)),r.reject?.(t),r.resolve=void 0,r.reject=void 0,r.eventStreamMessageQueue?.close(t),r.octetStreamMessageQueue?.close(t),r.eventStreamMessageQueue=void 0,r.octetStreamMessageQueue=void 0;let i=[r.eventStreamTransmitter?.cancel(),r.octetStreamTransmitter?.cancel()];r.eventStreamTransmitter=void 0,r.octetStreamTransmitter=void 0,r.removeAbortListener?.(),r.removeAbortListener=void 0,await Promise.all(i)}async abortById(e,t){let r=this.requests.get(e);if(!r)return;this.requests.delete(e),t??=new n(`Request was aborted`),r.reject?.(t),r.resolve=void 0,r.reject=void 0,r.eventStreamMessageQueue?.abort(t),r.octetStreamMessageQueue?.abort(t),r.eventStreamMessageQueue=void 0,r.octetStreamMessageQueue=void 0;let i=[this.send({id:e,kind:`cancel`}),r.eventStreamTransmitter?.cancel(),r.octetStreamTransmitter?.cancel()];r.eventStreamTransmitter=void 0,r.octetStreamTransmitter=void 0,r.removeAbortListener?.(),r.removeAbortListener=void 0,await Promise.all(i)}};function G(e){return!(!u(e)||typeof e.id!=`string`||typeof e.kind!=`string`||e.binary!==void 0&&!(e.binary instanceof Uint8Array)&&!(e.binary instanceof Blob))}function Ye(e){return!(e.kind!==`response`||!u(e.json)||e.json.status!==void 0&&!ke(e.json.status)||e.json.headers!==void 0&&!Oe(e.json.headers))}function Xe(e){return e.kind===`cancel`&&e.json===void 0&&e.binary===void 0}function Ze(e){return!(e.kind!==`event-stream`||e.binary!==void 0||!u(e.json)||e.json.id!==void 0&&typeof e.json.id!=`string`||e.json.event!==void 0&&e.json.event!==`message`&&e.json.event!==`error`&&e.json.event!==`close`||e.json.retry!==void 0&&!Number.isFinite(e.json.retry)||e.json.comments!==void 0&&!(Array.isArray(e.json.comments)&&e.json.comments.every(e=>typeof e==`string`)))}function Qe(e){return e.kind===`octet-stream`&&u(e.json)&&(e.json.close===void 0||typeof e.json.close==`boolean`)}function $e(e){return e.kind===`stream/cancel`&&e.json===void 0&&e.binary===void 0}function et(e){return Ye(e)||Xe(e)||Ze(e)||Qe(e)||$e(e)}var tt=255,nt=new TextEncoder,rt=new TextDecoder;async function it(e,t={}){if(e.binary===void 0){let n=c(e);return t.prefix?t.prefix+n:n}let n=c({...e,binary:void 0}),r=nt.encode(t.prefix?t.prefix+n:n),i=e.binary instanceof Blob?new Uint8Array(await e.binary.arrayBuffer()):e.binary,a=new Uint8Array(r.length+1+i.length);return a.set(r,0),a[r.length]=tt,a.set(i,r.length+1),a}function at(e,t={}){try{if(typeof e==`string`){if(t.prefix){if(!e.startsWith(t.prefix))return{matched:!1};e=e.slice(t.prefix.length)}let n=JSON.parse(e);return G(n)?{matched:!0,message:n}:{matched:!1}}if(t.prefix){let n=nt.encode(t.prefix);for(let t=0;t<n.length;t++)if(e[t]!==n[t])return{matched:!1};e=e.subarray(n.length)}let n=e.indexOf(tt);if(n===-1){let t=JSON.parse(rt.decode(e));return G(t)?{matched:!0,message:t}:{matched:!1}}let r=e.subarray(0,n),i=e.subarray(n+1),a=JSON.parse(rt.decode(r));return G(a)?(a.binary=i,{matched:!0,message:a}):{matched:!1}}catch{return{matched:!1}}}function ot(e){let t=Object.create(null);return e.forEach((e,n)=>{Array.isArray(t[n])?t[n].push(e):t[n]===void 0?t[n]=e:t[n]=[t[n],e]}),t}var st=class{name=`~composite`;plugins;constructor(e=[]){this.plugins=he(e)}init(e){for(let t of this.plugins)t.init&&(e=t.init(e));return e}},ct=class{constructor(e,t,n={}){this.codec=e,this.transport=t,n=new st(n.plugins).init(n),this.interceptors=n.interceptors,this.transportInterceptors=n.transportInterceptors}interceptors;transportInterceptors;call(e,t,n){return S(`${v}.${e.join(`/`)}`,r=>(r?.setAttribute(`rpc.system`,v),r?.setAttribute(`rpc.method`,e.join(`.`)),b()&&a(t)?t=E(t,ue(`consume_async_iterator_object_input`,t)):b()&&t instanceof ReadableStream&&(t=E(t,O(`consume_octet_stream_input`,t))),k(this.interceptors,{...n,path:e,input:t},async({path:e,input:t,...n})=>{let i=b(),o=i?.getActiveSpan()??r,s=await S({name:`encode_input`,parent:o},()=>this.codec.encodeInput(t,e,n));if(o&&i?.inject){let e={...s.headers};i.inject(o,e),s={...s,headers:e}}let c=await k(this.transportInterceptors,{...n,path:e,request:s},({path:e,request:t,...n})=>S({name:`send_request`,parent:i?.getActiveSpan()??o},()=>this.transport.send(t,e,n))),l=await S({name:`decode_response`,parent:o},()=>this.codec.decodeResponse(c,e,n));if(l.kind===`error`)throw l.error;let u=l.output;return b()&&a(u)?E(u,ue(`consume_async_iterator_object_output`,u)):b()&&u instanceof ReadableStream?E(u,O(`consume_octet_stream_output`,u)):u})))}},lt=/\/$/,ut=class{baseUrl;maxUrlLength;fallbackMethod;expectedMethod;headers;serializer;constructor(e){this.baseUrl=e.url??`/`,this.maxUrlLength=e.maxUrlLength??2083,this.fallbackMethod=e.fallbackMethod??`POST`,this.expectedMethod=e.method??this.fallbackMethod,this.headers=e.headers??{},this.serializer=e.serializer??new Re}async encodeInput(e,t,n){let r=dt(await T(this.headers,n,t,e));n.lastEventId!==void 0&&(r=Ee(r,{"last-event-id":n.lastEventId}));let i=await T(this.expectedMethod,n,t,e),[o,s,l]=De(await T(this.baseUrl,n,t,e)),u=`${o.replace(lt,``)}${oe(t)}`,d=this.serializer.serialize(e);if(i===`GET`&&!(d instanceof Blob)&&!(d instanceof ReadableStream)&&!(d instanceof FormData)&&!a(d)){let a=await T(this.maxUrlLength,n,t,e),o=new URLSearchParams(s);o.append(`data`,c(d)??``);let f=`${u}?${o}${l??``}`;if(f.length<=a)return{body:void 0,method:i,headers:r,url:f,signal:n.signal}}return{url:`${u}${s??``}${l??``}`,method:i===`GET`?this.fallbackMethod:i,headers:r,body:d,signal:n.signal}}async decodeResponse(e){let t=e.status<400,n=await e.resolveBody(),r=await(async()=>{try{return this.serializer.deserialize(n)}catch(t){throw B({message:`Invalid RPC response format.`,response:{status:e.status,headers:e.headers,body:n},cause:t})}})();return t?{kind:`output`,output:r}:R(r)?{kind:`error`,error:z(r)}:{kind:`error`,error:B({response:{headers:e.headers,status:e.status,body:n}})}}};function dt(e){return typeof e.forEach==`function`?ot(e):e}var ft=0,pt=1,mt=class{connect;reconnectEnabled;reconnectDelay;reconnectMaxAttempt;reconnectOnCloseEnabled;reconnectOnCloseDelay;encodePeerMessageOptions;decodePeerMessageOptions;constructor(e){this.connect=e.connect,this.reconnectEnabled=e.reconnect?.enabled??!1,this.reconnectDelay=e.reconnect?.delay??(e=>e.attempt===1?0:2e3),this.reconnectMaxAttempt=e.reconnect?.maxAttempt??1/0,this.reconnectOnCloseEnabled=this.reconnectEnabled&&(e.reconnect?.onClose?.enabled??!1),this.reconnectOnCloseDelay=e.reconnect?.onClose?.delay??0,this.encodePeerMessageOptions=e.encodePeerMessage,this.decodePeerMessageOptions=e.decodePeerMessage,e.connectOnInit&&this.getConnectedPeer().catch(()=>{})}async send(e,t,n){return(await ge(e.signal,()=>this.getConnectedPeer())).request(e)}totalAttempt=0;attempt=0;current;async getConnectedPeer(){let e=this.current,t=await e;if(t&&(!this.reconnectEnabled||t.websocket.readyState===pt))return this.attempt=0,t.peer;if(e!==this.current)return this.getConnectedPeer();if(this.attempt>=this.reconnectMaxAttempt)throw new n(`WebSocket reconnect failed after ${this.attempt} attempt(s)`);return this.current=(async()=>{this.totalAttempt+=1,this.attempt+=1;let e={totalAttempt:this.totalAttempt,attempt:this.attempt};await m(this.reconnectDelay(e));let t=await this.connect(e),i=new Je(async e=>{let n=await it(e,this.encodePeerMessageOptions);return t.send(n)}),a;return t.readyState===ft&&(a=pe(),t.addEventListener(`open`,()=>{a?.resolve()})),t.addEventListener(`message`,r(async e=>{let t=at(e.data instanceof Blob?await te(e.data):ne(e.data),this.decodePeerMessageOptions);t.matched&&et(t.message)&&i.message(t.message)})),t.addEventListener(`close`,async e=>{a?.resolve(),this.reconnectOnCloseEnabled&&m(this.reconnectOnCloseDelay).then(()=>this.getConnectedPeer()).catch(()=>{});let t=new n(`WebSocket closed (code ${e.code}: ${e.reason})`);await i.close(t)}),await a?.promise,a=void 0,{websocket:t,peer:i}})().catch(e=>{if(!this.reconnectEnabled)throw e}),this.getConnectedPeer()}},ht=class extends ct{constructor(e){let t=new ut(e),n=new mt(e);super(t,n,e)}},gt=class{defaultRetry;defaultRetryDelay;defaultShouldRetry;defaultOnRetry;name=`~retry`;constructor(e={}){this.defaultRetry=e.default?.retry??0,this.defaultRetryDelay=e.default?.retryDelay??(e=>e.lastEventRetry??2e3),this.defaultShouldRetry=e.default?.shouldRetry??!0,this.defaultOnRetry=e.default?.onRetry}init(e){let n=async e=>{let{next:t,...n}=e,r=await T(n.context.retry??this.defaultRetry,n),i=n.context.retryDelay??this.defaultRetryDelay,o=n.context.shouldRetry??this.defaultShouldRetry,c=n.context.onRetry??this.defaultOnRetry;if(r<=0)return t(n);let l=n.lastEventId,u,d,f=1,p=async e=>{let a=e;for(;;){let e={...n,lastEventId:l};if(a){if(f>r)throw a.error;let t={...e,attempt:f,error:a.error,lastEventRetry:u};if(!await T(o,t))throw a.error;d=c?.(t)}try{return a&&(await m(await T(i,{...e,attempt:f,error:a.error,lastEventRetry:u}),{signal:e.signal}),f++),a=void 0,await t(e)}catch(t){if(a={error:t},e.signal?.aborted)throw t}finally{d?.(!a),d=void 0}}},h=await p();if(!a(h))return h;let g=h,_=!1;return E(()=>g,new s(async()=>{for(;;)try{let e=await g.next(),t=P(e.value);return l=t?.id??l,u=t?.retry??u,e}catch(e){let t=P(e);l=t?.id??l,u=t?.retry??u;let n=await p({error:e});if(!a(n))throw TypeError(`RetryLinkPlugin: Expected an AsyncIteratorObject, got a different type.`);if(g=n,_)throw await g.return?.(),e}},async({kind:e})=>{_=!0,e===`cancelled`&&await g.return?.()}))};return{...e,interceptors:[n,...t(e.interceptors)]}}},K=new Map,q=new Map,J=new Map,Y=new Map;function _t(e){for(let[t,n]of Object.entries(e.agents))K.set(t,n);for(let[t,n]of Object.entries(e.rooms))q.set(t,n);for(let[t,n]of Object.entries(e.messages))J.set(t,n);for(let[t,n]of Object.entries(e.dms))Y.set(t,n)}function vt(e){switch(e.type){case`agent_upsert`:K.set(e.agent.id,e.agent);break;case`agent_offline`:{let t=K.get(e.agentId);t&&(t.status=`offline`,K.set(e.agentId,t));break}case`room_upsert`:q.set(e.room.id,e.room);break;case`room_delete`:q.delete(e.roomId);break;case`message_add`:{let t=J.get(e.roomId)??[];t.push(e.message),J.set(e.roomId,t);break}case`dm_add`:{let t=Y.get(e.key)??[];t.push(e.message),Y.set(e.key,t);break}case`delivery`:break;case`message_read`:if(e.room!==void 0){let t=J.get(e.room);if(t){let n=t.find(t=>t.id===e.messageId);n&&!n.readBy.includes(e.readBy)&&n.readBy.push(e.readBy)}}else for(let[,t]of Y){let n=t.find(t=>t.id===e.messageId);n&&!n.readBy.includes(e.readBy)&&n.readBy.push(e.readBy)}}}function X(){return{agents:[...K.values()],rooms:[...q.values()]}}var yt,Z=0;function bt(e){return e.replace(/\/ws\/mesh$/,`/ws/mesh-orpc`)}var xt=1e3,St=3e4;function Ct(e){let t=bt(e),n=W(new ht({connect:async()=>{let e=new WebSocket(t);return e.addEventListener(`open`,()=>{$({type:`connected`})}),e.addEventListener(`close`,()=>{$({type:`disconnected`})}),new Promise((t,n)=>{e.addEventListener(`open`,()=>{t(e)},{once:!0}),e.addEventListener(`error`,n,{once:!0})})},reconnect:{enabled:!0,delay:e=>Math.min(xt*2**e.attempt,St)},plugins:[new gt]}));yt=n,wt(n,++Z)}async function wt(e,t){let n;for(;t===Z;)try{let r=await e.subscribeEvents(n===void 0?{}:{lastEventId:n});for await(let e of r){if(t!==Z)return;let r=P(e);switch(r?.id!==void 0&&(n=r.id),e.kind){case`state_sync`:_t(e.state),$({type:`state`,state:X()});break;case`state_patch`:vt(e.patch),$({type:`patch`,patch:e.patch})}}return}catch{}}async function Tt(e,t){let n=e=>{let n=t[e];return typeof n==`string`?n:``},r=e=>{let n=t[e];return typeof n==`string`?n:void 0},i=()=>{let e=t.type;return e===`public`||e===`private`||e===`secret`?e:`public`};switch(t.action){case`send`:return e.send({target:n(`target`),content:n(`content`)});case`dm`:return e.dm({target:n(`target`),content:n(`content`)});case`join_room`:return e.joinRoom({room:n(`room`)});case`leave_room`:return e.leaveRoom({room:r(`room`)});case`create_room`:return e.createRoom({name:n(`name`),type:i(),description:r(`description`)});case`list_rooms`:return e.listRooms({});case`list_agents`:return e.listAgents({});case`read_room`:return e.readRoom({room:r(`room`)});case`destroy_room`:return e.destroyRoom({room:n(`room`)});case`invite`:return e.invite({room:n(`room`),agent:n(`agent`)});case`decline_invite`:return e.declineInvite({room:n(`room`),reason:n(`reason`)});case`kick`:return e.kick({room:n(`room`),agent:n(`agent`)});case`rename_agent`:return e.renameAgent({agent:n(`agent`),name:n(`name`)});default:return{content:`Unknown action: ${String(t.action)}`,isError:!0}}}var Q=new Set;function $(e){let t=JSON.stringify(e);for(let e of Q)try{e.postMessage(t)}catch{}}function Et(e){switch(e.type){case`init`:Ct(e.url);break;case`action`:{let t=yt;if(!t)break;let n=e.id;Tt(t,e.action).then(e=>{$({type:`actionResult`,id:n,result:e})}).catch(e=>{$({type:`actionError`,id:n,message:e instanceof Error?e.message:String(e)})});break}case`getState`:$({type:`state`,state:X()})}}function Dt(e){if(typeof e!=`object`||!e||!(`type`in e))return!1;let t=e.type;return typeof t==`string`&&(t===`init`||t===`action`||t===`getState`)}return typeof self<`u`&&self.addEventListener(`connect`,e=>{let t=e.ports[0];if(t!==void 0){Q.add(t);try{t.postMessage(JSON.stringify({type:`state`,state:X()}))}catch{}t.onmessage=e=>{let t=JSON.parse(typeof e.data==`string`?e.data:String(e.data));Dt(t)&&Et(t)}}}),e.agents=K,e.applyPatch=vt,e.applyStateSync=_t,e.connect=Ct,e.dms=Y,e.getStateSnapshot=X,e.messages=J,e.ports=Q,e.rooms=q,e})({});
@@ -1 +1 @@
1
- var e=`agent-comms-v1`,t=[{"revision":"7efa9980ba0b02137565a56208e14f7b","url":"mesh-worker.js"},{"revision":"f1ee3afb8c9e8f0d7315fd93d6457316","url":"index.html"},{"revision":"c8581eb68732d5f03e4c7af10080357a","url":"bundle.js"}].map(e=>e.url);self.addEventListener(`install`,n=>{n.waitUntil(self.caches.open(e).then(async e=>e.addAll(t)).then(async()=>self.skipWaiting()))}),self.addEventListener(`activate`,t=>{t.waitUntil(self.caches.keys().then(async t=>Promise.all(t.filter(t=>t!==e).map(async e=>self.caches.delete(e)))))});var n=200,r=300;function i(e,t){return e.method===`GET`&&t.status>=n&&t.status<r}self.addEventListener(`fetch`,t=>{if(new URL(t.request.url).pathname.startsWith(`/api/`)){t.respondWith(fetch(t.request).then(n=>{if(i(t.request,n)){let r=n.clone();self.caches.open(e).then(async e=>e.put(t.request,r))}return n}).catch(async()=>self.caches.open(e).then(async e=>e.match(t.request)).then(e=>e??new Response(`Offline`,{status:503}))));return}t.respondWith(self.caches.open(e).then(async e=>e.match(t.request)).then(async n=>n||fetch(t.request).then(n=>{if(i(t.request,n)){let r=n.clone();self.caches.open(e).then(async e=>e.put(t.request,r))}return n})))}),self.addEventListener(`push`,e=>{let t=`Agent Comms`,n=`New message`;if(e.data)try{let r=e.data.json();typeof r.title==`string`&&(t=r.title),typeof r.body==`string`&&(n=r.body)}catch{let t=e.data.text();t&&(n=t)}e.waitUntil(self.registration.showNotification(t,{body:n,data:{url:self.location.origin}}))}),self.addEventListener(`notificationclick`,e=>{e.notification.close();let t=e.notification.data,n=typeof t==`object`&&t&&`url`in t&&typeof t.url==`string`?t.url:self.location.origin;e.waitUntil(self.clients.matchAll({type:`window`,includeUncontrolled:!0}).then(async e=>{for(let t of e)if(t.url===n&&`focus`in t)return t.focus();return self.clients.openWindow(n)}))});
1
+ var e=`agent-comms-v1`,t=[{"revision":"f5ef9303cc739920f0b1e2b5aab51b99","url":"mesh-worker.js"},{"revision":"f1ee3afb8c9e8f0d7315fd93d6457316","url":"index.html"},{"revision":"c8581eb68732d5f03e4c7af10080357a","url":"bundle.js"}].map(e=>e.url);self.addEventListener(`install`,n=>{n.waitUntil(self.caches.open(e).then(async e=>e.addAll(t)).then(async()=>self.skipWaiting()))}),self.addEventListener(`activate`,t=>{t.waitUntil(self.caches.keys().then(async t=>Promise.all(t.filter(t=>t!==e).map(async e=>self.caches.delete(e)))))});var n=200,r=300;function i(e,t){return e.method===`GET`&&t.status>=n&&t.status<r}self.addEventListener(`fetch`,t=>{if(new URL(t.request.url).pathname.startsWith(`/api/`)){t.respondWith(fetch(t.request).then(n=>{if(i(t.request,n)){let r=n.clone();self.caches.open(e).then(async e=>e.put(t.request,r))}return n}).catch(async()=>self.caches.open(e).then(async e=>e.match(t.request)).then(e=>e??new Response(`Offline`,{status:503}))));return}t.respondWith(self.caches.open(e).then(async e=>e.match(t.request)).then(async n=>n||fetch(t.request).then(n=>{if(i(t.request,n)){let r=n.clone();self.caches.open(e).then(async e=>e.put(t.request,r))}return n})))}),self.addEventListener(`push`,e=>{let t=`Agent Comms`,n=`New message`;if(e.data)try{let r=e.data.json();typeof r.title==`string`&&(t=r.title),typeof r.body==`string`&&(n=r.body)}catch{let t=e.data.text();t&&(n=t)}e.waitUntil(self.registration.showNotification(t,{body:n,data:{url:self.location.origin}}))}),self.addEventListener(`notificationclick`,e=>{e.notification.close();let t=e.notification.data,n=typeof t==`object`&&t&&`url`in t&&typeof t.url==`string`?t.url:self.location.origin;e.waitUntil(self.clients.matchAll({type:`window`,includeUncontrolled:!0}).then(async e=>{for(let t of e)if(t.url===n&&`focus`in t)return t.focus();return self.clients.openWindow(n)}))});
@@ -0,0 +1,30 @@
1
+ /**
2
+ * In-memory, resumable event publisher for the web UI's subscribeEvents stream.
3
+ *
4
+ * oRPC v2 beta (`\@orpc/server`, `\@orpc/client`, `\@orpc/contract` at 2.0.0-beta.35 -- confirmed against the actual published tarballs, not just docs) ships no MemoryPublisher/EventPublisher class. This is a hand-written equivalent built on the primitives that do exist: a plain async generator (satisfies AsyncIteratorObject on its own) and withEventMeta (from `\@standard-server/core`, re-exported by `\@orpc/server`) to tag each published event with a monotonic id oRPC's own RetryLinkPlugin already knows how to read back as lastEventId on reconnect.
5
+ *
6
+ * One instance per WebServerHandle -- not a module-level singleton -- so multiple concurrent web server instances (multiple bridges each starting their own web UI) never share replay buffers.
7
+ */
8
+ import type { MeshEvent } from "./contract.js";
9
+ export interface MeshEventPublisherOptions {
10
+ /** How long a published event stays available for replay by a resuming subscriber. */
11
+ retentionMs?: number;
12
+ }
13
+ export interface MeshEventSubscribeOptions {
14
+ signal?: AbortSignal;
15
+ lastEventId?: string;
16
+ }
17
+ export declare class MeshEventPublisher {
18
+ private seq;
19
+ private readonly buffer;
20
+ private readonly listeners;
21
+ private readonly retentionMs;
22
+ constructor(options?: Readonly<MeshEventPublisherOptions>);
23
+ publish(event: MeshEvent): void;
24
+ private prune;
25
+ /**
26
+ * Replays buffered events after `lastEventId` (or every buffered event, if a resuming subscriber's `lastEventId` has already aged out of the retention window), then yields new events as they're published until `signal` aborts.
27
+ */
28
+ subscribe(options?: Readonly<MeshEventSubscribeOptions>): AsyncGenerator<MeshEvent, void, void>;
29
+ }
30
+ //# sourceMappingURL=event-publisher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-publisher.d.ts","sourceRoot":"","sources":["../../../../src/bridges/user/web/event-publisher.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAO/C,MAAM,WAAW,yBAAyB;IACxC,sFAAsF;IACtF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAUD,MAAM,WAAW,yBAAyB;IACxC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyC;IACnE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAEzB,OAAO,GAAE,QAAQ,CAAC,yBAAyB,CAAM;IAI7D,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAQ/B,OAAO,CAAC,KAAK;IAUb;;OAEG;IACI,SAAS,CACd,OAAO,GAAE,QAAQ,CAAC,yBAAyB,CAAM,GAChD,cAAc,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC;CA8CzC"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * In-memory, resumable event publisher for the web UI's subscribeEvents stream.
3
+ *
4
+ * oRPC v2 beta (`\@orpc/server`, `\@orpc/client`, `\@orpc/contract` at 2.0.0-beta.35 -- confirmed against the actual published tarballs, not just docs) ships no MemoryPublisher/EventPublisher class. This is a hand-written equivalent built on the primitives that do exist: a plain async generator (satisfies AsyncIteratorObject on its own) and withEventMeta (from `\@standard-server/core`, re-exported by `\@orpc/server`) to tag each published event with a monotonic id oRPC's own RetryLinkPlugin already knows how to read back as lastEventId on reconnect.
5
+ *
6
+ * One instance per WebServerHandle -- not a module-level singleton -- so multiple concurrent web server instances (multiple bridges each starting their own web UI) never share replay buffers.
7
+ */
8
+ import { withEventMeta } from "@orpc/server";
9
+ /** A plain function call is opaque to TS's control-flow narrowing, unlike a direct `signal?.aborted` comparison -- narrowing that across an `await` (the abort can genuinely flip mid-wait) produces a false "these types have no overlap" error at the re-check below the await. */
10
+ function isAborted(signal) {
11
+ return signal?.aborted === true;
12
+ }
13
+ const DEFAULT_RETENTION_MS = 60_000;
14
+ export class MeshEventPublisher {
15
+ seq = 0;
16
+ buffer = [];
17
+ listeners = new Set();
18
+ retentionMs;
19
+ constructor(options = {}) {
20
+ this.retentionMs = options.retentionMs ?? DEFAULT_RETENTION_MS;
21
+ }
22
+ publish(event) {
23
+ this.prune();
24
+ const id = String(++this.seq);
25
+ const tagged = withEventMeta(event, { id });
26
+ this.buffer.push({ id, event: tagged, publishedAt: Date.now() });
27
+ for (const listener of this.listeners)
28
+ listener(tagged);
29
+ }
30
+ prune() {
31
+ const cutoff = Date.now() - this.retentionMs;
32
+ while (this.buffer.length > 0 &&
33
+ (this.buffer[0]?.publishedAt ?? Infinity) < cutoff) {
34
+ this.buffer.shift();
35
+ }
36
+ }
37
+ /**
38
+ * Replays buffered events after `lastEventId` (or every buffered event, if a resuming subscriber's `lastEventId` has already aged out of the retention window), then yields new events as they're published until `signal` aborts.
39
+ */
40
+ async *subscribe(options = {}) {
41
+ const { signal, lastEventId } = options;
42
+ this.prune();
43
+ if (lastEventId !== undefined) {
44
+ const startIndex = this.buffer.findIndex((b) => b.id === lastEventId);
45
+ const replay = startIndex === -1 ? this.buffer : this.buffer.slice(startIndex + 1);
46
+ for (const buffered of replay) {
47
+ if (isAborted(signal))
48
+ return;
49
+ yield buffered.event;
50
+ }
51
+ }
52
+ const queue = [];
53
+ let wake;
54
+ const listener = (event) => {
55
+ queue.push(event);
56
+ wake?.();
57
+ };
58
+ this.listeners.add(listener);
59
+ try {
60
+ for (;;) {
61
+ if (isAborted(signal))
62
+ return;
63
+ if (queue.length === 0) {
64
+ await new Promise((resolve) => {
65
+ wake = resolve;
66
+ signal?.addEventListener("abort", () => {
67
+ resolve();
68
+ }, { once: true });
69
+ });
70
+ wake = undefined;
71
+ if (isAborted(signal))
72
+ return;
73
+ }
74
+ const next = queue.shift();
75
+ if (next !== undefined)
76
+ yield next;
77
+ }
78
+ }
79
+ finally {
80
+ this.listeners.delete(listener);
81
+ }
82
+ }
83
+ }
84
+ //# sourceMappingURL=event-publisher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-publisher.js","sourceRoot":"","sources":["../../../../src/bridges/user/web/event-publisher.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,15 @@
1
1
  /**
2
2
  * SharedWorker — browser mesh node.
3
3
  *
4
- * Runs a lightweight mesh state store connected to the server's /ws/mesh
5
- * endpoint. Maintains a local copy of all mesh state (agents, rooms,
6
- * messages, DMs) by applying state_sync and state_update patches received
7
- * over WebSocket. Exposes a postMessage API for the main thread to query
8
- * state, execute actions, and subscribe to real-time updates.
4
+ * Runs a lightweight mesh state store connected to the server's oRPC mesh endpoint. Maintains a local copy of all mesh state (agents, rooms, messages, DMs) by applying state_sync and state_patch events from the unified subscribeEvents stream. Exposes a postMessage API for the main thread to query state, execute actions, and subscribe to real-time updates -- that tab-facing postMessage protocol is unchanged by the oRPC migration; only how the worker itself talks upstream changed.
9
5
  *
10
- * Built as a separate IIFE bundle (mesh-worker.js) so the SharedWorker
11
- * runs in its own global scope independent of the main app bundle.
6
+ * Built as a separate IIFE bundle (mesh-worker.js) so the SharedWorker runs in its own global scope independent of the main app bundle.
12
7
  */
8
+ interface MessagePortLike {
9
+ postMessage: (message: unknown) => void;
10
+ close: () => void;
11
+ onmessage: ((event: MessageEvent) => void) | null;
12
+ }
13
13
  export interface AgentIdentity {
14
14
  id: string;
15
15
  name: string;
@@ -38,7 +38,7 @@ interface RoomMessage {
38
38
  room: string;
39
39
  content: string;
40
40
  timestamp: string;
41
- replyTo?: string;
41
+ replyTo?: string | undefined;
42
42
  readBy: string[];
43
43
  }
44
44
  interface DmMessage {
@@ -103,5 +103,7 @@ export declare function applyStateSync(state: SerialisedState): void;
103
103
  */
104
104
  export declare function applyPatch(patch: MeshStatePatch): void;
105
105
  export declare function getStateSnapshot(): StateSnapshot;
106
+ export declare function connect(url: string): void;
107
+ export declare const ports: Set<MessagePortLike>;
106
108
  export {};
107
109
  //# sourceMappingURL=mesh-worker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mesh-worker.d.ts","sourceRoot":"","sources":["../../../../../src/bridges/user/web/frontend/mesh-worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mesh-worker.d.ts","sourceRoot":"","sources":["../../../../../src/bridges/user/web/frontend/mesh-worker.ts"],"names":[],"mappings":"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"}