agent-comms 3.22.0 → 3.24.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 (28) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/README.md +13 -1
  4. package/dist/bridges/user/web/contract.d.ts +2 -0
  5. package/dist/bridges/user/web/contract.d.ts.map +1 -1
  6. package/dist/bridges/user/web/dist/mesh-worker.js +1 -1
  7. package/dist/bridges/user/web/dist/sw.js +1 -1
  8. package/dist/bridges/user/web/frontend/mesh-worker.d.ts +10 -8
  9. package/dist/bridges/user/web/frontend/mesh-worker.d.ts.map +1 -1
  10. package/dist/bridges/user/web/frontend/mesh-worker.js +143 -90
  11. package/dist/bridges/user/web/frontend/mesh-worker.js.map +1 -1
  12. package/dist/bridges/user/web/server.d.ts +5 -0
  13. package/dist/bridges/user/web/server.d.ts.map +1 -1
  14. package/dist/bridges/user/web/server.js +16 -3
  15. package/dist/bridges/user/web/server.js.map +1 -1
  16. package/dist/bridges/user/web/test/web-console-route.integration.test.d.ts +5 -0
  17. package/dist/bridges/user/web/test/web-console-route.integration.test.d.ts.map +1 -0
  18. package/dist/bridges/user/web/test/web-console-route.integration.test.js +112 -0
  19. package/dist/bridges/user/web/test/web-console-route.integration.test.js.map +1 -0
  20. package/dist/bridges/user/web/test/web-console-static.test.d.ts +5 -0
  21. package/dist/bridges/user/web/test/web-console-static.test.d.ts.map +1 -0
  22. package/dist/bridges/user/web/test/web-console-static.test.js +135 -0
  23. package/dist/bridges/user/web/test/web-console-static.test.js.map +1 -0
  24. package/dist/bridges/user/web/web-console-static.d.ts +21 -0
  25. package/dist/bridges/user/web/web-console-static.d.ts.map +1 -0
  26. package/dist/bridges/user/web/web-console-static.js +70 -0
  27. package/dist/bridges/user/web/web-console-static.js.map +1 -0
  28. package/package.json +1 -1
@@ -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.22.0"
18
+ "version": "3.24.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.22.0",
4
+ "version": "3.24.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.22.0-blue)](https://github.com/ExaDev/agent-comms/releases/tag/v3.22.0)
5
+ [![version](https://img.shields.io/badge/version-3.24.0-blue)](https://github.com/ExaDev/agent-comms/releases/tag/v3.24.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.
@@ -245,6 +245,18 @@ When `streamingBehavior` is absent, each bridge falls back to its existing heuri
245
245
 
246
246
  **Claude Code delivery mechanism**: Events are written to `~/.agents/bus/pending/claude-code--<cwd-slug>.jsonl`. Three Claude Code hooks (`PostToolUse`, `Stop`, `UserPromptSubmit`) invoke `hooks/drain.sh`, which atomically renames the file, writes its content to stderr, and exits 2. Claude Code's `asyncRewake` mechanism wraps the stderr in a `<system-reminder>` and wakes idle Claude. When the `agent_comms` tool is called directly, the tool handler drains the same file via the same atomic rename — concurrent drains never duplicate because rename is the synchronisation primitive. The `[STEER]` and `[FOLLOWUP]` markers and `meta.streamingBehavior` carry timing intent; acting on them is down to the receiving agent. The pi bridge honours the hint natively via `deliverAs`.
247
247
 
248
+ ## Alternate UI: wire-mesh's web-console
249
+
250
+ An agent-comms node is, underneath, already a [wire-mesh](https://github.com/ExaDev/wire-mesh) node, so it can optionally also serve wire-mesh's own generic, protocol-level `web-console` alongside its own richer dashboard — useful for anyone who wants the reference-client view of their mesh rather than agent-comms' own product UI.
251
+
252
+ This is opt-in and off by default: `web-console` isn't a dependency of this package, so there's nothing to serve unless you've built it yourself. Point `AGENT_COMMS_WEB_CONSOLE_DIST` at a locally built `web-console` `dist/` directory (`pnpm build` inside `wire-mesh/ts/packages/web-console`) before starting a bridge:
253
+
254
+ ```bash
255
+ AGENT_COMMS_WEB_CONSOLE_DIST=/path/to/wire-mesh/ts/packages/web-console/dist npx agent-comms chat
256
+ ```
257
+
258
+ The web server (whichever port `tryStartWebServer` picked for that bridge) then also answers under `/web-console/*`. When the variable is unset, or doesn't point at a directory containing an `index.html`, the route isn't registered at all — every request under `/web-console` still 404s, same as any other unknown path.
259
+
248
260
  ## Room types
249
261
 
250
262
  | Type | Discovery | Join | Read history |
@@ -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)}))});
@@ -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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"}
@@ -1,15 +1,13 @@
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
+ import { createORPCClient, getEventMeta } from "@orpc/client";
9
+ import { RPCLink } from "@orpc/client/websocket";
10
+ import { RetryLinkPlugin } from "@orpc/client/plugins";
13
11
  // ---------------------------------------------------------------------------
14
12
  // Lightweight mesh state
15
13
  // ---------------------------------------------------------------------------
@@ -96,98 +94,141 @@ export function getStateSnapshot() {
96
94
  rooms: [...rooms.values()],
97
95
  };
98
96
  }
99
- // ---------------------------------------------------------------------------
100
- // WebSocket connection to /ws/mesh
101
- // ---------------------------------------------------------------------------
102
- let ws;
103
- let reconnectTimer;
104
- let wsUrl;
105
- function connect(url) {
106
- wsUrl = url;
107
- if (reconnectTimer !== undefined) {
108
- clearTimeout(reconnectTimer);
109
- reconnectTimer = undefined;
110
- }
111
- const socket = new WebSocket(url);
112
- ws = socket;
113
- socket.onopen = () => {
114
- broadcastToPorts({ type: "connected" });
115
- };
116
- socket.onclose = () => {
117
- ws = undefined;
118
- broadcastToPorts({ type: "disconnected" });
119
- scheduleReconnect();
120
- };
121
- socket.onerror = () => {
122
- // onclose fires after this
123
- };
124
- socket.onmessage = (event) => {
125
- const raw = JSON.parse(typeof event.data === "string" ? event.data : String(event.data));
126
- handleServerMessage(raw);
127
- };
97
+ let orpcClient;
98
+ let eventPumpGeneration = 0;
99
+ function toOrpcUrl(legacyMeshUrl) {
100
+ return legacyMeshUrl.replace(/\/ws\/mesh$/, "/ws/mesh-orpc");
128
101
  }
129
- /** Delay before retrying a dropped mesh WebSocket connection. */
130
- const RECONNECT_DELAY_MS = 3000;
131
- function scheduleReconnect() {
132
- if (wsUrl === undefined)
133
- return;
134
- reconnectTimer = setTimeout(() => {
135
- if (wsUrl !== undefined)
136
- connect(wsUrl);
137
- }, RECONNECT_DELAY_MS);
102
+ /** Base delay for the reconnect backoff, doubled per attempt and capped at RECONNECT_MAX_DELAY_MS. */
103
+ const RECONNECT_BASE_DELAY_MS = 1000;
104
+ /** Upper bound on the reconnect backoff delay. */
105
+ const RECONNECT_MAX_DELAY_MS = 30_000;
106
+ export function connect(url) {
107
+ const orpcUrl = toOrpcUrl(url);
108
+ const link = new RPCLink({
109
+ connect: async () => {
110
+ const socket = new WebSocket(orpcUrl);
111
+ socket.addEventListener("open", () => {
112
+ broadcastToPorts({ type: "connected" });
113
+ });
114
+ socket.addEventListener("close", () => {
115
+ broadcastToPorts({ type: "disconnected" });
116
+ });
117
+ return new Promise((resolve, reject) => {
118
+ socket.addEventListener("open", () => {
119
+ resolve(socket);
120
+ }, { once: true });
121
+ socket.addEventListener("error", reject, { once: true });
122
+ });
123
+ },
124
+ reconnect: {
125
+ enabled: true,
126
+ delay: (info) => Math.min(RECONNECT_BASE_DELAY_MS * 2 ** info.attempt, RECONNECT_MAX_DELAY_MS),
127
+ },
128
+ plugins: [new RetryLinkPlugin()],
129
+ });
130
+ const client = createORPCClient(link);
131
+ orpcClient = client;
132
+ void pumpEvents(client, ++eventPumpGeneration);
138
133
  }
139
- function handleServerMessage(raw) {
140
- if (isMeshStateMessage(raw)) {
141
- if (raw.method === "state_sync") {
142
- applyStateSync(raw.state);
143
- broadcastToPorts({ type: "state", state: getStateSnapshot() });
134
+ /**
135
+ * Consumes the unified event stream for as long as this generation is current -- eventPumpGeneration lets a fresh connect() call (a new "init" message) abandon a stale pump loop instead of running two concurrently against the same worker state.
136
+ *
137
+ * Confirmed empirically (a real server-side socket termination, not assumed from either option's name): RetryLinkPlugin does NOT transparently resume an already-active subscribeEvents() call across a transport-level drop -- the in-flight for-await throws (an AbortError from the closed socket) instead of pausing and resuming underneath the same iterator. The outer while loop here is what actually implements resume-after-reconnect: on any thrown error it loops back and calls subscribeEvents again with lastEventId, which naturally blocks until RPCLink's own reconnect option re-establishes the underlying socket, then resumes exactly where the stream left off.
138
+ */
139
+ async function pumpEvents(client, generation) {
140
+ let lastEventId;
141
+ while (generation === eventPumpGeneration) {
142
+ try {
143
+ const events = await client.subscribeEvents(lastEventId === undefined ? {} : { lastEventId });
144
+ for await (const event of events) {
145
+ if (generation !== eventPumpGeneration)
146
+ return;
147
+ const meta = getEventMeta(event);
148
+ if (meta?.id !== undefined)
149
+ lastEventId = meta.id;
150
+ switch (event.kind) {
151
+ case "state_sync":
152
+ applyStateSync(event.state);
153
+ broadcastToPorts({ type: "state", state: getStateSnapshot() });
154
+ break;
155
+ case "state_patch":
156
+ applyPatch(event.patch);
157
+ broadcastToPorts({ type: "patch", patch: event.patch });
158
+ break;
159
+ case "delivery":
160
+ // Not yet part of the worker's tab-facing protocol -- delivery events still flow to tabs over the separate legacy chat socket (main.tsx's CommsWs) until that cutover lands.
161
+ break;
162
+ }
163
+ }
164
+ // The server ended the stream normally -- nothing left to resume.
165
+ return;
144
166
  }
145
- else {
146
- applyPatch(raw.patch);
147
- broadcastToPorts({ type: "patch", patch: raw.patch });
167
+ catch {
168
+ // Transport dropped mid-stream. Loop back and resume from lastEventId once subscribeEvents() can succeed again.
148
169
  }
149
- return;
150
170
  }
151
- // Action responses from the server — { type: "result" } or { type: "error" }
152
- if (typeof raw === "object" && raw !== null && "type" in raw) {
153
- if (raw.type === "result" &&
154
- "result" in raw &&
155
- typeof raw.result === "object" &&
156
- raw.result !== null &&
157
- "content" in raw.result &&
158
- typeof raw.result.content === "string" &&
159
- "isError" in raw.result &&
160
- typeof raw.result.isError === "boolean") {
161
- broadcastToPorts({
162
- type: "actionResult",
163
- id: "",
164
- result: { content: raw.result.content, isError: raw.result.isError },
171
+ }
172
+ async function dispatchAction(client, action) {
173
+ const str = (key) => {
174
+ const value = action[key];
175
+ return typeof value === "string" ? value : "";
176
+ };
177
+ const optStr = (key) => {
178
+ const value = action[key];
179
+ return typeof value === "string" ? value : undefined;
180
+ };
181
+ const roomType = () => {
182
+ const value = action.type;
183
+ return value === "public" || value === "private" || value === "secret"
184
+ ? value
185
+ : "public";
186
+ };
187
+ switch (action.action) {
188
+ case "send":
189
+ return client.send({ target: str("target"), content: str("content") });
190
+ case "dm":
191
+ return client.dm({ target: str("target"), content: str("content") });
192
+ case "join_room":
193
+ return client.joinRoom({ room: str("room") });
194
+ case "leave_room":
195
+ return client.leaveRoom({ room: optStr("room") });
196
+ case "create_room":
197
+ return client.createRoom({
198
+ name: str("name"),
199
+ type: roomType(),
200
+ description: optStr("description"),
165
201
  });
166
- }
167
- else if (raw.type === "error" &&
168
- "message" in raw &&
169
- typeof raw.message === "string") {
170
- broadcastToPorts({
171
- type: "actionError",
172
- id: "",
173
- message: raw.message,
202
+ case "list_rooms":
203
+ return client.listRooms({});
204
+ case "list_agents":
205
+ return client.listAgents({});
206
+ case "read_room":
207
+ return client.readRoom({ room: optStr("room") });
208
+ case "destroy_room":
209
+ return client.destroyRoom({ room: str("room") });
210
+ case "invite":
211
+ return client.invite({ room: str("room"), agent: str("agent") });
212
+ case "decline_invite":
213
+ return client.declineInvite({
214
+ room: str("room"),
215
+ reason: str("reason"),
174
216
  });
175
- }
217
+ case "kick":
218
+ return client.kick({ room: str("room"), agent: str("agent") });
219
+ case "rename_agent":
220
+ return client.renameAgent({ agent: str("agent"), name: str("name") });
221
+ default:
222
+ return {
223
+ content: `Unknown action: ${String(action.action)}`,
224
+ isError: true,
225
+ };
176
226
  }
177
227
  }
178
- function isMeshStateMessage(value) {
179
- if (typeof value !== "object" || value === null)
180
- return false;
181
- if (!("method" in value))
182
- return false;
183
- const method = value.method;
184
- return (typeof method === "string" &&
185
- (method === "state_sync" || method === "state_update"));
186
- }
187
228
  // ---------------------------------------------------------------------------
188
229
  // Port management — fan-out to all connected main-thread tabs
189
230
  // ---------------------------------------------------------------------------
190
- const ports = new Set();
231
+ export const ports = new Set();
191
232
  function broadcastToPorts(msg) {
192
233
  const data = JSON.stringify(msg);
193
234
  for (const port of ports) {
@@ -205,9 +246,21 @@ function handlePortMessage(msg) {
205
246
  connect(msg.url);
206
247
  break;
207
248
  case "action": {
208
- if (ws?.readyState === WebSocket.OPEN) {
209
- ws.send(JSON.stringify(msg.action));
210
- }
249
+ const client = orpcClient;
250
+ if (!client)
251
+ break;
252
+ const id = msg.id;
253
+ dispatchAction(client, msg.action)
254
+ .then((result) => {
255
+ broadcastToPorts({ type: "actionResult", id, result });
256
+ })
257
+ .catch((err) => {
258
+ broadcastToPorts({
259
+ type: "actionError",
260
+ id,
261
+ message: err instanceof Error ? err.message : String(err),
262
+ });
263
+ });
211
264
  break;
212
265
  }
213
266
  case "getState":
@@ -1 +1 @@
1
- {"version":3,"file":"mesh-worker.js","sourceRoot":"","sources":["../../../../../src/bridges/user/web/frontend/mesh-worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mesh-worker.js","sourceRoot":"","sources":["../../../../../src/bridges/user/web/frontend/mesh-worker.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,10 @@
11
11
  * GET /api/rooms/:id/messages → read room messages
12
12
  * POST /api/action → execute any CommsAction
13
13
  *
14
+ * When AGENT_COMMS_WEB_CONSOLE_DIST points at a built wire-mesh web-console
15
+ * (see web-console-static.ts), GET /web-console/* also serves that as an
16
+ * alternate, generic reference-client UI alongside the frontend above.
17
+ *
14
18
  * WebSocket:
15
19
  * Server pushes delivery events as JSON frames.
16
20
  * Client sends action objects.
@@ -25,6 +29,7 @@ export interface WebServerHandle {
25
29
  server: http.Server;
26
30
  controller: ChatController;
27
31
  wss: WebSocketServer;
32
+ orpcWss: WebSocketServer;
28
33
  pushManager: PushManager;
29
34
  publisher: MeshEventPublisher;
30
35
  }
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../../src/bridges/user/web/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC,OAAO,EAAE,eAAe,EAAa,MAAM,IAAI,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAE5D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAMlD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAgB1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAmE1D,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;IACpB,UAAU,EAAE,cAAc,CAAC;IAC3B,GAAG,EAAE,eAAe,CAAC;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,kBAAkB,CAAC;CAC/B;AAED,mHAAmH;AACnH,wBAAgB,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAGtE;AAED,oVAAoV;AACpV,wBAAgB,eAAe,CAC7B,MAAM,EAAE,eAAe,GAAG,SAAS,GAClC,YAAY,CAKd;AAMD;;;;;;;;;;;GAWG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,CAAC,EAAE,cAAc,GAC1B,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAEtC;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,IAAI,SAAI,EACR,kBAAkB,CAAC,EAAE,cAAc,EACnC,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,eAAe,CAAC,CAuE1B;AAgBD,wBAAsB,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,SAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BtE"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../../src/bridges/user/web/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC,OAAO,EAAE,eAAe,EAAa,MAAM,IAAI,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAE5D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAMlD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAgB1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAuE1D,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;IACpB,UAAU,EAAE,cAAc,CAAC;IAC3B,GAAG,EAAE,eAAe,CAAC;IACrB,OAAO,EAAE,eAAe,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,kBAAkB,CAAC;CAC/B;AAED,mHAAmH;AACnH,wBAAgB,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAGtE;AAED,oVAAoV;AACpV,wBAAgB,eAAe,CAC7B,MAAM,EAAE,eAAe,GAAG,SAAS,GAClC,YAAY,CAKd;AAMD;;;;;;;;;;;GAWG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,CAAC,EAAE,cAAc,GAC1B,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAEtC;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,IAAI,SAAI,EACR,kBAAkB,CAAC,EAAE,cAAc,EACnC,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,eAAe,CAAC,CAyE1B;AAgBD,wBAAsB,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,SAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BtE"}
@@ -11,6 +11,10 @@
11
11
  * GET /api/rooms/:id/messages → read room messages
12
12
  * POST /api/action → execute any CommsAction
13
13
  *
14
+ * When AGENT_COMMS_WEB_CONSOLE_DIST points at a built wire-mesh web-console
15
+ * (see web-console-static.ts), GET /web-console/* also serves that as an
16
+ * alternate, generic reference-client UI alongside the frontend above.
17
+ *
14
18
  * WebSocket:
15
19
  * Server pushes delivery events as JSON frames.
16
20
  * Client sends action objects.
@@ -26,6 +30,7 @@ import { ChatController } from "../controller.js";
26
30
  import { createRoomAction, declineInviteAction, destroyRoomAction, dmAction, inviteAction, joinRoomAction, kickAction, leaveRoomAction, listAgentsAction, listRoomsAction, readRoomAction, renameAgentAction, sendAction, } from "./actions.js";
27
31
  import { MeshEventPublisher } from "./event-publisher.js";
28
32
  import { meshRouter } from "./router.js";
33
+ import { resolveWebConsoleDist, serveWebConsole, } from "./web-console-static.js";
29
34
  const WEB_HOST = "127.0.0.1";
30
35
  const HTTP_NO_CONTENT = 204;
31
36
  const HTTP_OK = 200;
@@ -107,8 +112,9 @@ export async function createWebServer(port = 0, existingController, coordinatorP
107
112
  if (!existingController) {
108
113
  await controller.init();
109
114
  }
115
+ const webConsoleDist = resolveWebConsoleDist();
110
116
  const server = http.createServer((req, res) => {
111
- handleRequest(req, res, controller);
117
+ handleRequest(req, res, controller, webConsoleDist);
112
118
  });
113
119
  const pushManager = new PushManager();
114
120
  const publisher = new MeshEventPublisher();
@@ -164,7 +170,7 @@ export async function createWebServer(port = 0, existingController, coordinatorP
164
170
  const actualPort = typeof addr === "object" && addr ? addr.port : port;
165
171
  console.log(`Agent Comms web UI: http://${WEB_HOST}:${String(actualPort)}`);
166
172
  });
167
- return { server, controller, wss, pushManager, publisher };
173
+ return { server, controller, wss, orpcWss, pushManager, publisher };
168
174
  }
169
175
  class HandleRef {
170
176
  handle;
@@ -192,6 +198,7 @@ export async function runWeb(userName, port = 0) {
192
198
  // Graceful shutdown
193
199
  const cleanup = async () => {
194
200
  handle.wss.close();
201
+ handle.orpcWss.close();
195
202
  handle.server.close();
196
203
  await handle.controller.shutdown();
197
204
  process.exit(0);
@@ -206,7 +213,7 @@ export async function runWeb(userName, port = 0) {
206
213
  // ---------------------------------------------------------------------------
207
214
  // HTTP handler
208
215
  // ---------------------------------------------------------------------------
209
- function handleRequest(req, res, controller) {
216
+ function handleRequest(req, res, controller, webConsoleDist) {
210
217
  const url = new URL(req.url ?? "/", `http://localhost`);
211
218
  // CORS
212
219
  res.setHeader("Access-Control-Allow-Origin", "*");
@@ -217,6 +224,12 @@ function handleRequest(req, res, controller) {
217
224
  res.end();
218
225
  return;
219
226
  }
227
+ // wire-mesh's web-console — an alternate, generic reference-client UI, served only when AGENT_COMMS_WEB_CONSOLE_DIST resolves to a real build.
228
+ if (webConsoleDist !== undefined &&
229
+ req.method === "GET" &&
230
+ serveWebConsole(webConsoleDist, url.pathname, res)) {
231
+ return;
232
+ }
220
233
  // Frontend HTML -- also served at the literal /index.html path (not just
221
234
  // /) because vite-plugin-pwa's injectManifest precache list references
222
235
  // the build output's own filename, index.html, and precaches it by
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../../src/bridges/user/web/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAE5D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAOlD,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,UAAU,GACX,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,MAAM,QAAQ,GAAG,WAAW,CAAC;AAE7B,MAAM,eAAe,GAAG,GAAG,CAAC;AAC5B,MAAM,OAAO,GAAG,GAAG,CAAC;AACpB,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B,8EAA8E;AAC9E,oDAAoD;AACpD,8EAA8E;AAE9E,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAChC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,EAC1C,OAAO,CACR,CAAC;AAEF,MAAM,SAAS,GAAG,EAAE,CAAC,YAAY,CAC/B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EACzC,OAAO,CACR,CAAC;AAEF,MAAM,cAAc,GAAG,EAAE,CAAC,UAAU,CAClC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAC/C;IACC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC1E,CAAC,CAAC,6BAA6B,CAAC;AAElC,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;AAE9E,MAAM,aAAa,GAAG,EAAE,CAAC,YAAY,CACnC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,CAAC,EAC7C,OAAO,CACR,CAAC;AAEF,SAAS,QAAQ,CAAC,QAAgB;IAChC,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,KAAK,GAA2B;IACpC,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB,CAAC;IAC5C,kBAAkB,EAAE,QAAQ,CAAC,kBAAkB,CAAC;IAChD,kBAAkB,EAAE,QAAQ,CAAC,kBAAkB,CAAC;CACjD,CAAC;AAEF,8EAA8E;AAC9E,qEAAqE;AACrE,8EAA8E;AAE9E,MAAM,aAAa,GAAG,IAAI,GAAG,EAAmB,CAAC;AAEjD,SAAS,UAAU,CAAC,UAA0B;IAC5C,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;QACnC,IAAI,MAAM,CAAC,UAAU,KAAK,UAAU;YAAE,OAAO,MAAM,CAAC;IACtD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAcD,mHAAmH;AACnH,MAAM,UAAU,UAAU,CAAC,MAAuB;IAChD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IACrC,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AAClE,CAAC;AAED,oVAAoV;AACpV,MAAM,UAAU,eAAe,CAC7B,MAAmC;IAEnC,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;IAC5C,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IACjE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;AACtE,CAAC;AAED,8EAA8E;AAC9E,6DAA6D;AAC7D,8EAA8E;AAE9E;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,UAA2B;IAE3B,OAAO,eAAe,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AACxC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAI,GAAG,CAAC,EACR,kBAAmC,EACnC,eAAwB;IAExB,MAAM,UAAU,GACd,kBAAkB,IAAI,IAAI,cAAc,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IACzE,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC5C,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;IACtC,MAAM,SAAS,GAAG,IAAI,kBAAkB,EAAE,CAAC;IAC3C,mBAAmB,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACrD,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,KAAoB,EAAE,EAAE;QAChD,SAAS,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,qMAAqM;IACrM,MAAM,GAAG,GAAG,IAAI,eAAe,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;IAE9C,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QACzC,IAAI,GAAG,CAAC,GAAG,KAAK,eAAe,EAAE,CAAC;YAChC,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE;gBAC9C,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,GAAG,CAAC,GAAG,KAAK,UAAU,EAAE,CAAC;YAClC,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE;gBAC9C,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE;gBAC1C,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE;QAC1B,eAAe,CAAC,EAAE,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE;QAC9B,mBAAmB,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE;QAC9B,oVAAoV;QACpV,MAAM,OAAO,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;QACvD,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE;YAClC,sQAAsQ;YACtQ,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC7D,MAAM,KAAK,GAAG,GAAG,YAAY,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAClE,uPAAuP;YACvP,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACrE,KAAK,UAAU,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAClB,KAAK,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE;QACjC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,8BAA8B,QAAQ,IAAI,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;AAC7D,CAAC;AAED,MAAM,SAAS;IACe;IAA5B,YAA4B,MAAuB;QAAvB,WAAM,GAAN,MAAM,CAAiB;QACjD,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO;QACL,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;CACF;AAED,8EAA8E;AAC9E,2CAA2C;AAC3C,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,QAAgB,EAAE,IAAI,GAAG,CAAC;IACrD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;IAC3C,mEAAmE;IACnE,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;IAEtB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;QACjC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACrC,MAAM,UAAU,GAAG,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,wCAAwC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CACT,gBAAgB,QAAQ,YAAY,MAAM,CAAC,UAAU,CAAC,OAAO,GAAG,CACjE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,oBAAoB;IACpB,MAAM,OAAO,GAAG,KAAK,IAAmB,EAAE;QACxC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACxB,KAAK,OAAO,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QACzB,KAAK,OAAO,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,8EAA8E;AAC9E,eAAe;AACf,8EAA8E;AAE9E,SAAS,aAAa,CACpB,GAAyB,EACzB,GAAwB,EACxB,UAA0B;IAE1B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,kBAAkB,CAAC,CAAC;IAExD,OAAO;IACP,GAAG,CAAC,SAAS,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;IAClD,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,oBAAoB,CAAC,CAAC;IACpE,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,cAAc,CAAC,CAAC;IAE9D,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC7B,GAAG,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAC/B,GAAG,CAAC,GAAG,EAAE,CAAC;QACV,OAAO;IACT,CAAC;IAED,yEAAyE;IACzE,uEAAuE;IACvE,mEAAmE;IACnE,yEAAyE;IACzE,yEAAyE;IACzE,6BAA6B;IAC7B,IACE,CAAC,GAAG,CAAC,QAAQ,KAAK,GAAG,IAAI,GAAG,CAAC,QAAQ,KAAK,aAAa,CAAC;QACxD,GAAG,CAAC,MAAM,KAAK,KAAK,EACpB,CAAC;QACD,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,0BAA0B,EAAE,CAAC,CAAC;QACvE,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACpB,OAAO;IACT,CAAC;IAED,qBAAqB;IACrB,IAAI,GAAG,CAAC,QAAQ,KAAK,YAAY,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QAC1D,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE;YACrB,cAAc,EAAE,uCAAuC;SACxD,CAAC,CAAC;QACH,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACnB,OAAO;IACT,CAAC;IAED,2BAA2B;IAC3B,IAAI,GAAG,CAAC,QAAQ,KAAK,iBAAiB,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QAC/D,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE;YACrB,cAAc,EAAE,uCAAuC;SACxD,CAAC,CAAC;QACH,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACxB,OAAO;IACT,CAAC;IAED,wBAAwB;IACxB,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QACtD,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE;YACrB,cAAc,EAAE,uCAAuC;YACvD,wBAAwB,EAAE,GAAG;SAC9B,CAAC,CAAC;QACH,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACf,OAAO;IACT,CAAC;IAED,mBAAmB;IACnB,IAAI,GAAG,CAAC,QAAQ,KAAK,gBAAgB,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QAC9D,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE;YACrB,cAAc,EAAE,0CAA0C;SAC3D,CAAC,CAAC;QACH,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACvB,OAAO;IACT,CAAC;IAED,YAAY;IACZ,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QAC/D,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACtD,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC7B,IAAI,IAAI,EAAE,CAAC;YACT,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE;gBACrB,cAAc,EAAE,eAAe;gBAC/B,eAAe,EAAE,wBAAwB;aAC1C,CAAC,CAAC;YACH,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACd,OAAO;QACT,CAAC;IACH,CAAC;IAED,yCAAyC;IACzC,IAAI,GAAG,CAAC,QAAQ,KAAK,qBAAqB,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QACnE,+DAA+D;QAC/D,wDAAwD;QACxD,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,MAAM,EAAE,WAAW,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC;QACrD,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9B,OAAO;IACT,CAAC;IAED,aAAa;IACb,IAAI,GAAG,CAAC,QAAQ,KAAK,aAAa,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QAC3D,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,SAAS,EAAE,CAAC;YAC5C,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACpB,CAAC,CAAC,EAAE,CAAC;QACL,OAAO;IACT,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,KAAK,YAAY,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QAC1D,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,QAAQ,EAAE,CAAC;YAC1C,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACnB,CAAC,CAAC,EAAE,CAAC;QACL,OAAO;IACT,CAAC;IAED,IACE,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC;QACtC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC;QAClC,GAAG,CAAC,MAAM,KAAK,KAAK,EACpB,CAAC;QACD,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1C,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;gBAC1C,SAAS,CAAC,GAAG,EAAE,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;gBACrD,OAAO;YACT,CAAC;YACD,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC;YACzD,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACjE,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACtB,CAAC,CAAC,EAAE,CAAC;QACL,OAAO;IACT,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,KAAK,aAAa,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC5D,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;YACjC,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACzC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBAClD,SAAS,CAAC,GAAG,EAAE,cAAc,EAAE,gBAAgB,CAAC,CAAC;gBACjD,OAAO;YACT,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YAE1D,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YACvD,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACpB,CAAC,CAAC,EAAE,CAAC;QACL,OAAO;IACT,CAAC;IAED,GAAG,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC9B,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AACvB,CAAC;AAED,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E,SAAS,eAAe,CACtB,EAAa,EACb,UAA0B,EAC1B,WAAwB;IAExB,qEAAqE;IACrE,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,qEAAqE;IACrE,IAAI,WAA+B,CAAC;IAEpC,sCAAsC;IACtC,SAAS,SAAS,CAAC,KAAc;QAC/B,IAAI,OAAO,EAAE,CAAC;YACZ,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAEpC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QAClB,OAAO,GAAG,KAAK,CAAC;QAChB,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE;QACxB,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,IAAI,CAAC;gBACH,MAAM,GAAG,GACP,OAAO,IAAI,KAAK,QAAQ;oBACtB,CAAC,CAAC,IAAI;oBACN,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CACtB,IAAI,YAAY,WAAW;wBACzB,CAAC,CAAC,IAAI;wBACN,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;4BACrB,CAAC,CAAC,IAAI;4BACN,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAC1B,CAAC;gBACR,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACxC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;oBAC/C,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;gBAClC,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;gBAE1D,iDAAiD;gBACjD,IAAI,MAAM,CAAC,MAAM,KAAK,gBAAgB,EAAE,CAAC;oBACvC,MAAM,GAAG,GAAG,qBAAqB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;oBACvD,IAAI,CAAC,GAAG,EAAE,CAAC;wBACT,EAAE,CAAC,IAAI,CACL,IAAI,CAAC,SAAS,CAAC;4BACb,IAAI,EAAE,OAAO;4BACb,OAAO,EAAE,2BAA2B;yBACrC,CAAC,CACH,CAAC;wBACF,OAAO;oBACT,CAAC;oBACD,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC;oBACnE,WAAW,GAAG,OAAO,CAAC;oBACtB,WAAW,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;oBAC1C,EAAE,CAAC,IAAI,CACL,IAAI,CAAC,SAAS,CAAC;wBACb,IAAI,EAAE,QAAQ;wBACd,MAAM,EAAE;4BACN,OAAO,EAAE,8BAA8B;4BACvC,OAAO,EAAE,KAAK;yBACf;qBACF,CAAC,CACH,CAAC;oBACF,OAAO;gBACT,CAAC;gBAED,IAAI,MAAM,CAAC,MAAM,KAAK,kBAAkB,EAAE,CAAC;oBACzC,MAAM,OAAO,GACX,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,WAAW,IAAI,UAAU,CAAC,OAAO,CAAC;oBACpE,WAAW,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;oBACxC,WAAW,GAAG,SAAS,CAAC;oBACxB,EAAE,CAAC,IAAI,CACL,IAAI,CAAC,SAAS,CAAC;wBACb,IAAI,EAAE,QAAQ;wBACd,MAAM,EAAE,EAAE,OAAO,EAAE,2BAA2B,EAAE,OAAO,EAAE,KAAK,EAAE;qBACjE,CAAC,CACH,CAAC;oBACF,OAAO;gBACT,CAAC;gBAED,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;gBACvD,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YACtD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,EAAE,CAAC,IAAI,CACL,IAAI,CAAC,SAAS,CAAC;oBACb,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;iBAC1D,CAAC,CACH,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,qBAAqB;IACrB,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,SAAS,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,QAAQ,EAAE,CAAC;QAC1C,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC,EAAE,CAAC;AACP,CAAC;AAED,8EAA8E;AAC9E,iEAAiE;AACjE,8EAA8E;AAE9E,sEAAsE;AACtE,MAAM,SAAS,GAAG,IAAI,GAAG,EAAa,CAAC;AAEvC;;GAEG;AACH,MAAM,wBAAwB,GAAG,IAAI,OAAO,EAAa,CAAC;AAE1D;;GAEG;AACH,SAAS,mBAAmB,CAC1B,KAAgB,EAChB,SAA6B;IAE7B,IAAI,wBAAwB,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO;IAChD,wBAAwB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACpC,KAAK,CAAC,OAAO,GAAG,CAAC,KAAqB,EAAQ,EAAE;QAC9C,MAAM,GAAG,GAAgB;YACvB,MAAM,EAAE,cAAc;YACtB,KAAK;SACN,CAAC;QACF,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACjC,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;gBACvC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QACD,SAAS,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,mBAAmB,CAAC,EAAa,EAAE,UAA0B;IACpE,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC;IAEnC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAElB,0BAA0B;IAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;IAChC,IAAI,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;QACrC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QAClB,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE;QACxB,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,IAAI,CAAC;gBACH,MAAM,GAAG,GACP,OAAO,IAAI,KAAK,QAAQ;oBACtB,CAAC,CAAC,IAAI;oBACN,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CACtB,IAAI,YAAY,WAAW;wBACzB,CAAC,CAAC,IAAI;wBACN,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;4BACrB,CAAC,CAAC,IAAI;4BACN,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAC1B,CAAC;gBACR,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACxC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;oBAClD,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;gBAClC,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;gBAE1D,wCAAwC;gBACxC,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;gBACvD,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YACtD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,EAAE,CAAC,IAAI,CACL,IAAI,CAAC,SAAS,CAAC;oBACb,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;iBAC1D,CAAC,CACH,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;IACP,CAAC,CAAC,CAAC;AACL,CAAC;AAED,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E,KAAK,UAAU,aAAa,CAC1B,UAA0B,EAC1B,MAA+B;IAE/B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAE7B,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM;YACT,OAAO,UAAU,CAAC,UAAU,EAAE;gBAC5B,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE;gBACzC,OAAO,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,EAAE;aAC5C,CAAC,CAAC;QACL,KAAK,IAAI;YACP,OAAO,QAAQ,CAAC,UAAU,EAAE;gBAC1B,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE;gBACzC,OAAO,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,EAAE;aAC5C,CAAC,CAAC;QACL,KAAK,WAAW;YACd,OAAO,cAAc,CAAC,UAAU,EAAE;gBAChC,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE;aACtC,CAAC,CAAC;QACL,KAAK,YAAY;YACf,OAAO,eAAe,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1E,KAAK,aAAa;YAChB,OAAO,gBAAgB,CAAC,UAAU,EAAE;gBAClC,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE;gBACrC,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,QAAQ;gBAC7C,WAAW,EAAE,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC;aAC9C,CAAC,CAAC;QACL,KAAK,YAAY;YACf,OAAO,eAAe,CAAC,UAAU,CAAC,CAAC;QACrC,KAAK,aAAa;YAChB,OAAO,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACtC,KAAK,WAAW;YACd,OAAO,cAAc,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QACzE,KAAK,cAAc;YACjB,OAAO,iBAAiB,CAAC,UAAU,EAAE;gBACnC,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE;aACtC,CAAC,CAAC;QACL,KAAK,QAAQ;YACX,OAAO,YAAY,CAAC,UAAU,EAAE;gBAC9B,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE;gBACrC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE;aACxC,CAAC,CAAC;QACL,KAAK,gBAAgB;YACnB,OAAO,mBAAmB,CAAC,UAAU,EAAE;gBACrC,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE;gBACrC,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE;aAC1C,CAAC,CAAC;QACL,KAAK,MAAM;YACT,OAAO,UAAU,CAAC,UAAU,EAAE;gBAC5B,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE;gBACrC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE;aACxC,CAAC,CAAC;QACL,KAAK,cAAc;YACjB,OAAO,iBAAiB,CAAC,UAAU,EAAE;gBACnC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE;gBACvC,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE;aACtC,CAAC,CAAC;QACL;YACE,OAAO,EAAE,OAAO,EAAE,mBAAmB,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3E,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,wCAAwC;AACxC,8EAA8E;AAE9E,SAAS,SAAS,CAChB,MAA+B,EAC/B,GAAW;IAEX,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,SAAS,WAAW,CAClB,MAA+B,EAC/B,GAAW;IAEX,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACpE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAc;IAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAClE,IAAI,CAAC,CAAC,UAAU,IAAI,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ;QAC9D,OAAO,SAAS,CAAC;IACnB,IAAI,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACzC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAChE,IAAI,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC7E,IAAI,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IACzE,OAAO;QACL,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;KAC/C,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAS,IAAI,CAAC,GAAwB,EAAE,IAAa;IACnD,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC/D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,SAAS,CAChB,GAAwB,EACxB,OAAe,EACf,MAAc;IAEd,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC9D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,GAAyB;IAC/C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YAC/B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACjB,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../../src/bridges/user/web/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Integration tests for the opt-in web-console mount on the real HTTP server — confirms AGENT_COMMS_WEB_CONSOLE_DIST actually gates the route end to end, not just the unit-tested helper in isolation.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=web-console-route.integration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-console-route.integration.test.d.ts","sourceRoot":"","sources":["../../../../../src/bridges/user/web/test/web-console-route.integration.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Integration tests for the opt-in web-console mount on the real HTTP server — confirms AGENT_COMMS_WEB_CONSOLE_DIST actually gates the route end to end, not just the unit-tested helper in isolation.
3
+ */
4
+ import { describe, it, expect, afterEach } from "vitest";
5
+ import * as fs from "node:fs";
6
+ import * as os from "node:os";
7
+ import * as path from "node:path";
8
+ import http from "node:http";
9
+ import net from "node:net";
10
+ import { createWebServer } from "../server.js";
11
+ import { WEB_CONSOLE_MOUNT } from "../web-console-static.js";
12
+ const ENV_VAR = "AGENT_COMMS_WEB_CONSOLE_DIST";
13
+ const HTTP_OK = 200;
14
+ const HTTP_NOT_FOUND = 404;
15
+ async function findFreePort() {
16
+ return new Promise((resolve, reject) => {
17
+ const server = net.createServer();
18
+ server.listen(0, "127.0.0.1", () => {
19
+ const addr = server.address();
20
+ const port = typeof addr === "object" && addr !== null ? addr.port : 0;
21
+ server.close(() => resolve(port));
22
+ });
23
+ server.on("error", reject);
24
+ });
25
+ }
26
+ async function fetchText(port, reqPath) {
27
+ return new Promise((resolve, reject) => {
28
+ const req = http.request({ hostname: "127.0.0.1", port, path: reqPath, method: "GET" }, (res) => {
29
+ let data = "";
30
+ res.on("data", (chunk) => {
31
+ data += chunk.toString();
32
+ });
33
+ res.on("end", () => {
34
+ resolve({
35
+ status: res.statusCode ?? 0,
36
+ contentType: res.headers["content-type"] ?? "",
37
+ body: data,
38
+ });
39
+ });
40
+ });
41
+ req.on("error", reject);
42
+ req.end();
43
+ });
44
+ }
45
+ let handle;
46
+ let tmpDir;
47
+ let originalEnv;
48
+ /** Starts a web server and resolves once it's actually listening, returning its port. */
49
+ async function startAndGetPort(coordinatorPort) {
50
+ const started = await createWebServer(0, undefined, coordinatorPort);
51
+ handle = started;
52
+ await new Promise((resolve) => {
53
+ if (started.server.listening) {
54
+ resolve();
55
+ return;
56
+ }
57
+ started.server.once("listening", () => resolve());
58
+ });
59
+ const addr = started.server.address();
60
+ return typeof addr === "object" && addr ? addr.port : 0;
61
+ }
62
+ afterEach(async () => {
63
+ if (handle) {
64
+ handle.wss.close();
65
+ handle.server.close();
66
+ await handle.controller.shutdown();
67
+ handle = undefined;
68
+ }
69
+ if (originalEnv === undefined) {
70
+ Reflect.deleteProperty(process.env, ENV_VAR);
71
+ }
72
+ else {
73
+ process.env[ENV_VAR] = originalEnv;
74
+ }
75
+ if (tmpDir !== undefined) {
76
+ fs.rmSync(tmpDir, { recursive: true, force: true });
77
+ tmpDir = undefined;
78
+ }
79
+ });
80
+ describe("web-console route (opt-in)", () => {
81
+ it("404s under the mount when AGENT_COMMS_WEB_CONSOLE_DIST is unset", async () => {
82
+ originalEnv = process.env[ENV_VAR];
83
+ Reflect.deleteProperty(process.env, ENV_VAR);
84
+ const coordinatorPort = await findFreePort();
85
+ const port = await startAndGetPort(coordinatorPort);
86
+ const { status } = await fetchText(port, WEB_CONSOLE_MOUNT);
87
+ expect(status).toBe(HTTP_NOT_FOUND);
88
+ });
89
+ it("serves web-console's index.html and assets when the dist dir is configured", async () => {
90
+ originalEnv = process.env[ENV_VAR];
91
+ tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "web-console-dist-"));
92
+ fs.writeFileSync(path.join(tmpDir, "index.html"), "<!doctype html><title>web-console</title>");
93
+ fs.mkdirSync(path.join(tmpDir, "assets"));
94
+ fs.writeFileSync(path.join(tmpDir, "assets", "index-abc123.js"), "console.log('web-console');");
95
+ process.env[ENV_VAR] = tmpDir;
96
+ const coordinatorPort = await findFreePort();
97
+ const port = await startAndGetPort(coordinatorPort);
98
+ const index = await fetchText(port, WEB_CONSOLE_MOUNT);
99
+ expect(index.status).toBe(HTTP_OK);
100
+ expect(index.contentType).toContain("text/html");
101
+ expect(index.body).toContain("web-console");
102
+ const asset = await fetchText(port, `${WEB_CONSOLE_MOUNT}/assets/index-abc123.js`);
103
+ expect(asset.status).toBe(HTTP_OK);
104
+ expect(asset.contentType).toContain("javascript");
105
+ expect(asset.body).toContain("web-console");
106
+ // The bridge's own frontend at "/" is unaffected by the mount.
107
+ const own = await fetchText(port, "/");
108
+ expect(own.status).toBe(HTTP_OK);
109
+ expect(own.body).toContain("Agent Comms");
110
+ });
111
+ });
112
+ //# sourceMappingURL=web-console-route.integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-console-route.integration.test.js","sourceRoot":"","sources":["../../../../../src/bridges/user/web/test/web-console-route.integration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Unit tests for web-console static-file resolution and serving.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=web-console-static.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-console-static.test.d.ts","sourceRoot":"","sources":["../../../../../src/bridges/user/web/test/web-console-static.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Unit tests for web-console static-file resolution and serving.
3
+ */
4
+ import { describe, it, expect, beforeEach, afterEach } from "vitest";
5
+ import * as fs from "node:fs";
6
+ import * as os from "node:os";
7
+ import * as path from "node:path";
8
+ import { resolveWebConsoleDist, serveWebConsole, WEB_CONSOLE_MOUNT, } from "../web-console-static.js";
9
+ const ENV_VAR = "AGENT_COMMS_WEB_CONSOLE_DIST";
10
+ const HTTP_OK = 200;
11
+ const HTTP_NOT_FOUND = 404;
12
+ let tmpDir;
13
+ let originalEnv;
14
+ beforeEach(() => {
15
+ originalEnv = process.env[ENV_VAR];
16
+ });
17
+ afterEach(() => {
18
+ if (originalEnv === undefined) {
19
+ Reflect.deleteProperty(process.env, ENV_VAR);
20
+ }
21
+ else {
22
+ process.env[ENV_VAR] = originalEnv;
23
+ }
24
+ if (tmpDir !== undefined) {
25
+ fs.rmSync(tmpDir, { recursive: true, force: true });
26
+ tmpDir = undefined;
27
+ }
28
+ });
29
+ function makeDistDir() {
30
+ const dir = fs.mkdtempSync(path.join(os.tmpdir(), "web-console-dist-"));
31
+ fs.writeFileSync(path.join(dir, "index.html"), "<!doctype html><title>web-console</title>");
32
+ fs.mkdirSync(path.join(dir, "assets"));
33
+ fs.writeFileSync(path.join(dir, "assets", "index-abc123.js"), "console.log('web-console');");
34
+ return dir;
35
+ }
36
+ describe("resolveWebConsoleDist", () => {
37
+ it("returns undefined when the env var is unset", () => {
38
+ Reflect.deleteProperty(process.env, ENV_VAR);
39
+ expect(resolveWebConsoleDist()).toBeUndefined();
40
+ });
41
+ it("returns undefined when the env var is set but empty", () => {
42
+ process.env[ENV_VAR] = "";
43
+ expect(resolveWebConsoleDist()).toBeUndefined();
44
+ });
45
+ it("returns undefined when the configured directory has no index.html", () => {
46
+ tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "web-console-empty-"));
47
+ process.env[ENV_VAR] = tmpDir;
48
+ expect(resolveWebConsoleDist()).toBeUndefined();
49
+ });
50
+ it("returns undefined when the configured path doesn't exist at all", () => {
51
+ process.env[ENV_VAR] = "/nonexistent/path/that/should/not/exist";
52
+ expect(resolveWebConsoleDist()).toBeUndefined();
53
+ });
54
+ it("returns the resolved directory when it contains an index.html", () => {
55
+ tmpDir = makeDistDir();
56
+ process.env[ENV_VAR] = tmpDir;
57
+ expect(resolveWebConsoleDist()).toBe(path.resolve(tmpDir));
58
+ });
59
+ });
60
+ /** Minimal in-memory ServerResponse capture, avoiding a real socket. */
61
+ function captureResponse() {
62
+ let status = 0;
63
+ let contentType = "";
64
+ const chunks = [];
65
+ let resolveResult;
66
+ const result = new Promise((resolve) => {
67
+ resolveResult = resolve;
68
+ });
69
+ const res = {
70
+ writeHead(code, headers) {
71
+ status = code;
72
+ contentType = headers?.["Content-Type"] ?? "";
73
+ return res;
74
+ },
75
+ end(chunk) {
76
+ if (chunk !== undefined) {
77
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
78
+ }
79
+ resolveResult({
80
+ status,
81
+ contentType,
82
+ body: Buffer.concat(chunks).toString(),
83
+ });
84
+ },
85
+ };
86
+ return { res, result };
87
+ }
88
+ describe("serveWebConsole", () => {
89
+ it("returns false for a path outside the mount", () => {
90
+ tmpDir = makeDistDir();
91
+ const { res } = captureResponse();
92
+ expect(serveWebConsole(tmpDir, "/api/agents", res)).toBe(false);
93
+ });
94
+ it("serves index.html at the bare mount path", async () => {
95
+ tmpDir = makeDistDir();
96
+ const { res, result } = captureResponse();
97
+ expect(serveWebConsole(tmpDir, WEB_CONSOLE_MOUNT, res)).toBe(true);
98
+ const { status, contentType, body } = await result;
99
+ expect(status).toBe(HTTP_OK);
100
+ expect(contentType).toContain("text/html");
101
+ expect(body).toContain("web-console");
102
+ });
103
+ it("serves index.html at the mount path with a trailing slash", async () => {
104
+ tmpDir = makeDistDir();
105
+ const { res, result } = captureResponse();
106
+ expect(serveWebConsole(tmpDir, `${WEB_CONSOLE_MOUNT}/`, res)).toBe(true);
107
+ const { status, body } = await result;
108
+ expect(status).toBe(HTTP_OK);
109
+ expect(body).toContain("web-console");
110
+ });
111
+ it("serves a nested asset with the correct content type", async () => {
112
+ tmpDir = makeDistDir();
113
+ const { res, result } = captureResponse();
114
+ expect(serveWebConsole(tmpDir, `${WEB_CONSOLE_MOUNT}/assets/index-abc123.js`, res)).toBe(true);
115
+ const { status, contentType, body } = await result;
116
+ expect(status).toBe(HTTP_OK);
117
+ expect(contentType).toContain("javascript");
118
+ expect(body).toContain("web-console");
119
+ });
120
+ it("returns 404 for a missing file under the mount", async () => {
121
+ tmpDir = makeDistDir();
122
+ const { res, result } = captureResponse();
123
+ expect(serveWebConsole(tmpDir, `${WEB_CONSOLE_MOUNT}/nope.js`, res)).toBe(true);
124
+ const { status } = await result;
125
+ expect(status).toBe(HTTP_NOT_FOUND);
126
+ });
127
+ it("returns 404 rather than escaping the dist directory via path traversal", async () => {
128
+ tmpDir = makeDistDir();
129
+ const { res, result } = captureResponse();
130
+ expect(serveWebConsole(tmpDir, `${WEB_CONSOLE_MOUNT}/../../../../etc/passwd`, res)).toBe(true);
131
+ const { status } = await result;
132
+ expect(status).toBe(HTTP_NOT_FOUND);
133
+ });
134
+ });
135
+ //# sourceMappingURL=web-console-static.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-console-static.test.js","sourceRoot":"","sources":["../../../../../src/bridges/user/web/test/web-console-static.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Static-file serving for wire-mesh's web-console — a generic, protocol-level reference UI for any wire-mesh-compatible node, mounted alongside agent-comms' own richer dashboard as an alternate view.
3
+ *
4
+ * Serving is opt-in and off by default: web-console is a separate, unpublished Vite/React app (wire-mesh/ts/packages/web-console), not a dependency of this package, so there is no build output to serve unless someone has built one locally and pointed AGENT_COMMS_WEB_CONSOLE_DIST at it. When the variable is unset, empty, or doesn't resolve to a directory containing an index.html, the mount is never registered.
5
+ */
6
+ import type * as http from "node:http";
7
+ /** Route prefix web-console's static output is served under. */
8
+ export declare const WEB_CONSOLE_MOUNT = "/web-console";
9
+ /**
10
+ * Resolves the configured web-console dist directory, if any.
11
+ *
12
+ * Reads AGENT_COMMS_WEB_CONSOLE_DIST and confirms it points at a directory containing an index.html. Returns undefined otherwise — the caller should then skip registering the mount entirely rather than register it and 404 on every request.
13
+ */
14
+ export declare function resolveWebConsoleDist(): string | undefined;
15
+ /**
16
+ * Serves a request under the web-console mount from a resolved dist directory.
17
+ *
18
+ * Returns false when pathname falls outside the mount entirely, so the caller can fall through to its own routing. Returns true for every request inside the mount, including ones answered with a 404 (missing file, or a path-traversal attempt resolving outside distDir) — the caller's own response has already been written in that case too.
19
+ */
20
+ export declare function serveWebConsole(distDir: string, pathname: string, res: http.ServerResponse): boolean;
21
+ //# sourceMappingURL=web-console-static.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-console-static.d.ts","sourceRoot":"","sources":["../../../../src/bridges/user/web/web-console-static.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,KAAK,IAAI,MAAM,WAAW,CAAC;AAEvC,gEAAgE;AAChE,eAAO,MAAM,iBAAiB,iBAAiB,CAAC;AAuBhD;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,GAAG,SAAS,CAM1D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,IAAI,CAAC,cAAc,GACvB,OAAO,CAiCT"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Static-file serving for wire-mesh's web-console — a generic, protocol-level reference UI for any wire-mesh-compatible node, mounted alongside agent-comms' own richer dashboard as an alternate view.
3
+ *
4
+ * Serving is opt-in and off by default: web-console is a separate, unpublished Vite/React app (wire-mesh/ts/packages/web-console), not a dependency of this package, so there is no build output to serve unless someone has built one locally and pointed AGENT_COMMS_WEB_CONSOLE_DIST at it. When the variable is unset, empty, or doesn't resolve to a directory containing an index.html, the mount is never registered.
5
+ */
6
+ import * as fs from "node:fs";
7
+ import * as path from "node:path";
8
+ /** Route prefix web-console's static output is served under. */
9
+ export const WEB_CONSOLE_MOUNT = "/web-console";
10
+ const HTTP_OK = 200;
11
+ const HTTP_NOT_FOUND = 404;
12
+ const CONTENT_TYPES = {
13
+ ".html": "text/html; charset=utf-8",
14
+ ".js": "application/javascript; charset=utf-8",
15
+ ".mjs": "application/javascript; charset=utf-8",
16
+ ".css": "text/css; charset=utf-8",
17
+ ".json": "application/json; charset=utf-8",
18
+ ".map": "application/json; charset=utf-8",
19
+ ".svg": "image/svg+xml",
20
+ ".png": "image/png",
21
+ ".ico": "image/x-icon",
22
+ ".woff": "font/woff",
23
+ ".woff2": "font/woff2",
24
+ ".txt": "text/plain; charset=utf-8",
25
+ ".wasm": "application/wasm",
26
+ };
27
+ const DEFAULT_CONTENT_TYPE = "application/octet-stream";
28
+ /**
29
+ * Resolves the configured web-console dist directory, if any.
30
+ *
31
+ * Reads AGENT_COMMS_WEB_CONSOLE_DIST and confirms it points at a directory containing an index.html. Returns undefined otherwise — the caller should then skip registering the mount entirely rather than register it and 404 on every request.
32
+ */
33
+ export function resolveWebConsoleDist() {
34
+ const configured = process.env.AGENT_COMMS_WEB_CONSOLE_DIST;
35
+ if (configured === undefined || configured === "")
36
+ return undefined;
37
+ const dist = path.resolve(configured);
38
+ if (!fs.existsSync(path.join(dist, "index.html")))
39
+ return undefined;
40
+ return dist;
41
+ }
42
+ /**
43
+ * Serves a request under the web-console mount from a resolved dist directory.
44
+ *
45
+ * Returns false when pathname falls outside the mount entirely, so the caller can fall through to its own routing. Returns true for every request inside the mount, including ones answered with a 404 (missing file, or a path-traversal attempt resolving outside distDir) — the caller's own response has already been written in that case too.
46
+ */
47
+ export function serveWebConsole(distDir, pathname, res) {
48
+ if (pathname !== WEB_CONSOLE_MOUNT &&
49
+ !pathname.startsWith(`${WEB_CONSOLE_MOUNT}/`)) {
50
+ return false;
51
+ }
52
+ const suffix = pathname.slice(WEB_CONSOLE_MOUNT.length);
53
+ const relative = suffix === "" || suffix === "/" ? "index.html" : suffix.slice(1);
54
+ const resolvedDist = path.resolve(distDir);
55
+ const resolvedFile = path.resolve(resolvedDist, relative);
56
+ const withinDist = resolvedFile === resolvedDist ||
57
+ resolvedFile.startsWith(`${resolvedDist}${path.sep}`);
58
+ if (!withinDist ||
59
+ !fs.existsSync(resolvedFile) ||
60
+ !fs.statSync(resolvedFile).isFile()) {
61
+ res.writeHead(HTTP_NOT_FOUND);
62
+ res.end("Not found");
63
+ return true;
64
+ }
65
+ const contentType = CONTENT_TYPES[path.extname(resolvedFile)] ?? DEFAULT_CONTENT_TYPE;
66
+ res.writeHead(HTTP_OK, { "Content-Type": contentType });
67
+ res.end(fs.readFileSync(resolvedFile));
68
+ return true;
69
+ }
70
+ //# sourceMappingURL=web-console-static.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-console-static.js","sourceRoot":"","sources":["../../../../src/bridges/user/web/web-console-static.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-comms",
3
- "version": "3.22.0",
3
+ "version": "3.24.0",
4
4
  "description": "Cross-harness communication mesh for LLM agents — rooms, DMs, presence, and real-time push delivery over TCP",
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c",