@rubytech/create-maxy-code 0.1.360 → 0.1.362

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/plugins/admin/skills/connector-directory/SKILL.md +53 -0
  3. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +18 -1
  4. package/payload/platform/plugins/docs/references/graph.md +17 -0
  5. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
  6. package/payload/platform/services/claude-session-manager/dist/http-server.js +18 -0
  7. package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
  8. package/payload/platform/services/webchat-channel/dist/instructions.d.ts.map +1 -1
  9. package/payload/platform/services/webchat-channel/dist/instructions.js +11 -0
  10. package/payload/platform/services/webchat-channel/dist/instructions.js.map +1 -1
  11. package/payload/server/public/assets/{AdminLoginScreens-FufN0KIm.js → AdminLoginScreens-D6JtrY9a.js} +1 -1
  12. package/payload/server/public/assets/{AdminShell-CmFCbj38.js → AdminShell-CaVRZTmj.js} +1 -1
  13. package/payload/server/public/assets/{Checkbox-njajXf-b.js → Checkbox-BiHO47mz.js} +1 -1
  14. package/payload/server/public/assets/{OperatorConversations-B9Vx84BF.js → OperatorConversations-CzhbxFwN.js} +1 -1
  15. package/payload/server/public/assets/OperatorConversations-D3UBU6SM.css +1 -0
  16. package/payload/server/public/assets/{admin-DYOYaRcc.js → admin-BrCL9qSn.js} +1 -1
  17. package/payload/server/public/assets/{browser-CUwGN38H.js → browser-DNIV6o_p.js} +1 -1
  18. package/payload/server/public/assets/{calendar-HonT_eBL.js → calendar-Arx94jTH.js} +1 -1
  19. package/payload/server/public/assets/chat-BwShkhcz.js +1 -0
  20. package/payload/server/public/assets/{data-vEYM-aPa.js → data-DBInTT-w.js} +1 -1
  21. package/payload/server/public/assets/{graph-labels-tUzvK8mv.js → graph-labels-CVZClzPb.js} +1 -1
  22. package/payload/server/public/assets/{graph-BLUtXXda.js → graph-z-RYpYMZ.js} +15 -15
  23. package/payload/server/public/assets/{operator-BLEBOkrQ.js → operator-CoCf8Lk7.js} +1 -1
  24. package/payload/server/public/assets/{page-CcnJY-yB.js → page-CWnkJCxo.js} +5 -5
  25. package/payload/server/public/assets/{public-B8GW-fZg.js → public-CKMOOQiq.js} +1 -1
  26. package/payload/server/public/assets/{rotate-ccw-BA0MN5YR.js → rotate-ccw-Dgw6hmsm.js} +1 -1
  27. package/payload/server/public/browser.html +4 -4
  28. package/payload/server/public/calendar.html +4 -4
  29. package/payload/server/public/chat.html +6 -6
  30. package/payload/server/public/data.html +4 -4
  31. package/payload/server/public/graph.html +7 -7
  32. package/payload/server/public/index.html +6 -6
  33. package/payload/server/public/operator.html +8 -8
  34. package/payload/server/public/public.html +6 -6
  35. package/payload/server/server.js +106 -0
  36. package/payload/server/public/assets/OperatorConversations-BqudLZH5.css +0 -1
  37. package/payload/server/public/assets/chat-B-sCk0kO.js +0 -1
@@ -1 +1 @@
1
- import{o as e}from"./chunk-CAM3fms7.js";import{H as t,W as n,w as r}from"./OperatorConversations-B9Vx84BF.js";import"./admin-types-DJoj6VJv.js";import{u as i}from"./AdminShell-CmFCbj38.js";import{a,i as o,o as s,r as c}from"./page-CcnJY-yB.js";var l=t(),u=e(n(),1),d=r();function f({gateState:e,setGateState:t,grantInfo:n,resolvedSlugRef:r}){let[a,o]=(0,u.useState)(``),[s,c]=(0,u.useState)(!1),[l,f]=(0,u.useState)(null);async function p(e){e.preventDefault();let n=a.trim().toLowerCase();if(!n){f(`Enter the email you were invited on.`);return}c(!0),f(null);try{let e=await fetch(`/api/access/request-magic-link`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({contactValue:n,agentSlug:r.current})});if(e.status===429){f((await e.json().catch(()=>({})))?.error||`Too many requests. Try again later.`);return}t(`request-sent`)}catch{f(`Could not reach the server. Check your connection and try again.`)}finally{c(!1)}}return(0,d.jsxs)(`div`,{className:`access-gate`,children:[e===`verifying`&&(0,d.jsxs)(`div`,{className:`access-gate-message`,children:[(0,d.jsx)(`h2`,{children:`Verifying your link…`}),(0,d.jsx)(`p`,{children:`This takes a moment.`})]}),e===`verify-failed`&&(0,d.jsxs)(`div`,{className:`access-gate-message`,children:[(0,d.jsx)(`h2`,{children:`That link did not work`}),(0,d.jsx)(`p`,{children:`It may have expired, already been used, or been for a different agent. You can request a fresh one below.`}),(0,d.jsx)(i,{onClick:()=>{t(`request-link`),f(null)},children:`Request a new link`})]}),e===`request-link`&&(0,d.jsxs)(`form`,{className:`access-gate-form`,onSubmit:p,children:[(0,d.jsx)(`h2`,{children:n?.displayName?`Welcome back, ${n.displayName}`:`Sign in`}),(0,d.jsx)(`p`,{children:`Enter the email you were invited on and we will send you a fresh link.`}),(0,d.jsx)(`label`,{htmlFor:`access-email`,children:`Email`}),(0,d.jsx)(`input`,{id:`access-email`,type:`email`,inputMode:`email`,autoComplete:`email`,value:a,onChange:e=>o(e.target.value),disabled:s}),l&&(0,d.jsx)(`p`,{className:`access-gate-error`,children:l}),(0,d.jsx)(i,{type:`submit`,disabled:s||!a.trim(),children:s?`Sending…`:`Send me a link`})]}),e===`request-sent`&&(0,d.jsxs)(`div`,{className:`access-gate-message`,children:[(0,d.jsx)(`h2`,{children:`Check your email`}),(0,d.jsx)(`p`,{children:`If that address is on the invite list, a fresh link is on the way. It expires in 15 minutes.`}),(0,d.jsx)(i,{onClick:()=>{t(`request-link`),o(``),f(null)},children:`Try a different email`})]})]})}function p(){let[e,t]=(0,u.useState)(null),[n,r]=(0,u.useState)(null),[i,c]=(0,u.useState)(`loading`),[l,d]=(0,u.useState)(``),[f,p]=(0,u.useState)(null),[m,h]=(0,u.useState)(null),[g,_]=(0,u.useState)(!1),[v,y]=(0,u.useState)(null),b=(0,u.useMemo)(()=>o(),[]),x=(0,u.useRef)(b||``),S=(0,u.useRef)(null),C=(0,u.useRef)(null),w=(0,u.useRef)(!1),T=(0,u.useRef)(null),[E,D]=(0,u.useState)(`request-link`),[O,k]=(0,u.useState)(null),A=(0,u.useRef)(null),j=(0,u.useRef)(null);(0,u.useEffect)(()=>{try{let e=sessionStorage.getItem(`maxy_session`);e&&(j.current=e)}catch{}},[]);let M=(0,u.useCallback)(e=>{S.current=e,t(e);try{sessionStorage.setItem(`maxy_session`,e)}catch{}c(`chat`)},[]),N=(0,u.useCallback)(()=>{S.current=null;try{sessionStorage.removeItem(`maxy_session`)}catch{}t(null),c(`auth-required`),D(`request-link`)},[]),P=(0,u.useCallback)(async e=>{D(`verifying`);try{let t=x.current,n=await fetch(`/api/access/verify-token`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({token:e,agentSlug:t})});if(window.history.replaceState({},``,window.location.pathname),n.ok){let e=await n.json().catch(()=>({}));return e?.displayName&&k({displayName:e.displayName,contactValue:``,expiresAt:null,status:`active`}),!0}return D(`verify-failed`),!1}catch{return D(`verify-failed`),!1}},[]),F=(0,u.useCallback)(async()=>{if(S.current)return S.current;if(C.current)return C.current;let e=(async()=>{try{let e=j.current,n=await fetch(`/api/session`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({session_id:a(),...b?{agent:b}:{},...e?{session_key:e}:{}})});if(!n.ok){let e=await n.json().catch(()=>({error:``}));return s&&console.error(`[session] POST /api/session failed: ${n.status} ${n.statusText}`,e),n.status===404?r(e.error||`Agent not found`):n.status===503&&r(e.error||`Service unavailable`),null}let i=await n.json();if(i.auth_required){i.agent_id&&(x.current=i.agent_id),d(i.displayName||``),i.agentImage&&p(i.agentImage),i.agentImageShape&&h(i.agentImageShape),i.showAgentName&&_(i.showAgentName),i.branding&&y(i.branding),c(`auth-required`);let e=new URLSearchParams(window.location.search).get(`token`);return e?await P(e)&&window.location.reload():D(`request-link`),null}S.current=i.session_key,t(i.session_key),i.displayName&&d(i.displayName),i.agentImage&&p(i.agentImage),i.agentImageShape&&h(i.agentImageShape),i.showAgentName&&_(i.showAgentName),i.branding&&y(i.branding),c(`chat`),i.resumed&&i.messages&&(w.current=!0,T.current=i.messages);try{sessionStorage.setItem(`maxy_session`,i.session_key)}catch{}return i.session_key}catch(e){return s&&console.error(`[session] fetch /api/session threw:`,e),r(`Unable to connect. Please check your connection and try again.`),null}finally{C.current=null}})();return C.current=e,e},[b,P]);return{sessionId:e,cacheKeyRef:S,sessionError:n,pageState:i,setPageState:c,agentDisplayName:l,agentImage:f,agentImageShape:m,showAgentName:g,agentSlug:b,branding:v,resolvedSlugRef:x,ensureSession:F,startNewSession:(0,u.useCallback)(async()=>{S.current=null,C.current=null,j.current=null,w.current=!1,T.current=null,t(null),r(null);try{sessionStorage.removeItem(`maxy_session`)}catch{}await F()},[F]),enterChat:M,enterGate:N,resumedRef:w,resumeMessagesRef:T,gateState:E,setGateState:D,grantInfo:O,setGrantInfo:k,gateCacheKeyRef:A}}function m(){let{ensureSession:e,pageState:t,gateState:n,setGateState:r,grantInfo:i,resolvedSlugRef:a}=p();return(0,u.useEffect)(()=>{e()},[e]),t===`loading`?(0,d.jsx)(`div`,{className:`public-loading`,children:`Loading…`}):t===`auth-required`?(0,d.jsx)(f,{gateState:n,setGateState:r,grantInfo:i,resolvedSlugRef:a}):(0,d.jsx)(`div`,{className:`public-shell`,children:(0,d.jsx)(c,{cacheKey:``,variant:`public`})})}(0,l.createRoot)(document.getElementById(`root`)).render((0,d.jsx)(m,{}));
1
+ import{o as e}from"./chunk-CAM3fms7.js";import{H as t,W as n,w as r}from"./OperatorConversations-CzhbxFwN.js";import"./admin-types-DJoj6VJv.js";import{u as i}from"./AdminShell-CaVRZTmj.js";import{a,i as o,o as s,r as c}from"./page-CWnkJCxo.js";var l=t(),u=e(n(),1),d=r();function f({gateState:e,setGateState:t,grantInfo:n,resolvedSlugRef:r}){let[a,o]=(0,u.useState)(``),[s,c]=(0,u.useState)(!1),[l,f]=(0,u.useState)(null);async function p(e){e.preventDefault();let n=a.trim().toLowerCase();if(!n){f(`Enter the email you were invited on.`);return}c(!0),f(null);try{let e=await fetch(`/api/access/request-magic-link`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({contactValue:n,agentSlug:r.current})});if(e.status===429){f((await e.json().catch(()=>({})))?.error||`Too many requests. Try again later.`);return}t(`request-sent`)}catch{f(`Could not reach the server. Check your connection and try again.`)}finally{c(!1)}}return(0,d.jsxs)(`div`,{className:`access-gate`,children:[e===`verifying`&&(0,d.jsxs)(`div`,{className:`access-gate-message`,children:[(0,d.jsx)(`h2`,{children:`Verifying your link…`}),(0,d.jsx)(`p`,{children:`This takes a moment.`})]}),e===`verify-failed`&&(0,d.jsxs)(`div`,{className:`access-gate-message`,children:[(0,d.jsx)(`h2`,{children:`That link did not work`}),(0,d.jsx)(`p`,{children:`It may have expired, already been used, or been for a different agent. You can request a fresh one below.`}),(0,d.jsx)(i,{onClick:()=>{t(`request-link`),f(null)},children:`Request a new link`})]}),e===`request-link`&&(0,d.jsxs)(`form`,{className:`access-gate-form`,onSubmit:p,children:[(0,d.jsx)(`h2`,{children:n?.displayName?`Welcome back, ${n.displayName}`:`Sign in`}),(0,d.jsx)(`p`,{children:`Enter the email you were invited on and we will send you a fresh link.`}),(0,d.jsx)(`label`,{htmlFor:`access-email`,children:`Email`}),(0,d.jsx)(`input`,{id:`access-email`,type:`email`,inputMode:`email`,autoComplete:`email`,value:a,onChange:e=>o(e.target.value),disabled:s}),l&&(0,d.jsx)(`p`,{className:`access-gate-error`,children:l}),(0,d.jsx)(i,{type:`submit`,disabled:s||!a.trim(),children:s?`Sending…`:`Send me a link`})]}),e===`request-sent`&&(0,d.jsxs)(`div`,{className:`access-gate-message`,children:[(0,d.jsx)(`h2`,{children:`Check your email`}),(0,d.jsx)(`p`,{children:`If that address is on the invite list, a fresh link is on the way. It expires in 15 minutes.`}),(0,d.jsx)(i,{onClick:()=>{t(`request-link`),o(``),f(null)},children:`Try a different email`})]})]})}function p(){let[e,t]=(0,u.useState)(null),[n,r]=(0,u.useState)(null),[i,c]=(0,u.useState)(`loading`),[l,d]=(0,u.useState)(``),[f,p]=(0,u.useState)(null),[m,h]=(0,u.useState)(null),[g,_]=(0,u.useState)(!1),[v,y]=(0,u.useState)(null),b=(0,u.useMemo)(()=>o(),[]),x=(0,u.useRef)(b||``),S=(0,u.useRef)(null),C=(0,u.useRef)(null),w=(0,u.useRef)(!1),T=(0,u.useRef)(null),[E,D]=(0,u.useState)(`request-link`),[O,k]=(0,u.useState)(null),A=(0,u.useRef)(null),j=(0,u.useRef)(null);(0,u.useEffect)(()=>{try{let e=sessionStorage.getItem(`maxy_session`);e&&(j.current=e)}catch{}},[]);let M=(0,u.useCallback)(e=>{S.current=e,t(e);try{sessionStorage.setItem(`maxy_session`,e)}catch{}c(`chat`)},[]),N=(0,u.useCallback)(()=>{S.current=null;try{sessionStorage.removeItem(`maxy_session`)}catch{}t(null),c(`auth-required`),D(`request-link`)},[]),P=(0,u.useCallback)(async e=>{D(`verifying`);try{let t=x.current,n=await fetch(`/api/access/verify-token`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({token:e,agentSlug:t})});if(window.history.replaceState({},``,window.location.pathname),n.ok){let e=await n.json().catch(()=>({}));return e?.displayName&&k({displayName:e.displayName,contactValue:``,expiresAt:null,status:`active`}),!0}return D(`verify-failed`),!1}catch{return D(`verify-failed`),!1}},[]),F=(0,u.useCallback)(async()=>{if(S.current)return S.current;if(C.current)return C.current;let e=(async()=>{try{let e=j.current,n=await fetch(`/api/session`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({session_id:a(),...b?{agent:b}:{},...e?{session_key:e}:{}})});if(!n.ok){let e=await n.json().catch(()=>({error:``}));return s&&console.error(`[session] POST /api/session failed: ${n.status} ${n.statusText}`,e),n.status===404?r(e.error||`Agent not found`):n.status===503&&r(e.error||`Service unavailable`),null}let i=await n.json();if(i.auth_required){i.agent_id&&(x.current=i.agent_id),d(i.displayName||``),i.agentImage&&p(i.agentImage),i.agentImageShape&&h(i.agentImageShape),i.showAgentName&&_(i.showAgentName),i.branding&&y(i.branding),c(`auth-required`);let e=new URLSearchParams(window.location.search).get(`token`);return e?await P(e)&&window.location.reload():D(`request-link`),null}S.current=i.session_key,t(i.session_key),i.displayName&&d(i.displayName),i.agentImage&&p(i.agentImage),i.agentImageShape&&h(i.agentImageShape),i.showAgentName&&_(i.showAgentName),i.branding&&y(i.branding),c(`chat`),i.resumed&&i.messages&&(w.current=!0,T.current=i.messages);try{sessionStorage.setItem(`maxy_session`,i.session_key)}catch{}return i.session_key}catch(e){return s&&console.error(`[session] fetch /api/session threw:`,e),r(`Unable to connect. Please check your connection and try again.`),null}finally{C.current=null}})();return C.current=e,e},[b,P]);return{sessionId:e,cacheKeyRef:S,sessionError:n,pageState:i,setPageState:c,agentDisplayName:l,agentImage:f,agentImageShape:m,showAgentName:g,agentSlug:b,branding:v,resolvedSlugRef:x,ensureSession:F,startNewSession:(0,u.useCallback)(async()=>{S.current=null,C.current=null,j.current=null,w.current=!1,T.current=null,t(null),r(null);try{sessionStorage.removeItem(`maxy_session`)}catch{}await F()},[F]),enterChat:M,enterGate:N,resumedRef:w,resumeMessagesRef:T,gateState:E,setGateState:D,grantInfo:O,setGrantInfo:k,gateCacheKeyRef:A}}function m(){let{ensureSession:e,pageState:t,gateState:n,setGateState:r,grantInfo:i,resolvedSlugRef:a}=p();return(0,u.useEffect)(()=>{e()},[e]),t===`loading`?(0,d.jsx)(`div`,{className:`public-loading`,children:`Loading…`}):t===`auth-required`?(0,d.jsx)(f,{gateState:n,setGateState:r,grantInfo:i,resolvedSlugRef:a}):(0,d.jsx)(`div`,{className:`public-shell`,children:(0,d.jsx)(c,{cacheKey:``,variant:`public`})})}(0,l.createRoot)(document.getElementById(`root`)).render((0,d.jsx)(m,{}));
@@ -1 +1 @@
1
- import{z as e}from"./OperatorConversations-B9Vx84BF.js";var t=e(`rotate-ccw`,[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}]]);export{t};
1
+ import{z as e}from"./OperatorConversations-CzhbxFwN.js";var t=e(`rotate-ccw`,[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}]]);export{t};
@@ -5,11 +5,11 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Browser — Maxy</title>
7
7
  <link rel="icon" href="/favicon.ico">
8
- <script type="module" crossorigin src="/assets/browser-CUwGN38H.js"></script>
8
+ <script type="module" crossorigin src="/assets/browser-DNIV6o_p.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CAM3fms7.js">
10
- <link rel="modulepreload" crossorigin href="/assets/OperatorConversations-B9Vx84BF.js">
11
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-CmFCbj38.js">
12
- <link rel="stylesheet" crossorigin href="/assets/OperatorConversations-BqudLZH5.css">
10
+ <link rel="modulepreload" crossorigin href="/assets/OperatorConversations-CzhbxFwN.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-CaVRZTmj.js">
12
+ <link rel="stylesheet" crossorigin href="/assets/OperatorConversations-D3UBU6SM.css">
13
13
  </head>
14
14
  <body>
15
15
  <div id="root"></div>
@@ -5,11 +5,11 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Calendar — Maxy</title>
7
7
  <link rel="icon" href="/favicon.ico">
8
- <script type="module" crossorigin src="/assets/calendar-HonT_eBL.js"></script>
8
+ <script type="module" crossorigin src="/assets/calendar-Arx94jTH.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CAM3fms7.js">
10
- <link rel="modulepreload" crossorigin href="/assets/OperatorConversations-B9Vx84BF.js">
11
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-CmFCbj38.js">
12
- <link rel="stylesheet" crossorigin href="/assets/OperatorConversations-BqudLZH5.css">
10
+ <link rel="modulepreload" crossorigin href="/assets/OperatorConversations-CzhbxFwN.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-CaVRZTmj.js">
12
+ <link rel="stylesheet" crossorigin href="/assets/OperatorConversations-D3UBU6SM.css">
13
13
  </head>
14
14
  <body>
15
15
  <div id="root"></div>
@@ -5,15 +5,15 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Chat — Maxy</title>
7
7
  <link rel="icon" href="/favicon.ico">
8
- <script type="module" crossorigin src="/assets/chat-B-sCk0kO.js"></script>
8
+ <script type="module" crossorigin src="/assets/chat-BwShkhcz.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CAM3fms7.js">
10
- <link rel="modulepreload" crossorigin href="/assets/OperatorConversations-B9Vx84BF.js">
11
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-CmFCbj38.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/OperatorConversations-CzhbxFwN.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-CaVRZTmj.js">
12
12
  <link rel="modulepreload" crossorigin href="/assets/admin-types-DJoj6VJv.js">
13
13
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-CQ36nxok.js">
14
- <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-BA0MN5YR.js">
15
- <link rel="modulepreload" crossorigin href="/assets/page-CcnJY-yB.js">
16
- <link rel="stylesheet" crossorigin href="/assets/OperatorConversations-BqudLZH5.css">
14
+ <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-Dgw6hmsm.js">
15
+ <link rel="modulepreload" crossorigin href="/assets/page-CWnkJCxo.js">
16
+ <link rel="stylesheet" crossorigin href="/assets/OperatorConversations-D3UBU6SM.css">
17
17
  </head>
18
18
  <body>
19
19
  <div id="root"></div>
@@ -5,11 +5,11 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Data — Maxy</title>
7
7
  <link rel="icon" href="/favicon.ico">
8
- <script type="module" crossorigin src="/assets/data-vEYM-aPa.js"></script>
8
+ <script type="module" crossorigin src="/assets/data-DBInTT-w.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CAM3fms7.js">
10
- <link rel="modulepreload" crossorigin href="/assets/OperatorConversations-B9Vx84BF.js">
11
- <link rel="modulepreload" crossorigin href="/assets/graph-labels-tUzvK8mv.js">
12
- <link rel="stylesheet" crossorigin href="/assets/OperatorConversations-BqudLZH5.css">
10
+ <link rel="modulepreload" crossorigin href="/assets/OperatorConversations-CzhbxFwN.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/graph-labels-CVZClzPb.js">
12
+ <link rel="stylesheet" crossorigin href="/assets/OperatorConversations-D3UBU6SM.css">
13
13
  </head>
14
14
  <body>
15
15
  <div id="root"></div>
@@ -5,14 +5,14 @@
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-BLUtXXda.js"></script>
8
+ <script type="module" crossorigin src="/assets/graph-z-RYpYMZ.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CAM3fms7.js">
10
- <link rel="modulepreload" crossorigin href="/assets/OperatorConversations-B9Vx84BF.js">
11
- <link rel="modulepreload" crossorigin href="/assets/graph-labels-tUzvK8mv.js">
12
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-CmFCbj38.js">
13
- <link rel="modulepreload" crossorigin href="/assets/Checkbox-njajXf-b.js">
14
- <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-BA0MN5YR.js">
15
- <link rel="stylesheet" crossorigin href="/assets/OperatorConversations-BqudLZH5.css">
10
+ <link rel="modulepreload" crossorigin href="/assets/OperatorConversations-CzhbxFwN.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/graph-labels-CVZClzPb.js">
12
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-CaVRZTmj.js">
13
+ <link rel="modulepreload" crossorigin href="/assets/Checkbox-BiHO47mz.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-Dgw6hmsm.js">
15
+ <link rel="stylesheet" crossorigin href="/assets/OperatorConversations-D3UBU6SM.css">
16
16
  </head>
17
17
  <body>
18
18
  <div id="root"></div>
@@ -5,14 +5,14 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Maxy</title>
7
7
  <link rel="icon" href="/favicon.ico">
8
- <script type="module" crossorigin src="/assets/admin-DYOYaRcc.js"></script>
8
+ <script type="module" crossorigin src="/assets/admin-BrCL9qSn.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CAM3fms7.js">
10
- <link rel="modulepreload" crossorigin href="/assets/OperatorConversations-B9Vx84BF.js">
11
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-CmFCbj38.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/OperatorConversations-CzhbxFwN.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-CaVRZTmj.js">
12
12
  <link rel="modulepreload" crossorigin href="/assets/admin-types-DJoj6VJv.js">
13
- <link rel="modulepreload" crossorigin href="/assets/Checkbox-njajXf-b.js">
14
- <link rel="modulepreload" crossorigin href="/assets/AdminLoginScreens-FufN0KIm.js">
15
- <link rel="stylesheet" crossorigin href="/assets/OperatorConversations-BqudLZH5.css">
13
+ <link rel="modulepreload" crossorigin href="/assets/Checkbox-BiHO47mz.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/AdminLoginScreens-D6JtrY9a.js">
15
+ <link rel="stylesheet" crossorigin href="/assets/OperatorConversations-D3UBU6SM.css">
16
16
  <link rel="stylesheet" crossorigin href="/assets/AdminLoginScreens-CWMpccrR.css">
17
17
  <link rel="stylesheet" href="/brand-defaults.css">
18
18
  </head>
@@ -5,17 +5,17 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Operator — Maxy</title>
7
7
  <link rel="icon" href="/favicon.ico">
8
- <script type="module" crossorigin src="/assets/operator-BLEBOkrQ.js"></script>
8
+ <script type="module" crossorigin src="/assets/operator-CoCf8Lk7.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CAM3fms7.js">
10
- <link rel="modulepreload" crossorigin href="/assets/OperatorConversations-B9Vx84BF.js">
11
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-CmFCbj38.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/OperatorConversations-CzhbxFwN.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-CaVRZTmj.js">
12
12
  <link rel="modulepreload" crossorigin href="/assets/admin-types-DJoj6VJv.js">
13
- <link rel="modulepreload" crossorigin href="/assets/Checkbox-njajXf-b.js">
14
- <link rel="modulepreload" crossorigin href="/assets/AdminLoginScreens-FufN0KIm.js">
13
+ <link rel="modulepreload" crossorigin href="/assets/Checkbox-BiHO47mz.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/AdminLoginScreens-D6JtrY9a.js">
15
15
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-CQ36nxok.js">
16
- <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-BA0MN5YR.js">
17
- <link rel="modulepreload" crossorigin href="/assets/page-CcnJY-yB.js">
18
- <link rel="stylesheet" crossorigin href="/assets/OperatorConversations-BqudLZH5.css">
16
+ <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-Dgw6hmsm.js">
17
+ <link rel="modulepreload" crossorigin href="/assets/page-CWnkJCxo.js">
18
+ <link rel="stylesheet" crossorigin href="/assets/OperatorConversations-D3UBU6SM.css">
19
19
  <link rel="stylesheet" crossorigin href="/assets/AdminLoginScreens-CWMpccrR.css">
20
20
  </head>
21
21
  <body>
@@ -5,15 +5,15 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Maxy</title>
7
7
  <link rel="icon" href="/favicon.ico">
8
- <script type="module" crossorigin src="/assets/public-B8GW-fZg.js"></script>
8
+ <script type="module" crossorigin src="/assets/public-CKMOOQiq.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CAM3fms7.js">
10
- <link rel="modulepreload" crossorigin href="/assets/OperatorConversations-B9Vx84BF.js">
11
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-CmFCbj38.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/OperatorConversations-CzhbxFwN.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-CaVRZTmj.js">
12
12
  <link rel="modulepreload" crossorigin href="/assets/admin-types-DJoj6VJv.js">
13
13
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-CQ36nxok.js">
14
- <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-BA0MN5YR.js">
15
- <link rel="modulepreload" crossorigin href="/assets/page-CcnJY-yB.js">
16
- <link rel="stylesheet" crossorigin href="/assets/OperatorConversations-BqudLZH5.css">
14
+ <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-Dgw6hmsm.js">
15
+ <link rel="modulepreload" crossorigin href="/assets/page-CWnkJCxo.js">
16
+ <link rel="stylesheet" crossorigin href="/assets/OperatorConversations-D3UBU6SM.css">
17
17
  <link rel="stylesheet" href="/brand-defaults.css">
18
18
  </head>
19
19
  <body class="public-surface">
@@ -14646,6 +14646,7 @@ function isHiddenByDefault(label) {
14646
14646
 
14647
14647
  // server/routes/admin/graph-subgraph.ts
14648
14648
  var CEILING = 2e3;
14649
+ var TOP_LEVEL_LIMIT = 1e3;
14649
14650
  var STRIPPED_PROPERTIES = /* @__PURE__ */ new Set([
14650
14651
  "embedding",
14651
14652
  "passwordHash",
@@ -14679,6 +14680,9 @@ async function handleDefault(c, accountId) {
14679
14680
  const labels = rawLabels.split(",").map((s) => s.trim()).filter(Boolean);
14680
14681
  const includeTrashed = c.req.query("includeTrashed") === "1";
14681
14682
  const includeAgentActions = c.req.query("includeAgentActions") === "1";
14683
+ if (c.req.query("topLevel") === "1") {
14684
+ return handleDefaultTopLevel(c, accountId, { includeTrashed, includeAgentActions });
14685
+ }
14682
14686
  const agentActionLabels = includeAgentActions ? [] : [...AGENT_ACTION_LABELS];
14683
14687
  const rawChannel = c.req.query("channel") ?? "";
14684
14688
  const channel = rawChannel.split(",").map((s) => s.trim()).filter(Boolean);
@@ -14765,6 +14769,61 @@ async function handleDefault(c, accountId) {
14765
14769
  }
14766
14770
  }
14767
14771
  }
14772
+ async function handleDefaultTopLevel(c, accountId, flags) {
14773
+ const { includeTrashed, includeAgentActions } = flags;
14774
+ const labels = [...FILTER_TOP_LEVEL_LABELS].filter((l) => !HIDDEN_BY_DEFAULT_LABELS.has(l));
14775
+ const agentActionLabels = [...AGENT_ACTION_LABELS];
14776
+ const started = Date.now();
14777
+ const session = getSession();
14778
+ try {
14779
+ const countCypher = includeTrashed ? DEFAULT_COUNT_CYPHER_INCLUDE_TRASHED : DEFAULT_COUNT_CYPHER;
14780
+ const fetchCypher = includeTrashed ? TOP_LEVEL_FETCH_CYPHER_INCLUDE_TRASHED : TOP_LEVEL_FETCH_CYPHER;
14781
+ const cypherParams = {
14782
+ accountId,
14783
+ labels,
14784
+ agentActionLabels,
14785
+ channel: [],
14786
+ messageSublabel: [],
14787
+ topLevelLimit: neo4j2.int(TOP_LEVEL_LIMIT)
14788
+ };
14789
+ const result = await session.executeRead(async (tx) => {
14790
+ const countResult = await tx.run(countCypher, cypherParams);
14791
+ const matchedRaw = countResult.records[0]?.get("matched");
14792
+ const total = typeof matchedRaw === "bigint" ? Number(matchedRaw) : Number(matchedRaw ?? 0);
14793
+ const fetchResult = await tx.run(fetchCypher, cypherParams);
14794
+ const record = fetchResult.records[0];
14795
+ const rawNodes = record?.get("nodes") ?? [];
14796
+ const rawEdges = record?.get("edges") ?? [];
14797
+ return { total, rawNodes, rawEdges };
14798
+ });
14799
+ const elapsed = Date.now() - started;
14800
+ const warnedClasses = /* @__PURE__ */ new Set();
14801
+ const conversationWarnings = { loggedMissingMessageCount: false };
14802
+ const nodes = result.rawNodes.map((n) => pruneNode(n, warnedClasses, conversationWarnings));
14803
+ const edges = result.rawEdges.filter((e) => e && e.id != null).map((e) => pruneEdge(e, warnedClasses));
14804
+ const rendered = nodes.length;
14805
+ const truncated = result.total > rendered;
14806
+ if (result.total < rendered) {
14807
+ console.error(
14808
+ `[graph-page] default-view INVARIANT total<rendered account=${accountId} rendered=${rendered} total=${result.total}`
14809
+ );
14810
+ }
14811
+ console.error(
14812
+ `[graph-page] default-view account=${accountId} rendered=${rendered} total=${result.total} truncated=${truncated} agentActions=${includeAgentActions} trashed=${includeTrashed} ms=${elapsed}`
14813
+ );
14814
+ return c.json({ nodes, edges, total: result.total, truncated });
14815
+ } catch (err) {
14816
+ const elapsed = Date.now() - started;
14817
+ const message = err instanceof Error ? err.message : String(err);
14818
+ console.error(`[graph-page] error stage=fetch-top-level reason="${message}" ms=${elapsed}`);
14819
+ return c.json({ error: `Graph data unavailable: ${message}` }, 503);
14820
+ } finally {
14821
+ try {
14822
+ await session.close();
14823
+ } catch {
14824
+ }
14825
+ }
14826
+ }
14768
14827
  var NEIGHBOURHOOD_SEARCH_DEFAULT_LIMIT = 100;
14769
14828
  var NEIGHBOURHOOD_SEARCH_MAX_LIMIT = 2e3;
14770
14829
  var NEIGHBOURHOOD_LIMIT = 2e3;
@@ -14969,6 +15028,53 @@ var DEFAULT_FETCH_CYPHER_INCLUDE_TRASHED = `
14969
15028
  [x IN nodes | {id: elementId(x), labels: labels(x), properties: ${CONVERSATION_PROPS_PROJECTION}}] AS nodes,
14970
15029
  [e IN rawEdges WHERE e IS NOT NULL] AS edges
14971
15030
  `;
15031
+ var TOP_LEVEL_FETCH_CYPHER = `
15032
+ MATCH (n)
15033
+ WHERE n.accountId = $accountId
15034
+ AND any(lbl IN labels(n) WHERE lbl IN $labels)
15035
+ AND NOT any(lbl IN labels(n) WHERE lbl IN $agentActionLabels)
15036
+ AND NOT n:Trashed
15037
+ AND n.deletedAt IS NULL
15038
+ WITH n LIMIT $topLevelLimit
15039
+ WITH collect(n) AS nodes, collect(elementId(n)) AS nodeIds
15040
+ UNWIND nodes AS n
15041
+ OPTIONAL MATCH (n)-[r]-(m)
15042
+ WHERE elementId(m) IN nodeIds
15043
+ WITH nodes,
15044
+ collect(DISTINCT CASE WHEN r IS NULL THEN null ELSE {
15045
+ id: elementId(r),
15046
+ from: elementId(startNode(r)),
15047
+ to: elementId(endNode(r)),
15048
+ type: type(r),
15049
+ properties: properties(r)
15050
+ } END) AS rawEdges
15051
+ RETURN
15052
+ [x IN nodes | {id: elementId(x), labels: labels(x), properties: ${CONVERSATION_PROPS_PROJECTION}}] AS nodes,
15053
+ [e IN rawEdges WHERE e IS NOT NULL] AS edges
15054
+ `;
15055
+ var TOP_LEVEL_FETCH_CYPHER_INCLUDE_TRASHED = `
15056
+ MATCH (n)
15057
+ WHERE n.accountId = $accountId
15058
+ AND any(lbl IN labels(n) WHERE lbl IN $labels)
15059
+ AND NOT any(lbl IN labels(n) WHERE lbl IN $agentActionLabels)
15060
+ AND n.deletedAt IS NULL
15061
+ WITH n LIMIT $topLevelLimit
15062
+ WITH collect(n) AS nodes, collect(elementId(n)) AS nodeIds
15063
+ UNWIND nodes AS n
15064
+ OPTIONAL MATCH (n)-[r]-(m)
15065
+ WHERE elementId(m) IN nodeIds
15066
+ WITH nodes,
15067
+ collect(DISTINCT CASE WHEN r IS NULL THEN null ELSE {
15068
+ id: elementId(r),
15069
+ from: elementId(startNode(r)),
15070
+ to: elementId(endNode(r)),
15071
+ type: type(r),
15072
+ properties: properties(r)
15073
+ } END) AS rawEdges
15074
+ RETURN
15075
+ [x IN nodes | {id: elementId(x), labels: labels(x), properties: ${CONVERSATION_PROPS_PROJECTION}}] AS nodes,
15076
+ [e IN rawEdges WHERE e IS NOT NULL] AS edges
15077
+ `;
14972
15078
  var NEIGHBOURHOOD_CYPHER = `
14973
15079
  MATCH (n)
14974
15080
  WHERE elementId(n) = $elementId