@rubytech/create-maxy-code 0.1.376 → 0.1.377

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/services/claude-session-manager/dist/config.d.ts +9 -0
  3. package/payload/platform/services/claude-session-manager/dist/config.d.ts.map +1 -1
  4. package/payload/platform/services/claude-session-manager/dist/config.js +15 -1
  5. package/payload/platform/services/claude-session-manager/dist/config.js.map +1 -1
  6. package/payload/platform/services/claude-session-manager/dist/index.js +29 -5
  7. package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
  8. package/payload/platform/services/claude-session-manager/dist/stuck-turn-recover.d.ts +6 -3
  9. package/payload/platform/services/claude-session-manager/dist/stuck-turn-recover.d.ts.map +1 -1
  10. package/payload/platform/services/claude-session-manager/dist/stuck-turn-recover.js +2 -2
  11. package/payload/platform/services/claude-session-manager/dist/stuck-turn-recover.js.map +1 -1
  12. package/payload/server/public/assets/AdminLoginScreens-DVjwrcZa.js +1 -0
  13. package/payload/server/public/assets/{AdminShell-B7rclo3t.js → AdminShell-CNQxSO9B.js} +1 -1
  14. package/payload/server/public/assets/{Checkbox-C3efsnUI.js → Checkbox-B8dm2kDD.js} +1 -1
  15. package/payload/server/public/assets/{admin-DVYD__OE.js → admin-Dfv2e8fn.js} +1 -1
  16. package/payload/server/public/assets/{browser-CCUgMt_X.js → browser-BMyQHWKS.js} +1 -1
  17. package/payload/server/public/assets/{calendar-B3jQEPFX.js → calendar-CG-2rQ4m.js} +1 -1
  18. package/payload/server/public/assets/chat-CRPVhDCc.js +1 -0
  19. package/payload/server/public/assets/{data-Z84n0KXb.js → data-Bodds4fv.js} +1 -1
  20. package/payload/server/public/assets/{graph-mt6Y1RAt.js → graph-DF_nLsTp.js} +1 -1
  21. package/payload/server/public/assets/{graph-labels-BuKswZHJ.js → graph-labels-HWQ5J7S-.js} +1 -1
  22. package/payload/server/public/assets/{operator-CDQ6eQ5M.js → operator-DH9OAMpe.js} +1 -1
  23. package/payload/server/public/assets/{page-CjhCRrp2.js → page--Uj3qG5S.js} +1 -1
  24. package/payload/server/public/assets/{public-CHqiiZCo.js → public-NNHS6mWb.js} +1 -1
  25. package/payload/server/public/assets/{rotate-ccw-BkFK-J9e.js → rotate-ccw-CKSJX39F.js} +1 -1
  26. package/payload/server/public/assets/{useSubAccountSwitcher-BCOl64pj.js → useSubAccountSwitcher-DRITc7qp.js} +1 -1
  27. package/payload/server/public/browser.html +3 -3
  28. package/payload/server/public/calendar.html +3 -3
  29. package/payload/server/public/chat.html +5 -5
  30. package/payload/server/public/data.html +3 -3
  31. package/payload/server/public/graph.html +6 -6
  32. package/payload/server/public/index.html +5 -5
  33. package/payload/server/public/operator.html +7 -7
  34. package/payload/server/public/public.html +5 -5
  35. package/payload/server/server.js +6 -4
  36. package/payload/server/public/assets/AdminLoginScreens-C-LlR7j1.js +0 -1
  37. package/payload/server/public/assets/chat-IcD9N2mi.js +0 -1
@@ -5,10 +5,10 @@
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-CCUgMt_X.js"></script>
8
+ <script type="module" crossorigin src="/assets/browser-BMyQHWKS.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CAM3fms7.js">
10
- <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-BCOl64pj.js">
11
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-B7rclo3t.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-DRITc7qp.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-CNQxSO9B.js">
12
12
  <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-Ca1GJeBC.css">
13
13
  </head>
14
14
  <body>
@@ -5,10 +5,10 @@
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-B3jQEPFX.js"></script>
8
+ <script type="module" crossorigin src="/assets/calendar-CG-2rQ4m.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CAM3fms7.js">
10
- <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-BCOl64pj.js">
11
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-B7rclo3t.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-DRITc7qp.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-CNQxSO9B.js">
12
12
  <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-Ca1GJeBC.css">
13
13
  </head>
14
14
  <body>
@@ -5,14 +5,14 @@
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-IcD9N2mi.js"></script>
8
+ <script type="module" crossorigin src="/assets/chat-CRPVhDCc.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CAM3fms7.js">
10
- <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-BCOl64pj.js">
11
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-B7rclo3t.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-DRITc7qp.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-CNQxSO9B.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-BkFK-J9e.js">
15
- <link rel="modulepreload" crossorigin href="/assets/page-CjhCRrp2.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-CKSJX39F.js">
15
+ <link rel="modulepreload" crossorigin href="/assets/page--Uj3qG5S.js">
16
16
  <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-Ca1GJeBC.css">
17
17
  </head>
18
18
  <body>
@@ -5,10 +5,10 @@
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-Z84n0KXb.js"></script>
8
+ <script type="module" crossorigin src="/assets/data-Bodds4fv.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CAM3fms7.js">
10
- <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-BCOl64pj.js">
11
- <link rel="modulepreload" crossorigin href="/assets/graph-labels-BuKswZHJ.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-DRITc7qp.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/graph-labels-HWQ5J7S-.js">
12
12
  <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-Ca1GJeBC.css">
13
13
  </head>
14
14
  <body>
@@ -5,13 +5,13 @@
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-mt6Y1RAt.js"></script>
8
+ <script type="module" crossorigin src="/assets/graph-DF_nLsTp.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CAM3fms7.js">
10
- <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-BCOl64pj.js">
11
- <link rel="modulepreload" crossorigin href="/assets/graph-labels-BuKswZHJ.js">
12
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-B7rclo3t.js">
13
- <link rel="modulepreload" crossorigin href="/assets/Checkbox-C3efsnUI.js">
14
- <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-BkFK-J9e.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-DRITc7qp.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/graph-labels-HWQ5J7S-.js">
12
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-CNQxSO9B.js">
13
+ <link rel="modulepreload" crossorigin href="/assets/Checkbox-B8dm2kDD.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-CKSJX39F.js">
15
15
  <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-Ca1GJeBC.css">
16
16
  </head>
17
17
  <body>
@@ -5,13 +5,13 @@
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-DVYD__OE.js"></script>
8
+ <script type="module" crossorigin src="/assets/admin-Dfv2e8fn.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CAM3fms7.js">
10
- <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-BCOl64pj.js">
11
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-B7rclo3t.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-DRITc7qp.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-CNQxSO9B.js">
12
12
  <link rel="modulepreload" crossorigin href="/assets/admin-types-DJoj6VJv.js">
13
- <link rel="modulepreload" crossorigin href="/assets/Checkbox-C3efsnUI.js">
14
- <link rel="modulepreload" crossorigin href="/assets/AdminLoginScreens-C-LlR7j1.js">
13
+ <link rel="modulepreload" crossorigin href="/assets/Checkbox-B8dm2kDD.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/AdminLoginScreens-DVjwrcZa.js">
15
15
  <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-Ca1GJeBC.css">
16
16
  <link rel="stylesheet" crossorigin href="/assets/AdminLoginScreens-CWMpccrR.css">
17
17
  <link rel="stylesheet" href="/brand-defaults.css">
@@ -5,16 +5,16 @@
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-CDQ6eQ5M.js"></script>
8
+ <script type="module" crossorigin src="/assets/operator-DH9OAMpe.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CAM3fms7.js">
10
- <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-BCOl64pj.js">
11
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-B7rclo3t.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-DRITc7qp.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-CNQxSO9B.js">
12
12
  <link rel="modulepreload" crossorigin href="/assets/admin-types-DJoj6VJv.js">
13
- <link rel="modulepreload" crossorigin href="/assets/Checkbox-C3efsnUI.js">
14
- <link rel="modulepreload" crossorigin href="/assets/AdminLoginScreens-C-LlR7j1.js">
13
+ <link rel="modulepreload" crossorigin href="/assets/Checkbox-B8dm2kDD.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/AdminLoginScreens-DVjwrcZa.js">
15
15
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-CQ36nxok.js">
16
- <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-BkFK-J9e.js">
17
- <link rel="modulepreload" crossorigin href="/assets/page-CjhCRrp2.js">
16
+ <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-CKSJX39F.js">
17
+ <link rel="modulepreload" crossorigin href="/assets/page--Uj3qG5S.js">
18
18
  <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-Ca1GJeBC.css">
19
19
  <link rel="stylesheet" crossorigin href="/assets/AdminLoginScreens-CWMpccrR.css">
20
20
  </head>
@@ -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/public-CHqiiZCo.js"></script>
8
+ <script type="module" crossorigin src="/assets/public-NNHS6mWb.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CAM3fms7.js">
10
- <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-BCOl64pj.js">
11
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-B7rclo3t.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-DRITc7qp.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-CNQxSO9B.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-BkFK-J9e.js">
15
- <link rel="modulepreload" crossorigin href="/assets/page-CjhCRrp2.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-CKSJX39F.js">
15
+ <link rel="modulepreload" crossorigin href="/assets/page--Uj3qG5S.js">
16
16
  <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-Ca1GJeBC.css">
17
17
  <link rel="stylesheet" href="/brand-defaults.css">
18
18
  </head>
@@ -16447,7 +16447,7 @@ var session_rename_default = app32;
16447
16447
  // server/routes/admin/session-rc-spawn.ts
16448
16448
  import { randomUUID as randomUUID10 } from "crypto";
16449
16449
  var ACCOUNT_UUID_RE2 = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;
16450
- function resolveSpawnPlan(host, operatorDomains, body, mintId = randomUUID10, adminUserId, authenticatedName) {
16450
+ function resolveSpawnPlan(host, operatorDomains, body, mintId = randomUUID10, adminUserId, authenticatedName, callerAccountId) {
16451
16451
  const operator = isOperatorHost(host, operatorDomains);
16452
16452
  const resumeId = typeof body.sessionId === "string" && body.sessionId.length > 0 ? body.sessionId : void 0;
16453
16453
  const name = typeof body.name === "string" && body.name.length > 0 ? body.name : void 0;
@@ -16457,7 +16457,9 @@ function resolveSpawnPlan(host, operatorDomains, body, mintId = randomUUID10, ad
16457
16457
  const pickedModel = kind === "new" && typeof body.model === "string" && isSelectableModel(body.model) ? body.model : null;
16458
16458
  const pickedEffort = kind === "new" && typeof body.effort === "string" && isNewSessionEffortLevel(body.effort) ? body.effort : null;
16459
16459
  const paramsSource = pickedModel !== null && pickedEffort !== null ? "picker" : "default";
16460
- const targetAccountId = typeof body.targetAccountId === "string" && ACCOUNT_UUID_RE2.test(body.targetAccountId) ? body.targetAccountId : void 0;
16460
+ const callerTargetAccountId = typeof callerAccountId === "string" && ACCOUNT_UUID_RE2.test(callerAccountId) ? callerAccountId : void 0;
16461
+ const bodyTargetAccountId = typeof body.targetAccountId === "string" && ACCOUNT_UUID_RE2.test(body.targetAccountId) ? body.targetAccountId : void 0;
16462
+ const targetAccountId = kind === "new" ? callerTargetAccountId : bodyTargetAccountId;
16461
16463
  const payload = {};
16462
16464
  let sessionId;
16463
16465
  if (webchatBind) {
@@ -16500,7 +16502,7 @@ app33.post("/", requireAdminSession, async (c) => {
16500
16502
  const adminUserId = cacheKey ? getUserIdForSession(cacheKey) : void 0;
16501
16503
  const accountId = cacheKey ? getAccountIdForSession(cacheKey) : void 0;
16502
16504
  const authenticatedName = accountId ? await resolveAuthenticatedName(accountId, adminUserId) : void 0;
16503
- const plan = resolveSpawnPlan(host, getOperatorDomains(), body, randomUUID10, adminUserId, authenticatedName);
16505
+ const plan = resolveSpawnPlan(host, getOperatorDomains(), body, randomUUID10, adminUserId, authenticatedName, accountId);
16504
16506
  const spawnReqId = randomUUID10();
16505
16507
  console.log(
16506
16508
  `[chat-spawn] op=request spawnReqId=${spawnReqId} origin=${plan.origin} kind=${plan.kind} sessionId=${plan.kind === "new" ? "new" : plan.sessionId}`
@@ -16508,7 +16510,7 @@ app33.post("/", requireAdminSession, async (c) => {
16508
16510
  if (plan.webchatBind) {
16509
16511
  console.log(`[chat-spawn] op=args spawnReqId=${spawnReqId} webchatChannel=present sessionId=${plan.sessionId}`);
16510
16512
  console.log(
16511
- `[webchat-spawn] op=args sessionId=${plan.sessionId} model=${plan.model ?? "default"} effort=${plan.effort ?? "default"} source=${plan.paramsSource}`
16513
+ `[webchat-spawn] op=args sessionId=${plan.sessionId} model=${plan.model ?? "default"} effort=${plan.effort ?? "default"} source=${plan.paramsSource} accountId=${plan.payload.targetAccountId?.slice(0, 8) ?? "unset"}`
16512
16514
  );
16513
16515
  }
16514
16516
  let res;
@@ -1 +0,0 @@
1
- import{o as e}from"./chunk-CAM3fms7.js";import{H as t,K as n,L as r,V as i,z as a}from"./useSubAccountSwitcher-BCOl64pj.js";import{i as o}from"./admin-types-DJoj6VJv.js";import{v as s,y as c}from"./AdminShell-B7rclo3t.js";import{t as l}from"./Checkbox-C3efsnUI.js";var u=`admin-landing-redirected`,d=`/graph`;function f(e){return e.variant===`operator`?!1:e.appState===`chat`&&!e.alreadyRedirected}var p=e(n(),1);function m(e=`admin`){let[n,r]=(0,p.useState)(`loading`),[i,a]=(0,p.useState)(``),[s,l]=(0,p.useState)(``),[m,h]=(0,p.useState)(``),[g,_]=(0,p.useState)(!1),[v,y]=(0,p.useState)(!1),[b,x]=(0,p.useState)(!1),[S,C]=(0,p.useState)(!1),[w,T]=(0,p.useState)(!1),[E,D]=(0,p.useState)(null),[O,k]=(0,p.useState)(null),[A,j]=(0,p.useState)(void 0),[M,N]=(0,p.useState)(null),[P,F]=(0,p.useState)(void 0),[I,L]=(0,p.useState)(null),[R,z]=(0,p.useState)(null),[B,V]=(0,p.useState)(void 0),H=(0,p.useRef)(void 0),[U,W]=(0,p.useState)(!1);(0,p.useEffect)(()=>{typeof window>`u`||fetch(`/api/remote-auth/status`).then(e=>e.ok?e.json():null).then(e=>{e?.configured&&W(!0)}).catch(()=>{})},[]);let G=(0,p.useRef)(null),K=(0,p.useRef)(null);(0,p.useEffect)(()=>{async function e(){let e=null;try{e=sessionStorage.getItem(`maxy-admin-session-key`)}catch{}if(!e)return!1;try{let t=await fetch(`/api/admin/session?session_key=${encodeURIComponent(e)}`);if(t.status===401){try{sessionStorage.removeItem(`maxy-admin-session-key`)}catch{}return!1}if(!t.ok)return!1;let n=await t.json();D(n.session_key),z(n.sessionId??null),j(n.businessName),N(n.role??null),F(n.userName===void 0?null:n.userName),L(n.avatar??null);let i=o(n.thinkingView);return H.current=i,V(i),r(`chat`),!0}catch(e){return console.error(`[admin] session restore failed:`,e),!1}}async function t(n=2){try{let i=await fetch(`/api/health`);if(!i.ok){if(n>0)return await new Promise(e=>setTimeout(e,1500)),t(n-1);console.error(`[admin] health check returned ${i.status} after retries`),r(`set-pin`);return}let a=await i.json();if(!a.pin_configured){r(`set-pin`);return}if(!a.claude_authenticated){r(`connect-claude`);return}if(await e())return;r(`enter-pin`)}catch(e){if(n>0)return await new Promise(e=>setTimeout(e,1500)),t(n-1);console.error(`[admin] health check failed:`,e),r(`set-pin`)}}t()},[]),(0,p.useEffect)(()=>{n===`chat`&&fetch(`/api/admin/claude-info`).then(e=>{if(e.ok)return e.json()}).then(e=>{e&&k(e)}).catch(()=>{})},[n]),(0,p.useEffect)(()=>{if(typeof window>`u`)return;let t=!1;try{t=sessionStorage.getItem(u)===`1`}catch{}if(f({appState:n,alreadyRedirected:t,variant:e})){try{sessionStorage.setItem(u,`1`)}catch{}console.info(`[admin-ui] landing-redirect target=${d}`),window.location.replace(d)}},[n,e]);let q=(0,p.useRef)(null);(0,p.useEffect)(()=>{if(n!==`chat`)return;let e=setInterval(async()=>{try{let e=await fetch(`/api/health`);if(e.ok){let t=await e.json();if(t.auth_status===`dead`||t.auth_status===`missing`){r(`connect-claude`);return}}}catch{}if(E)try{let e=await fetch(`/api/admin/session?session_key=${encodeURIComponent(E)}`);if(e.status!==401)return;let n=(await e.clone().json().catch(()=>null))?.code??`unknown-401`;if(n===`remote-auth-required`){t(`heartbeat`,`/api/admin/session`);return}console.warn(`[admin-auth] outcome=heartbeat-detected-expiry code=${n}`),q.current?.()}catch{}},300*1e3);return()=>clearInterval(e)},[n,E]),(0,p.useEffect)(()=>{n===`connect-claude`&&fetch(`/api/health`).then(e=>e.ok?e.json():null).then(e=>{e?.claude_authenticated&&r(`enter-pin`)}).catch(()=>{})},[n]);async function J(e,n){y(!0);try{let i=await fetch(`/api/admin/session`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({pin:e,...n?{accountId:n}:{}})});if(!i.ok){let e=await i.json().catch(()=>({}));if(i.status===401&&e?.code===`remote-auth-required`){t(`enter-pin`,`/api/admin/session`);return}h(e.error||`Invalid PIN`);return}let s=await i.json();D(s.session_key),z(s.sessionId??null),j(s.businessName),N(s.role??null),F(s.userName===void 0?null:s.userName),L(s.avatar??null);let c=o(s.thinkingView);if(H.current=c,V(c),n)try{sessionStorage.setItem(`maxy-account-id`,n)}catch{}try{sessionStorage.setItem(`maxy-admin-session-key`,s.session_key)}catch{}a(``),r(`chat`)}catch(e){console.error(`[admin] connection error:`,e),h(`Could not connect.`)}finally{y(!1)}}let Y=(0,p.useCallback)(async e=>{if(e.preventDefault(),v)return;h(``);let n=s.trim();if(!n){h(`Please enter your name.`);return}if(i.length<4){h(`PIN must be at least 4 characters.`);return}let o=i;y(!0);try{let e=await fetch(`/api/onboarding/set-pin`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({pin:o,name:n})});if(!e.ok){let n=await e.json().catch(()=>({}));if(e.status===401&&n?.code===`remote-auth-required`){t(`set-pin`,`/api/onboarding/set-pin`);return}if(e.status===409){console.log(`[admin] PIN already configured — re-checking health`);try{let e=await fetch(`/api/health`);if(e.ok){let t=await e.json();t.pin_configured&&t.claude_authenticated?r(`enter-pin`):t.pin_configured?r(`connect-claude`):h(n.error||`Failed to set PIN.`)}else r(`enter-pin`)}catch{r(`enter-pin`)}return}h(n.error||`Failed to set PIN.`);return}let i=await fetch(`/api/health`);if((i.ok?await i.json():null)?.claude_authenticated){await J(o);return}a(``),r(`connect-claude`)}catch(e){console.error(`[admin] connection error:`,e),h(`Could not connect.`)}finally{y(!1)}},[i,v,s]),X=(0,p.useCallback)(async e=>{e.preventDefault(),h(``),await J(i)},[i]),Z=(0,p.useCallback)(async()=>{T(!0);try{if(!await c())return console.warn(`[admin-ui] claude-disconnect not verified — credentials may persist; staying put`),!1;D(null),N(null),F(void 0),L(null);try{sessionStorage.removeItem(`maxy-admin-session-key`),sessionStorage.removeItem(`maxy-account-id`),sessionStorage.removeItem(u)}catch{}return r(`connect-claude`),!0}finally{T(!1)}},[]),Q=(0,p.useCallback)(()=>{D(null),N(null),F(void 0),L(null);try{sessionStorage.removeItem(`maxy-admin-session-key`),sessionStorage.removeItem(`maxy-account-id`),sessionStorage.removeItem(u)}catch{}a(``),h(``),r(`enter-pin`)},[]);return(0,p.useEffect)(()=>{q.current=Q},[Q]),{appState:n,setAppState:r,pin:i,setPin:a,operatorName:s,setOperatorName:l,pinError:m,setPinError:h,showPin:g,setShowPin:_,pinLoading:v,authPolling:b,setAuthPolling:x,authLoading:S,setAuthLoading:C,disconnecting:w,cacheKey:E,setCacheKey:D,claudeInfo:O,setClaudeInfo:k,businessName:A,role:M,userName:P,userAvatar:I,sessionId:R,setSessionId:z,expandAll:B,setExpandAll:V,expandAllDefaultRef:H,remoteAuthEnabled:U,pinInputRef:G,setPinFormRef:K,handleSetPin:Y,handleLogin:X,handleDisconnect:Z,handleLogout:Q}}var h=i();function g({inputRef:e,value:t,onChange:n,onComplete:r,showPin:i,autoFocus:a}){let o=(0,p.useRef)([]);function s(e,r){r.key===`Backspace`?(r.preventDefault(),t[e]?n(t.slice(0,e)+t.slice(e+1)):e>0&&(n(t.slice(0,e-1)+t.slice(e)),o.current[e-1]?.focus())):r.key===`ArrowLeft`&&e>0?o.current[e-1]?.focus():r.key===`ArrowRight`&&e<5?o.current[e+1]?.focus():r.key===`Enter`&&(r.preventDefault(),r.currentTarget.form?.requestSubmit())}function c(e,i){let a=i.nativeEvent.data;if(!a||!/^\d$/.test(a))return;let s=t.split(``);for(s[e]=a;s.length<e;)s.push(``);let c=s.join(``).replace(/\D/g,``).slice(0,6);n(c),c.length===6?r?.(c):e<5&&o.current[e+1]?.focus()}function l(e){e.preventDefault();let t=e.clipboardData.getData(`text`).replace(/\D/g,``).slice(0,6);t&&(n(t),t.length===6?r?.(t):o.current[t.length]?.focus())}return(0,h.jsx)(`div`,{className:`pin-field`,children:Array.from({length:6}).map((n,r)=>(0,h.jsx)(`input`,{ref:t=>{o.current[r]=t,r===0&&e&&(e.current=t)},type:`text`,inputMode:`numeric`,className:`pin-box${t[r]?` pin-box-filled`:``}`,value:t[r]?i?t[r]:`•`:``,onKeyDown:e=>s(r,e),onInput:e=>c(r,e),onPaste:l,onFocus:e=>e.target.select(),autoFocus:a&&r===0,autoComplete:`off`,maxLength:1,"aria-label":`PIN digit ${r+1}`},r))})}function _(e){let{pin:t,setPin:n,showPin:i,setShowPin:o,pinLoading:c,pinError:u,pinInputRef:d,setPinFormRef:f,onSubmit:p,operatorName:m,setOperatorName:_}=e;return(0,h.jsx)(`div`,{className:`connect-page`,children:(0,h.jsxs)(`div`,{className:`connect-content`,children:[(0,h.jsx)(`img`,{src:a,alt:r.productName,className:`connect-logo connect-logo--maxy`}),!r.logoContainsName&&(0,h.jsxs)(`h1`,{className:`connect-title`,children:[`Welcome to `,r.productName]}),(0,h.jsxs)(`p`,{className:`connect-subtitle`,children:[`Tell `,r.productName,` who you are, then choose a PIN.`]}),(0,h.jsxs)(`form`,{ref:f,onSubmit:p,className:`connect-pin-form`,children:[(0,h.jsxs)(`div`,{className:`pin-input-row`,children:[(0,h.jsx)(`input`,{type:`text`,className:`connect-name-input`,placeholder:`Your full name`,value:m,onChange:e=>_(e.target.value),autoComplete:`name`,autoFocus:!0,required:!0,"aria-label":`Your full name`}),(0,h.jsx)(`div`,{style:{width:38,flexShrink:0},"aria-hidden":`true`})]}),(0,h.jsxs)(`div`,{className:`pin-input-row`,children:[(0,h.jsx)(g,{inputRef:d,value:t,onChange:n,onComplete:()=>{},showPin:i}),(0,h.jsx)(s,{variant:`send`,type:`submit`,disabled:!t||!m.trim(),loading:c,"aria-label":`Set PIN`,children:(0,h.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,h.jsx)(`line`,{x1:`5`,y1:`12`,x2:`19`,y2:`12`}),(0,h.jsx)(`polyline`,{points:`12 5 19 12 12 19`})]})})]}),(0,h.jsx)(l,{checked:i,onChange:()=>o(e=>!e),label:`Show PIN`})]}),u&&(0,h.jsx)(`p`,{className:`admin-pin-error`,children:u})]})})}function v(e){let{pin:t,setPin:n,showPin:i,setShowPin:o,pinLoading:c,pinError:u,pinInputRef:d,onSubmit:f,remoteAuthEnabled:p,onSignOutRemote:m}=e;return(0,h.jsxs)(`div`,{className:`connect-page`,children:[p&&m&&(0,h.jsx)(`button`,{type:`button`,className:`connect-signout`,onClick:m,children:`Sign out`}),(0,h.jsxs)(`div`,{className:`connect-content`,children:[(0,h.jsx)(`img`,{src:a,alt:r.productName,className:`connect-logo connect-logo--maxy`}),!r.logoContainsName&&(0,h.jsx)(`h1`,{className:`connect-title`,children:r.productName}),(0,h.jsxs)(`form`,{onSubmit:f,className:`connect-pin-form`,children:[(0,h.jsxs)(`div`,{className:`pin-input-row`,children:[(0,h.jsx)(g,{inputRef:d,value:t,onChange:n,onComplete:()=>{},showPin:i,autoFocus:!0}),(0,h.jsx)(s,{variant:`send`,type:`submit`,disabled:!t,loading:c,children:(0,h.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,h.jsx)(`line`,{x1:`5`,y1:`12`,x2:`19`,y2:`12`}),(0,h.jsx)(`polyline`,{points:`12 5 19 12 12 19`})]})})]}),(0,h.jsx)(`div`,{className:`pin-options`,children:(0,h.jsx)(l,{checked:i,onChange:()=>o(e=>!e),label:`Show PIN`})})]}),u&&(0,h.jsx)(`p`,{className:`admin-pin-error`,children:u})]})]})}function y(e){let{authPolling:t,setAuthPolling:n,authLoading:i,setAuthLoading:o,pinError:c,setPinError:l,setAppState:u}=e,[d,f]=(0,p.useState)(!1),[m,g]=(0,p.useState)(!1);async function _(){g(!0),l(``);try{let e=await(await fetch(`/api/onboarding/claude-auth`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`launch-browser`})})).json();e.launched?f(!0):e.error&&l(e.error)}catch(e){console.error(`[admin] browser launch error:`,e),l(`Could not launch browser.`)}g(!1)}async function v(){o(!0),l(``);try{let e=await(await fetch(`/api/onboarding/claude-auth`,{method:`POST`})).json();if(e.started){n(!0),f(!0),o(!1);for(let e=0;e<120;e++)if(await new Promise(e=>setTimeout(e,2e3)),(await(await fetch(`/api/onboarding/claude-auth`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`wait`})})).json()).authenticated){await fetch(`/api/onboarding/claude-auth`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`stop`})}),u(`enter-pin`);return}l(`Timed out waiting for sign-in. Try again.`),n(!1)}else e.error&&l(e.error)}catch(e){console.error(`[admin] auth flow error:`,e),l(`Could not start auth flow.`)}o(!1)}async function y(){await fetch(`/api/onboarding/claude-auth`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`stop`})}),n(!1),l(``)}return t||d?(0,h.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,height:`100dvh`,overflow:`auto`},children:[(0,h.jsxs)(`header`,{className:`chat-header`,style:{paddingBottom:`12px`,flexShrink:0,position:`relative`,maxWidth:`680px`,width:`100%`,margin:`0 auto`,padding:`24px 20px 12px`},children:[t?(0,h.jsx)(`button`,{onClick:y,style:{position:`absolute`,top:`12px`,right:`12px`,background:`none`,border:`none`,color:`#999`,fontSize:`13px`,cursor:`pointer`,padding:`4px 8px`},"aria-label":`Cancel`,children:`✕`}):(0,h.jsx)(`button`,{onClick:()=>f(!1),style:{position:`absolute`,top:`12px`,right:`12px`,background:`none`,border:`none`,color:`#999`,fontSize:`13px`,cursor:`pointer`,padding:`4px 8px`},"aria-label":`Close browser`,children:`✕`}),(0,h.jsx)(`img`,{src:`/brand/claude.png`,alt:`Claude`,className:`chat-logo`}),(0,h.jsx)(`h1`,{className:`chat-tagline`,children:`Connect Claude`}),(0,h.jsx)(`p`,{className:`chat-intro`,children:t?`Sign in and authorize in the browser below.`:`Open your email or prepare your accounts, then sign in.`}),!t&&(0,h.jsx)(`div`,{style:{marginTop:`12px`},children:(0,h.jsx)(s,{variant:`primary`,onClick:v,disabled:i,children:i?(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(`span`,{className:`spin`,style:{display:`inline-block`},children:`✱`}),` Connecting…`]}):`Sign in to Claude`})})]}),(0,h.jsx)(`div`,{style:{flex:1,display:`flex`,flexDirection:`column`,minHeight:0,gap:`10px`,padding:`0 0 16px`},children:(0,h.jsx)(`iframe`,{src:`/vnc-viewer.html`,style:{flex:1,width:`100%`,minHeight:0,border:`none`,background:`#111`,display:`block`},title:`Claude Sign-in`})}),c&&(0,h.jsx)(`p`,{className:`admin-pin-error`,style:{textAlign:`center`,padding:`0 20px 16px`},children:c})]}):(0,h.jsx)(`div`,{className:`connect-page`,children:(0,h.jsxs)(`div`,{className:`connect-content`,children:[(0,h.jsxs)(`div`,{className:`connect-logos`,children:[(0,h.jsx)(`div`,{className:`connect-logo-wrap`,children:(0,h.jsx)(`img`,{src:`/brand/claude.png`,alt:`Claude`,className:`connect-logo`})}),(0,h.jsx)(`svg`,{className:`connect-arrow`,viewBox:`0 0 48 24`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,children:(0,h.jsx)(`path`,{d:`M0 12h44m0 0l-8-8m8 8l-8 8`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`})}),(0,h.jsxs)(`div`,{className:`connect-logo-wrap`,children:[(0,h.jsx)(`img`,{src:a,alt:r.productName,className:`connect-logo connect-logo--maxy`}),!r.logoContainsName&&(0,h.jsx)(`span`,{className:`connect-logo-label`,children:r.productName})]})]}),(0,h.jsxs)(`h1`,{className:`connect-title`,children:[`Connect Claude to power `,r.productName]}),(0,h.jsx)(`p`,{className:`connect-subtitle`,children:`Sign in with your Anthropic account to get started.`}),(0,h.jsx)(s,{variant:`primary`,onClick:v,disabled:i,children:i?(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(`span`,{className:`spin`,style:{display:`inline-block`},children:`✱`}),` Connecting…`]}):`Sign in to Claude`}),(0,h.jsx)(`p`,{style:{marginTop:`6px`,fontSize:`11px`,color:`#999`,maxWidth:`300px`,textAlign:`center`,lineHeight:`1.4`},children:`First time? You may need to sign into your email and Anthropic account in the browser before connecting.`}),(0,h.jsx)(`button`,{onClick:_,disabled:m,style:{marginTop:`12px`,background:`none`,border:`none`,color:`var(--color-primary, #666)`,fontSize:`13px`,cursor:`pointer`,textDecoration:`underline`,textUnderlineOffset:`3px`},children:m?`Launching…`:`Open browser first`}),c&&(0,h.jsx)(`p`,{className:`admin-pin-error`,children:c})]})})}function b({auth:e}){return e.appState===`loading`?(0,h.jsx)(`div`,{className:`connect-page`}):e.appState===`set-pin`?(0,h.jsx)(_,{pin:e.pin,setPin:e.setPin,showPin:e.showPin,setShowPin:e.setShowPin,pinLoading:e.pinLoading,pinError:e.pinError,pinInputRef:e.pinInputRef,setPinFormRef:e.setPinFormRef,onSubmit:e.handleSetPin,operatorName:e.operatorName,setOperatorName:e.setOperatorName}):e.appState===`connect-claude`?(0,h.jsx)(y,{authPolling:e.authPolling,setAuthPolling:e.setAuthPolling,authLoading:e.authLoading,setAuthLoading:e.setAuthLoading,pinError:e.pinError,setPinError:e.setPinError,setAppState:e.setAppState}):e.appState===`enter-pin`?(0,h.jsx)(v,{pin:e.pin,setPin:e.setPin,showPin:e.showPin,setShowPin:e.setShowPin,pinLoading:e.pinLoading,pinError:e.pinError,pinInputRef:e.pinInputRef,onSubmit:e.handleLogin,remoteAuthEnabled:e.remoteAuthEnabled,onSignOutRemote:()=>{console.info(`[admin-ui] remote-auth sign-out → /__remote-auth/logout`),window.location.href=`/__remote-auth/logout`}}):null}export{m as n,b as t};
@@ -1 +0,0 @@
1
- import{V as e,W as t}from"./useSubAccountSwitcher-BCOl64pj.js";import"./admin-types-DJoj6VJv.js";import"./AdminShell-B7rclo3t.js";import{n}from"./page-CjhCRrp2.js";var r=t(),i=e();(0,r.createRoot)(document.getElementById(`root`)).render((0,i.jsx)(n,{}));