@rubytech/create-realagent 1.0.819 → 1.0.820
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/package.json +1 -1
- package/payload/platform/plugins/admin/skills/onboarding/SKILL.md +8 -9
- package/payload/platform/plugins/cloudflare/PLUGIN.md +1 -1
- package/payload/platform/plugins/cloudflare/scripts/setup-tunnel.sh +70 -20
- package/payload/platform/plugins/docs/references/cloudflare.md +1 -1
- package/payload/platform/plugins/docs/references/graph.md +20 -0
- package/payload/platform/plugins/email/PLUGIN.md +2 -0
- package/payload/platform/plugins/memory/mcp/dist/index.js +8 -2
- package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.d.ts +20 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.js +40 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.js.map +1 -1
- package/payload/server/chunk-5OG7TUQL.js +315 -0
- package/payload/server/chunk-CZGOB575.js +593 -0
- package/payload/server/chunk-NUXYHO6N.js +10079 -0
- package/payload/server/chunk-SALVIGXH.js +1116 -0
- package/payload/server/chunk-ZT6LKDTP.js +2238 -0
- package/payload/server/client-pool-IQU6H43X.js +32 -0
- package/payload/server/cloudflare-task-tracker-Q4X5BYR7.js +17 -0
- package/payload/server/maxy-edge.js +4 -3
- package/payload/server/neo4j-migrations-CYIKMSEO.js +366 -0
- package/payload/server/public/assets/admin-BoGPEBe_.js +352 -0
- package/payload/server/public/assets/{graph-DeH6ulGh.js → graph-LLMJa4Ch.js} +1 -1
- package/payload/server/public/assets/{page-WIAWD2Oi.js → page-DoaF3DB0.js} +1 -1
- package/payload/server/public/graph.html +2 -2
- package/payload/server/public/index.html +2 -2
- package/payload/server/server.js +269 -488
- package/payload/server/public/assets/admin-CdVYoqKD.js +0 -352
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e,t}from"./jsx-runtime-DkaAusaX.js";import{n}from"./page-
|
|
1
|
+
import{i as e,t}from"./jsx-runtime-DkaAusaX.js";import{n}from"./page-DoaF3DB0.js";import"./useAdminFetch-DmHu0oCx.js";import"./Checkbox-CTGhpDKq.js";var r=e(),i=t();(0,r.createRoot)(document.getElementById(`root`)).render((0,i.jsx)(n,{}));
|
|
@@ -47,4 +47,4 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho
|
|
|
47
47
|
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var a,o=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,a=e},f:function(){try{o||n.return==null||n.return()}finally{if(s)throw a}}}}function XT(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var ZT=function(e){function n(e){t(this,n),this._pairs=e}return Xu(n,[{key:e,value:vC.mark((function e(){var t,n,r,i,a;return vC.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:t=YT(this._pairs),e.prev=1,t.s();case 3:if((n=t.n()).done){e.next=9;break}return r=Vp(n.value,2),i=r[0],a=r[1],e.next=7,[i,a];case 7:e.next=3;break;case 9:e.next=14;break;case 11:e.prev=11,e.t0=e.catch(1),t.e(e.t0);case 14:return e.prev=14,t.f(),e.finish(14);case 17:case`end`:return e.stop()}}),e,this,[[1,11,14,17]])}))},{key:`entries`,value:vC.mark((function e(){var t,n,r,i,a;return vC.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:t=YT(this._pairs),e.prev=1,t.s();case 3:if((n=t.n()).done){e.next=9;break}return r=Vp(n.value,2),i=r[0],a=r[1],e.next=7,[i,a];case 7:e.next=3;break;case 9:e.next=14;break;case 11:e.prev=11,e.t0=e.catch(1),t.e(e.t0);case 14:return e.prev=14,t.f(),e.finish(14);case 17:case`end`:return e.stop()}}),e,this,[[1,11,14,17]])}))},{key:`keys`,value:vC.mark((function e(){var t,n,r,i;return vC.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:t=YT(this._pairs),e.prev=1,t.s();case 3:if((n=t.n()).done){e.next=9;break}return r=Vp(n.value,1),i=r[0],e.next=7,i;case 7:e.next=3;break;case 9:e.next=14;break;case 11:e.prev=11,e.t0=e.catch(1),t.e(e.t0);case 14:return e.prev=14,t.f(),e.finish(14);case 17:case`end`:return e.stop()}}),e,this,[[1,11,14,17]])}))},{key:`values`,value:vC.mark((function e(){var t,n,r,i;return vC.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:t=YT(this._pairs),e.prev=1,t.s();case 3:if((n=t.n()).done){e.next=9;break}return r=Vp(n.value,2),i=r[1],e.next=7,i;case 7:e.next=3;break;case 9:e.next=14;break;case 11:e.prev=11,e.t0=e.catch(1),t.e(e.t0);case 14:return e.prev=14,t.f(),e.finish(14);case 17:case`end`:return e.stop()}}),e,this,[[1,11,14,17]])}))},{key:`toIdArray`,value:function(){var e;return Kd(e=Hp(this._pairs)).call(e,(function(e){return e[0]}))}},{key:`toItemArray`,value:function(){var e;return Kd(e=Hp(this._pairs)).call(e,(function(e){return e[1]}))}},{key:`toEntryArray`,value:function(){return Hp(this._pairs)}},{key:`toObjectMap`,value:function(){var e,t=hh(null),n=YT(this._pairs);try{for(n.s();!(e=n.n()).done;){var r=Vp(e.value,2),i=r[0];t[i]=r[1]}}catch(e){n.e(e)}finally{n.f()}return t}},{key:`toMap`,value:function(){return new Cw(this._pairs)}},{key:`toIdSet`,value:function(){return new qT(this.toIdArray())}},{key:`toItemSet`,value:function(){return new qT(this.toItemArray())}},{key:`cache`,value:function(){return new n(Hp(this._pairs))}},{key:`distinct`,value:function(e){var t,n=new qT,r=YT(this._pairs);try{for(r.s();!(t=r.n()).done;){var i=Vp(t.value,2),a=i[0],o=i[1];n.add(e(o,a))}}catch(e){r.e(e)}finally{r.f()}return n}},{key:`filter`,value:function(e){var t=this._pairs;return new n({[kT]:()=>vC.mark((function n(){var r,i,a,o,s;return vC.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:r=YT(t),n.prev=1,r.s();case 3:if((i=r.n()).done){n.next=10;break}if(a=Vp(i.value,2),o=a[0],s=a[1],!e(s,o)){n.next=8;break}return n.next=8,[o,s];case 8:n.next=3;break;case 10:n.next=15;break;case 12:n.prev=12,n.t0=n.catch(1),r.e(n.t0);case 15:return n.prev=15,r.f(),n.finish(15);case 18:case`end`:return n.stop()}}),n,null,[[1,12,15,18]])}))()})}},{key:`forEach`,value:function(e){var t,n=YT(this._pairs);try{for(n.s();!(t=n.n()).done;){var r=Vp(t.value,2),i=r[0];e(r[1],i)}}catch(e){n.e(e)}finally{n.f()}}},{key:`map`,value:function(e){var t=this._pairs;return new n({[kT]:()=>vC.mark((function n(){var r,i,a,o,s;return vC.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:r=YT(t),n.prev=1,r.s();case 3:if((i=r.n()).done){n.next=9;break}return a=Vp(i.value,2),o=a[0],s=a[1],n.next=7,[o,e(s,o)];case 7:n.next=3;break;case 9:n.next=14;break;case 11:n.prev=11,n.t0=n.catch(1),r.e(n.t0);case 14:return n.prev=14,r.f(),n.finish(14);case 17:case`end`:return n.stop()}}),n,null,[[1,11,14,17]])}))()})}},{key:`max`,value:function(e){var t=JT(this._pairs),n=t.next();if(n.done)return null;for(var r=n.value[1],i=e(n.value[1],n.value[0]);!(n=t.next()).done;){var a=Vp(n.value,2),o=a[0],s=a[1],c=e(s,o);c>i&&(i=c,r=s)}return r}},{key:`min`,value:function(e){var t=JT(this._pairs),n=t.next();if(n.done)return null;for(var r=n.value[1],i=e(n.value[1],n.value[0]);!(n=t.next()).done;){var a=Vp(n.value,2),o=a[0],s=a[1],c=e(s,o);c<i&&(i=c,r=s)}return r}},{key:`reduce`,value:function(e,t){var n,r=YT(this._pairs);try{for(r.s();!(n=r.n()).done;){var i=Vp(n.value,2),a=i[0];t=e(t,i[1],a)}}catch(e){r.e(e)}finally{r.f()}return t}},{key:`sort`,value:function(e){var t=this;return new n({[kT]:function(){var n;return JT(bT(n=Hp(t._pairs)).call(n,(function(t,n){var r=Vp(t,2),i=r[0],a=r[1],o=Vp(n,2),s=o[0],c=o[1];return e(a,c,i,s)})))}})}}]),n}(kT);function QT(e,t){var n=om(e);if(lv){var r=lv(e);t&&(r=Bd(r).call(r,(function(t){return vv(e,t).enumerable}))),n.push.apply(n,r)}return n}function $T(e){for(var t=1;t<arguments.length;t++){var n,r,i=arguments[t]==null?{}:arguments[t];t%2?_m(n=QT(Object(i),!0)).call(n,(function(t){Zu(e,t,i[t])})):Cv?Av(e,Cv(i)):_m(r=QT(Object(i))).call(r,(function(t){jv(e,t,vv(i,t))}))}return e}function eE(e,t){var n=Up!==void 0&&$f(e)||e[`@@iterator`];if(!n){if(rm(e)||(n=function(e,t){var n;if(e){if(typeof e==`string`)return tE(e,t);var r=Yp(n=Object.prototype.toString.call(e)).call(n,8,-1);if(r===`Object`&&e.constructor&&(r=e.constructor.name),r===`Map`||r===`Set`)return Xf(e);if(r===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return tE(e,t)}}(e))||t&&e&&typeof e.length==`number`){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw TypeError(`Invalid attempt to iterate non-iterable instance.
|
|
48
48
|
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var a,o=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,a=e},f:function(){try{o||n.return==null||n.return()}finally{if(s)throw a}}}}function tE(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function nE(e){var t=function(){if(typeof Reflect>`u`||!cv||cv.sham)return!1;if(typeof Proxy==`function`)return!0;try{return Boolean.prototype.valueOf.call(cv(Boolean,[],(function(){}))),!0}catch{return!1}}();return function(){var n,r=Hv(e);if(t){var i=Hv(this).constructor;n=cv(r,arguments,i)}else n=r.apply(this,arguments);return zv(this,n)}}var rE=function(e){Rv(r,e);var n=nE(r);function r(e,i){var a;return t(this,r),Zu(U(a=n.call(this)),`_queue`,null),e&&!rm(e)&&(i=e,e=[]),a._options=i||{},a._data=new Cw,a.length=0,a._idProp=a._options.fieldId||`id`,e&&e.length&&a.add(e),a.setOptions(i),a}return Xu(r,[{key:`idProp`,get:function(){return this._idProp}},{key:`setOptions`,value:function(e){e&&e.queue!==void 0&&(!1===e.queue?this._queue&&=(this._queue.destroy(),null):(this._queue||=GT.extend(this,{replace:[`add`,`update`,`remove`]}),e.queue&&typeof e.queue==`object`&&this._queue.setOptions(e.queue)))}},{key:`add`,value:function(e,t){var n,r=this,i=[];if(rm(e)){var a=Kd(e).call(e,(function(e){return e[r._idProp]}));if(kw(a).call(a,(function(e){return r._data.has(e)})))throw Error(`A duplicate id was found in the parameter array.`);for(var o=0,s=e.length;o<s;o++)n=this._addItem(e[o]),i.push(n)}else{if(!e||typeof e!=`object`)throw Error(`Unknown dataType`);n=this._addItem(e),i.push(n)}return i.length&&this._trigger(`add`,{items:i},t),i}},{key:`update`,value:function(e,t){var n=this,r=[],i=[],a=[],o=[],s=this._idProp,c=function(e){var t=e[s];if(t!=null&&n._data.has(t)){var c=e,l=ch({},n._data.get(t)),u=n._updateItem(c);i.push(u),o.push(c),a.push(l)}else{var d=n._addItem(e);r.push(d)}};if(rm(e))for(var l=0,u=e.length;l<u;l++)e[l]&&typeof e[l]==`object`?c(e[l]):console.warn(`Ignoring input item, which is not an object at index `+l);else{if(!e||typeof e!=`object`)throw Error(`Unknown dataType`);c(e)}if(r.length&&this._trigger(`add`,{items:r},t),i.length){var d={items:i,oldData:a,data:o};this._trigger(`update`,d,t)}return Jp(r).call(r,i)}},{key:`updateOnly`,value:function(e,t){var n,r=this;rm(e)||(e=[e]);var i=Kd(n=Kd(e).call(e,(function(e){var t=r._data.get(e[r._idProp]);if(t==null)throw Error(`Updating non-existent items is not allowed.`);return{oldData:t,update:e}}))).call(n,(function(e){var t=e.oldData,n=e.update,i=t[r._idProp],a=function(e){for(var t,n=arguments.length,r=Array(n>1?n-1:0),i=1;i<n;i++)r[i-1]=arguments[i];return R_.apply(void 0,Jp(t=[{},e]).call(t,r))}(t,n);return r._data.set(i,a),{id:i,oldData:t,updatedData:a}}));if(i.length){var a={items:Kd(i).call(i,(function(e){return e.id})),oldData:Kd(i).call(i,(function(e){return e.oldData})),data:Kd(i).call(i,(function(e){return e.updatedData}))};return this._trigger(`update`,a,t),a.items}return[]}},{key:`get`,value:function(e,t){var n=void 0,r=void 0,i=void 0;WT(e)?(n=e,i=t):rm(e)?(r=e,i=t):i=e;var a=i&&i.returnType===`Object`?`Object`:`Array`,o=i&&Bd(i),s=[],c=void 0,l=void 0,u=void 0;if(n!=null)(c=this._data.get(n))&&o&&!o(c)&&(c=void 0);else if(r!=null)for(var d=0,f=r.length;d<f;d++)(c=this._data.get(r[d]))==null||o&&!o(c)||s.push(c);else for(var p,m=0,h=(l=Hp(Lw(p=this._data).call(p))).length;m<h;m++)u=l[m],(c=this._data.get(u))==null||o&&!o(c)||s.push(c);if(i&&i.order&&n==null&&this._sort(s,i.order),i&&i.fields){var g=i.fields;if(n!=null&&c!=null)c=this._filterFields(c,g);else for(var _=0,v=s.length;_<v;_++)s[_]=this._filterFields(s[_],g)}if(a==`Object`){for(var y={},b=0,x=s.length;b<x;b++){var S=s[b];y[S[this._idProp]]=S}return y}return n==null?s:c??null}},{key:`getIds`,value:function(e){var t=this._data,n=e&&Bd(e),r=e&&e.order,i=Hp(Lw(t).call(t)),a=[];if(n)if(r){for(var o=[],s=0,c=i.length;s<c;s++){var l=i[s],u=this._data.get(l);u!=null&&n(u)&&o.push(u)}this._sort(o,r);for(var d=0,f=o.length;d<f;d++)a.push(o[d][this._idProp])}else for(var p=0,m=i.length;p<m;p++){var h=i[p],g=this._data.get(h);g!=null&&n(g)&&a.push(g[this._idProp])}else if(r){for(var _=[],v=0,y=i.length;v<y;v++){var b=i[v];_.push(t.get(b))}this._sort(_,r);for(var x=0,S=_.length;x<S;x++)a.push(_[x][this._idProp])}else for(var ee=0,C=i.length;ee<C;ee++){var te=i[ee],ne=t.get(te);ne!=null&&a.push(ne[this._idProp])}return a}},{key:`getDataSet`,value:function(){return this}},{key:`forEach`,value:function(e,t){var n=t&&Bd(t),r=this._data,i=Hp(Lw(r).call(r));if(t&&t.order)for(var a=this.get(t),o=0,s=a.length;o<s;o++){var c=a[o];e(c,c[this._idProp])}else for(var l=0,u=i.length;l<u;l++){var d=i[l],f=this._data.get(d);f==null||n&&!n(f)||e(f,d)}}},{key:`map`,value:function(e,t){for(var n=t&&Bd(t),r=[],i=this._data,a=Hp(Lw(i).call(i)),o=0,s=a.length;o<s;o++){var c=a[o],l=this._data.get(c);l==null||n&&!n(l)||r.push(e(l,c))}return t&&t.order&&this._sort(r,t.order),r}},{key:`_filterFields`,value:function(e,t){var n;return e&&Pd(n=rm(t)?t:om(t)).call(n,(function(t,n){return t[n]=e[n],t}),{})}},{key:`_sort`,value:function(e,t){if(typeof t==`string`){var n=t;bT(e).call(e,(function(e,t){var r=e[n],i=t[n];return r>i?1:r<i?-1:0}))}else{if(typeof t!=`function`)throw TypeError(`Order must be a function or a string`);bT(e).call(e,t)}}},{key:`remove`,value:function(e,t){for(var n=[],r=[],i=rm(e)?e:[e],a=0,o=i.length;a<o;a++){var s=this._remove(i[a]);if(s){var c=s[this._idProp];c!=null&&(n.push(c),r.push(s))}}return n.length&&this._trigger(`remove`,{items:n,oldData:r},t),n}},{key:`_remove`,value:function(e){var t;if(WT(e)?t=e:e&&typeof e==`object`&&(t=e[this._idProp]),t!=null&&this._data.has(t)){var n=this._data.get(t)||null;return this._data.delete(t),--this.length,n}return null}},{key:`clear`,value:function(e){for(var t,n=Hp(Lw(t=this._data).call(t)),r=[],i=0,a=n.length;i<a;i++)r.push(this._data.get(n[i]));return this._data.clear(),this.length=0,this._trigger(`remove`,{items:n,oldData:r},e),n}},{key:`max`,value:function(e){var t,n,r=null,i=null,a=eE(OT(t=this._data).call(t));try{for(a.s();!(n=a.n()).done;){var o=n.value,s=o[e];typeof s==`number`&&(i==null||s>i)&&(r=o,i=s)}}catch(e){a.e(e)}finally{a.f()}return r||null}},{key:`min`,value:function(e){var t,n,r=null,i=null,a=eE(OT(t=this._data).call(t));try{for(a.s();!(n=a.n()).done;){var o=n.value,s=o[e];typeof s==`number`&&(i==null||s<i)&&(r=o,i=s)}}catch(e){a.e(e)}finally{a.f()}return r||null}},{key:`distinct`,value:function(e){for(var t=this._data,n=Hp(Lw(t).call(t)),r=[],i=0,a=0,o=n.length;a<o;a++){for(var s=n[a],c=t.get(s)[e],l=!1,u=0;u<i;u++)if(r[u]==c){l=!0;break}l||c===void 0||(r[i]=c,i++)}return r}},{key:`_addItem`,value:function(e){var t=function(e,t){return e[t]??(e[t]=UT()),e}(e,this._idProp),n=t[this._idProp];if(this._data.has(n))throw Error(`Cannot add item: item with id `+n+` already exists`);return this._data.set(n,t),++this.length,n}},{key:`_updateItem`,value:function(e){var t=e[this._idProp];if(t==null)throw Error(`Cannot update item: item has no id (item: `+vh(e)+`)`);var n=this._data.get(t);if(!n)throw Error(`Cannot update item: no item with id `+t+` found`);return this._data.set(t,$T($T({},n),e)),t}},{key:`stream`,value:function(e){if(e){var t=this._data;return new ZT({[kT]:()=>vC.mark((function n(){var r,i,a,o;return vC.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:r=eE(e),n.prev=1,r.s();case 3:if((i=r.n()).done){n.next=11;break}if(a=i.value,(o=t.get(a))==null){n.next=9;break}return n.next=9,[a,o];case 9:n.next=3;break;case 11:n.next=16;break;case 13:n.prev=13,n.t0=n.catch(1),r.e(n.t0);case 16:return n.prev=16,r.f(),n.finish(16);case 19:case`end`:return n.stop()}}),n,null,[[1,13,16,19]])}))()})}var n;return new ZT({[kT]:vd(n=LT(this._data)).call(n,this._data)})}}]),r}(KT);function iE(e,t){var n=Up!==void 0&&$f(e)||e[`@@iterator`];if(!n){if(rm(e)||(n=function(e,t){var n;if(e){if(typeof e==`string`)return aE(e,t);var r=Yp(n=Object.prototype.toString.call(e)).call(n,8,-1);if(r===`Object`&&e.constructor&&(r=e.constructor.name),r===`Map`||r===`Set`)return Xf(e);if(r===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return aE(e,t)}}(e))||t&&e&&typeof e.length==`number`){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw TypeError(`Invalid attempt to iterate non-iterable instance.
|
|
49
49
|
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var a,o=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,a=e},f:function(){try{o||n.return==null||n.return()}finally{if(s)throw a}}}}function aE(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function oE(e){var t=function(){if(typeof Reflect>`u`||!cv||cv.sham)return!1;if(typeof Proxy==`function`)return!0;try{return Boolean.prototype.valueOf.call(cv(Boolean,[],(function(){}))),!0}catch{return!1}}();return function(){var n,r=Hv(e);if(t){var i=Hv(this).constructor;n=cv(r,arguments,i)}else n=r.apply(this,arguments);return zv(this,n)}}var sE=function(e){Rv(r,e);var n=oE(r);function r(e,i){var a,o;return t(this,r),Zu(U(o=n.call(this)),`length`,0),Zu(U(o),`_ids`,new qT),o._options=i||{},o._listener=vd(a=o._onEvent).call(a,U(o)),o.setData(e),o}return Xu(r,[{key:`idProp`,get:function(){return this.getDataSet().idProp}},{key:`setData`,value:function(e){if(this._data){this._data.off&&this._data.off(`*`,this._listener);var t=this._data.getIds({filter:Bd(this._options)}),n=this._data.get(t);this._ids.clear(),this.length=0,this._trigger(`remove`,{items:t,oldData:n})}if(e!=null){this._data=e;for(var r=this._data.getIds({filter:Bd(this._options)}),i=0,a=r.length;i<a;i++){var o=r[i];this._ids.add(o)}this.length=r.length,this._trigger(`add`,{items:r})}else this._data=new rE;this._data.on&&this._data.on(`*`,this._listener)}},{key:`refresh`,value:function(){for(var e=this._data.getIds({filter:Bd(this._options)}),t=Hp(this._ids),n={},r=[],i=[],a=[],o=0,s=e.length;o<s;o++){var c=e[o];n[c]=!0,this._ids.has(c)||(r.push(c),this._ids.add(c))}for(var l=0,u=t.length;l<u;l++){var d=t[l],f=this._data.get(d);f==null?console.error(`If you see this, report it please.`):n[d]||(i.push(d),a.push(f),this._ids.delete(d))}this.length+=r.length-i.length,r.length&&this._trigger(`add`,{items:r}),i.length&&this._trigger(`remove`,{items:i,oldData:a})}},{key:`get`,value:function(e,t){if(this._data==null)return null;var n,r=null;WT(e)||rm(e)?(r=e,n=t):n=e;var i=ch({},this._options,n),a=Bd(this._options),o=n&&Bd(n);return a&&o&&(i.filter=function(e){return a(e)&&o(e)}),r==null?this._data.get(i):this._data.get(r,i)}},{key:`getIds`,value:function(e){if(this._data.length){var t,n=Bd(this._options),r=e==null?null:Bd(e);return t=r?n?function(e){return n(e)&&r(e)}:r:n,this._data.getIds({filter:t,order:e&&e.order})}return[]}},{key:`forEach`,value:function(e,t){if(this._data){var n,r,i=Bd(this._options),a=t&&Bd(t);r=a?i?function(e){return i(e)&&a(e)}:a:i,_m(n=this._data).call(n,e,{filter:r,order:t&&t.order})}}},{key:`map`,value:function(e,t){if(this._data){var n,r,i=Bd(this._options),a=t&&Bd(t);return r=a?i?function(e){return i(e)&&a(e)}:a:i,Kd(n=this._data).call(n,e,{filter:r,order:t&&t.order})}return[]}},{key:`getDataSet`,value:function(){return this._data.getDataSet()}},{key:`stream`,value:function(e){var t;return this._data.stream(e||{[kT]:vd(t=Lw(this._ids)).call(t,this._ids)})}},{key:`dispose`,value:function(){var e;(e=this._data)!=null&&e.off&&this._data.off(`*`,this._listener);var t,n=`This data view has already been disposed of.`,i={get:function(){throw Error(n)},set:function(){throw Error(n)},configurable:!1},a=iE(nm(r.prototype));try{for(a.s();!(t=a.n()).done;){var o=t.value;jv(this,o,i)}}catch(e){a.e(e)}finally{a.f()}}},{key:`_onEvent`,value:function(e,t,n){if(t&&t.items&&this._data){var r=t.items,i=[],a=[],o=[],s=[],c=[],l=[];switch(e){case`add`:for(var u=0,d=r.length;u<d;u++){var f=r[u];this.get(f)&&(this._ids.add(f),i.push(f))}break;case`update`:for(var p=0,m=r.length;p<m;p++){var h=r[p];this.get(h)?this._ids.has(h)?(a.push(h),c.push(t.data[p]),s.push(t.oldData[p])):(this._ids.add(h),i.push(h)):this._ids.has(h)&&(this._ids.delete(h),o.push(h),l.push(t.oldData[p]))}break;case`remove`:for(var g=0,_=r.length;g<_;g++){var v=r[g];this._ids.has(v)&&(this._ids.delete(v),o.push(v),l.push(t.oldData[g]))}}this.length+=i.length-o.length,i.length&&this._trigger(`add`,{items:i},n),a.length&&this._trigger(`update`,{items:a,oldData:s,data:c},n),o.length&&this._trigger(`remove`,{items:o,oldData:l},n)}}}]),r}(KT);function cE(e,t){return typeof t==`object`&&!!t&&e===t.idProp&&typeof t.add==`function`&&typeof t.clear==`function`&&typeof t.distinct==`function`&&typeof _m(t)==`function`&&typeof t.get==`function`&&typeof t.getDataSet==`function`&&typeof t.getIds==`function`&&typeof t.length==`number`&&typeof Kd(t)==`function`&&typeof t.max==`function`&&typeof t.min==`function`&&typeof t.off==`function`&&typeof t.on==`function`&&typeof t.remove==`function`&&typeof t.setOptions==`function`&&typeof t.stream==`function`&&typeof t.update==`function`&&typeof t.updateOnly==`function`}e.DELETE=L_,e.DataSet=rE,e.DataStream=ZT,e.DataView=sE,e.Queue=GT,e.createNewDataPipeFrom=function(e){return new uf(e)},e.isDataSetLike=cE,e.isDataViewLike=function(e,t){return typeof t==`object`&&!!t&&e===t.idProp&&typeof _m(t)==`function`&&typeof t.get==`function`&&typeof t.getDataSet==`function`&&typeof t.getIds==`function`&&typeof t.length==`number`&&typeof Kd(t)==`function`&&typeof t.off==`function`&&typeof t.on==`function`&&typeof t.stream==`function`&&cE(e,t.getDataSet())}}))})),C={LocalBusiness:`#4F6B8A`,Service:`#6B85A0`,PriceSpecification:`#8AA0B8`,OpeningHoursSpecification:`#A8BACE`,Organization:`#8A6B47`,Person:`#B86E4A`,UserProfile:`#D08960`,Preference:`#DFA67A`,AdminUser:`#8C5230`,AccessGrant:`#66381F`,KnowledgeDocument:`#6E8A5A`,Section:`#8AA876`,Chunk:`#A6C194`,DigitalDocument:`#5A7548`,CreativeWork:`#B5C9A2`,Question:`#C7D6B5`,FAQPage:`#95B385`,DefinedTerm:`#76906A`,Review:`#3F5A2E`,ImageObject:`#A0BB8C`,Conversation:`#6B5A85`,AdminConversation:`#4F4070`,PublicConversation:`#8A75A8`,Message:`#6B7280`,UserMessage:`#DFA67A`,AssistantMessage:`#C9A876`,ToolCall:`#B5ABCB`,Task:`#B0617A`,Project:`#8E4A60`,Event:`#C68095`,Workflow:`#3A6F77`,WorkflowStep:`#5A8E96`,WorkflowRun:`#7AAAB2`,StepResult:`#9CC4CB`,OnboardingState:`#7A5A8A`,Email:`#6F7F4A`,EmailAccount:`#91A063`,Agent:`#B8893D`},te=`#94A3B8`;Object.freeze(Object.keys(C)),Object.freeze(new Set([`Chunk`,`GraphPreference`])),Object.freeze(new Set(`LocalBusiness.Service.PriceSpecification.OpeningHoursSpecification.Organization.Person.UserProfile.Preference.AdminUser.AccessGrant.KnowledgeDocument.DigitalDocument.CreativeWork.Question.FAQPage.DefinedTerm.Review.ImageObject.AdminConversation.PublicConversation.Task.Project.Event.Workflow.OnboardingState.Email.EmailAccount.Agent`.split(`.`))),Object.freeze(new Set([`ToolCall`,`StepResult`,`WorkflowStep`,`WorkflowRun`])),Object.freeze(new Set([`HAS_TOOL_CALL`,`RUN_OF`,`HAS_STEP`,`HAS_RESULT`]));function ne(e){for(let t=1;t<e.length;t++)if(Object.prototype.hasOwnProperty.call(C,e[t]))return e[t];return e[0]??null}function re(e){return C[e]??`#94A3B8`}function w(e){let t=ne(e),n=t?re(t):te,r=0;for(let t=1;t<e.length;t++)Object.prototype.hasOwnProperty.call(C,e[t])&&r++;return{displayLabel:t,colour:n,driftCandidates:r}}function T(e,t){return e.length<10?[...e,t]:[e[0],...e.slice(e.length-8),t]}function E(e){return e.length<=1?e:e.slice(0,-1)}function D(e){return[e]}function O(e){let t=e[e.length-1];return t.kind===`filter`?`f:${[...t.selectedLabels].sort().join(`,`)}:${t.includeTrashed?1:0}:${t.includeAgentActions?1:0}`:`n:${t.rootElementId}`}function ie(e){let t=e[0];if(t.kind!==`filter`)throw Error(`view-stack invariant: root must be filter view`);return t}function k(e){return e.trashed===!0?`skip-trashed`:`pivot`}function A(e,t,n,r){let i=[],a=[];for(let o of e){let e=t.get(o.nodeId);if(!e)continue;a.push(o.nodeId);let{colour:s}=n(e.labels),c=e.trashed?`${s}40`:s;i.push({id:o.nodeId,borderWidth:3,color:{background:c,border:r}})}return{updates:i,inWindow:a}}function ae(e,t){let n=t.length>0?new Set(t):null,r=new Map,i=new Set,a=[];for(let t of e)n&&!t.labels.some(e=>n.has(e))||r.set(t.nodeId,{id:t.nodeId,labels:t.labels,properties:t.properties});for(let t of e)if(r.has(t.nodeId))for(let e of t.related){if(n&&!e.labels.some(e=>n.has(e)))continue;r.has(e.nodeId)||r.set(e.nodeId,{id:e.nodeId,labels:e.labels,properties:e.properties});let[o,s]=e.direction===`outgoing`?[t.nodeId,e.nodeId]:[e.nodeId,t.nodeId],c=`${o}|${s}|${e.relationship}`;i.has(c)||(i.add(c),a.push({id:c,from:o,to:s,type:e.relationship}))}return{nodes:[...r.values()],edges:a}}var oe=2e3;function se(e){let t=typeof e==`number`?e:Number(e);return!Number.isFinite(t)||t<=0?100:Math.min(Math.max(Math.floor(t),1),oe)}var ce=new Set([`Conversation`,`AdminConversation`,`PublicConversation`]),le=/^(\d{4}-\d{2}-\d{2})T(\d{2}:\d{2})/,ue=/^\d{4}-\d{2}-\d{2}T(\d{2}:\d{2}:\d{2})/,de=/^(\d{4}-\d{2}-\d{2})T/,fe=24;function pe(e){let t=e.match(le);return t?`${t[1]} ${t[2]}`:null}function me(e){let t=e.match(ue);return t?t[1]:null}function he(e){let t=e.match(de);return t?t[1]:null}function ge(e){let t=e.properties,n=e.labels[0];if(n===`ToolCall`){let e=t.toolName;if(typeof e==`string`&&e.length>0)return e.length>24?e.slice(0,24)+`…`:e}else if(n===`WorkflowRun`){let e=t.startedAt;if(typeof e==`string`&&e.length>0){let t=pe(e);if(t)return t}}else if(n===`WorkflowStep`){let e=t.label;if(typeof e==`string`&&e.length>0)return e.length>24?e.slice(0,24)+`…`:e}else if(n===`Person`){let e=[typeof t.givenName==`string`?t.givenName:``,typeof t.familyName==`string`?t.familyName:``].filter(e=>e.length>0).join(` `);if(e.length>0)return e.length>24?e.slice(0,24)+`…`:e}else if(n===`Agent`){let e=typeof t.displayName==`string`?t.displayName:``,n=typeof t.slug==`string`?t.slug:``,r=e.length>0?e:n;if(r.length>0)return r.length>24?r.slice(0,24)+`…`:r}else if(n===`Message`){let e=typeof t.role==`string`?t.role:``,n=e===`user`?`user`:e===`assistant`?`asst`:e===`system`?`sys`:e===`tool`?`tool`:null,r=typeof t.createdAt==`string`?t.createdAt:``;if(n&&r){let e=me(r);if(e)return`${n} ${e}`}}for(let e of[`name`,`title`,`summary`,`givenName`,`subject`,`text`]){let n=t[e];if(typeof n==`string`&&n.length>0)return n.length>24?n.slice(0,24)+`…`:n}if(n===`Conversation`){let e=typeof t.conversationId==`string`?t.conversationId:null;if(e)return`Conv ${e.slice(0,8)}`}return n??`…`}function _e(e){let t=e.properties,n=e.labels[0];if(n===`ToolCall`){let e=t.toolName;if(typeof e==`string`&&e.length>0)return e}else if(n===`WorkflowRun`){let e=t.startedAt;if(typeof e==`string`&&e.length>0){let t=pe(e);if(t)return t}}else if(n===`WorkflowStep`){let e=t.label;if(typeof e==`string`&&e.length>0)return e}else if(n===`Person`){let e=[typeof t.givenName==`string`?t.givenName:``,typeof t.familyName==`string`?t.familyName:``].filter(e=>e.length>0).join(` `);if(e.length>0)return e}else if(n===`Agent`){let e=typeof t.displayName==`string`?t.displayName:``,n=typeof t.slug==`string`?t.slug:``,r=e.length>0?e:n;if(r.length>0)return r}for(let e of[`name`,`title`,`summary`,`givenName`,`subject`,`text`]){let n=t[e];if(typeof n==`string`&&n.length>0)return n}if(n===`Conversation`){let e=typeof t.conversationId==`string`?t.conversationId:null;if(e)return`Conv ${e.slice(0,8)}`}return n??`…`}function ve(e){if(e.length===0)return``;let t=e.split(/\s+/).filter(e=>e.length>0);if(t.length===0)return``;if(t.length===1){let e=t[0];return e.length<=fe?e:e.slice(0,fe-1)+`…`}let n=``,r=0;for(;r<t.length;){let e=n.length===0?t[r]:`${n} ${t[r]}`;if(e.length<=fe)n=e,r++;else break}if(n.length===0)return n=t[0].slice(0,fe-1)+`…`,n;if(r>=t.length)return n;let i=``;for(;r<t.length;){let e=i.length===0?t[r]:`${i} ${t[r]}`;if(e.length<=fe)i=e,r++;else break}if(r<t.length){let e=t.slice(r).join(` `);i=(i.length===0?e:`${i} ${e}`).slice(0,fe-1)+`…`}return`${n}\n${i}`}function ye(e,t){let n=e.labels[0];if(!n||!ce.has(n)||t<.7)return ge(e);let r=ve(_e(e));if(t<1.3)return r;let i=e.properties,a=typeof i.createdAt==`string`?i.createdAt:``,o=typeof i.messageCount==`number`?i.messageCount:null;if(a.length===0||o===null)return r;let s=he(a);return s===null?r:`${r}\n${s} · ${o} msgs`}function be(e){let t=e.properties,n=typeof t.createdAt==`string`?t.createdAt:``,r=typeof t.updatedAt==`string`?t.updatedAt:``,i=e.labels.join(` · `);return[_e(e),i,`id: ${e.id}`,n?`createdAt: ${n}`:``,r?`updatedAt: ${r}`:``].filter(e=>e.length>0).join(`
|
|
50
|
-
`)}var xe={solver:`barnesHut`,barnesHut:{gravitationalConstant:-2e3,centralGravity:.4,springLength:170,springConstant:.04},stabilization:{iterations:200}},Se=220,Ce=3;function j(e){let t=new Set(e.nodes.map(e=>e.id)),n=new Set;for(let r of e.edges)t.has(r.from)&&t.has(r.to)&&(n.add(r.from),n.add(r.to));let r=0;for(let t of e.nodes)n.has(t.id)||r++;if(!(e.nodes.length<=5||e.nodes.length>0&&r===e.nodes.length))return{physics:xe,nodePositions:new Map};let i=new Map,a=(Ce-1)*Se/2,o=(Math.ceil(e.nodes.length/Ce)-1)*Se/2;for(let t=0;t<e.nodes.length;t++){let n=t%Ce,r=Math.floor(t/Ce);i.set(e.nodes[t].id,{x:n*Se-a,y:r*Se-o})}return{physics:!1,nodePositions:i}}var M=e(r(),1),we=S(),Te=ee(),N=a();function Ee(e){return e<.7?`compact`:e<1.3?`wrapped`:`detailed`}var P=150,F=`#FBBF24`;function De(e){let t=2166136261;for(let n=0;n<e.length;n++)t^=e.charCodeAt(n),t=Math.imul(t,16777619);return t>>>0}var Oe=`maxy-graph-search-limit-v1`,ke=250,Ae=1200;function je(){let[e,t]=(0,M.useState)(null),[n,r]=(0,M.useState)(!1),i=(0,M.useMemo)(()=>{if(typeof window>`u`)return null;let e=new URLSearchParams(window.location.search),t=e.get(`nodeId`);return t?{nodeId:t,nodeLabel:e.get(`label`)}:null},[]);return(0,M.useEffect)(()=>{i&&Re(`deep-link`,{nodeId:i.nodeId.length>16?i.nodeId.slice(0,16)+`…`:i.nodeId,label:i.nodeLabel??``})},[i]),(0,M.useEffect)(()=>{let e=!1,n=null;try{n=sessionStorage.getItem(`maxy-admin-session-key`)}catch{}if(!n){t(null),r(!0);return}return fetch(`/api/admin/session?session_key=${encodeURIComponent(n)}`).then(i=>{if(!e){if(i.status===401){try{sessionStorage.removeItem(`maxy-admin-session-key`)}catch{}window.location.href=`/`;return}t(n),r(!0)}}).catch(()=>{e||(t(n),r(!0))}),()=>{e=!0}},[]),n?e?(0,N.jsxs)(`div`,{className:`data-page graph-page`,children:[(0,N.jsxs)(`header`,{className:`data-header`,children:[(0,N.jsxs)(`h1`,{className:`data-title`,children:[(0,N.jsx)(d,{size:18}),` Graph`]}),(0,N.jsx)(Me,{})]}),(0,N.jsx)(`main`,{className:`graph-main`,children:(0,N.jsx)(Ne,{sessionKey:e,initialFocus:i})})]}):(0,N.jsxs)(`div`,{className:`data-page`,children:[(0,N.jsx)(`header`,{className:`data-header`,children:(0,N.jsxs)(`h1`,{className:`data-title`,children:[(0,N.jsx)(d,{size:18}),` Graph`]})}),(0,N.jsxs)(`div`,{className:`data-empty`,children:[(0,N.jsx)(`p`,{children:`You are not signed in.`}),(0,N.jsxs)(`p`,{children:[`Open the `,(0,N.jsx)(`a`,{href:`/`,className:`data-link`,children:`main admin page`}),` and log in, then return here.`]})]})]}):(0,N.jsx)(`div`,{className:`data-page`,children:(0,N.jsxs)(`div`,{className:`data-loading`,children:[(0,N.jsx)(f,{size:18,className:`spin`}),` Loading…`]})})}function Me(){let[e,t]=(0,M.useState)(!1),n=(0,M.useRef)(null);(0,M.useEffect)(()=>{if(!e)return;let r=e=>{n.current&&(n.current.contains(e.target)||t(!1))},i=e=>{e.key===`Escape`&&t(!1)};return document.addEventListener(`mousedown`,r),document.addEventListener(`keydown`,i),()=>{document.removeEventListener(`mousedown`,r),document.removeEventListener(`keydown`,i)}},[e]);let r=(0,M.useCallback)(()=>{try{sessionStorage.removeItem(`maxy-admin-session-key`)}catch{}window.location.href=`/`},[]);return(0,N.jsxs)(`div`,{className:`chat-burger-wrap`,ref:n,children:[(0,N.jsx)(`button`,{type:`button`,className:`chat-burger`,onClick:()=>t(e=>!e),"aria-label":`Menu`,"aria-haspopup":`true`,"aria-expanded":e,children:(0,N.jsx)(o,{size:20})}),e&&(0,N.jsxs)(`div`,{className:`chat-menu`,children:[(0,N.jsxs)(`button`,{type:`button`,className:`chat-menu-item`,onClick:()=>{t(!1),window.location.href=`/`},children:[(0,N.jsx)(s,{size:14}),` Chat`]}),(0,N.jsxs)(`button`,{type:`button`,className:`chat-menu-item`,onClick:()=>{t(!1),window.location.href=`/data`},children:[(0,N.jsx)(l,{size:14}),` Data`]}),(0,N.jsx)(`div`,{className:`chat-menu-divider`}),(0,N.jsxs)(`button`,{type:`button`,className:`chat-menu-item`,onClick:()=>{t(!1),r()},children:[(0,N.jsx)(u,{size:14}),` Log out`]})]})]})}function Ne({sessionKey:e,initialFocus:t=null,initialLabels:r=null}){let{adminFetch:i,sessionKey:a,sessionRefetchNonce:o,banner:s,reloadToLogin:l}=p({initialSessionKey:e,surface:`graph`}),u=(0,M.useRef)(null),d=(0,M.useRef)(null),v=(0,M.useRef)(null),x=(0,M.useRef)(null),S=(0,M.useRef)(new Map),ee=(0,M.useRef)([]),C=(0,M.useRef)(null),te=(0,M.useRef)(null),oe=(0,M.useRef)(null),le=(0,M.useRef)(null),ue=(0,M.useRef)(null),[de,fe]=(0,M.useState)([{kind:`filter`,selectedLabels:[],includeTrashed:!1,includeAgentActions:!1}]);(0,M.useEffect)(()=>{t?.nodeId&&fe(e=>{let n=e[e.length-1];return n.kind===`neighbourhood`&&n.rootElementId===t.nodeId?e:[e[0],{kind:`neighbourhood`,rootElementId:t.nodeId,rootLabel:t.nodeLabel}]})},[t?.nodeId,t?.nodeLabel]);let pe=r&&r.length>0?[...r].sort().join(`,`):null;(0,M.useEffect)(()=>{pe&&(xt.current=!0,fe([{kind:`filter`,selectedLabels:pe.split(`,`),includeTrashed:!1,includeAgentActions:!1}]))},[pe]);let[me,he]=(0,M.useState)(!1),[_e,ve]=(0,M.useState)(null),[xe,Se]=(0,M.useState)(null),[Ce,je]=(0,M.useState)(0),[Me,Ne]=(0,M.useState)(null),[ze,Be]=(0,M.useState)(!1),[Ve,He]=(0,M.useState)(!1),[Ue,We]=(0,M.useState)(null),[Ge,Ke]=(0,M.useState)(``),[qe,Je]=(0,M.useState)(``),[Ye,Xe]=(0,M.useState)(null),[Ze,Qe]=(0,M.useState)(null),[$e,et]=(0,M.useState)(()=>{if(typeof window>`u`)return 100;let e=window.localStorage.getItem(Oe);return e?se(e):100}),[tt,nt]=(0,M.useState)($e),[rt,it]=(0,M.useState)(`hybrid`),[at,ot]=(0,M.useState)(0),[st,ct]=(0,M.useState)(0),[lt,ut]=(0,M.useState)([]),[dt,ft]=(0,M.useState)({labels:[],includeTrashed:!1}),[pt,mt]=(0,M.useState)(!1),[ht,gt]=(0,M.useState)([]),[_t,vt]=(0,M.useState)([]),[yt,bt]=(0,M.useState)(!1),xt=(0,M.useRef)(!1),St=(0,M.useRef)(null),Ct=(0,M.useMemo)(()=>{let e=new Set;for(let t of S.current.values()){let n=ne(t.labels);n&&e.add(n)}return[...e].sort()},[Ce]);(0,M.useEffect)(()=>{let e=!1,t=i(`/api/admin/graph-labels-in-graph`).then(async e=>{if(!e.ok)throw Error(`HTTP ${e.status}`);return await e.json()}).catch(e=>{let t=e instanceof Error?e.message:String(e);try{fetch(`/api/_client-error`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`graph-labels-in-graph`,msg:t}),keepalive:!0}).catch(()=>{})}catch{}return{labels:[]}}),n=i(`/api/admin/graph-default-view`).then(async e=>{if(!e.ok)throw Error(`HTTP ${e.status}`);return await e.json()}).catch(e=>{let t=e instanceof Error?e.message:String(e);try{fetch(`/api/_client-error`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`graph-default-view`,msg:t}),keepalive:!0}).catch(()=>{})}catch{}return{labels:[],includeTrashed:!1}});return Promise.all([t,n]).then(([t,n])=>{if(!e&&(ut(t.labels),ft(n),!xt.current)){xt.current=!0;let e=new Set(t.labels.map(e=>e.label)),r=n.labels.filter(t=>e.has(t));(r.length>0||n.includeTrashed)&&fe(e=>[{kind:`filter`,selectedLabels:r,includeTrashed:n.includeTrashed,includeAgentActions:!1},...e.slice(1)])}}),()=>{e=!0}},[a,o,i]);let wt=de[0].kind===`filter`?de[0].includeAgentActions:!1;(0,M.useEffect)(()=>{if(!xt.current)return;let e=!1;return i(`/api/admin/graph-labels-in-graph?includeAgentActions=${wt?`1`:`0`}`).then(async e=>{if(!e.ok)throw Error(`HTTP ${e.status}`);return await e.json()}).then(t=>{e||ut(t.labels)}).catch(e=>{let t=e instanceof Error?e.message:String(e);try{fetch(`/api/_client-error`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`graph-labels-in-graph-refetch`,msg:t}),keepalive:!0}).catch(()=>{})}catch{}}),()=>{e=!0}},[a,o,wt,st,i]),(0,M.useEffect)(()=>{if(!pt)return;let e=e=>{St.current&&(St.current.contains(e.target)||mt(!1))},t=e=>{e.key===`Escape`&&mt(!1)};return document.addEventListener(`mousedown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`keydown`,t)}},[pt]);let Tt=(0,M.useCallback)(()=>{if(v.current)try{v.current.clear()}catch{}if(x.current)try{x.current.clear()}catch{}},[]),Et=(0,M.useCallback)((e,t)=>{We(null),i(`/api/admin/graph-delete`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({elementId:e,by:`graph-drag-trash`})}).then(async e=>{let t=await e.json().catch(()=>({error:`HTTP ${e.status}`}));if(!e.ok)throw Error(t.error??`HTTP ${e.status}`);Ne(null);try{d.current?.unselectAll()}catch{}fe(e=>[ie(e)]),ot(e=>e+1)}).catch(n=>{let r=n instanceof Error?n.message:String(n);We(`Failed to delete: ${r}`),He(!0),window.setTimeout(()=>He(!1),Ae);try{fetch(`/api/_client-error`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`graph-drag-delete`,elementId:e,label:t,msg:r}),keepalive:!0}).catch(()=>{})}catch{}})},[i]),Dt=de[de.length-1],Ot=(0,M.useMemo)(()=>O(de),[de]),kt=(0,M.useRef)(Ot);(0,M.useEffect)(()=>{kt.current=Ot},[Ot]);let At=(0,M.useRef)(de);(0,M.useEffect)(()=>{At.current=de},[de]),(0,M.useEffect)(()=>{if(Dt.kind===`filter`&&Dt.selectedLabels.length===0){C.current?.abort(),C.current=null,he(!1),ve(null),Se(null),je(0),S.current=new Map,Tt();return}if(Dt.kind===`filter`&&qe)return;let e=window.setTimeout(()=>{C.current?.abort();let e=new AbortController;C.current=e,he(!0),ve(null),Se(null),i(Fe(Dt,{includeAgentActions:ie(de).includeAgentActions,search:null,channel:ht,messageSublabel:_t}),{signal:e.signal}).then(async e=>{let t=await e.json().catch(()=>({error:`HTTP ${e.status}`}));if(e.status===413)throw new Ie(t);if(!e.ok)throw Error(t.error??`HTTP ${e.status}`);return t}).then(t=>{e.signal.aborted||(S.current=new Map(t.nodes.map(e=>[e.id,e])),je(t.nodes.length),jt(t.nodes,t.edges))}).catch(t=>{if(!e.signal.aborted){if(t instanceof Ie){Se(t.body),je(0),S.current=new Map,Tt();return}ve(t instanceof Error?t.message:String(t))}}).finally(()=>{e.signal.aborted||he(!1)})},ke);return()=>{window.clearTimeout(e)}},[a,Ot,at,o,qe,tt,ht,_t]),(0,M.useEffect)(()=>()=>{C.current?.abort(),d.current?.destroy(),d.current=null,ue.current!==null&&(clearTimeout(ue.current),ue.current=null)},[]);let jt=(0,M.useCallback)((e,t)=>{if(!u.current)return;ee.current=t;let n=new Set([`Message`,`UserMessage`,`AssistantMessage`]),r=e=>e.labels.some(e=>n.has(e)),i=new Map,a=e.filter(r);if(a.length>0){let e=new Set(a.map(e=>e.id)),n=new Map,r=new Set;for(let i of t)i.type===`NEXT`&&e.has(i.from)&&e.has(i.to)&&(n.set(i.from,i.to),r.add(i.to));let o=[],s=new Set;for(let e of a){if(r.has(e.id))continue;let t=e.id;for(;t&&!s.has(t);)s.add(t),o.push(t),t=n.get(t)}for(let e of a)s.has(e.id)||(o.push(e.id),s.add(e.id));let c=u.current?.clientWidth??1200,l=Math.max(c-160,300),d=Math.max(Math.floor(l/150),2);o.forEach((e,t)=>{let n=t%d,r=Math.floor(t/d);i.set(e,{x:n*150,y:r*90})})}let o=e.map(e=>{let t=e.labels[0]??`Unknown`,n=w(e.labels);n.displayLabel;let r=n.colour;n.driftCandidates;let a=i.get(e.id),o=a?{x:a.x,y:a.y,physics:!1}:{};return e.trashed?{id:e.id,label:ge(e),title:be(e),color:{background:`${r}40`,border:r},borderWidth:2,shapeProperties:{borderDashes:[6,4]},group:t,...o}:{id:e.id,label:ge(e),title:be(e),color:r,group:t,...o}}),s=t.filter(e=>e.type!==`PART_OF`).map(e=>({id:e.id,from:e.from,to:e.to,label:e.type})),c=j({nodes:e,edges:t});v.current=new Te.DataSet(c.nodePositions.size>0?o.map(e=>{if(e.x!==void 0||e.y!==void 0)return e;let t=c.nodePositions.get(e.id);return t?{...e,x:t.x,y:t.y,physics:!1}:e}):o),x.current=new Te.DataSet(s);let l={autoResize:!0,layout:{improvedLayout:!1,randomSeed:De(kt.current)},physics:c.physics===!1?!1:{solver:c.physics.solver,barnesHut:c.physics.barnesHut,stabilization:c.physics.stabilization},nodes:{shape:`dot`,size:18,font:{color:`#1F2937`,size:12,face:`DM Sans, sans-serif`},scaling:{label:{enabled:!0,min:12,max:30,drawThreshold:0}},borderWidth:0,chosen:{node:e=>{e.size=20,e.borderWidth=3},label:e=>{e.size=14}}},edges:{arrows:{to:{enabled:!0,scaleFactor:.4}},color:{color:`#CBD5E1`,highlight:`#475569`},font:{color:`#64748B`,size:9,face:`DM Sans, sans-serif`,align:`middle`,strokeWidth:0},smooth:{enabled:!0,type:`continuous`,roundness:.4},width:1,chosen:{edge:!0,label:!1}},interaction:{hover:!0,tooltipDelay:150}};try{d.current?.destroy(),ue.current!==null&&(clearTimeout(ue.current),ue.current=null),le.current=null;let e=new we.Network(u.current,{nodes:v.current,edges:x.current},l);d.current=e,e.on(`zoom`,()=>{ue.current!==null&&clearTimeout(ue.current),ue.current=setTimeout(()=>{ue.current=null;let e=d.current,t=v.current;if(!e||!t)return;let n;try{n=e.getScale()}catch{return}let r=Ee(n);if(r===le.current)return;le.current=r;let i=[];for(let e of S.current.values()){let t=e.labels[0];if(!t||!ce.has(t))continue;let{colour:r}=w(e.labels),a=e.trashed?{background:`${r}40`,border:r}:r;i.push({id:e.id,label:ye(e,n),color:a})}i.length>0&&t.update(i),console.error(`[graph-page] zoom-tier scale=${n.toFixed(3)} tier=${r} conversations=${i.length}`)},P)}),e.on(`click`,e=>{let t=e.nodes[0];if(!t)return;let n=S.current.get(t);if(!n)return;if(k(n)===`skip-trashed`){Ne(n);return}let r=At.current[At.current.length-1];if(r.kind===`neighbourhood`&&r.rootElementId===t){Ne(e=>e?.id===t?null:n);return}Ne(null);let i={kind:`neighbourhood`,rootElementId:t,rootLabel:n.labels[0]??null};fe(e=>{let n=T(e,i),r=n.length-1;return n.length>e.length&&Re(`nav-push`,{depth:r,kind:i.kind,rootElementId:t}),n.length===10&&e.length===10&&Re(`view-stack-cap-hit`,{depth:10,rootElementId:t}),n})}),e.on(`deselectNode`,()=>{Ne(null)});let t=e=>{let t=u.current,n=te.current;if(!t||!n)return!1;let r=t.getBoundingClientRect(),i=n.getBoundingClientRect(),a=r.left+e.x,o=r.top+e.y;return a>=i.left&&a<=i.right&&o>=i.top&&o<=i.bottom},n=u.current?.parentElement??null;e.on(`dragStart`,e=>{let t=e.nodes[0];if(!t){oe.current=null;return}oe.current=t,n?.classList.add(`graph-dragging`)}),e.on(`dragging`,e=>{if(!oe.current)return;let n=t(e.pointer.DOM);Be(e=>e===n?e:n)}),e.on(`dragEnd`,e=>{let r=oe.current;oe.current=null,Be(!1),n?.classList.remove(`graph-dragging`),r&&t(e.pointer.DOM)&&Et(r,S.current.get(r)?.labels[0]??`Unknown`)})}catch(e){let t=e instanceof Error?e.message:String(e);ve(`Visualisation failed to load: ${t}`);try{fetch(`/api/_client-error`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`graph-render`,msg:t}),keepalive:!0}).catch(()=>{})}catch{}}},[]);(0,M.useEffect)(()=>{let e=Ge.trim();if(!e){Je(``),Xe(null),Qe(null),it(`hybrid`),d.current?.unselectAll();return}let t=setTimeout(()=>Je(e),300);return()=>clearTimeout(t)},[Ge]),(0,M.useEffect)(()=>{let e=setTimeout(()=>{let e=se($e);nt(e);try{window.localStorage.setItem(Oe,String(e))}catch{}},200);return()=>clearTimeout(e)},[$e]);let Mt=(0,M.useCallback)(e=>{let t=d.current,n=v.current;if(!t||!n)return;let{updates:r,inWindow:i}=A(e,S.current,w,F);r.length>0&&(n.update(r),t.fit({nodes:i,animation:{duration:400,easingFunction:`easeInOutQuad`}}))},[]),Nt=ie(de);(0,M.useEffect)(()=>{if(!qe||Dt.kind!==`filter`)return;let e=!1;Qe(null);let t=encodeURIComponent(Nt.selectedLabels.join(`,`));return i(`/api/admin/graph-search?q=${encodeURIComponent(qe)}&labels=${t}&limit=${tt}`).then(async e=>{let t=await e.json().catch(()=>({error:`HTTP ${e.status}`}));if(!e.ok)throw Error(t.error??`HTTP ${e.status}`);return t}).then(t=>{if(e)return;Xe(t.results);let n=t.mode===`bm25`?`bm25`:`hybrid`;if(it(n),n===`bm25`)try{fetch(`/api/_client-error`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`graph-page`,msg:`[graph-page] search-result-degraded mode=bm25 query="${qe}"`}),keepalive:!0}).catch(()=>{})}catch{}let{nodes:r,edges:i}=ae(t.results,Nt.selectedLabels);S.current=new Map(r.map(e=>[e.id,e])),je(r.length),Se(null),jt(r,i),Mt(t.results)}).catch(t=>{e||Qe(t instanceof Error?t.message:String(t))}),()=>{e=!0}},[qe,tt,a,o,i,Mt,Dt.kind,Nt.selectedLabels,jt]);let Pt=(0,M.useCallback)(e=>{fe(t=>{let n=ie(t),r=new Set(n.selectedLabels);return r.has(e)?r.delete(e):r.add(e),D({kind:`filter`,selectedLabels:[...r].sort(),includeTrashed:n.includeTrashed,includeAgentActions:n.includeAgentActions})})},[]),Ft=(0,M.useCallback)(()=>{fe(e=>{let t=ie(e);return D({...t,includeTrashed:!t.includeTrashed})})},[]),It=(0,M.useCallback)(()=>{fe(e=>{let t=ie(e);return D({...t,includeAgentActions:!t.includeAgentActions})})},[]),Lt=(0,M.useCallback)(()=>{Ke(``),Je(``),Xe(null),Qe(null),it(`hybrid`);try{d.current?.unselectAll()}catch{}},[]),Rt=(0,M.useCallback)(()=>{fe(()=>D({kind:`filter`,selectedLabels:[],includeTrashed:!1,includeAgentActions:!1}))},[]),zt=(0,M.useCallback)(()=>{Ne(null);try{d.current?.unselectAll()}catch{}fe(e=>{let t=E(e);return t!==e&&Re(`nav-pop`,{depth:t.length-1}),t})},[]),Bt=(0,M.useCallback)(()=>{let e=ie(de),t={labels:[...e.selectedLabels].sort(),includeTrashed:e.includeTrashed};bt(!0),i(`/api/admin/graph-default-view`,{method:`PUT`,headers:{"content-type":`application/json`},body:JSON.stringify(t)}).then(async e=>{if(!e.ok){let t=await e.json().catch(()=>({error:`HTTP ${e.status}`}));throw Error(t.error??`HTTP ${e.status}`)}ft(t)}).catch(e=>{let t=e instanceof Error?e.message:String(e);try{fetch(`/api/_client-error`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`graph-default-view-save`,msg:t}),keepalive:!0}).catch(()=>{})}catch{}}).finally(()=>bt(!1))},[i,de]),Vt=(0,M.useCallback)(()=>{Ne(null);try{d.current?.unselectAll()}catch{}ot(e=>e+1)},[]),Ht=(0,M.useCallback)(()=>{Ne(null);try{d.current?.unselectAll()}catch{}fe(e=>[ie(e)]),ot(e=>e+1)},[]),Ut=(0,M.useCallback)(()=>{ot(e=>e+1),ct(e=>e+1)},[]),Wt=Dt.kind===`neighbourhood`,Gt=ie(de),Kt=Gt.selectedLabels,qt=Gt.includeTrashed,Jt=Gt.includeAgentActions,Yt=ht.join(`,`),Xt=_t.join(`,`),Zt=Kt.includes(`AdminConversation`)||Kt.includes(`PublicConversation`);(0,M.useEffect)(()=>{Zt&&console.info(`[graph-filter] subfacet-render channel=[${Yt}] sublabel=[${Xt}]`)},[Yt,Xt,Zt]);let Qt=(0,M.useMemo)(()=>{if(qt!==dt.includeTrashed||Kt.length!==dt.labels.length)return!0;for(let e=0;e<Kt.length;e++)if(Kt[e]!==dt.labels[e])return!0;return!1},[qt,Kt,dt]);return(0,N.jsxs)(N.Fragment,{children:[s&&(0,N.jsx)(`button`,{type:`button`,className:`graph-session-banner`,onClick:l,"data-reason":s.reason,children:s.message}),(0,N.jsxs)(`div`,{className:`graph-toolbar`,children:[(0,N.jsxs)(`div`,{className:`data-search-input graph-search-input`,children:[(0,N.jsx)(c,{size:14}),(0,N.jsx)(`input`,{type:`text`,placeholder:`Search nodes…`,value:Ge,onChange:e=>Ke(e.target.value),autoComplete:`off`,spellCheck:!1}),qe&&!Ye&&!Ze&&(0,N.jsx)(f,{size:14,className:`spin`}),Ge.length>0&&(0,N.jsx)(`button`,{type:`button`,className:`graph-search-clear`,onClick:Lt,"aria-label":`Clear search`,title:`Clear search`,children:(0,N.jsx)(b,{size:14})})]}),qe&&!Wt&&(0,N.jsxs)(`div`,{className:`graph-search-limit`,title:`Show top ${$e} matches (1-2000)`,children:[(0,N.jsxs)(`label`,{htmlFor:`graph-search-limit-slider`,className:`graph-search-limit-label`,children:[`Top `,$e]}),(0,N.jsx)(`input`,{id:`graph-search-limit-slider`,type:`range`,min:1,max:2e3,step:1,value:$e,onChange:e=>et(se(e.target.value)),"aria-label":`Maximum search results to render`})]}),(0,N.jsx)(`button`,{type:`button`,className:`graph-refresh-button`,onClick:Ut,disabled:me,"aria-label":`Refresh graph`,title:`Refresh graph`,children:(0,N.jsx)(_,{size:14,className:me?`spin`:void 0})}),!Wt&&(0,N.jsxs)(`div`,{className:`graph-filter-wrap`,ref:St,children:[(0,N.jsxs)(`button`,{type:`button`,className:`graph-filter-toggle${pt?` is-open`:``}${Kt.length>0||qt||Jt?` has-selection`:``}`,onClick:()=>mt(e=>!e),"aria-haspopup":`true`,"aria-expanded":pt,"aria-label":`Filter node types`,children:[(0,N.jsx)(y,{size:14}),(0,N.jsx)(`span`,{children:`Filter`}),Kt.length>0&&(0,N.jsx)(`span`,{className:`graph-filter-count`,children:Kt.length})]}),pt&&(0,N.jsxs)(`div`,{className:`graph-filter-popover`,role:`dialog`,"aria-label":`Node type filter`,children:[(0,N.jsxs)(`div`,{className:`graph-filter-popover-header`,children:[(0,N.jsxs)(`button`,{type:`button`,className:`graph-toggle-trashed${qt?` active`:``}`,onClick:Ft,"aria-pressed":qt,title:`Show trashed nodes — restored with Restore button on each node`,children:[(0,N.jsx)(g,{size:14}),` Show trashed`]}),(Kt.length>0||qt||Jt)&&(0,N.jsx)(`button`,{type:`button`,className:`graph-filter-clear`,onClick:Rt,"aria-label":`Clear filter selection`,title:`Clear filter selection`,children:(0,N.jsx)(b,{size:14})})]}),(0,N.jsx)(`div`,{className:`graph-toggle-agent-actions`,title:`Hide ToolCall, StepResult, WorkflowStep, WorkflowRun — agent-execution telemetry. Flip on for audit/debug.`,children:(0,N.jsx)(m,{checked:Jt,onChange:It,label:`Include agent actions`})}),lt.length===0&&(0,N.jsx)(`p`,{className:`graph-filter-popover-empty`,children:`No node types in your graph yet.`}),(0,N.jsx)(`div`,{className:`graph-filter-rows`,role:`group`,"aria-label":`Node type filter`,children:lt.map(({label:e,nodeCount:t})=>{let n=Kt.includes(e),r=re(e);return(0,N.jsxs)(`button`,{type:`button`,className:`graph-filter-row${n?` active`:``}`,onClick:()=>Pt(e),"aria-pressed":n,children:[(0,N.jsx)(`span`,{className:`graph-filter-row-swatch`,style:{backgroundColor:r}}),(0,N.jsx)(`span`,{className:`graph-filter-row-label`,children:e}),(0,N.jsx)(`span`,{className:`graph-filter-row-count`,children:t})]},e)})}),(Kt.includes(`AdminConversation`)||Kt.includes(`PublicConversation`))&&(0,N.jsxs)(`div`,{className:`graph-filter-subfacets`,children:[(0,N.jsxs)(`div`,{className:`graph-filter-subfacet-group`,role:`group`,"aria-label":`Conversation channel`,children:[(0,N.jsx)(`span`,{className:`graph-filter-subfacet-label`,children:`Channel`}),[`webchat`,`whatsapp`].map(e=>{let t=ht.includes(e);return(0,N.jsx)(`button`,{type:`button`,className:`graph-filter-subfacet-chip${t?` active`:``}`,onClick:()=>{gt(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])},"aria-pressed":t,children:e===`webchat`?`Web`:`WhatsApp`},e)})]}),(0,N.jsxs)(`div`,{className:`graph-filter-subfacet-group`,role:`group`,"aria-label":`Message sublabel`,children:[(0,N.jsx)(`span`,{className:`graph-filter-subfacet-label`,children:`Message`}),[`UserMessage`,`AssistantMessage`,`WhatsAppMessage`].map(e=>{let t=_t.includes(e);return(0,N.jsx)(`button`,{type:`button`,className:`graph-filter-subfacet-chip${t?` active`:``}`,onClick:()=>{vt(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])},"aria-pressed":t,children:e===`UserMessage`?`User`:e===`AssistantMessage`?`Assistant`:`WhatsApp`},e)})]})]}),(0,N.jsx)(`div`,{className:`graph-filter-popover-footer`,children:(0,N.jsx)(`button`,{type:`button`,className:`graph-filter-set-default`,onClick:Bt,disabled:!Qt||yt,children:yt?(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(f,{size:12,className:`spin`}),` Saving…`]}):`Set default view`})})]})]}),(0,N.jsxs)(`div`,{className:`graph-meta`,children:[de.length>1&&(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(`button`,{type:`button`,className:`graph-back-to-filter graph-back-desktop`,onClick:zt,children:`← Back`}),(0,N.jsx)(`button`,{type:`button`,className:`graph-back-to-filter graph-back-mobile`,onClick:zt,"aria-label":`Back`,children:(0,N.jsx)(h,{size:16})})]}),Ce>0&&(0,N.jsxs)(`span`,{className:`graph-meta-count`,children:[Ce,` node`,Ce===1?``:`s`]})]})]}),de.length>1&&(0,N.jsx)(Le,{viewStack:de}),qe&&rt===`bm25`&&!Ze&&(0,N.jsx)(`div`,{className:`graph-error-banner graph-search-degraded`,role:`status`,children:`Vector ranking unavailable — showing keyword-only results.`}),Ze&&(0,N.jsxs)(`div`,{className:`data-error graph-error-banner`,children:[`Search unavailable: `,Ze]}),Ye&&Ye.length===0&&!Ze&&(0,N.jsx)(`div`,{className:`graph-search-status`,children:`No matches in your graph.`}),(0,N.jsxs)(`div`,{className:`graph-canvas-wrap`,children:[me&&(0,N.jsxs)(`div`,{className:`graph-canvas-overlay`,children:[(0,N.jsx)(f,{size:20,className:`spin`}),` Loading your graph…`]}),_e&&!me&&(0,N.jsxs)(`div`,{className:`graph-canvas-overlay graph-canvas-error`,children:[(0,N.jsx)(`p`,{children:_e}),(0,N.jsx)(`button`,{type:`button`,className:`data-btn`,onClick:()=>{ve(null),ot(e=>e+1)},children:`Retry`})]}),xe&&!me&&(0,N.jsxs)(`div`,{className:`graph-canvas-overlay graph-canvas-error`,children:[(0,N.jsxs)(`p`,{children:[`Refine your filter — `,(0,N.jsx)(`strong`,{children:xe.matched}),` matches exceed the 2000 cap.`]}),(0,N.jsx)(`p`,{className:`graph-canvas-hint`,children:`Pick a more specific label combination, or narrow your brand's data.`})]}),!me&&!_e&&!xe&&Ce===0&&!Wt&&Kt.length===0&&(0,N.jsxs)(`div`,{className:`graph-canvas-overlay`,children:[(0,N.jsx)(y,{size:20}),(0,N.jsx)(`p`,{children:`Open Filter to pick a node type and see what's in your graph.`})]}),!me&&!_e&&!xe&&Ce===0&&!Wt&&Kt.length>0&&(0,N.jsx)(`div`,{className:`graph-canvas-overlay`,children:(0,N.jsxs)(`p`,{children:[`No `,Kt.join(`, `),` nodes in your graph yet.`]})}),(0,N.jsx)(`div`,{ref:u,className:`graph-canvas`}),Ce>0&&(0,N.jsx)(`div`,{ref:te,className:`graph-trash-drop-zone${ze?` is-hover`:``}${Ve?` is-error`:``}`,"aria-hidden":`true`,children:(0,N.jsx)(n,{size:18})}),Ue&&(0,N.jsxs)(`div`,{className:`graph-drag-error-banner`,role:`alert`,children:[(0,N.jsx)(`span`,{children:Ue}),(0,N.jsx)(`button`,{type:`button`,className:`graph-drag-error-dismiss`,onClick:()=>We(null),"aria-label":`Dismiss`,children:(0,N.jsx)(b,{size:14})})]})]}),Me&&(0,N.jsx)(Pe,{node:Me,edges:ee.current,nodesById:S.current,adminFetch:i,onClose:()=>{Ne(null);try{d.current?.unselectAll()}catch{}},onRestored:Vt,onTrashed:Ht}),Ce>0&&Ct.length>0&&(0,N.jsx)(`div`,{className:`graph-legend`,children:Ct.map(e=>(0,N.jsxs)(`div`,{className:`graph-legend-item`,children:[(0,N.jsx)(`span`,{className:`graph-legend-swatch`,style:{backgroundColor:re(e)}}),(0,N.jsx)(`span`,{children:e})]},e))})]})}function Pe({node:e,edges:t,nodesById:r,adminFetch:i,onClose:a,onRestored:o,onTrashed:s}){let c=Object.entries(e.properties).filter(([,e])=>e!=null),l=t.filter(t=>t.from===e.id||t.to===e.id),[u,d]=(0,M.useState)(!1),[p,m]=(0,M.useState)(null),[h,g]=(0,M.useState)(!1),[_,y]=(0,M.useState)(null);(0,M.useEffect)(()=>{d(!1),m(null),g(!1),y(null)},[e.id]);let x=(0,M.useCallback)(()=>{d(!0),m(null),i(`/api/admin/graph-restore`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({elementId:e.id})}).then(async e=>{let t=await e.json().catch(()=>({error:`HTTP ${e.status}`}));if(!e.ok)throw Error(t.error??`HTTP ${e.status}`);o()}).catch(e=>{m(e instanceof Error?e.message:String(e)),d(!1)})},[e.id,o,i]),S=(0,M.useCallback)(()=>{g(!0),y(null),i(`/api/admin/graph-delete`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({elementId:e.id,by:`graph-side-panel-trash`})}).then(async e=>{let t=await e.json().catch(()=>({error:`HTTP ${e.status}`}));if(!e.ok)throw Error(t.error??`HTTP ${e.status}`);s()}).catch(e=>{y(e instanceof Error?e.message:String(e)),g(!1)})},[e.id,s,i]);return(0,N.jsxs)(`aside`,{className:`graph-side-panel${e.trashed?` graph-side-panel-trashed`:``}`,children:[(0,N.jsxs)(`header`,{className:`graph-side-header`,children:[(0,N.jsx)(`div`,{children:(()=>{if(e.labels.some(e=>ce.has(e))){let t=_e(e),n=e.properties.createdAt,r=typeof n==`string`?n:``,i=r?pe(r):null,a=e.labels.join(` · `)+(e.trashed?` · Trashed`:``)+` · ${e.id}`;return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(`h2`,{className:`graph-side-name`,title:t,children:t}),i&&(0,N.jsx)(`div`,{className:`graph-side-created`,children:i}),(0,N.jsx)(`div`,{className:`graph-side-meta`,children:a})]})}return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsxs)(`div`,{className:`graph-side-labels`,children:[e.labels.join(` · `),e.trashed?` · Trashed`:``]}),(0,N.jsx)(`div`,{className:`graph-side-id`,children:e.id})]})})()}),(0,N.jsx)(`button`,{type:`button`,className:`graph-side-close`,onClick:a,"aria-label":`Close`,children:(0,N.jsx)(b,{size:14})})]}),e.trashed&&(0,N.jsxs)(`dl`,{className:`graph-side-props graph-side-trash-meta`,children:[(0,N.jsxs)(`div`,{className:`graph-side-prop`,children:[(0,N.jsx)(`dt`,{children:`trashedAt`}),(0,N.jsx)(`dd`,{children:Be(e.properties.trashedAt)})]}),(0,N.jsxs)(`div`,{className:`graph-side-prop`,children:[(0,N.jsx)(`dt`,{children:`trashedBy`}),(0,N.jsx)(`dd`,{children:Be(e.properties.trashedBy)})]})]}),(0,N.jsxs)(`dl`,{className:`graph-side-props`,children:[c.length===0&&(0,N.jsx)(`div`,{className:`graph-side-empty`,children:`No properties.`}),c.map(([e,t])=>(0,N.jsxs)(`div`,{className:`graph-side-prop`,children:[(0,N.jsx)(`dt`,{children:e}),(0,N.jsx)(`dd`,{children:Be(t)})]},e))]}),l.length>0&&(0,N.jsxs)(`section`,{className:`graph-side-edges`,children:[(0,N.jsxs)(`h3`,{className:`graph-side-edges-heading`,children:[`Connections (`,l.length,`)`]}),l.map(t=>{let n=t.from===e.id,i=n?t.to:t.from,a=r.get(i),o=a?ge(a):i,s=n?`→`:`←`,c=Object.entries(t.properties??{}).filter(([,e])=>e!=null&&e!==``);return(0,N.jsxs)(`div`,{className:`graph-side-edge`,children:[(0,N.jsxs)(`div`,{className:`graph-side-edge-header`,children:[(0,N.jsx)(`span`,{className:`graph-side-edge-type`,children:t.type}),(0,N.jsx)(`span`,{className:`graph-side-edge-arrow`,children:s}),(0,N.jsx)(`span`,{className:`graph-side-edge-other`,title:o,children:o})]}),c.length>0&&(0,N.jsx)(`dl`,{className:`graph-side-edge-props`,children:c.map(([e,t])=>(0,N.jsxs)(`div`,{className:`graph-side-prop`,children:[(0,N.jsx)(`dt`,{children:e}),(0,N.jsx)(`dd`,{children:Be(t)})]},e))})]},t.id)})]}),e.trashed&&(0,N.jsxs)(`footer`,{className:`graph-side-footer`,children:[!u&&!p&&(0,N.jsxs)(`button`,{type:`button`,className:`graph-side-restore`,onClick:x,children:[(0,N.jsx)(v,{size:14}),` Restore`]}),u&&(0,N.jsx)(`div`,{className:`graph-delete-confirm`,children:(0,N.jsxs)(`p`,{children:[(0,N.jsx)(f,{size:14,className:`spin`}),` Restoring…`]})}),p&&(0,N.jsxs)(`div`,{className:`graph-delete-confirm graph-delete-confirm-error`,children:[(0,N.jsxs)(`p`,{children:[`Restore failed: `,p]}),(0,N.jsxs)(`div`,{className:`graph-delete-confirm-buttons`,children:[(0,N.jsx)(`button`,{type:`button`,className:`graph-delete-confirm-cancel`,onClick:()=>{m(null)},children:`Close`}),(0,N.jsx)(`button`,{type:`button`,className:`graph-delete-confirm-do`,onClick:x,children:`Retry`})]})]})]}),!e.trashed&&(0,N.jsxs)(`footer`,{className:`graph-side-footer`,children:[!h&&!_&&(0,N.jsxs)(`button`,{type:`button`,className:`graph-side-trash`,onClick:S,children:[(0,N.jsx)(n,{size:14}),` Trash`]}),h&&(0,N.jsx)(`div`,{className:`graph-delete-confirm`,children:(0,N.jsxs)(`p`,{children:[(0,N.jsx)(f,{size:14,className:`spin`}),` Trashing…`]})}),_&&(0,N.jsxs)(`div`,{className:`graph-delete-confirm graph-delete-confirm-error`,children:[(0,N.jsxs)(`p`,{children:[`Trash failed: `,_]}),(0,N.jsxs)(`div`,{className:`graph-delete-confirm-buttons`,children:[(0,N.jsx)(`button`,{type:`button`,className:`graph-delete-confirm-cancel`,onClick:()=>{y(null)},children:`Close`}),(0,N.jsx)(`button`,{type:`button`,className:`graph-delete-confirm-do`,onClick:S,children:`Retry`})]})]})]})]})}function Fe(e,t){let n=`/api/admin/graph-subgraph`,r=t.includeAgentActions?`&includeAgentActions=1`:``;if(e.kind===`neighbourhood`){let i=t.search&&t.search.q?`&q=${encodeURIComponent(t.search.q)}&limit=${t.search.limit}`:``;return`${n}?mode=neighbourhood&elementId=${encodeURIComponent(e.rootElementId)}${r}${i}`}return`${n}?mode=default&labels=${encodeURIComponent(e.selectedLabels.join(`,`))}${e.includeTrashed?`&includeTrashed=1`:``}${r}${t.channel&&t.channel.length>0?`&channel=${encodeURIComponent(t.channel.join(`,`))}`:``}${t.messageSublabel&&t.messageSublabel.length>0?`&messageSublabel=${encodeURIComponent(t.messageSublabel.join(`,`))}`:``}`}var Ie=class extends Error{body;constructor(e){super(e.error),this.body=e}};function Le({viewStack:e}){let t=e.map(e=>e.kind===`filter`?`Filter`:e.rootLabel??`Node`);return(0,N.jsx)(`div`,{className:`graph-breadcrumb`,role:`navigation`,"aria-label":`Graph navigation breadcrumb`,children:t.map((e,n)=>(0,N.jsxs)(`span`,{className:`graph-breadcrumb-item`,children:[n>0&&(0,N.jsx)(`span`,{className:`graph-breadcrumb-separator`,"aria-hidden":`true`,children:`›`}),(0,N.jsx)(`span`,{className:`graph-breadcrumb-label${n===t.length-1?` is-current`:``}`,children:e})]},n))})}function Re(e,t){let n=`[graph-page] ${e} ${Object.entries(t).map(([e,t])=>`${e}=${String(t)}`).join(` `)}`;try{fetch(`/api/_client-error`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`graph-nav`,msg:n}),keepalive:!0}).catch(()=>{})}catch{}}function ze(e){let t=t=>{let n=e[t];if(n&&typeof n==`object`&&`low`in n){let e=n.low;return typeof e==`number`?e:null}return null},n=t(`year`),r=t(`month`),i=t(`day`);if(n===null||r===null||i===null)return null;let a=`${String(n).padStart(4,`0`)}-${String(r).padStart(2,`0`)}-${String(i).padStart(2,`0`)}`;if(!(`hour`in e))return a;let o=t(`hour`),s=t(`minute`),c=t(`second`);return o===null||s===null||c===null?a:`${a} ${String(o).padStart(2,`0`)}:${String(s).padStart(2,`0`)}:${String(c).padStart(2,`0`)}`}function Be(e){if(e==null)return``;if(Array.isArray(e))return e.length>8?`[${e.length} items]`:e.map(String).join(`, `);if(typeof e==`object`){if(`year`in e&&`month`in e&&`day`in e&&typeof e.year==`object`){let t=ze(e);if(t)return t}return JSON.stringify(e)}return String(e)}export{_ as a,v as i,je as n,b as r,Ne as t};
|
|
50
|
+
`)}var xe={solver:`barnesHut`,barnesHut:{gravitationalConstant:-2e3,centralGravity:.4,springLength:170,springConstant:.04},stabilization:{iterations:200}},Se=220,Ce=3;function j(e){let t=new Set(e.nodes.map(e=>e.id)),n=new Set;for(let r of e.edges)t.has(r.from)&&t.has(r.to)&&(n.add(r.from),n.add(r.to));let r=0;for(let t of e.nodes)n.has(t.id)||r++;if(!(e.nodes.length<=5||e.nodes.length>0&&r===e.nodes.length))return{physics:xe,nodePositions:new Map};let i=new Map,a=(Ce-1)*Se/2,o=(Math.ceil(e.nodes.length/Ce)-1)*Se/2;for(let t=0;t<e.nodes.length;t++){let n=t%Ce,r=Math.floor(t/Ce);i.set(e.nodes[t].id,{x:n*Se-a,y:r*Se-o})}return{physics:!1,nodePositions:i}}var M=e(r(),1),we=S(),Te=ee(),N=a();function Ee(e){return e<.7?`compact`:e<1.3?`wrapped`:`detailed`}var P=150,F=`#FBBF24`;function De(e){let t=2166136261;for(let n=0;n<e.length;n++)t^=e.charCodeAt(n),t=Math.imul(t,16777619);return t>>>0}var Oe=`maxy-graph-search-limit-v1`,ke=250,Ae=1200;function je(){let[e,t]=(0,M.useState)(null),[n,r]=(0,M.useState)(!1),i=(0,M.useMemo)(()=>{if(typeof window>`u`)return null;let e=new URLSearchParams(window.location.search),t=e.get(`nodeId`);return t?{nodeId:t,nodeLabel:e.get(`label`)}:null},[]);return(0,M.useEffect)(()=>{i&&Re(`deep-link`,{nodeId:i.nodeId.length>16?i.nodeId.slice(0,16)+`…`:i.nodeId,label:i.nodeLabel??``})},[i]),(0,M.useEffect)(()=>{let e=!1,n=null;try{n=sessionStorage.getItem(`maxy-admin-session-key`)}catch{}if(!n){t(null),r(!0);return}return fetch(`/api/admin/session?session_key=${encodeURIComponent(n)}`).then(i=>{if(!e){if(i.status===401){try{sessionStorage.removeItem(`maxy-admin-session-key`)}catch{}window.location.href=`/`;return}t(n),r(!0)}}).catch(()=>{e||(t(n),r(!0))}),()=>{e=!0}},[]),n?e?(0,N.jsxs)(`div`,{className:`data-page graph-page`,children:[(0,N.jsxs)(`header`,{className:`data-header`,children:[(0,N.jsxs)(`h1`,{className:`data-title`,children:[(0,N.jsx)(d,{size:18}),` Graph`]}),(0,N.jsx)(Me,{})]}),(0,N.jsx)(`main`,{className:`graph-main`,children:(0,N.jsx)(Ne,{sessionKey:e,initialFocus:i})})]}):(0,N.jsxs)(`div`,{className:`data-page`,children:[(0,N.jsx)(`header`,{className:`data-header`,children:(0,N.jsxs)(`h1`,{className:`data-title`,children:[(0,N.jsx)(d,{size:18}),` Graph`]})}),(0,N.jsxs)(`div`,{className:`data-empty`,children:[(0,N.jsx)(`p`,{children:`You are not signed in.`}),(0,N.jsxs)(`p`,{children:[`Open the `,(0,N.jsx)(`a`,{href:`/`,className:`data-link`,children:`main admin page`}),` and log in, then return here.`]})]})]}):(0,N.jsx)(`div`,{className:`data-page`,children:(0,N.jsxs)(`div`,{className:`data-loading`,children:[(0,N.jsx)(f,{size:18,className:`spin`}),` Loading…`]})})}function Me(){let[e,t]=(0,M.useState)(!1),n=(0,M.useRef)(null);(0,M.useEffect)(()=>{if(!e)return;let r=e=>{n.current&&(n.current.contains(e.target)||t(!1))},i=e=>{e.key===`Escape`&&t(!1)};return document.addEventListener(`mousedown`,r),document.addEventListener(`keydown`,i),()=>{document.removeEventListener(`mousedown`,r),document.removeEventListener(`keydown`,i)}},[e]);let r=(0,M.useCallback)(()=>{try{sessionStorage.removeItem(`maxy-admin-session-key`)}catch{}window.location.href=`/`},[]);return(0,N.jsxs)(`div`,{className:`chat-burger-wrap`,ref:n,children:[(0,N.jsx)(`button`,{type:`button`,className:`chat-burger`,onClick:()=>t(e=>!e),"aria-label":`Menu`,"aria-haspopup":`true`,"aria-expanded":e,children:(0,N.jsx)(o,{size:20})}),e&&(0,N.jsxs)(`div`,{className:`chat-menu`,children:[(0,N.jsxs)(`button`,{type:`button`,className:`chat-menu-item`,onClick:()=>{t(!1),window.location.href=`/`},children:[(0,N.jsx)(s,{size:14}),` Chat`]}),(0,N.jsxs)(`button`,{type:`button`,className:`chat-menu-item`,onClick:()=>{t(!1),window.location.href=`/data`},children:[(0,N.jsx)(l,{size:14}),` Data`]}),(0,N.jsx)(`div`,{className:`chat-menu-divider`}),(0,N.jsxs)(`button`,{type:`button`,className:`chat-menu-item`,onClick:()=>{t(!1),r()},children:[(0,N.jsx)(u,{size:14}),` Log out`]})]})]})}function Ne({sessionKey:e,initialFocus:t=null,initialLabels:r=null}){let{adminFetch:i,sessionKey:a,sessionRefetchNonce:o,banner:s,reloadToLogin:l}=p({initialSessionKey:e,surface:`graph`}),u=(0,M.useRef)(null),d=(0,M.useRef)(null),v=(0,M.useRef)(null),x=(0,M.useRef)(null),S=(0,M.useRef)(new Map),ee=(0,M.useRef)([]),C=(0,M.useRef)(null),te=(0,M.useRef)(null),oe=(0,M.useRef)(null),le=(0,M.useRef)(null),ue=(0,M.useRef)(null),[de,fe]=(0,M.useState)([{kind:`filter`,selectedLabels:[],includeTrashed:!1,includeAgentActions:!1}]);(0,M.useEffect)(()=>{t?.nodeId&&fe(e=>{let n=e[e.length-1];return n.kind===`neighbourhood`&&n.rootElementId===t.nodeId?e:[e[0],{kind:`neighbourhood`,rootElementId:t.nodeId,rootLabel:t.nodeLabel}]})},[t?.nodeId,t?.nodeLabel]);let pe=r&&r.length>0?[...r].sort().join(`,`):null;(0,M.useEffect)(()=>{pe&&(xt.current=!0,fe([{kind:`filter`,selectedLabels:pe.split(`,`),includeTrashed:!1,includeAgentActions:!1}]))},[pe]);let[me,he]=(0,M.useState)(!1),[_e,ve]=(0,M.useState)(null),[xe,Se]=(0,M.useState)(null),[Ce,je]=(0,M.useState)(0),[Me,Ne]=(0,M.useState)(null),[ze,Be]=(0,M.useState)(!1),[Ve,He]=(0,M.useState)(!1),[Ue,We]=(0,M.useState)(null),[Ge,Ke]=(0,M.useState)(``),[qe,Je]=(0,M.useState)(``),[Ye,Xe]=(0,M.useState)(null),[Ze,Qe]=(0,M.useState)(null),[$e,et]=(0,M.useState)(()=>{if(typeof window>`u`)return 100;let e=window.localStorage.getItem(Oe);return e?se(e):100}),[tt,nt]=(0,M.useState)($e),[rt,it]=(0,M.useState)(`hybrid`),[at,ot]=(0,M.useState)(0),[st,ct]=(0,M.useState)(0),[lt,ut]=(0,M.useState)([]),[dt,ft]=(0,M.useState)({labels:[],includeTrashed:!1}),[pt,mt]=(0,M.useState)(!1),[ht,gt]=(0,M.useState)([]),[_t,vt]=(0,M.useState)([]),[yt,bt]=(0,M.useState)(!1),xt=(0,M.useRef)(!1),St=(0,M.useRef)(null),Ct=(0,M.useMemo)(()=>{let e=new Set;for(let t of S.current.values()){let n=ne(t.labels);n&&e.add(n)}return[...e].sort()},[Ce]);(0,M.useEffect)(()=>{let e=!1,t=i(`/api/admin/graph-labels-in-graph`).then(async e=>{if(!e.ok)throw Error(`HTTP ${e.status}`);return await e.json()}).catch(e=>{let t=e instanceof Error?e.message:String(e);try{fetch(`/api/_client-error`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`graph-labels-in-graph`,msg:t}),keepalive:!0}).catch(()=>{})}catch{}return{labels:[]}}),n=i(`/api/admin/graph-default-view`).then(async e=>{if(!e.ok)throw Error(`HTTP ${e.status}`);return await e.json()}).catch(e=>{let t=e instanceof Error?e.message:String(e);try{fetch(`/api/_client-error`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`graph-default-view`,msg:t}),keepalive:!0}).catch(()=>{})}catch{}return{labels:[],includeTrashed:!1}});return Promise.all([t,n]).then(([t,n])=>{if(!e&&(ut(t.labels),ft(n),!xt.current)){xt.current=!0;let e=new Set(t.labels.map(e=>e.label)),r=n.labels.filter(t=>e.has(t));(r.length>0||n.includeTrashed)&&fe(e=>[{kind:`filter`,selectedLabels:r,includeTrashed:n.includeTrashed,includeAgentActions:!1},...e.slice(1)])}}),()=>{e=!0}},[a,o,i]);let wt=de[0].kind===`filter`?de[0].includeAgentActions:!1;(0,M.useEffect)(()=>{if(!xt.current)return;let e=!1;return i(`/api/admin/graph-labels-in-graph?includeAgentActions=${wt?`1`:`0`}`).then(async e=>{if(!e.ok)throw Error(`HTTP ${e.status}`);return await e.json()}).then(t=>{e||ut(t.labels)}).catch(e=>{let t=e instanceof Error?e.message:String(e);try{fetch(`/api/_client-error`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`graph-labels-in-graph-refetch`,msg:t}),keepalive:!0}).catch(()=>{})}catch{}}),()=>{e=!0}},[a,o,wt,st,i]),(0,M.useEffect)(()=>{if(!pt)return;let e=e=>{St.current&&(St.current.contains(e.target)||mt(!1))},t=e=>{e.key===`Escape`&&mt(!1)};return document.addEventListener(`mousedown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`keydown`,t)}},[pt]);let Tt=(0,M.useCallback)(()=>{if(v.current)try{v.current.clear()}catch{}if(x.current)try{x.current.clear()}catch{}},[]),Et=(0,M.useCallback)((e,t)=>{We(null),i(`/api/admin/graph-delete`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({elementId:e,by:`graph-drag-trash`})}).then(async e=>{let t=await e.json().catch(()=>({error:`HTTP ${e.status}`}));if(!e.ok)throw Error(t.error??`HTTP ${e.status}`);Ne(null);try{d.current?.unselectAll()}catch{}fe(e=>[ie(e)]),ot(e=>e+1)}).catch(n=>{let r=n instanceof Error?n.message:String(n);We(`Failed to delete: ${r}`),He(!0),window.setTimeout(()=>He(!1),Ae);try{fetch(`/api/_client-error`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`graph-drag-delete`,elementId:e,label:t,msg:r}),keepalive:!0}).catch(()=>{})}catch{}})},[i]),Dt=de[de.length-1],Ot=(0,M.useMemo)(()=>O(de),[de]),kt=(0,M.useRef)(Ot);(0,M.useEffect)(()=>{kt.current=Ot},[Ot]);let At=(0,M.useRef)(de);(0,M.useEffect)(()=>{At.current=de},[de]),(0,M.useEffect)(()=>{if(Dt.kind===`filter`&&Dt.selectedLabels.length===0){C.current?.abort(),C.current=null,he(!1),ve(null),Se(null),je(0),S.current=new Map,Tt();return}if(Dt.kind===`filter`&&qe)return;let e=window.setTimeout(()=>{C.current?.abort();let e=new AbortController;C.current=e,he(!0),ve(null),Se(null),i(Fe(Dt,{includeAgentActions:ie(de).includeAgentActions,search:null,channel:ht,messageSublabel:_t}),{signal:e.signal}).then(async e=>{let t=await e.json().catch(()=>({error:`HTTP ${e.status}`}));if(e.status===413)throw new Ie(t);if(!e.ok)throw Error(t.error??`HTTP ${e.status}`);return t}).then(t=>{e.signal.aborted||(S.current=new Map(t.nodes.map(e=>[e.id,e])),je(t.nodes.length),jt(t.nodes,t.edges))}).catch(t=>{if(!e.signal.aborted){if(t instanceof Ie){Se(t.body),je(0),S.current=new Map,Tt();return}ve(t instanceof Error?t.message:String(t))}}).finally(()=>{e.signal.aborted||he(!1)})},ke);return()=>{window.clearTimeout(e)}},[a,Ot,at,o,qe,tt,ht,_t]),(0,M.useEffect)(()=>()=>{C.current?.abort(),d.current?.destroy(),d.current=null,ue.current!==null&&(clearTimeout(ue.current),ue.current=null)},[]);let jt=(0,M.useCallback)((e,t)=>{if(!u.current)return;ee.current=t;let n=new Set([`Message`,`UserMessage`,`AssistantMessage`]),r=e=>e.labels.some(e=>n.has(e)),i=new Map,a=e.filter(r);if(a.length>0){let e=new Set(a.map(e=>e.id)),n=new Map,r=new Set;for(let i of t)i.type===`NEXT`&&e.has(i.from)&&e.has(i.to)&&(n.set(i.from,i.to),r.add(i.to));let o=[],s=new Set;for(let e of a){if(r.has(e.id))continue;let t=e.id;for(;t&&!s.has(t);)s.add(t),o.push(t),t=n.get(t)}for(let e of a)s.has(e.id)||(o.push(e.id),s.add(e.id));let c=u.current?.clientWidth??1200,l=Math.max(c-160,300),d=Math.max(Math.floor(l/150),2);o.forEach((e,t)=>{let n=t%d,r=Math.floor(t/d);i.set(e,{x:n*150,y:r*90})})}let o=e.map(e=>{let t=e.labels[0]??`Unknown`,n=w(e.labels);n.displayLabel;let r=n.colour;n.driftCandidates;let a=i.get(e.id),o=a?{x:a.x,y:a.y,physics:!1}:{};return e.trashed?{id:e.id,label:ge(e),title:be(e),color:{background:`${r}40`,border:r},borderWidth:2,shapeProperties:{borderDashes:[6,4]},group:t,...o}:{id:e.id,label:ge(e),title:be(e),color:r,group:t,...o}}),s=new Set(o.map(e=>e.id)),c=t.filter(e=>e.type!==`PART_OF`||s.has(e.from)&&s.has(e.to)).map(e=>({id:e.id,from:e.from,to:e.to,label:e.type})),l=j({nodes:e,edges:t});v.current=new Te.DataSet(l.nodePositions.size>0?o.map(e=>{if(e.x!==void 0||e.y!==void 0)return e;let t=l.nodePositions.get(e.id);return t?{...e,x:t.x,y:t.y,physics:!1}:e}):o),x.current=new Te.DataSet(c);let f={autoResize:!0,layout:{improvedLayout:!1,randomSeed:De(kt.current)},physics:l.physics===!1?!1:{solver:l.physics.solver,barnesHut:l.physics.barnesHut,stabilization:l.physics.stabilization},nodes:{shape:`dot`,size:18,font:{color:`#1F2937`,size:12,face:`DM Sans, sans-serif`},scaling:{label:{enabled:!0,min:12,max:30,drawThreshold:0}},borderWidth:0,chosen:{node:e=>{e.size=20,e.borderWidth=3},label:e=>{e.size=14}}},edges:{arrows:{to:{enabled:!0,scaleFactor:.4}},color:{color:`#CBD5E1`,highlight:`#475569`},font:{color:`#64748B`,size:9,face:`DM Sans, sans-serif`,align:`middle`,strokeWidth:0},smooth:{enabled:!0,type:`continuous`,roundness:.4},width:1,chosen:{edge:!0,label:!1}},interaction:{hover:!0,tooltipDelay:150}};try{d.current?.destroy(),ue.current!==null&&(clearTimeout(ue.current),ue.current=null),le.current=null;let e=new we.Network(u.current,{nodes:v.current,edges:x.current},f);d.current=e,e.on(`zoom`,()=>{ue.current!==null&&clearTimeout(ue.current),ue.current=setTimeout(()=>{ue.current=null;let e=d.current,t=v.current;if(!e||!t)return;let n;try{n=e.getScale()}catch{return}let r=Ee(n);if(r===le.current)return;le.current=r;let i=[];for(let e of S.current.values()){let t=e.labels[0];if(!t||!ce.has(t))continue;let{colour:r}=w(e.labels),a=e.trashed?{background:`${r}40`,border:r}:r;i.push({id:e.id,label:ye(e,n),color:a})}i.length>0&&t.update(i),console.error(`[graph-page] zoom-tier scale=${n.toFixed(3)} tier=${r} conversations=${i.length}`)},P)}),e.on(`click`,e=>{let t=e.nodes[0];if(!t)return;let n=S.current.get(t);if(!n)return;if(k(n)===`skip-trashed`){Ne(n);return}let r=At.current[At.current.length-1];if(r.kind===`neighbourhood`&&r.rootElementId===t){Ne(e=>e?.id===t?null:n);return}Ne(null);let i={kind:`neighbourhood`,rootElementId:t,rootLabel:n.labels[0]??null};fe(e=>{let n=T(e,i),r=n.length-1;return n.length>e.length&&Re(`nav-push`,{depth:r,kind:i.kind,rootElementId:t}),n.length===10&&e.length===10&&Re(`view-stack-cap-hit`,{depth:10,rootElementId:t}),n})}),e.on(`deselectNode`,()=>{Ne(null)});let t=e=>{let t=u.current,n=te.current;if(!t||!n)return!1;let r=t.getBoundingClientRect(),i=n.getBoundingClientRect(),a=r.left+e.x,o=r.top+e.y;return a>=i.left&&a<=i.right&&o>=i.top&&o<=i.bottom},n=u.current?.parentElement??null;e.on(`dragStart`,e=>{let t=e.nodes[0];if(!t){oe.current=null;return}oe.current=t,n?.classList.add(`graph-dragging`)}),e.on(`dragging`,e=>{if(!oe.current)return;let n=t(e.pointer.DOM);Be(e=>e===n?e:n)}),e.on(`dragEnd`,e=>{let r=oe.current;oe.current=null,Be(!1),n?.classList.remove(`graph-dragging`),r&&t(e.pointer.DOM)&&Et(r,S.current.get(r)?.labels[0]??`Unknown`)})}catch(e){let t=e instanceof Error?e.message:String(e);ve(`Visualisation failed to load: ${t}`);try{fetch(`/api/_client-error`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`graph-render`,msg:t}),keepalive:!0}).catch(()=>{})}catch{}}},[]);(0,M.useEffect)(()=>{let e=Ge.trim();if(!e){Je(``),Xe(null),Qe(null),it(`hybrid`),d.current?.unselectAll();return}let t=setTimeout(()=>Je(e),300);return()=>clearTimeout(t)},[Ge]),(0,M.useEffect)(()=>{let e=setTimeout(()=>{let e=se($e);nt(e);try{window.localStorage.setItem(Oe,String(e))}catch{}},200);return()=>clearTimeout(e)},[$e]);let Mt=(0,M.useCallback)(e=>{let t=d.current,n=v.current;if(!t||!n)return;let{updates:r,inWindow:i}=A(e,S.current,w,F);r.length>0&&(n.update(r),t.fit({nodes:i,animation:{duration:400,easingFunction:`easeInOutQuad`}}))},[]),Nt=ie(de);(0,M.useEffect)(()=>{if(!qe||Dt.kind!==`filter`)return;let e=!1;Qe(null);let t=encodeURIComponent(Nt.selectedLabels.join(`,`));return i(`/api/admin/graph-search?q=${encodeURIComponent(qe)}&labels=${t}&limit=${tt}`).then(async e=>{let t=await e.json().catch(()=>({error:`HTTP ${e.status}`}));if(!e.ok)throw Error(t.error??`HTTP ${e.status}`);return t}).then(t=>{if(e)return;Xe(t.results);let n=t.mode===`bm25`?`bm25`:`hybrid`;if(it(n),n===`bm25`)try{fetch(`/api/_client-error`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`graph-page`,msg:`[graph-page] search-result-degraded mode=bm25 query="${qe}"`}),keepalive:!0}).catch(()=>{})}catch{}let{nodes:r,edges:i}=ae(t.results,Nt.selectedLabels);S.current=new Map(r.map(e=>[e.id,e])),je(r.length),Se(null),jt(r,i),Mt(t.results)}).catch(t=>{e||Qe(t instanceof Error?t.message:String(t))}),()=>{e=!0}},[qe,tt,a,o,i,Mt,Dt.kind,Nt.selectedLabels,jt]);let Pt=(0,M.useCallback)(e=>{fe(t=>{let n=ie(t),r=new Set(n.selectedLabels);return r.has(e)?r.delete(e):r.add(e),D({kind:`filter`,selectedLabels:[...r].sort(),includeTrashed:n.includeTrashed,includeAgentActions:n.includeAgentActions})})},[]),Ft=(0,M.useCallback)(()=>{fe(e=>{let t=ie(e);return D({...t,includeTrashed:!t.includeTrashed})})},[]),It=(0,M.useCallback)(()=>{fe(e=>{let t=ie(e);return D({...t,includeAgentActions:!t.includeAgentActions})})},[]),Lt=(0,M.useCallback)(()=>{Ke(``),Je(``),Xe(null),Qe(null),it(`hybrid`);try{d.current?.unselectAll()}catch{}},[]),Rt=(0,M.useCallback)(()=>{fe(()=>D({kind:`filter`,selectedLabels:[],includeTrashed:!1,includeAgentActions:!1}))},[]),zt=(0,M.useCallback)(()=>{Ne(null);try{d.current?.unselectAll()}catch{}fe(e=>{let t=E(e);return t!==e&&Re(`nav-pop`,{depth:t.length-1}),t})},[]),Bt=(0,M.useCallback)(()=>{let e=ie(de),t={labels:[...e.selectedLabels].sort(),includeTrashed:e.includeTrashed};bt(!0),i(`/api/admin/graph-default-view`,{method:`PUT`,headers:{"content-type":`application/json`},body:JSON.stringify(t)}).then(async e=>{if(!e.ok){let t=await e.json().catch(()=>({error:`HTTP ${e.status}`}));throw Error(t.error??`HTTP ${e.status}`)}ft(t)}).catch(e=>{let t=e instanceof Error?e.message:String(e);try{fetch(`/api/_client-error`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`graph-default-view-save`,msg:t}),keepalive:!0}).catch(()=>{})}catch{}}).finally(()=>bt(!1))},[i,de]),Vt=(0,M.useCallback)(()=>{Ne(null);try{d.current?.unselectAll()}catch{}ot(e=>e+1)},[]),Ht=(0,M.useCallback)(()=>{Ne(null);try{d.current?.unselectAll()}catch{}fe(e=>[ie(e)]),ot(e=>e+1)},[]),Ut=(0,M.useCallback)(()=>{ot(e=>e+1),ct(e=>e+1)},[]),Wt=Dt.kind===`neighbourhood`,Gt=ie(de),Kt=Gt.selectedLabels,qt=Gt.includeTrashed,Jt=Gt.includeAgentActions,Yt=ht.join(`,`),Xt=_t.join(`,`),Zt=Kt.includes(`AdminConversation`)||Kt.includes(`PublicConversation`);(0,M.useEffect)(()=>{Zt&&console.info(`[graph-filter] subfacet-render channel=[${Yt}] sublabel=[${Xt}]`)},[Yt,Xt,Zt]);let Qt=(0,M.useMemo)(()=>{if(qt!==dt.includeTrashed||Kt.length!==dt.labels.length)return!0;for(let e=0;e<Kt.length;e++)if(Kt[e]!==dt.labels[e])return!0;return!1},[qt,Kt,dt]);return(0,N.jsxs)(N.Fragment,{children:[s&&(0,N.jsx)(`button`,{type:`button`,className:`graph-session-banner`,onClick:l,"data-reason":s.reason,children:s.message}),(0,N.jsxs)(`div`,{className:`graph-toolbar`,children:[(0,N.jsxs)(`div`,{className:`data-search-input graph-search-input`,children:[(0,N.jsx)(c,{size:14}),(0,N.jsx)(`input`,{type:`text`,placeholder:`Search nodes…`,value:Ge,onChange:e=>Ke(e.target.value),autoComplete:`off`,spellCheck:!1}),qe&&!Ye&&!Ze&&(0,N.jsx)(f,{size:14,className:`spin`}),Ge.length>0&&(0,N.jsx)(`button`,{type:`button`,className:`graph-search-clear`,onClick:Lt,"aria-label":`Clear search`,title:`Clear search`,children:(0,N.jsx)(b,{size:14})})]}),qe&&!Wt&&(0,N.jsxs)(`div`,{className:`graph-search-limit`,title:`Show top ${$e} matches (1-2000)`,children:[(0,N.jsxs)(`label`,{htmlFor:`graph-search-limit-slider`,className:`graph-search-limit-label`,children:[`Top `,$e]}),(0,N.jsx)(`input`,{id:`graph-search-limit-slider`,type:`range`,min:1,max:2e3,step:1,value:$e,onChange:e=>et(se(e.target.value)),"aria-label":`Maximum search results to render`})]}),(0,N.jsx)(`button`,{type:`button`,className:`graph-refresh-button`,onClick:Ut,disabled:me,"aria-label":`Refresh graph`,title:`Refresh graph`,children:(0,N.jsx)(_,{size:14,className:me?`spin`:void 0})}),!Wt&&(0,N.jsxs)(`div`,{className:`graph-filter-wrap`,ref:St,children:[(0,N.jsxs)(`button`,{type:`button`,className:`graph-filter-toggle${pt?` is-open`:``}${Kt.length>0||qt||Jt?` has-selection`:``}`,onClick:()=>mt(e=>!e),"aria-haspopup":`true`,"aria-expanded":pt,"aria-label":`Filter node types`,children:[(0,N.jsx)(y,{size:14}),(0,N.jsx)(`span`,{children:`Filter`}),Kt.length>0&&(0,N.jsx)(`span`,{className:`graph-filter-count`,children:Kt.length})]}),pt&&(0,N.jsxs)(`div`,{className:`graph-filter-popover`,role:`dialog`,"aria-label":`Node type filter`,children:[(0,N.jsxs)(`div`,{className:`graph-filter-popover-header`,children:[(0,N.jsxs)(`button`,{type:`button`,className:`graph-toggle-trashed${qt?` active`:``}`,onClick:Ft,"aria-pressed":qt,title:`Show trashed nodes — restored with Restore button on each node`,children:[(0,N.jsx)(g,{size:14}),` Show trashed`]}),(Kt.length>0||qt||Jt)&&(0,N.jsx)(`button`,{type:`button`,className:`graph-filter-clear`,onClick:Rt,"aria-label":`Clear filter selection`,title:`Clear filter selection`,children:(0,N.jsx)(b,{size:14})})]}),(0,N.jsx)(`div`,{className:`graph-toggle-agent-actions`,title:`Hide ToolCall, StepResult, WorkflowStep, WorkflowRun — agent-execution telemetry. Flip on for audit/debug.`,children:(0,N.jsx)(m,{checked:Jt,onChange:It,label:`Include agent actions`})}),lt.length===0&&(0,N.jsx)(`p`,{className:`graph-filter-popover-empty`,children:`No node types in your graph yet.`}),(0,N.jsx)(`div`,{className:`graph-filter-rows`,role:`group`,"aria-label":`Node type filter`,children:lt.map(({label:e,nodeCount:t})=>{let n=Kt.includes(e),r=re(e);return(0,N.jsxs)(`button`,{type:`button`,className:`graph-filter-row${n?` active`:``}`,onClick:()=>Pt(e),"aria-pressed":n,children:[(0,N.jsx)(`span`,{className:`graph-filter-row-swatch`,style:{backgroundColor:r}}),(0,N.jsx)(`span`,{className:`graph-filter-row-label`,children:e}),(0,N.jsx)(`span`,{className:`graph-filter-row-count`,children:t})]},e)})}),(Kt.includes(`AdminConversation`)||Kt.includes(`PublicConversation`))&&(0,N.jsxs)(`div`,{className:`graph-filter-subfacets`,children:[(0,N.jsxs)(`div`,{className:`graph-filter-subfacet-group`,role:`group`,"aria-label":`Conversation channel`,children:[(0,N.jsx)(`span`,{className:`graph-filter-subfacet-label`,children:`Channel`}),[`webchat`,`whatsapp`].map(e=>{let t=ht.includes(e);return(0,N.jsx)(`button`,{type:`button`,className:`graph-filter-subfacet-chip${t?` active`:``}`,onClick:()=>{gt(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])},"aria-pressed":t,children:e===`webchat`?`Web`:`WhatsApp`},e)})]}),(0,N.jsxs)(`div`,{className:`graph-filter-subfacet-group`,role:`group`,"aria-label":`Message sublabel`,children:[(0,N.jsx)(`span`,{className:`graph-filter-subfacet-label`,children:`Message`}),[`UserMessage`,`AssistantMessage`,`WhatsAppMessage`].map(e=>{let t=_t.includes(e);return(0,N.jsx)(`button`,{type:`button`,className:`graph-filter-subfacet-chip${t?` active`:``}`,onClick:()=>{vt(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])},"aria-pressed":t,children:e===`UserMessage`?`User`:e===`AssistantMessage`?`Assistant`:`WhatsApp`},e)})]})]}),(0,N.jsx)(`div`,{className:`graph-filter-popover-footer`,children:(0,N.jsx)(`button`,{type:`button`,className:`graph-filter-set-default`,onClick:Bt,disabled:!Qt||yt,children:yt?(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(f,{size:12,className:`spin`}),` Saving…`]}):`Set default view`})})]})]}),(0,N.jsxs)(`div`,{className:`graph-meta`,children:[de.length>1&&(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(`button`,{type:`button`,className:`graph-back-to-filter graph-back-desktop`,onClick:zt,children:`← Back`}),(0,N.jsx)(`button`,{type:`button`,className:`graph-back-to-filter graph-back-mobile`,onClick:zt,"aria-label":`Back`,children:(0,N.jsx)(h,{size:16})})]}),Ce>0&&(0,N.jsxs)(`span`,{className:`graph-meta-count`,children:[Ce,` node`,Ce===1?``:`s`]})]})]}),de.length>1&&(0,N.jsx)(Le,{viewStack:de}),qe&&rt===`bm25`&&!Ze&&(0,N.jsx)(`div`,{className:`graph-error-banner graph-search-degraded`,role:`status`,children:`Vector ranking unavailable — showing keyword-only results.`}),Ze&&(0,N.jsxs)(`div`,{className:`data-error graph-error-banner`,children:[`Search unavailable: `,Ze]}),Ye&&Ye.length===0&&!Ze&&(0,N.jsx)(`div`,{className:`graph-search-status`,children:`No matches in your graph.`}),(0,N.jsxs)(`div`,{className:`graph-canvas-wrap`,children:[me&&(0,N.jsxs)(`div`,{className:`graph-canvas-overlay`,children:[(0,N.jsx)(f,{size:20,className:`spin`}),` Loading your graph…`]}),_e&&!me&&(0,N.jsxs)(`div`,{className:`graph-canvas-overlay graph-canvas-error`,children:[(0,N.jsx)(`p`,{children:_e}),(0,N.jsx)(`button`,{type:`button`,className:`data-btn`,onClick:()=>{ve(null),ot(e=>e+1)},children:`Retry`})]}),xe&&!me&&(0,N.jsxs)(`div`,{className:`graph-canvas-overlay graph-canvas-error`,children:[(0,N.jsxs)(`p`,{children:[`Refine your filter — `,(0,N.jsx)(`strong`,{children:xe.matched}),` matches exceed the 2000 cap.`]}),(0,N.jsx)(`p`,{className:`graph-canvas-hint`,children:`Pick a more specific label combination, or narrow your brand's data.`})]}),!me&&!_e&&!xe&&Ce===0&&!Wt&&Kt.length===0&&(0,N.jsxs)(`div`,{className:`graph-canvas-overlay`,children:[(0,N.jsx)(y,{size:20}),(0,N.jsx)(`p`,{children:`Open Filter to pick a node type and see what's in your graph.`})]}),!me&&!_e&&!xe&&Ce===0&&!Wt&&Kt.length>0&&(0,N.jsx)(`div`,{className:`graph-canvas-overlay`,children:(0,N.jsxs)(`p`,{children:[`No `,Kt.join(`, `),` nodes in your graph yet.`]})}),(0,N.jsx)(`div`,{ref:u,className:`graph-canvas`}),Ce>0&&(0,N.jsx)(`div`,{ref:te,className:`graph-trash-drop-zone${ze?` is-hover`:``}${Ve?` is-error`:``}`,"aria-hidden":`true`,children:(0,N.jsx)(n,{size:18})}),Ue&&(0,N.jsxs)(`div`,{className:`graph-drag-error-banner`,role:`alert`,children:[(0,N.jsx)(`span`,{children:Ue}),(0,N.jsx)(`button`,{type:`button`,className:`graph-drag-error-dismiss`,onClick:()=>We(null),"aria-label":`Dismiss`,children:(0,N.jsx)(b,{size:14})})]})]}),Me&&(0,N.jsx)(Pe,{node:Me,edges:ee.current,nodesById:S.current,adminFetch:i,onClose:()=>{Ne(null);try{d.current?.unselectAll()}catch{}},onRestored:Vt,onTrashed:Ht}),Ce>0&&Ct.length>0&&(0,N.jsx)(`div`,{className:`graph-legend`,children:Ct.map(e=>(0,N.jsxs)(`div`,{className:`graph-legend-item`,children:[(0,N.jsx)(`span`,{className:`graph-legend-swatch`,style:{backgroundColor:re(e)}}),(0,N.jsx)(`span`,{children:e})]},e))})]})}function Pe({node:e,edges:t,nodesById:r,adminFetch:i,onClose:a,onRestored:o,onTrashed:s}){let c=Object.entries(e.properties).filter(([,e])=>e!=null),l=t.filter(t=>t.from===e.id||t.to===e.id),[u,d]=(0,M.useState)(!1),[p,m]=(0,M.useState)(null),[h,g]=(0,M.useState)(!1),[_,y]=(0,M.useState)(null);(0,M.useEffect)(()=>{d(!1),m(null),g(!1),y(null)},[e.id]);let x=(0,M.useCallback)(()=>{d(!0),m(null),i(`/api/admin/graph-restore`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({elementId:e.id})}).then(async e=>{let t=await e.json().catch(()=>({error:`HTTP ${e.status}`}));if(!e.ok)throw Error(t.error??`HTTP ${e.status}`);o()}).catch(e=>{m(e instanceof Error?e.message:String(e)),d(!1)})},[e.id,o,i]),S=(0,M.useCallback)(()=>{g(!0),y(null),i(`/api/admin/graph-delete`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({elementId:e.id,by:`graph-side-panel-trash`})}).then(async e=>{let t=await e.json().catch(()=>({error:`HTTP ${e.status}`}));if(!e.ok)throw Error(t.error??`HTTP ${e.status}`);s()}).catch(e=>{y(e instanceof Error?e.message:String(e)),g(!1)})},[e.id,s,i]);return(0,N.jsxs)(`aside`,{className:`graph-side-panel${e.trashed?` graph-side-panel-trashed`:``}`,children:[(0,N.jsxs)(`header`,{className:`graph-side-header`,children:[(0,N.jsx)(`div`,{children:(()=>{if(e.labels.some(e=>ce.has(e))){let t=_e(e),n=e.properties.createdAt,r=typeof n==`string`?n:``,i=r?pe(r):null,a=e.labels.join(` · `)+(e.trashed?` · Trashed`:``)+` · ${e.id}`;return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(`h2`,{className:`graph-side-name`,title:t,children:t}),i&&(0,N.jsx)(`div`,{className:`graph-side-created`,children:i}),(0,N.jsx)(`div`,{className:`graph-side-meta`,children:a})]})}return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsxs)(`div`,{className:`graph-side-labels`,children:[e.labels.join(` · `),e.trashed?` · Trashed`:``]}),(0,N.jsx)(`div`,{className:`graph-side-id`,children:e.id})]})})()}),(0,N.jsx)(`button`,{type:`button`,className:`graph-side-close`,onClick:a,"aria-label":`Close`,children:(0,N.jsx)(b,{size:14})})]}),e.trashed&&(0,N.jsxs)(`dl`,{className:`graph-side-props graph-side-trash-meta`,children:[(0,N.jsxs)(`div`,{className:`graph-side-prop`,children:[(0,N.jsx)(`dt`,{children:`trashedAt`}),(0,N.jsx)(`dd`,{children:Be(e.properties.trashedAt)})]}),(0,N.jsxs)(`div`,{className:`graph-side-prop`,children:[(0,N.jsx)(`dt`,{children:`trashedBy`}),(0,N.jsx)(`dd`,{children:Be(e.properties.trashedBy)})]})]}),(0,N.jsxs)(`dl`,{className:`graph-side-props`,children:[c.length===0&&(0,N.jsx)(`div`,{className:`graph-side-empty`,children:`No properties.`}),c.map(([e,t])=>(0,N.jsxs)(`div`,{className:`graph-side-prop`,children:[(0,N.jsx)(`dt`,{children:e}),(0,N.jsx)(`dd`,{children:Be(t)})]},e))]}),l.length>0&&(0,N.jsxs)(`section`,{className:`graph-side-edges`,children:[(0,N.jsxs)(`h3`,{className:`graph-side-edges-heading`,children:[`Connections (`,l.length,`)`]}),l.map(t=>{let n=t.from===e.id,i=n?t.to:t.from,a=r.get(i),o=a?ge(a):i,s=n?`→`:`←`,c=Object.entries(t.properties??{}).filter(([,e])=>e!=null&&e!==``);return(0,N.jsxs)(`div`,{className:`graph-side-edge`,children:[(0,N.jsxs)(`div`,{className:`graph-side-edge-header`,children:[(0,N.jsx)(`span`,{className:`graph-side-edge-type`,children:t.type}),(0,N.jsx)(`span`,{className:`graph-side-edge-arrow`,children:s}),(0,N.jsx)(`span`,{className:`graph-side-edge-other`,title:o,children:o})]}),c.length>0&&(0,N.jsx)(`dl`,{className:`graph-side-edge-props`,children:c.map(([e,t])=>(0,N.jsxs)(`div`,{className:`graph-side-prop`,children:[(0,N.jsx)(`dt`,{children:e}),(0,N.jsx)(`dd`,{children:Be(t)})]},e))})]},t.id)})]}),e.trashed&&(0,N.jsxs)(`footer`,{className:`graph-side-footer`,children:[!u&&!p&&(0,N.jsxs)(`button`,{type:`button`,className:`graph-side-restore`,onClick:x,children:[(0,N.jsx)(v,{size:14}),` Restore`]}),u&&(0,N.jsx)(`div`,{className:`graph-delete-confirm`,children:(0,N.jsxs)(`p`,{children:[(0,N.jsx)(f,{size:14,className:`spin`}),` Restoring…`]})}),p&&(0,N.jsxs)(`div`,{className:`graph-delete-confirm graph-delete-confirm-error`,children:[(0,N.jsxs)(`p`,{children:[`Restore failed: `,p]}),(0,N.jsxs)(`div`,{className:`graph-delete-confirm-buttons`,children:[(0,N.jsx)(`button`,{type:`button`,className:`graph-delete-confirm-cancel`,onClick:()=>{m(null)},children:`Close`}),(0,N.jsx)(`button`,{type:`button`,className:`graph-delete-confirm-do`,onClick:x,children:`Retry`})]})]})]}),!e.trashed&&(0,N.jsxs)(`footer`,{className:`graph-side-footer`,children:[!h&&!_&&(0,N.jsxs)(`button`,{type:`button`,className:`graph-side-trash`,onClick:S,children:[(0,N.jsx)(n,{size:14}),` Trash`]}),h&&(0,N.jsx)(`div`,{className:`graph-delete-confirm`,children:(0,N.jsxs)(`p`,{children:[(0,N.jsx)(f,{size:14,className:`spin`}),` Trashing…`]})}),_&&(0,N.jsxs)(`div`,{className:`graph-delete-confirm graph-delete-confirm-error`,children:[(0,N.jsxs)(`p`,{children:[`Trash failed: `,_]}),(0,N.jsxs)(`div`,{className:`graph-delete-confirm-buttons`,children:[(0,N.jsx)(`button`,{type:`button`,className:`graph-delete-confirm-cancel`,onClick:()=>{y(null)},children:`Close`}),(0,N.jsx)(`button`,{type:`button`,className:`graph-delete-confirm-do`,onClick:S,children:`Retry`})]})]})]})]})}function Fe(e,t){let n=`/api/admin/graph-subgraph`,r=t.includeAgentActions?`&includeAgentActions=1`:``;if(e.kind===`neighbourhood`){let i=t.search&&t.search.q?`&q=${encodeURIComponent(t.search.q)}&limit=${t.search.limit}`:``;return`${n}?mode=neighbourhood&elementId=${encodeURIComponent(e.rootElementId)}${r}${i}`}return`${n}?mode=default&labels=${encodeURIComponent(e.selectedLabels.join(`,`))}${e.includeTrashed?`&includeTrashed=1`:``}${r}${t.channel&&t.channel.length>0?`&channel=${encodeURIComponent(t.channel.join(`,`))}`:``}${t.messageSublabel&&t.messageSublabel.length>0?`&messageSublabel=${encodeURIComponent(t.messageSublabel.join(`,`))}`:``}`}var Ie=class extends Error{body;constructor(e){super(e.error),this.body=e}};function Le({viewStack:e}){let t=e.map(e=>e.kind===`filter`?`Filter`:e.rootLabel??`Node`);return(0,N.jsx)(`div`,{className:`graph-breadcrumb`,role:`navigation`,"aria-label":`Graph navigation breadcrumb`,children:t.map((e,n)=>(0,N.jsxs)(`span`,{className:`graph-breadcrumb-item`,children:[n>0&&(0,N.jsx)(`span`,{className:`graph-breadcrumb-separator`,"aria-hidden":`true`,children:`›`}),(0,N.jsx)(`span`,{className:`graph-breadcrumb-label${n===t.length-1?` is-current`:``}`,children:e})]},n))})}function Re(e,t){let n=`[graph-page] ${e} ${Object.entries(t).map(([e,t])=>`${e}=${String(t)}`).join(` `)}`;try{fetch(`/api/_client-error`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`graph-nav`,msg:n}),keepalive:!0}).catch(()=>{})}catch{}}function ze(e){let t=t=>{let n=e[t];if(n&&typeof n==`object`&&`low`in n){let e=n.low;return typeof e==`number`?e:null}return null},n=t(`year`),r=t(`month`),i=t(`day`);if(n===null||r===null||i===null)return null;let a=`${String(n).padStart(4,`0`)}-${String(r).padStart(2,`0`)}-${String(i).padStart(2,`0`)}`;if(!(`hour`in e))return a;let o=t(`hour`),s=t(`minute`),c=t(`second`);return o===null||s===null||c===null?a:`${a} ${String(o).padStart(2,`0`)}:${String(s).padStart(2,`0`)}:${String(c).padStart(2,`0`)}`}function Be(e){if(e==null)return``;if(Array.isArray(e))return e.length>8?`[${e.length} items]`:e.map(String).join(`, `);if(typeof e==`object`){if(`year`in e&&`month`in e&&`day`in e&&typeof e.year==`object`){let t=ze(e);if(t)return t}return JSON.stringify(e)}return String(e)}export{_ as a,v as i,je as n,b as r,Ne as t};
|
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
6
|
<title>Graph — Maxy</title>
|
|
7
7
|
<link rel="icon" href="/favicon.ico">
|
|
8
|
-
<script type="module" crossorigin src="/assets/graph-
|
|
8
|
+
<script type="module" crossorigin src="/assets/graph-LLMJa4Ch.js"></script>
|
|
9
9
|
<link rel="modulepreload" crossorigin href="/assets/chunk-DD-I1_y5.js">
|
|
10
10
|
<link rel="modulepreload" crossorigin href="/assets/jsx-runtime-DkaAusaX.js">
|
|
11
11
|
<link rel="modulepreload" crossorigin href="/assets/Checkbox-CTGhpDKq.js">
|
|
12
12
|
<link rel="modulepreload" crossorigin href="/assets/useAdminFetch-DmHu0oCx.js">
|
|
13
|
-
<link rel="modulepreload" crossorigin href="/assets/page-
|
|
13
|
+
<link rel="modulepreload" crossorigin href="/assets/page-DoaF3DB0.js">
|
|
14
14
|
<link rel="stylesheet" crossorigin href="/assets/jsx-runtime-D4WovFYk.css">
|
|
15
15
|
</head>
|
|
16
16
|
<body>
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
6
|
<title>Real Agent</title>
|
|
7
7
|
<link rel="icon" href="/favicon.ico">
|
|
8
|
-
<script type="module" crossorigin src="/assets/admin-
|
|
8
|
+
<script type="module" crossorigin src="/assets/admin-BoGPEBe_.js"></script>
|
|
9
9
|
<link rel="modulepreload" crossorigin href="/assets/chunk-DD-I1_y5.js">
|
|
10
10
|
<link rel="modulepreload" crossorigin href="/assets/jsx-runtime-DkaAusaX.js">
|
|
11
11
|
<link rel="modulepreload" crossorigin href="/assets/preload-helper-qlgyTAkD.js">
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
<link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-CSc_hxjV.js">
|
|
14
14
|
<link rel="modulepreload" crossorigin href="/assets/useAdminFetch-DmHu0oCx.js">
|
|
15
15
|
<link rel="modulepreload" crossorigin href="/assets/page-DkBfWy4C.js">
|
|
16
|
-
<link rel="modulepreload" crossorigin href="/assets/page-
|
|
16
|
+
<link rel="modulepreload" crossorigin href="/assets/page-DoaF3DB0.js">
|
|
17
17
|
<link rel="stylesheet" crossorigin href="/assets/jsx-runtime-D4WovFYk.css">
|
|
18
18
|
<link rel="stylesheet" crossorigin href="/assets/admin-CWMpccrR.css">
|
|
19
19
|
<link rel="stylesheet" href="/brand-defaults.css">
|