@rubytech/create-maxy-code 0.1.366 → 0.1.367
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/mcp/dist/content-producer-authoring-skills.d.ts.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/content-producer-authoring-skills.js +5 -4
- package/payload/platform/plugins/admin/mcp/dist/content-producer-authoring-skills.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-write-path-task802.test.js +62 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-write-path-task802.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-loader.d.ts +22 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-loader.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-loader.js +5 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-loader.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-validator.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-validator.js +16 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-validator.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/stuck-turn.d.ts +5 -7
- package/payload/platform/services/claude-session-manager/dist/stuck-turn.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/stuck-turn.js +48 -32
- package/payload/platform/services/claude-session-manager/dist/stuck-turn.js.map +1 -1
- package/payload/platform/templates/agents/admin/IDENTITY.md +1 -1
- package/payload/premium-plugins/venture-studio/skills/investor-data-room/SKILL.md +73 -27
- package/payload/premium-plugins/writer-craft/PLUGIN.md +1 -1
- package/payload/premium-plugins/writer-craft/skills/voice-mirror/SKILL.md +2 -2
- package/payload/server/public/assets/{AdminLoginScreens-CDygow-0.js → AdminLoginScreens-B45MFjWG.js} +1 -1
- package/payload/server/public/assets/{AdminShell-BLZcGlev.js → AdminShell-CyZPfbzd.js} +1 -1
- package/payload/server/public/assets/{Checkbox-Do2GA1u4.js → Checkbox-BPYEJJPq.js} +1 -1
- package/payload/server/public/assets/OperatorConversations-Civ7TETM.css +1 -0
- package/payload/server/public/assets/{admin-CbWQcPL8.js → admin-DcuJ3_xm.js} +1 -1
- package/payload/server/public/assets/{browser-B0xLdNFF.js → browser-Be9LRtM2.js} +1 -1
- package/payload/server/public/assets/{calendar-mMg5VWd7.js → calendar-BeofvK7c.js} +1 -1
- package/payload/server/public/assets/chat-BWNFeIjw.js +1 -0
- package/payload/server/public/assets/{data-6qqDzoDY.js → data-lTmU53k6.js} +1 -1
- package/payload/server/public/assets/{graph-DWk0KW9T.js → graph-XYK2qT5D.js} +3 -3
- package/payload/server/public/assets/{graph-labels-ZGGfPS26.js → graph-labels-DNCXtQVn.js} +1 -1
- package/payload/server/public/assets/{operator-BxVL6eVL.js → operator-B3hpbhNo.js} +1 -1
- package/payload/server/public/assets/{page-Bm85-8yI.js → page-DFOoEKVK.js} +3 -3
- package/payload/server/public/assets/{public-B6NzFgcN.js → public-Bd_0QBGJ.js} +1 -1
- package/payload/server/public/assets/{rotate-ccw-cFVc5kyj.js → rotate-ccw-BxD1B_G-.js} +1 -1
- package/payload/server/public/browser.html +4 -4
- package/payload/server/public/calendar.html +4 -4
- package/payload/server/public/chat.html +6 -6
- package/payload/server/public/data.html +4 -4
- package/payload/server/public/graph.html +7 -7
- package/payload/server/public/index.html +6 -6
- package/payload/server/public/operator.html +8 -8
- package/payload/server/public/public.html +6 -6
- package/payload/server/server.js +50 -42
- package/payload/server/public/assets/OperatorConversations-CGwMH7na.css +0 -1
- package/payload/server/public/assets/chat-CUQgxmCr.js +0 -1
- /package/payload/server/public/assets/{OperatorConversations-JZG5tFTr.js → OperatorConversations-D_o_59Oc.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e}from"./chunk-CAM3fms7.js";import{H as t,W as n,w as r}from"./OperatorConversations-
|
|
1
|
+
import{o as e}from"./chunk-CAM3fms7.js";import{H as t,W as n,w as r}from"./OperatorConversations-D_o_59Oc.js";import"./admin-types-DJoj6VJv.js";import{u as i}from"./AdminShell-CyZPfbzd.js";import{a,i as o,o as s,r as c}from"./page-DFOoEKVK.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-
|
|
1
|
+
import{z as e}from"./OperatorConversations-D_o_59Oc.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-
|
|
8
|
+
<script type="module" crossorigin src="/assets/browser-Be9LRtM2.js"></script>
|
|
9
9
|
<link rel="modulepreload" crossorigin href="/assets/chunk-CAM3fms7.js">
|
|
10
|
-
<link rel="modulepreload" crossorigin href="/assets/OperatorConversations-
|
|
11
|
-
<link rel="modulepreload" crossorigin href="/assets/AdminShell-
|
|
12
|
-
<link rel="stylesheet" crossorigin href="/assets/OperatorConversations-
|
|
10
|
+
<link rel="modulepreload" crossorigin href="/assets/OperatorConversations-D_o_59Oc.js">
|
|
11
|
+
<link rel="modulepreload" crossorigin href="/assets/AdminShell-CyZPfbzd.js">
|
|
12
|
+
<link rel="stylesheet" crossorigin href="/assets/OperatorConversations-Civ7TETM.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-
|
|
8
|
+
<script type="module" crossorigin src="/assets/calendar-BeofvK7c.js"></script>
|
|
9
9
|
<link rel="modulepreload" crossorigin href="/assets/chunk-CAM3fms7.js">
|
|
10
|
-
<link rel="modulepreload" crossorigin href="/assets/OperatorConversations-
|
|
11
|
-
<link rel="modulepreload" crossorigin href="/assets/AdminShell-
|
|
12
|
-
<link rel="stylesheet" crossorigin href="/assets/OperatorConversations-
|
|
10
|
+
<link rel="modulepreload" crossorigin href="/assets/OperatorConversations-D_o_59Oc.js">
|
|
11
|
+
<link rel="modulepreload" crossorigin href="/assets/AdminShell-CyZPfbzd.js">
|
|
12
|
+
<link rel="stylesheet" crossorigin href="/assets/OperatorConversations-Civ7TETM.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-
|
|
8
|
+
<script type="module" crossorigin src="/assets/chat-BWNFeIjw.js"></script>
|
|
9
9
|
<link rel="modulepreload" crossorigin href="/assets/chunk-CAM3fms7.js">
|
|
10
|
-
<link rel="modulepreload" crossorigin href="/assets/OperatorConversations-
|
|
11
|
-
<link rel="modulepreload" crossorigin href="/assets/AdminShell-
|
|
10
|
+
<link rel="modulepreload" crossorigin href="/assets/OperatorConversations-D_o_59Oc.js">
|
|
11
|
+
<link rel="modulepreload" crossorigin href="/assets/AdminShell-CyZPfbzd.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-
|
|
15
|
-
<link rel="modulepreload" crossorigin href="/assets/page-
|
|
16
|
-
<link rel="stylesheet" crossorigin href="/assets/OperatorConversations-
|
|
14
|
+
<link rel="modulepreload" crossorigin href="/assets/rotate-ccw-BxD1B_G-.js">
|
|
15
|
+
<link rel="modulepreload" crossorigin href="/assets/page-DFOoEKVK.js">
|
|
16
|
+
<link rel="stylesheet" crossorigin href="/assets/OperatorConversations-Civ7TETM.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-
|
|
8
|
+
<script type="module" crossorigin src="/assets/data-lTmU53k6.js"></script>
|
|
9
9
|
<link rel="modulepreload" crossorigin href="/assets/chunk-CAM3fms7.js">
|
|
10
|
-
<link rel="modulepreload" crossorigin href="/assets/OperatorConversations-
|
|
11
|
-
<link rel="modulepreload" crossorigin href="/assets/graph-labels-
|
|
12
|
-
<link rel="stylesheet" crossorigin href="/assets/OperatorConversations-
|
|
10
|
+
<link rel="modulepreload" crossorigin href="/assets/OperatorConversations-D_o_59Oc.js">
|
|
11
|
+
<link rel="modulepreload" crossorigin href="/assets/graph-labels-DNCXtQVn.js">
|
|
12
|
+
<link rel="stylesheet" crossorigin href="/assets/OperatorConversations-Civ7TETM.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-
|
|
8
|
+
<script type="module" crossorigin src="/assets/graph-XYK2qT5D.js"></script>
|
|
9
9
|
<link rel="modulepreload" crossorigin href="/assets/chunk-CAM3fms7.js">
|
|
10
|
-
<link rel="modulepreload" crossorigin href="/assets/OperatorConversations-
|
|
11
|
-
<link rel="modulepreload" crossorigin href="/assets/graph-labels-
|
|
12
|
-
<link rel="modulepreload" crossorigin href="/assets/AdminShell-
|
|
13
|
-
<link rel="modulepreload" crossorigin href="/assets/Checkbox-
|
|
14
|
-
<link rel="modulepreload" crossorigin href="/assets/rotate-ccw-
|
|
15
|
-
<link rel="stylesheet" crossorigin href="/assets/OperatorConversations-
|
|
10
|
+
<link rel="modulepreload" crossorigin href="/assets/OperatorConversations-D_o_59Oc.js">
|
|
11
|
+
<link rel="modulepreload" crossorigin href="/assets/graph-labels-DNCXtQVn.js">
|
|
12
|
+
<link rel="modulepreload" crossorigin href="/assets/AdminShell-CyZPfbzd.js">
|
|
13
|
+
<link rel="modulepreload" crossorigin href="/assets/Checkbox-BPYEJJPq.js">
|
|
14
|
+
<link rel="modulepreload" crossorigin href="/assets/rotate-ccw-BxD1B_G-.js">
|
|
15
|
+
<link rel="stylesheet" crossorigin href="/assets/OperatorConversations-Civ7TETM.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-
|
|
8
|
+
<script type="module" crossorigin src="/assets/admin-DcuJ3_xm.js"></script>
|
|
9
9
|
<link rel="modulepreload" crossorigin href="/assets/chunk-CAM3fms7.js">
|
|
10
|
-
<link rel="modulepreload" crossorigin href="/assets/OperatorConversations-
|
|
11
|
-
<link rel="modulepreload" crossorigin href="/assets/AdminShell-
|
|
10
|
+
<link rel="modulepreload" crossorigin href="/assets/OperatorConversations-D_o_59Oc.js">
|
|
11
|
+
<link rel="modulepreload" crossorigin href="/assets/AdminShell-CyZPfbzd.js">
|
|
12
12
|
<link rel="modulepreload" crossorigin href="/assets/admin-types-DJoj6VJv.js">
|
|
13
|
-
<link rel="modulepreload" crossorigin href="/assets/Checkbox-
|
|
14
|
-
<link rel="modulepreload" crossorigin href="/assets/AdminLoginScreens-
|
|
15
|
-
<link rel="stylesheet" crossorigin href="/assets/OperatorConversations-
|
|
13
|
+
<link rel="modulepreload" crossorigin href="/assets/Checkbox-BPYEJJPq.js">
|
|
14
|
+
<link rel="modulepreload" crossorigin href="/assets/AdminLoginScreens-B45MFjWG.js">
|
|
15
|
+
<link rel="stylesheet" crossorigin href="/assets/OperatorConversations-Civ7TETM.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-
|
|
8
|
+
<script type="module" crossorigin src="/assets/operator-B3hpbhNo.js"></script>
|
|
9
9
|
<link rel="modulepreload" crossorigin href="/assets/chunk-CAM3fms7.js">
|
|
10
|
-
<link rel="modulepreload" crossorigin href="/assets/OperatorConversations-
|
|
11
|
-
<link rel="modulepreload" crossorigin href="/assets/AdminShell-
|
|
10
|
+
<link rel="modulepreload" crossorigin href="/assets/OperatorConversations-D_o_59Oc.js">
|
|
11
|
+
<link rel="modulepreload" crossorigin href="/assets/AdminShell-CyZPfbzd.js">
|
|
12
12
|
<link rel="modulepreload" crossorigin href="/assets/admin-types-DJoj6VJv.js">
|
|
13
|
-
<link rel="modulepreload" crossorigin href="/assets/Checkbox-
|
|
14
|
-
<link rel="modulepreload" crossorigin href="/assets/AdminLoginScreens-
|
|
13
|
+
<link rel="modulepreload" crossorigin href="/assets/Checkbox-BPYEJJPq.js">
|
|
14
|
+
<link rel="modulepreload" crossorigin href="/assets/AdminLoginScreens-B45MFjWG.js">
|
|
15
15
|
<link rel="modulepreload" crossorigin href="/assets/preload-helper-CQ36nxok.js">
|
|
16
|
-
<link rel="modulepreload" crossorigin href="/assets/rotate-ccw-
|
|
17
|
-
<link rel="modulepreload" crossorigin href="/assets/page-
|
|
18
|
-
<link rel="stylesheet" crossorigin href="/assets/OperatorConversations-
|
|
16
|
+
<link rel="modulepreload" crossorigin href="/assets/rotate-ccw-BxD1B_G-.js">
|
|
17
|
+
<link rel="modulepreload" crossorigin href="/assets/page-DFOoEKVK.js">
|
|
18
|
+
<link rel="stylesheet" crossorigin href="/assets/OperatorConversations-Civ7TETM.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-
|
|
8
|
+
<script type="module" crossorigin src="/assets/public-Bd_0QBGJ.js"></script>
|
|
9
9
|
<link rel="modulepreload" crossorigin href="/assets/chunk-CAM3fms7.js">
|
|
10
|
-
<link rel="modulepreload" crossorigin href="/assets/OperatorConversations-
|
|
11
|
-
<link rel="modulepreload" crossorigin href="/assets/AdminShell-
|
|
10
|
+
<link rel="modulepreload" crossorigin href="/assets/OperatorConversations-D_o_59Oc.js">
|
|
11
|
+
<link rel="modulepreload" crossorigin href="/assets/AdminShell-CyZPfbzd.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-
|
|
15
|
-
<link rel="modulepreload" crossorigin href="/assets/page-
|
|
16
|
-
<link rel="stylesheet" crossorigin href="/assets/OperatorConversations-
|
|
14
|
+
<link rel="modulepreload" crossorigin href="/assets/rotate-ccw-BxD1B_G-.js">
|
|
15
|
+
<link rel="modulepreload" crossorigin href="/assets/page-DFOoEKVK.js">
|
|
16
|
+
<link rel="stylesheet" crossorigin href="/assets/OperatorConversations-Civ7TETM.css">
|
|
17
17
|
<link rel="stylesheet" href="/brand-defaults.css">
|
|
18
18
|
</head>
|
|
19
19
|
<body class="public-surface">
|
package/payload/server/server.js
CHANGED
|
@@ -5060,14 +5060,25 @@ var SUPPORTED_MIME_TYPES = /* @__PURE__ */ new Set([
|
|
|
5060
5060
|
"text/html",
|
|
5061
5061
|
"text/calendar",
|
|
5062
5062
|
"application/zip",
|
|
5063
|
-
"application/x-zip-compressed"
|
|
5063
|
+
"application/x-zip-compressed",
|
|
5064
|
+
// Task 1240 — voice recordings persist as playable clips in the admin bubble.
|
|
5065
|
+
// These match AUDIO_MIME_TYPES in app/lib/stt/audio-mime.ts exactly.
|
|
5066
|
+
"audio/ogg",
|
|
5067
|
+
"audio/opus",
|
|
5068
|
+
"audio/webm",
|
|
5069
|
+
"audio/mp4",
|
|
5070
|
+
"audio/x-m4a",
|
|
5071
|
+
"audio/mpeg",
|
|
5072
|
+
"audio/wav",
|
|
5073
|
+
"video/mp4"
|
|
5064
5074
|
]);
|
|
5065
5075
|
var MAX_FILE_SIZE_BYTES = 50 * 1024 * 1024;
|
|
5066
5076
|
var MAX_FILES_PER_MESSAGE = 5;
|
|
5067
5077
|
var MAX_DATA_UPLOAD_BYTES = 2 * 1024 * 1024 * 1024;
|
|
5068
5078
|
var MAX_ZIP_UNCOMPRESSED_BYTES = 100 * 1024 * 1024;
|
|
5069
5079
|
function assertSupportedMime(mimeType) {
|
|
5070
|
-
|
|
5080
|
+
const bare = mimeType.split(";")[0].trim().toLowerCase();
|
|
5081
|
+
if (!SUPPORTED_MIME_TYPES.has(bare)) {
|
|
5071
5082
|
throw new Error(
|
|
5072
5083
|
`Unsupported file type: "${mimeType}". Supported types: ${[...SUPPORTED_MIME_TYPES].join(", ")}.`
|
|
5073
5084
|
);
|
|
@@ -7314,6 +7325,11 @@ var SOURCE_MAP = {
|
|
|
7314
7325
|
webchat: "webchat",
|
|
7315
7326
|
"webchat-channel": "webchat"
|
|
7316
7327
|
};
|
|
7328
|
+
function isScheduleSource(text) {
|
|
7329
|
+
const m = text.match(CHANNEL_WRAPPER2);
|
|
7330
|
+
if (!m) return false;
|
|
7331
|
+
return m[1].match(SOURCE_ATTR2)?.[1] === "schedule";
|
|
7332
|
+
}
|
|
7317
7333
|
function unwrapChannel(text) {
|
|
7318
7334
|
const m = text.match(CHANNEL_WRAPPER2);
|
|
7319
7335
|
if (!m) return { text };
|
|
@@ -7458,7 +7474,7 @@ function parseTranscript(lines, queuedPendingSuppress = /* @__PURE__ */ new Map(
|
|
|
7458
7474
|
}
|
|
7459
7475
|
if (row.type === "queue-operation" && row.operation === "enqueue") {
|
|
7460
7476
|
const content = asString(row.content);
|
|
7461
|
-
if (content !== null && CHANNEL_WRAPPER2.test(content)) {
|
|
7477
|
+
if (content !== null && CHANNEL_WRAPPER2.test(content) && !isScheduleSource(content)) {
|
|
7462
7478
|
const u = unwrapChannel(content);
|
|
7463
7479
|
out.push(operatorInboundTurn(u, ts));
|
|
7464
7480
|
queuedPendingSuppress.set(u.text, (queuedPendingSuppress.get(u.text) ?? 0) + 1);
|
|
@@ -7468,7 +7484,7 @@ function parseTranscript(lines, queuedPendingSuppress = /* @__PURE__ */ new Map(
|
|
|
7468
7484
|
if (row.type === "attachment") {
|
|
7469
7485
|
const att = row.attachment;
|
|
7470
7486
|
const isChannelQueued = att?.type === "queued_command" && att.isMeta === true && typeof att.origin === "object" && att.origin !== null && att.origin.kind === "channel" && typeof att.prompt === "string";
|
|
7471
|
-
if (isChannelQueued) {
|
|
7487
|
+
if (isChannelQueued && !isScheduleSource(att.prompt)) {
|
|
7472
7488
|
renderOrSuppressChannelInbound(unwrapChannel(att.prompt), ts, out, queuedPendingSuppress);
|
|
7473
7489
|
}
|
|
7474
7490
|
continue;
|
|
@@ -7489,7 +7505,9 @@ function parseTranscript(lines, queuedPendingSuppress = /* @__PURE__ */ new Map(
|
|
|
7489
7505
|
// enqueue row AND this row both render and every channel message doubles.
|
|
7490
7506
|
CHANNEL_WRAPPER2.test(text);
|
|
7491
7507
|
if (isChannel) {
|
|
7492
|
-
|
|
7508
|
+
if (!isScheduleSource(text)) {
|
|
7509
|
+
renderOrSuppressChannelInbound(unwrapChannel(text), ts, out, queuedPendingSuppress);
|
|
7510
|
+
}
|
|
7493
7511
|
} else {
|
|
7494
7512
|
out.push({ kind: "operator-typed", text, ts });
|
|
7495
7513
|
}
|
|
@@ -8849,20 +8867,6 @@ function createWebchatRoutes(deps) {
|
|
|
8849
8867
|
}
|
|
8850
8868
|
const audioFile = files.find((f) => isAudioMime(f.type));
|
|
8851
8869
|
const regularFiles = files.filter((f) => !isAudioMime(f.type));
|
|
8852
|
-
if (audioFile) {
|
|
8853
|
-
if (audioFile.size > MAX_FILE_SIZE_BYTES) {
|
|
8854
|
-
console.error(`[webchat:inbound] op=send-refused kind=voice reason=oversize bytes=${audioFile.size}`);
|
|
8855
|
-
return c.json({ error: "Recording too long. Try a shorter voice note." }, 422);
|
|
8856
|
-
}
|
|
8857
|
-
const result = await transcribeVoiceNote(audioFile, "admin");
|
|
8858
|
-
if (!result.ok) {
|
|
8859
|
-
console.error(`[webchat:inbound] op=send-refused kind=voice reason=stt-failed detail=${result.error}`);
|
|
8860
|
-
return c.json({ error: result.error }, 422);
|
|
8861
|
-
}
|
|
8862
|
-
text = text.length > 0 ? `${text}
|
|
8863
|
-
|
|
8864
|
-
${result.result.text}` : result.result.text;
|
|
8865
|
-
}
|
|
8866
8870
|
for (const file of regularFiles) {
|
|
8867
8871
|
try {
|
|
8868
8872
|
assertSupportedMime(file.type);
|
|
@@ -8876,6 +8880,27 @@ ${result.result.text}` : result.result.text;
|
|
|
8876
8880
|
}
|
|
8877
8881
|
}
|
|
8878
8882
|
const stored = [];
|
|
8883
|
+
if (audioFile) {
|
|
8884
|
+
if (audioFile.size > MAX_FILE_SIZE_BYTES) {
|
|
8885
|
+
console.error(`[webchat:inbound] op=send-refused kind=voice reason=oversize bytes=${audioFile.size}`);
|
|
8886
|
+
return c.json({ error: "Recording too long. Try a shorter voice note." }, 422);
|
|
8887
|
+
}
|
|
8888
|
+
try {
|
|
8889
|
+
stored.push(await storeAttachment(accountId, audioFile));
|
|
8890
|
+
} catch (err) {
|
|
8891
|
+
const detail = err instanceof Error ? err.message : String(err);
|
|
8892
|
+
console.error(`[webchat:inbound] op=send-refused kind=voice reason=audio-store-failed detail=${detail}`);
|
|
8893
|
+
return c.json({ error: "failed to store voice recording" }, 500);
|
|
8894
|
+
}
|
|
8895
|
+
const result = await transcribeVoiceNote(audioFile, "admin");
|
|
8896
|
+
if (result.ok) {
|
|
8897
|
+
text = text.length > 0 ? `${text}
|
|
8898
|
+
|
|
8899
|
+
${result.result.text}` : result.result.text;
|
|
8900
|
+
} else {
|
|
8901
|
+
console.error(`[webchat:inbound] op=stt-failed kind=voice detail=${result.error}`);
|
|
8902
|
+
}
|
|
8903
|
+
}
|
|
8879
8904
|
try {
|
|
8880
8905
|
for (const file of regularFiles) {
|
|
8881
8906
|
stored.push(await storeAttachment(accountId, file));
|
|
@@ -14733,10 +14758,6 @@ async function handleDefault(c, accountId) {
|
|
|
14733
14758
|
return handleDefaultTopLevel(c, accountId, { includeTrashed, includeAgentActions });
|
|
14734
14759
|
}
|
|
14735
14760
|
const agentActionLabels = includeAgentActions ? [] : [...AGENT_ACTION_LABELS];
|
|
14736
|
-
const rawChannel = c.req.query("channel") ?? "";
|
|
14737
|
-
const channel = rawChannel.split(",").map((s) => s.trim()).filter(Boolean);
|
|
14738
|
-
const rawMessageSublabel = c.req.query("messageSublabel") ?? "";
|
|
14739
|
-
const messageSublabel = rawMessageSublabel.split(",").map((s) => s.trim()).filter(Boolean);
|
|
14740
14761
|
if (labels.length === 0) {
|
|
14741
14762
|
console.error(
|
|
14742
14763
|
`[graph-page] load rejected reason=missing-filter account=${accountId} labels=`
|
|
@@ -14768,7 +14789,7 @@ async function handleDefault(c, accountId) {
|
|
|
14768
14789
|
try {
|
|
14769
14790
|
const countCypher = includeTrashed ? DEFAULT_COUNT_CYPHER_INCLUDE_TRASHED : DEFAULT_COUNT_CYPHER;
|
|
14770
14791
|
const fetchCypher = includeTrashed ? DEFAULT_FETCH_CYPHER_INCLUDE_TRASHED : DEFAULT_FETCH_CYPHER;
|
|
14771
|
-
const cypherParams = { accountId, labels, agentActionLabels
|
|
14792
|
+
const cypherParams = { accountId, labels, agentActionLabels };
|
|
14772
14793
|
const result = await session.executeRead(async (tx) => {
|
|
14773
14794
|
const countResult = await tx.run(countCypher, cypherParams);
|
|
14774
14795
|
const matchedRaw = countResult.records[0]?.get("matched");
|
|
@@ -14800,10 +14821,8 @@ async function handleDefault(c, accountId) {
|
|
|
14800
14821
|
const nodes = result.rawNodes.map((n) => pruneNode(n, warnedClasses, conversationWarnings));
|
|
14801
14822
|
const edges = result.rawEdges.filter((e) => e && e.id != null).map((e) => pruneEdge(e, warnedClasses));
|
|
14802
14823
|
const trashedSuffix = includeTrashed ? " includeTrashed=1" : "";
|
|
14803
|
-
const channelSuffix = channel.length > 0 ? ` channel=${channel.join(",")}` : "";
|
|
14804
|
-
const sublabelSuffix = messageSublabel.length > 0 ? ` messageSublabel=${messageSublabel.join(",")}` : "";
|
|
14805
14824
|
console.error(
|
|
14806
|
-
`[graph-page] load mode=default account=${accountId} agentActions=${includeAgentActions} labels=${labels.join(",")}${trashedSuffix}
|
|
14825
|
+
`[graph-page] load mode=default account=${accountId} agentActions=${includeAgentActions} labels=${labels.join(",")}${trashedSuffix} nodes=${nodes.length} edges=${edges.length} ms=${elapsed}`
|
|
14807
14826
|
);
|
|
14808
14827
|
return c.json({ nodes, edges });
|
|
14809
14828
|
} catch (err) {
|
|
@@ -14831,8 +14850,6 @@ async function handleDefaultTopLevel(c, accountId, flags) {
|
|
|
14831
14850
|
accountId,
|
|
14832
14851
|
labels,
|
|
14833
14852
|
agentActionLabels,
|
|
14834
|
-
channel: [],
|
|
14835
|
-
messageSublabel: [],
|
|
14836
14853
|
topLevelLimit: neo4j2.int(TOP_LEVEL_LIMIT)
|
|
14837
14854
|
};
|
|
14838
14855
|
const result = await session.executeRead(async (tx) => {
|
|
@@ -15001,22 +15018,13 @@ async function handleNeighbourhood(c, accountId) {
|
|
|
15001
15018
|
}
|
|
15002
15019
|
}
|
|
15003
15020
|
}
|
|
15004
|
-
var SUBFACET_PREDICATE = `
|
|
15005
|
-
AND (size($channel) = 0
|
|
15006
|
-
OR NOT any(lbl IN labels(n) WHERE lbl IN ['Conversation','AdminConversation','PublicConversation'])
|
|
15007
|
-
OR n.channel IS NULL
|
|
15008
|
-
OR n.channel IN $channel)
|
|
15009
|
-
AND (size($messageSublabel) = 0
|
|
15010
|
-
OR NOT any(lbl IN labels(n) WHERE lbl IN ['Message','UserMessage','AssistantMessage','WhatsAppMessage'])
|
|
15011
|
-
OR any(lbl IN labels(n) WHERE lbl IN $messageSublabel))
|
|
15012
|
-
`;
|
|
15013
15021
|
var DEFAULT_COUNT_CYPHER = `
|
|
15014
15022
|
MATCH (n)
|
|
15015
15023
|
WHERE n.accountId = $accountId
|
|
15016
15024
|
AND any(lbl IN labels(n) WHERE lbl IN $labels)
|
|
15017
15025
|
AND NOT any(lbl IN labels(n) WHERE lbl IN $agentActionLabels)
|
|
15018
15026
|
AND NOT n:Trashed
|
|
15019
|
-
AND n.deletedAt IS NULL
|
|
15027
|
+
AND n.deletedAt IS NULL
|
|
15020
15028
|
RETURN count(n) AS matched
|
|
15021
15029
|
`;
|
|
15022
15030
|
var CONVERSATION_PROPS_PROJECTION = `CASE
|
|
@@ -15030,7 +15038,7 @@ var DEFAULT_FETCH_CYPHER = `
|
|
|
15030
15038
|
AND any(lbl IN labels(n) WHERE lbl IN $labels)
|
|
15031
15039
|
AND NOT any(lbl IN labels(n) WHERE lbl IN $agentActionLabels)
|
|
15032
15040
|
AND NOT n:Trashed
|
|
15033
|
-
AND n.deletedAt IS NULL
|
|
15041
|
+
AND n.deletedAt IS NULL
|
|
15034
15042
|
WITH collect(n) AS nodes, collect(elementId(n)) AS nodeIds
|
|
15035
15043
|
UNWIND nodes AS n
|
|
15036
15044
|
OPTIONAL MATCH (n)-[r]-(m)
|
|
@@ -15052,7 +15060,7 @@ var DEFAULT_COUNT_CYPHER_INCLUDE_TRASHED = `
|
|
|
15052
15060
|
WHERE n.accountId = $accountId
|
|
15053
15061
|
AND any(lbl IN labels(n) WHERE lbl IN $labels)
|
|
15054
15062
|
AND NOT any(lbl IN labels(n) WHERE lbl IN $agentActionLabels)
|
|
15055
|
-
AND n.deletedAt IS NULL
|
|
15063
|
+
AND n.deletedAt IS NULL
|
|
15056
15064
|
RETURN count(n) AS matched
|
|
15057
15065
|
`;
|
|
15058
15066
|
var DEFAULT_FETCH_CYPHER_INCLUDE_TRASHED = `
|
|
@@ -15060,7 +15068,7 @@ var DEFAULT_FETCH_CYPHER_INCLUDE_TRASHED = `
|
|
|
15060
15068
|
WHERE n.accountId = $accountId
|
|
15061
15069
|
AND any(lbl IN labels(n) WHERE lbl IN $labels)
|
|
15062
15070
|
AND NOT any(lbl IN labels(n) WHERE lbl IN $agentActionLabels)
|
|
15063
|
-
AND n.deletedAt IS NULL
|
|
15071
|
+
AND n.deletedAt IS NULL
|
|
15064
15072
|
WITH collect(n) AS nodes, collect(elementId(n)) AS nodeIds
|
|
15065
15073
|
UNWIND nodes AS n
|
|
15066
15074
|
OPTIONAL MATCH (n)-[r]-(m)
|