@rubytech/create-maxy-code 0.1.376 → 0.1.378

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 (164) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +25 -4
  3. package/payload/platform/plugins/docs/references/admin-ui.md +24 -3
  4. package/payload/platform/scripts/lib/read-brand-json.sh +19 -0
  5. package/payload/platform/scripts/seed-neo4j.sh +44 -3
  6. package/payload/platform/services/claude-session-manager/dist/config.d.ts +9 -0
  7. package/payload/platform/services/claude-session-manager/dist/config.d.ts.map +1 -1
  8. package/payload/platform/services/claude-session-manager/dist/config.js +15 -1
  9. package/payload/platform/services/claude-session-manager/dist/config.js.map +1 -1
  10. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
  11. package/payload/platform/services/claude-session-manager/dist/http-server.js +100 -13
  12. package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
  13. package/payload/platform/services/claude-session-manager/dist/index.js +29 -5
  14. package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
  15. package/payload/platform/services/claude-session-manager/dist/stuck-turn-recover.d.ts +6 -3
  16. package/payload/platform/services/claude-session-manager/dist/stuck-turn-recover.d.ts.map +1 -1
  17. package/payload/platform/services/claude-session-manager/dist/stuck-turn-recover.js +2 -2
  18. package/payload/platform/services/claude-session-manager/dist/stuck-turn-recover.js.map +1 -1
  19. package/payload/server/{chunk-Y4SHSFGK.js → chunk-AQO6KLIH.js} +22 -0
  20. package/payload/server/maxy-edge.js +1 -1
  21. package/payload/server/public/assets/AdminLoginScreens-B9u1V35g.js +1 -0
  22. package/payload/server/public/assets/AdminShell-C2UXTLSB.js +1 -0
  23. package/payload/server/public/assets/{Checkbox-C3efsnUI.js → Checkbox-B2g2SCpw.js} +1 -1
  24. package/payload/server/public/assets/admin-CRBQgWsm.js +1 -0
  25. package/payload/server/public/assets/{arc-Crkz45LN.js → arc-JgkiMDpu.js} +1 -1
  26. package/payload/server/public/assets/architecture-YZFGNWBL-Dh5BzVzk.js +1 -0
  27. package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-C9JThHgP.js → architectureDiagram-Q4EWVU46-CyIbl1bD.js} +1 -1
  28. package/payload/server/public/assets/{blockDiagram-DXYQGD6D-DpsV_HXT.js → blockDiagram-DXYQGD6D-CkcZVblf.js} +1 -1
  29. package/payload/server/public/assets/{browser-CCUgMt_X.js → browser-B8omhYsK.js} +1 -1
  30. package/payload/server/public/assets/{c4Diagram-AHTNJAMY-CTm_6aKi.js → c4Diagram-AHTNJAMY-VByNuobb.js} +1 -1
  31. package/payload/server/public/assets/calendar-Blb-5arm.js +1 -0
  32. package/payload/server/public/assets/channel-CFHc3PQ7.js +1 -0
  33. package/payload/server/public/assets/chat--1ajLxwi.js +1 -0
  34. package/payload/server/public/assets/{chunk-2KRD3SAO-1KSJW1q6.js → chunk-2KRD3SAO-BFwiGcqo.js} +1 -1
  35. package/payload/server/public/assets/{chunk-336JU56O-C3t08Ip-.js → chunk-336JU56O-BMCBU-vf.js} +2 -2
  36. package/payload/server/public/assets/chunk-426QAEUC-De9_O1hi.js +1 -0
  37. package/payload/server/public/assets/{chunk-4BX2VUAB-kl1ze33n.js → chunk-4BX2VUAB-RfOeo8_F.js} +1 -1
  38. package/payload/server/public/assets/{chunk-4TB4RGXK-DxpoDoHg.js → chunk-4TB4RGXK-B5xbgonc.js} +1 -1
  39. package/payload/server/public/assets/{chunk-55IACEB6-WM9VJzha.js → chunk-55IACEB6-K8U55ikJ.js} +1 -1
  40. package/payload/server/public/assets/{chunk-5FUZZQ4R-CLH63ZH3.js → chunk-5FUZZQ4R-DgmmsrAc.js} +1 -1
  41. package/payload/server/public/assets/{chunk-5PVQY5BW-DCTb8IAT.js → chunk-5PVQY5BW-DQ6rtehF.js} +1 -1
  42. package/payload/server/public/assets/{chunk-67CJDMHE-BSYzyaoH.js → chunk-67CJDMHE-CC2kfpmQ.js} +1 -1
  43. package/payload/server/public/assets/{chunk-7N4EOEYR-CarJ7O2P.js → chunk-7N4EOEYR-BClZ5bzw.js} +1 -1
  44. package/payload/server/public/assets/{chunk-AA7GKIK3-DTNLyBpH.js → chunk-AA7GKIK3-adtwAFKX.js} +1 -1
  45. package/payload/server/public/assets/{chunk-BSJP7CBP-BFmHflHY.js → chunk-BSJP7CBP-fKY1UWEd.js} +1 -1
  46. package/payload/server/public/assets/{chunk-CIAEETIT-BpjG0IzU.js → chunk-CIAEETIT-knPAMmjG.js} +1 -1
  47. package/payload/server/public/assets/{chunk-EDXVE4YY-2fSowhlW.js → chunk-EDXVE4YY-C7FRKZ5e.js} +1 -1
  48. package/payload/server/public/assets/{chunk-ENJZ2VHE-ClcranGV.js → chunk-ENJZ2VHE-0cgFfv3z.js} +1 -1
  49. package/payload/server/public/assets/{chunk-FMBD7UC4-DLq4BItQ.js → chunk-FMBD7UC4-Dm_Hcblb.js} +1 -1
  50. package/payload/server/public/assets/{chunk-FOC6F5B3-B9QI3Guz.js → chunk-FOC6F5B3-CfCJNXmK.js} +1 -1
  51. package/payload/server/public/assets/{chunk-ICPOFSXX-BAr-Mv1Z.js → chunk-ICPOFSXX-xeu6qrZj.js} +2 -2
  52. package/payload/server/public/assets/{chunk-K5T4RW27-8PvAHasY.js → chunk-K5T4RW27-BQDCSuTh.js} +1 -1
  53. package/payload/server/public/assets/{chunk-KGLVRYIC--aGaDRH5.js → chunk-KGLVRYIC-D6fFAgbM.js} +1 -1
  54. package/payload/server/public/assets/{chunk-LIHQZDEY-BrWj7mw2.js → chunk-LIHQZDEY-Dskwlc-K.js} +1 -1
  55. package/payload/server/public/assets/{chunk-ORNJ4GCN-kYQmkMTi.js → chunk-ORNJ4GCN-CnHIrJeA.js} +1 -1
  56. package/payload/server/public/assets/{chunk-OYMX7WX6-CIsryCWH.js → chunk-OYMX7WX6-B4bnsPkv.js} +1 -1
  57. package/payload/server/public/assets/chunk-QZHKN3VN-COwe7oXR.js +1 -0
  58. package/payload/server/public/assets/{chunk-U2HBQHQK-68X653e3.js → chunk-U2HBQHQK-BeEXzOqV.js} +1 -1
  59. package/payload/server/public/assets/{chunk-X2U36JSP-v3v9soX3.js → chunk-X2U36JSP-D2rpgOqd.js} +1 -1
  60. package/payload/server/public/assets/{chunk-XPW4576I-CW5DPpop.js → chunk-XPW4576I-D-yT82Xf.js} +1 -1
  61. package/payload/server/public/assets/{chunk-YZCP3GAM-B1VP7Rl2.js → chunk-YZCP3GAM-DqxlLBm1.js} +1 -1
  62. package/payload/server/public/assets/{chunk-ZZ45TVLE-DiJrujNY.js → chunk-ZZ45TVLE-CA_Ep0OM.js} +1 -1
  63. package/payload/server/public/assets/classDiagram-6PBFFD2Q-wjL65qaU.js +1 -0
  64. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-D_EIplVd.js +1 -0
  65. package/payload/server/public/assets/clone-CEczy_Ef.js +1 -0
  66. package/payload/server/public/assets/{cose-bilkent-S5V4N54A-BscXxLMc.js → cose-bilkent-S5V4N54A-DWb9mxTa.js} +1 -1
  67. package/payload/server/public/assets/{dagre-MBv6WlCS.js → dagre-B3K7jxOZ.js} +1 -1
  68. package/payload/server/public/assets/{dagre-KV5264BT-DVgGlTQ1.js → dagre-KV5264BT-BhiTISRq.js} +1 -1
  69. package/payload/server/public/assets/data-BYUmu98z.js +1 -0
  70. package/payload/server/public/assets/{diagram-5BDNPKRD-BmhCaO0a.js → diagram-5BDNPKRD-D5yBIDpm.js} +1 -1
  71. package/payload/server/public/assets/{diagram-G4DWMVQ6-ChU9L8vz.js → diagram-G4DWMVQ6-CSTE1S4d.js} +1 -1
  72. package/payload/server/public/assets/{diagram-MMDJMWI5-Oy409Zc_.js → diagram-MMDJMWI5-D8llv4XY.js} +1 -1
  73. package/payload/server/public/assets/{diagram-TYMM5635-Cn1YByqk.js → diagram-TYMM5635-CITQ7aDM.js} +1 -1
  74. package/payload/server/public/assets/{erDiagram-SMLLAGMA-e17yfLvr.js → erDiagram-SMLLAGMA-BjR5nlmv.js} +1 -1
  75. package/payload/server/public/assets/{flatten-Cl1Bc3dR.js → flatten-DhYYI_lo.js} +1 -1
  76. package/payload/server/public/assets/{flowDiagram-DWJPFMVM-Dqt7sCVZ.js → flowDiagram-DWJPFMVM-Dl6e-E0f.js} +1 -1
  77. package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-B4IhwS2r.js → ganttDiagram-T4ZO3ILL-CppkrFAl.js} +1 -1
  78. package/payload/server/public/assets/gitGraph-7Q5UKJZL-KHAc7IxG.js +1 -0
  79. package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-BDw-PKcI.js → gitGraphDiagram-UUTBAWPF-clV_tnwa.js} +1 -1
  80. package/payload/server/public/assets/{graph-mt6Y1RAt.js → graph-DJOKFr_s.js} +3 -3
  81. package/payload/server/public/assets/{graph-labels-BuKswZHJ.js → graph-labels-DFdBydWC.js} +1 -1
  82. package/payload/server/public/assets/{graphlib-DPIYk_sg.js → graphlib-Cnk6WL-8.js} +1 -1
  83. package/payload/server/public/assets/info-OMHHGYJF-C6nm3sYf.js +1 -0
  84. package/payload/server/public/assets/infoDiagram-42DDH7IO-DhwCejsr.js +2 -0
  85. package/payload/server/public/assets/{isEmpty-D1pGOD1J.js → isEmpty-DGhq_DBP.js} +1 -1
  86. package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-BRIHsB3G.js → ishikawaDiagram-UXIWVN3A-DUqusmP1.js} +1 -1
  87. package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-aKNgmoHd.js → journeyDiagram-VCZTEJTY-RMEvGtDJ.js} +1 -1
  88. package/payload/server/public/assets/{kanban-definition-6JOO6SKY-cwBwT-nm.js → kanban-definition-6JOO6SKY-BxkwQPCP.js} +1 -1
  89. package/payload/server/public/assets/{line-DVtVRzUA.js → line-CiOuSBlJ.js} +1 -1
  90. package/payload/server/public/assets/{linear-DtoOFPO2.js → linear-D22sItNm.js} +1 -1
  91. package/payload/server/public/assets/{mermaid-parser.core-G7YD_zO3.js → mermaid-parser.core-kvN8ajT-.js} +2 -2
  92. package/payload/server/public/assets/{mermaid.core-DpFyndHm.js → mermaid.core-DKHTTwbg.js} +3 -3
  93. package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-CYXK_Pvz.js → mindmap-definition-QFDTVHPH-CKUJxwdG.js} +1 -1
  94. package/payload/server/public/assets/operator-DUVqlubZ.js +1 -0
  95. package/payload/server/public/assets/{ordinal-CBZeH4Yp.js → ordinal-CibZU3PM.js} +1 -1
  96. package/payload/server/public/assets/packet-4T2RLAQJ-z-APhyNH.js +1 -0
  97. package/payload/server/public/assets/page-BMeSKYGZ.js +32 -0
  98. package/payload/server/public/assets/page-DBkTNfei.js +1 -0
  99. package/payload/server/public/assets/pie-ZZUOXDRM-D_HVZjir.js +1 -0
  100. package/payload/server/public/assets/{pieDiagram-DEJITSTG-DFo4N6WH.js → pieDiagram-DEJITSTG-CRMabeJN.js} +1 -1
  101. package/payload/server/public/assets/{public-CHqiiZCo.js → public-CGl0i1f-.js} +1 -1
  102. package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-BlH5iIhl.js → quadrantDiagram-34T5L4WZ-DcrlhDuj.js} +1 -1
  103. package/payload/server/public/assets/radar-PYXPWWZC-DtKBIb3o.js +1 -0
  104. package/payload/server/public/assets/{reduce-PuPlFPRX.js → reduce-Da0RBva0.js} +1 -1
  105. package/payload/server/public/assets/{requirementDiagram-MS252O5E-D5WLty8A.js → requirementDiagram-MS252O5E-DP231rM_.js} +1 -1
  106. package/payload/server/public/assets/{rotate-ccw-BkFK-J9e.js → rotate-ccw-Cg_V4XIU.js} +1 -1
  107. package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-vB85IxHG.js → sankeyDiagram-XADWPNL6--HM5_dC8.js} +1 -1
  108. package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-Cxraa0Ee.js → sequenceDiagram-FGHM5R23-BsiVmDR9.js} +1 -1
  109. package/payload/server/public/assets/{stateDiagram-FHFEXIEX-BBPssYBx.js → stateDiagram-FHFEXIEX-Cjdhqdjh.js} +1 -1
  110. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-6v4alr7n.js +1 -0
  111. package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-Bgk6PT62.js → timeline-definition-GMOUNBTQ-Cf5xPmSA.js} +1 -1
  112. package/payload/server/public/assets/treeView-SZITEDCU-DbXWs029.js +1 -0
  113. package/payload/server/public/assets/treemap-W4RFUUIX-DUGgqAs9.js +1 -0
  114. package/payload/server/public/assets/useSubAccountSwitcher-DAgBUed_.js +9 -0
  115. package/payload/server/public/assets/{vennDiagram-DHZGUBPP-B-APTs3L.js → vennDiagram-DHZGUBPP-PCor55Sw.js} +1 -1
  116. package/payload/server/public/assets/wardley-RL74JXVD-Cjn85RON.js +1 -0
  117. package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-CkXJSs_i.js → wardleyDiagram-NUSXRM2D-bokCHsim.js} +1 -1
  118. package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-BkyshPMV.js → xychartDiagram-5P7HB3ND-B2YnsUoQ.js} +1 -1
  119. package/payload/server/public/browser.html +3 -3
  120. package/payload/server/public/calendar.html +3 -3
  121. package/payload/server/public/chat.html +6 -6
  122. package/payload/server/public/data.html +4 -3
  123. package/payload/server/public/graph.html +6 -6
  124. package/payload/server/public/index.html +7 -5
  125. package/payload/server/public/operator.html +8 -8
  126. package/payload/server/public/public.html +6 -6
  127. package/payload/server/server.js +49 -36
  128. package/payload/server/public/assets/AdminLoginScreens-C-LlR7j1.js +0 -1
  129. package/payload/server/public/assets/AdminShell-B7rclo3t.js +0 -1
  130. package/payload/server/public/assets/admin-DVYD__OE.js +0 -1
  131. package/payload/server/public/assets/architecture-YZFGNWBL-Dma4Bgha.js +0 -1
  132. package/payload/server/public/assets/calendar-B3jQEPFX.js +0 -1
  133. package/payload/server/public/assets/channel-B_-5bau1.js +0 -1
  134. package/payload/server/public/assets/chat-IcD9N2mi.js +0 -1
  135. package/payload/server/public/assets/chunk-426QAEUC-Dirxdwjh.js +0 -1
  136. package/payload/server/public/assets/chunk-QZHKN3VN-Duipo1kI.js +0 -1
  137. package/payload/server/public/assets/classDiagram-6PBFFD2Q-B3kX5SuB.js +0 -1
  138. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-D761c7Lr.js +0 -1
  139. package/payload/server/public/assets/clone-BrhFv6Tb.js +0 -1
  140. package/payload/server/public/assets/data-Z84n0KXb.js +0 -1
  141. package/payload/server/public/assets/gitGraph-7Q5UKJZL-BCQAqtLy.js +0 -1
  142. package/payload/server/public/assets/info-OMHHGYJF-qU7hK50T.js +0 -1
  143. package/payload/server/public/assets/infoDiagram-42DDH7IO-KGdcJeTs.js +0 -2
  144. package/payload/server/public/assets/operator-CDQ6eQ5M.js +0 -1
  145. package/payload/server/public/assets/packet-4T2RLAQJ-DiU2yS9m.js +0 -1
  146. package/payload/server/public/assets/page-CjhCRrp2.js +0 -32
  147. package/payload/server/public/assets/pie-ZZUOXDRM-zHUKKlVv.js +0 -1
  148. package/payload/server/public/assets/radar-PYXPWWZC-BUnVoaPg.js +0 -1
  149. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-BWmmUwDt.js +0 -1
  150. package/payload/server/public/assets/treeView-SZITEDCU-C3Y-Q52h.js +0 -1
  151. package/payload/server/public/assets/treemap-W4RFUUIX-Dk0qZpAg.js +0 -1
  152. package/payload/server/public/assets/useSubAccountSwitcher-BCOl64pj.js +0 -9
  153. package/payload/server/public/assets/wardley-RL74JXVD-BAWI02OA.js +0 -1
  154. /package/payload/server/public/assets/{_baseFor-brRjpUOX.js → _baseFor-BFYpZGkN.js} +0 -0
  155. /package/payload/server/public/assets/{array-BGFCBI0e.js → array-CYkMkqnU.js} +0 -0
  156. /package/payload/server/public/assets/{cytoscape.esm-TvRJ2tGX.js → cytoscape.esm-DqlHsaog.js} +0 -0
  157. /package/payload/server/public/assets/{defaultLocale-CRZydyG6.js → defaultLocale-Beh6XjaL.js} +0 -0
  158. /package/payload/server/public/assets/{dist-B0CkUodR.js → dist-BMqkacmt.js} +0 -0
  159. /package/payload/server/public/assets/{init-B8gtcn7T.js → init-Rr1s_RiX.js} +0 -0
  160. /package/payload/server/public/assets/{katex-RxgSu_dy.js → katex-pVJiI_rc.js} +0 -0
  161. /package/payload/server/public/assets/{path-DZF-JdEe.js → path-BAQ3hXlG.js} +0 -0
  162. /package/payload/server/public/assets/{preload-helper-CQ36nxok.js → preload-helper-B_l5jfgx.js} +0 -0
  163. /package/payload/server/public/assets/{rough.esm-6CnTHTkH.js → rough.esm-nHaDi0Kw.js} +0 -0
  164. /package/payload/server/public/assets/{src-CR_MU8uy.js → src-CsEKjNXD.js} +0 -0
@@ -41,6 +41,7 @@ import {
41
41
  embed,
42
42
  emitMissingOnResolve,
43
43
  ensureConversation,
44
+ fetchAccountName,
44
45
  fetchBranding,
45
46
  findMissingPlugins,
46
47
  findRecentConversation,
@@ -109,7 +110,7 @@ import {
109
110
  vncLog,
110
111
  walkPremiumBundles,
111
112
  writeAdminUserAndPerson
112
- } from "./chunk-Y4SHSFGK.js";
113
+ } from "./chunk-AQO6KLIH.js";
113
114
  import {
114
115
  __commonJS,
115
116
  __toESM
@@ -8714,9 +8715,9 @@ var WEBCHAT_ADMIN_KEY = "webchat-admin";
8714
8715
  var UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
8715
8716
  function locateSession(sessionId) {
8716
8717
  const dir = findSessionProjectDir(sessionId);
8717
- if (!dir) return { projectDir: null, channel: null };
8718
+ if (!dir) return { projectDir: null, channel: null, accountId: null };
8718
8719
  const meta = readSidecarMeta(join18(dir, `${sessionId}.meta.json`));
8719
- return { projectDir: dir, channel: meta.channel };
8720
+ return { projectDir: dir, channel: meta.channel, accountId: meta.accountId };
8720
8721
  }
8721
8722
  function locateSidecar(sessionId) {
8722
8723
  const cfg = claudeConfigDir();
@@ -8732,7 +8733,7 @@ function locateSidecar(sessionId) {
8732
8733
  const metaPath = join18(projectsRoot, slug, `${sessionId}.meta.json`);
8733
8734
  if (existsSync10(metaPath)) {
8734
8735
  const meta = readSidecarMeta(metaPath);
8735
- return { channel: meta.channel, adminUserId: meta.adminUserId };
8736
+ return { channel: meta.channel, adminUserId: meta.adminUserId, accountId: meta.accountId };
8736
8737
  }
8737
8738
  }
8738
8739
  return null;
@@ -9010,6 +9011,7 @@ function createWebchatRoutes(deps) {
9010
9011
  }
9011
9012
  let deliveryKey = WEBCHAT_ADMIN_KEY;
9012
9013
  let deliverySessionId;
9014
+ let deliveryAccountId = accountId;
9013
9015
  const explicitTarget = target !== void 0;
9014
9016
  if (target === void 0) {
9015
9017
  const latest = latestAdminWebchatSessionId(requesterUserId, primaryUserId, scopeAccountId, multiAccount);
@@ -9022,7 +9024,7 @@ function createWebchatRoutes(deps) {
9022
9024
  }
9023
9025
  }
9024
9026
  if (target !== void 0) {
9025
- let { projectDir, channel } = locateSession(target);
9027
+ let { projectDir, channel, accountId: sessionAccountId } = locateSession(target);
9026
9028
  if (projectDir === null) {
9027
9029
  const sidecar = locateSidecar(target);
9028
9030
  if (sidecar === null) {
@@ -9030,6 +9032,7 @@ function createWebchatRoutes(deps) {
9030
9032
  return c.json({ error: "session not found" }, 404);
9031
9033
  }
9032
9034
  channel = sidecar.channel;
9035
+ sessionAccountId = sidecar.accountId;
9033
9036
  }
9034
9037
  const binding = conflictingBinding(channel);
9035
9038
  if (binding !== null) {
@@ -9038,6 +9041,7 @@ function createWebchatRoutes(deps) {
9038
9041
  }
9039
9042
  deliveryKey = `session:${target}`;
9040
9043
  deliverySessionId = target;
9044
+ deliveryAccountId = sessionAccountId ?? accountId;
9041
9045
  }
9042
9046
  if (isMultipart) {
9043
9047
  const kind = files.some((f) => isAudioMime(f.type)) ? "voice" : "files";
@@ -9114,7 +9118,7 @@ ${note}` : note;
9114
9118
  }
9115
9119
  const adminUserId = requesterUserId ?? void 0;
9116
9120
  if (deliverySessionId !== void 0) {
9117
- await deps.handleInbound({ role: "admin", accountId, key: deliveryKey, text, sessionId: deliverySessionId, adminUserId });
9121
+ await deps.handleInbound({ role: "admin", accountId: deliveryAccountId, key: deliveryKey, text, sessionId: deliverySessionId, adminUserId });
9118
9122
  } else {
9119
9123
  await deps.handleInbound({ role: "admin", accountId: bootstrapAccountId, key: deliveryKey, text, adminUserId });
9120
9124
  }
@@ -10443,12 +10447,7 @@ async function createAdminSession(accountId, thinkingView, userId, userName, rol
10443
10447
  const cacheKey = fingerprintSessionKey(signedSessionToken);
10444
10448
  registerSession(cacheKey, "admin", accountId, void 0, userId, userName, role);
10445
10449
  if (userId) setWantsPriorConversation(cacheKey);
10446
- let businessName;
10447
- try {
10448
- const branding = await fetchBranding(accountId);
10449
- businessName = branding?.name || void 0;
10450
- } catch {
10451
- }
10450
+ const businessName = await fetchAccountName(accountId) || void 0;
10452
10451
  let initialSessionId = null;
10453
10452
  try {
10454
10453
  const ensured = await ensureConversation(
@@ -10486,12 +10485,7 @@ function operatorRoleFor(config, userId) {
10486
10485
  async function buildAccountOptionList(accounts, userId) {
10487
10486
  return Promise.all(
10488
10487
  accounts.map(async (a) => {
10489
- let businessName;
10490
- try {
10491
- const branding = await fetchBranding(a.accountId);
10492
- businessName = branding?.name || void 0;
10493
- } catch {
10494
- }
10488
+ const businessName = await fetchAccountName(a.accountId) || void 0;
10495
10489
  return { accountId: a.accountId, businessName, role: operatorRoleFor(a.config, userId) };
10496
10490
  })
10497
10491
  );
@@ -10512,12 +10506,7 @@ app11.get("/", async (c) => {
10512
10506
  }
10513
10507
  const account = resolveAccount();
10514
10508
  const thinkingView = account?.config.thinkingView ?? "default";
10515
- let businessName;
10516
- try {
10517
- const branding = await fetchBranding(accountId);
10518
- businessName = branding?.name || void 0;
10519
- } catch {
10520
- }
10509
+ const businessName = await fetchAccountName(accountId) || void 0;
10521
10510
  const role = getRoleForSession(cacheKey);
10522
10511
  console.log(`[admin-session] role=${role ?? "null"} cacheKey=${cacheKey.slice(0, 8)} phase=restore`);
10523
10512
  const restoredUserId = getUserIdForSession(cacheKey);
@@ -16292,8 +16281,10 @@ app29.post("/", requireAdminSession, async (c) => {
16292
16281
  return c.json({ error: "sessionId must be a v4 UUID" }, 400);
16293
16282
  }
16294
16283
  const base = managerBase("session-delete:wrapper");
16284
+ const accountId = getAccountIdForSession(c.var.cacheKey);
16285
+ const acctQuery = accountId ? `?accountId=${encodeURIComponent(accountId)}` : "";
16295
16286
  try {
16296
- const stop = await fetch(`${base}/${sessionId}/stop`, { method: "POST" });
16287
+ const stop = await fetch(`${base}/${sessionId}/stop${acctQuery}`, { method: "POST" });
16297
16288
  if (stop.status !== 204 && stop.status !== 200 && stop.status !== 404) {
16298
16289
  console.error(`[session-delete] sessionId=${sessionId} stop-status=${stop.status}`);
16299
16290
  return c.json({ error: `stop-failed-${stop.status}` }, 502);
@@ -16304,7 +16295,7 @@ app29.post("/", requireAdminSession, async (c) => {
16304
16295
  }
16305
16296
  let del;
16306
16297
  try {
16307
- del = await fetch(`${base}/${sessionId}`, { method: "DELETE" });
16298
+ del = await fetch(`${base}/${sessionId}${acctQuery}`, { method: "DELETE" });
16308
16299
  } catch (err) {
16309
16300
  console.error(`[session-delete] sessionId=${sessionId} delete-unreachable err=${err instanceof Error ? err.message : String(err)}`);
16310
16301
  return c.json({ error: "manager-unreachable" }, 502);
@@ -16333,9 +16324,11 @@ app30.post("/", requireAdminSession, async (c) => {
16333
16324
  if (!SESSION_ID_RE2.test(sessionId)) {
16334
16325
  return c.json({ error: "sessionId must be a v4 UUID" }, 400);
16335
16326
  }
16327
+ const accountId = getAccountIdForSession(c.var.cacheKey);
16328
+ const acctQuery = accountId ? `?accountId=${encodeURIComponent(accountId)}` : "";
16336
16329
  let res;
16337
16330
  try {
16338
- res = await fetch(`${managerBase("session-stop:wrapper")}/${sessionId}/stop`, { method: "POST" });
16331
+ res = await fetch(`${managerBase("session-stop:wrapper")}/${sessionId}/stop${acctQuery}`, { method: "POST" });
16339
16332
  } catch (err) {
16340
16333
  console.error(`[session-stop] sessionId=${sessionId} manager-unreachable err=${err instanceof Error ? err.message : String(err)}`);
16341
16334
  return c.json({ error: "manager-unreachable" }, 502);
@@ -16447,7 +16440,7 @@ var session_rename_default = app32;
16447
16440
  // server/routes/admin/session-rc-spawn.ts
16448
16441
  import { randomUUID as randomUUID10 } from "crypto";
16449
16442
  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) {
16443
+ function resolveSpawnPlan(host, operatorDomains, body, mintId = randomUUID10, adminUserId, authenticatedName, callerAccountId) {
16451
16444
  const operator = isOperatorHost(host, operatorDomains);
16452
16445
  const resumeId = typeof body.sessionId === "string" && body.sessionId.length > 0 ? body.sessionId : void 0;
16453
16446
  const name = typeof body.name === "string" && body.name.length > 0 ? body.name : void 0;
@@ -16457,7 +16450,9 @@ function resolveSpawnPlan(host, operatorDomains, body, mintId = randomUUID10, ad
16457
16450
  const pickedModel = kind === "new" && typeof body.model === "string" && isSelectableModel(body.model) ? body.model : null;
16458
16451
  const pickedEffort = kind === "new" && typeof body.effort === "string" && isNewSessionEffortLevel(body.effort) ? body.effort : null;
16459
16452
  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;
16453
+ const callerTargetAccountId = typeof callerAccountId === "string" && ACCOUNT_UUID_RE2.test(callerAccountId) ? callerAccountId : void 0;
16454
+ const bodyTargetAccountId = typeof body.targetAccountId === "string" && ACCOUNT_UUID_RE2.test(body.targetAccountId) ? body.targetAccountId : void 0;
16455
+ const targetAccountId = kind === "new" ? callerTargetAccountId : bodyTargetAccountId;
16461
16456
  const payload = {};
16462
16457
  let sessionId;
16463
16458
  if (webchatBind) {
@@ -16500,7 +16495,7 @@ app33.post("/", requireAdminSession, async (c) => {
16500
16495
  const adminUserId = cacheKey ? getUserIdForSession(cacheKey) : void 0;
16501
16496
  const accountId = cacheKey ? getAccountIdForSession(cacheKey) : void 0;
16502
16497
  const authenticatedName = accountId ? await resolveAuthenticatedName(accountId, adminUserId) : void 0;
16503
- const plan = resolveSpawnPlan(host, getOperatorDomains(), body, randomUUID10, adminUserId, authenticatedName);
16498
+ const plan = resolveSpawnPlan(host, getOperatorDomains(), body, randomUUID10, adminUserId, authenticatedName, accountId);
16504
16499
  const spawnReqId = randomUUID10();
16505
16500
  console.log(
16506
16501
  `[chat-spawn] op=request spawnReqId=${spawnReqId} origin=${plan.origin} kind=${plan.kind} sessionId=${plan.kind === "new" ? "new" : plan.sessionId}`
@@ -16508,7 +16503,7 @@ app33.post("/", requireAdminSession, async (c) => {
16508
16503
  if (plan.webchatBind) {
16509
16504
  console.log(`[chat-spawn] op=args spawnReqId=${spawnReqId} webchatChannel=present sessionId=${plan.sessionId}`);
16510
16505
  console.log(
16511
- `[webchat-spawn] op=args sessionId=${plan.sessionId} model=${plan.model ?? "default"} effort=${plan.effort ?? "default"} source=${plan.paramsSource}`
16506
+ `[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
16507
  );
16513
16508
  }
16514
16509
  let res;
@@ -20414,6 +20409,12 @@ function buildWaSpawnRequest(input) {
20414
20409
  role: input.role,
20415
20410
  channel: "whatsapp",
20416
20411
  personId,
20412
+ // Task 1325 — the account whose WhatsApp received this inbound is the
20413
+ // session's own account (the sessionId hashes it). Threading it as
20414
+ // targetAccountId makes a message-triggered resume of a client-account
20415
+ // session resolve under that account, not the manager's boot-time house
20416
+ // default (which fired for every non-webchat resume before this).
20417
+ targetAccountId: input.accountId,
20417
20418
  waChannel: { senderId: input.senderId, gatewayUrl: input.gatewayUrl, serverPath: input.serverPath },
20418
20419
  logContext: `channel=whatsapp-native role=${input.role} senderId=${input.senderId}`
20419
20420
  };
@@ -21723,6 +21724,12 @@ function buildTelegramSpawnRequest(input) {
21723
21724
  role: input.role,
21724
21725
  channel: "telegram",
21725
21726
  personId,
21727
+ // Task 1325 — the account whose Telegram bot received this inbound is the
21728
+ // session's own account (the sessionId hashes it). Threading it as
21729
+ // targetAccountId makes a message-triggered resume of a client-account
21730
+ // session resolve under that account, not the manager's boot-time house
21731
+ // default. Mirror of the WhatsApp builder.
21732
+ targetAccountId: input.accountId,
21726
21733
  telegramChannel: { senderId: input.senderId, gatewayUrl: input.gatewayUrl, serverPath: input.serverPath },
21727
21734
  logContext: `channel=telegram-native role=${input.role} senderId=${input.senderId}`
21728
21735
  };
@@ -22501,12 +22508,14 @@ var webchatGateway = new WebchatGateway({
22501
22508
  senderId: key,
22502
22509
  adminUserId,
22503
22510
  webchatChannel: { key, gatewayUrl, serverPath },
22504
- // Task 1318 — the manager tags the spawned session's sidecar
22511
+ // Task 1318 / 1325 — the manager tags the spawned session's sidecar
22505
22512
  // (meta.accountId) and scopes its ACCOUNT_DIR from this. `accountId`
22506
- // here is exactly what POST /send resolved for this inbound: HOUSE for
22507
- // an existing-session delivery, the viewer's scoped sub-account for a
22508
- // fresh bootstrap the same value the sessionId hash above already
22509
- // used, so the two never disagree.
22513
+ // here is exactly what POST /send resolved for this inbound: the target
22514
+ // session's OWN account for an existing-session delivery (Task 1325
22515
+ // read from its sidecar, so a client-account session resumes under its
22516
+ // own account, never house), the viewer's scoped sub-account for a fresh
22517
+ // bootstrap — the same value the sessionId hash above already used, so
22518
+ // the two never disagree.
22510
22519
  targetAccountId: accountId,
22511
22520
  logContext: `channel=webchat key=${key} role=${role}`
22512
22521
  });
@@ -23270,6 +23279,10 @@ app55.get("/graph", (c) => {
23270
23279
  });
23271
23280
  app55.get("/chat", (c) => {
23272
23281
  const host = (c.req.header("host") ?? "").split(":")[0];
23282
+ if (isOperatorHost(host, getOperatorDomains())) {
23283
+ console.log(`[host-class] host=${host} class=operator served=operator.html`);
23284
+ return c.html(cachedHtml("operator.html"));
23285
+ }
23273
23286
  if (isPublicHost(host)) return c.text("Not found", 404);
23274
23287
  return c.html(cachedHtml("chat.html"));
23275
23288
  });
@@ -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{o as e}from"./chunk-CAM3fms7.js";import{A as t,B as n,C as r,E as i,G as a,I as o,K as s,L as c,M as l,N as u,O as d,T as f,V as p,_ as m,g as h,j as g,m as _,n as ee,t as te,v as ne,x as v,y as re}from"./useSubAccountSwitcher-BCOl64pj.js";async function y(){try{let e=await fetch(`/api/onboarding/claude-auth`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`logout`})});return e.ok?(await e.json().catch(()=>({})))?.logged_out===!0:(console.error(`[admin-ui] claude-logout http-status=${e.status}`),!1)}catch(e){return console.error(`[admin-ui] claude-logout fetch failed: ${e instanceof Error?e.message:String(e)}`),!1}}var b=e(s(),1),x=p(),S={sm:14,md:16,lg:18},ie={sm:30,md:38,lg:46};function C({variant:e=`primary`,size:t=`md`,icon:n,iconPosition:r=`leading`,loading:i=!1,fullWidth:a=!1,disabled:o=!1,type:s=`button`,onClick:c,"aria-label":l,style:u,className:d,children:f}){let p=[`btn`,`btn--${e}`,t===`md`?``:`btn--${t}`,a?`btn--full`:``,d].filter(Boolean).join(` `),m=S[t],h={...e===`send`?{width:ie[t],height:ie[t]}:{},...u},g=Object.keys(h).length>0;return(0,x.jsxs)(`button`,{type:s,className:p,disabled:i||o,onClick:c,"aria-label":l,style:g?h:void 0,children:[(0,x.jsxs)(`span`,{className:`btn__content`,style:{visibility:i?`hidden`:`visible`},children:[n&&r===`leading`&&(0,x.jsx)(n,{size:m}),f,n&&r===`trailing`&&(0,x.jsx)(n,{size:m})]}),i&&(0,x.jsx)(`span`,{className:`btn__spinner`,children:`✱`})]})}var ae=o(`archive-restore`,[[`rect`,{width:`20`,height:`5`,x:`2`,y:`3`,rx:`1`,key:`1wp1u1`}],[`path`,{d:`M4 8v11a2 2 0 0 0 2 2h2`,key:`tvwodi`}],[`path`,{d:`M20 8v11a2 2 0 0 1-2 2h-2`,key:`1gkqxj`}],[`path`,{d:`m9 15 3-3 3 3`,key:`1pd0qc`}],[`path`,{d:`M12 12v9`,key:`192myk`}]]),w=o(`archive`,[[`rect`,{width:`20`,height:`5`,x:`2`,y:`3`,rx:`1`,key:`1wp1u1`}],[`path`,{d:`M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8`,key:`1s80jp`}],[`path`,{d:`M10 12h4`,key:`a56b0p`}]]),T=o(`bot`,[[`path`,{d:`M12 8V4H8`,key:`hb8ula`}],[`rect`,{width:`16`,height:`12`,x:`4`,y:`8`,rx:`2`,key:`enze0r`}],[`path`,{d:`M2 14h2`,key:`vft8re`}],[`path`,{d:`M20 14h2`,key:`4cs60a`}],[`path`,{d:`M15 13v2`,key:`1xurst`}],[`path`,{d:`M9 13v2`,key:`rq6x2g`}]]),oe=o(`box`,[[`path`,{d:`M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z`,key:`hh9hay`}],[`path`,{d:`m3.3 7 8.7 5 8.7-5`,key:`g66t2b`}],[`path`,{d:`M12 22V12`,key:`d0xqtd`}]]),se=o(`history`,[[`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`}],[`path`,{d:`M12 7v5l4 2`,key:`1fdv2h`}]]),E=o(`list-todo`,[[`path`,{d:`M13 5h8`,key:`a7qcls`}],[`path`,{d:`M13 12h8`,key:`h98zly`}],[`path`,{d:`M13 19h8`,key:`c3s6r1`}],[`path`,{d:`m3 17 2 2 4-4`,key:`1jhpwq`}],[`rect`,{x:`3`,y:`4`,width:`6`,height:`6`,rx:`1`,key:`cif1o7`}]]),ce=o(`message-square`,[[`path`,{d:`M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z`,key:`18887p`}]]),D=o(`plus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]]),O=o(`sliders-horizontal`,[[`path`,{d:`M10 5H3`,key:`1qgfaw`}],[`path`,{d:`M12 19H3`,key:`yhmn1j`}],[`path`,{d:`M14 3v4`,key:`1sua03`}],[`path`,{d:`M16 17v4`,key:`1q0r14`}],[`path`,{d:`M21 12h-9`,key:`1o4lsq`}],[`path`,{d:`M21 19h-5`,key:`1rlt1p`}],[`path`,{d:`M21 5h-7`,key:`1oszz2`}],[`path`,{d:`M8 10v4`,key:`tgpxqk`}],[`path`,{d:`M8 12H3`,key:`a7s4jb`}]]),le=o(`square`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}]]),ue=o(`users`,[[`path`,{d:`M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2`,key:`1yyitq`}],[`path`,{d:`M16 3.128a4 4 0 0 1 0 7.744`,key:`16gr8j`}],[`path`,{d:`M22 21v-2a4 4 0 0 0-3-3.87`,key:`kshegd`}],[`circle`,{cx:`9`,cy:`7`,r:`4`,key:`nufk8`}]]),k=`maxy-shell-side-px`;function A(){if(typeof window>`u`)return 0;let e=document.querySelector(`.platform > .artefact`)?.getBoundingClientRect();return e&&e.width>0?Math.round(e.width):0}function j(e){if(typeof window>`u`)return e;let t=window.innerWidth,n=Math.max(248,t-480-A());return Math.min(Math.max(e,248),n)}function de(){if(typeof window>`u`)return 264;try{let e=window.localStorage.getItem(k);if(!e)return 264;let t=parseInt(e,10);if(!Number.isFinite(t))return console.warn(`[admin-ui] sidebar-width-parse-failed stored=${JSON.stringify(e)} fallback=264`),264;if(t>=248)return j(t)}catch{}return 264}function fe({targetSelector:e=`.platform`}){let t=(0,b.useRef)(null),[n,r]=(0,b.useState)(()=>de()),i=(0,b.useRef)(n);(0,b.useLayoutEffect)(()=>{let t=document.querySelector(e);!t||!(t instanceof HTMLElement)||(t.style.setProperty(`--side-px`,`${n}px`),i.current=n)},[n,e]);let a=(0,b.useCallback)(()=>{r(e=>{let t=j(e);return t===e?e:t})},[]);(0,b.useEffect)(()=>{a(),window.addEventListener(`resize`,a);let t=document.querySelector(e),n=null;return t instanceof HTMLElement&&(n=new MutationObserver(a),n.observe(t,{attributes:!0,attributeFilter:[`data-artefact`,`class`]})),()=>{window.removeEventListener(`resize`,a),n?.disconnect()}},[a,e]);let o=e=>{e.preventDefault();let n=t.current;if(!n)return;n.setPointerCapture(e.pointerId),n.classList.add(`dragging`);let a=!1,o=e=>{a=!0,r(j(Math.round(e.clientX)))},s=()=>{if(n.releasePointerCapture(e.pointerId),n.classList.remove(`dragging`),window.removeEventListener(`pointermove`,o),window.removeEventListener(`pointerup`,s),!a)return;let t=i.current;try{window.localStorage.setItem(k,String(t))}catch{}console.info(`[admin-ui] sidebar-resize px=${t}`)};window.addEventListener(`pointermove`,o),window.addEventListener(`pointerup`,s)},s=()=>{let e=j(264);r(e);try{window.localStorage.removeItem(k)}catch{}console.info(`[admin-ui] sidebar-resize px=${e}`)};return(0,x.jsx)(`div`,{ref:t,className:`side-resize-handle`,role:`separator`,"aria-orientation":`vertical`,"aria-label":`Resize sidebar`,onPointerDown:o,onDoubleClick:s})}var pe=a();function M({anchorRef:e,onClose:t,className:n,role:r,ariaLabel:i,children:a}){let o=(0,b.useRef)(null),[s,c]=(0,b.useState)({position:`fixed`,visibility:`hidden`}),l=(0,b.useCallback)(()=>{let t=e.current,n=o.current;if(!t||!n)return;let r=t.getBoundingClientRect(),i=n.getBoundingClientRect(),a=r.right-i.width;a<4&&(a=4);let s=window.innerHeight-r.bottom<i.height+8&&r.top>i.height+8?r.top-i.height:r.bottom;c({position:`fixed`,left:a,top:s,visibility:`visible`})},[e]);return(0,b.useLayoutEffect)(()=>{if(l(),typeof ResizeObserver>`u`)return;let e=new ResizeObserver(()=>l());return o.current&&e.observe(o.current),()=>e.disconnect()},[l]),(0,b.useEffect)(()=>{let n=e=>{e.key===`Escape`&&t()},r=n=>{let r=n.target;e.current?.contains(r)||o.current?.contains(r)||t()},i=n=>{let r=e.current;r&&n.target instanceof Node&&n.target.contains(r)&&t()},a=()=>t();return document.addEventListener(`keydown`,n),document.addEventListener(`pointerdown`,r),window.addEventListener(`scroll`,i,!0),window.addEventListener(`resize`,a),()=>{document.removeEventListener(`keydown`,n),document.removeEventListener(`pointerdown`,r),window.removeEventListener(`scroll`,i,!0),window.removeEventListener(`resize`,a)}},[e,t]),(0,pe.createPortal)((0,x.jsx)(`div`,{ref:o,className:n,role:r,"aria-label":i,style:s,children:a}),document.body)}function me({action:e,disabled:t,open:n,onToggle:r,onClose:i}){let a=(0,b.useRef)(null);return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(`button`,{ref:a,type:`button`,className:`conv-action`,onClick:r,disabled:t,"aria-haspopup":`dialog`,"aria-expanded":n,"aria-label":e.label,title:e.title,children:e.icon}),n&&(0,x.jsx)(M,{anchorRef:a,onClose:i,className:e.panelClassName,role:`dialog`,ariaLabel:e.label,children:e.panel()})]})}function he({actions:e,disabled:t,collapsed:n}){let[r,i]=(0,b.useState)(null),[a,o]=(0,b.useState)(!1),[s,c]=(0,b.useState)(null),u=(0,b.useRef)(null);(0,b.useEffect)(()=>{i(null),o(!1),c(null)},[n]);let d=(0,b.useCallback)(()=>{o(!1),c(null)},[]);return n?(0,x.jsxs)(`div`,{className:`conv-actions`,children:[(0,x.jsx)(`button`,{ref:u,type:`button`,className:`conv-action conv-actions-overflow`,onClick:()=>o(e=>!e),disabled:t,"aria-haspopup":`menu`,"aria-expanded":a,"aria-label":`Session actions`,title:`Session actions`,children:(0,x.jsx)(l,{size:12})}),a&&(0,x.jsx)(M,{anchorRef:u,onClose:d,className:`conv-actions-menu`,role:`menu`,children:e.map(e=>e.panel?(0,x.jsxs)(`div`,{className:`conv-actions-menu-disclosure`,children:[(0,x.jsxs)(`button`,{type:`button`,role:`menuitem`,"aria-haspopup":`dialog`,"aria-expanded":s===e.key,disabled:t,onClick:()=>c(t=>t===e.key?null:e.key),children:[e.icon,(0,x.jsx)(`span`,{children:e.menuLabel})]}),s===e.key&&(0,x.jsx)(`div`,{className:`conv-actions-menu-panel`,children:e.panel()})]},e.key):(0,x.jsxs)(`button`,{type:`button`,role:`menuitem`,className:e.danger?`conv-action-danger`:void 0,"aria-busy":e.busy,disabled:t,onClick:t=>{e.onClick?.(t),d()},children:[e.icon,(0,x.jsx)(`span`,{children:e.menuLabel})]},e.key))})]}):(0,x.jsx)(`div`,{className:`conv-actions`,children:e.map(e=>e.panel?(0,x.jsx)(me,{action:e,disabled:t,open:r===e.key,onToggle:()=>i(t=>t===e.key?null:e.key),onClose:()=>i(null)},e.key):(0,x.jsx)(`button`,{type:`button`,className:e.danger?`conv-action conv-action-danger`:`conv-action`,onClick:e.onClick,disabled:t,"aria-busy":e.busy,"aria-label":e.label,title:e.title,children:e.icon},e.key))})}var N=`claude-opus-4-8[1m]`,P=`claude-sonnet-5`,F=`claude-haiku-4-5`,ge={[N]:`Opus 4.8 (1M context)`,[P]:`Sonnet 5`,[F]:`Haiku 4.5`};function I(e){return ge[e]??e}var _e=[N,P,F];function L(e){return e.replace(/\[1m\]$/,``)}function ve(e){return _e.find(t=>L(t)===L(e))??e}var R=[`default`,`acceptEdits`,`plan`,`auto`,`bypassPermissions`],ye=[`low`,`medium`,`high`,`xhigh`];[...R],[...ye],[...ye];var z=[N,P,F],B={default:`Ask permissions`,acceptEdits:`Accept edits`,plan:`Plan mode`,auto:`Auto mode`,bypassPermissions:`Bypass permissions`},be=R.map(e=>({value:e,label:B[e]??e})),V={low:`Low`,medium:`Medium`,high:`High`,xhigh:`Highest`},H=ye.map(e=>({value:e,label:V[e]??e}));function U(e){if(e){let t=z.find(t=>L(t)===L(e));if(t)return t}return N}function xe({row:e,adminFetch:t,onError:n}){let[r,i]=(0,b.useState)(()=>U(e.model)),[a,o]=(0,b.useState)(``),[s,c]=(0,b.useState)(``),[l,u]=(0,b.useState)(!1),f=(0,b.useRef)(!1);(0,b.useEffect)(()=>{i(U(e.model))},[e.model]);let p=async()=>{if(!f.current){f.current=!0,u(!0);try{let i=await t(`/api/admin/session-reseat`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({fromSessionId:e.sessionId,model:r,...a?{permissionMode:a}:{},...s?{effort:s}:{}})});if(!i.ok){n(`Could not reset ${e.title} (status ${i.status})`),console.error(`[admin-ui] dashboard-reseat-failed sessionId=${e.sessionId} status=${i.status}`),f.current=!1,u(!1);return}let o=await i.json().catch(()=>({}));o.target?window.location.assign(o.target):(n(`Reset of ${e.title} returned no target`),f.current=!1,u(!1))}catch(t){n(`Could not reset ${e.title} (network error)`),console.error(`[admin-ui] dashboard-reseat-failed sessionId=${e.sessionId} error=${t instanceof Error?t.message:String(t)}`),f.current=!1,u(!1)}}};return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsxs)(`label`,{className:`reseat-field`,children:[(0,x.jsx)(`span`,{children:`Model`}),(0,x.jsx)(`select`,{"data-kind":`model`,value:r,disabled:l,onChange:e=>i(e.target.value),children:z.map(e=>(0,x.jsx)(`option`,{value:e,children:I(e)},e))})]}),(0,x.jsxs)(`label`,{className:`reseat-field`,children:[(0,x.jsx)(`span`,{children:`Mode`}),(0,x.jsxs)(`select`,{"data-kind":`mode`,value:a,disabled:l,onChange:e=>o(e.target.value),children:[(0,x.jsx)(`option`,{value:``,children:`Keep current`}),be.map(e=>(0,x.jsx)(`option`,{value:e.value,children:e.label},e.value))]})]}),(0,x.jsxs)(`label`,{className:`reseat-field`,children:[(0,x.jsx)(`span`,{children:`Effort`}),(0,x.jsxs)(`select`,{"data-kind":`effort`,value:s,disabled:l,onChange:e=>c(e.target.value),children:[(0,x.jsx)(`option`,{value:``,children:`Keep current`}),H.map(e=>(0,x.jsx)(`option`,{value:e.value,children:e.label},e.value))]})]}),(0,x.jsx)(`button`,{type:`button`,className:`reseat-apply`,disabled:l,"aria-busy":l,onClick:()=>void p(),children:l?(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(d,{size:12,className:`spin`,"aria-hidden":`true`}),`Resetting…`]}):`Reset`})]})}var Se=[`whatsapp`,`telegram`];function W(e){if(e<60)return`${e}s`;let t=Math.floor(e/60),n=e%60;return n>0?`${t}m ${n}s`:`${t}m`}function Ce(e){return e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e)}async function G(e){if(navigator.clipboard)try{return await navigator.clipboard.writeText(e),!0}catch{}try{let t=document.createElement(`textarea`);t.value=e,t.style.position=`fixed`,t.style.opacity=`0`,document.body.appendChild(t),t.select();let n=document.execCommand(`copy`);return document.body.removeChild(t),n}catch{return!1}}function we({target:e,onConfirm:t,onCancel:n}){return e?(0,x.jsx)(`div`,{className:`claude-info-overlay`,onClick:n,children:(0,x.jsxs)(`div`,{className:`claude-info-modal`,onClick:e=>e.stopPropagation(),role:`alertdialog`,"aria-label":`Confirm delete session`,children:[(0,x.jsxs)(`div`,{className:`claude-info-header`,children:[(0,x.jsx)(`span`,{children:`Delete this conversation?`}),(0,x.jsx)(`button`,{className:`claude-info-close`,onClick:n,"aria-label":`Close`,children:`✕`})]}),(0,x.jsxs)(`div`,{className:`claude-info-section`,style:{padding:`12px 14px`,fontSize:`11px`,color:`var(--text-secondary)`},children:[`This permanently removes the transcript. It is not moved to Archive and cannot be recovered.`,e.live&&(0,x.jsx)(`div`,{style:{marginTop:`8px`},children:`This session is running; deleting stops it first.`})]}),(0,x.jsxs)(`div`,{className:`claude-info-section`,style:{display:`flex`,gap:`8px`,padding:`10px 14px`},children:[(0,x.jsx)(C,{variant:`danger`,size:`sm`,style:{flex:1},onClick:t,children:`Delete`}),(0,x.jsx)(C,{variant:`secondary`,size:`sm`,style:{flex:1},onClick:n,children:`Cancel`})]})]})}):null}var Te=`auth-refresh-failed`;function Ee({error:e,onClose:t}){if(!e)return null;let n=e.reason===Te,r=n?`Claude sign-in expired`:`Session didn’t open`,i=n?`Your claude.ai login has expired. Re-authenticate to resume sessions.`:`The session did not bind within 60 seconds, so there is no live conversation to open.`;return(0,x.jsx)(`div`,{className:`claude-info-overlay`,onClick:t,children:(0,x.jsxs)(`div`,{className:`claude-info-modal`,onClick:e=>e.stopPropagation(),role:`alertdialog`,"aria-label":`Session could not be opened`,children:[(0,x.jsxs)(`div`,{className:`claude-info-header`,children:[(0,x.jsx)(`span`,{children:r}),(0,x.jsx)(`button`,{className:`claude-info-close`,onClick:t,"aria-label":`Close`,children:`✕`})]}),(0,x.jsxs)(`div`,{className:`claude-info-section`,style:{padding:`12px 14px`,fontSize:`11px`,color:`var(--text-secondary)`},children:[i,(0,x.jsxs)(`div`,{className:`claude-info-row`,style:{marginTop:`8px`},children:[(0,x.jsx)(`span`,{className:`claude-info-label`,children:`Reason`}),(0,x.jsx)(`span`,{className:`claude-info-value`,children:e.reason})]}),e.sessionId&&(0,x.jsxs)(`div`,{className:`claude-info-row`,children:[(0,x.jsx)(`span`,{className:`claude-info-label`,children:`Session`}),(0,x.jsxs)(`span`,{className:`claude-info-value`,children:[e.sessionId.slice(0,8),`…`]})]})]})]})})}function De(e){let{show:t,onClose:n,claudeInfo:r,messages:i,sessionElapsed:a,sessionId:o,cacheKey:s}=e,[c,l]=(0,b.useState)(null);if(!t)return null;let u=i.flatMap(e=>e.events?.filter(e=>e.type===`usage`)??[]),d=u.at(-1),f=d?.peak_request_pct==null?d?.context_window?Math.round((d.input_tokens+d.cache_creation_tokens+d.cache_read_tokens)/d.context_window*100):0:Math.round(d.peak_request_pct*100),p=u.reduce((e,t)=>e+t.input_tokens+t.cache_creation_tokens+t.cache_read_tokens+t.output_tokens,0),m=i.flatMap(e=>e.events?.filter(e=>e.type===`rate_limit`)??[]).at(-1),h=u.reduce((e,t)=>e+(t.total_cost_usd??0),0),g=r?.account?.subscriptionType,_=e=>{let t=e*1e3-Date.now();if(t<=0)return`now`;let n=Math.floor(t/36e5),r=Math.floor(t%36e5/6e4);return n>0?`${n}h ${r}m`:`${r}m`};return(0,x.jsx)(`div`,{className:`claude-info-overlay`,onClick:n,children:(0,x.jsxs)(`div`,{className:`claude-info-modal`,onClick:e=>e.stopPropagation(),children:[(0,x.jsxs)(`div`,{className:`claude-info-header`,children:[(0,x.jsx)(`img`,{src:`/brand/claude.png`,alt:`Claude`,className:`claude-info-icon`}),(0,x.jsx)(`span`,{children:`Claude Code`}),(0,x.jsx)(`button`,{className:`claude-info-close`,onClick:n,"aria-label":`Close`,children:`✕`})]}),(0,x.jsxs)(`div`,{className:`claude-info-section`,children:[(0,x.jsxs)(`div`,{className:`claude-info-row`,children:[(0,x.jsx)(`span`,{className:`claude-info-label`,children:`Version`}),(0,x.jsx)(`span`,{className:`claude-info-value`,children:r?r.version:`…`})]}),(0,x.jsxs)(`div`,{className:`claude-info-row`,children:[(0,x.jsx)(`span`,{className:`claude-info-label`,children:`Email`}),(0,x.jsx)(`span`,{className:`claude-info-value`,children:r?.account?.email??`…`})]})]}),(g||m||h>0)&&(0,x.jsxs)(`div`,{className:`claude-info-section`,children:[g&&(0,x.jsxs)(`div`,{className:`claude-info-row`,children:[(0,x.jsx)(`span`,{className:`claude-info-label`,children:`Plan`}),(0,x.jsx)(`span`,{className:`claude-info-value`,style:{textTransform:`capitalize`},children:g})]}),m&&(0,x.jsxs)(x.Fragment,{children:[(0,x.jsxs)(`div`,{className:`claude-info-row`,children:[(0,x.jsx)(`span`,{className:`claude-info-label`,children:`Usage`}),(0,x.jsxs)(`span`,{className:`claude-info-value`,children:[Math.round(m.utilization*100),`%`]})]}),(0,x.jsxs)(`div`,{className:`claude-info-row`,children:[(0,x.jsx)(`span`,{className:`claude-info-label`,children:`Resets in`}),(0,x.jsx)(`span`,{className:`claude-info-value`,children:_(m.resetsAt)})]}),m.isUsingOverage&&(0,x.jsxs)(`div`,{className:`claude-info-row`,children:[(0,x.jsx)(`span`,{className:`claude-info-label`,children:`Overage`}),(0,x.jsx)(`span`,{className:`claude-info-value`,children:`Active`})]})]}),h>0&&(0,x.jsxs)(`div`,{className:`claude-info-row`,children:[(0,x.jsx)(`span`,{className:`claude-info-label`,children:`Session cost`}),(0,x.jsxs)(`span`,{className:`claude-info-value`,children:[`$`,h<.01?h.toFixed(4):h.toFixed(2)]})]})]}),(0,x.jsxs)(`div`,{className:`claude-info-section`,children:[(0,x.jsxs)(`div`,{className:`claude-info-row`,children:[(0,x.jsx)(`span`,{className:`claude-info-label`,children:`Model`}),(0,x.jsx)(`span`,{className:`claude-info-value`,children:r?.model??`…`})]}),(0,x.jsxs)(`div`,{className:`claude-info-row`,children:[(0,x.jsx)(`span`,{className:`claude-info-label`,children:`Context used`}),(0,x.jsx)(`span`,{className:`claude-info-value`,children:f>0?`${f}%`:`—`})]}),(0,x.jsxs)(`div`,{className:`claude-info-row`,children:[(0,x.jsx)(`span`,{className:`claude-info-label`,children:`Tokens`}),(0,x.jsx)(`span`,{className:`claude-info-value`,children:p>0?Ce(p):`—`})]}),(0,x.jsxs)(`div`,{className:`claude-info-row`,children:[(0,x.jsx)(`span`,{className:`claude-info-label`,children:`Session`}),(0,x.jsx)(`span`,{className:`claude-info-value`,children:W(a)})]}),(o||s)&&(()=>{let e=o??s??``;return(0,x.jsxs)(`div`,{className:`claude-info-row`,children:[(0,x.jsx)(`span`,{className:`claude-info-label`,children:`Session`}),(0,x.jsx)(`button`,{type:`button`,className:`claude-info-value claude-info-id-copy`,title:`${e} (${o?`flushed`:`pre-flush`}) — click to copy`,onClick:async()=>{l(await G(e)?`copied`:`failed`),setTimeout(()=>l(null),1200)},children:c===`copied`?`copied ✓`:c===`failed`?`copy failed ✕`:`${e.slice(0,8)}…`})]})})()]})]})})}var Oe=`https://claude.ai/code`,ke=200,Ae=[500,1e3,1500,2e3,2500,3e3,3e3];function je(e,t,n){if(e&&n.target)return{kind:`navigate`,url:n.target,sameOrigin:!0};let r=n.slug??n.bridgeSessionId??null;if(e&&r)return{kind:`navigate`,url:`${Oe}/${r}`,sameOrigin:!1};let i=n.reason||n.error||`status ${t}`;return{kind:`error`,sessionId:n.sessionId??null,reason:i}}function Me(e){if(!e)return``;let t=Date.parse(e);return Number.isFinite(t)?new Date(t).toLocaleString(void 0,{dateStyle:`medium`,timeStyle:`short`}):``}function K(e){let{businessName:a,cacheKey:o,role:s,userName:l,userAvatar:d,onSelectProjects:p,onSelectPeople:ee,onSelectTasks:te,onSelectAgents:re,onCloseMobileDrawer:y,collapsed:S,selectedWhatsappId:ie,onSelectWhatsappConversation:C,initialWhatsappSurface:k=!1}=e,A=v(o),j=(0,b.useCallback)(e=>({key:`reseat`,label:`Reset session ${e.title} (model, mode, effort)`,menuLabel:`Reset`,title:`Reset — move this session onto a chosen model, mode, and effort`,icon:(0,x.jsx)(O,{size:12}),panelClassName:`reseat-panel`,panel:()=>(0,x.jsx)(xe,{row:e,adminFetch:A,onError:e=>B({message:e,failed:!0})})}),[A]),de=c.productName,fe=typeof l==`string`?l:l===null?`name unavailable`:a||de,pe=(fe.trim().charAt(0)||`?`).toUpperCase(),[M,me]=(0,b.useState)(k?`whatsapp`:`sessions`),[N,P]=(0,b.useState)([]),[F,ge]=(0,b.useState)(!1),[I,_e]=(0,b.useState)(null),[L,ve]=(0,b.useState)(!1),[R,ye]=(0,b.useState)(`file`),[z,B]=(0,b.useState)(null),[be,V]=(0,b.useState)(null),[H,U]=(0,b.useState)([]),[W,Ce]=(0,b.useState)(!1),[G,Te]=(0,b.useState)(null),[De,Oe]=(0,b.useState)(!1),[K,Ne]=(0,b.useState)(!1),[q,Le]=(0,b.useState)(!1),[Re,ze]=(0,b.useState)(null),[Be,Ve]=(0,b.useState)(new Set),[J,He]=(0,b.useState)(null),[Ue,We]=(0,b.useState)(new Set),[Ge,Ke]=(0,b.useState)(new Set),[qe,Je]=(0,b.useState)(new Set),[Ye,Xe]=(0,b.useState)(null),[Ze,Y]=(0,b.useState)(``),[Qe,$e]=(0,b.useState)(!1),[X,et]=(0,b.useState)(!1),tt=(0,b.useRef)(null),Z=(0,b.useRef)(0),[nt,rt]=(0,b.useState)(0);(0,b.useEffect)(()=>{let e=tt.current;if(!e||typeof ResizeObserver>`u`)return;let t=new ResizeObserver(e=>{let t=e[0]?.contentRect.width??0;rt(e=>Math.abs(e-t)<1?e:t)});return t.observe(e),()=>t.disconnect()},[M]);let it=nt>0&&nt<400,[at,ot]=(0,b.useState)([]),[st,ct]=(0,b.useState)(!1),[lt,ut]=(0,b.useState)(null),[dt,ft]=(0,b.useState)(`whatsapp`),pt=(0,b.useCallback)(e=>{if(y(),!o){console.error(`[admin-ui] artefact-download-blocked id=${e.id} reason=no-cache-key`),B({message:`Session not ready — try again`,failed:!0});return}if(!e.downloadPath){console.error(`[admin-ui] artefact-download-blocked id=${e.id} reason=not-downloadable`),B({message:`${e.name} can’t be downloaded`,failed:!0});return}console.info(`[admin-ui] artefact-download id=${e.id} root=${e.downloadRoot??`data`} path=${e.downloadPath}`),_(o,e.downloadPath,e.downloadRoot??`data`),B({message:`Downloading ${e.name}`,failed:!1})},[o,y]);(0,b.useEffect)(()=>{if(!z)return;let e=setTimeout(()=>B(null),2500);return()=>clearTimeout(e)},[z]);let mt=(0,b.useCallback)(async()=>{if(o){ve(!0),_e(null);try{let e=await A(`/api/admin/sidebar-artefacts`);if(!e.ok)throw Error(`status ${e.status}`);P((await e.json()).artefacts??[]),ge(!0)}catch(e){let t=e instanceof Error?e.message:String(e);_e(`Failed to load artefacts: ${t}`),console.error(`[admin-ui] sidebar-artefacts fetch failed: ${t}`)}finally{ve(!1)}}},[o,A]),Q=(0,b.useCallback)(async()=>{if(!o)return null;let e=++Z.current;Oe(!0),Te(null);try{let t=await A(`/api/admin/sidebar-sessions`);if(!t.ok)throw Error(`status ${t.status}`);let n=await t.json(),r=n.sessions??[];return e===Z.current?(U(r),ze(n.accountId??null),Ce(!0),r):(console.info(`[admin-ui] sidebar-sessions-stale-response-dropped token=${e}`),r)}catch(t){let n=t instanceof Error?t.message:String(t);return e===Z.current&&Te(`Failed to load sessions: ${n}`),console.error(`[admin-ui] sidebar-sessions fetch failed: ${n}`),null}finally{e===Z.current&&Oe(!1)}},[o,A]),ht=(0,b.useCallback)(async()=>{if(o){ut(null);try{let e=await A(`/api/whatsapp-reader/conversations`);if(!e.ok)throw Error(`status ${e.status}`);ot((await e.json()).conversations??[]),ct(!0)}catch(e){let t=e instanceof Error?e.message:String(e);ut(`Couldn't load conversations.`),console.error(`[admin-ui] channel-convos fetch failed: ${t}`)}}},[o,A]);(0,b.useEffect)(()=>{!o||W||Q()},[o,W,Q]),(0,b.useEffect)(()=>{if(!o)return;let e=null;return ht(),e=setInterval(()=>{ht()},Pe),()=>{e!==null&&clearInterval(e)}},[o,ht]),(0,b.useEffect)(()=>{if(!o)return;let e=null;function t(){console.info(`[admin-ui] sidebar-refresh surface=sessions trigger=poll`),Q()}function n(){e===null&&(e=setInterval(t,Fe))}function r(){e!==null&&(clearInterval(e),e=null)}function i(){document.hidden?r():(t(),n())}return document.hidden||n(),document.addEventListener(`visibilitychange`,i),()=>{r(),document.removeEventListener(`visibilitychange`,i)}},[o,Q]);let gt=(0,b.useMemo)(()=>{let e=new Map;for(let t of Se)e.set(t,[]);for(let t of at)e.get(t.channel)?.push(t);for(let t of Se)console.info(`[admin-ui] sidebar-nav surface=${t} count=${e.get(t).length}`);return e},[at]),_t={whatsapp:`WhatsApp`,telegram:`Telegram`,webchat:`Webchat`},vt=()=>{C(null),me(`artefacts`),console.info(`[admin-ui] sidebar-nav surface=artefacts count=${F?N.length:0} collapsed=${S}`),mt()},$=1.5,yt=()=>{console.info(`[admin-ui] sidebar-refresh surface=artefacts`),mt()},bt=()=>{C(null),me(`sessions`),console.info(`[admin-ui] sidebar-nav surface=sessions count=${W?H.length:0} collapsed=${S}`),W||Q()},xt=()=>{console.info(`[admin-ui] sidebar-refresh surface=sessions trigger=manual`),Q()},St=e=>{me(`whatsapp`),ft(e),console.info(`[admin-ui] sidebar-nav surface=${e} count=${gt.get(e)?.length??0} collapsed=${S}`)},Ct=(0,b.useCallback)(async e=>{if(Ue.has(e.sessionId))return;We(t=>{let n=new Set(t);return n.add(e.sessionId),n});let t=window.open(``,`_blank`);try{let n=await A(`/api/admin/session-rc-spawn`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({sessionId:e.sessionId,name:e.title||e.sessionId,...e.accountId?{targetAccountId:e.accountId}:{}})}),r=await n.json().catch(()=>({})),i=je(n.ok,n.status,{...r,sessionId:r.sessionId??e.sessionId});console.info(`[admin-ui] sidebar-session-resume sessionId=${e.sessionId} status=${n.status} outcome=${i.kind} slug=${r.slug??r.bridgeSessionId??`none`}`),i.kind===`navigate`?(y(),t?t.location.href=i.url:window.open(i.url,`_blank`)):(t?.close(),console.error(`[admin-ui] sidebar-session-resume-failed sessionId=${e.sessionId} status=${n.status} reason=${i.reason}`),V(i))}catch(n){t?.close();let r=n instanceof Error?n.message:String(n);console.error(`[admin-ui] sidebar-session-resume-failed sessionId=${e.sessionId} error=${r}`),V({sessionId:e.sessionId,reason:r})}finally{We(t=>{let n=new Set(t);return n.delete(e.sessionId),n})}},[A,y,Ue]),wt=(0,b.useCallback)(async e=>{let t=e.slice(0,8);for(let n=1;n<=Ae.length;n++){await new Promise(e=>setTimeout(e,Ae[n-1]));let r=await Q();if(r&&r.some(t=>t.sessionId===e)){console.info(`[admin-ui] sidebar-new-session-converged sessionId=${t} via=retry attempts=${n}`);return}}console.error(`[admin-ui] sidebar-new-session-converge-timeout sessionId=${t}`)},[Q]),Tt=(0,b.useCallback)(async()=>{if(!X){et(!0);try{let e=await A(`/api/admin/session-rc-spawn`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({})}),t=await e.json().catch(()=>({})),n=je(e.ok,e.status,t);console.info(`[admin-ui] sidebar-new-session-spawned status=${e.status} outcome=${n.kind} slug=${t.slug??t.bridgeSessionId??`none`}`),n.kind===`navigate`?n.sameOrigin?window.location.assign(n.url):(window.open(n.url,`_blank`),t.sessionId?wt(t.sessionId):console.error(`[admin-ui] sidebar-new-session-converge-skipped reason=no-session-id`)):(console.error(`[admin-ui] sidebar-new-session-failed status=${e.status} reason=${n.reason}`),V(n))}catch(e){let t=e instanceof Error?e.message:String(e);console.error(`[admin-ui] sidebar-new-session-failed error=${t}`),V({sessionId:null,reason:t})}finally{et(!1)}}},[A,X,wt]),Et=(0,b.useCallback)((e,t)=>{e.stopPropagation(),He(t)},[]),Dt=(0,b.useCallback)(async e=>{if(!Be.has(e.sessionId)){Ve(t=>{let n=new Set(t);return n.add(e.sessionId),n});try{let t=await A(`/api/admin/session-delete`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({sessionId:e.sessionId})});if(!t.ok){let n=await t.json().catch(()=>({}));console.error(`[admin-ui] sidebar-session-delete-failed sessionId=${e.sessionId} status=${t.status} error=${n.error??`unknown`}`),B({message:`Delete failed: ${n.error??`status ${t.status}`}`,failed:!0});return}let n=await t.json();console.info(`[admin-ui] sidebar-session-delete sessionId=${e.sessionId} live=${e.live} confirmed=true pidKilled=${n.pidKilled??`?`} deleted=${n.deleted??`?`}`),U(t=>t.filter(t=>t.sessionId!==e.sessionId)),Q()}catch(t){let n=t instanceof Error?t.message:String(t);console.error(`[admin-ui] sidebar-session-delete-failed sessionId=${e.sessionId} error=${n}`),B({message:`Delete failed: ${n}`,failed:!0})}finally{Ve(t=>{let n=new Set(t);return n.delete(e.sessionId),n})}}},[A,Be,Q]),Ot=(0,b.useCallback)(async(e,t)=>{if(e.stopPropagation(),!Ge.has(t.sessionId)){Ke(e=>{let n=new Set(e);return n.add(t.sessionId),n});try{let e=await A(`/api/admin/session-stop`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({sessionId:t.sessionId})});if(!e.ok){let n=await e.json().catch(()=>({}));console.error(`[admin-ui] sidebar-session-stop-failed sessionId=${t.sessionId} status=${e.status} error=${n.error??`unknown`}`),B({message:`Stop failed: ${n.error??`status ${e.status}`}`,failed:!0});return}console.info(`[admin-ui] sidebar-session-stop sessionId=${t.sessionId}`),Q()}catch(e){let n=e instanceof Error?e.message:String(e);console.error(`[admin-ui] sidebar-session-stop-failed sessionId=${t.sessionId} error=${n}`),B({message:`Stop failed: ${n}`,failed:!0})}finally{Ke(e=>{let n=new Set(e);return n.delete(t.sessionId),n})}}},[A,Ge,Q]),kt=(0,b.useCallback)(async(e,t,n)=>{if(e.stopPropagation(),!qe.has(t.sessionId)){Je(e=>{let n=new Set(e);return n.add(t.sessionId),n});try{let e=await A(`/api/admin/session-archive`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({sessionId:t.sessionId,mode:n})});if(!e.ok){let r=await e.json().catch(()=>({})),i=r.detail??r.error??`status ${e.status}`;console.error(`[admin-ui] sidebar-session-archive-failed sessionId=${t.sessionId} mode=${n} status=${e.status} error=${r.error??`unknown`}`),B({message:`${n===`archive`?`Archive`:`Unarchive`} failed: ${i}`,failed:!0});return}console.info(`[admin-ui] sidebar-session-archive sessionId=${t.sessionId} mode=${n}`),Q()}catch(e){let r=e instanceof Error?e.message:String(e);console.error(`[admin-ui] sidebar-session-archive-failed sessionId=${t.sessionId} mode=${n} error=${r}`),B({message:`${n===`archive`?`Archive`:`Unarchive`} failed: ${r}`,failed:!0})}finally{Je(e=>{let n=new Set(e);return n.delete(t.sessionId),n})}}},[A,qe,Q]),At=(0,b.useCallback)(async e=>{let t=Ze.trim();if(!t){B({message:`Title can’t be empty`,failed:!0});return}if(t.length>ke){B({message:`Title too long (max ${ke})`,failed:!0});return}$e(!0);try{let n=await A(`/api/admin/session-rename`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({sessionId:e.sessionId,title:t})});if(!n.ok){let t=await n.json().catch(()=>({})),r=t.reason??t.error??`status ${n.status}`;console.error(`[admin-ui] sidebar-session-rename sessionId=${e.sessionId.slice(0,8)} outcome=rejected reason=${r}`),B({message:`Rename failed: ${r}`,failed:!0});return}console.info(`[admin-ui] sidebar-session-rename sessionId=${e.sessionId.slice(0,8)} outcome=ok`),Xe(null),Y(``),Q()}catch(t){let n=t instanceof Error?t.message:String(t);console.error(`[admin-ui] sidebar-session-rename sessionId=${e.sessionId.slice(0,8)} outcome=rejected reason=${n}`),B({message:`Rename failed: ${n}`,failed:!0})}finally{$e(!1)}},[A,Ze,Q]);return(0,x.jsxs)(`aside`,{className:`side`,children:[(0,x.jsx)(`div`,{className:`side-new-session-row`,children:(0,x.jsxs)(`button`,{type:`button`,className:`side-new-session`,onClick:Tt,disabled:X,"aria-busy":X,children:[(0,x.jsx)(D,{size:14}),(0,x.jsx)(`span`,{children:X?`Spawning…`:`New session`})]})}),(0,x.jsxs)(`nav`,{className:`side-nav`,children:[(0,x.jsxs)(`button`,{type:`button`,className:`nav-row`,onClick:()=>{console.info(`[admin-ui] sidebar-nav surface=people`),ee(),y()},children:[(0,x.jsx)(ue,{size:20,strokeWidth:$}),(0,x.jsx)(`span`,{className:`label`,children:`People`}),(0,x.jsx)(`span`,{className:`kbd`})]}),(0,x.jsxs)(`button`,{type:`button`,className:`nav-row`,onClick:()=>{console.info(`[admin-ui] sidebar-nav surface=agents`),re(),y()},children:[(0,x.jsx)(T,{size:20,strokeWidth:$}),(0,x.jsx)(`span`,{className:`label`,children:`Agents`}),(0,x.jsx)(`span`,{className:`kbd`})]}),(0,x.jsxs)(`button`,{type:`button`,className:`nav-row`,onClick:()=>{console.info(`[admin-ui] sidebar-nav surface=projects`),p(),y()},children:[(0,x.jsx)(oe,{size:20,strokeWidth:$}),(0,x.jsx)(`span`,{className:`label`,children:n().term}),(0,x.jsx)(`span`,{className:`kbd`})]}),(0,x.jsxs)(`button`,{type:`button`,className:`nav-row`,onClick:()=>{console.info(`[admin-ui] sidebar-nav surface=tasks`),te(),y()},children:[(0,x.jsx)(E,{size:20,strokeWidth:$}),(0,x.jsx)(`span`,{className:`label`,children:`Tasks`}),(0,x.jsx)(`span`,{className:`kbd`})]}),(0,x.jsxs)(`button`,{type:`button`,className:`nav-row${M===`artefacts`?` active`:``}`,onClick:vt,children:[(0,x.jsx)(t,{size:20,strokeWidth:$}),(0,x.jsx)(`span`,{className:`label`,children:`Artefacts`}),(0,x.jsx)(`span`,{className:`kbd`})]}),(0,x.jsxs)(`button`,{type:`button`,className:`nav-row${M===`sessions`?` active`:``}`,onClick:bt,children:[(0,x.jsx)(se,{size:20,strokeWidth:$}),(0,x.jsx)(`span`,{className:`label`,children:`Sessions`}),(0,x.jsx)(`span`,{className:`kbd`})]}),st&&Se.filter(e=>gt.get(e).length>0).map(e=>(0,x.jsxs)(`button`,{type:`button`,className:`nav-row${M===`whatsapp`&&dt===e?` active`:``}`,onClick:()=>St(e),children:[(0,x.jsx)(m,{channel:e,size:16}),(0,x.jsx)(`span`,{className:`label`,children:_t[e]}),(0,x.jsx)(`span`,{className:`kbd`})]},e)),lt&&(0,x.jsx)(`div`,{className:`nav-row`,style:{color:`var(--text-tertiary)`,cursor:`default`},"aria-disabled":`true`,children:(0,x.jsx)(`span`,{className:`label`,children:lt})})]}),M===`artefacts`&&(0,x.jsxs)(`div`,{className:`side-list`,children:[(0,x.jsxs)(`div`,{className:`group-head`,children:[(0,x.jsx)(`span`,{children:`Artefacts`}),(0,x.jsxs)(`span`,{className:`group-head-meta`,children:[(0,x.jsx)(`button`,{type:`button`,className:`group-head-refresh`,title:`Refresh artefacts`,"aria-label":`Refresh artefacts`,onClick:yt,disabled:L,children:(0,x.jsx)(f,{size:12,className:L?`spinning`:void 0})}),(0,x.jsx)(`span`,{children:L?`…`:String(N.length)})]})]}),I&&(0,x.jsx)(`div`,{className:`conv`,style:{color:`var(--text-tertiary)`,cursor:`default`},children:I}),F&&!I&&N.length>0&&(()=>{let e=N.filter(e=>e.kind===`agent-template`).length,t=N.length-e;return(0,x.jsx)(`div`,{className:`artefact-filter-chips`,children:[{key:`all`,label:`All`,count:N.length},{key:`agent`,label:`Agents`,count:e},{key:`file`,label:`Files`,count:t}].map(e=>(0,x.jsxs)(`button`,{type:`button`,className:`artefact-filter-chip${R===e.key?` active`:``}`,onClick:()=>ye(e.key),disabled:e.count===0&&e.key!==`all`,children:[e.label,(0,x.jsx)(`span`,{className:`artefact-filter-chip-count`,children:e.count})]},e.key))})})(),F&&!I&&N.length===0&&(0,x.jsx)(`div`,{className:`conv`,style:{color:`var(--text-tertiary)`,cursor:`default`},children:`No artefacts yet`}),N.filter(e=>R===`all`?!0:R===`agent`?e.kind===`agent-template`:e.kind!==`agent-template`).map(e=>{let n=e.kind===`agent-template`,r=n?T:t,i=Me(e.updatedAt),a=e.downloadPath!==null;return(0,x.jsxs)(`button`,{type:`button`,className:`conv`,onClick:()=>pt(e),disabled:!a,style:a?void 0:{cursor:`default`},title:a?`Download ${e.name}`:`${e.name} can’t be downloaded`,children:[(0,x.jsx)(r,{size:14,className:`conv-icon`,"data-kind":n?`agent`:`file`,"aria-label":n?`agent template`:`file`}),(0,x.jsxs)(`span`,{className:`conv-stack`,children:[(0,x.jsx)(`span`,{className:`conv-name-line`,children:(0,x.jsx)(`span`,{className:`conv-name`,children:e.name})}),i&&(0,x.jsx)(`span`,{className:`conv-timestamp`,children:i})]}),a&&(0,x.jsx)(u,{size:12,className:`conv-rc-icon`,"aria-hidden":`true`})]},e.id)})]}),M===`sessions`&&(()=>{let e=H.filter(e=>K?!0:!e.isSubagent).filter(e=>q?!0:!e.archived),t=H.some(e=>e.isSubagent),n=H.some(e=>e.archived);return(0,x.jsxs)(`div`,{className:`side-list`,ref:tt,children:[(0,x.jsxs)(`div`,{className:`group-head`,children:[(0,x.jsx)(`span`,{children:`Sessions`}),(0,x.jsxs)(`span`,{className:`group-head-meta`,children:[(0,x.jsx)(`button`,{type:`button`,className:`group-head-refresh`,title:`Refresh sessions`,"aria-label":`Refresh sessions`,onClick:xt,disabled:De,children:(0,x.jsx)(f,{size:12,className:De?`spinning`:void 0})}),(0,x.jsx)(`span`,{children:De?`…`:String(e.length)})]})]}),Re&&(0,x.jsx)(`div`,{className:`side-account-id`,title:`This install's accountId. The first 8 characters match the truncated UUID label on the live Remote Control daemon entry in claude.ai/code.`,children:(0,x.jsx)(`code`,{children:Re})}),(t||n)&&(0,x.jsxs)(`div`,{className:`artefact-filter-chips`,children:[t&&(0,x.jsx)(`button`,{type:`button`,className:`artefact-filter-chip${K?` active`:``}`,"aria-pressed":K,onClick:()=>Ne(e=>!e),title:K?`Hide subagent sessions`:`Show subagent sessions`,children:`Subagents`}),n&&(0,x.jsx)(`button`,{type:`button`,className:`artefact-filter-chip${q?` active`:``}`,"aria-pressed":q,onClick:()=>Le(e=>!e),title:q?`Hide archived sessions`:`Show archived sessions`,children:`Archived`})]}),G&&(0,x.jsx)(`div`,{className:`conv`,style:{color:`var(--text-tertiary)`,cursor:`default`},children:G}),W&&!G&&e.length===0&&(0,x.jsx)(`div`,{className:`conv`,style:{color:`var(--text-tertiary)`,cursor:`default`},children:`No sessions yet`}),e.map(e=>{let t=Me(e.startedAt),n=Ue.has(e.sessionId),a=Be.has(e.sessionId),o=Ge.has(e.sessionId),s=qe.has(e.sessionId),c=n||a||o||s,l=[{key:`open`,label:`Resume session ${e.title} in claude.ai/code`,menuLabel:`Resume in claude.ai/code`,title:`Resume in a fresh local Remote Control PTY`,icon:(0,x.jsx)(g,{size:12}),busy:n,onClick:()=>{Ct(e)}},{key:`message`,label:`Open session ${e.title} in admin webchat`,menuLabel:`Open in webchat`,title:`Open in admin webchat (/chat) — sending resumes this session`,icon:(0,x.jsx)(ce,{size:12}),onClick:()=>{window.location.assign(`/chat?session=${e.sessionId}`)}},...e.live?[{key:`stop`,label:`Stop session ${e.title}`,menuLabel:`Stop`,title:`Stop session process (keeps the conversation, can resume later)`,icon:(0,x.jsx)(le,{size:12}),busy:o,onClick:t=>{Ot(t,e)}}]:[],e.archived?{key:`unarchive`,label:`Unarchive session ${e.title}`,menuLabel:`Unarchive`,title:`Unarchive (move back to the active list)`,icon:(0,x.jsx)(ae,{size:12}),busy:s,onClick:t=>{kt(t,e,`unarchive`)}}:{key:`archive`,label:`Archive session ${e.title}`,menuLabel:`Archive`,title:`Archive (hide from the list, keeps the conversation resumable)`,icon:(0,x.jsx)(w,{size:12}),busy:s,onClick:t=>{kt(t,e,`archive`)}},{key:`rename`,label:`Rename session ${e.title}`,menuLabel:`Rename`,title:`Rename this session`,icon:(0,x.jsx)(i,{size:12}),busy:Qe&&Ye===e.sessionId,onClick:t=>{t.stopPropagation(),Xe(e.sessionId),Y(e.personName??e.title)}},{key:`delete`,label:`Delete session ${e.title}`,menuLabel:`Delete`,title:`Delete session (stops the process, removes the conversation)`,icon:(0,x.jsx)(r,{size:12}),danger:!0,busy:a,onClick:t=>{Et(t,e)}},j({sessionId:e.sessionId,model:e.model??null,title:e.personName??e.title})];return(0,x.jsxs)(`div`,{className:`conv conv-with-actions`,children:[(0,x.jsxs)(`div`,{className:`conv-main-static`,children:[(0,x.jsx)(`span`,{className:`conv-live-dot`,"data-live":e.live?`1`:`0`,"aria-label":e.live?`live session`:`ended session`}),(0,x.jsxs)(`span`,{className:`conv-stack`,children:[(0,x.jsxs)(`span`,{className:`conv-name-line`,children:[e.channel&&(0,x.jsx)(ne,{channel:e.channel,size:13}),Ye===e.sessionId?(0,x.jsx)(`input`,{className:`conv-name conv-name-edit`,autoFocus:!0,value:Ze,disabled:Qe,"aria-label":`New title for session ${e.title}`,onChange:e=>Y(e.target.value),onClick:e=>e.stopPropagation(),onKeyDown:t=>{t.key===`Enter`?(t.preventDefault(),At(e)):t.key===`Escape`&&(t.preventDefault(),Xe(null),Y(``))},onBlur:()=>{Ye===e.sessionId&&!Qe&&(Xe(null),Y(``))}}):(0,x.jsx)(`span`,{className:`conv-name`,title:e.personName??e.title,children:e.personName??e.title})]}),(0,x.jsxs)(`span`,{className:`conv-timestamp`,children:[(0,x.jsx)(`code`,{className:`conv-session-id`,title:`First 8 characters of this session's id — distinguishes rows with identical auto-titles. The resume/delete buttons act on the full id.`,children:e.sessionId.slice(0,8)}),t&&(0,x.jsxs)(`span`,{children:[` · `,t]})]})]})]}),(0,x.jsx)(he,{actions:l,disabled:c,collapsed:it})]},e.sessionId)})]})})(),M===`whatsapp`&&(0,x.jsxs)(`div`,{className:`side-list`,children:[(0,x.jsxs)(`div`,{className:`group-head`,children:[(0,x.jsx)(`span`,{children:_t[dt]}),(0,x.jsxs)(`span`,{className:`group-head-meta`,children:[(0,x.jsx)(`button`,{type:`button`,className:`group-head-refresh`,title:`Refresh conversations`,"aria-label":`Refresh conversations`,onClick:()=>{ht()},children:(0,x.jsx)(f,{size:12})}),(0,x.jsx)(`span`,{children:String(gt.get(dt).length)})]})]}),gt.get(dt).map(e=>{let t=Me(e.lastMessageAt);return(0,x.jsxs)(`div`,{className:`conv conv-with-actions${ie===e.sessionId?` active`:``}`,children:[(0,x.jsxs)(`button`,{type:`button`,className:`conv-main-static conv-main-btn`,onClick:()=>{C(e),y()},title:e.title,children:[(0,x.jsx)(m,{channel:e.channel,size:14}),(0,x.jsxs)(`span`,{className:`conv-stack`,children:[(0,x.jsxs)(`span`,{className:`conv-name-line`,children:[(0,x.jsx)(`span`,{className:`conv-name`,children:h(e)}),e.role===`public`&&(0,x.jsx)(`span`,{className:`conv-tag conv-tag-public`,children:`Public`})]}),t&&(0,x.jsx)(`span`,{className:`conv-timestamp`,children:t})]})]}),(0,x.jsx)(he,{actions:[j({sessionId:e.sessionId,model:e.model,title:e.title})],disabled:!1,collapsed:it})]},e.sessionId)})]}),(0,x.jsx)(Ie,{}),(0,x.jsxs)(`div`,{className:`side-foot`,children:[(0,x.jsx)(`div`,{className:`avatar`,children:d?(0,x.jsx)(`img`,{src:d,alt:fe}):pe}),(0,x.jsxs)(`div`,{className:`who`,children:[(0,x.jsx)(`span`,{className:`name`,children:fe}),(0,x.jsx)(`span`,{className:`role`,children:s??`operator`})]})]}),z&&(0,x.jsx)(`div`,{className:`copy-toast${z.failed?` copy-toast-failed`:``}`,role:`status`,children:z.message}),(0,x.jsx)(Ee,{error:be,onClose:()=>V(null)}),(0,x.jsx)(we,{target:J,onCancel:()=>He(null),onConfirm:()=>{let e=J;He(null),e&&Dt(e)}})]})}var Ne=5e3,Pe=3e4,Fe=3e4;function Ie(){let[e,t]=(0,b.useState)(null);if((0,b.useEffect)(()=>{let e=!1,n=null;async function r(){try{let n=await fetch(`/api/admin/system-stats`);if(!n.ok){console.error(`[admin-ui] system-stats-fetch-failed status=${n.status}`);return}let r=await n.json();e||t(r)}catch(e){console.error(`[admin-ui] system-stats-fetch-failed reason=${e instanceof Error?e.message:String(e)}`)}}function i(){n===null&&(r(),n=setInterval(()=>{r()},Ne))}function a(){n!==null&&(clearInterval(n),n=null)}function o(){document.hidden?a():i()}return document.hidden||i(),document.addEventListener(`visibilitychange`,o),()=>{e=!0,a(),document.removeEventListener(`visibilitychange`,o)}},[]),!e||e.platform===`darwin`)return null;let n=e.cpuPct,r=e.memUsedPct,i=n!==null&&n>=.9,a=n!==null&&n>=.98,o=r!==null&&r>=.9,s=r!==null&&r>=.98,c=i||o,l=a||s,u=e=>e===null?`—`:`${Math.round(e*100)}%`,d=e=>{if(e===null)return{width:`0%`,background:`var(--text-tertiary)`};let t=Math.min(1,Math.max(0,e)),n=Math.round(140*(1-t));return{width:`${Math.round(t*100)}%`,background:`hsl(${n}, 65%, 45%)`}},f=[`system-stats`];return c&&f.push(`system-stats--warn`),l&&f.push(`system-stats--crit`),(0,x.jsxs)(`div`,{className:f.join(` `),role:`status`,"aria-label":`host CPU and RAM`,children:[(0,x.jsxs)(`div`,{className:`system-stats__metric`,children:[(0,x.jsxs)(`span`,{className:i?`system-stats__fig system-stats__fig--warn`:`system-stats__fig`,children:[`CPU `,u(n)]}),(0,x.jsx)(`div`,{className:`system-stats__bar`,children:(0,x.jsx)(`div`,{className:`system-stats__bar-fill`,style:d(n)})})]}),(0,x.jsxs)(`div`,{className:`system-stats__metric`,children:[(0,x.jsxs)(`span`,{className:o?`system-stats__fig system-stats__fig--warn`:`system-stats__fig`,children:[`RAM `,u(r)]}),(0,x.jsx)(`div`,{className:`system-stats__bar`,children:(0,x.jsx)(`div`,{className:`system-stats__bar-fill`,style:d(r)})})]})]})}var q=`admin-sidebar-collapsed`,Le=`admin-sidebar-drawer-open`;function Re(){if(typeof window>`u`)return!1;try{return window.sessionStorage.getItem(q)===`1`}catch{return!1}}function ze(e){if(!(typeof window>`u`))try{e?window.sessionStorage.setItem(q,`1`):window.sessionStorage.removeItem(q)}catch{}}function Be(){if(typeof window>`u`)return!1;try{return window.sessionStorage.getItem(Le)===`1`}catch{return!1}}function Ve(e){if(!(typeof window>`u`))try{e?window.sessionStorage.setItem(Le,`1`):window.sessionStorage.removeItem(Le)}catch{}}var J=720;function He(e,t){return e===`/`?{via:`in-place`}:{via:`navigate`,href:`/?wa=${encodeURIComponent(t.sessionId)}&projectDir=${encodeURIComponent(t.projectDir)}`}}function Ue(e,t){if(e!==`/`)return null;let n=new URLSearchParams(t),r=n.get(`wa`),i=n.get(`projectDir`);return!r||!i?null:{sessionId:r,projectDir:i,title:``,senderId:null,startedAt:``,channel:`whatsapp`,role:`admin`,operatorName:null,whatsappName:null,lastMessageAt:null,modelGated:!1,model:null,rowType:`session`}}function We(e,t){return t===`operator`&&e===`chat`||e===`dashboard`?`/`:e===`data`?`/data`:e===`graph`?`/graph`:e===`calendar`?`/calendar`:e===`chat`?`/chat`:`/browser`}function Ge(e){let{cacheKey:t,businessName:r,conversationLabel:i,variant:a=`admin`,onLogout:o,onDisconnect:s,disconnecting:c,userName:l,userAvatar:u,role:d,onOpenConversations:f,children:p,footer:m}=e,{subAccounts:h,activeAccountId:g,switching:_,switchAccount:ne}=te(t),[v,y]=(0,b.useState)(()=>Re()),[S,ie]=(0,b.useState)(()=>Be()),[C,ae]=(0,b.useState)(()=>typeof window<`u`&&window.matchMedia(`(max-width: ${J}px)`).matches),[w,T]=(0,b.useState)(()=>typeof window>`u`?null:Ue(window.location.pathname,window.location.search)),[oe]=(0,b.useState)(()=>w!==null);(0,b.useEffect)(()=>{if(typeof window>`u`)return;let e=window.matchMedia(`(max-width: ${J}px)`),t=e=>ae(e.matches);return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[]);let se=(0,b.useCallback)(e=>{ze(e),y(e)},[]),E=(0,b.useCallback)(e=>{Ve(e),ie(e)},[]);(0,b.useEffect)(()=>{if(typeof window>`u`)return;let e=window.location?.pathname??``;console.info(`[admin-ui] shell-mount route=${e} variant=${a} sidebar=${a===`operator`?`none`:`present`} collapsed=${v} drawer=${S}`)},[]),(0,b.useEffect)(()=>{typeof window>`u`||!w||(console.info(`[admin-ui] wa-hydrate route=/ sessionId=${w.sessionId.slice(0,8)}`),window.history.replaceState(null,``,`/`))},[]);let ce=(0,b.useCallback)(e=>{if(e===null){T(null);return}let t=typeof window<`u`?window.location.pathname:`/`,n=He(t,e);console.info(`[admin-ui] wa-open route=${t} via=${n.via} sessionId=${e.sessionId.slice(0,8)}`),n.via===`in-place`?T(e):window.location.href=n.href},[]),D=C?S:!v,O=(0,b.useCallback)(()=>{if(!(typeof window>`u`))if(window.matchMedia(`(max-width: ${J}px)`).matches){let e=S;console.info(`[admin-ui] header-sidebar-toggle from=${e?`open`:`closed`} mode=drawer`),E(!e)}else{let e=v;console.info(`[admin-ui] header-sidebar-toggle from=${e?`closed`:`open`} mode=collapse`),se(!e)}},[v,S,se,E]),le=(0,b.useCallback)(e=>{let t=We(e,a);console.info(`[admin-ui] header-menu-nav target=${e} dest=${t}`),window.location.href=t},[a]),[ue,k]=(0,b.useState)(`chat`),[A,j]=(0,b.useState)([]);(0,b.useEffect)(()=>{if(a!==`operator`||!t)return;let e=!1;return fetch(`/api/whatsapp-reader/conversations?session_key=${encodeURIComponent(t)}&includePersistedOnly=1`).then(e=>e.ok?e.json():{conversations:[]}).then(t=>{e||j(t.conversations??[])}).catch(()=>{}),()=>{e=!0}},[a,t]);let de=(0,b.useMemo)(()=>[...new Set(A.map(e=>e.channel))],[A]),pe={collapsed:v,mobileDrawerOpen:S,sidebarOpen:D,onToggleSidebar:O,setMobileDrawerOpen:E,selectedWhatsapp:w,onClearWhatsapp:()=>T(null)};return a===`operator`?(0,x.jsxs)(`div`,{className:`admin-shell admin-page admin-shell-root`,children:[(0,x.jsx)(re,{businessName:r,conversationLabel:i,variant:a,onNavigate:le,conversationsCount:A.length,conversationsChannels:de,onOpenConversations:()=>k(`conversations`),onToggleSidebar:O,sidebarOpen:D,onLogout:o,onDisconnect:s,disconnecting:c,cacheKey:t,subAccounts:h,activeAccountId:g,switchingAccount:_,onSwitchAccount:ne}),(0,x.jsx)(`div`,{className:`platform platform-operator`,children:ue===`conversations`?(0,x.jsx)(ee,{conversations:A,sessionKey:t??``,onBack:()=>k(`chat`)}):typeof p==`function`?p(pe):p}),m]}):(0,x.jsxs)(`div`,{className:`admin-shell admin-page admin-shell-root`,children:[(0,x.jsx)(re,{businessName:r,conversationLabel:i,variant:a,onNavigate:le,onOpenConversations:f,onToggleSidebar:O,sidebarOpen:D,onLogout:o,onDisconnect:s,disconnecting:c,cacheKey:t,subAccounts:h,activeAccountId:g,switchingAccount:_,onSwitchAccount:ne}),(0,x.jsxs)(`div`,{className:`platform${S?` menu-open`:``}${v?` sidebar-collapsed`:``}`,"data-artefact":`closed`,children:[(0,x.jsx)(K,{businessName:r,cacheKey:t,role:d??null,userName:l,userAvatar:u??null,onSelectProjects:()=>{window.location.href=`/graph?label=${n().label}`},onSelectPeople:()=>{window.location.href=`/graph?label=Person`},onSelectTasks:()=>{window.location.href=`/graph?label=Task`},onSelectAgents:()=>{window.location.href=`/graph?label=Agent`},onCloseMobileDrawer:()=>E(!1),collapsed:v,mobileDrawerOpen:S,selectedWhatsappId:w?.sessionId??null,onSelectWhatsappConversation:ce,initialWhatsappSurface:oe}),!C&&(0,x.jsx)(fe,{}),typeof p==`function`?p(pe):p]}),S&&(0,x.jsx)(`div`,{className:`sidebar-backdrop menu-open`,"aria-hidden":`true`,onClick:()=>E(!1)}),m]})}export{ae as _,F as a,ve as c,le as d,O as f,w as g,T as h,G as i,I as l,E as m,je as n,N as o,D as p,De as r,P as s,Ge as t,ue as u,C as v,y};
@@ -1 +0,0 @@
1
- import{o as e}from"./chunk-CAM3fms7.js";import{K as t,V as n,W as r,b as i,o as a}from"./useSubAccountSwitcher-BCOl64pj.js";import{n as o,t as s}from"./AdminLoginScreens-C-LlR7j1.js";import"./admin-types-DJoj6VJv.js";import{r as c,t as l}from"./AdminShell-B7rclo3t.js";import"./Checkbox-C3efsnUI.js";var u=r(),d=e(t(),1),f=n();function p({onOpen:e}){return(0,f.jsx)(`footer`,{className:`admin-footer`,children:(0,f.jsxs)(`div`,{className:`powered-by`,role:`button`,tabIndex:0,onClick:e,onKeyDown:t=>{(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),e())},"aria-label":`Powered by Claude Code — show details`,children:[(0,f.jsx)(`img`,{src:`/brand/claude.png`,alt:`Claude`,className:`powered-by-icon`}),(0,f.jsx)(`span`,{children:`Powered by Claude Code`})]})})}function m(){let e=o(),[t,n]=(0,d.useState)(!1);(0,d.useEffect)(()=>{if(!t)return;let e=e=>{e.key===`Escape`&&n(!1)};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[t]);let r=(0,d.useCallback)(async()=>{let t=e.claudeInfo!=null;if(n(!0),t){console.info(`[admin-ui] claude-info-open cached=true ms=0`);return}let r=Date.now();try{let t=await fetch(`/api/admin/claude-info`);if(t.ok){let n=await t.json();e.setClaudeInfo(n)}console.info(`[admin-ui] claude-info-open cached=false ms=${Date.now()-r}`)}catch(e){console.error(`[admin-ui] claude-info-fetch-failed ms=${Date.now()-r} error="${e instanceof Error?e.message:String(e)}"`)}},[e]),u=(0,d.useCallback)(({code:t,path:n})=>{console.warn(`[admin-auth] outcome=chat-tab-logout-on-401 code=${t} path=${n}`),e.handleLogout()},[e]);return e.appState===`chat`?(0,f.jsx)(i,{cacheKey:e.cacheKey,onSessionExpired:u,surface:`chat`,children:(0,f.jsx)(l,{cacheKey:e.cacheKey,businessName:e.businessName,sessionId:e.sessionId,onLogout:e.handleLogout,onDisconnect:e.handleDisconnect,disconnecting:e.disconnecting,userName:e.userName,userAvatar:e.userAvatar,role:e.role,footer:(0,f.jsxs)(f.Fragment,{children:[(0,f.jsx)(p,{onOpen:r}),(0,f.jsx)(c,{show:t,onClose:()=>n(!1),claudeInfo:e.claudeInfo,messages:[],sessionElapsed:0,sessionId:e.sessionId,cacheKey:e.cacheKey})]}),children:t=>(0,f.jsx)(f.Fragment,{children:t.selectedWhatsapp&&e.cacheKey?(0,f.jsx)(a,{sessionId:t.selectedWhatsapp.sessionId,projectDir:t.selectedWhatsapp.projectDir,sessionKey:e.cacheKey,cleanViewToggle:!0},t.selectedWhatsapp.sessionId):(0,f.jsx)(`main`,{})})})}):(0,f.jsx)(s,{auth:e})}(0,u.createRoot)(document.getElementById(`root`)).render((0,f.jsx)(m,{}));
@@ -1 +0,0 @@
1
- import"./chunk-K5T4RW27-8PvAHasY.js";import{n as e}from"./chunk-7N4EOEYR-CarJ7O2P.js";export{e as createArchitectureServices};
@@ -1 +0,0 @@
1
- import{o as e}from"./chunk-CAM3fms7.js";import{C as t,E as n,I as r,K as i,N as a,O as o,P as s,S as c,U as l,V as u,W as d,b as f,j as p}from"./useSubAccountSwitcher-BCOl64pj.js";import{t as m,u as h,y as g}from"./AdminShell-B7rclo3t.js";var _=r(`calendar`,[[`path`,{d:`M8 2v4`,key:`1cmpym`}],[`path`,{d:`M16 2v4`,key:`4m81vk`}],[`rect`,{width:`18`,height:`18`,x:`3`,y:`4`,rx:`2`,key:`1hopcy`}],[`path`,{d:`M3 10h18`,key:`8toen8`}]]),v=r(`chevron-right`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]),y=r(`clock`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 6v6l4 2`,key:`mmk7yg`}]]),b=r(`map-pin`,[[`path`,{d:`M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0`,key:`1r0f0z`}],[`circle`,{cx:`12`,cy:`10`,r:`3`,key:`ilqhr7`}]]),x=r(`sticky-note`,[[`path`,{d:`M21 9a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 15 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2z`,key:`1dfntj`}],[`path`,{d:`M15 3v5a1 1 0 0 0 1 1h5`,key:`6s6qgf`}]]),S=r(`user-plus`,[[`path`,{d:`M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2`,key:`1yyitq`}],[`circle`,{cx:`9`,cy:`7`,r:`4`,key:`nufk8`}],[`line`,{x1:`19`,x2:`19`,y1:`8`,y2:`14`,key:`1bvyxn`}],[`line`,{x1:`22`,x2:`16`,y1:`11`,y2:`11`,key:`1shjgl`}]]),C=d(),w=e(i(),1);function T(e){return new Date(e.getFullYear(),e.getMonth(),e.getDate())}function E(e,t){let n=new Date(e);return n.setDate(n.getDate()+t),n}function D(e){let t=T(e),n=t.getDay();return E(t,n===0?-6:1-n)}function O(e){let t=D(e);return Array.from({length:7},(e,n)=>E(t,n))}function k(e){let t=D(new Date(e.getFullYear(),e.getMonth(),1));return Array.from({length:42},(e,n)=>E(t,n))}function A(){return Array.from({length:24},(e,t)=>t)}function ee(e){let t=e.getFullYear();return Array.from({length:12},(e,n)=>new Date(t,n,1))}function j(e,t){switch(e){case`day`:{let e=T(t);return{from:e,to:E(e,1)}}case`week`:{let e=D(t);return{from:e,to:E(e,7)}}case`month`:{let e=D(new Date(t.getFullYear(),t.getMonth(),1));return{from:e,to:E(e,42)}}case`year`:return{from:new Date(t.getFullYear(),0,1),to:new Date(t.getFullYear()+1,0,1)}}}function M(e,t,n){switch(e){case`day`:return E(t,n);case`week`:return E(t,n*7);case`month`:return new Date(t.getFullYear(),t.getMonth()+n,1);case`year`:return new Date(t.getFullYear()+n,t.getMonth(),1)}}function N(e,t){return e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate()}function P(e,t){return{role:`button`,tabIndex:0,onClick:()=>t(e),onKeyDown:n=>{(n.key===`Enter`||n.key===` `)&&(n.preventDefault(),t(e))}}}var F=u(),I=[`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`,`Sun`],L=3;function R(e){return e.toLocaleTimeString([],{hour:`numeric`,minute:`2-digit`})}function te({anchor:e,meetings:t,onSelect:n}){let r=k(e),i=e.getMonth(),a=new Date;return(0,F.jsxs)(`div`,{className:`cal-month`,children:[(0,F.jsx)(`div`,{className:`cal-weekday-row`,children:I.map(e=>(0,F.jsx)(`div`,{className:`cal-weekday`,children:e},e))}),(0,F.jsx)(`div`,{className:`cal-month-grid`,children:r.map(e=>{let r=t.filter(t=>N(new Date(t.startsAt),e)).sort((e,t)=>e.startsAt.localeCompare(t.startsAt)),o=e.getMonth()!==i,s=N(e,a);return(0,F.jsxs)(`div`,{className:`cal-cell${o?` cal-cell-out`:``}${s?` cal-cell-today`:``}`,children:[(0,F.jsx)(`div`,{className:`cal-cell-num`,children:e.getDate()}),r.slice(0,L).map(e=>(0,F.jsxs)(`div`,{className:`cal-chip`,title:e.title??`Untitled`,...P(e,n),children:[!e.isAllDay&&(0,F.jsx)(`span`,{className:`cal-chip-time`,children:R(new Date(e.startsAt))}),e.title??`Untitled`]},e.meetingId)),r.length>L&&(0,F.jsxs)(`div`,{className:`cal-more`,children:[`+`,r.length-L,` more`]})]},e.toISOString())})})]})}var z=1440,B=1.8;function V(e){return e.getHours()*60+e.getMinutes()}function H(e){return e.toLocaleTimeString([],{hour:`numeric`,minute:`2-digit`})}function U({day:e,meetings:t,hourHeight:n,onSelect:r}){let i=n*24,a=t.filter(t=>!t.isAllDay&&N(new Date(t.startsAt),e));return(0,F.jsx)(`div`,{className:`cal-day-col`,children:(0,F.jsxs)(`div`,{className:`cal-hours`,style:{height:`${i}px`},children:[Array.from({length:24},(e,t)=>(0,F.jsx)(`div`,{className:`cal-hour-line`,style:{top:`${t*n}px`}},t)),a.map(t=>{let n=new Date(t.startsAt),i=t.endsAt?new Date(t.endsAt):new Date(n.getTime()+30*6e4),a=V(n),o=N(i,e)?V(i):z,s=a/z*100,c=Math.max((o-a)/z*100,B);return(0,F.jsxs)(`div`,{className:`cal-event`,style:{top:`${s}%`,height:`${c}%`},title:t.title??`Untitled`,...P(t,r),children:[(0,F.jsx)(`span`,{className:`cal-event-time`,children:H(n)}),(0,F.jsx)(`span`,{className:`cal-event-title`,children:t.title??`Untitled`})]},t.meetingId)})]})})}var W=44;function G(e){let t=new Date;return t.setHours(e,0,0,0),t.toLocaleTimeString([],{hour:`numeric`})}function K({anchor:e,meetings:t,onSelect:n}){let r=O(e),i=new Date;return(0,F.jsxs)(`div`,{className:`cal-timed`,children:[(0,F.jsxs)(`div`,{className:`cal-day-headrow`,children:[(0,F.jsx)(`div`,{className:`cal-timed-gutter`}),r.map(e=>(0,F.jsxs)(`div`,{className:`cal-day-head${N(e,i)?` cal-day-head-today`:``}`,children:[(0,F.jsx)(`span`,{className:`cal-day-head-name`,children:e.toLocaleDateString([],{weekday:`short`})}),(0,F.jsx)(`span`,{className:`cal-day-head-num`,children:e.getDate()})]},e.toISOString()))]}),(0,F.jsxs)(`div`,{className:`cal-allday-band`,children:[(0,F.jsx)(`div`,{className:`cal-timed-gutter`,children:`All-day`}),r.map(e=>(0,F.jsx)(`div`,{className:`cal-allday-cell`,children:t.filter(t=>t.isAllDay&&N(new Date(t.startsAt),e)).map(e=>(0,F.jsx)(`div`,{className:`cal-allday-chip`,title:e.title??`Untitled`,...P(e,n),children:e.title??`Untitled`},e.meetingId))},e.toISOString()))]}),(0,F.jsxs)(`div`,{className:`cal-timed-cols`,children:[(0,F.jsx)(`div`,{className:`cal-timed-gutter`,children:A().map(e=>(0,F.jsx)(`div`,{className:`cal-hour-label`,style:{height:`${W}px`},children:e===0?``:G(e)},e))}),r.map(e=>(0,F.jsx)(U,{day:e,meetings:t,hourHeight:W,onSelect:n},e.toISOString()))]})]})}var q=52;function J(e){let t=new Date;return t.setHours(e,0,0,0),t.toLocaleTimeString([],{hour:`numeric`})}function Y({anchor:e,meetings:t,onSelect:n}){let r=t.filter(t=>t.isAllDay&&N(new Date(t.startsAt),e));return(0,F.jsxs)(`div`,{className:`cal-timed cal-timed-single`,children:[(0,F.jsxs)(`div`,{className:`cal-allday-band`,children:[(0,F.jsx)(`div`,{className:`cal-timed-gutter`,children:`All-day`}),(0,F.jsx)(`div`,{className:`cal-allday-cell`,children:r.map(e=>(0,F.jsx)(`div`,{className:`cal-allday-chip`,title:e.title??`Untitled`,...P(e,n),children:e.title??`Untitled`},e.meetingId))})]}),(0,F.jsxs)(`div`,{className:`cal-timed-cols`,children:[(0,F.jsx)(`div`,{className:`cal-timed-gutter`,children:A().map(e=>(0,F.jsx)(`div`,{className:`cal-hour-label`,style:{height:`${q}px`},children:e===0?``:J(e)},e))}),(0,F.jsx)(U,{day:e,meetings:t,hourHeight:q,onSelect:n})]})]})}var X=[`M`,`T`,`W`,`T`,`F`,`S`,`S`];function Z(e){return`${e.getFullYear()}-${e.getMonth()}-${e.getDate()}`}function ne({anchor:e,meetings:t,onPickMonth:n}){let r=new Date,i=new Set(t.map(e=>Z(new Date(e.startsAt))));return(0,F.jsx)(`div`,{className:`cal-year`,children:(0,F.jsx)(`div`,{className:`cal-year-grid`,children:ee(e).map(e=>{let t=k(e),a=e.getMonth();return(0,F.jsxs)(`button`,{type:`button`,className:`cal-mini`,onClick:()=>n(e),title:e.toLocaleDateString([],{month:`long`,year:`numeric`}),children:[(0,F.jsx)(`div`,{className:`cal-mini-title`,children:e.toLocaleDateString([],{month:`long`})}),(0,F.jsx)(`div`,{className:`cal-mini-weekrow`,children:X.map((e,t)=>(0,F.jsx)(`span`,{className:`cal-mini-weekday`,children:e},t))}),(0,F.jsx)(`div`,{className:`cal-mini-grid`,children:t.map(e=>{let t=e.getMonth()!==a,n=N(e,r),o=!t&&i.has(Z(e));return(0,F.jsxs)(`span`,{className:`cal-mini-day${t?` cal-mini-day-out`:``}${n?` cal-mini-day-today`:``}`,children:[e.getDate(),o&&(0,F.jsx)(`span`,{className:`cal-mini-dot`})]},e.toISOString())})})]},a)})})})}var re={meeting:`Meeting`,event:`Event`,task:`Task`};function ie(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())}T${n(t.getHours())}:${n(t.getMinutes())}`}function ae(e){return new Date(e).toISOString()}function Q(e){return Math.floor(new Date(e).getTime()/6e4)}function oe(e){let t=new Date(e.startsAt);if(e.isAllDay)return t.toLocaleDateString([],{weekday:`long`,day:`numeric`,month:`long`,year:`numeric`});let n=t.toLocaleDateString([],{weekday:`long`,day:`numeric`,month:`long`,year:`numeric`}),r=t.toLocaleTimeString([],{hour:`numeric`,minute:`2-digit`});return e.endsAt?`${n} · ${r} – ${new Date(e.endsAt).toLocaleTimeString([],{hour:`numeric`,minute:`2-digit`})}`:`${n} · ${r}`}function se(e){if(!e)return null;let t=e.match(/filename="([^"]+)"/);return t?t[1]:null}function ce(e,t){return e.email??`${e.name??`unknown`}-${t}`}function le({a:e}){let t=e.name||e.email||`Unknown`,n=e.name&&e.email?e.email:null;return(0,F.jsxs)(`span`,{className:`cal-attendee-lines`,children:[(0,F.jsx)(`span`,{className:`cal-attendee-name`,children:t}),n&&(0,F.jsx)(`span`,{className:`cal-attendee-email`,children:n})]})}function ue({meeting:e,adminFetch:r,onClose:i,onSaved:s,onDeleted:l}){let u=e.kind===`meeting`,[d,f]=(0,w.useState)(!1),[p,m]=(0,w.useState)(!1),[g,v]=(0,w.useState)(!1),[C,T]=(0,w.useState)(!1),[E,D]=(0,w.useState)(null),[O,k]=(0,w.useState)(e),[A,ee]=(0,w.useState)(e.title??``),[j,M]=(0,w.useState)(ie(e.startsAt)),[N,P]=(0,w.useState)(e.endsAt?ie(e.endsAt):``),[I,L]=(0,w.useState)(e.location??``),[R,te]=(0,w.useState)(e.privateNote??``),[z,B]=(0,w.useState)(``),[V,H]=(0,w.useState)(``);(0,w.useEffect)(()=>{let e=e=>{e.key===`Escape`&&!C&&i()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[C,i]);let U=(0,w.useCallback)(()=>{let e={},t=A.trim();t!==(O.title??``)&&(e.title=t);let n=ae(j);Q(n)!==Q(O.startsAt)&&(e.startsAt=n);let r=N?ae(N):null;(r===null?O.endsAt!==null:O.endsAt===null||Q(r)!==Q(O.endsAt))&&(e.endsAt=r);let i=I.trim()||null;i!==(O.location??null)&&(e.location=i);let a=R.trim()||null;return a!==(O.privateNote??null)&&(e.privateNote=a),e},[A,j,N,I,R,O]),W=(0,w.useCallback)(async()=>{let t=U();if(Object.keys(t).length===0){f(!1);return}T(!0),D(null);try{let n=await r(`/api/admin/calendar/meetings/${encodeURIComponent(e.meetingId)}`,{method:`PATCH`,headers:{"content-type":`application/json`},body:JSON.stringify(t)});if(!n.ok)throw Error(`HTTP ${n.status}`);let i=await n.json();k(i.meeting),s(i.meeting),f(!1)}catch(e){D(e instanceof Error?e.message:`Save failed`)}finally{T(!1)}},[r,U,e.meetingId,s]),G=(0,w.useCallback)(async()=>{let t=z.trim(),n=V.trim();if(!(!t&&!n)){T(!0),D(null);try{let i=await r(`/api/admin/calendar/meetings/${encodeURIComponent(e.meetingId)}/attendees`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({name:t||void 0,email:n||void 0})});if(!i.ok)throw Error(`HTTP ${i.status}`);let a=await i.json();k(a.meeting),s(a.meeting),B(``),H(``)}catch(e){D(e instanceof Error?e.message:`Add failed`)}finally{T(!1)}}},[r,z,V,e.meetingId,s]),K=(0,w.useCallback)(async t=>{let n=t.email?{email:t.email}:{name:t.name};T(!0),D(null);try{let t=await r(`/api/admin/calendar/meetings/${encodeURIComponent(e.meetingId)}/attendees`,{method:`DELETE`,headers:{"content-type":`application/json`},body:JSON.stringify(n)});if(!t.ok)throw Error(`HTTP ${t.status}`);let i=await t.json();k(i.meeting),s(i.meeting)}catch(e){D(e instanceof Error?e.message:`Remove failed`)}finally{T(!1)}},[r,e.meetingId,s]),q=(0,w.useCallback)(async()=>{T(!0),D(null);try{let t=await r(`/api/admin/calendar/meetings/${encodeURIComponent(e.meetingId)}`,{method:`DELETE`});if(!t.ok)throw Error(`HTTP ${t.status}`);l(e.meetingId)}catch(e){D(e instanceof Error?e.message:`Delete failed`),T(!1)}},[r,e.meetingId,l]),J=(0,w.useCallback)(async t=>{v(!1),T(!0),D(null);try{let n=await r(`/api/admin/calendar/meetings/${encodeURIComponent(e.meetingId)}/ics?attendees=${t?`1`:`0`}`);if(!n.ok)throw Error(`HTTP ${n.status}`);let i=await n.blob(),a=se(n.headers.get(`content-disposition`))??`meeting.ics`,o=URL.createObjectURL(i),s=document.createElement(`a`);s.href=o,s.download=a,document.body.appendChild(s),s.click(),s.remove(),URL.revokeObjectURL(o)}catch(e){D(e instanceof Error?e.message:`Download failed`)}finally{T(!1)}},[r,e.meetingId]),Y=re[e.kind??`meeting`],X=z.trim().length>0||V.trim().length>0;return(0,F.jsx)(`div`,{className:`cal-modal-overlay`,onClick:()=>{C||i()},children:(0,F.jsxs)(`div`,{className:`cal-modal`,role:`dialog`,"aria-modal":`true`,"aria-label":d?`Edit meeting`:`Meeting detail`,onClick:e=>e.stopPropagation(),children:[(0,F.jsxs)(`div`,{className:`cal-modal-header`,children:[(0,F.jsx)(`span`,{className:`cal-modal-kind`,children:Y}),(0,F.jsx)(`button`,{type:`button`,className:`cal-modal-close`,onClick:i,"aria-label":`Close`,autoFocus:!0,disabled:C,children:(0,F.jsx)(c,{size:16})})]}),!d&&(0,F.jsxs)(`div`,{className:`cal-modal-body`,children:[(0,F.jsx)(`div`,{className:`cal-modal-title`,children:O.title??`Untitled`}),(0,F.jsxs)(`div`,{className:`cal-modal-row`,children:[(0,F.jsx)(y,{size:14}),(0,F.jsx)(`span`,{children:oe(O)})]}),O.location&&(0,F.jsxs)(`div`,{className:`cal-modal-row`,children:[(0,F.jsx)(b,{size:14}),(0,F.jsx)(`span`,{children:O.location})]}),O.attendees.length>0&&(0,F.jsxs)(`div`,{className:`cal-modal-row cal-modal-row-top`,children:[(0,F.jsx)(h,{size:14}),(0,F.jsx)(`div`,{className:`cal-modal-attendees`,children:O.attendees.map((e,t)=>(0,F.jsx)(`div`,{className:`cal-attendee-row`,children:(0,F.jsx)(le,{a:e})},ce(e,t)))})]}),O.privateNote&&(0,F.jsxs)(`div`,{className:`cal-modal-row cal-modal-row-top`,children:[(0,F.jsx)(x,{size:14}),(0,F.jsx)(`span`,{className:`cal-modal-note`,children:O.privateNote})]}),(0,F.jsxs)(`div`,{className:`cal-modal-row cal-modal-meta`,children:[(0,F.jsx)(_,{size:14}),(0,F.jsx)(`span`,{children:Y})]})]}),d&&(0,F.jsxs)(`div`,{className:`cal-modal-body`,children:[(0,F.jsxs)(`label`,{className:`cal-modal-field`,children:[(0,F.jsx)(`span`,{children:`Title`}),(0,F.jsx)(`input`,{type:`text`,value:A,onChange:e=>ee(e.target.value),disabled:C})]}),(0,F.jsxs)(`label`,{className:`cal-modal-field`,children:[(0,F.jsx)(`span`,{children:`Start`}),(0,F.jsx)(`input`,{type:`datetime-local`,value:j,onChange:e=>M(e.target.value),disabled:C})]}),(0,F.jsxs)(`label`,{className:`cal-modal-field`,children:[(0,F.jsx)(`span`,{children:`End`}),(0,F.jsx)(`input`,{type:`datetime-local`,value:N,onChange:e=>P(e.target.value),disabled:C})]}),(0,F.jsxs)(`label`,{className:`cal-modal-field`,children:[(0,F.jsx)(`span`,{children:`Location`}),(0,F.jsx)(`input`,{type:`text`,value:I,onChange:e=>L(e.target.value),disabled:C})]}),(0,F.jsxs)(`div`,{className:`cal-modal-field`,children:[(0,F.jsx)(`span`,{children:`Attendees`}),(0,F.jsxs)(`div`,{className:`cal-modal-attendees cal-modal-attendees-edit`,children:[O.attendees.length===0&&(0,F.jsx)(`div`,{className:`cal-attendee-empty`,children:`No attendees yet.`}),O.attendees.map((e,t)=>(0,F.jsxs)(`div`,{className:`cal-attendee-row cal-attendee-row-edit`,children:[(0,F.jsx)(le,{a:e}),(0,F.jsx)(`button`,{type:`button`,className:`cal-attendee-remove`,onClick:()=>K(e),disabled:C,"aria-label":`Remove ${e.name||e.email||`attendee`}`,children:(0,F.jsx)(c,{size:13})})]},ce(e,t)))]}),(0,F.jsxs)(`div`,{className:`cal-attendee-add`,children:[(0,F.jsx)(`input`,{type:`text`,placeholder:`Name`,value:z,onChange:e=>B(e.target.value),disabled:C,"aria-label":`Attendee name`}),(0,F.jsx)(`input`,{type:`email`,placeholder:`Email`,value:V,onChange:e=>H(e.target.value),disabled:C,"aria-label":`Attendee email`}),(0,F.jsx)(`button`,{type:`button`,className:`cal-modal-btn cal-attendee-add-btn`,onClick:G,disabled:C||!X,"aria-label":`Add attendee`,children:C?(0,F.jsx)(o,{size:13,className:`spin`}):(0,F.jsx)(S,{size:13})})]})]}),(0,F.jsxs)(`label`,{className:`cal-modal-field`,children:[(0,F.jsx)(`span`,{children:`Private note`}),(0,F.jsx)(`textarea`,{className:`cal-modal-textarea`,value:R,onChange:e=>te(e.target.value),disabled:C,rows:3,placeholder:`Only you and your team can see this.`})]})]}),E&&(0,F.jsx)(`div`,{className:`cal-modal-error`,children:E}),u&&(0,F.jsxs)(`div`,{className:`cal-modal-actions`,children:[!d&&!p&&!g&&(0,F.jsxs)(F.Fragment,{children:[(0,F.jsxs)(`button`,{type:`button`,className:`cal-modal-btn`,onClick:()=>f(!0),disabled:C,children:[(0,F.jsx)(n,{size:14}),` Edit`]}),(0,F.jsxs)(`button`,{type:`button`,className:`cal-modal-btn cal-modal-btn-danger`,onClick:()=>m(!0),disabled:C,children:[(0,F.jsx)(t,{size:14}),` Delete`]}),(0,F.jsxs)(`button`,{type:`button`,className:`cal-modal-btn cal-modal-btn-download`,onClick:()=>{O.attendees.length>0?v(!0):J(!1)},disabled:C,children:[C?(0,F.jsx)(o,{size:14,className:`spin`}):(0,F.jsx)(a,{size:14}),` Download`]})]}),g&&(0,F.jsxs)(F.Fragment,{children:[(0,F.jsx)(`span`,{className:`cal-modal-confirm-text`,children:`Include attendees in the file?`}),(0,F.jsxs)(`button`,{type:`button`,className:`cal-modal-btn cal-modal-btn-primary`,onClick:()=>J(!0),disabled:C,children:[C?(0,F.jsx)(o,{size:14,className:`spin`}):null,` Yes`]}),(0,F.jsx)(`button`,{type:`button`,className:`cal-modal-btn`,onClick:()=>J(!1),disabled:C,children:`No`}),(0,F.jsx)(`button`,{type:`button`,className:`cal-modal-btn`,onClick:()=>v(!1),disabled:C,children:`Cancel`})]}),d&&(0,F.jsxs)(F.Fragment,{children:[(0,F.jsxs)(`button`,{type:`button`,className:`cal-modal-btn cal-modal-btn-primary`,onClick:W,disabled:C,children:[C?(0,F.jsx)(o,{size:14,className:`spin`}):null,` Save`]}),(0,F.jsx)(`button`,{type:`button`,className:`cal-modal-btn`,onClick:()=>{f(!1),D(null)},disabled:C,children:`Cancel`})]}),p&&(0,F.jsxs)(F.Fragment,{children:[(0,F.jsx)(`span`,{className:`cal-modal-confirm-text`,children:`Delete this meeting?`}),(0,F.jsxs)(`button`,{type:`button`,className:`cal-modal-btn cal-modal-btn-danger`,onClick:q,disabled:C,children:[C?(0,F.jsx)(o,{size:14,className:`spin`}):null,` Delete`]}),(0,F.jsx)(`button`,{type:`button`,className:`cal-modal-btn`,onClick:()=>m(!1),disabled:C,children:`Cancel`})]})]})]})})}var $=`maxy-admin-session-key`,de=[`day`,`week`,`month`,`year`];function fe(e,t){switch(e){case`day`:return t.toLocaleDateString([],{weekday:`long`,day:`numeric`,month:`long`,year:`numeric`});case`week`:{let{from:e,to:n}=j(`week`,t),r=new Date(n.getTime()-1);return`${e.toLocaleDateString([],{day:`numeric`,month:`short`})} – ${r.toLocaleDateString([],{day:`numeric`,month:`short`,year:`numeric`})}`}case`month`:return t.toLocaleDateString([],{month:`long`,year:`numeric`});case`year`:return String(t.getFullYear())}}function pe(){let[e,t]=(0,w.useState)(null),[n,r]=(0,w.useState)(!1),[i,a]=(0,w.useState)(void 0),[s,c]=(0,w.useState)(null),[l,u]=(0,w.useState)(void 0),[d,p]=(0,w.useState)(null),[h,_]=(0,w.useState)(null);(0,w.useEffect)(()=>{let e=!1,n=null;try{n=sessionStorage.getItem($)}catch{}if(!n){r(!0);return}return fetch(`/api/admin/session?session_key=${encodeURIComponent(n)}`).then(async i=>{if(!e){if(i.status===401){try{sessionStorage.removeItem($)}catch{}window.location.href=`/`;return}if(i.ok)try{let e=await i.json();typeof e.businessName==`string`&&a(e.businessName),e.sessionId!==void 0&&c(e.sessionId??null),_(e.role??null),u(e.userName===void 0?null:e.userName),p(e.avatar??null)}catch{}t(n),r(!0)}}).catch(()=>{e||(t(n),r(!0))}),()=>{e=!0}},[]);let v=(0,w.useCallback)(()=>{try{sessionStorage.removeItem($)}catch{}window.location.href=`/`},[]),[y,b]=(0,w.useState)(!1),x=(0,w.useCallback)(async()=>{b(!0);try{let e=await g();if(e){try{sessionStorage.removeItem($)}catch{}window.location.href=`/`}return e}finally{b(!1)}},[]);return n?e?(0,F.jsx)(f,{cacheKey:e,surface:`calendar`,onSessionExpired:({code:e,path:t})=>{console.warn(`[admin-auth] outcome=session-expired-redirect code=${e} path=${t} surface=calendar`);try{sessionStorage.removeItem($)}catch{}window.location.href=`/`},children:(0,F.jsx)(m,{cacheKey:e,businessName:i,sessionId:s,onLogout:v,onDisconnect:x,disconnecting:y,userName:l,userAvatar:d,role:h,children:(0,F.jsx)(me,{cacheKey:e})})}):(0,F.jsx)(`div`,{className:`cal-page`,children:(0,F.jsxs)(`div`,{className:`cal-empty`,children:[(0,F.jsx)(`p`,{children:`You are not signed in.`}),(0,F.jsxs)(`p`,{children:[`Open the `,(0,F.jsx)(`a`,{href:`/`,className:`cal-link`,children:`main admin page`}),` and log in, then return here.`]})]})}):(0,F.jsx)(`div`,{className:`cal-page`,children:(0,F.jsxs)(`div`,{className:`cal-loading`,children:[(0,F.jsx)(o,{size:18,className:`spin`}),` Loading…`]})})}function me({cacheKey:e}){let{adminFetch:t,sessionRefetchNonce:n}=l({initialCacheKey:e,surface:`calendar`}),[r,i]=(0,w.useState)(`month`),[a,c]=(0,w.useState)(()=>new Date),[u,d]=(0,w.useState)([]),[f,m]=(0,w.useState)(!1),[h,g]=(0,w.useState)(null),[y,b]=(0,w.useState)(null),[x,S]=(0,w.useState)(null);(0,w.useEffect)(()=>{let e=!1;return t(`/api/admin/calendar/booking-link`).then(async t=>{if(e||!t.ok)return;let n=await t.json();typeof n.bookingDomain==`string`&&n.bookingDomain&&S(n.bookingDomain)}).catch(()=>{}),()=>{e=!0}},[t]),(0,w.useEffect)(()=>{let e=!1,{from:n,to:i}=j(r,a);return m(!0),g(null),t(`/api/admin/calendar/meetings?from=${encodeURIComponent(n.toISOString())}&to=${encodeURIComponent(i.toISOString())}`).then(async t=>{if(e)return;if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json();d(Array.isArray(n.meetings)?n.meetings:[])}).catch(t=>{e||(g(t instanceof Error?t.message:`Failed to load`),d([]))}).finally(()=>{e||m(!1)}),()=>{e=!0}},[r,a,n,t]);let C=(0,w.useCallback)(()=>c(new Date),[]),T=(0,w.useCallback)(()=>c(e=>M(r,e,-1)),[r]),E=(0,w.useCallback)(()=>c(e=>M(r,e,1)),[r]),D=(0,w.useCallback)(e=>{c(e),i(`month`)},[]);(0,w.useEffect)(()=>{b(null)},[r,a]);let O=(0,w.useCallback)(e=>{d(t=>t.map(t=>t.meetingId===e.meetingId?e:t)),b(e)},[]),k=(0,w.useCallback)(e=>{d(t=>t.filter(t=>t.meetingId!==e)),b(null)},[]);return(0,F.jsxs)(`div`,{className:`cal-page`,children:[(0,F.jsxs)(`header`,{className:`cal-header`,children:[(0,F.jsxs)(`div`,{className:`cal-title`,children:[(0,F.jsx)(_,{size:20}),` Calendar`]}),(0,F.jsxs)(`div`,{className:`cal-nav`,children:[(0,F.jsx)(`button`,{type:`button`,className:`cal-today-btn`,onClick:C,children:`Today`}),(0,F.jsx)(`button`,{type:`button`,className:`cal-nav-btn`,onClick:T,"aria-label":`Previous`,children:(0,F.jsx)(s,{size:18})}),(0,F.jsx)(`button`,{type:`button`,className:`cal-nav-btn`,onClick:E,"aria-label":`Next`,children:(0,F.jsx)(v,{size:18})}),(0,F.jsx)(`span`,{className:`cal-range-label`,children:fe(r,a)}),f&&(0,F.jsx)(o,{size:16,className:`spin`})]}),(0,F.jsx)(`div`,{className:`cal-views`,children:de.map(e=>(0,F.jsx)(`button`,{type:`button`,className:`cal-view-btn${e===r?` cal-view-btn-active`:``}`,onClick:()=>i(e),children:e.charAt(0).toUpperCase()+e.slice(1)},e))}),x&&(0,F.jsxs)(`a`,{className:`cal-booking-link`,href:`https://${x}`,target:`_blank`,rel:`noopener noreferrer`,children:[(0,F.jsx)(p,{size:14}),` Booking page`]})]}),(0,F.jsxs)(`div`,{className:`cal-body`,children:[h&&(0,F.jsxs)(`div`,{className:`cal-error`,children:[`Could not load the calendar: `,h]}),r===`day`&&(0,F.jsx)(Y,{anchor:a,meetings:u,onSelect:b}),r===`week`&&(0,F.jsx)(K,{anchor:a,meetings:u,onSelect:b}),r===`month`&&(0,F.jsx)(te,{anchor:a,meetings:u,onSelect:b}),r===`year`&&(0,F.jsx)(ne,{anchor:a,meetings:u,onPickMonth:D})]}),y&&(0,F.jsx)(ue,{meeting:y,adminFetch:t,onClose:()=>b(null),onSaved:O,onDeleted:k})]})}(0,C.createRoot)(document.getElementById(`root`)).render((0,F.jsx)(pe,{}));
@@ -1 +0,0 @@
1
- import{it as e,rt as t}from"./chunk-ICPOFSXX-BAr-Mv1Z.js";var n=(n,r)=>e.lang.round(t.parse(n)[r]);export{n 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,{}));
@@ -1 +0,0 @@
1
- import{h as e,p as t}from"./src-CR_MU8uy.js";import{b as n}from"./chunk-ICPOFSXX-BAr-Mv1Z.js";var r=e(e=>{let{securityLevel:r}=n(),i=t(`body`);return r===`sandbox`&&(i=t((t(`#i${e}`).node()?.contentDocument??document).body)),i.select(`#${e}`)},`selectSvgElement`);export{r as t};
@@ -1 +0,0 @@
1
- import{h as e}from"./src-CR_MU8uy.js";var t=class{constructor(e){this.init=e,this.records=this.init()}static{e(this,`ImperativeState`)}reset(){this.records=this.init()}};export{t};
@@ -1 +0,0 @@
1
- import{h as e}from"./src-CR_MU8uy.js";import"./chunk-ICPOFSXX-BAr-Mv1Z.js";import"./dist-B0CkUodR.js";import"./chunk-5PVQY5BW-DCTb8IAT.js";import"./chunk-U2HBQHQK-68X653e3.js";import"./chunk-FMBD7UC4-DLq4BItQ.js";import"./chunk-BSJP7CBP-BFmHflHY.js";import"./chunk-ZZ45TVLE-DiJrujNY.js";import"./chunk-YZCP3GAM-B1VP7Rl2.js";import"./chunk-55IACEB6-WM9VJzha.js";import"./chunk-EDXVE4YY-2fSowhlW.js";import"./chunk-X2U36JSP-v3v9soX3.js";import"./chunk-5FUZZQ4R-CLH63ZH3.js";import"./chunk-ENJZ2VHE-ClcranGV.js";import"./chunk-336JU56O-C3t08Ip-.js";import{i as t,n,r,t as i}from"./chunk-4TB4RGXK-DxpoDoHg.js";var a={parser:n,get db(){return new i},renderer:r,styles:t,init:e(e=>{e.class||={},e.class.arrowMarkerAbsolute=e.arrowMarkerAbsolute},`init`)};export{a as diagram};
@@ -1 +0,0 @@
1
- import{h as e}from"./src-CR_MU8uy.js";import"./chunk-ICPOFSXX-BAr-Mv1Z.js";import"./dist-B0CkUodR.js";import"./chunk-5PVQY5BW-DCTb8IAT.js";import"./chunk-U2HBQHQK-68X653e3.js";import"./chunk-FMBD7UC4-DLq4BItQ.js";import"./chunk-BSJP7CBP-BFmHflHY.js";import"./chunk-ZZ45TVLE-DiJrujNY.js";import"./chunk-YZCP3GAM-B1VP7Rl2.js";import"./chunk-55IACEB6-WM9VJzha.js";import"./chunk-EDXVE4YY-2fSowhlW.js";import"./chunk-X2U36JSP-v3v9soX3.js";import"./chunk-5FUZZQ4R-CLH63ZH3.js";import"./chunk-ENJZ2VHE-ClcranGV.js";import"./chunk-336JU56O-C3t08Ip-.js";import{i as t,n,r,t as i}from"./chunk-4TB4RGXK-DxpoDoHg.js";var a={parser:n,get db(){return new i},renderer:r,styles:t,init:e(e=>{e.class||={},e.class.arrowMarkerAbsolute=e.arrowMarkerAbsolute},`init`)};export{a as diagram};
@@ -1 +0,0 @@
1
- import{i as e}from"./graphlib-DPIYk_sg.js";var t=4;function n(n){return e(n,t)}export{n as t};
@@ -1 +0,0 @@
1
- import{o as e}from"./chunk-CAM3fms7.js";import{A as t,C as n,E as r,I as i,K as a,M as o,N as s,O as c,S as ee,T as te,U as l,V as u,W as d,b as f,h as ne,m as p,n as re,p as ie,t as ae,w as oe,y as se}from"./useSubAccountSwitcher-BCOl64pj.js";import{i as ce,t as le}from"./graph-labels-BuKswZHJ.js";var ue=i(`arrow-left`,[[`path`,{d:`m12 19-7-7 7-7`,key:`1l729n`}],[`path`,{d:`M19 12H5`,key:`x3x0zl`}]]),de=i(`folder-plus`,[[`path`,{d:`M12 10v6`,key:`1bos4e`}],[`path`,{d:`M9 13h6`,key:`1uhe8q`}],[`path`,{d:`M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z`,key:`1kt360`}]]),fe=i(`folder`,[[`path`,{d:`M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z`,key:`1kt360`}]]),pe=i(`layout-grid`,[[`rect`,{width:`7`,height:`7`,x:`3`,y:`3`,rx:`1`,key:`1g98yp`}],[`rect`,{width:`7`,height:`7`,x:`14`,y:`3`,rx:`1`,key:`6d4xhi`}],[`rect`,{width:`7`,height:`7`,x:`14`,y:`14`,rx:`1`,key:`nxv5o0`}],[`rect`,{width:`7`,height:`7`,x:`3`,y:`14`,rx:`1`,key:`1bb6yr`}]]),me=i(`list`,[[`path`,{d:`M3 5h.01`,key:`18ugdj`}],[`path`,{d:`M3 12h.01`,key:`nlz23k`}],[`path`,{d:`M3 19h.01`,key:`noohij`}],[`path`,{d:`M8 5h13`,key:`1pao27`}],[`path`,{d:`M8 12h13`,key:`1za7za`}],[`path`,{d:`M8 19h13`,key:`m83p4d`}]]),he=i(`mouse-pointer-click`,[[`path`,{d:`M14 4.1 12 6`,key:`ita8i4`}],[`path`,{d:`m5.1 8-2.9-.8`,key:`1go3kf`}],[`path`,{d:`m6 12-1.9 2`,key:`mnht97`}],[`path`,{d:`M7.2 2.2 8 5.1`,key:`1cfko1`}],[`path`,{d:`M9.037 9.69a.498.498 0 0 1 .653-.653l11 4.5a.5.5 0 0 1-.074.949l-4.349 1.041a1 1 0 0 0-.74.739l-1.04 4.35a.5.5 0 0 1-.95.074z`,key:`s0h3yz`}]]),ge=i(`upload`,[[`path`,{d:`M12 3v12`,key:`1x0j5s`}],[`path`,{d:`m17 8-5-5-5 5`,key:`7q97r8`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}]]),m=d(),h=e(a(),1);function _e(e){let t=new Set,n=[];for(let r of e)for(let e of r.labels)e&&(t.has(e)||le.has(e)&&(t.add(e),n.push(e)));return n}var g=u(),ve=/\.(png|jpe?g|gif|webp|svg)$/i;function ye(e){return ve.test(e)}var be=`maxy-data-view`,xe=95*1024*1024,Se=48*1024*1024;function Ce(){return typeof window>`u`?`list`:window.localStorage.getItem(be)===`grid`?`grid`:`list`}function we(){let[e,t]=(0,h.useState)(null),[n,r]=(0,h.useState)(!1);return(0,h.useEffect)(()=>{let e=!1,n=null;try{n=sessionStorage.getItem(`maxy-admin-session-key`)}catch{}if(!n){t(null),r(!0);return}return fetch(`/api/admin/session?session_key=${encodeURIComponent(n)}`).then(i=>{if(!e){if(i.status===401){try{sessionStorage.removeItem(`maxy-admin-session-key`)}catch{}window.location.href=`/`;return}t(n),r(!0)}}).catch(()=>{e||(t(n),r(!0))}),()=>{e=!0}},[]),n?e?(0,g.jsx)(f,{cacheKey:e,surface:`data`,onSessionExpired:({code:e,path:t})=>{console.warn(`[admin-auth] outcome=session-expired-redirect code=${e} path=${t} surface=data`);try{sessionStorage.removeItem(`maxy-admin-session-key`)}catch{}window.location.href=`/`},children:(0,g.jsx)(`div`,{className:`data-page data-page-full`,children:(0,g.jsx)(Te,{cacheKey:e})})}):(0,g.jsx)(`div`,{className:`data-page`,children:(0,g.jsxs)(`div`,{className:`data-empty`,children:[(0,g.jsx)(`p`,{children:`You are not signed in.`}),(0,g.jsxs)(`p`,{children:[`Open the `,(0,g.jsx)(`a`,{href:`/`,className:`data-link`,children:`main admin page`}),` and log in, then return here.`]})]})}):(0,g.jsx)(`div`,{className:`data-page`,children:(0,g.jsxs)(`div`,{className:`data-loading`,children:[(0,g.jsx)(c,{size:18,className:`spin`}),` Loading…`]})})}function Te({cacheKey:e}){let{adminFetch:t,cacheKey:n,sessionRefetchNonce:r}=l({initialCacheKey:e,surface:`data`});return(0,g.jsx)(v,{adminFetch:t,cacheKey:n,sessionRefetchNonce:r})}function Ee(){if(typeof window>`u`)return`.`;let e=new URLSearchParams(window.location.hash.replace(/^#/,``)).get(`path`);return e&&e.length>0?e:`.`}function De(e){if(typeof window>`u`)return;let t=new URL(window.location.href);t.hash=e===`.`?``:`path=${encodeURIComponent(e)}`,window.history.replaceState(window.history.state,``,t.toString())}function _(e){return new Promise((t,n)=>{let r=[],i=()=>e.readEntries(e=>{e.length===0?t(r):(r.push(...e),i())},n);i()})}function Oe(e){return new Promise((t,n)=>e.file(t,n))}async function ke(e,t=``){let n=[];for(let r of e){if(!r)continue;let e=t?`${t}/${r.name}`:r.name;if(r.isFile)n.push({file:await Oe(r),relpath:e});else if(r.isDirectory){let t=await _(r.createReader());n.push(...await ke(t,e))}}return n}function Ae(e,t){if(e===422&&typeof t==`string`){if(/exceeds the .* limit/i.test(t))return`size`;if(/unsupported file type/i.test(t))return`mime`}return`http=${e}`}function v({adminFetch:e,cacheKey:i,sessionRefetchNonce:a}){let[l,u]=(0,h.useState)(``),d=(0,h.useRef)(null),[f,le]=(0,h.useState)(``),[m,ve]=(0,h.useState)(null),[we,Te]=(0,h.useState)(`hybrid`),[_,Oe]=(0,h.useState)(!1),[v,y]=(0,h.useState)(null),[b,Ne]=(0,h.useState)(null),[Ie,Le]=(0,h.useState)(0),[x,Re]=(0,h.useState)(!1),[S,ze]=(0,h.useState)(()=>Ee()),[C,Be]=(0,h.useState)(null),[w,Ve]=(0,h.useState)(()=>Ce()),[T,He]=(0,h.useState)(null),[E,Ue]=(0,h.useState)([]),[D,We]=(0,h.useState)(!1),[Ge,Ke]=(0,h.useState)(null),[qe,O]=(0,h.useState)(!1),[k,A]=(0,h.useState)(null),[Je,j]=(0,h.useState)(null),[Ye,Xe]=(0,h.useState)(null),[Ze,Qe]=(0,h.useState)(!1),[$e,et]=(0,h.useState)(null),M=(0,h.useRef)(null),[tt,N]=(0,h.useState)(0),[nt,P]=(0,h.useState)(!1),[rt,it]=(0,h.useState)(``),[F,I]=(0,h.useState)(null),[at,ot]=(0,h.useState)(``),[st,L]=(0,h.useState)(null),R=(()=>{let e=S===`.`?[]:S.split(`/`).filter(Boolean);return e.length>=2&&e[0]===`accounts`})();(0,h.useEffect)(()=>{console.info(`[data-ui] op=mount header=operator home=absent`)},[]);let ct=(0,h.useCallback)(()=>{try{sessionStorage.removeItem(`maxy-admin-session-key`)}catch{}window.location.href=`/`},[]),lt=(0,h.useCallback)(e=>{e===`chat`&&(window.location.href=`/`)},[]),[z,ut]=(0,h.useState)([]),[dt,ft]=(0,h.useState)(`files`),{subAccounts:pt,activeAccountId:mt,switching:ht,switchAccount:gt}=ae(i);(0,h.useEffect)(()=>{if(!i)return;let e=!1;return fetch(`/api/whatsapp-reader/conversations?session_key=${encodeURIComponent(i)}&includePersistedOnly=1`).then(e=>e.ok?e.json():{conversations:[]}).then(t=>{e||ut(t.conversations??[])}).catch(()=>{}),()=>{e=!0}},[i]);let _t=(0,h.useMemo)(()=>[...new Set(z.map(e=>e.channel))],[z]),[vt,yt]=(0,h.useState)(!1),bt=(0,h.useRef)(null),[B,V]=(0,h.useState)(!1),xt=(0,h.useRef)(null);(0,h.useEffect)(()=>{let e=l.trim();if(!e){le(``),ve(null),y(null);return}Re(!1);let t=setTimeout(()=>le(e),300);return()=>clearTimeout(t)},[l]),(0,h.useEffect)(()=>{if(!f){Oe(!1);return}let t=!1;return Oe(!0),y(null),e(`/api/admin/graph-search?q=${encodeURIComponent(f)}&labels=FileArtifact&limit=20${x?`&threshold=0`:``}`).then(async e=>{let t=await e.json().catch(()=>({error:`HTTP ${e.status}`}));if(!e.ok)throw Error(t.error??`HTTP ${e.status}`);return t}).then(e=>{t||(ve(e.results),Te(e.mode??`hybrid`),Le(typeof e.suppressed==`number`?e.suppressed:0))}).catch(e=>{t||y(e instanceof Error?e.message:String(e))}).finally(()=>{t||Oe(!1)}),()=>{t=!0}},[f,e,a,x]);let St=(0,h.useMemo)(()=>m?_e(m):[],[m]),H=b&&St.includes(b)?b:null,U=(0,h.useMemo)(()=>m?H?m.filter(e=>e.labels.includes(H)):m:null,[m,H]),Ct=(0,h.useCallback)(e=>{let t=e.properties.relativePath;if(typeof t!=`string`||t.length===0)return;let n=`/api/admin/files/download?session_key=${encodeURIComponent(i)}&path=${encodeURIComponent(t)}`,r=document.createElement(`a`);r.href=n,r.rel=`noopener noreferrer`,document.body.appendChild(r),r.click(),r.remove()},[i]);(0,h.useEffect)(()=>{if(!m)return;let e=m.filter(e=>{let t=e.properties.relativePath;return typeof t!=`string`||t.length===0});e.length>0&&console.warn(`[data-search] op=locate-link-missing nodeId=${e.map(e=>e.nodeId).join(`,`)}`)},[m]),(0,h.useEffect)(()=>{let t=!1;return We(!0),Ke(null),e(`/api/admin/files?path=${encodeURIComponent(S===`.`?``:S)}`).then(async e=>{let t=await e.json().catch(()=>({error:`HTTP ${e.status}`}));if(!e.ok)throw Error(t.error??`HTTP ${e.status}`);return t}).then(e=>{t||(Be(e.entries),Ue(e.displayPath??[]))}).catch(e=>{t||(Be([]),Ue([]),Ke(e instanceof Error?e.message:String(e)))}).finally(()=>{t||We(!1)}),()=>{t=!0}},[e,S,tt,a]),(0,h.useEffect)(()=>{De(S)},[S]);let wt=(0,h.useCallback)(()=>{N(e=>e+1)},[]),W=(0,h.useCallback)(e=>{yt(!1),ze(e)},[]),Tt=(0,h.useCallback)(e=>{let t=e.properties.relativePath;if(typeof t!=`string`||t.length===0)return;let n=t.lastIndexOf(`/`),r=n===-1?`.`:t.slice(0,n);console.log(`[data-search] op=locate nodeId=${e.nodeId} folder=${r}`),u(``),y(null),Ne(null),W(r)},[W]),Et=(0,h.useCallback)(()=>{if(S===`.`||S===``)return;let e=S.split(`/`).filter(Boolean);e.pop(),ze(e.length===0?`.`:e.join(`/`))},[S]),G=(0,h.useCallback)(e=>{p(i,S===`.`?e.name:`${S}/${e.name}`)},[S,i]),[K,Dt]=(0,h.useState)(!1),[q,Ot]=(0,h.useState)(new Set),kt=(0,h.useRef)(null),J=(0,h.useRef)(!1),Y=typeof navigator<`u`&&typeof navigator.share==`function`&&typeof navigator.canShare==`function`,At=(0,h.useCallback)(e=>{Dt(!0),Ot(new Set([e])),console.info(`[data-ui] op=select-enter count=1`)},[]),X=(0,h.useCallback)(e=>{Dt(!1),Ot(new Set),console.info(`[data-ui] op=select-exit reason=${e}`)},[]),Z=(0,h.useCallback)(e=>{Ot(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),jt=(0,h.useCallback)(e=>{J.current=!1,kt.current=setTimeout(()=>{J.current=!0,At(e)},500)},[At]),Q=(0,h.useCallback)(()=>{kt.current&&=(clearTimeout(kt.current),null)},[]),Mt=(0,h.useCallback)(e=>{if(J.current){J.current=!1;return}if(K){Z(e.name);return}G(e)},[K,Z,G]),Nt=(0,h.useCallback)(e=>{Ve(e),typeof window<`u`&&window.localStorage.setItem(be,e),console.info(`[data] op=view-mode mode=${e}`)},[]),Pt=(0,h.useCallback)(e=>{if(J.current){J.current=!1;return}if(K){Z(e.name);return}He({src:ie(i,S===`.`?e.name:`${S}/${e.name}`),alt:e.displayName??e.name})},[K,Z,S,i]),Ft=(0,h.useCallback)(()=>(C??[]).filter(e=>e.kind===`file`&&q.has(e.name)),[C,q]),It=(0,h.useCallback)(()=>(C??[]).filter(e=>(e.kind===`file`||e.kind===`directory`)&&q.has(e.name)),[C,q]),Lt=(0,h.useCallback)(()=>{let e=It(),t=e.some(e=>e.kind===`directory`);e.length===1&&!t?G(e[0]):e.length>=1&&ne(i,e.map(e=>S===`.`?e.name:`${S}/${e.name}`)),X(`action`)},[It,G,S,i,X]),Rt=(0,h.useCallback)(async()=>{let t=Ft(),n=t.filter(e=>!e.protected),r=t.length-n.length;et(r>0?`${r} protected file(s) kept`:null);for(let t of n){let n=S===`.`?t.name:`${S}/${t.name}`;try{let t=await e(`/api/admin/files?path=${encodeURIComponent(n)}`,{method:`DELETE`}),r=await t.json().catch(()=>({error:`HTTP ${t.status}`}));if(!t.ok)throw Error(r.error??`HTTP ${t.status}`)}catch(e){et(e instanceof Error?e.message:String(e))}}N(e=>e+1),X(`action`)},[Ft,S,e,X]),zt=(0,h.useCallback)(async()=>{let e=Ft();if(console.info(`[data-ui] op=share supported=${Y} count=${e.length}`),Y)try{let t=await Promise.all(e.map(async e=>{let t=S===`.`?e.name:`${S}/${e.name}`,n=`/api/admin/files/download?session_key=${encodeURIComponent(i)}&path=${encodeURIComponent(t)}`,r=await(await fetch(n)).blob();return new File([r],e.name,{type:r.type||`application/octet-stream`})}));navigator.canShare({files:t})&&await navigator.share({files:t})}catch(e){console.warn(`[data-ui] op=share-failed err=${e instanceof Error?e.message:String(e)}`)}},[Ft,Y,S,i]),Bt=(0,h.useCallback)(()=>{M.current?.click()},[]),Vt=(0,h.useCallback)((e,t={})=>{let n=(n,r,a)=>{let o=new URLSearchParams({session_key:i,path:S===`.`?``:S,filename:e.name});t.relpath&&o.set(`relpath`,t.relpath),t.token&&o.set(`token`,t.token);for(let[e,t]of Object.entries(r))o.set(e,t);return new Promise(t=>{let r=new XMLHttpRequest;r.open(`POST`,`/api/admin/files/upload?${o.toString()}`),r.setRequestHeader(`Content-Type`,e.type||`application/octet-stream`),a&&(r.upload.onprogress=e=>{e.lengthComputable&&a(e.loaded)}),r.onload=()=>{let e={};try{e=JSON.parse(r.responseText)}catch{}t({status:r.status,data:e})},r.onerror=()=>t({status:0,data:{}}),r.onabort=()=>t({status:0,data:{error:`aborted`}}),r.send(n)})};if(e.size<=xe)return n(e,{},n=>t.onProgress?.(n,e.size));let r=`${Date.now().toString(36)}-${Math.random().toString(16).slice(2,10)}`,a=Math.ceil(e.size/Se);return(async()=>{let i={status:0,data:{}};for(let o=0;o<a;o++){let s=o*Se;if(i=await n(e.slice(s,Math.min(s+Se,e.size)),{uploadId:r,seq:String(o),total:String(a)},n=>t.onProgress?.(s+n,e.size)),!(i.status>=200&&i.status<300))return i}return i})()},[i,S]),Ht=(0,h.useCallback)(async e=>{j(null),O(!0),A({loaded:0,total:e.size});try{let{status:t,data:n}=await Vt(e,{onProgress:(e,t)=>A({loaded:e,total:t})});t>=200&&t<300&&n.path?(ze(n.path.split(`/`).slice(0,-1).join(`/`)||`.`),N(e=>e+1)):j(t===0?`Network error during upload — the connection failed before the server responded.`:n.error??`Upload failed (HTTP ${t}).`)}finally{O(!1),A(null),M.current&&(M.current.value=``)}},[Vt]),Ut=(0,h.useCallback)(e=>{R&&Array.from(e.dataTransfer.types).includes(`Files`)&&(e.preventDefault(),Qe(!0))},[R]),Wt=(0,h.useCallback)(e=>{e.currentTarget.contains(e.relatedTarget)||Qe(!1)},[]),Gt=(0,h.useCallback)(async e=>{e.preventDefault(),Qe(!1);let t=Math.random().toString(16).slice(2,10),n=Array.from(e.dataTransfer.items);if(console.info(`[data-ui] op=drop-received token=${t} items=${n.length}`),n.length===0)return;if(!R){console.info(`[data-ui] op=drop-rejected token=${t} reason=no-write`),j(`Open a folder inside your account to upload`);return}let r=n.map(e=>e.webkitGetAsEntry?.()).filter(e=>!!e);O(!0),j(null),Xe(null);let i=performance.now();try{let e=await ke(r),n=e.reduce((e,t)=>e+t.file.size,0),a=new Set(e.map(e=>e.relpath.split(`/`).slice(0,-1).join(`/`)).filter(Boolean)).size;console.info(`[data-ui] op=drop-walk token=${t} files=${e.length} dirs=${a} bytes=${n}`);let o=0,s=[];for(let n=0;n<e.length;n++){let{file:r,relpath:i}=e[n];console.info(`[data-ui] op=drop-file token=${t} rel="${i}" i=${n+1}/${e.length}`),A({loaded:0,total:r.size});let{status:a,data:c}=await Vt(r,{relpath:i,token:t,onProgress:(e,t)=>A({loaded:e,total:t})});if(a>=200&&a<300)o++,console.info(`[data-ui] op=drop-file-ok token=${t} rel="${i}"`);else{let e=a===0?`http=0`:Ae(a,c.error);s.push(`${i} (${e})`),console.info(`[data-ui] op=drop-file-skip token=${t} rel="${i}" reason=${e}`)}}let c=Math.round(performance.now()-i);console.info(`[data-ui] op=drop-done token=${t} uploaded=${o} skipped=${s.length} ms=${c}`),Xe(`Uploaded ${o}, skipped ${s.length}${s.length?`: ${s.join(`, `)}`:``}`),N(e=>e+1)}catch(e){j(e instanceof Error?e.message:String(e))}finally{O(!1),A(null)}},[R,Vt]),Kt=(0,h.useCallback)(async()=>{let t=rt.trim();if(t){L(null);try{let n=await e(`/api/admin/files/folder`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({path:S===`.`?``:S,name:t})}),r=await n.json().catch(()=>({error:`HTTP ${n.status}`}));if(!n.ok)throw Error(r.error??`HTTP ${n.status}`);P(!1),it(``),N(e=>e+1)}catch(e){L(e instanceof Error?e.message:String(e))}}},[e,rt,S]),qt=(0,h.useCallback)(async()=>{if(!F)return;let t=at.trim();if(!t)return;L(null);let n=S===`.`?F:`${S}/${F}`;try{let r=await e(`/api/admin/files/rename`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({path:n,newName:t})}),i=await r.json().catch(()=>({error:`HTTP ${r.status}`}));if(!r.ok)throw Error(i.error??`HTTP ${r.status}`);I(null),ot(``),X(`action`),N(e=>e+1)}catch(e){L(e instanceof Error?e.message:String(e))}},[e,at,F,S,X]);(0,h.useEffect)(()=>{if(!vt)return;let e=e=>{bt.current&&!bt.current.contains(e.target)&&yt(!1)},t=e=>{e.key===`Escape`&&yt(!1)};return document.addEventListener(`mousedown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`keydown`,t)}},[vt]),(0,h.useEffect)(()=>{if(!B)return;let e=e=>{xt.current&&!xt.current.contains(e.target)&&V(!1)},t=e=>{e.key===`Escape`&&V(!1)};return document.addEventListener(`mousedown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`keydown`,t)}},[B]);let $=(0,h.useCallback)(e=>E.slice(0,e+1).map(e=>e.name).join(`/`),[E]),Jt=E.length>=2,Yt=Jt?[{name:`.`,label:`data`},...E.slice(0,E.length-2).map((e,t)=>({name:$(t),label:e.displayName??e.name}))]:[];return(0,g.jsxs)(`main`,{className:`data-main`,children:[(0,g.jsx)(se,{variant:`operator`,onNavigate:lt,conversationsCount:z.length,conversationsChannels:_t,onOpenConversations:()=>ft(`conversations`),onToggleSidebar:()=>{},sidebarOpen:!1,onLogout:ct,onDisconnect:async()=>!0,disconnecting:!1,subAccounts:pt,activeAccountId:mt,switchingAccount:ht,onSwitchAccount:gt}),dt===`conversations`?(0,g.jsx)(re,{conversations:z,sessionKey:i,onBack:()=>ft(`files`)}):(0,g.jsxs)(g.Fragment,{children:[(0,g.jsxs)(`div`,{className:`data-toolbar`,children:[K?(0,g.jsxs)(`button`,{type:`button`,className:`data-select-cancel`,onClick:()=>X(`cancel`),"aria-label":`Cancel selection`,children:[(0,g.jsx)(ee,{size:14}),` Cancel`]}):(0,g.jsxs)(g.Fragment,{children:[(0,g.jsxs)(`div`,{className:`data-search-input`,children:[l===``&&(0,g.jsx)(ce,{size:14}),(0,g.jsx)(`input`,{ref:d,type:`text`,value:l,onChange:e=>u(e.target.value),autoFocus:!0,autoComplete:`off`,spellCheck:!1}),_&&(0,g.jsx)(c,{size:14,className:`spin`}),l!==``&&(0,g.jsx)(`button`,{type:`button`,className:`data-search-inline-btn`,onClick:()=>{u(``),d.current?.focus()},title:`Clear search`,"aria-label":`Clear search`,children:(0,g.jsx)(ee,{size:14})})]}),(0,g.jsxs)(`div`,{className:`data-toolbar-actions`,ref:xt,children:[(0,g.jsx)(`button`,{type:`button`,className:`data-action-overflow`,onClick:()=>V(e=>!e),"aria-haspopup":`menu`,"aria-expanded":B,"aria-label":`File actions`,title:`File actions`,children:(0,g.jsx)(o,{size:16})}),(0,g.jsxs)(`div`,{className:`data-action-group`,role:`group`,"aria-label":`File actions`,"data-open":B?`true`:void 0,children:[(0,g.jsxs)(`button`,{type:`button`,className:`data-action-btn`,onClick:()=>{wt(),V(!1)},disabled:D,title:`Refresh this folder`,"aria-label":`Refresh this folder`,children:[D?(0,g.jsx)(c,{size:16,className:`spin`}):(0,g.jsx)(te,{size:16}),(0,g.jsx)(`span`,{className:`data-action-label`,children:`Refresh`})]}),(0,g.jsxs)(`button`,{type:`button`,className:`data-action-btn`,onClick:()=>{Bt(),V(!1)},disabled:qe||!R,title:R?`Upload a file`:`Open a folder inside your account to upload`,"aria-label":`Upload a file`,children:[qe?k&&k.total>0?(0,g.jsxs)(`span`,{className:`data-upload-pct`,children:[Math.round(k.loaded/k.total*100),`%`]}):(0,g.jsx)(c,{size:16,className:`spin`}):(0,g.jsx)(ge,{size:16}),(0,g.jsx)(`span`,{className:`data-action-label`,children:`Upload`})]}),(0,g.jsxs)(`button`,{type:`button`,className:`data-action-btn`,onClick:()=>{P(e=>!e),it(``),L(null),V(!1)},disabled:qe||!R,title:R?`New folder`:`Open a folder inside your account to create one`,"aria-label":`New folder`,children:[(0,g.jsx)(de,{size:16}),(0,g.jsx)(`span`,{className:`data-action-label`,children:`New folder`})]}),(0,g.jsxs)(`button`,{type:`button`,className:`data-action-btn`,onClick:()=>{Nt(w===`grid`?`list`:`grid`),V(!1)},title:w===`grid`?`List view`:`Grid view`,"aria-label":w===`grid`?`Switch to list view`:`Switch to grid view`,"aria-pressed":w===`grid`,children:[w===`grid`?(0,g.jsx)(me,{size:16}):(0,g.jsx)(pe,{size:16}),(0,g.jsx)(`span`,{className:`data-action-label`,children:w===`grid`?`List view`:`Grid view`})]})]})]})]}),(0,g.jsxs)(`div`,{className:`data-breadcrumbs`,children:[S!==`.`&&(0,g.jsx)(`button`,{type:`button`,className:`data-btn data-btn-ghost data-back-btn`,onClick:Et,title:`Up one level`,"aria-label":`Up one level`,children:(0,g.jsx)(ue,{size:14})}),Jt?(0,g.jsxs)(g.Fragment,{children:[(0,g.jsxs)(`span`,{className:`data-crumb-wrap`,ref:bt,children:[(0,g.jsx)(`button`,{type:`button`,className:`data-crumb data-crumb-ellipsis`,onClick:()=>yt(e=>!e),"aria-haspopup":`menu`,"aria-expanded":vt,"aria-label":`Show parent folders`,title:`Show parent folders`,children:`…`}),vt&&(0,g.jsx)(`div`,{className:`data-crumb-menu`,role:`menu`,children:Yt.map(e=>(0,g.jsx)(`button`,{type:`button`,role:`menuitem`,className:`data-crumb-menu-item`,onClick:()=>W(e.name),title:e.label,children:e.label},e.name))})]}),[E.length-2,E.length-1].map(e=>{let t=E[e];return(0,g.jsxs)(`span`,{className:`data-crumb-wrap`,children:[(0,g.jsx)(`span`,{className:`data-crumb-sep`,children:`/`}),(0,g.jsx)(`button`,{type:`button`,className:`data-crumb`,onClick:()=>W($(e)),title:t.name,children:t.displayName??t.name})]},$(e))})]}):(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(`button`,{type:`button`,className:`data-crumb`,onClick:()=>W(`.`),children:`data`}),E.map((e,t)=>(0,g.jsxs)(`span`,{className:`data-crumb-wrap`,children:[(0,g.jsx)(`span`,{className:`data-crumb-sep`,children:`/`}),(0,g.jsx)(`button`,{type:`button`,className:`data-crumb`,onClick:()=>W($(t)),title:e.name,children:e.displayName??e.name})]},$(t)))]})]}),nt&&(0,g.jsxs)(`div`,{className:`data-inline-form`,children:[(0,g.jsx)(`input`,{type:`text`,className:`data-inline-input`,placeholder:`Folder name`,value:rt,autoFocus:!0,onChange:e=>it(e.target.value),onKeyDown:e=>{e.key===`Enter`&&Kt(),e.key===`Escape`&&P(!1)}}),(0,g.jsx)(`button`,{type:`button`,className:`data-btn`,onClick:Kt,children:`Create`}),(0,g.jsx)(`button`,{type:`button`,className:`data-btn data-btn-ghost`,onClick:()=>P(!1),children:`Cancel`})]}),F&&(0,g.jsxs)(`div`,{className:`data-inline-form`,children:[(0,g.jsx)(`input`,{type:`text`,className:`data-inline-input`,placeholder:`New name`,value:at,autoFocus:!0,onChange:e=>ot(e.target.value),onKeyDown:e=>{e.key===`Enter`&&qt(),e.key===`Escape`&&I(null)}}),(0,g.jsx)(`button`,{type:`button`,className:`data-btn`,onClick:qt,children:`Rename`}),(0,g.jsx)(`button`,{type:`button`,className:`data-btn data-btn-ghost`,onClick:()=>I(null),children:`Cancel`})]}),st&&(0,g.jsx)(`div`,{className:`data-error`,children:st}),(0,g.jsx)(`input`,{type:`file`,ref:M,hidden:!0,onChange:e=>{let t=e.target.files?.[0];t&&Ht(t)}})]}),(0,g.jsxs)(`div`,{className:`data-body`,"data-drag-active":Ze?`true`:void 0,onDragEnter:Ut,onDragOver:Ut,onDragLeave:Wt,onDrop:Gt,children:[(v!==null||m!==null)&&(0,g.jsxs)(`section`,{className:`data-panel`,children:[v&&(0,g.jsxs)(`div`,{className:`data-error`,children:[`Search failed: `,v]}),St.length>0&&(0,g.jsx)(`div`,{className:`data-chip-row`,role:`group`,"aria-label":`Filter by type`,children:St.map(e=>{let t=e===H;return(0,g.jsx)(`button`,{type:`button`,className:`data-chip`,"data-active":t,onClick:()=>Ne(t?null:e),children:Me([e])??e},e)})}),m&&!_&&(0,g.jsxs)(`div`,{className:`data-results-meta`,children:[U.length,` of `,m.length,` result`,m.length===1?``:`s`]}),m&&!_&&!H&&Ie>0&&!x&&(0,g.jsxs)(`button`,{type:`button`,className:`data-suppressed-banner`,onClick:()=>Re(!0),children:[Ie,` low-confidence result`,Ie===1?``:`s`,` hidden — show all`]}),m&&!_&&!H&&x&&(0,g.jsx)(`button`,{type:`button`,className:`data-suppressed-banner`,onClick:()=>Re(!1),children:`Showing all results — hide low-confidence`}),m&&m.length===0&&!_&&(0,g.jsx)(`div`,{className:`data-empty-results`,children:`No matches. Try a different keyword.`}),U&&U.length>0&&(0,g.jsx)(`ul`,{className:`data-results`,children:U.map(e=>(0,g.jsx)(je,{hit:e,mode:we,onDownload:Ct,onLocate:Tt},e.nodeId))})]}),(0,g.jsxs)(`section`,{className:`data-panel`,children:[k&&(0,g.jsxs)(`div`,{className:`data-upload-progress`,role:`progressbar`,"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":k.total>0?Math.round(k.loaded/k.total*100):void 0,children:[(0,g.jsx)(`div`,{className:`data-upload-progress-track`,children:(0,g.jsx)(`div`,{className:`data-upload-progress-fill`,style:{width:`${k.total>0?Math.round(k.loaded/k.total*100):0}%`}})}),(0,g.jsxs)(`span`,{className:`data-upload-progress-label`,children:[`Uploading… `,k.total>0?`${Math.round(k.loaded/k.total*100)}%`:``]})]}),Je&&(0,g.jsxs)(`div`,{className:`data-error`,children:[`Upload failed: `,Je]}),Ye&&(0,g.jsx)(`div`,{className:`data-status`,children:Ye}),$e&&(0,g.jsxs)(`div`,{className:`data-error`,children:[`Delete failed: `,$e]}),Ge&&(0,g.jsx)(`div`,{className:`data-error`,children:Ge}),D&&(0,g.jsxs)(`div`,{className:`data-loading`,children:[(0,g.jsx)(c,{size:14,className:`spin`}),` Loading…`]}),!K&&!D&&C&&C.length>0&&(0,g.jsxs)(`div`,{className:`data-select-hint`,children:[(0,g.jsx)(he,{size:13}),(0,g.jsx)(`span`,{children:`Press and hold a file to select, rename, or delete it.`})]}),!D&&C&&C.length===0&&!Ge&&(0,g.jsx)(`div`,{className:`data-empty-results`,children:`Empty directory.`}),!D&&C&&C.length>0&&w===`grid`&&(0,g.jsx)(`ul`,{className:`data-grid`,children:C.map(e=>{let n=e.displayName??e.name,r=K&&q.has(e.name);if(e.kind===`directory`)return(0,g.jsx)(`li`,{className:`data-grid-cell`,"data-selected":r?`true`:void 0,children:(0,g.jsxs)(`button`,{type:`button`,className:`data-grid-tile`,onPointerDown:()=>jt(e.name),onPointerUp:Q,onPointerMove:Q,onPointerLeave:Q,onPointerCancel:Q,onClick:()=>{if(J.current){J.current=!1;return}if(K){Z(e.name);return}W(S===`.`?e.name:`${S}/${e.name}`)},children:[K&&(0,g.jsx)(`span`,{className:`data-entry-select-indicator`,"aria-hidden":`true`}),(0,g.jsx)(fe,{size:28,className:`data-grid-glyph`}),(0,g.jsx)(`span`,{className:`data-grid-label`,title:e.name,children:n})]})},e.name);if(e.kind===`file`){let a=ye(e.name),o=S===`.`?e.name:`${S}/${e.name}`;return(0,g.jsx)(`li`,{className:`data-grid-cell`,"data-selected":r?`true`:void 0,children:(0,g.jsxs)(`button`,{type:`button`,className:`data-grid-tile${a?` data-grid-tile-image`:``}`,onPointerDown:()=>jt(e.name),onPointerUp:Q,onPointerMove:Q,onPointerLeave:Q,onPointerCancel:Q,onClick:()=>a?Pt(e):Mt(e),title:K?void 0:a?`Preview ${n}`:`Download ${n}`,children:[K&&(0,g.jsx)(`span`,{className:`data-entry-select-indicator`,"aria-hidden":`true`}),a?(0,g.jsx)(`img`,{className:`data-grid-thumb`,src:ie(i,o),alt:n,loading:`lazy`,onError:()=>console.warn(`[data] op=thumb-error path=${o}`)}):(0,g.jsx)(t,{size:28,className:`data-grid-glyph`}),(0,g.jsx)(`span`,{className:`data-grid-label`,title:e.name,children:n}),!a&&(0,g.jsx)(`span`,{className:`data-grid-sub`,children:Pe(e.sizeBytes)})]})},e.name)}return(0,g.jsx)(`li`,{className:`data-grid-cell`,children:(0,g.jsxs)(`div`,{className:`data-grid-tile data-entry-disabled`,children:[(0,g.jsx)(t,{size:28,className:`data-grid-glyph`}),(0,g.jsx)(`span`,{className:`data-grid-label`,children:n}),(0,g.jsx)(`span`,{className:`data-grid-sub`,children:`special`})]})},e.name)})}),!D&&C&&C.length>0&&w===`list`&&(0,g.jsx)(`ul`,{className:`data-entries`,children:C.map(e=>{let t=e.displayName??e.name;if(e.kind===`directory`){let n=K&&q.has(e.name);return(0,g.jsx)(`li`,{className:`data-entry`,"data-selected":n?`true`:void 0,children:(0,g.jsxs)(`button`,{type:`button`,className:`data-entry-btn`,onPointerDown:()=>jt(e.name),onPointerUp:Q,onPointerMove:Q,onPointerLeave:Q,onPointerCancel:Q,onClick:()=>{if(J.current){J.current=!1;return}if(K){Z(e.name);return}W(S===`.`?e.name:`${S}/${e.name}`)},children:[K&&(0,g.jsx)(`span`,{className:`data-entry-select-indicator`,"aria-hidden":`true`}),(0,g.jsx)(fe,{size:14}),(0,g.jsx)(`span`,{className:`data-entry-name`,title:e.name,children:t})]})},e.name)}if(e.kind===`file`){let n=K&&q.has(e.name);return(0,g.jsx)(`li`,{className:`data-entry`,"data-selected":n?`true`:void 0,children:(0,g.jsxs)(`button`,{type:`button`,className:`data-entry-btn data-entry-file`,onPointerDown:()=>jt(e.name),onPointerUp:Q,onPointerMove:Q,onPointerLeave:Q,onPointerCancel:Q,onClick:()=>Mt(e),title:K?void 0:`Download ${t}`,children:[K&&(0,g.jsx)(`span`,{className:`data-entry-select-indicator`,"aria-hidden":`true`}),(0,g.jsxs)(`span`,{className:`data-entry-text`,children:[(0,g.jsx)(`span`,{className:`data-entry-name`,title:e.name,children:t}),(0,g.jsxs)(`span`,{className:`data-entry-meta`,title:`Modified ${Fe(e.modifiedAt)}`,children:[Pe(e.sizeBytes),` · `,Fe(e.modifiedAt)]})]})]})},e.name)}return(0,g.jsx)(`li`,{className:`data-entry`,children:(0,g.jsx)(`div`,{className:`data-entry-btn data-entry-file data-entry-disabled`,children:(0,g.jsxs)(`span`,{className:`data-entry-text`,children:[(0,g.jsx)(`span`,{className:`data-entry-name`,children:t}),(0,g.jsx)(`span`,{className:`data-entry-meta`,children:`special`})]})})},e.name)})})]})]}),K&&(0,g.jsx)(`div`,{className:`data-select-bar`,role:`toolbar`,"aria-label":`Selection actions`,children:(0,g.jsxs)(`div`,{className:`data-select-bar-inner`,children:[(0,g.jsxs)(`button`,{type:`button`,className:`data-select-action`,onClick:zt,disabled:!Y||q.size===0,title:Y?`Share selected files`:`Sharing is not supported on this device`,children:[(0,g.jsx)(oe,{size:16}),` Share`]}),(0,g.jsxs)(`button`,{type:`button`,className:`data-select-action`,onClick:Lt,disabled:q.size===0,children:[(0,g.jsx)(s,{size:16}),` Download`]}),(0,g.jsxs)(`button`,{type:`button`,className:`data-select-action`,onClick:()=>{let e=[...q][0];e&&(I(e),ot(e))},disabled:q.size!==1,children:[(0,g.jsx)(r,{size:16}),` Rename`]}),(0,g.jsxs)(`button`,{type:`button`,className:`data-select-action data-select-delete`,onClick:Rt,disabled:q.size===0,children:[(0,g.jsx)(n,{size:16}),` Delete`]})]})})]}),T&&(0,g.jsx)(`div`,{className:`chat-attachment-overlay`,role:`dialog`,"aria-label":T.alt,onClick:()=>He(null),children:(0,g.jsx)(`img`,{className:`chat-attachment-overlay-image`,src:T.src,alt:T.alt})})]})}function je({hit:e,mode:t,onDownload:n,onLocate:r}){let i=y(e.properties),a=b(e.properties),o=Me(e.labels),s=Ne(e.properties),[c,ee]=(0,h.useState)(!1),te=a&&a.length>280,l=c||!te?a:a?.slice(0,280)+`…`,u=t===`bm25`?`bm25 ${e.bm25Score.toFixed(2)}`:`vector ${e.vectorScore.toFixed(2)} · bm25 ${e.bm25Score.toFixed(2)} · combined ${e.score.toFixed(2)}`,d=e.properties.relativePath,f=typeof d==`string`&&d.length>0,ne=f?d.lastIndexOf(`/`):-1,p=f?ne===-1?`data`:d.slice(0,ne):null;return(0,g.jsxs)(`li`,{className:`data-result`,children:[(0,g.jsxs)(`div`,{role:`button`,tabIndex:0,className:`data-result-open`,onClick:()=>n(e),onKeyDown:t=>{(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),n(e))},"aria-label":`Download ${i??o??`file`}`,children:[o&&(0,g.jsx)(`div`,{className:`data-result-header`,children:(0,g.jsx)(`span`,{className:`data-result-labels`,children:o})}),i&&(0,g.jsx)(`div`,{className:`data-result-title`,children:i}),a&&(0,g.jsx)(`pre`,{className:`data-result-body`,children:l}),(0,g.jsxs)(`div`,{className:`data-result-scores`,children:[s&&(0,g.jsxs)(`span`,{className:`data-result-updated`,children:[`Updated `,Fe(s),` · `]}),u]})]}),f&&(0,g.jsxs)(`button`,{type:`button`,className:`data-result-locate`,onClick:()=>r(e),title:`Locate in ${p}`,"aria-label":`Locate in ${p}`,children:[(0,g.jsx)(fe,{size:12}),p]}),te&&(0,g.jsx)(`button`,{type:`button`,className:`data-result-toggle`,onClick:()=>ee(e=>!e),children:c?`Show less`:`Show more`})]})}function Me(e){if(e.length===0)return null;let t=e[0].replace(/([a-z])([A-Z])/g,`$1 $2`);return t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()}function y(e){for(let t of[`title`,`name`,`summary`,`headline`]){let n=e[t];if(typeof n==`string`&&n.length>0)return n.length>140?n.slice(0,140)+`…`:n}return null}function b(e){for(let t of[`content`,`summary`,`body`,`description`,`text`]){let n=e[t];if(typeof n==`string`&&n.length>0)return n}return null}function Ne(e){for(let t of[`updatedAt`,`modifiedAt`,`fetchedAt`,`createdAt`,`lastModified`]){let n=e[t];if(typeof n==`string`&&n.length>0)return n}return null}function Pe(e){return e==null?``:e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:e<1024*1024*1024?`${(e/1024/1024).toFixed(1)} MB`:`${(e/1024/1024/1024).toFixed(1)} GB`}function Fe(e){try{let t=new Date(e);if(isNaN(t.getTime()))return`—`;let n=typeof navigator<`u`?navigator.languages&&navigator.languages.length>0?[...navigator.languages]:[navigator.language]:void 0;return t.toLocaleString(n,{dateStyle:`medium`,timeStyle:`short`})}catch{return`—`}}(0,m.createRoot)(document.getElementById(`root`)).render((0,g.jsx)(we,{}));
@@ -1 +0,0 @@
1
- import"./chunk-K5T4RW27-8PvAHasY.js";import{n as e}from"./chunk-67CJDMHE-BSYzyaoH.js";export{e as createGitGraphServices};
@@ -1 +0,0 @@
1
- import"./chunk-K5T4RW27-8PvAHasY.js";import{n as e}from"./chunk-KGLVRYIC--aGaDRH5.js";export{e as createInfoServices};
@@ -1,2 +0,0 @@
1
- import"./chunk-K5T4RW27-8PvAHasY.js";import"./chunk-7N4EOEYR-CarJ7O2P.js";import"./chunk-67CJDMHE-BSYzyaoH.js";import"./chunk-KGLVRYIC--aGaDRH5.js";import"./chunk-FOC6F5B3-B9QI3Guz.js";import"./chunk-AA7GKIK3-DTNLyBpH.js";import"./chunk-2KRD3SAO-1KSJW1q6.js";import"./chunk-ORNJ4GCN-kYQmkMTi.js";import"./chunk-LIHQZDEY-BrWj7mw2.js";import"./chunk-CIAEETIT-BpjG0IzU.js";import{g as e,h as t}from"./src-CR_MU8uy.js";import{c as n}from"./chunk-ICPOFSXX-BAr-Mv1Z.js";import{t as r}from"./chunk-426QAEUC-Dirxdwjh.js";import{t as i}from"./mermaid-parser.core-G7YD_zO3.js";var a={parse:t(async t=>{let n=await i(`info`,t);e.debug(n)},`parse`)},o={version:`11.14.0`},s={parser:a,db:{getVersion:t(()=>o.version,`getVersion`)},renderer:{draw:t((t,i,a)=>{e.debug(`rendering info diagram
2
- `+t);let o=r(i);n(o,100,400,!0),o.append(`g`).append(`text`).attr(`x`,100).attr(`y`,40).attr(`class`,`version`).attr(`font-size`,32).style(`text-anchor`,`middle`).text(`v${a}`)},`draw`)}};export{s as diagram};
@@ -1 +0,0 @@
1
- import{o as e}from"./chunk-CAM3fms7.js";import{K as t,V as n,W as r}from"./useSubAccountSwitcher-BCOl64pj.js";import{n as i,t as a}from"./AdminLoginScreens-C-LlR7j1.js";import"./admin-types-DJoj6VJv.js";import"./AdminShell-B7rclo3t.js";import"./Checkbox-C3efsnUI.js";import{t as o}from"./page-CjhCRrp2.js";var s=r(),c=e(t(),1),l=n();function u(){let e=i(`operator`),t=(0,c.useRef)(null);return(0,c.useEffect)(()=>{e.appState!==`chat`&&t.current!==e.appState&&(t.current=e.appState,console.info(`[operator-ui] op=auth-gate state=${e.appState}`))},[e.appState]),e.appState===`chat`?(0,l.jsx)(o,{variant:`operator`}):(0,l.jsx)(a,{auth:e})}(0,s.createRoot)(document.getElementById(`root`)).render((0,l.jsx)(u,{}));
@@ -1 +0,0 @@
1
- import"./chunk-K5T4RW27-8PvAHasY.js";import{n as e}from"./chunk-FOC6F5B3-B9QI3Guz.js";export{e as createPacketServices};