agent-comms 2.0.0 → 2.1.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.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +1 -1
- package/dist/bridges/user/web/build.js +0 -11
- package/dist/bridges/user/web/build.js.map +1 -1
- package/dist/bridges/user/web/dist/bundle.js +2 -2
- package/dist/bridges/user/web/frontend/components/App.d.ts +0 -4
- package/dist/bridges/user/web/frontend/components/App.d.ts.map +1 -1
- package/dist/bridges/user/web/frontend/components/App.js +1 -1
- package/dist/bridges/user/web/frontend/components/App.js.map +1 -1
- package/dist/bridges/user/web/frontend/components/Sidebar.d.ts +1 -5
- package/dist/bridges/user/web/frontend/components/Sidebar.d.ts.map +1 -1
- package/dist/bridges/user/web/frontend/components/Sidebar.js +2 -3
- package/dist/bridges/user/web/frontend/components/Sidebar.js.map +1 -1
- package/dist/bridges/user/web/frontend/main.js +2 -16
- package/dist/bridges/user/web/frontend/main.js.map +1 -1
- package/dist/core/bridge-mesh.js +1 -1
- package/dist/core/bridge-mesh.js.map +1 -1
- package/dist/core/bridge.d.ts +3 -3
- package/dist/core/bridge.d.ts.map +1 -1
- package/dist/core/bridge.js +11 -9
- package/dist/core/bridge.js.map +1 -1
- package/dist/core/handshake.d.ts +1 -1
- package/dist/core/handshake.d.ts.map +1 -1
- package/dist/core/handshake.js +1 -1
- package/dist/core/handshake.js.map +1 -1
- package/dist/core/mesh-store.d.ts.map +1 -1
- package/dist/core/mesh-store.js +9 -4
- package/dist/core/mesh-store.js.map +1 -1
- package/dist/core/room-path.d.ts +20 -0
- package/dist/core/room-path.d.ts.map +1 -0
- package/dist/core/room-path.js +60 -0
- package/dist/core/room-path.js.map +1 -0
- package/dist/core/wire-mesh-identity.d.ts +1 -1
- package/dist/core/wire-mesh-identity.d.ts.map +1 -1
- package/dist/core/wire-mesh-identity.js +1 -1
- package/dist/core/wire-mesh-identity.js.map +1 -1
- package/dist/core/wire-mesh-transport.d.ts +2 -2
- package/dist/core/wire-mesh-transport.d.ts.map +1 -1
- package/dist/core/wire-mesh-transport.js +4 -4
- package/dist/core/wire-mesh-transport.js.map +1 -1
- package/dist/core/wire-protocol.d.ts +2 -10
- package/dist/core/wire-protocol.d.ts.map +1 -1
- package/dist/core/wire-protocol.js +1 -12
- package/dist/core/wire-protocol.js.map +1 -1
- package/dist/test/approval.integration.test.js +2 -2
- package/dist/test/approval.integration.test.js.map +1 -1
- package/dist/test/become-coordinator-actual-port.integration.test.js +2 -2
- package/dist/test/become-coordinator-actual-port.integration.test.js.map +1 -1
- package/dist/test/bridge-mesh.test.js +1 -1
- package/dist/test/bridge-mesh.test.js.map +1 -1
- package/dist/test/broadcast-window.integration.test.js +1 -1
- package/dist/test/broadcast-window.integration.test.js.map +1 -1
- package/dist/test/create-room-name-sanitisation.test.d.ts +5 -0
- package/dist/test/create-room-name-sanitisation.test.d.ts.map +1 -0
- package/dist/test/create-room-name-sanitisation.test.js +52 -0
- package/dist/test/create-room-name-sanitisation.test.js.map +1 -0
- package/dist/test/downtime-replay.integration.test.js +7 -5
- package/dist/test/downtime-replay.integration.test.js.map +1 -1
- package/dist/test/downtime-replay.test.js +10 -6
- package/dist/test/downtime-replay.test.js.map +1 -1
- package/dist/test/federation.integration.test.js +4 -1
- package/dist/test/federation.integration.test.js.map +1 -1
- package/dist/test/identity-restart.integration.test.js +4 -3
- package/dist/test/identity-restart.integration.test.js.map +1 -1
- package/dist/test/listener-policy.integration.test.js +2 -2
- package/dist/test/listener-policy.integration.test.js.map +1 -1
- package/dist/test/mesh-smoke.runner.js +1 -1
- package/dist/test/mesh-smoke.runner.js.map +1 -1
- package/dist/test/room-path.test.d.ts +2 -0
- package/dist/test/room-path.test.d.ts.map +1 -0
- package/dist/test/room-path.test.js +54 -0
- package/dist/test/room-path.test.js.map +1 -0
- package/dist/test/state-sync-convergence.test.js +30 -29
- package/dist/test/state-sync-convergence.test.js.map +1 -1
- package/dist/test/test-transport.js +1 -1
- package/dist/test/test-transport.js.map +1 -1
- package/package.json +2 -2
- package/dist/bridges/user/web/dist/relay-worker.js +0 -1
- package/dist/bridges/user/web/frontend/components/RelayPanel.d.ts +0 -15
- package/dist/bridges/user/web/frontend/components/RelayPanel.d.ts.map +0 -1
- package/dist/bridges/user/web/frontend/components/RelayPanel.js +0 -46
- package/dist/bridges/user/web/frontend/components/RelayPanel.js.map +0 -1
- package/dist/bridges/user/web/frontend/relay-client.d.ts +0 -40
- package/dist/bridges/user/web/frontend/relay-client.d.ts.map +0 -1
- package/dist/bridges/user/web/frontend/relay-client.js +0 -97
- package/dist/bridges/user/web/frontend/relay-client.js.map +0 -1
- package/dist/bridges/user/web/frontend/relay-worker.d.ts +0 -15
- package/dist/bridges/user/web/frontend/relay-worker.d.ts.map +0 -1
- package/dist/bridges/user/web/frontend/relay-worker.js +0 -379
- package/dist/bridges/user/web/frontend/relay-worker.js.map +0 -1
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://github.com/ExaDev/agent-comms)
|
|
4
4
|
[](https://www.npmjs.com/package/agent-comms)
|
|
5
|
-
[](https://github.com/ExaDev/agent-comms/releases/tag/v2.1.0)
|
|
6
6
|
[](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.
|
|
@@ -78,17 +78,6 @@ async function main() {
|
|
|
78
78
|
format: "iife",
|
|
79
79
|
outfile: path.join(DIST_DIR, "mesh-worker.js"),
|
|
80
80
|
});
|
|
81
|
-
// Build the relay SharedWorker as a separate bundle.
|
|
82
|
-
// The relay worker connects to two mesh WebSocket endpoints and
|
|
83
|
-
// forwards wire messages between them with peer ID translation.
|
|
84
|
-
await esbuild.build({
|
|
85
|
-
entryPoints: [path.join(FRONTEND_DIR, "relay-worker.ts")],
|
|
86
|
-
bundle: true,
|
|
87
|
-
minify: true,
|
|
88
|
-
target: "es2020",
|
|
89
|
-
format: "iife",
|
|
90
|
-
outfile: path.join(DIST_DIR, "relay-worker.js"),
|
|
91
|
-
});
|
|
92
81
|
// Copy web app manifest to dist/
|
|
93
82
|
fs.copyFileSync(path.join(FRONTEND_DIR, "manifest.json"), path.join(DIST_DIR, "manifest.json"));
|
|
94
83
|
// Copy PWA icons to dist/icons/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../../src/bridges/user/web/build.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../../src/bridges/user/web/build.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AAE9C;;;GAGG;AACH,MAAM,eAAe,GAAmB;IACtC,IAAI,EAAE,YAAY;IAClB,KAAK,CAAC,KAAK;QACT,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE;YAC7C,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC;gBAC9C,SAAS,EAAE,YAAY;aACxB,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACrE,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACpC,OAAO;gBACL,QAAQ,EAAE,2FAA2F,OAAO,OAAO;gBACnH,MAAM,EAAE,IAAI;aACb,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAC;AAEF,KAAK,UAAU,IAAI;IACjB,0EAA0E;IAC1E,qEAAqE;IACrE,uCAAuC;IACvC,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE5C,MAAM,OAAO,CAAC,KAAK,CAAC;QAClB,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAClD,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC;QACzC,OAAO,EAAE,CAAC,eAAe,CAAC;QAC1B,GAAG,EAAE,WAAW;QAChB,eAAe,EAAE,QAAQ;KAC1B,CAAC,CAAC;IAEH,iDAAiD;IACjD,gEAAgE;IAChE,8DAA8D;IAC9D,MAAM,OAAO,CAAC,KAAK,CAAC;QAClB,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC;KACtC,CAAC,CAAC;IAEH,oDAAoD;IACpD,mEAAmE;IACnE,mEAAmE;IACnE,gDAAgD;IAChD,MAAM,OAAO,CAAC,KAAK,CAAC;QAClB,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;QACxD,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC;KAC/C,CAAC,CAAC;IAEH,iCAAiC;IACjC,EAAE,CAAC,YAAY,CACb,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,EACxC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CACrC,CAAC;IAEF,gCAAgC;IAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9C,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;QACpE,EAAE,CAAC,YAAY,CACb,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,EACtC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAC1B,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IAC5B,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";(()=>{var Ln=Object.defineProperty;var $n=(e,n,t)=>n in e?Ln(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t;var C=(e,n,t)=>$n(e,typeof n!="symbol"?n+"":n,t);var Q,g,je,Fn,E,Se,Pe,Ee,pe,O,F,Ie,fe,ue,me,Hn,K={},X=[],Wn=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,Y=Array.isArray;function P(e,n){for(var t in n)e[t]=n[t];return e}function _e(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function zn(e,n,t){var o,s,r,c={};for(r in n)r=="key"?o=n[r]:r=="ref"?s=n[r]:c[r]=n[r];if(arguments.length>2&&(c.children=arguments.length>3?Q.call(arguments,2):t),typeof e=="function"&&e.defaultProps!=null)for(r in e.defaultProps)c[r]===void 0&&(c[r]=e.defaultProps[r]);return V(e,c,o,s,null)}function V(e,n,t,o,s){var r={type:e,props:n,key:t,ref:o,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:s??++je,__i:-1,__u:0};return s==null&&g.vnode!=null&&g.vnode(r),r}function I(e){return e.children}function q(e,n){this.props=e,this.context=n}function $(e,n){if(n==null)return e.__?$(e.__,e.__i+1):null;for(var t;n<e.__k.length;n++)if((t=e.__k[n])!=null&&t.__e!=null)return t.__e;return typeof e.type=="function"?$(e):null}function Un(e){if(e.__P&&e.__d){var n=e.__v,t=n.__e,o=[],s=[],r=P({},n);r.__v=n.__v+1,g.vnode&&g.vnode(r),ge(e.__P,r,n,e.__n,e.__P.namespaceURI,32&n.__u?[t]:null,o,t??$(n),!!(32&n.__u),s),r.__v=n.__v,r.__.__k[r.__i]=r,Fe(o,r,s),n.__e=n.__=null,r.__e!=t&&De(r)}}function De(e){if((e=e.__)!=null&&e.__c!=null)return e.__e=e.__c.base=null,e.__k.some(function(n){if(n!=null&&n.__e!=null)return e.__e=e.__c.base=n.__e}),De(e)}function Ae(e){(!e.__d&&(e.__d=!0)&&E.push(e)&&!G.__r++||Se!=g.debounceRendering)&&((Se=g.debounceRendering)||Pe)(G)}function G(){try{for(var e,n=1;E.length;)E.length>n&&E.sort(Ee),e=E.shift(),n=E.length,Un(e)}finally{E.length=G.__r=0}}function Ne(e,n,t,o,s,r,c,d,u,l,p){var f,i,m,y,S,v,x,_=o&&o.__k||X,A=n.length;for(u=Bn(t,n,_,u,A),f=0;f<A;f++)(m=t.__k[f])!=null&&(i=m.__i!=-1&&_[m.__i]||K,m.__i=f,v=ge(e,m,i,s,r,c,d,u,l,p),y=m.__e,m.ref&&i.ref!=m.ref&&(i.ref&&he(i.ref,null,m),p.push(m.ref,m.__c||y,m)),S==null&&y!=null&&(S=y),(x=!!(4&m.__u))||i.__k===m.__k?(u=Le(m,u,e,x),x&&i.__e&&(i.__e=null)):typeof m.type=="function"&&v!==void 0?u=v:y&&(u=y.nextSibling),m.__u&=-7);return t.__e=S,u}function Bn(e,n,t,o,s){var r,c,d,u,l,p=t.length,f=p,i=0;for(e.__k=new Array(s),r=0;r<s;r++)(c=n[r])!=null&&typeof c!="boolean"&&typeof c!="function"?(typeof c=="string"||typeof c=="number"||typeof c=="bigint"||c.constructor==String?c=e.__k[r]=V(null,c,null,null,null):Y(c)?c=e.__k[r]=V(I,{children:c},null,null,null):c.constructor===void 0&&c.__b>0?c=e.__k[r]=V(c.type,c.props,c.key,c.ref?c.ref:null,c.__v):e.__k[r]=c,u=r+i,c.__=e,c.__b=e.__b+1,d=null,(l=c.__i=Jn(c,t,u,f))!=-1&&(f--,(d=t[l])&&(d.__u|=2)),d==null||d.__v==null?(l==-1&&(s>p?i--:s<p&&i++),typeof c.type!="function"&&(c.__u|=4)):l!=u&&(l==u-1?i--:l==u+1?i++:(l>u?i--:i++,c.__u|=4))):e.__k[r]=null;if(f)for(r=0;r<p;r++)(d=t[r])!=null&&(2&d.__u)==0&&(d.__e==o&&(o=$(d)),We(d,d));return o}function Le(e,n,t,o){var s,r;if(typeof e.type=="function"){for(s=e.__k,r=0;s&&r<s.length;r++)s[r]&&(s[r].__=e,n=Le(s[r],n,t,o));return n}e.__e!=n&&(o&&(n&&e.type&&!n.parentNode&&(n=$(e)),t.insertBefore(e.__e,n||null)),n=e.__e);do n=n&&n.nextSibling;while(n!=null&&n.nodeType==8);return n}function Jn(e,n,t,o){var s,r,c,d=e.key,u=e.type,l=n[t],p=l!=null&&(2&l.__u)==0;if(l===null&&d==null||p&&d==l.key&&u==l.type)return t;if(o>(p?1:0)){for(s=t-1,r=t+1;s>=0||r<n.length;)if((l=n[c=s>=0?s--:r++])!=null&&(2&l.__u)==0&&d==l.key&&u==l.type)return c}return-1}function Te(e,n,t){n[0]=="-"?e.setProperty(n,t??""):e[n]=t==null?"":typeof t!="number"||Wn.test(n)?t:t+"px"}function J(e,n,t,o,s){var r,c;e:if(n=="style")if(typeof t=="string")e.style.cssText=t;else{if(typeof o=="string"&&(e.style.cssText=o=""),o)for(n in o)t&&n in t||Te(e.style,n,"");if(t)for(n in t)o&&t[n]==o[n]||Te(e.style,n,t[n])}else if(n[0]=="o"&&n[1]=="n")r=n!=(n=n.replace(Ie,"$1")),c=n.toLowerCase(),n=c in e||n=="onFocusOut"||n=="onFocusIn"?c.slice(2):n.slice(2),e.l||(e.l={}),e.l[n+r]=t,t?o?t[F]=o[F]:(t[F]=fe,e.addEventListener(n,r?me:ue,r)):e.removeEventListener(n,r?me:ue,r);else{if(s=="http://www.w3.org/2000/svg")n=n.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if(n!="width"&&n!="height"&&n!="href"&&n!="list"&&n!="form"&&n!="tabIndex"&&n!="download"&&n!="rowSpan"&&n!="colSpan"&&n!="role"&&n!="popover"&&n in e)try{e[n]=t??"";break e}catch{}typeof t=="function"||(t==null||t===!1&&n[4]!="-"?e.removeAttribute(n):e.setAttribute(n,n=="popover"&&t==1?"":t))}}function Me(e){return function(n){if(this.l){var t=this.l[n.type+e];if(n[O]==null)n[O]=fe++;else if(n[O]<t[F])return;return t(g.event?g.event(n):n)}}}function ge(e,n,t,o,s,r,c,d,u,l){var p,f,i,m,y,S,v,x,_,A,R,j,N,Ce,B,de,T=n.type;if(n.constructor!==void 0)return null;128&t.__u&&(u=!!(32&t.__u),r=[d=n.__e=t.__e]),(p=g.__b)&&p(n);e:if(typeof T=="function"){f=c.length;try{if(_=n.props,A=T.prototype&&T.prototype.render,R=(p=T.contextType)&&o[p.__c],j=p?R?R.props.value:p.__:o,t.__c?x=(i=n.__c=t.__c).__=i.__E:(A?n.__c=i=new T(_,j):(n.__c=i=new q(_,j),i.constructor=T,i.render=Vn),R&&R.sub(i),i.state||(i.state={}),i.__n=o,m=i.__d=!0,i.__h=[],i._sb=[]),A&&i.__s==null&&(i.__s=i.state),A&&T.getDerivedStateFromProps!=null&&(i.__s==i.state&&(i.__s=P({},i.__s)),P(i.__s,T.getDerivedStateFromProps(_,i.__s))),y=i.props,S=i.state,i.__v=n,m)A&&T.getDerivedStateFromProps==null&&i.componentWillMount!=null&&i.componentWillMount(),A&&i.componentDidMount!=null&&i.__h.push(i.componentDidMount);else{if(A&&T.getDerivedStateFromProps==null&&_!==y&&i.componentWillReceiveProps!=null&&i.componentWillReceiveProps(_,j),n.__v==t.__v||!i.__e&&i.shouldComponentUpdate!=null&&i.shouldComponentUpdate(_,i.__s,j)===!1){n.__v!=t.__v&&(i.props=_,i.state=i.__s,i.__d=!1),n.__e=t.__e,n.__k=t.__k,n.__k.some(function(L){L&&(L.__=n)}),X.push.apply(i.__h,i._sb),i._sb=[],i.__h.length&&c.push(i);break e}i.componentWillUpdate!=null&&i.componentWillUpdate(_,i.__s,j),A&&i.componentDidUpdate!=null&&i.__h.push(function(){i.componentDidUpdate(y,S,v)})}if(i.context=j,i.props=_,i.__P=e,i.__e=!1,N=g.__r,Ce=0,A)i.state=i.__s,i.__d=!1,N&&N(n),p=i.render(i.props,i.state,i.context),X.push.apply(i.__h,i._sb),i._sb=[];else do i.__d=!1,N&&N(n),p=i.render(i.props,i.state,i.context),i.state=i.__s;while(i.__d&&++Ce<25);i.state=i.__s,i.getChildContext!=null&&(o=P(P({},o),i.getChildContext())),A&&!m&&i.getSnapshotBeforeUpdate!=null&&(v=i.getSnapshotBeforeUpdate(y,S)),B=p!=null&&p.type===I&&p.key==null?He(p.props.children):p,d=Ne(e,Y(B)?B:[B],n,t,o,s,r,c,d,u,l),i.base=n.__e,n.__u&=-161,i.__h.length&&c.push(i),x&&(i.__E=i.__=null)}catch(L){if(c.length=f,n.__v=null,u||r!=null){if(L.then){for(n.__u|=u?160:128;d&&d.nodeType==8&&d.nextSibling;)d=d.nextSibling;r!=null&&(r[r.indexOf(d)]=null),n.__e=d}else if(r!=null)for(de=r.length;de--;)_e(r[de])}else n.__e=t.__e;n.__k==null&&(n.__k=t.__k||[]),L.then||$e(n),g.__e(L,n,t)}}else r==null&&n.__v==t.__v?(n.__k=t.__k,n.__e=t.__e):d=n.__e=On(t.__e,n,t,o,s,r,c,u,l);return(p=g.diffed)&&p(n),128&n.__u?void 0:d}function $e(e){e&&(e.__c&&(e.__c.__e=!0),e.__k&&e.__k.some($e))}function Fe(e,n,t){for(var o=0;o<t.length;o++)he(t[o],t[++o],t[++o]);g.__c&&g.__c(n,e),e.some(function(s){try{e=s.__h,s.__h=[],e.some(function(r){r.call(s)})}catch(r){g.__e(r,s.__v)}})}function He(e){return typeof e!="object"||e==null||e.__b>0?e:Y(e)?e.map(He):e.constructor!==void 0?null:P({},e)}function On(e,n,t,o,s,r,c,d,u){var l,p,f,i,m,y,S,v=t.props||K,x=n.props,_=n.type;if(_=="svg"?s="http://www.w3.org/2000/svg":_=="math"?s="http://www.w3.org/1998/Math/MathML":s||(s="http://www.w3.org/1999/xhtml"),r!=null){for(l=0;l<r.length;l++)if((m=r[l])&&"setAttribute"in m==!!_&&(_?m.localName==_:m.nodeType==3)){e=m,r[l]=null;break}}if(e==null){if(_==null)return document.createTextNode(x);e=document.createElementNS(s,_,x.is&&x),d&&(g.__m&&g.__m(n,r),d=!1),r=null}if(_==null)v===x||d&&e.data==x||(e.data=x);else{if(r=_=="textarea"&&x.defaultValue!=null?null:r&&Q.call(e.childNodes),!d&&r!=null)for(v={},l=0;l<e.attributes.length;l++)v[(m=e.attributes[l]).name]=m.value;for(l in v)m=v[l],l=="dangerouslySetInnerHTML"?f=m:l=="children"||l in x||l=="value"&&"defaultValue"in x||l=="checked"&&"defaultChecked"in x||J(e,l,null,m,s);for(l in x)m=x[l],l=="children"?i=m:l=="dangerouslySetInnerHTML"?p=m:l=="value"?y=m:l=="checked"?S=m:d&&typeof m!="function"||v[l]===m||J(e,l,m,v[l],s);if(p)d||f&&(p.__html==f.__html||p.__html==e.innerHTML)||(e.innerHTML=p.__html),n.__k=[];else if(f&&(e.innerHTML=""),Ne(n.type=="template"?e.content:e,Y(i)?i:[i],n,t,o,_=="foreignObject"?"http://www.w3.org/1999/xhtml":s,r,c,r?r[0]:t.__k&&$(t,0),d,u),r!=null)for(l=r.length;l--;)_e(r[l]);d&&_!="textarea"||(l="value",_=="progress"&&y==null?e.removeAttribute("value"):y!=null&&(y!==e[l]||_=="progress"&&!y||_=="option"&&y!=v[l])&&J(e,l,y,v[l],s),l="checked",S!=null&&S!=e[l]&&J(e,l,S,v[l],s))}return e}function he(e,n,t){try{if(typeof e=="function"){var o=typeof e.__u=="function";o&&e.__u(),o&&n==null||(e.__u=e(n))}else e.current=n}catch(s){g.__e(s,t)}}function We(e,n,t){var o,s;if(g.unmount&&g.unmount(e),(o=e.ref)&&(o.current&&o.current!=e.__e||he(o,null,n)),(o=e.__c)!=null){if(o.componentWillUnmount)try{o.componentWillUnmount()}catch(r){g.__e(r,n)}o.base=o.__P=o.__n=null}if(o=e.__k)for(s=0;s<o.length;s++)o[s]&&We(o[s],n,t||typeof e.type!="function");t||_e(e.__e),e.__c=e.__=e.__e=void 0}function Vn(e,n,t){return this.constructor(e,t)}function ze(e,n,t){var o,s,r,c;n==document&&(n=document.documentElement),g.__&&g.__(e,n),s=(o=typeof t=="function")?null:t&&t.__k||n.__k,r=[],c=[],ge(n,e=(!o&&t||n).__k=zn(I,null,[e]),s||K,K,n.namespaceURI,!o&&t?[t]:s?null:n.firstChild?Q.call(n.childNodes):null,r,!o&&t?t:s?s.__e:n.firstChild,o,c),Fe(r,e,c),e.props.children=null}Q=X.slice,g={__e:function(e,n,t,o){for(var s,r,c;n=n.__;)if((s=n.__c)&&!s.__)try{if((r=s.constructor)&&r.getDerivedStateFromError!=null&&(s.setState(r.getDerivedStateFromError(e)),c=s.__d),s.componentDidCatch!=null&&(s.componentDidCatch(e,o||{}),c=s.__d),c)return s.__E=s}catch(d){e=d}throw e}},je=0,Fn=function(e){return e!=null&&e.constructor===void 0},q.prototype.setState=function(e,n){var t;t=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=P({},this.state),typeof e=="function"&&(e=e(P({},t),this.props)),e&&P(t,e),e!=null&&this.__v&&(n&&this._sb.push(n),Ae(this))},q.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),Ae(this))},q.prototype.render=I,E=[],Pe=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,Ee=function(e,n){return e.__v.__b-n.__v.__b},G.__r=0,pe=Math.random().toString(8),O="__d"+pe,F="__a"+pe,Ie=/(PointerCapture)$|Capture$/i,fe=0,ue=Me(!1),me=Me(!0),Hn=0;document.head.appendChild(Object.assign(document.createElement("style"),{textContent:`:root {
|
|
1
|
+
"use strict";(()=>{var En=Object.defineProperty;var In=(e,n,t)=>n in e?En(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t;var A=(e,n,t)=>In(e,typeof n!="symbol"?n+"":n,t);var G,h,Te,Dn,j,we,Se,Me,ce,O,F,je,pe,le,de,Nn,q={},K=[],Ln=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,Q=Array.isArray;function M(e,n){for(var t in n)e[t]=n[t];return e}function ue(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function $n(e,n,t){var o,i,r,a={};for(r in n)r=="key"?o=n[r]:r=="ref"?i=n[r]:a[r]=n[r];if(arguments.length>2&&(a.children=arguments.length>3?G.call(arguments,2):t),typeof e=="function"&&e.defaultProps!=null)for(r in e.defaultProps)a[r]===void 0&&(a[r]=e.defaultProps[r]);return V(e,a,o,i,null)}function V(e,n,t,o,i){var r={type:e,props:n,key:t,ref:o,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:i??++Te,__i:-1,__u:0};return i==null&&h.vnode!=null&&h.vnode(r),r}function P(e){return e.children}function B(e,n){this.props=e,this.context=n}function N(e,n){if(n==null)return e.__?N(e.__,e.__i+1):null;for(var t;n<e.__k.length;n++)if((t=e.__k[n])!=null&&t.__e!=null)return t.__e;return typeof e.type=="function"?N(e):null}function Fn(e){if(e.__P&&e.__d){var n=e.__v,t=n.__e,o=[],i=[],r=M({},n);r.__v=n.__v+1,h.vnode&&h.vnode(r),me(e.__P,r,n,e.__n,e.__P.namespaceURI,32&n.__u?[t]:null,o,t??N(n),!!(32&n.__u),i),r.__v=n.__v,r.__.__k[r.__i]=r,Ne(o,r,i),n.__e=n.__=null,r.__e!=t&&Pe(r)}}function Pe(e){if((e=e.__)!=null&&e.__c!=null)return e.__e=e.__c.base=null,e.__k.some(function(n){if(n!=null&&n.__e!=null)return e.__e=e.__c.base=n.__e}),Pe(e)}function Re(e){(!e.__d&&(e.__d=!0)&&j.push(e)&&!X.__r++||we!=h.debounceRendering)&&((we=h.debounceRendering)||Se)(X)}function X(){try{for(var e,n=1;j.length;)j.length>n&&j.sort(Me),e=j.shift(),n=j.length,Fn(e)}finally{j.length=X.__r=0}}function Ee(e,n,t,o,i,r,a,d,u,l,p){var f,s,m,y,C,k,_,g=o&&o.__k||K,R=n.length;for(u=Hn(t,n,g,u,R),f=0;f<R;f++)(m=t.__k[f])!=null&&(s=m.__i!=-1&&g[m.__i]||q,m.__i=f,k=me(e,m,s,i,r,a,d,u,l,p),y=m.__e,m.ref&&s.ref!=m.ref&&(s.ref&&fe(s.ref,null,m),p.push(m.ref,m.__c||y,m)),C==null&&y!=null&&(C=y),(_=!!(4&m.__u))||s.__k===m.__k?(u=Ie(m,u,e,_),_&&s.__e&&(s.__e=null)):typeof m.type=="function"&&k!==void 0?u=k:y&&(u=y.nextSibling),m.__u&=-7);return t.__e=C,u}function Hn(e,n,t,o,i){var r,a,d,u,l,p=t.length,f=p,s=0;for(e.__k=new Array(i),r=0;r<i;r++)(a=n[r])!=null&&typeof a!="boolean"&&typeof a!="function"?(typeof a=="string"||typeof a=="number"||typeof a=="bigint"||a.constructor==String?a=e.__k[r]=V(null,a,null,null,null):Q(a)?a=e.__k[r]=V(P,{children:a},null,null,null):a.constructor===void 0&&a.__b>0?a=e.__k[r]=V(a.type,a.props,a.key,a.ref?a.ref:null,a.__v):e.__k[r]=a,u=r+s,a.__=e,a.__b=e.__b+1,d=null,(l=a.__i=zn(a,t,u,f))!=-1&&(f--,(d=t[l])&&(d.__u|=2)),d==null||d.__v==null?(l==-1&&(i>p?s--:i<p&&s++),typeof a.type!="function"&&(a.__u|=4)):l!=u&&(l==u-1?s--:l==u+1?s++:(l>u?s--:s++,a.__u|=4))):e.__k[r]=null;if(f)for(r=0;r<p;r++)(d=t[r])!=null&&(2&d.__u)==0&&(d.__e==o&&(o=N(d)),$e(d,d));return o}function Ie(e,n,t,o){var i,r;if(typeof e.type=="function"){for(i=e.__k,r=0;i&&r<i.length;r++)i[r]&&(i[r].__=e,n=Ie(i[r],n,t,o));return n}e.__e!=n&&(o&&(n&&e.type&&!n.parentNode&&(n=N(e)),t.insertBefore(e.__e,n||null)),n=e.__e);do n=n&&n.nextSibling;while(n!=null&&n.nodeType==8);return n}function zn(e,n,t,o){var i,r,a,d=e.key,u=e.type,l=n[t],p=l!=null&&(2&l.__u)==0;if(l===null&&d==null||p&&d==l.key&&u==l.type)return t;if(o>(p?1:0)){for(i=t-1,r=t+1;i>=0||r<n.length;)if((l=n[a=i>=0?i--:r++])!=null&&(2&l.__u)==0&&d==l.key&&u==l.type)return a}return-1}function Ce(e,n,t){n[0]=="-"?e.setProperty(n,t??""):e[n]=t==null?"":typeof t!="number"||Ln.test(n)?t:t+"px"}function J(e,n,t,o,i){var r,a;e:if(n=="style")if(typeof t=="string")e.style.cssText=t;else{if(typeof o=="string"&&(e.style.cssText=o=""),o)for(n in o)t&&n in t||Ce(e.style,n,"");if(t)for(n in t)o&&t[n]==o[n]||Ce(e.style,n,t[n])}else if(n[0]=="o"&&n[1]=="n")r=n!=(n=n.replace(je,"$1")),a=n.toLowerCase(),n=a in e||n=="onFocusOut"||n=="onFocusIn"?a.slice(2):n.slice(2),e.l||(e.l={}),e.l[n+r]=t,t?o?t[F]=o[F]:(t[F]=pe,e.addEventListener(n,r?de:le,r)):e.removeEventListener(n,r?de:le,r);else{if(i=="http://www.w3.org/2000/svg")n=n.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if(n!="width"&&n!="height"&&n!="href"&&n!="list"&&n!="form"&&n!="tabIndex"&&n!="download"&&n!="rowSpan"&&n!="colSpan"&&n!="role"&&n!="popover"&&n in e)try{e[n]=t??"";break e}catch{}typeof t=="function"||(t==null||t===!1&&n[4]!="-"?e.removeAttribute(n):e.setAttribute(n,n=="popover"&&t==1?"":t))}}function Ae(e){return function(n){if(this.l){var t=this.l[n.type+e];if(n[O]==null)n[O]=pe++;else if(n[O]<t[F])return;return t(h.event?h.event(n):n)}}}function me(e,n,t,o,i,r,a,d,u,l){var p,f,s,m,y,C,k,_,g,R,L,I,$,ke,U,ae,T=n.type;if(n.constructor!==void 0)return null;128&t.__u&&(u=!!(32&t.__u),r=[d=n.__e=t.__e]),(p=h.__b)&&p(n);e:if(typeof T=="function"){f=a.length;try{if(g=n.props,R=T.prototype&&T.prototype.render,L=(p=T.contextType)&&o[p.__c],I=p?L?L.props.value:p.__:o,t.__c?_=(s=n.__c=t.__c).__=s.__E:(R?n.__c=s=new T(g,I):(n.__c=s=new B(g,I),s.constructor=T,s.render=Un),L&&L.sub(s),s.state||(s.state={}),s.__n=o,m=s.__d=!0,s.__h=[],s._sb=[]),R&&s.__s==null&&(s.__s=s.state),R&&T.getDerivedStateFromProps!=null&&(s.__s==s.state&&(s.__s=M({},s.__s)),M(s.__s,T.getDerivedStateFromProps(g,s.__s))),y=s.props,C=s.state,s.__v=n,m)R&&T.getDerivedStateFromProps==null&&s.componentWillMount!=null&&s.componentWillMount(),R&&s.componentDidMount!=null&&s.__h.push(s.componentDidMount);else{if(R&&T.getDerivedStateFromProps==null&&g!==y&&s.componentWillReceiveProps!=null&&s.componentWillReceiveProps(g,I),n.__v==t.__v||!s.__e&&s.shouldComponentUpdate!=null&&s.shouldComponentUpdate(g,s.__s,I)===!1){n.__v!=t.__v&&(s.props=g,s.state=s.__s,s.__d=!1),n.__e=t.__e,n.__k=t.__k,n.__k.some(function(D){D&&(D.__=n)}),K.push.apply(s.__h,s._sb),s._sb=[],s.__h.length&&a.push(s);break e}s.componentWillUpdate!=null&&s.componentWillUpdate(g,s.__s,I),R&&s.componentDidUpdate!=null&&s.__h.push(function(){s.componentDidUpdate(y,C,k)})}if(s.context=I,s.props=g,s.__P=e,s.__e=!1,$=h.__r,ke=0,R)s.state=s.__s,s.__d=!1,$&&$(n),p=s.render(s.props,s.state,s.context),K.push.apply(s.__h,s._sb),s._sb=[];else do s.__d=!1,$&&$(n),p=s.render(s.props,s.state,s.context),s.state=s.__s;while(s.__d&&++ke<25);s.state=s.__s,s.getChildContext!=null&&(o=M(M({},o),s.getChildContext())),R&&!m&&s.getSnapshotBeforeUpdate!=null&&(k=s.getSnapshotBeforeUpdate(y,C)),U=p!=null&&p.type===P&&p.key==null?Le(p.props.children):p,d=Ee(e,Q(U)?U:[U],n,t,o,i,r,a,d,u,l),s.base=n.__e,n.__u&=-161,s.__h.length&&a.push(s),_&&(s.__E=s.__=null)}catch(D){if(a.length=f,n.__v=null,u||r!=null){if(D.then){for(n.__u|=u?160:128;d&&d.nodeType==8&&d.nextSibling;)d=d.nextSibling;r!=null&&(r[r.indexOf(d)]=null),n.__e=d}else if(r!=null)for(ae=r.length;ae--;)ue(r[ae])}else n.__e=t.__e;n.__k==null&&(n.__k=t.__k||[]),D.then||De(n),h.__e(D,n,t)}}else r==null&&n.__v==t.__v?(n.__k=t.__k,n.__e=t.__e):d=n.__e=Wn(t.__e,n,t,o,i,r,a,u,l);return(p=h.diffed)&&p(n),128&n.__u?void 0:d}function De(e){e&&(e.__c&&(e.__c.__e=!0),e.__k&&e.__k.some(De))}function Ne(e,n,t){for(var o=0;o<t.length;o++)fe(t[o],t[++o],t[++o]);h.__c&&h.__c(n,e),e.some(function(i){try{e=i.__h,i.__h=[],e.some(function(r){r.call(i)})}catch(r){h.__e(r,i.__v)}})}function Le(e){return typeof e!="object"||e==null||e.__b>0?e:Q(e)?e.map(Le):e.constructor!==void 0?null:M({},e)}function Wn(e,n,t,o,i,r,a,d,u){var l,p,f,s,m,y,C,k=t.props||q,_=n.props,g=n.type;if(g=="svg"?i="http://www.w3.org/2000/svg":g=="math"?i="http://www.w3.org/1998/Math/MathML":i||(i="http://www.w3.org/1999/xhtml"),r!=null){for(l=0;l<r.length;l++)if((m=r[l])&&"setAttribute"in m==!!g&&(g?m.localName==g:m.nodeType==3)){e=m,r[l]=null;break}}if(e==null){if(g==null)return document.createTextNode(_);e=document.createElementNS(i,g,_.is&&_),d&&(h.__m&&h.__m(n,r),d=!1),r=null}if(g==null)k===_||d&&e.data==_||(e.data=_);else{if(r=g=="textarea"&&_.defaultValue!=null?null:r&&G.call(e.childNodes),!d&&r!=null)for(k={},l=0;l<e.attributes.length;l++)k[(m=e.attributes[l]).name]=m.value;for(l in k)m=k[l],l=="dangerouslySetInnerHTML"?f=m:l=="children"||l in _||l=="value"&&"defaultValue"in _||l=="checked"&&"defaultChecked"in _||J(e,l,null,m,i);for(l in _)m=_[l],l=="children"?s=m:l=="dangerouslySetInnerHTML"?p=m:l=="value"?y=m:l=="checked"?C=m:d&&typeof m!="function"||k[l]===m||J(e,l,m,k[l],i);if(p)d||f&&(p.__html==f.__html||p.__html==e.innerHTML)||(e.innerHTML=p.__html),n.__k=[];else if(f&&(e.innerHTML=""),Ee(n.type=="template"?e.content:e,Q(s)?s:[s],n,t,o,g=="foreignObject"?"http://www.w3.org/1999/xhtml":i,r,a,r?r[0]:t.__k&&N(t,0),d,u),r!=null)for(l=r.length;l--;)ue(r[l]);d&&g!="textarea"||(l="value",g=="progress"&&y==null?e.removeAttribute("value"):y!=null&&(y!==e[l]||g=="progress"&&!y||g=="option"&&y!=k[l])&&J(e,l,y,k[l],i),l="checked",C!=null&&C!=e[l]&&J(e,l,C,k[l],i))}return e}function fe(e,n,t){try{if(typeof e=="function"){var o=typeof e.__u=="function";o&&e.__u(),o&&n==null||(e.__u=e(n))}else e.current=n}catch(i){h.__e(i,t)}}function $e(e,n,t){var o,i;if(h.unmount&&h.unmount(e),(o=e.ref)&&(o.current&&o.current!=e.__e||fe(o,null,n)),(o=e.__c)!=null){if(o.componentWillUnmount)try{o.componentWillUnmount()}catch(r){h.__e(r,n)}o.base=o.__P=o.__n=null}if(o=e.__k)for(i=0;i<o.length;i++)o[i]&&$e(o[i],n,t||typeof e.type!="function");t||ue(e.__e),e.__c=e.__=e.__e=void 0}function Un(e,n,t){return this.constructor(e,t)}function Fe(e,n,t){var o,i,r,a;n==document&&(n=document.documentElement),h.__&&h.__(e,n),i=(o=typeof t=="function")?null:t&&t.__k||n.__k,r=[],a=[],me(n,e=(!o&&t||n).__k=$n(P,null,[e]),i||q,q,n.namespaceURI,!o&&t?[t]:i?null:n.firstChild?G.call(n.childNodes):null,r,!o&&t?t:i?i.__e:n.firstChild,o,a),Ne(r,e,a),e.props.children=null}G=K.slice,h={__e:function(e,n,t,o){for(var i,r,a;n=n.__;)if((i=n.__c)&&!i.__)try{if((r=i.constructor)&&r.getDerivedStateFromError!=null&&(i.setState(r.getDerivedStateFromError(e)),a=i.__d),i.componentDidCatch!=null&&(i.componentDidCatch(e,o||{}),a=i.__d),a)return i.__E=i}catch(d){e=d}throw e}},Te=0,Dn=function(e){return e!=null&&e.constructor===void 0},B.prototype.setState=function(e,n){var t;t=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=M({},this.state),typeof e=="function"&&(e=e(M({},t),this.props)),e&&M(t,e),e!=null&&this.__v&&(n&&this._sb.push(n),Re(this))},B.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),Re(this))},B.prototype.render=P,j=[],Se=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,Me=function(e,n){return e.__v.__b-n.__v.__b},X.__r=0,ce=Math.random().toString(8),O="__d"+ce,F="__a"+ce,je=/(PointerCapture)$|Capture$/i,pe=0,le=Ae(!1),de=Ae(!0),Nn=0;document.head.appendChild(Object.assign(document.createElement("style"),{textContent:`:root {
|
|
2
2
|
--bg: #1a1a2e;
|
|
3
3
|
--surface: #16213e;
|
|
4
4
|
--border: #0f3460;
|
|
@@ -562,4 +562,4 @@ body {
|
|
|
562
562
|
background: var(--accent);
|
|
563
563
|
color: var(--bg);
|
|
564
564
|
}
|
|
565
|
-
`}));var H,k,ye,Ue,ee=0,Ge=[],w=g,Be=w.__b,Je=w.__r,Oe=w.diffed,Ve=w.__c,qe=w.unmount,Ke=w.__;function be(e,n){w.__h&&w.__h(k,e,ee||n),ee=0;var t=k.__H||(k.__H={__:[],__h:[]});return e>=t.__.length&&t.__.push({}),t.__[e]}function b(e){return ee=1,qn(Ze,e)}function qn(e,n,t){var o=be(H++,2);if(o.t=e,!o.__c&&(o.__=[t?t(n):Ze(void 0,n),function(d){var u=o.__N?o.__N[0]:o.__[0],l=o.t(u,d);u!==l&&(o.__N=[l,o.__[1]],o.__c.setState({}))}],o.__c=k,!k.__f)){var s=function(d,u,l){if(!o.__c.__H)return!0;var p=!1,f=o.__c.props!==d;if(o.__c.__H.__.some(function(m){if(m.__N){p=!0;var y=m.__[0];m.__=m.__N,m.__N=void 0,y!==m.__[0]&&(f=!0)}}),r){var i=r.call(this,d,u,l);return p?i||f:i}return!p||f};k.__f=!0;var r=k.shouldComponentUpdate,c=k.componentWillUpdate;k.componentWillUpdate=function(d,u,l){if(this.__e){var p=r;r=void 0,s(d,u,l),r=p}c&&c.call(this,d,u,l)},k.shouldComponentUpdate=s}return o.__N||o.__}function ne(e,n){var t=be(H++,3);!w.__s&&Ye(t.__H,n)&&(t.__=e,t.u=n,k.__H.__h.push(t))}function Qe(e){return ee=5,Kn(function(){return{current:e}},[])}function Kn(e,n){var t=be(H++,7);return Ye(t.__H,n)&&(t.__=e(),t.__H=n,t.__h=e),t.__}function Xn(){for(var e;e=Ge.shift();){var n=e.__H;if(e.__P&&n)try{n.__h.some(Z),n.__h.some(ve),n.__h=[]}catch(t){n.__h=[],w.__e(t,e.__v)}}}w.__b=function(e){k=null,Be&&Be(e)},w.__=function(e,n){e&&n.__k&&n.__k.__m&&(e.__m=n.__k.__m),Ke&&Ke(e,n)},w.__r=function(e){Je&&Je(e),H=0;var n=(k=e.__c).__H;n&&(ye===k?(n.__h=[],k.__h=[],n.__.some(function(t){t.__N&&(t.__=t.__N),t.u=t.__N=void 0})):(n.__h.some(Z),n.__h.some(ve),n.__h=[],H=0)),ye=k},w.diffed=function(e){Oe&&Oe(e);var n=e.__c;n&&n.__H&&(n.__H.__h.length&&(Ge.push(n)!==1&&Ue===w.requestAnimationFrame||((Ue=w.requestAnimationFrame)||Gn)(Xn)),n.__H.__.some(function(t){t.u&&(t.__H=t.u,t.u=void 0)})),ye=k=null},w.__c=function(e,n){n.some(function(t){try{t.__h.some(Z),t.__h=t.__h.filter(function(o){return!o.__||ve(o)})}catch(o){n.some(function(s){s.__h&&(s.__h=[])}),n=[],w.__e(o,t.__v)}}),Ve&&Ve(e,n)},w.unmount=function(e){qe&&qe(e);var n,t=e.__c;t&&t.__H&&(t.__H.__.some(function(o){try{Z(o)}catch(s){n=s}}),t.__H=void 0,n&&w.__e(n,t.__v))};var Xe=typeof requestAnimationFrame=="function";function Gn(e){var n,t=function(){clearTimeout(o),Xe&&cancelAnimationFrame(n),setTimeout(e)},o=setTimeout(t,35);Xe&&(n=requestAnimationFrame(t))}function Z(e){var n=k,t=e.__c;typeof t=="function"&&(e.__c=void 0,t()),k=n}function ve(e){var n=k;e.__c=e.__(),k=n}function Ye(e,n){return!e||e.length!==n.length||n.some(function(t,o){return t!==e[o]})}function Ze(e,n){return typeof n=="function"?n(e):n}function en(e,n,t){let o=e.querySelector(n);if(!o)throw new Error(`Required element not found: ${n}`);if(t&&o.tagName.toLowerCase()!==t)throw new Error(`Element ${n} must be <${t}>, got <${o.tagName.toLowerCase()}>`);return o}function xe(e){return e.slice(11,19)}function M(e){let n=e.target;if(n instanceof HTMLInputElement||n instanceof HTMLSelectElement)return n;throw new Error("Event target is not an input element")}function nn(e){if(e.kind!=="action")return null;let n=e.action;return n.action==="join_room"?{kind:"join_room",room:n.room}:n.action==="leave_room"?{kind:"leave_room"}:null}function te(e,n,t){let o=e.trim();return o.length===0?{kind:"ignored"}:o.startsWith("/")?Qn(o,n):n?{kind:"action",action:{action:"send",target:n,content:o}}:t?{kind:"action",action:{action:"dm",target:t,content:o}}:{kind:"local",result:{type:"error",text:"Join a room or select an agent first"}}}function Qn(e,n){let t=e.slice(1).split(/\s+/),o=(t[0]??"").toLowerCase();switch(o){case"join":return t[1]?{kind:"action",action:{action:"join_room",room:t[1]}}:{kind:"local",result:{type:"error",text:"Usage: /join <room>"}};case"leave":return{kind:"action",action:{action:"leave_room",room:t[1]??n??""}};case"rooms":return{kind:"action",action:{action:"list_rooms"}};case"agents":return{kind:"action",action:{action:"list_agents"}};case"dm":return!t[1]||!t[2]?{kind:"local",result:{type:"error",text:"Usage: /dm <agent> <message>"}}:{kind:"action",action:{action:"dm",target:t[1],content:t.slice(2).join(" ")}};case"create":return t[1]?{kind:"action",action:{action:"create_room",name:t[1],type:"public"}}:{kind:"local",result:{type:"error",text:"Usage: /create <name>"}};case"destroy":return t[1]?{kind:"action",action:{action:"destroy_room",room:t[1]}}:{kind:"local",result:{type:"error",text:"Usage: /destroy <room>"}};case"rename":return!t[1]||!t[2]?{kind:"local",result:{type:"error",text:"Usage: /rename <agent> <new-name>"}}:{kind:"action",action:{action:"rename_agent",agent:t[1],name:t.slice(2).join(" ")}};case"help":return{kind:"local",result:{type:"help",text:"Commands: /join, /leave, /rooms, /agents, /dm, /create, /destroy, /rename, /help"}};default:return{kind:"local",result:{type:"unknown",text:`Unknown command: /${o}`}}}}var Yn=0;function a(e,n,t,o,s,r){n||(n={});var c,d,u=n;if("ref"in u)for(d in u={},n)d=="ref"?c=n[d]:u[d]=n[d];var l={type:e,props:u,key:t,ref:c,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--Yn,__i:-1,__u:0,__source:s,__self:r};if(typeof e=="function"&&(c=e.defaultProps))for(d in c)u[d]===void 0&&(u[d]=c[d]);return g.vnode&&g.vnode(l),l}function tn({message:e}){switch(e.type){case"chat":return a("div",{class:"msg",children:[a("span",{class:"sender",children:e.sender}),a("span",{class:"time",children:xe(e.timestamp)}),":"," ",e.content]});case"dm":return a("div",{class:"msg dm",children:[a("span",{class:"dm-badge",children:"DM"})," ",a("span",{class:"sender",children:e.sender}),a("span",{class:"time",children:xe(e.timestamp)}),":"," ",e.content]});case"system":return a("div",{class:"msg system",children:e.text});case"status":return a("div",{class:"msg status",children:e.text})}}function on({messages:e}){let n=Qe(null);return ne(()=>{n.current&&(n.current.scrollTop=n.current.scrollHeight)},[e.length]),a("div",{id:"messages",ref:n,children:e.map((t,o)=>a(tn,{message:t},o))})}function rn({messages:e,currentRoom:n,dmTarget:t,connected:o,onSendAction:s,onLeaveRoom:r,onConnectToMesh:c}){let[d,u]=b(""),l=n??(t?`DM with ${t}`:"Select a room"),p=()=>{let i=d.trim();if(!i)return;switch(te(i,n,t).kind){case"action":s(i);break;case"local":s(i);break;case"ignored":break}u("")},f=i=>{i.key==="Enter"&&p()};return a("div",{id:"main",children:[a("div",{id:"header",children:[l,n&&a("button",{class:"leave-btn",onClick:r,children:"Leave"})]}),a(on,{messages:e}),!o&&e.length===0&&a("div",{class:"connect-prompt",children:[a("p",{children:"Connect to a local mesh to discover agents and rooms."}),a("button",{class:"connect-btn",onClick:c,children:"Connect to local mesh"})]}),a("div",{id:"input-bar",children:[a("input",{id:"input",type:"text",placeholder:"Type a message or /command...",autocomplete:"off",value:d,onInput:i=>{u(M(i).value)},onKeyDown:f}),a("button",{id:"send-btn",onClick:p,children:"Send"})]})]})}function an(e,n,t){let[o,...s]=n;if(o===void 0){e.agents.push(t);return}let r=e.children.get(o);r||(r={children:new Map,agents:[]},e.children.set(o,r)),an(r,s,t)}function cn(e,n){let[t,...o]=n;if(t===void 0)return;let s=e.children.get(t);s||(s={children:new Map,agents:[]},e.children.set(t,s)),cn(s,o)}var ln="Project room for ";function sn(e){return e.description.startsWith(ln)}function Zn(e){return e.description.slice(ln.length)}function dn(e,n){let t=n.filter(p=>!sn(p)),o=new Map;for(let p of n)sn(p)&&o.set(Zn(p),p);let s=new Set;for(let p of e)s.add(p.cwd);for(let p of o.keys())s.add(p);if(s.size===0)return{roots:[],manualRooms:t};let r=Array.from(s),c=nt(r),d=c==="/"?[]:oe(c),u={children:new Map,agents:[]};for(let p of e){let f=oe(p.cwd).slice(d.length);an(u,f,p)}for(let p of o.keys()){let f=oe(p).slice(d.length);cn(u,f)}let l=pn(u,c,"",o);return{roots:un(l),manualRooms:t}}function oe(e){return e.split("/").filter(n=>n.length>0)}function et(...e){return"/"+e.join("/")}function nt(e){if(e.length===0)return"/";let n=e.map(oe),t=Math.min(...n.map(s=>s.length)),o=0;for(let s=0;s<t;s++){let r=n[0]?.[s];if(r===void 0)break;if(n.every(c=>c[s]===r))o++;else break}return o>0&&o--,o===0?"/":et(...n[0]?.slice(0,o)??[])}function pn(e,n,t,o){let s=[];for(let[r,c]of e.children){let d=t===""&&n==="/"?"/"+r:t===""?n+"/"+r:t+"/"+r,u=pn(c,n,d,o);if(u.length>0){let l=o.get(d);s.push({type:"directory",name:r,path:d,...l?{roomId:l.id}:{},children:un(u)})}}for(let r of e.agents)s.push({type:"agent",name:r.name,agentId:r.id,status:r.status,cwd:r.cwd});return s}function un(e){return[...e].sort((n,t)=>n.type!==t.type?n.type==="directory"?-1:1:n.name.localeCompare(t.name))}function mn({visible:e,onSubmit:n,onCancel:t}){let[o,s]=b(""),[r,c]=b("public"),[d,u]=b("");return e?a("div",{id:"create-room-form",class:"visible",children:a("form",{class:"create-room-form",onSubmit:p=>{p.preventDefault(),o.trim()&&(n(o.trim(),r,d.trim()),s(""),c("public"),u(""))},children:[a("label",{children:["Room name",a("input",{type:"text",name:"room-name",required:!0,placeholder:"e.g. project-alpha",value:o,onInput:p=>{s(M(p).value)}})]}),a("label",{children:["Type",a("select",{name:"room-type",value:r,onChange:p=>{let f=M(p).value;(f==="public"||f==="private"||f==="secret")&&c(f)},children:[a("option",{value:"public",children:"Public"}),a("option",{value:"private",children:"Private"}),a("option",{value:"secret",children:"Secret"})]})]}),a("label",{children:["Description (optional)",a("input",{type:"text",name:"room-description",placeholder:"What is this room about?",value:d,onInput:p=>{u(M(p).value)}})]}),a("div",{class:"create-room-btns",children:[a("button",{type:"submit",class:"create-room-submit",children:"Create"}),a("button",{type:"button",class:"create-room-cancel",onClick:t,children:"Cancel"})]})]})}):null}function fn({visible:e,onSubmit:n,onCancel:t}){let[o,s]=b("");if(!e)return a("div",{id:"join-form",class:"join-form hidden"});let r=()=>{let d=o.trim();d&&(n(d),s(""))};return a("div",{id:"join-form",class:"join-form",children:[a("input",{class:"join-input",type:"text",placeholder:"Room name...",autocomplete:"off",value:o,onInput:d=>{s(M(d).value)},onKeyDown:d=>{d.key==="Enter"&&r(),d.key==="Escape"&&t()}}),a("button",{class:"join-submit",onClick:r,children:"Join"})]})}function _n({tree:e,onJoinRoom:n,onSelectAgent:t,onRenameAgent:o,currentRoom:s}){return a("div",{id:"room-list",class:"project-tree",children:[e.roots.map(r=>a(gn,{node:r,onJoinRoom:n,onSelectAgent:t,onRenameAgent:o,currentRoom:s})),e.manualRooms.length>0&&a("div",{class:"tree-section",children:[a("h3",{class:"tree-section-heading",children:"Rooms"}),e.manualRooms.map(r=>a("div",{class:"room-item"+(s===r.id?" active":""),onClick:()=>{n(r.id)},children:[a("span",{children:r.name}),a("span",{children:["(",String(r.members.length),")"]})]},r.id))]})]})}function gn({node:e,onJoinRoom:n,onSelectAgent:t,onRenameAgent:o,currentRoom:s}){return e.type==="agent"?a(ot,{node:e,onSelectAgent:t,onRenameAgent:o}):a(tt,{node:e,onJoinRoom:n,onSelectAgent:t,onRenameAgent:o,currentRoom:s})}function tt({node:e,onJoinRoom:n,onSelectAgent:t,onRenameAgent:o,currentRoom:s}){let[r,c]=b(!0),d=e.roomId!==void 0,u=s===e.roomId;return a("div",{class:"tree-directory",children:[a("div",{class:"tree-directory-name",children:[a("span",{class:"tree-folder-toggle",title:"Expand/collapse",onClick:l=>{l.stopPropagation(),c(!r)},children:a("span",{class:"tree-folder-icon",children:r?"\u{1F4C2}":"\u{1F4C1}"})}),a("span",{class:`tree-directory-label${u?" active":""}${d?" clickable":""}`,onClick:()=>{e.roomId&&n(e.roomId)},children:e.name})]}),r&&a("div",{class:"tree-children",children:e.children.map(l=>a(gn,{node:l,onJoinRoom:n,onSelectAgent:t,onRenameAgent:o,currentRoom:s},l.type==="agent"?l.agentId:l.path))})]})}function ot({node:e,onSelectAgent:n,onRenameAgent:t}){let[o,s]=b(!1),[r,c]=b(""),d=()=>{c(e.name),s(!0)},u=()=>{let p=r.trim();p&&p!==e.name&&t(e.agentId,p),s(!1)},l=p=>{p.key==="Enter"&&u(),p.key==="Escape"&&s(!1)};return o?a("div",{class:"tree-agent agent-item editing",children:[a("span",{class:`status-dot ${e.status}`}),a("input",{class:"agent-rename-input",type:"text",value:r,autofocus:!0,onInput:p=>{c(M(p).value)},onKeyDown:l,onBlur:u})]}):a("div",{class:"tree-agent agent-item",onClick:()=>{n(e.agentId)},onDblClick:d,children:[a("span",{class:`status-dot ${e.status}`}),a("span",{children:e.name})]})}function hn({status:e,onConnect:n,onDisconnect:t}){let[o,s]=b(e.urlA??"ws://localhost:8080/ws/mesh"),[r,c]=b(e.urlB??"ws://localhost:8081/ws/mesh"),[d,u]=b(!1),l=e.connectedA&&e.connectedB,p=e.connectedA||e.connectedB;return ne(()=>{e.urlA&&s(e.urlA),e.urlB&&c(e.urlB)},[e.urlA,e.urlB]),d?a("div",{class:"relay-panel",children:[a("div",{class:"relay-header",children:[a("span",{class:"relay-title",children:"Mesh Relay"}),a("button",{class:"relay-collapse-btn",onClick:()=>{u(!1)},title:"Collapse relay panel",children:"\u2715"})]}),a("form",{class:"relay-form",onSubmit:i=>{i.preventDefault(),o.trim()&&r.trim()&&n(o.trim(),r.trim())},children:[a("label",{class:"relay-label",children:["Mesh A",a("input",{type:"url",class:"relay-input",placeholder:"ws://machine-a:8080/ws/mesh",value:o,onInput:i=>{let m=i.target;m instanceof HTMLInputElement&&s(m.value)},disabled:p}),a("span",{class:`relay-status-dot ${e.connectedA?"active":""}`})]}),a("label",{class:"relay-label",children:["Mesh B",a("input",{type:"url",class:"relay-input",placeholder:"ws://machine-b:8080/ws/mesh",value:r,onInput:i=>{let m=i.target;m instanceof HTMLInputElement&&c(m.value)},disabled:p}),a("span",{class:`relay-status-dot ${e.connectedB?"active":""}`})]}),a("div",{class:"relay-actions",children:p?a("button",{type:"button",class:"relay-disconnect-btn",onClick:t,children:"Disconnect"}):a("button",{type:"submit",class:"relay-connect-btn",disabled:!o.trim()||!r.trim(),children:"Connect"})})]}),p&&a("div",{class:"relay-stats",children:[a("span",{class:"relay-stat",children:["Forwarded: ",e.forwardedCount]}),a("span",{class:"relay-stat",children:["A: ",e.connectedA?"connected":"disconnected"]}),a("span",{class:"relay-stat",children:["B: ",e.connectedB?"connected":"disconnected"]})]}),e.errors.length>0&&a("div",{class:"relay-errors",children:e.errors.slice(-3).map((i,m)=>a("div",{class:"relay-error",children:i},m))})]}):a("div",{class:"relay-panel relay-collapsed",children:a("button",{class:"relay-toggle-btn",onClick:()=>{u(!0)},children:["\u293A Relay",l&&a("span",{class:"relay-badge relay-badge-green",children:"\u25CF"}),p&&!l&&a("span",{class:"relay-badge relay-badge-yellow",children:"\u25CF"}),e.forwardedCount>0&&a("span",{class:"relay-count",children:e.forwardedCount})]})})}function yn({rooms:e,agents:n,currentRoom:t,relayStatus:o,collapsed:s,onJoinRoom:r,onSelectAgent:c,onRenameAgent:d,onCreateRoom:u,onJoinRoomInput:l,onRelayConnect:p,onRelayDisconnect:f}){let[i,m]=b(!1),[y,S]=b(!1),[v,x]=b(!1),_=v?n:n.filter(R=>R.status!=="offline"),A=dn(_,e);return a("div",{id:"sidebar",class:s?"sidebar-collapsed":"",children:[a("h2",{children:["Agent Comms",a("button",{id:"toggle-offline-btn",class:`icon-btn${v?" active":""}`,title:`${v?"Hide":"Show"} offline agents`,onClick:()=>{x(R=>!R)},children:v?"\u25C9":"\u25CE"})]}),a("div",{class:"sidebar-section",children:[a(_n,{tree:A,onJoinRoom:r,onSelectAgent:c,onRenameAgent:d,currentRoom:t}),a("div",{class:"section-heading",children:[a("h3",{children:"Create"}),a("button",{id:"create-room-toggle",class:"icon-btn",title:"Create room",onClick:()=>{m(R=>!R)},children:"+"})]}),a(mn,{visible:i,onSubmit:(R,j,N)=>{u(R,j,N),m(!1)},onCancel:()=>{m(!1)}}),a("button",{id:"join-toggle-btn",class:"join-toggle-btn",onClick:()=>{S(R=>!R)},children:"+ Join Room"}),a(fn,{visible:y,onSubmit:R=>{l(R),S(!1)},onCancel:()=>{S(!1)}}),a(hn,{status:o,onConnect:p,onDisconnect:f})]})]})}function vn(e){let[n,t]=b(!1);return a(I,{children:[a("button",{id:"sidebar-toggle",class:"sidebar-toggle-btn",title:n?"Expand sidebar":"Collapse sidebar",onClick:()=>{t(o=>!o)},children:n?"\u2630":"\u2715"}),a(yn,{rooms:e.rooms,agents:e.agents,currentRoom:e.currentRoom,relayStatus:e.relayStatus,collapsed:n,onJoinRoom:e.onJoinRoom,onSelectAgent:e.onSelectAgent,onRenameAgent:e.onRenameAgent,onCreateRoom:e.onCreateRoom,onJoinRoomInput:e.onJoinRoomInput,onRelayConnect:e.onRelayConnect,onRelayDisconnect:e.onRelayDisconnect}),a(rn,{messages:e.messages,currentRoom:e.currentRoom,dmTarget:e.dmTarget,connected:e.connected,onSendAction:e.onSendAction,onLeaveRoom:e.onLeaveRoom,onConnectToMesh:e.onConnectToMesh})]})}function rt(e){return typeof e=="object"&&e!==null}function st(e){return Array.isArray(e)}function it(e){return Array.isArray(e)}function at(e){return Array.isArray(e)}function ct(e){return rt(e)&&typeof e.type=="string"}async function bn(){let n=await(await fetch("/api/agents")).json();if(!st(n))throw new Error("Invalid agents response");return n}async function xn(){let n=await(await fetch("/api/rooms")).json();if(!it(n))throw new Error("Invalid rooms response");return n}async function kn(e,n){let t=n?`/api/rooms/${encodeURIComponent(e)}/messages?since=${encodeURIComponent(n)}`:`/api/rooms/${encodeURIComponent(e)}/messages`,s=await(await fetch(t)).json();if(!at(s))throw new Error("Invalid messages response");return s}var re=class{constructor(n){C(this,"ws");C(this,"reconnectTimer");C(this,"handler");this.handler=n}connect(){let n=location.protocol==="https:"?"wss:":"ws:",t=new WebSocket(`${n}//${location.host}`);this.ws=t,t.onopen=()=>{this.handler.onOpen?.()},t.onclose=()=>{this.handler.onClose?.(),this.scheduleReconnect()},t.onerror=()=>{},t.onmessage=o=>{let s=JSON.parse(typeof o.data=="string"?o.data:String(o.data));ct(s)&&this.handler.onFrame?.(s)}}sendAction(n){let t=this.ws;t?.readyState===WebSocket.OPEN&&t.send(JSON.stringify(n))}disconnect(){this.reconnectTimer!==void 0&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0);let n=this.ws;n&&n.close(),this.ws=void 0}scheduleReconnect(){this.reconnectTimer=setTimeout(()=>{this.connect()},3e3)}};var wn={currentRoom:void 0,dmTarget:void 0,agents:[],rooms:[],messages:[],connected:!1},se=class{constructor(){C(this,"state",{...wn});C(this,"listeners",new Set)}subscribe(n){return this.listeners.add(n),()=>{this.listeners.delete(n)}}get(){return this.state}setCurrentRoom(n){this.state={...this.state,currentRoom:n},this.notify()}setDmTarget(n){this.state={...this.state,dmTarget:n},this.notify()}setAgents(n){this.state={...this.state,agents:n},this.notify()}setRooms(n){this.state={...this.state,rooms:n},this.notify()}setConnected(n){this.state={...this.state,connected:n},this.notify()}addMessage(n){this.state={...this.state,messages:[...this.state.messages,n]},this.notify()}setMessages(n){this.state={...this.state,messages:n},this.notify()}clearMessages(){this.state={...this.state,messages:[]},this.notify()}applyState(n,t){this.state={...this.state,agents:n,rooms:t},this.notify()}reset(){this.state={...wn,messages:[]},this.notify()}notify(){let n=this.state;for(let t of this.listeners)t(n)}};var ie=class{constructor(){C(this,"worker");C(this,"state",{agents:[],rooms:[],connected:!1});C(this,"listeners",new Set);C(this,"actionCounter",0);C(this,"pendingActions",new Map)}connect(){if(this.worker)return;let n=new SharedWorker("./mesh-worker.js");if(this.worker=n,n.port.onmessage=s=>{let r=JSON.parse(typeof s.data=="string"?s.data:String(s.data));if(lt(r))switch(r.type){case"state":{if(!("state"in r)||typeof r.state!="object"||r.state===null||!("agents"in r.state)||!("rooms"in r.state))break;let c=r.state,d=typeof c.agents=="object"&&c.agents!==null?Object.values(c.agents):[],u=typeof c.rooms=="object"&&c.rooms!==null?Object.values(c.rooms):[];this.state={...this.state,agents:d,rooms:u},this.notify();break}case"connected":this.state={...this.state,connected:!0},this.notify();break;case"disconnected":this.state={...this.state,connected:!1},this.notify();break;case"patch":this.postToWorker({type:"getState"});break;case"actionResult":break;case"actionError":break}},n.port.start(),/^(localhost|127\.\d+\.\d+\.\d+)(:\d+)?$/.test(location.host)){let r=`${location.protocol==="https:"?"wss:":"ws:"}//${location.host}/ws/mesh`;this.postToWorker({type:"init",url:r})}else this.probeLocalMesh(19877,10)}get(){return this.state}subscribe(n){return this.listeners.add(n),()=>{this.listeners.delete(n)}}sendAction(n){let t=String(++this.actionCounter);this.postToWorker({type:"action",id:t,action:n})}disconnect(){this.worker&&(this.worker.port.close(),this.worker=void 0),this.pendingActions.clear()}probeLocalMesh(n,t){let o=0,s=r=>{if(o>=t)return;o++;let c=`ws://127.0.0.1:${String(r)}/ws/mesh`;fetch(`http://127.0.0.1:${String(r)}/`,{mode:"no-cors"}).then(()=>{this.postToWorker({type:"init",url:c})}).catch(()=>{s(r+1)})};s(n)}postToWorker(n){this.worker&&this.worker.port.postMessage(JSON.stringify(n))}notify(){let n=this.state;for(let t of this.listeners)t(n)}};function lt(e){return typeof e=="object"&&e!==null&&"type"in e}var ae=class{constructor(){C(this,"worker");C(this,"status",{connectedA:!1,connectedB:!1,urlA:void 0,urlB:void 0,forwardedCount:0,errors:[]});C(this,"listeners",new Set)}connect(){if(this.worker)return;let n=new SharedWorker("./relay-worker.js");this.worker=n,n.port.onmessage=t=>{let o=JSON.parse(typeof t.data=="string"?t.data:String(t.data));dt(o)?(this.status=o.status,this.notify()):pt(o)&&console.error("[RelayClient]",o.message)},n.port.start()}connectRelay(n,t){this.postToWorker({type:"connect",urlA:n,urlB:t})}disconnect(){this.postToWorker({type:"disconnect"})}get(){return this.status}subscribe(n){return this.listeners.add(n),()=>{this.listeners.delete(n)}}destroy(){this.worker&&(this.worker.port.close(),this.worker=void 0)}postToWorker(n){this.worker&&this.worker.port.postMessage(JSON.stringify(n))}notify(){let n=this.status;for(let t of this.listeners)t(n)}};function dt(e){return typeof e=="object"&&e!==null&&"type"in e&&typeof e.type=="string"&&e.type==="status"&&"status"in e}function pt(e){return typeof e=="object"&&e!==null&&"type"in e&&typeof e.type=="string"&&e.type==="error"}var ut=/^(localhost|127\.\d+\.\d+\.\d+)(:\d+)?$/;function Rn(e){return ut.test(e)}function Cn(e){return e.getItem("agent-comms-connected")==="true"}function Sn(e,n){switch(e.type){case"room_message":return n===e.message.room?{type:"chat",sender:e.message.from,content:e.message.content,timestamp:e.message.timestamp}:void 0;case"dm":return{type:"dm",sender:e.message.from,content:e.message.content,timestamp:e.message.timestamp};case"member_joined":return{type:"system",text:`${e.agent} joined ${e.room}`};case"member_left":return{type:"system",text:`${e.agent} left ${e.room}`};case"member_status":return{type:"status",text:`${e.agent} is now ${e.status} in ${e.room}`};case"delivery_status":return{type:"status",text:`Message ${e.messageId} ${e.status} by ${e.agent}`};case"room_members":return n===e.room?{type:"system",text:`Members: ${e.members.map(o=>`${o.name} (${o.status})`).join(", ")}`}:void 0;case"room_invite":{let t=e.roomDescription?` \u2014 ${e.roomDescription}`:"";return{type:"system",text:`${e.fromName} invited you to "${e.room}"${t}`}}case"invite_declined":return{type:"system",text:`${e.agentName} declined invite to ${e.room}: "${e.reason}"`};case"name_changed":return{type:"system",text:`${e.oldName} is now known as ${e.newName}`}}}function An(e){return{type:"chat",sender:e.from,content:e.content,timestamp:e.timestamp}}var mt="Project room for ";function Tn(e){let n=new URLSearchParams(e),t=n.get("room");if(t)return{kind:"room",roomId:t};let o=n.get("dm");if(o)return{kind:"dm",agentId:o};let s=n.get("cwd");if(s)return{kind:"cwd",path:s}}function Mn(e,n){switch(e.kind){case"room":return n.some(t=>t.id===e.roomId)?{kind:"room",targetId:e.roomId}:void 0;case"dm":return{kind:"dm",targetId:e.agentId};case"cwd":{let t=n.find(o=>o.description===`${mt}${e.path}`);return t?{kind:"room",targetId:t.id}:void 0}}}function jn(e){let n=new URL(location.href);n.searchParams.delete("room"),n.searchParams.delete("dm"),n.searchParams.delete("cwd"),e.currentRoom?n.searchParams.set("room",e.currentRoom):e.dmTarget&&n.searchParams.set("dm",e.dmTarget);let t=n.pathname+n.search+n.hash;history.replaceState(null,"",t)}var W=Rn(location.host),ft=en(document,"#root"),h=new se,we=new ie;we.subscribe(e=>{e.agents.length>0&&h.setAgents(e.agents),e.rooms.length>0&&h.setRooms(e.rooms),h.setConnected(e.connected)});var z=new ae,En=z.get();z.connect();z.subscribe(e=>{En=e});function D(e){h.addMessage(e)}var ce,Re=new re({onOpen:()=>{h.setConnected(!0),D({type:"system",text:"Connected to mesh"})},onClose:()=>{h.setConnected(!1),D({type:"system",text:"Disconnected \u2014 reconnecting..."})},onFrame:_t});function _t(e){let n=h.get();switch(e.type){case"delivery":{let t=Sn(e.event,n.currentRoom);t&&D(t),(e.event.type==="member_joined"||e.event.type==="member_left"||e.event.type==="member_status"||e.event.type==="name_changed")&&ke();break}case"result":if(D({type:"system",text:e.result.content}),!e.result.isError){if(ce?.action==="join_room"&&!h.get().currentRoom){let t=ce.room;h.setDmTarget(void 0),h.setCurrentRoom(t)}ke()}ce=void 0;break;case"error":D({type:"status",text:`Error: ${e.message}`});break;case"state":h.applyState(e.agents,e.rooms);break}}function U(e){ce=e,Re.sendAction(e)}async function ke(){if(!W)return;let[e,n]=await Promise.all([bn(),xn()]);h.setAgents(e),h.setRooms(n)}async function le(e){if(h.setDmTarget(void 0),h.setCurrentRoom(e),h.clearMessages(),U({action:"join_room",room:e}),W){let n=await kn(e);h.setMessages(n.map(An))}D({type:"system",text:`Joined ${e}`})}function In(e){h.setCurrentRoom(void 0),h.setDmTarget(e),h.clearMessages()}function Dn(){let e=h.get().currentRoom;e&&(U({action:"leave_room",room:e}),h.setCurrentRoom(void 0),h.clearMessages(),D({type:"system",text:`Left room "${e}"`}))}function gt(e){let n=h.get(),t=te(e,n.currentRoom,n.dmTarget),o=nn(t);if(o)switch(o.kind){case"join_room":le(o.room);return;case"leave_room":Dn();return}switch(t.kind){case"action":U(t.action);break;case"local":D({type:"system",text:t.result.text});break;case"ignored":break}}function ht(e,n,t){let o={action:"create_room",name:e,type:n,...t?{description:t}:{}};U(o)}function yt(e){le(e)}function vt(e,n){U({action:"rename_agent",agent:e,name:n})}function Nn(){let e=h.get();jn({currentRoom:e.currentRoom,dmTarget:e.dmTarget}),ze(a(vn,{rooms:e.rooms,agents:e.agents,currentRoom:e.currentRoom,dmTarget:e.dmTarget,messages:e.messages,connected:e.connected,relayStatus:En,onJoinRoom:n=>{le(n)},onSelectAgent:In,onRenameAgent:vt,onLeaveRoom:Dn,onSendAction:gt,onCreateRoom:ht,onJoinRoomInput:yt,onRelayConnect:(n,t)=>{z.connectRelay(n,t)},onRelayDisconnect:()=>{z.disconnect()},onConnectToMesh:()=>{localStorage.setItem("agent-comms-connected","true"),we.connect(),W&&Re.connect()}}),ft)}h.subscribe(Nn);var Pn=Tn(location.search);Nn();var bt=Cn(localStorage);(W||bt)&&(we.connect(),W&&Re.connect());ke().then(()=>{if(!Pn)return;let e=h.get(),n=Mn(Pn,e.rooms);if(n)switch(n.kind){case"room":le(n.targetId);break;case"dm":In(n.targetId);break}});})();
|
|
565
|
+
`}));var H,b,_e,He,Z=0,qe=[],x=h,ze=x.__b,We=x.__r,Ue=x.diffed,Je=x.__c,Oe=x.unmount,Ve=x.__;function he(e,n){x.__h&&x.__h(b,e,Z||n),Z=0;var t=b.__H||(b.__H={__:[],__h:[]});return e>=t.__.length&&t.__.push({}),t.__[e]}function w(e){return Z=1,Jn(Qe,e)}function Jn(e,n,t){var o=he(H++,2);if(o.t=e,!o.__c&&(o.__=[t?t(n):Qe(void 0,n),function(d){var u=o.__N?o.__N[0]:o.__[0],l=o.t(u,d);u!==l&&(o.__N=[l,o.__[1]],o.__c.setState({}))}],o.__c=b,!b.__f)){var i=function(d,u,l){if(!o.__c.__H)return!0;var p=!1,f=o.__c.props!==d;if(o.__c.__H.__.some(function(m){if(m.__N){p=!0;var y=m.__[0];m.__=m.__N,m.__N=void 0,y!==m.__[0]&&(f=!0)}}),r){var s=r.call(this,d,u,l);return p?s||f:s}return!p||f};b.__f=!0;var r=b.shouldComponentUpdate,a=b.componentWillUpdate;b.componentWillUpdate=function(d,u,l){if(this.__e){var p=r;r=void 0,i(d,u,l),r=p}a&&a.call(this,d,u,l)},b.shouldComponentUpdate=i}return o.__N||o.__}function Ke(e,n){var t=he(H++,3);!x.__s&&Ge(t.__H,n)&&(t.__=e,t.u=n,b.__H.__h.push(t))}function Xe(e){return Z=5,On(function(){return{current:e}},[])}function On(e,n){var t=he(H++,7);return Ge(t.__H,n)&&(t.__=e(),t.__H=n,t.__h=e),t.__}function Vn(){for(var e;e=qe.shift();){var n=e.__H;if(e.__P&&n)try{n.__h.some(Y),n.__h.some(ge),n.__h=[]}catch(t){n.__h=[],x.__e(t,e.__v)}}}x.__b=function(e){b=null,ze&&ze(e)},x.__=function(e,n){e&&n.__k&&n.__k.__m&&(e.__m=n.__k.__m),Ve&&Ve(e,n)},x.__r=function(e){We&&We(e),H=0;var n=(b=e.__c).__H;n&&(_e===b?(n.__h=[],b.__h=[],n.__.some(function(t){t.__N&&(t.__=t.__N),t.u=t.__N=void 0})):(n.__h.some(Y),n.__h.some(ge),n.__h=[],H=0)),_e=b},x.diffed=function(e){Ue&&Ue(e);var n=e.__c;n&&n.__H&&(n.__H.__h.length&&(qe.push(n)!==1&&He===x.requestAnimationFrame||((He=x.requestAnimationFrame)||Bn)(Vn)),n.__H.__.some(function(t){t.u&&(t.__H=t.u,t.u=void 0)})),_e=b=null},x.__c=function(e,n){n.some(function(t){try{t.__h.some(Y),t.__h=t.__h.filter(function(o){return!o.__||ge(o)})}catch(o){n.some(function(i){i.__h&&(i.__h=[])}),n=[],x.__e(o,t.__v)}}),Je&&Je(e,n)},x.unmount=function(e){Oe&&Oe(e);var n,t=e.__c;t&&t.__H&&(t.__H.__.some(function(o){try{Y(o)}catch(i){n=i}}),t.__H=void 0,n&&x.__e(n,t.__v))};var Be=typeof requestAnimationFrame=="function";function Bn(e){var n,t=function(){clearTimeout(o),Be&&cancelAnimationFrame(n),setTimeout(e)},o=setTimeout(t,35);Be&&(n=requestAnimationFrame(t))}function Y(e){var n=b,t=e.__c;typeof t=="function"&&(e.__c=void 0,t()),b=n}function ge(e){var n=b;e.__c=e.__(),b=n}function Ge(e,n){return!e||e.length!==n.length||n.some(function(t,o){return t!==e[o]})}function Qe(e,n){return typeof n=="function"?n(e):n}function Ye(e,n,t){let o=e.querySelector(n);if(!o)throw new Error(`Required element not found: ${n}`);if(t&&o.tagName.toLowerCase()!==t)throw new Error(`Element ${n} must be <${t}>, got <${o.tagName.toLowerCase()}>`);return o}function ve(e){return e.slice(11,19)}function S(e){let n=e.target;if(n instanceof HTMLInputElement||n instanceof HTMLSelectElement)return n;throw new Error("Event target is not an input element")}function Ze(e){if(e.kind!=="action")return null;let n=e.action;return n.action==="join_room"?{kind:"join_room",room:n.room}:n.action==="leave_room"?{kind:"leave_room"}:null}function ee(e,n,t){let o=e.trim();return o.length===0?{kind:"ignored"}:o.startsWith("/")?qn(o,n):n?{kind:"action",action:{action:"send",target:n,content:o}}:t?{kind:"action",action:{action:"dm",target:t,content:o}}:{kind:"local",result:{type:"error",text:"Join a room or select an agent first"}}}function qn(e,n){let t=e.slice(1).split(/\s+/),o=(t[0]??"").toLowerCase();switch(o){case"join":return t[1]?{kind:"action",action:{action:"join_room",room:t[1]}}:{kind:"local",result:{type:"error",text:"Usage: /join <room>"}};case"leave":return{kind:"action",action:{action:"leave_room",room:t[1]??n??""}};case"rooms":return{kind:"action",action:{action:"list_rooms"}};case"agents":return{kind:"action",action:{action:"list_agents"}};case"dm":return!t[1]||!t[2]?{kind:"local",result:{type:"error",text:"Usage: /dm <agent> <message>"}}:{kind:"action",action:{action:"dm",target:t[1],content:t.slice(2).join(" ")}};case"create":return t[1]?{kind:"action",action:{action:"create_room",name:t[1],type:"public"}}:{kind:"local",result:{type:"error",text:"Usage: /create <name>"}};case"destroy":return t[1]?{kind:"action",action:{action:"destroy_room",room:t[1]}}:{kind:"local",result:{type:"error",text:"Usage: /destroy <room>"}};case"rename":return!t[1]||!t[2]?{kind:"local",result:{type:"error",text:"Usage: /rename <agent> <new-name>"}}:{kind:"action",action:{action:"rename_agent",agent:t[1],name:t.slice(2).join(" ")}};case"help":return{kind:"local",result:{type:"help",text:"Commands: /join, /leave, /rooms, /agents, /dm, /create, /destroy, /rename, /help"}};default:return{kind:"local",result:{type:"unknown",text:`Unknown command: /${o}`}}}}var Kn=0;function c(e,n,t,o,i,r){n||(n={});var a,d,u=n;if("ref"in u)for(d in u={},n)d=="ref"?a=n[d]:u[d]=n[d];var l={type:e,props:u,key:t,ref:a,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--Kn,__i:-1,__u:0,__source:i,__self:r};if(typeof e=="function"&&(a=e.defaultProps))for(d in a)u[d]===void 0&&(u[d]=a[d]);return h.vnode&&h.vnode(l),l}function en({message:e}){switch(e.type){case"chat":return c("div",{class:"msg",children:[c("span",{class:"sender",children:e.sender}),c("span",{class:"time",children:ve(e.timestamp)}),":"," ",e.content]});case"dm":return c("div",{class:"msg dm",children:[c("span",{class:"dm-badge",children:"DM"})," ",c("span",{class:"sender",children:e.sender}),c("span",{class:"time",children:ve(e.timestamp)}),":"," ",e.content]});case"system":return c("div",{class:"msg system",children:e.text});case"status":return c("div",{class:"msg status",children:e.text})}}function nn({messages:e}){let n=Xe(null);return Ke(()=>{n.current&&(n.current.scrollTop=n.current.scrollHeight)},[e.length]),c("div",{id:"messages",ref:n,children:e.map((t,o)=>c(en,{message:t},o))})}function tn({messages:e,currentRoom:n,dmTarget:t,connected:o,onSendAction:i,onLeaveRoom:r,onConnectToMesh:a}){let[d,u]=w(""),l=n??(t?`DM with ${t}`:"Select a room"),p=()=>{let s=d.trim();if(!s)return;switch(ee(s,n,t).kind){case"action":i(s);break;case"local":i(s);break;case"ignored":break}u("")},f=s=>{s.key==="Enter"&&p()};return c("div",{id:"main",children:[c("div",{id:"header",children:[l,n&&c("button",{class:"leave-btn",onClick:r,children:"Leave"})]}),c(nn,{messages:e}),!o&&e.length===0&&c("div",{class:"connect-prompt",children:[c("p",{children:"Connect to a local mesh to discover agents and rooms."}),c("button",{class:"connect-btn",onClick:a,children:"Connect to local mesh"})]}),c("div",{id:"input-bar",children:[c("input",{id:"input",type:"text",placeholder:"Type a message or /command...",autocomplete:"off",value:d,onInput:s=>{u(S(s).value)},onKeyDown:f}),c("button",{id:"send-btn",onClick:p,children:"Send"})]})]})}function rn(e,n,t){let[o,...i]=n;if(o===void 0){e.agents.push(t);return}let r=e.children.get(o);r||(r={children:new Map,agents:[]},e.children.set(o,r)),rn(r,i,t)}function sn(e,n){let[t,...o]=n;if(t===void 0)return;let i=e.children.get(t);i||(i={children:new Map,agents:[]},e.children.set(t,i)),sn(i,o)}var an="Project room for ";function on(e){return e.description.startsWith(an)}function Xn(e){return e.description.slice(an.length)}function cn(e,n){let t=n.filter(p=>!on(p)),o=new Map;for(let p of n)on(p)&&o.set(Xn(p),p);let i=new Set;for(let p of e)i.add(p.cwd);for(let p of o.keys())i.add(p);if(i.size===0)return{roots:[],manualRooms:t};let r=Array.from(i),a=Qn(r),d=a==="/"?[]:ne(a),u={children:new Map,agents:[]};for(let p of e){let f=ne(p.cwd).slice(d.length);rn(u,f,p)}for(let p of o.keys()){let f=ne(p).slice(d.length);sn(u,f)}let l=ln(u,a,"",o);return{roots:dn(l),manualRooms:t}}function ne(e){return e.split("/").filter(n=>n.length>0)}function Gn(...e){return"/"+e.join("/")}function Qn(e){if(e.length===0)return"/";let n=e.map(ne),t=Math.min(...n.map(i=>i.length)),o=0;for(let i=0;i<t;i++){let r=n[0]?.[i];if(r===void 0)break;if(n.every(a=>a[i]===r))o++;else break}return o>0&&o--,o===0?"/":Gn(...n[0]?.slice(0,o)??[])}function ln(e,n,t,o){let i=[];for(let[r,a]of e.children){let d=t===""&&n==="/"?"/"+r:t===""?n+"/"+r:t+"/"+r,u=ln(a,n,d,o);if(u.length>0){let l=o.get(d);i.push({type:"directory",name:r,path:d,...l?{roomId:l.id}:{},children:dn(u)})}}for(let r of e.agents)i.push({type:"agent",name:r.name,agentId:r.id,status:r.status,cwd:r.cwd});return i}function dn(e){return[...e].sort((n,t)=>n.type!==t.type?n.type==="directory"?-1:1:n.name.localeCompare(t.name))}function pn({visible:e,onSubmit:n,onCancel:t}){let[o,i]=w(""),[r,a]=w("public"),[d,u]=w("");return e?c("div",{id:"create-room-form",class:"visible",children:c("form",{class:"create-room-form",onSubmit:p=>{p.preventDefault(),o.trim()&&(n(o.trim(),r,d.trim()),i(""),a("public"),u(""))},children:[c("label",{children:["Room name",c("input",{type:"text",name:"room-name",required:!0,placeholder:"e.g. project-alpha",value:o,onInput:p=>{i(S(p).value)}})]}),c("label",{children:["Type",c("select",{name:"room-type",value:r,onChange:p=>{let f=S(p).value;(f==="public"||f==="private"||f==="secret")&&a(f)},children:[c("option",{value:"public",children:"Public"}),c("option",{value:"private",children:"Private"}),c("option",{value:"secret",children:"Secret"})]})]}),c("label",{children:["Description (optional)",c("input",{type:"text",name:"room-description",placeholder:"What is this room about?",value:d,onInput:p=>{u(S(p).value)}})]}),c("div",{class:"create-room-btns",children:[c("button",{type:"submit",class:"create-room-submit",children:"Create"}),c("button",{type:"button",class:"create-room-cancel",onClick:t,children:"Cancel"})]})]})}):null}function un({visible:e,onSubmit:n,onCancel:t}){let[o,i]=w("");if(!e)return c("div",{id:"join-form",class:"join-form hidden"});let r=()=>{let d=o.trim();d&&(n(d),i(""))};return c("div",{id:"join-form",class:"join-form",children:[c("input",{class:"join-input",type:"text",placeholder:"Room name...",autocomplete:"off",value:o,onInput:d=>{i(S(d).value)},onKeyDown:d=>{d.key==="Enter"&&r(),d.key==="Escape"&&t()}}),c("button",{class:"join-submit",onClick:r,children:"Join"})]})}function mn({tree:e,onJoinRoom:n,onSelectAgent:t,onRenameAgent:o,currentRoom:i}){return c("div",{id:"room-list",class:"project-tree",children:[e.roots.map(r=>c(fn,{node:r,onJoinRoom:n,onSelectAgent:t,onRenameAgent:o,currentRoom:i})),e.manualRooms.length>0&&c("div",{class:"tree-section",children:[c("h3",{class:"tree-section-heading",children:"Rooms"}),e.manualRooms.map(r=>c("div",{class:"room-item"+(i===r.id?" active":""),onClick:()=>{n(r.id)},children:[c("span",{children:r.name}),c("span",{children:["(",String(r.members.length),")"]})]},r.id))]})]})}function fn({node:e,onJoinRoom:n,onSelectAgent:t,onRenameAgent:o,currentRoom:i}){return e.type==="agent"?c(Zn,{node:e,onSelectAgent:t,onRenameAgent:o}):c(Yn,{node:e,onJoinRoom:n,onSelectAgent:t,onRenameAgent:o,currentRoom:i})}function Yn({node:e,onJoinRoom:n,onSelectAgent:t,onRenameAgent:o,currentRoom:i}){let[r,a]=w(!0),d=e.roomId!==void 0,u=i===e.roomId;return c("div",{class:"tree-directory",children:[c("div",{class:"tree-directory-name",children:[c("span",{class:"tree-folder-toggle",title:"Expand/collapse",onClick:l=>{l.stopPropagation(),a(!r)},children:c("span",{class:"tree-folder-icon",children:r?"\u{1F4C2}":"\u{1F4C1}"})}),c("span",{class:`tree-directory-label${u?" active":""}${d?" clickable":""}`,onClick:()=>{e.roomId&&n(e.roomId)},children:e.name})]}),r&&c("div",{class:"tree-children",children:e.children.map(l=>c(fn,{node:l,onJoinRoom:n,onSelectAgent:t,onRenameAgent:o,currentRoom:i},l.type==="agent"?l.agentId:l.path))})]})}function Zn({node:e,onSelectAgent:n,onRenameAgent:t}){let[o,i]=w(!1),[r,a]=w(""),d=()=>{a(e.name),i(!0)},u=()=>{let p=r.trim();p&&p!==e.name&&t(e.agentId,p),i(!1)},l=p=>{p.key==="Enter"&&u(),p.key==="Escape"&&i(!1)};return o?c("div",{class:"tree-agent agent-item editing",children:[c("span",{class:`status-dot ${e.status}`}),c("input",{class:"agent-rename-input",type:"text",value:r,autofocus:!0,onInput:p=>{a(S(p).value)},onKeyDown:l,onBlur:u})]}):c("div",{class:"tree-agent agent-item",onClick:()=>{n(e.agentId)},onDblClick:d,children:[c("span",{class:`status-dot ${e.status}`}),c("span",{children:e.name})]})}function _n({rooms:e,agents:n,currentRoom:t,collapsed:o,onJoinRoom:i,onSelectAgent:r,onRenameAgent:a,onCreateRoom:d,onJoinRoomInput:u}){let[l,p]=w(!1),[f,s]=w(!1),[m,y]=w(!1),C=m?n:n.filter(_=>_.status!=="offline"),k=cn(C,e);return c("div",{id:"sidebar",class:o?"sidebar-collapsed":"",children:[c("h2",{children:["Agent Comms",c("button",{id:"toggle-offline-btn",class:`icon-btn${m?" active":""}`,title:`${m?"Hide":"Show"} offline agents`,onClick:()=>{y(_=>!_)},children:m?"\u25C9":"\u25CE"})]}),c("div",{class:"sidebar-section",children:[c(mn,{tree:k,onJoinRoom:i,onSelectAgent:r,onRenameAgent:a,currentRoom:t}),c("div",{class:"section-heading",children:[c("h3",{children:"Create"}),c("button",{id:"create-room-toggle",class:"icon-btn",title:"Create room",onClick:()=>{p(_=>!_)},children:"+"})]}),c(pn,{visible:l,onSubmit:(_,g,R)=>{d(_,g,R),p(!1)},onCancel:()=>{p(!1)}}),c("button",{id:"join-toggle-btn",class:"join-toggle-btn",onClick:()=>{s(_=>!_)},children:"+ Join Room"}),c(un,{visible:f,onSubmit:_=>{u(_),s(!1)},onCancel:()=>{s(!1)}})]})]})}function gn(e){let[n,t]=w(!1);return c(P,{children:[c("button",{id:"sidebar-toggle",class:"sidebar-toggle-btn",title:n?"Expand sidebar":"Collapse sidebar",onClick:()=>{t(o=>!o)},children:n?"\u2630":"\u2715"}),c(_n,{rooms:e.rooms,agents:e.agents,currentRoom:e.currentRoom,collapsed:n,onJoinRoom:e.onJoinRoom,onSelectAgent:e.onSelectAgent,onRenameAgent:e.onRenameAgent,onCreateRoom:e.onCreateRoom,onJoinRoomInput:e.onJoinRoomInput}),c(tn,{messages:e.messages,currentRoom:e.currentRoom,dmTarget:e.dmTarget,connected:e.connected,onSendAction:e.onSendAction,onLeaveRoom:e.onLeaveRoom,onConnectToMesh:e.onConnectToMesh})]})}function et(e){return typeof e=="object"&&e!==null}function nt(e){return Array.isArray(e)}function tt(e){return Array.isArray(e)}function ot(e){return Array.isArray(e)}function rt(e){return et(e)&&typeof e.type=="string"}async function hn(){let n=await(await fetch("/api/agents")).json();if(!nt(n))throw new Error("Invalid agents response");return n}async function vn(){let n=await(await fetch("/api/rooms")).json();if(!tt(n))throw new Error("Invalid rooms response");return n}async function yn(e,n){let t=n?`/api/rooms/${encodeURIComponent(e)}/messages?since=${encodeURIComponent(n)}`:`/api/rooms/${encodeURIComponent(e)}/messages`,i=await(await fetch(t)).json();if(!ot(i))throw new Error("Invalid messages response");return i}var te=class{constructor(n){A(this,"ws");A(this,"reconnectTimer");A(this,"handler");this.handler=n}connect(){let n=location.protocol==="https:"?"wss:":"ws:",t=new WebSocket(`${n}//${location.host}`);this.ws=t,t.onopen=()=>{this.handler.onOpen?.()},t.onclose=()=>{this.handler.onClose?.(),this.scheduleReconnect()},t.onerror=()=>{},t.onmessage=o=>{let i=JSON.parse(typeof o.data=="string"?o.data:String(o.data));rt(i)&&this.handler.onFrame?.(i)}}sendAction(n){let t=this.ws;t?.readyState===WebSocket.OPEN&&t.send(JSON.stringify(n))}disconnect(){this.reconnectTimer!==void 0&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0);let n=this.ws;n&&n.close(),this.ws=void 0}scheduleReconnect(){this.reconnectTimer=setTimeout(()=>{this.connect()},3e3)}};var bn={currentRoom:void 0,dmTarget:void 0,agents:[],rooms:[],messages:[],connected:!1},oe=class{constructor(){A(this,"state",{...bn});A(this,"listeners",new Set)}subscribe(n){return this.listeners.add(n),()=>{this.listeners.delete(n)}}get(){return this.state}setCurrentRoom(n){this.state={...this.state,currentRoom:n},this.notify()}setDmTarget(n){this.state={...this.state,dmTarget:n},this.notify()}setAgents(n){this.state={...this.state,agents:n},this.notify()}setRooms(n){this.state={...this.state,rooms:n},this.notify()}setConnected(n){this.state={...this.state,connected:n},this.notify()}addMessage(n){this.state={...this.state,messages:[...this.state.messages,n]},this.notify()}setMessages(n){this.state={...this.state,messages:n},this.notify()}clearMessages(){this.state={...this.state,messages:[]},this.notify()}applyState(n,t){this.state={...this.state,agents:n,rooms:t},this.notify()}reset(){this.state={...bn,messages:[]},this.notify()}notify(){let n=this.state;for(let t of this.listeners)t(n)}};var re=class{constructor(){A(this,"worker");A(this,"state",{agents:[],rooms:[],connected:!1});A(this,"listeners",new Set);A(this,"actionCounter",0);A(this,"pendingActions",new Map)}connect(){if(this.worker)return;let n=new SharedWorker("./mesh-worker.js");if(this.worker=n,n.port.onmessage=i=>{let r=JSON.parse(typeof i.data=="string"?i.data:String(i.data));if(it(r))switch(r.type){case"state":{if(!("state"in r)||typeof r.state!="object"||r.state===null||!("agents"in r.state)||!("rooms"in r.state))break;let a=r.state,d=typeof a.agents=="object"&&a.agents!==null?Object.values(a.agents):[],u=typeof a.rooms=="object"&&a.rooms!==null?Object.values(a.rooms):[];this.state={...this.state,agents:d,rooms:u},this.notify();break}case"connected":this.state={...this.state,connected:!0},this.notify();break;case"disconnected":this.state={...this.state,connected:!1},this.notify();break;case"patch":this.postToWorker({type:"getState"});break;case"actionResult":break;case"actionError":break}},n.port.start(),/^(localhost|127\.\d+\.\d+\.\d+)(:\d+)?$/.test(location.host)){let r=`${location.protocol==="https:"?"wss:":"ws:"}//${location.host}/ws/mesh`;this.postToWorker({type:"init",url:r})}else this.probeLocalMesh(19877,10)}get(){return this.state}subscribe(n){return this.listeners.add(n),()=>{this.listeners.delete(n)}}sendAction(n){let t=String(++this.actionCounter);this.postToWorker({type:"action",id:t,action:n})}disconnect(){this.worker&&(this.worker.port.close(),this.worker=void 0),this.pendingActions.clear()}probeLocalMesh(n,t){let o=0,i=r=>{if(o>=t)return;o++;let a=`ws://127.0.0.1:${String(r)}/ws/mesh`;fetch(`http://127.0.0.1:${String(r)}/`,{mode:"no-cors"}).then(()=>{this.postToWorker({type:"init",url:a})}).catch(()=>{i(r+1)})};i(n)}postToWorker(n){this.worker&&this.worker.port.postMessage(JSON.stringify(n))}notify(){let n=this.state;for(let t of this.listeners)t(n)}};function it(e){return typeof e=="object"&&e!==null&&"type"in e}var st=/^(localhost|127\.\d+\.\d+\.\d+)(:\d+)?$/;function xn(e){return st.test(e)}function kn(e){return e.getItem("agent-comms-connected")==="true"}function wn(e,n){switch(e.type){case"room_message":return n===e.message.room?{type:"chat",sender:e.message.from,content:e.message.content,timestamp:e.message.timestamp}:void 0;case"dm":return{type:"dm",sender:e.message.from,content:e.message.content,timestamp:e.message.timestamp};case"member_joined":return{type:"system",text:`${e.agent} joined ${e.room}`};case"member_left":return{type:"system",text:`${e.agent} left ${e.room}`};case"member_status":return{type:"status",text:`${e.agent} is now ${e.status} in ${e.room}`};case"delivery_status":return{type:"status",text:`Message ${e.messageId} ${e.status} by ${e.agent}`};case"room_members":return n===e.room?{type:"system",text:`Members: ${e.members.map(o=>`${o.name} (${o.status})`).join(", ")}`}:void 0;case"room_invite":{let t=e.roomDescription?` \u2014 ${e.roomDescription}`:"";return{type:"system",text:`${e.fromName} invited you to "${e.room}"${t}`}}case"invite_declined":return{type:"system",text:`${e.agentName} declined invite to ${e.room}: "${e.reason}"`};case"name_changed":return{type:"system",text:`${e.oldName} is now known as ${e.newName}`}}}function Rn(e){return{type:"chat",sender:e.from,content:e.content,timestamp:e.timestamp}}var at="Project room for ";function Cn(e){let n=new URLSearchParams(e),t=n.get("room");if(t)return{kind:"room",roomId:t};let o=n.get("dm");if(o)return{kind:"dm",agentId:o};let i=n.get("cwd");if(i)return{kind:"cwd",path:i}}function An(e,n){switch(e.kind){case"room":return n.some(t=>t.id===e.roomId)?{kind:"room",targetId:e.roomId}:void 0;case"dm":return{kind:"dm",targetId:e.agentId};case"cwd":{let t=n.find(o=>o.description===`${at}${e.path}`);return t?{kind:"room",targetId:t.id}:void 0}}}function Tn(e){let n=new URL(location.href);n.searchParams.delete("room"),n.searchParams.delete("dm"),n.searchParams.delete("cwd"),e.currentRoom?n.searchParams.set("room",e.currentRoom):e.dmTarget&&n.searchParams.set("dm",e.dmTarget);let t=n.pathname+n.search+n.hash;history.replaceState(null,"",t)}var z=xn(location.host),ct=Ye(document,"#root"),v=new oe,be=new re;be.subscribe(e=>{e.agents.length>0&&v.setAgents(e.agents),e.rooms.length>0&&v.setRooms(e.rooms),v.setConnected(e.connected)});function E(e){v.addMessage(e)}var ie,xe=new te({onOpen:()=>{v.setConnected(!0),E({type:"system",text:"Connected to mesh"})},onClose:()=>{v.setConnected(!1),E({type:"system",text:"Disconnected \u2014 reconnecting..."})},onFrame:lt});function lt(e){let n=v.get();switch(e.type){case"delivery":{let t=wn(e.event,n.currentRoom);t&&E(t),(e.event.type==="member_joined"||e.event.type==="member_left"||e.event.type==="member_status"||e.event.type==="name_changed")&&ye();break}case"result":if(E({type:"system",text:e.result.content}),!e.result.isError){if(ie?.action==="join_room"&&!v.get().currentRoom){let t=ie.room;v.setDmTarget(void 0),v.setCurrentRoom(t)}ye()}ie=void 0;break;case"error":E({type:"status",text:`Error: ${e.message}`});break;case"state":v.applyState(e.agents,e.rooms);break}}function W(e){ie=e,xe.sendAction(e)}async function ye(){if(!z)return;let[e,n]=await Promise.all([hn(),vn()]);v.setAgents(e),v.setRooms(n)}async function se(e){if(v.setDmTarget(void 0),v.setCurrentRoom(e),v.clearMessages(),W({action:"join_room",room:e}),z){let n=await yn(e);v.setMessages(n.map(Rn))}E({type:"system",text:`Joined ${e}`})}function Mn(e){v.setCurrentRoom(void 0),v.setDmTarget(e),v.clearMessages()}function jn(){let e=v.get().currentRoom;e&&(W({action:"leave_room",room:e}),v.setCurrentRoom(void 0),v.clearMessages(),E({type:"system",text:`Left room "${e}"`}))}function dt(e){let n=v.get(),t=ee(e,n.currentRoom,n.dmTarget),o=Ze(t);if(o)switch(o.kind){case"join_room":se(o.room);return;case"leave_room":jn();return}switch(t.kind){case"action":W(t.action);break;case"local":E({type:"system",text:t.result.text});break;case"ignored":break}}function pt(e,n,t){let o={action:"create_room",name:e,type:n,...t?{description:t}:{}};W(o)}function ut(e){se(e)}function mt(e,n){W({action:"rename_agent",agent:e,name:n})}function Pn(){let e=v.get();Tn({currentRoom:e.currentRoom,dmTarget:e.dmTarget}),Fe(c(gn,{rooms:e.rooms,agents:e.agents,currentRoom:e.currentRoom,dmTarget:e.dmTarget,messages:e.messages,connected:e.connected,onJoinRoom:n=>{se(n)},onSelectAgent:Mn,onRenameAgent:mt,onLeaveRoom:jn,onSendAction:dt,onCreateRoom:pt,onJoinRoomInput:ut,onConnectToMesh:()=>{localStorage.setItem("agent-comms-connected","true"),be.connect(),z&&xe.connect()}}),ct)}v.subscribe(Pn);var Sn=Cn(location.search);Pn();var ft=kn(localStorage);(z||ft)&&(be.connect(),z&&xe.connect());ye().then(()=>{if(!Sn)return;let e=v.get(),n=An(Sn,e.rooms);if(n)switch(n.kind){case"room":se(n.targetId);break;case"dm":Mn(n.targetId);break}});})();
|
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
* from the imperative shell in main.tsx.
|
|
6
6
|
*/
|
|
7
7
|
import type { Agent, DisplayMessage, Room } from "../types.js";
|
|
8
|
-
import type { RelayStatus } from "../relay-client.js";
|
|
9
8
|
export interface AppProps {
|
|
10
9
|
rooms: Room[];
|
|
11
10
|
agents: Agent[];
|
|
@@ -13,7 +12,6 @@ export interface AppProps {
|
|
|
13
12
|
dmTarget: string | undefined;
|
|
14
13
|
messages: DisplayMessage[];
|
|
15
14
|
connected: boolean;
|
|
16
|
-
relayStatus: RelayStatus;
|
|
17
15
|
onJoinRoom: (roomId: string) => void;
|
|
18
16
|
onSelectAgent: (agentId: string) => void;
|
|
19
17
|
onRenameAgent: (agentId: string, newName: string) => void;
|
|
@@ -21,8 +19,6 @@ export interface AppProps {
|
|
|
21
19
|
onSendAction: (text: string) => void;
|
|
22
20
|
onCreateRoom: (name: string, type: "public" | "private" | "secret", description: string) => void;
|
|
23
21
|
onJoinRoomInput: (roomName: string) => void;
|
|
24
|
-
onRelayConnect: (urlA: string, urlB: string) => void;
|
|
25
|
-
onRelayDisconnect: () => void;
|
|
26
22
|
onConnectToMesh: () => void;
|
|
27
23
|
}
|
|
28
24
|
export declare function App(props: AppProps): import("preact").JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../../../../../src/bridges/user/web/frontend/components/App.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../../../../../src/bridges/user/web/frontend/components/App.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAI/D,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1D,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,YAAY,EAAE,CACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,EACrC,WAAW,EAAE,MAAM,KAChB,IAAI,CAAC;IACV,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,eAAe,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED,wBAAgB,GAAG,CAAC,KAAK,EAAE,QAAQ,gCAqClC"}
|
|
@@ -12,6 +12,6 @@ export function App(props) {
|
|
|
12
12
|
const [sidebarCollapsed, setSidebarCollapsed] = useState(false);
|
|
13
13
|
return (_jsxs(_Fragment, { children: [_jsx("button", { id: "sidebar-toggle", class: "sidebar-toggle-btn", title: sidebarCollapsed ? "Expand sidebar" : "Collapse sidebar", onClick: () => {
|
|
14
14
|
setSidebarCollapsed((v) => !v);
|
|
15
|
-
}, children: sidebarCollapsed ? "☰" : "✕" }), _jsx(Sidebar, { rooms: props.rooms, agents: props.agents, currentRoom: props.currentRoom,
|
|
15
|
+
}, children: sidebarCollapsed ? "☰" : "✕" }), _jsx(Sidebar, { rooms: props.rooms, agents: props.agents, currentRoom: props.currentRoom, collapsed: sidebarCollapsed, onJoinRoom: props.onJoinRoom, onSelectAgent: props.onSelectAgent, onRenameAgent: props.onRenameAgent, onCreateRoom: props.onCreateRoom, onJoinRoomInput: props.onJoinRoomInput }), _jsx(ChatArea, { messages: props.messages, currentRoom: props.currentRoom, dmTarget: props.dmTarget, connected: props.connected, onSendAction: props.onSendAction, onLeaveRoom: props.onLeaveRoom, onConnectToMesh: props.onConnectToMesh })] }));
|
|
16
16
|
}
|
|
17
17
|
//# sourceMappingURL=App.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"App.js","sourceRoot":"","sources":["../../../../../../src/bridges/user/web/frontend/components/App.tsx"],"names":[],"mappings":";AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"App.js","sourceRoot":"","sources":["../../../../../../src/bridges/user/web/frontend/components/App.tsx"],"names":[],"mappings":";AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAuBvC,MAAM,UAAU,GAAG,CAAC,KAAe;IACjC,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEhE,OAAO,CACL,8BACE,iBACE,EAAE,EAAC,gBAAgB,EACnB,KAAK,EAAC,oBAAoB,EAC1B,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,kBAAkB,EAC/D,OAAO,EAAE,GAAG,EAAE;oBACZ,mBAAmB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjC,CAAC,YAEA,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GACtB,EACT,KAAC,OAAO,IACN,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,WAAW,EAAE,KAAK,CAAC,WAAW,EAC9B,SAAS,EAAE,gBAAgB,EAC3B,UAAU,EAAE,KAAK,CAAC,UAAU,EAC5B,aAAa,EAAE,KAAK,CAAC,aAAa,EAClC,aAAa,EAAE,KAAK,CAAC,aAAa,EAClC,YAAY,EAAE,KAAK,CAAC,YAAY,EAChC,eAAe,EAAE,KAAK,CAAC,eAAe,GACtC,EACF,KAAC,QAAQ,IACP,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,WAAW,EAAE,KAAK,CAAC,WAAW,EAC9B,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,SAAS,EAAE,KAAK,CAAC,SAAS,EAC1B,YAAY,EAAE,KAAK,CAAC,YAAY,EAChC,WAAW,EAAE,KAAK,CAAC,WAAW,EAC9B,eAAe,EAAE,KAAK,CAAC,eAAe,GACtC,IACD,CACJ,CAAC;AACJ,CAAC"}
|
|
@@ -2,21 +2,17 @@
|
|
|
2
2
|
* Sidebar — project tree, manual rooms, create/join room controls.
|
|
3
3
|
*/
|
|
4
4
|
import type { Agent, Room } from "../types.js";
|
|
5
|
-
import type { RelayStatus } from "../relay-client.js";
|
|
6
5
|
interface SidebarProps {
|
|
7
6
|
rooms: Room[];
|
|
8
7
|
agents: Agent[];
|
|
9
8
|
currentRoom: string | undefined;
|
|
10
|
-
relayStatus: RelayStatus;
|
|
11
9
|
collapsed: boolean;
|
|
12
10
|
onJoinRoom: (roomId: string) => void;
|
|
13
11
|
onSelectAgent: (agentId: string) => void;
|
|
14
12
|
onRenameAgent: (agentId: string, newName: string) => void;
|
|
15
13
|
onCreateRoom: (name: string, type: "public" | "private" | "secret", description: string) => void;
|
|
16
14
|
onJoinRoomInput: (roomName: string) => void;
|
|
17
|
-
onRelayConnect: (urlA: string, urlB: string) => void;
|
|
18
|
-
onRelayDisconnect: () => void;
|
|
19
15
|
}
|
|
20
|
-
export declare function Sidebar({ rooms, agents, currentRoom,
|
|
16
|
+
export declare function Sidebar({ rooms, agents, currentRoom, collapsed, onJoinRoom, onSelectAgent, onRenameAgent, onCreateRoom, onJoinRoomInput, }: SidebarProps): import("preact").JSX.Element;
|
|
21
17
|
export {};
|
|
22
18
|
//# sourceMappingURL=Sidebar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sidebar.d.ts","sourceRoot":"","sources":["../../../../../../src/bridges/user/web/frontend/components/Sidebar.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"Sidebar.d.ts","sourceRoot":"","sources":["../../../../../../src/bridges/user/web/frontend/components/Sidebar.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAM/C,UAAU,YAAY;IACpB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1D,YAAY,EAAE,CACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,EACrC,WAAW,EAAE,MAAM,KAChB,IAAI,CAAC;IACV,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C;AAED,wBAAgB,OAAO,CAAC,EACtB,KAAK,EACL,MAAM,EACN,WAAW,EACX,SAAS,EACT,UAAU,EACV,aAAa,EACb,aAAa,EACb,YAAY,EACZ,eAAe,GAChB,EAAE,YAAY,gCA6Ed"}
|
|
@@ -7,8 +7,7 @@ import { buildProjectTree } from "../project-tree.js";
|
|
|
7
7
|
import { CreateRoomForm } from "./CreateRoomForm.js";
|
|
8
8
|
import { JoinForm } from "./JoinForm.js";
|
|
9
9
|
import { ProjectTree } from "./ProjectTree.js";
|
|
10
|
-
|
|
11
|
-
export function Sidebar({ rooms, agents, currentRoom, relayStatus, collapsed, onJoinRoom, onSelectAgent, onRenameAgent, onCreateRoom, onJoinRoomInput, onRelayConnect, onRelayDisconnect, }) {
|
|
10
|
+
export function Sidebar({ rooms, agents, currentRoom, collapsed, onJoinRoom, onSelectAgent, onRenameAgent, onCreateRoom, onJoinRoomInput, }) {
|
|
12
11
|
const [createFormVisible, setCreateFormVisible] = useState(false);
|
|
13
12
|
const [joinFormVisible, setJoinFormVisible] = useState(false);
|
|
14
13
|
const [showOffline, setShowOffline] = useState(false);
|
|
@@ -32,6 +31,6 @@ export function Sidebar({ rooms, agents, currentRoom, relayStatus, collapsed, on
|
|
|
32
31
|
setJoinFormVisible(false);
|
|
33
32
|
}, onCancel: () => {
|
|
34
33
|
setJoinFormVisible(false);
|
|
35
|
-
} })
|
|
34
|
+
} })] })] }));
|
|
36
35
|
}
|
|
37
36
|
//# sourceMappingURL=Sidebar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sidebar.js","sourceRoot":"","sources":["../../../../../../src/bridges/user/web/frontend/components/Sidebar.tsx"],"names":[],"mappings":";AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"Sidebar.js","sourceRoot":"","sources":["../../../../../../src/bridges/user/web/frontend/components/Sidebar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -13,7 +13,6 @@ import { requireElement } from "./dom.js";
|
|
|
13
13
|
import { parseInput, routeAction } from "./input.js";
|
|
14
14
|
import { State } from "./state.js";
|
|
15
15
|
import { MeshClient } from "./mesh-client.js";
|
|
16
|
-
import { RelayClient } from "./relay-client.js";
|
|
17
16
|
import { isLocalHost, hasConnectedBefore } from "./boot-logic.js";
|
|
18
17
|
/** Whether the page is served from a local mesh server (vs standalone PWA). */
|
|
19
18
|
const isLocalServer = isLocalHost(location.host);
|
|
@@ -48,15 +47,6 @@ meshClient.subscribe((meshState) => {
|
|
|
48
47
|
// prompt appearing before the user understands the UI.
|
|
49
48
|
// meshClient.connect() is called from onConnectToMesh().
|
|
50
49
|
// ---------------------------------------------------------------------------
|
|
51
|
-
// Relay client — P2P mesh relay
|
|
52
|
-
// ---------------------------------------------------------------------------
|
|
53
|
-
const relayClient = new RelayClient();
|
|
54
|
-
let relayStatus = relayClient.get();
|
|
55
|
-
relayClient.connect();
|
|
56
|
-
relayClient.subscribe((status) => {
|
|
57
|
-
relayStatus = status;
|
|
58
|
-
});
|
|
59
|
-
// ---------------------------------------------------------------------------
|
|
60
50
|
// Helpers
|
|
61
51
|
// ---------------------------------------------------------------------------
|
|
62
52
|
function addMessage(msg) {
|
|
@@ -200,13 +190,9 @@ function rerender() {
|
|
|
200
190
|
const s = state.get();
|
|
201
191
|
// Keep the URL in sync with the current view
|
|
202
192
|
syncUrl({ currentRoom: s.currentRoom, dmTarget: s.dmTarget });
|
|
203
|
-
render(_jsx(App, { rooms: s.rooms, agents: s.agents, currentRoom: s.currentRoom, dmTarget: s.dmTarget, messages: s.messages, connected: s.connected,
|
|
193
|
+
render(_jsx(App, { rooms: s.rooms, agents: s.agents, currentRoom: s.currentRoom, dmTarget: s.dmTarget, messages: s.messages, connected: s.connected, onJoinRoom: (roomId) => {
|
|
204
194
|
void onJoinRoom(roomId);
|
|
205
|
-
}, onSelectAgent: onSelectAgent, onRenameAgent: onRenameAgent, onLeaveRoom: onLeaveRoom, onSendAction: handleSendAction, onCreateRoom: onCreateRoom, onJoinRoomInput: onJoinRoomInput,
|
|
206
|
-
relayClient.connectRelay(urlA, urlB);
|
|
207
|
-
}, onRelayDisconnect: () => {
|
|
208
|
-
relayClient.disconnect();
|
|
209
|
-
}, onConnectToMesh: () => {
|
|
195
|
+
}, onSelectAgent: onSelectAgent, onRenameAgent: onRenameAgent, onLeaveRoom: onLeaveRoom, onSendAction: handleSendAction, onCreateRoom: onCreateRoom, onJoinRoomInput: onJoinRoomInput, onConnectToMesh: () => {
|
|
210
196
|
localStorage.setItem("agent-comms-connected", "true");
|
|
211
197
|
meshClient.connect();
|
|
212
198
|
if (isLocalServer)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../../../../src/bridges/user/web/frontend/main.tsx"],"names":[],"mappings":";AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,cAAc,CAAC;AACtB,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../../../../src/bridges/user/web/frontend/main.tsx"],"names":[],"mappings":"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"}
|
package/dist/core/bridge-mesh.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* peerId is deviceIdToHex(identity.deviceId), not identity.fingerprint -- WireMeshTransport's own session bookkeeping is keyed by device-id, so MeshStore's own notion of "this peer's id" has to be the same value for the two to correlate. Every existing agent id changes the first time a bridge starts through this factory: there is no migration path, since the value is a hash of genuinely different bytes (device-id is SHA-256(raw public key); fingerprint is SHA-256(certificate DER)) -- a hard cutover, already established as correct when identity.ts first grew deviceId, not relitigated here.
|
|
5
5
|
*/
|
|
6
|
-
import { deviceIdToHex } from "
|
|
6
|
+
import { deviceIdToHex } from "wire-mesh-core/domain/device-id";
|
|
7
7
|
import { MeshStore } from "./mesh-store.js";
|
|
8
8
|
import { CommsTool } from "./tool.js";
|
|
9
9
|
import { WireMeshTransport } from "./wire-mesh-transport.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-mesh.js","sourceRoot":"","sources":["../../src/core/bridge-mesh.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"bridge-mesh.js","sourceRoot":"","sources":["../../src/core/bridge-mesh.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAQ3D,MAAM,UAAU,gBAAgB,CAC9B,IAA4B,EAC5B,eAAwB;IAExB,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,eAAe,CAAC,CAAC;IAC7C,KAAK,CAAC,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjE,KAAK,CAAC,YAAY,CAAC,IAAI,iBAAiB,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAClE,MAAM,IAAI,GAAG,IAAI,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IACnD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC"}
|
package/dist/core/bridge.d.ts
CHANGED
|
@@ -120,9 +120,9 @@ export declare function ensureRegistered(opts: {
|
|
|
120
120
|
tags?: string[];
|
|
121
121
|
}): Promise<RegistrationResult>;
|
|
122
122
|
/**
|
|
123
|
-
* Ensure a project room exists for the given cwd and the agent is a member.
|
|
124
|
-
*
|
|
125
|
-
*
|
|
123
|
+
* Ensure a project room exists for the given cwd and the agent is a member. Creates the room if needed and joins the agent. No-op if already a member. Returns the room ID.
|
|
124
|
+
*
|
|
125
|
+
* Every agent computes an owner-rooted path with itself as owner, so two agents in the same cwd do not currently converge on one shared room -- a real, deliberately deferred regression from the pre-core/room behaviour (see the design doc's OQ-2: deterministic lowest-device-id ownership is P3.4's own responsibility, once gossiped presence data is wired up here).
|
|
126
126
|
*/
|
|
127
127
|
export declare function ensureProjectRoom(store: CommsStore, agentId: string, cwd: string): Promise<string>;
|
|
128
128
|
export declare function drainAndFormat(store: CommsStore, agentId: string): Promise<string[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/core/bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,UAAU,EACX,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/core/bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,UAAU,EACX,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAYxB,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAwD1B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAsBzD,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,CAkOxE;AAMD,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,aAAa,GACnB,iBAAiB,GAAG,SAAS,CAK/B;AAMD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAqChE;AAMD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAgB/D;AAMD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAuB9B;AAMD;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,CAuBjB;AAMD,wBAAsB,cAAc,CAClC,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,EAAE,CAAC,CAGnB"}
|
package/dist/core/bridge.js
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
* push mechanism and tool registration.
|
|
11
11
|
*/
|
|
12
12
|
import * as path from "node:path";
|
|
13
|
+
import { ownerNamedRoomPath, slugRoomName } from "./room-path.js";
|
|
13
14
|
import { z } from "zod";
|
|
14
15
|
// ---------------------------------------------------------------------------
|
|
15
16
|
// Tool parameter schema — single source of truth for MCP input
|
|
@@ -443,29 +444,30 @@ export async function ensureRegistered(opts) {
|
|
|
443
444
|
// ensureProjectRoom — auto-create a room for the agent's working directory
|
|
444
445
|
// ---------------------------------------------------------------------------
|
|
445
446
|
/**
|
|
446
|
-
* Ensure a project room exists for the given cwd and the agent is a member.
|
|
447
|
-
*
|
|
448
|
-
*
|
|
447
|
+
* Ensure a project room exists for the given cwd and the agent is a member. Creates the room if needed and joins the agent. No-op if already a member. Returns the room ID.
|
|
448
|
+
*
|
|
449
|
+
* Every agent computes an owner-rooted path with itself as owner, so two agents in the same cwd do not currently converge on one shared room -- a real, deliberately deferred regression from the pre-core/room behaviour (see the design doc's OQ-2: deterministic lowest-device-id ownership is P3.4's own responsibility, once gossiped presence data is wired up here).
|
|
449
450
|
*/
|
|
450
451
|
export async function ensureProjectRoom(store, agentId, cwd) {
|
|
451
|
-
const
|
|
452
|
+
const localName = slugRoomName(path.basename(cwd));
|
|
453
|
+
const id = ownerNamedRoomPath(agentId, localName);
|
|
452
454
|
// Check if the room already exists
|
|
453
|
-
const existing = await store.getRoom(
|
|
455
|
+
const existing = await store.getRoom(id);
|
|
454
456
|
if (existing) {
|
|
455
457
|
// Room exists — verify it's a project room (description matches pattern)
|
|
456
458
|
if (!existing.members.includes(agentId)) {
|
|
457
|
-
await store.joinRoom(
|
|
459
|
+
await store.joinRoom(id, agentId);
|
|
458
460
|
}
|
|
459
|
-
return
|
|
461
|
+
return id;
|
|
460
462
|
}
|
|
461
463
|
// Create — createRoom auto-joins the owner
|
|
462
464
|
await store.createRoom({
|
|
463
|
-
name:
|
|
465
|
+
name: localName,
|
|
464
466
|
type: "public",
|
|
465
467
|
owner: agentId,
|
|
466
468
|
description: `Project room for ${cwd}`,
|
|
467
469
|
});
|
|
468
|
-
return
|
|
470
|
+
return id;
|
|
469
471
|
}
|
|
470
472
|
// ---------------------------------------------------------------------------
|
|
471
473
|
// drainAndFormat — drain delivery queue, return formatted lines
|