@rubytech/create-maxy-code 0.1.482 → 0.1.483
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/payload/platform/plugins/admin/PLUGIN.md +1 -0
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +27 -1
- package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +57 -0
- package/payload/platform/plugins/docs/references/admin-ui.md +25 -0
- package/payload/platform/plugins/docs/references/neo4j.md +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/typed-edge-schema.test.js +8 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/typed-edge-schema.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/typed-edge-schema.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/typed-edge-schema.js +5 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/typed-edge-schema.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest.test.js +10 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest.test.js.map +1 -1
- package/payload/platform/plugins/memory/references/schema-knowledge-work.md +2 -1
- package/payload/server/public/activity.html +6 -6
- package/payload/server/public/assets/{AdminLoginScreens-DXYJWXaX.js → AdminLoginScreens-Jw45pvb2.js} +1 -1
- package/payload/server/public/assets/AdminShell-DR6AzflZ.js +2 -0
- package/payload/server/public/assets/{Checkbox-C08Ulc_a.js → Checkbox-D7_S2EUI.js} +1 -1
- package/payload/server/public/assets/activity-CKbv3zFM.js +1 -0
- package/payload/server/public/assets/admin-DXUspIjz.js +1 -0
- package/payload/server/public/assets/{arc-BHXuzTwg.js → arc-D-QzyndF.js} +1 -1
- package/payload/server/public/assets/architecture-YZFGNWBL-CGvD4r9F.js +1 -0
- package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-DsN_vxau.js → architectureDiagram-Q4EWVU46-W7f0Us4S.js} +1 -1
- package/payload/server/public/assets/{blockDiagram-DXYQGD6D-CvNat1uB.js → blockDiagram-DXYQGD6D-CfPS4FXg.js} +1 -1
- package/payload/server/public/assets/bot-GC7iZjtW.js +1 -0
- package/payload/server/public/assets/browser-BI-wi3CM.js +1 -0
- package/payload/server/public/assets/{c4Diagram-AHTNJAMY-E9yqTPTW.js → c4Diagram-AHTNJAMY-Dq60cLVI.js} +1 -1
- package/payload/server/public/assets/calendar-DXnv4F7l.js +1 -0
- package/payload/server/public/assets/channel-Bpg-ADC0.js +1 -0
- package/payload/server/public/assets/chat-CAdgaPW1.js +1 -0
- package/payload/server/public/assets/chevron-down-BCLf1wKu.js +1 -0
- package/payload/server/public/assets/chevron-left-BNtL-CjS.js +1 -0
- package/payload/server/public/assets/chevron-right-Bu5hsjy5.js +1 -0
- package/payload/server/public/assets/{chunk-2KRD3SAO-DpzI_0EY.js → chunk-2KRD3SAO-CXDjuDN0.js} +1 -1
- package/payload/server/public/assets/{chunk-336JU56O-eR_I9Eu4.js → chunk-336JU56O-926ox0tj.js} +2 -2
- package/payload/server/public/assets/chunk-426QAEUC-1poG7Nd3.js +1 -0
- package/payload/server/public/assets/{chunk-4BX2VUAB-D-6xk1t8.js → chunk-4BX2VUAB-C2nrPCfN.js} +1 -1
- package/payload/server/public/assets/{chunk-4TB4RGXK-BkqUcFpL.js → chunk-4TB4RGXK-CuW3FOR6.js} +1 -1
- package/payload/server/public/assets/{chunk-55IACEB6-ChCl2pSP.js → chunk-55IACEB6-B4_-In90.js} +1 -1
- package/payload/server/public/assets/{chunk-5FUZZQ4R-DasGsg54.js → chunk-5FUZZQ4R-DnYGr9CP.js} +1 -1
- package/payload/server/public/assets/{chunk-5PVQY5BW-DXlHUX1h.js → chunk-5PVQY5BW-BYCOi9bf.js} +1 -1
- package/payload/server/public/assets/{chunk-67CJDMHE-BZfVpTsE.js → chunk-67CJDMHE-CBxsC4JP.js} +1 -1
- package/payload/server/public/assets/{chunk-7N4EOEYR-C6U5TIgT.js → chunk-7N4EOEYR-CAACaqFr.js} +1 -1
- package/payload/server/public/assets/{chunk-AA7GKIK3-CA7cVDmw.js → chunk-AA7GKIK3-BoamZdS6.js} +1 -1
- package/payload/server/public/assets/{chunk-BSJP7CBP-DxN2GC3p.js → chunk-BSJP7CBP-CHk82eFy.js} +1 -1
- package/payload/server/public/assets/{chunk-CIAEETIT-C0-4wA8y.js → chunk-CIAEETIT-DdeW9zxl.js} +1 -1
- package/payload/server/public/assets/{chunk-EDXVE4YY--kyb1rLc.js → chunk-EDXVE4YY-DJqSRv2w.js} +1 -1
- package/payload/server/public/assets/{chunk-ENJZ2VHE-FBN6hR7V.js → chunk-ENJZ2VHE-BRi4BwM5.js} +1 -1
- package/payload/server/public/assets/{chunk-FMBD7UC4-Lpge4M5g.js → chunk-FMBD7UC4-OJp2CtUE.js} +1 -1
- package/payload/server/public/assets/{chunk-FOC6F5B3-CM1rwOou.js → chunk-FOC6F5B3-BUAQ6spG.js} +1 -1
- package/payload/server/public/assets/{chunk-ICPOFSXX-JdYLY3yu.js → chunk-ICPOFSXX-DeRggD-Q.js} +2 -2
- package/payload/server/public/assets/{chunk-K5T4RW27-DCUblGBr.js → chunk-K5T4RW27-EHiXZ8Py.js} +1 -1
- package/payload/server/public/assets/{chunk-KGLVRYIC-BP_cide2.js → chunk-KGLVRYIC-tOajPcpn.js} +1 -1
- package/payload/server/public/assets/{chunk-LIHQZDEY-DjMa1lOl.js → chunk-LIHQZDEY-uwO6oHIU.js} +1 -1
- package/payload/server/public/assets/{chunk-ORNJ4GCN-D51eJAoV.js → chunk-ORNJ4GCN-Dpa1_BCA.js} +1 -1
- package/payload/server/public/assets/{chunk-OYMX7WX6-4hWIO544.js → chunk-OYMX7WX6-ChdDqaQL.js} +1 -1
- package/payload/server/public/assets/chunk-QZHKN3VN-GN1tIO8J.js +1 -0
- package/payload/server/public/assets/{chunk-U2HBQHQK-BwdQf9cS.js → chunk-U2HBQHQK-5JgWosPv.js} +1 -1
- package/payload/server/public/assets/{chunk-X2U36JSP-DmDxwLOg.js → chunk-X2U36JSP-BGJqysB2.js} +1 -1
- package/payload/server/public/assets/{chunk-XPW4576I-JQyAB7ND.js → chunk-XPW4576I-GERE2ekx.js} +1 -1
- package/payload/server/public/assets/{chunk-YZCP3GAM-BonLdCzI.js → chunk-YZCP3GAM-BskqX1V5.js} +1 -1
- package/payload/server/public/assets/{chunk-ZZ45TVLE-BXKB2wSk.js → chunk-ZZ45TVLE-DG1iY-L9.js} +1 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-DMGVq8Jv.js +1 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DfddT8UV.js +1 -0
- package/payload/server/public/assets/clone-Cc9vFIEk.js +1 -0
- package/payload/server/public/assets/{cose-bilkent-S5V4N54A-BDnd4Blw.js → cose-bilkent-S5V4N54A-C8Rl4ykh.js} +1 -1
- package/payload/server/public/assets/{dagre-BmexzuER.js → dagre-DTlv-FFy.js} +1 -1
- package/payload/server/public/assets/{dagre-KV5264BT-D4WVuwPj.js → dagre-KV5264BT-C0YrJPF3.js} +1 -1
- package/payload/server/public/assets/data-D7cYlorm.js +1 -0
- package/payload/server/public/assets/{diagram-5BDNPKRD-Bbf4mT8a.js → diagram-5BDNPKRD-Dfk5oepI.js} +1 -1
- package/payload/server/public/assets/{diagram-G4DWMVQ6-BpqVTUmx.js → diagram-G4DWMVQ6-QRj55DiB.js} +1 -1
- package/payload/server/public/assets/{diagram-MMDJMWI5-DY-k5k6r.js → diagram-MMDJMWI5-BAPKsohU.js} +1 -1
- package/payload/server/public/assets/{diagram-TYMM5635-CXHxwacS.js → diagram-TYMM5635-C3iZXPkC.js} +1 -1
- package/payload/server/public/assets/{erDiagram-SMLLAGMA-BNKEc3l8.js → erDiagram-SMLLAGMA-DIbI7g_5.js} +1 -1
- package/payload/server/public/assets/{flatten-jn8bZgcI.js → flatten-DlAJeN0L.js} +1 -1
- package/payload/server/public/assets/{flowDiagram-DWJPFMVM-CbAeuJsi.js → flowDiagram-DWJPFMVM-l3eJJr8R.js} +1 -1
- package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-CeeNnL4l.js → ganttDiagram-T4ZO3ILL-aaEzHxIq.js} +1 -1
- package/payload/server/public/assets/gitGraph-7Q5UKJZL-DtjXE0UI.js +1 -0
- package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-DG8RCtfg.js → gitGraphDiagram-UUTBAWPF-Di-1eg_m.js} +1 -1
- package/payload/server/public/assets/graph-Cl72j3UC.js +51 -0
- package/payload/server/public/assets/{graph-labels-LeIhl7ZG.js → graph-labels-7p-mVi9M.js} +1 -1
- package/payload/server/public/assets/{graphlib-BkDExPQi.js → graphlib-D5awC2yp.js} +1 -1
- package/payload/server/public/assets/info-OMHHGYJF-CmArhGYf.js +1 -0
- package/payload/server/public/assets/infoDiagram-42DDH7IO-utWz7oZy.js +2 -0
- package/payload/server/public/assets/{isEmpty-Dkk6_L-B.js → isEmpty-Dh1dF-tM.js} +1 -1
- package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-D_iMHV64.js → ishikawaDiagram-UXIWVN3A-CLOd_cNf.js} +1 -1
- package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-BvPRpulx.js → journeyDiagram-VCZTEJTY-cGyfW6Tg.js} +1 -1
- package/payload/server/public/assets/{kanban-definition-6JOO6SKY-CkWaXWo2.js → kanban-definition-6JOO6SKY-CRTKWPlh.js} +1 -1
- package/payload/server/public/assets/{line-BGQT9unx.js → line-B8Brm0TD.js} +1 -1
- package/payload/server/public/assets/{linear-DzrYI8-8.js → linear-BHnSKXBe.js} +1 -1
- package/payload/server/public/assets/{maximize-2-2MgPSwlx.js → maximize-2-HcfeeOdJ.js} +1 -1
- package/payload/server/public/assets/{mermaid-parser.core-DrMY7FMe.js → mermaid-parser.core-BtNpdQct.js} +2 -2
- package/payload/server/public/assets/{mermaid.core-BWdf6fZ7.js → mermaid.core-BY87anQZ.js} +3 -3
- package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-CgqM9h97.js → mindmap-definition-QFDTVHPH-rUSv9qN1.js} +1 -1
- package/payload/server/public/assets/{operator-CZifmNhp.js → operator-C0iaGPNT.js} +1 -1
- package/payload/server/public/assets/{ordinal-DuJYM7p1.js → ordinal-Bnl5GL-x.js} +1 -1
- package/payload/server/public/assets/packet-4T2RLAQJ-BTfK0Zw4.js +1 -0
- package/payload/server/public/assets/page-DPQS0X5M.js +32 -0
- package/payload/server/public/assets/page-DsV3rID5.js +1 -0
- package/payload/server/public/assets/{pdf-render-riHufgrn.js → pdf-render-CrpAi4Ba.js} +1 -1
- package/payload/server/public/assets/pie-ZZUOXDRM-BvtPeMQY.js +1 -0
- package/payload/server/public/assets/{pieDiagram-DEJITSTG-BeUGoYS7.js → pieDiagram-DEJITSTG-Cjn9IP-C.js} +1 -1
- package/payload/server/public/assets/{public-VtmyYz8E.js → public-DAn13pnw.js} +1 -1
- package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-CX82WgKy.js → quadrantDiagram-34T5L4WZ-BkSHkSsn.js} +1 -1
- package/payload/server/public/assets/radar-PYXPWWZC-D2UXvQgn.js +1 -0
- package/payload/server/public/assets/{reduce-COyotL2V.js → reduce-Bp5oNw1n.js} +1 -1
- package/payload/server/public/assets/{requirementDiagram-MS252O5E-CzqebQXj.js → requirementDiagram-MS252O5E-hLwgyB-F.js} +1 -1
- package/payload/server/public/assets/{rotate-ccw-DaZdB2cz.js → rotate-ccw-CCbbX5ef.js} +1 -1
- package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-CaHi1yzU.js → sankeyDiagram-XADWPNL6-D6Dl1RIa.js} +1 -1
- package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-BF2AeiKW.js → sequenceDiagram-FGHM5R23-j0QBqkbL.js} +1 -1
- package/payload/server/public/assets/{stateDiagram-FHFEXIEX-DtUCA8Ih.js → stateDiagram-FHFEXIEX-TvEBNsuV.js} +1 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Ur4eM6rb.js +1 -0
- package/payload/server/public/assets/tasks-_Ij9BdOE.js +1 -0
- package/payload/server/public/assets/{time-entry-format-TD-PPEIu.js → time-entry-format-C-By1MbO.js} +1 -1
- package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-D3Q1YrKY.js → timeline-definition-GMOUNBTQ-BfivOP-j.js} +1 -1
- package/payload/server/public/assets/treeView-SZITEDCU-0dE7FvM2.js +1 -0
- package/payload/server/public/assets/treemap-W4RFUUIX-BrwlXpr5.js +1 -0
- package/payload/server/public/assets/{triangle-alert-BaLhVNnn.js → triangle-alert-BDtoi5R0.js} +1 -1
- package/payload/server/public/assets/useCopyFeedback-CfbJc9iN.js +1 -0
- package/payload/server/public/assets/useSubAccountSwitcher-5jQsc23X.css +1 -0
- package/payload/server/public/assets/{useSubAccountSwitcher-HEVLb6Z9.js → useSubAccountSwitcher-sPN6lobE.js} +1 -1
- package/payload/server/public/assets/useVoiceRecorder-DOFBQ2gP.js +2 -0
- package/payload/server/public/assets/{vennDiagram-DHZGUBPP-DnjzQDGf.js → vennDiagram-DHZGUBPP-Bvfw9aFJ.js} +1 -1
- package/payload/server/public/assets/wardley-RL74JXVD-CO9HdfJ-.js +1 -0
- package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-T3WHrUvi.js → wardleyDiagram-NUSXRM2D-C9h04G6b.js} +1 -1
- package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-2Efyv4h2.js → xychartDiagram-5P7HB3ND-BMvi2m2q.js} +1 -1
- package/payload/server/public/brand-defaults.css +4 -0
- package/payload/server/public/browser.html +4 -4
- package/payload/server/public/calendar.html +6 -5
- package/payload/server/public/chat.html +14 -12
- package/payload/server/public/data.html +11 -11
- package/payload/server/public/graph.html +11 -10
- package/payload/server/public/index.html +17 -14
- package/payload/server/public/operator.html +16 -14
- package/payload/server/public/public.html +14 -12
- package/payload/server/public/tasks.html +6 -6
- package/payload/server/public/assets/AdminShell-UDgNN4CA.js +0 -2
- package/payload/server/public/assets/activity-06gsRDVv.js +0 -1
- package/payload/server/public/assets/admin-BhiHyORH.js +0 -1
- package/payload/server/public/assets/architecture-YZFGNWBL-Ct5q6ks1.js +0 -1
- package/payload/server/public/assets/browser-Cz4IKS47.js +0 -1
- package/payload/server/public/assets/calendar-D0xtNqH8.js +0 -1
- package/payload/server/public/assets/channel-PE9vBKEQ.js +0 -1
- package/payload/server/public/assets/chat-DwLJ830n.js +0 -1
- package/payload/server/public/assets/chevron-left-Cv-TFuEf.js +0 -1
- package/payload/server/public/assets/chunk-426QAEUC-BDNZtJsz.js +0 -1
- package/payload/server/public/assets/chunk-QZHKN3VN-B_Hris8x.js +0 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-D8Q05iMI.js +0 -1
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-Dm3hAxfm.js +0 -1
- package/payload/server/public/assets/clone-C-wOwvpY.js +0 -1
- package/payload/server/public/assets/data-DUDJfnjI.js +0 -1
- package/payload/server/public/assets/gitGraph-7Q5UKJZL-BBHsY16R.js +0 -1
- package/payload/server/public/assets/graph-BAoktBcx.js +0 -51
- package/payload/server/public/assets/info-OMHHGYJF-C1j5I_zx.js +0 -1
- package/payload/server/public/assets/infoDiagram-42DDH7IO-ZWkwHWEu.js +0 -2
- package/payload/server/public/assets/packet-4T2RLAQJ-CGiTbe0N.js +0 -1
- package/payload/server/public/assets/page-B4kllGd_.js +0 -32
- package/payload/server/public/assets/page-DbfE7QwJ.js +0 -1
- package/payload/server/public/assets/pie-ZZUOXDRM-BrK023dE.js +0 -1
- package/payload/server/public/assets/radar-PYXPWWZC-p7NRamXX.js +0 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-a4FvB3L8.js +0 -1
- package/payload/server/public/assets/tasks-CvqVDbfO.js +0 -1
- package/payload/server/public/assets/treeView-SZITEDCU-CoWk8VoG.js +0 -1
- package/payload/server/public/assets/treemap-W4RFUUIX-BhWeGj8Y.js +0 -1
- package/payload/server/public/assets/useCopyFeedback-BhjPzRa3.js +0 -1
- package/payload/server/public/assets/useSubAccountSwitcher-CWRpVt1-.css +0 -1
- package/payload/server/public/assets/useVoiceRecorder-CfGgj3vm.js +0 -2
- package/payload/server/public/assets/wardley-RL74JXVD-C0q3Hqng.js +0 -1
- /package/payload/server/public/assets/{_baseFor-Bjj9It3Q.js → _baseFor-BBkmqPEk.js} +0 -0
- /package/payload/server/public/assets/{array-BrrxEo12.js → array-Bjtb2C_5.js} +0 -0
- /package/payload/server/public/assets/{cytoscape.esm-CTWJxUxo.js → cytoscape.esm-B1dQ664k.js} +0 -0
- /package/payload/server/public/assets/{defaultLocale-CFDbRV4k.js → defaultLocale-iwYA7ne8.js} +0 -0
- /package/payload/server/public/assets/{dist-BATfy7Sn.js → dist-CLmrZbY7.js} +0 -0
- /package/payload/server/public/assets/{init-dXCzGgLP.js → init-CxnBAgcf.js} +0 -0
- /package/payload/server/public/assets/{katex-CHA1JFYJ.js → katex-DojHoLIr.js} +0 -0
- /package/payload/server/public/assets/{path-CCRpdXhK.js → path-JZiojYzQ.js} +0 -0
- /package/payload/server/public/assets/{preload-helper-CH6UZRzu.js → preload-helper-CT1Z6Pdu.js} +0 -0
- /package/payload/server/public/assets/{rough.esm-Bud4g4fh.js → rough.esm-D5NinLFK.js} +0 -0
- /package/payload/server/public/assets/{src-DNdBRXXx.js → src-DQ0MSD6q.js} +0 -0
package/package.json
CHANGED
|
@@ -169,6 +169,7 @@ Tools are available via the `admin` MCP server.
|
|
|
169
169
|
| Set up business profile | Admin asks to set up, complete, or update business operational data | `skills/business-profile/SKILL.md` |
|
|
170
170
|
| Generate a QR code | User asks to generate, create, or make a QR code from a URL, Wi-Fi details, contact, or text | `skills/qr-code/SKILL.md` |
|
|
171
171
|
| Timezone queries | User asks for the time in another city, timezone conversion, UTC offset, or DST status | `skills/datetime/SKILL.md` |
|
|
172
|
+
| What's new / release notes | User asks what's new, what changed, latest updates, recent changes, or how current their install is | `skills/whats-new/SKILL.md` |
|
|
172
173
|
| Manage access grants | Admin asks to invite visitors, revoke or extend access, list who has access, or set an agent's access mode | `skills/access-manager/SKILL.md` |
|
|
173
174
|
| Manage plugins and settings | User asks to install, enable, disable, or configure plugins, or change account settings | `skills/plugin-management/SKILL.md` |
|
|
174
175
|
| Manage specialists | User asks to install or remove a specialist subagent, or activate/deactivate premium plugin agents | `skills/specialist-management/SKILL.md` |
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: platform-architecture
|
|
3
3
|
description: Use when grounding any documented-surface claim about what Maxy ships — plugins, skills, specialists, install/deploy flows, internals. This is the install catalogue, not evidence of what is enabled on the current account. For install state on this account, call `capabilities-here`; for documented surface, cite the `Source:` URL inline.
|
|
4
|
-
content-hash: sha256:
|
|
4
|
+
content-hash: sha256:860985abfaeacef667442edd05ba359dfcdc734746919c2856550b4b2631e38f
|
|
5
5
|
brand: maxy-code
|
|
6
6
|
product-name: Maxy
|
|
7
7
|
---
|
|
@@ -3283,6 +3283,31 @@ documented in
|
|
|
3283
3283
|
[`platform.md`](platform.md) "The Web Interface" — that paragraph is
|
|
3284
3284
|
authoritative. This section names the surfaces and what backs each.
|
|
3285
3285
|
|
|
3286
|
+
> **Redesigned chrome.** The admin shell was rebuilt so the sidebar
|
|
3287
|
+
> owns all navigation; the full-width top header bar, the burger flyout, and the
|
|
3288
|
+
> "Powered by Claude Code" footer strip are retired. After the redesign:
|
|
3289
|
+
>
|
|
3290
|
+
> - **Nav rows** are Dashboard, Chat, Tasks, Calendar, Data, the brand container
|
|
3291
|
+
> row (Projects / Properties / Jobs, opening the graph filtered to the brand's
|
|
3292
|
+
> primary container), Activity, and Browser. The active row carries an accent
|
|
3293
|
+
> left indicator. The older People / Agents / Artefacts entries in the table
|
|
3294
|
+
> below are pre-redesign.
|
|
3295
|
+
> - **Dashboard home** renders on `/` (a greeting, stat cards, a Live-now column,
|
|
3296
|
+
> a Recent artefacts card, and a Channels column), consuming existing endpoints
|
|
3297
|
+
> only.
|
|
3298
|
+
> - **Per-surface header.** Each surface carries its own header (`PageHeader`):
|
|
3299
|
+
> the sidebar collapse toggle, the page title, and a Claude status pill on the
|
|
3300
|
+
> right (Connected / Connect, driven by `/api/health`). The pill replaces the
|
|
3301
|
+
> retired burger Disconnect visibility and footer strip.
|
|
3302
|
+
> - **Account kebab.** The version / Connect-Disconnect / Change PIN / Switch
|
|
3303
|
+
> account / Log out items moved from the burger onto a kebab on the sidebar user
|
|
3304
|
+
> footer (`AccountMenu`, extracted from the old `HeaderMenu`; the operator
|
|
3305
|
+
> variant still mounts `AccountMenu` for its reduced set).
|
|
3306
|
+
> - **Mobile (< 720px).** The sidebar opens as a drawer from a 44x44 header menu
|
|
3307
|
+
> button, and a fixed bottom tab bar (Home, Chat, Tasks, Data, Calendar) sits
|
|
3308
|
+
> under the content; Graph, Activity, and Browser stay reachable through the
|
|
3309
|
+
> drawer. Between 721 and 1080px the sidebar defaults to the rail.
|
|
3310
|
+
|
|
3286
3311
|
> **Admin variant only.** Every surface below belongs to the `admin` shell
|
|
3287
3312
|
> variant. The **operator** variant (`operator.<host>`) mounts no sidebar at
|
|
3288
3313
|
> all: its dashboard is the persistent admin webchat at `/` and the data
|
|
@@ -3760,6 +3785,7 @@ If a session never runs an insight pass, its prose nodes are not lost — the ne
|
|
|
3760
3785
|
| Person | AUTHORED | Report |
|
|
3761
3786
|
| Person | AUTHORED | Page |
|
|
3762
3787
|
| Person | AUTHORED | Note |
|
|
3788
|
+
| Person | AUTHORED | KnowledgeDocument |
|
|
3763
3789
|
| KnowledgeDocument | ATTACHED_TO | Meeting |
|
|
3764
3790
|
| Page | ATTACHED_TO | Project |
|
|
3765
3791
|
| Note | ATTACHED_TO | Project |
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: whats-new
|
|
3
|
+
description: "The platform's release notes: a dated, high-level timeline of the features and fixes that have shipped. Use when the operator asks what's new, what changed, what has been updated, latest updates, recent changes, release notes, or what the assistant can do now."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# What's new
|
|
7
|
+
|
|
8
|
+
Invoked by the admin agent directly.
|
|
9
|
+
|
|
10
|
+
This is the platform's release timeline, newest first. Each entry shows the date it shipped and the version it shipped in, so you can tell the operator how current their install is. To compare, read the installed version from `capabilities-here` and match it against the versions below. Keep answers high level and in plain English; this is a summary, not a full commit log.
|
|
11
|
+
|
|
12
|
+
## 2026-07-21 (0.1.482)
|
|
13
|
+
|
|
14
|
+
- WhatsApp now runs a separate connection for each client account, so one client's messages never mix with another's.
|
|
15
|
+
- A client account can pair its own WhatsApp number, and the assistant can reply inside an existing WhatsApp thread on that number.
|
|
16
|
+
|
|
17
|
+
## 2026-07-20 (0.1.481)
|
|
18
|
+
|
|
19
|
+
- Data portal: a client can browse their whole folder tree, not just uploads, and download files held on the device through a private timed link.
|
|
20
|
+
- The activity page was rebuilt as one card per live session, with a date-range filter and active-time for each session.
|
|
21
|
+
- The tasks list now opens inside the admin screen instead of a separate view.
|
|
22
|
+
- Incoming WhatsApp messages are now saved under the correct account.
|
|
23
|
+
- Outlook sign-in is steadier: token refreshes no longer clash between processes.
|
|
24
|
+
|
|
25
|
+
## 2026-07-11 (0.1.436)
|
|
26
|
+
|
|
27
|
+
- Reading a WhatsApp history now finds the right account's conversations.
|
|
28
|
+
|
|
29
|
+
## 2026-07-10 (0.1.427)
|
|
30
|
+
|
|
31
|
+
- You can now reassign which team member manages a client account.
|
|
32
|
+
- Time spent can be recorded against a task.
|
|
33
|
+
- Email setup can point drafts at a chosen folder.
|
|
34
|
+
|
|
35
|
+
## 2026-07-08 (0.1.414)
|
|
36
|
+
|
|
37
|
+
- The client view now shows the account manager's WhatsApp threads alongside the rest.
|
|
38
|
+
|
|
39
|
+
## 2026-07-05 (0.1.401)
|
|
40
|
+
|
|
41
|
+
- Each brand now carries its own colour theme.
|
|
42
|
+
- The chat box shows a Connect prompt when the assistant is offline, instead of failing silently.
|
|
43
|
+
|
|
44
|
+
## 2026-07-01 (0.1.377)
|
|
45
|
+
|
|
46
|
+
- The WhatsApp reader shows saved conversations even when nothing is in the live cache.
|
|
47
|
+
|
|
48
|
+
## 2026-06-28 (0.1.370)
|
|
49
|
+
|
|
50
|
+
- Public booking page: set how far ahead people can book, page through five days at a time, and allow back-to-back slots.
|
|
51
|
+
- The admin calendar links straight to your public booking page.
|
|
52
|
+
- Telegram is now a first-class channel, the same as WhatsApp and web chat.
|
|
53
|
+
|
|
54
|
+
## 2026-06-18 (0.1.336)
|
|
55
|
+
|
|
56
|
+
- Every operator-facing reply is now written in plain English.
|
|
57
|
+
- Project guides added: stakeholder mapping, pre-mortem, prioritisation, and turning a meeting into tasks.
|
|
@@ -393,6 +393,31 @@ documented in
|
|
|
393
393
|
[`platform.md`](platform.md) "The Web Interface" — that paragraph is
|
|
394
394
|
authoritative. This section names the surfaces and what backs each.
|
|
395
395
|
|
|
396
|
+
> **Redesigned chrome.** The admin shell was rebuilt so the sidebar
|
|
397
|
+
> owns all navigation; the full-width top header bar, the burger flyout, and the
|
|
398
|
+
> "Powered by Claude Code" footer strip are retired. After the redesign:
|
|
399
|
+
>
|
|
400
|
+
> - **Nav rows** are Dashboard, Chat, Tasks, Calendar, Data, the brand container
|
|
401
|
+
> row (Projects / Properties / Jobs, opening the graph filtered to the brand's
|
|
402
|
+
> primary container), Activity, and Browser. The active row carries an accent
|
|
403
|
+
> left indicator. The older People / Agents / Artefacts entries in the table
|
|
404
|
+
> below are pre-redesign.
|
|
405
|
+
> - **Dashboard home** renders on `/` (a greeting, stat cards, a Live-now column,
|
|
406
|
+
> a Recent artefacts card, and a Channels column), consuming existing endpoints
|
|
407
|
+
> only.
|
|
408
|
+
> - **Per-surface header.** Each surface carries its own header (`PageHeader`):
|
|
409
|
+
> the sidebar collapse toggle, the page title, and a Claude status pill on the
|
|
410
|
+
> right (Connected / Connect, driven by `/api/health`). The pill replaces the
|
|
411
|
+
> retired burger Disconnect visibility and footer strip.
|
|
412
|
+
> - **Account kebab.** The version / Connect-Disconnect / Change PIN / Switch
|
|
413
|
+
> account / Log out items moved from the burger onto a kebab on the sidebar user
|
|
414
|
+
> footer (`AccountMenu`, extracted from the old `HeaderMenu`; the operator
|
|
415
|
+
> variant still mounts `AccountMenu` for its reduced set).
|
|
416
|
+
> - **Mobile (< 720px).** The sidebar opens as a drawer from a 44x44 header menu
|
|
417
|
+
> button, and a fixed bottom tab bar (Home, Chat, Tasks, Data, Calendar) sits
|
|
418
|
+
> under the content; Graph, Activity, and Browser stay reachable through the
|
|
419
|
+
> drawer. Between 721 and 1080px the sidebar defaults to the rail.
|
|
420
|
+
|
|
396
421
|
> **Admin variant only.** Every surface below belongs to the `admin` shell
|
|
397
422
|
> variant. The **operator** variant (`operator.<host>`) mounts no sidebar at
|
|
398
423
|
> all: its dashboard is the persistent admin webchat at `/` and the data
|
|
@@ -55,6 +55,7 @@ If a session never runs an insight pass, its prose nodes are not lost — the ne
|
|
|
55
55
|
| Person | AUTHORED | Report |
|
|
56
56
|
| Person | AUTHORED | Page |
|
|
57
57
|
| Person | AUTHORED | Note |
|
|
58
|
+
| Person | AUTHORED | KnowledgeDocument |
|
|
58
59
|
| KnowledgeDocument | ATTACHED_TO | Meeting |
|
|
59
60
|
| Page | ATTACHED_TO | Project |
|
|
60
61
|
| Note | ATTACHED_TO | Project |
|
|
@@ -73,6 +73,14 @@ describe("typed-edge-schema", () => {
|
|
|
73
73
|
expect(isAllowedTypedEdge("Person", "FOUNDED", "Organization")).toBe(true);
|
|
74
74
|
expect(isAllowedTypedEdge("Person", "FOUNDED", "LocalBusiness")).toBe(true);
|
|
75
75
|
});
|
|
76
|
+
it("attributes an ingested KnowledgeDocument to its author (Task 1861)", () => {
|
|
77
|
+
// A bylined web article ingested via memory-ingest lands as a
|
|
78
|
+
// :KnowledgeDocument (full text on disk) and carries its author with
|
|
79
|
+
// AUTHORED. Distinct from :Source, whose author is AUTHORED_BY.
|
|
80
|
+
expect(isAllowedTypedEdge("Person", "AUTHORED", "KnowledgeDocument")).toBe(true);
|
|
81
|
+
expect(isAllowedTypedEdge("Person", "AUTHORED", "Post")).toBe(true);
|
|
82
|
+
expect(isAllowedTypedEdge("Source", "AUTHORED_BY", "Person")).toBe(true);
|
|
83
|
+
});
|
|
76
84
|
it("no duplicate entries in the allowlist", () => {
|
|
77
85
|
const seen = new Set();
|
|
78
86
|
for (const { sourceLabel, edgeType, targetLabel } of TYPED_EDGE_ALLOWLIST) {
|
package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/typed-edge-schema.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typed-edge-schema.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/typed-edge-schema.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"typed-edge-schema.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/typed-edge-schema.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typed-edge-schema.d.ts","sourceRoot":"","sources":["../../src/lib/typed-edge-schema.ts"],"names":[],"mappings":"AAyCA,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,EAAE,aAAa,CAAC,aAAa,
|
|
1
|
+
{"version":3,"file":"typed-edge-schema.d.ts","sourceRoot":"","sources":["../../src/lib/typed-edge-schema.ts"],"names":[],"mappings":"AAyCA,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,EAAE,aAAa,CAAC,aAAa,CA+F7D,CAAC;AAUF,uEAAuE;AACvE,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,OAAO,CAET;AAED,gEAAgE;AAChE,eAAO,MAAM,gBAAgB,EAAE,aAAa,CAAC,MAAM,CAE3C,CAAC;AAKT;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE/D;AAED,mGAAmG;AACnG,eAAO,MAAM,oBAAoB,EAAE,aAAa,CAAC,MAAM,CAUtD,CAAC"}
|
|
@@ -92,11 +92,15 @@ export const TYPED_EDGE_ALLOWLIST = [
|
|
|
92
92
|
{ sourceLabel: "Post", edgeType: "MENTIONS", targetLabel: "Organization" },
|
|
93
93
|
{ sourceLabel: "Report", edgeType: "MENTIONS", targetLabel: "Person" },
|
|
94
94
|
{ sourceLabel: "Report", edgeType: "MENTIONS", targetLabel: "Organization" },
|
|
95
|
-
// AUTHORED — person authored a prose-bearing artefact.
|
|
95
|
+
// AUTHORED — person authored a prose-bearing artefact. An ingested
|
|
96
|
+
// full-text document (a :KnowledgeDocument, body on disk) carries its
|
|
97
|
+
// byline here too; this is distinct from a :Source citation target,
|
|
98
|
+
// whose author is AUTHORED_BY.
|
|
96
99
|
{ sourceLabel: "Person", edgeType: "AUTHORED", targetLabel: "Post" },
|
|
97
100
|
{ sourceLabel: "Person", edgeType: "AUTHORED", targetLabel: "Report" },
|
|
98
101
|
{ sourceLabel: "Person", edgeType: "AUTHORED", targetLabel: "Page" },
|
|
99
102
|
{ sourceLabel: "Person", edgeType: "AUTHORED", targetLabel: "Note" },
|
|
103
|
+
{ sourceLabel: "Person", edgeType: "AUTHORED", targetLabel: "KnowledgeDocument" },
|
|
100
104
|
// ATTACHED_TO — document or media attached to a higher-level entity.
|
|
101
105
|
{ sourceLabel: "KnowledgeDocument", edgeType: "ATTACHED_TO", targetLabel: "Meeting" },
|
|
102
106
|
{ sourceLabel: "Page", edgeType: "ATTACHED_TO", targetLabel: "Project" },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typed-edge-schema.js","sourceRoot":"","sources":["../../src/lib/typed-edge-schema.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"typed-edge-schema.js","sourceRoot":"","sources":["../../src/lib/typed-edge-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import { describe, it, expect } from "vitest";
|
|
|
2
2
|
import { readFileSync } from "node:fs";
|
|
3
3
|
import { dirname, resolve } from "node:path";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { isAllowedTypedEdge } from "../../lib/typed-edge-schema.js";
|
|
5
6
|
const __filename = fileURLToPath(import.meta.url);
|
|
6
7
|
const __dirname = dirname(__filename);
|
|
7
8
|
const PACKAGE_ROOT = resolve(__dirname, "..", "..", "..");
|
|
@@ -140,6 +141,15 @@ describe("memory-ingest — typed-entity edge guard (Task 482)", () => {
|
|
|
140
141
|
expect(source).toMatch(/sourceLabel\s*=\s*docEdge\.direction === ["']outgoing["']\s*\?\s*["']KnowledgeDocument["']\s*:\s*docEdge\.targetKind/);
|
|
141
142
|
expect(source).toMatch(/rejectIfDisallowedTypedEdge\s*\(\s*\{\s*sourceLabel\s*,\s*edgeType:\s*docEdge\.type\s*,\s*targetLabel\s*,/);
|
|
142
143
|
});
|
|
144
|
+
it("accepts an incoming AUTHORED byline documentEdge onto a KnowledgeDocument (Task 1861)", () => {
|
|
145
|
+
// Replicates writeDocumentEdge's label mapping (memory-ingest.ts:1279-1282)
|
|
146
|
+
// for a byline: an incoming edge from a :Person author. Before Task 1861
|
|
147
|
+
// this triple was rejected "not in TYPED_EDGE_ALLOWLIST"; now it passes.
|
|
148
|
+
const docEdge = { type: "AUTHORED", direction: "incoming", targetKind: "Person" };
|
|
149
|
+
const sourceLabel = docEdge.direction === "outgoing" ? "KnowledgeDocument" : docEdge.targetKind;
|
|
150
|
+
const targetLabel = docEdge.direction === "outgoing" ? docEdge.targetKind : "KnowledgeDocument";
|
|
151
|
+
expect(isAllowedTypedEdge(sourceLabel, docEdge.type, targetLabel)).toBe(true);
|
|
152
|
+
});
|
|
143
153
|
it("both call sites pass the section's own label and anchor info into writeRelatedAndEdge", () => {
|
|
144
154
|
const source = readIngest();
|
|
145
155
|
// Standalone path — section.kind (e.g. 'Project') is the from-label.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-ingest.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/memory-ingest.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"memory-ingest.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/memory-ingest.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,7 +32,7 @@ The gaps this vertical fills are: goals and OKRs, decision records, risk, and th
|
|
|
32
32
|
| Finding | `Finding` | platform-native | `accountId`, `statement`, `status` (draft/validated/retracted) |
|
|
33
33
|
| Hypothesis | `Hypothesis` | platform-native | `accountId`, `statement`, `status` (open/supported/refuted/assumed) |
|
|
34
34
|
|
|
35
|
-
`Objective` carries the strategy framework on a `framework` discriminator rather than proliferating one label per framework: OGSM and V2MOM strategy/method tiers are `Objective` nodes distinguished by `framework`. A North-Star metric is an `Objective`-level `KeyResult`, not a separate label. A `Source` is a referenced work (a citation target), distinct from an ingested `KnowledgeDocument` whose full text lives on disk. An open research question is a `Hypothesis {status:'open'}`; an assumption is a `Hypothesis {status:'assumed'}` — the base `Question` label stays reserved for `schema:Question` FAQ content.
|
|
35
|
+
`Objective` carries the strategy framework on a `framework` discriminator rather than proliferating one label per framework: OGSM and V2MOM strategy/method tiers are `Objective` nodes distinguished by `framework`. A North-Star metric is an `Objective`-level `KeyResult`, not a separate label. A `Source` is a referenced work (a citation target), distinct from an ingested `KnowledgeDocument` whose full text lives on disk. Both carry authorship, by node kind: an ingested `KnowledgeDocument` is attributed to its author with `(:Person)-[:AUTHORED]->(:KnowledgeDocument)`, while a `Source` is attributed with `(:Source)-[:AUTHORED_BY]->(:Person)`. The two shapes coexist; they are not alternatives. An open research question is a `Hypothesis {status:'open'}`; an assumption is a `Hypothesis {status:'assumed'}` — the base `Question` label stays reserved for `schema:Question` FAQ content.
|
|
36
36
|
|
|
37
37
|
Optional properties seen in practice: `Decision` — `context`, `consequences`, `decidedAt`; `Source` — `url`, `doi`, `datePublished`; `Finding` — `confidence`.
|
|
38
38
|
|
|
@@ -64,6 +64,7 @@ MERGE keys per label:
|
|
|
64
64
|
(:Risk)-[:THREATENS]->(:Objective)
|
|
65
65
|
(:Risk)-[:THREATENS]->(:Project)
|
|
66
66
|
(:Source)-[:AUTHORED_BY]->(:Person)
|
|
67
|
+
(:Person)-[:AUTHORED]->(:KnowledgeDocument)
|
|
67
68
|
(:Source)-[:CITES]->(:Source)
|
|
68
69
|
(:Source)-[:SUPPORTS]->(:Source)
|
|
69
70
|
(:Source)-[:REFUTES]->(:Source)
|
|
@@ -5,13 +5,13 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
6
|
<title>Activity — Maxy</title>
|
|
7
7
|
<link rel="icon" href="/favicon.ico">
|
|
8
|
-
<script type="module" crossorigin src="/assets/activity-
|
|
8
|
+
<script type="module" crossorigin src="/assets/activity-CKbv3zFM.js"></script>
|
|
9
9
|
<link rel="modulepreload" crossorigin href="/assets/chunk-TPjIAO9U.js">
|
|
10
|
-
<link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-
|
|
11
|
-
<link rel="modulepreload" crossorigin href="/assets/AdminShell-
|
|
12
|
-
<link rel="modulepreload" crossorigin href="/assets/Checkbox-
|
|
13
|
-
<link rel="modulepreload" crossorigin href="/assets/triangle-alert-
|
|
14
|
-
<link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-
|
|
10
|
+
<link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-sPN6lobE.js">
|
|
11
|
+
<link rel="modulepreload" crossorigin href="/assets/AdminShell-DR6AzflZ.js">
|
|
12
|
+
<link rel="modulepreload" crossorigin href="/assets/Checkbox-D7_S2EUI.js">
|
|
13
|
+
<link rel="modulepreload" crossorigin href="/assets/triangle-alert-BDtoi5R0.js">
|
|
14
|
+
<link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-5jQsc23X.css">
|
|
15
15
|
<link rel="stylesheet" href="/brand-defaults.css">
|
|
16
16
|
</head>
|
|
17
17
|
<body>
|
package/payload/server/public/assets/{AdminLoginScreens-DXYJWXaX.js → AdminLoginScreens-Jw45pvb2.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e}from"./chunk-TPjIAO9U.js";import{F as t,H as n,L as r,N as i,R as a}from"./useSubAccountSwitcher-HEVLb6Z9.js";import{E as o}from"./useVoiceRecorder-CfGgj3vm.js";import{v as s,y as c}from"./AdminShell-UDgNN4CA.js";import{t as l}from"./Checkbox-C08Ulc_a.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[t,n]=(0,p.useState)(`loading`),[r,i]=(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),[G,K]=(0,p.useState)(!0);(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 q=(0,p.useRef)(null),J=(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 r=await t.json();D(r.session_key),z(r.sessionId??null),j(r.businessName),N(r.role??null),F(r.userName===void 0?null:r.userName),L(r.avatar??null);let i=o(r.thinkingView);return H.current=i,V(i),n(`chat`),!0}catch(e){return console.error(`[admin] session restore failed:`,e),!1}}async function t(r=2){try{let i=await fetch(`/api/health`);if(!i.ok){if(r>0)return await new Promise(e=>setTimeout(e,1500)),t(r-1);console.error(`[admin] health check returned ${i.status} after retries`),n(`set-pin`);return}let a=await i.json();if(!a.pin_configured){n(`set-pin`);return}K(!!a.claude_authenticated);let o=!1;try{o=new URLSearchParams(window.location.search).get(`connect`)===`claude`}catch{}if(o){try{let e=new URL(window.location.href);e.searchParams.delete(`connect`),window.history.replaceState(null,``,e.pathname+e.search+e.hash)}catch{}if(!a.claude_authenticated){n(`connect-claude`);return}}if(await e())return;n(`enter-pin`)}catch(e){if(r>0)return await new Promise(e=>setTimeout(e,1500)),t(r-1);console.error(`[admin] health check failed:`,e),n(`set-pin`)}}t()},[]),(0,p.useEffect)(()=>{t===`chat`&&fetch(`/api/admin/claude-info`).then(e=>{if(e.ok)return e.json()}).then(e=>{e&&k(e)}).catch(()=>{})},[t]),(0,p.useEffect)(()=>{if(typeof window>`u`)return;let n=!1;try{n=sessionStorage.getItem(u)===`1`}catch{}if(f({appState:t,alreadyRedirected:n,variant:e})){try{sessionStorage.setItem(u,`1`)}catch{}console.info(`[admin-ui] landing-redirect target=${d}`),window.location.replace(d)}},[t,e]);let Y=(0,p.useRef)(null);(0,p.useEffect)(()=>{if(t!==`chat`)return;let e=setInterval(async()=>{try{let e=await fetch(`/api/health`);if(e.ok){let t=await e.json();K(t.auth_status!==`dead`&&t.auth_status!==`missing`)}}catch{}if(E)try{let e=await fetch(`/api/admin/session?session_key=${encodeURIComponent(E)}`);if(e.status!==401)return;let t=(await e.clone().json().catch(()=>null))?.code??`unknown-401`;if(t===`remote-auth-required`){a(`heartbeat`,`/api/admin/session`);return}console.warn(`[admin-auth] outcome=heartbeat-detected-expiry code=${t}`),Y.current?.()}catch{}},300*1e3);return()=>clearInterval(e)},[t,E]),(0,p.useEffect)(()=>{t===`connect-claude`&&fetch(`/api/health`).then(e=>e.ok?e.json():null).then(e=>{e?.claude_authenticated&&(K(!0),n(`enter-pin`))}).catch(()=>{})},[t]);async function X(e,t){y(!0);try{let r=await fetch(`/api/admin/session`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({pin:e,...t?{accountId:t}:{}})});if(!r.ok){let e=await r.json().catch(()=>({}));if(r.status===401&&e?.code===`remote-auth-required`){a(`enter-pin`,`/api/admin/session`);return}h(e.error||`Invalid PIN`);return}let s=await r.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);H.current=c,V(c);try{sessionStorage.setItem(`maxy-admin-session-key`,s.session_key)}catch{}i(``),n(`chat`)}catch(e){console.error(`[admin] connection error:`,e),h(`Could not connect.`)}finally{y(!1)}}let Z=(0,p.useCallback)(async e=>{if(e.preventDefault(),v)return;h(``);let t=s.trim();if(!t){h(`Please enter your name.`);return}if(r.length<4){h(`PIN must be at least 4 characters.`);return}let o=r;y(!0);try{let e=await fetch(`/api/onboarding/set-pin`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({pin:o,name:t})});if(!e.ok){let t=await e.json().catch(()=>({}));if(e.status===401&&t?.code===`remote-auth-required`){a(`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 r=await e.json();r.pin_configured&&r.claude_authenticated?n(`enter-pin`):r.pin_configured?n(`connect-claude`):h(t.error||`Failed to set PIN.`)}else n(`enter-pin`)}catch{n(`enter-pin`)}return}h(t.error||`Failed to set PIN.`);return}let r=await fetch(`/api/health`);if((r.ok?await r.json():null)?.claude_authenticated){await X(o);return}i(``),n(`connect-claude`)}catch(e){console.error(`[admin] connection error:`,e),h(`Could not connect.`)}finally{y(!1)}},[r,v,s]),Q=(0,p.useCallback)(async e=>{e.preventDefault(),h(``),await X(r)},[r]),ee=(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;K(!1),D(null),N(null),F(void 0),L(null);try{sessionStorage.removeItem(`maxy-admin-session-key`),sessionStorage.removeItem(u)}catch{}return n(`connect-claude`),!0}finally{T(!1)}},[]),$=(0,p.useCallback)(()=>{D(null),N(null),F(void 0),L(null);try{sessionStorage.removeItem(`maxy-admin-session-key`),sessionStorage.removeItem(u)}catch{}i(``),h(``),n(`enter-pin`)},[]);return(0,p.useEffect)(()=>{Y.current=$},[$]),{appState:t,setAppState:n,pin:r,setPin:i,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,claudeConnected:G,pinInputRef:q,setPinFormRef:J,handleSetPin:Z,handleLogin:Q,handleDisconnect:ee,handleLogout:$}}var h=r();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:n,setPin:r,showPin:a,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:t,alt:i.productName,className:`connect-logo connect-logo--maxy`}),!i.logoContainsName&&(0,h.jsxs)(`h1`,{className:`connect-title`,children:[`Welcome to `,i.productName]}),(0,h.jsxs)(`p`,{className:`connect-subtitle`,children:[`Tell `,i.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:n,onChange:r,onComplete:()=>{},showPin:a}),(0,h.jsx)(s,{variant:`send`,type:`submit`,disabled:!n||!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:a,onChange:()=>o(e=>!e),label:`Show PIN`})]}),u&&(0,h.jsx)(`p`,{className:`admin-pin-error`,children:u})]})})}function v(e){let{pin:n,setPin:r,showPin:a,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:t,alt:i.productName,className:`connect-logo connect-logo--maxy`}),!i.logoContainsName&&(0,h.jsx)(`h1`,{className:`connect-title`,children:i.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:n,onChange:r,onComplete:()=>{},showPin:a,autoFocus:!0}),(0,h.jsx)(s,{variant:`send`,type:`submit`,disabled:!n,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:a,onChange:()=>o(e=>!e),label:`Show PIN`})})]}),u&&(0,h.jsx)(`p`,{className:`admin-pin-error`,children:u})]})]})}function y(e){let{authPolling:n,setAuthPolling:r,authLoading:a,setAuthLoading:o,pinError:c,setPinError:l,setAppState:u}=e,[d,f]=(0,p.useState)(!1),[m,g]=(0,p.useState)(!1),[_,v]=(0,p.useState)(``),[y,b]=(0,p.useState)(``),[x,S]=(0,p.useState)(``);async function C(){S(``);try{let e=await(await fetch(`/api/onboarding/claude-auth`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`paste-code`,code:y})})).json();e.accepted?(S(`Code submitted. Finishing sign-in…`),b(``)):S(e.error||`Could not submit code.`)}catch(e){console.error(`[admin] paste-code error:`,e),S(`Could not submit code.`)}}async function w(){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 T(){o(!0),l(``);try{let e=await(await fetch(`/api/onboarding/claude-auth`,{method:`POST`})).json();if(e.started){r(!0),f(!0),o(!1),v(e.transport||``);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.`),r(!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 E(){await fetch(`/api/onboarding/claude-auth`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`stop`})}),r(!1),l(``)}return n||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:[n?(0,h.jsx)(`button`,{onClick:E,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:n?`Sign in and authorize in the browser below.`:`Open your email or prepare your accounts, then sign in.`}),!n&&(0,h.jsx)(`div`,{style:{marginTop:`12px`},children:(0,h.jsx)(s,{variant:`primary`,onClick:T,disabled:a,children:a?(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(`span`,{className:`spin`,style:{display:`inline-block`},children:`✱`}),` Connecting…`]}):`Sign in to Claude`})}),n&&_===`native`&&(0,h.jsxs)(`div`,{style:{marginTop:`14px`,maxWidth:`420px`,margin:`14px auto 0`,display:`flex`,flexDirection:`column`,gap:`8px`},children:[(0,h.jsx)(`label`,{style:{fontSize:`12px`,color:`#999`,lineHeight:1.4},children:`If the browser didn't finish sign-in, paste the code or full redirect URL from Claude's page:`}),(0,h.jsxs)(`div`,{style:{display:`flex`,gap:`8px`},children:[(0,h.jsx)(`input`,{type:`text`,value:y,onChange:e=>b(e.target.value),placeholder:`Paste code or redirect URL`,style:{flex:1,padding:`8px 10px`,fontSize:`13px`,border:`1px solid #ccc`,borderRadius:`6px`}}),(0,h.jsx)(s,{variant:`primary`,onClick:C,disabled:!y.trim(),children:`Submit`})]}),x&&(0,h.jsx)(`p`,{style:{fontSize:`12px`,color:`#999`,margin:0},children:x})]})]}),(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:t,alt:i.productName,className:`connect-logo connect-logo--maxy`}),!i.logoContainsName&&(0,h.jsx)(`span`,{className:`connect-logo-label`,children:i.productName})]})]}),(0,h.jsxs)(`h1`,{className:`connect-title`,children:[`Connect Claude to power `,i.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:T,disabled:a,children:a?(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:w,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
|
+
import{o as e}from"./chunk-TPjIAO9U.js";import{F as t,H as n,L as r,N as i,R as a}from"./useSubAccountSwitcher-sPN6lobE.js";import{D as o}from"./useVoiceRecorder-DOFBQ2gP.js";import{_ as s,v as c}from"./AdminShell-DR6AzflZ.js";import{t as l}from"./Checkbox-D7_S2EUI.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[t,n]=(0,p.useState)(`loading`),[r,i]=(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),[G,K]=(0,p.useState)(!0);(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 q=(0,p.useRef)(null),J=(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 r=await t.json();D(r.session_key),z(r.sessionId??null),j(r.businessName),N(r.role??null),F(r.userName===void 0?null:r.userName),L(r.avatar??null);let i=o(r.thinkingView);return H.current=i,V(i),n(`chat`),!0}catch(e){return console.error(`[admin] session restore failed:`,e),!1}}async function t(r=2){try{let i=await fetch(`/api/health`);if(!i.ok){if(r>0)return await new Promise(e=>setTimeout(e,1500)),t(r-1);console.error(`[admin] health check returned ${i.status} after retries`),n(`set-pin`);return}let a=await i.json();if(!a.pin_configured){n(`set-pin`);return}K(!!a.claude_authenticated);let o=!1;try{o=new URLSearchParams(window.location.search).get(`connect`)===`claude`}catch{}if(o){try{let e=new URL(window.location.href);e.searchParams.delete(`connect`),window.history.replaceState(null,``,e.pathname+e.search+e.hash)}catch{}if(!a.claude_authenticated){n(`connect-claude`);return}}if(await e())return;n(`enter-pin`)}catch(e){if(r>0)return await new Promise(e=>setTimeout(e,1500)),t(r-1);console.error(`[admin] health check failed:`,e),n(`set-pin`)}}t()},[]),(0,p.useEffect)(()=>{t===`chat`&&fetch(`/api/admin/claude-info`).then(e=>{if(e.ok)return e.json()}).then(e=>{e&&k(e)}).catch(()=>{})},[t]),(0,p.useEffect)(()=>{if(typeof window>`u`)return;let n=!1;try{n=sessionStorage.getItem(u)===`1`}catch{}if(f({appState:t,alreadyRedirected:n,variant:e})){try{sessionStorage.setItem(u,`1`)}catch{}console.info(`[admin-ui] landing-redirect target=${d}`),window.location.replace(d)}},[t,e]);let Y=(0,p.useRef)(null);(0,p.useEffect)(()=>{if(t!==`chat`)return;let e=setInterval(async()=>{try{let e=await fetch(`/api/health`);if(e.ok){let t=await e.json();K(t.auth_status!==`dead`&&t.auth_status!==`missing`)}}catch{}if(E)try{let e=await fetch(`/api/admin/session?session_key=${encodeURIComponent(E)}`);if(e.status!==401)return;let t=(await e.clone().json().catch(()=>null))?.code??`unknown-401`;if(t===`remote-auth-required`){a(`heartbeat`,`/api/admin/session`);return}console.warn(`[admin-auth] outcome=heartbeat-detected-expiry code=${t}`),Y.current?.()}catch{}},300*1e3);return()=>clearInterval(e)},[t,E]),(0,p.useEffect)(()=>{t===`connect-claude`&&fetch(`/api/health`).then(e=>e.ok?e.json():null).then(e=>{e?.claude_authenticated&&(K(!0),n(`enter-pin`))}).catch(()=>{})},[t]);async function X(e,t){y(!0);try{let r=await fetch(`/api/admin/session`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({pin:e,...t?{accountId:t}:{}})});if(!r.ok){let e=await r.json().catch(()=>({}));if(r.status===401&&e?.code===`remote-auth-required`){a(`enter-pin`,`/api/admin/session`);return}h(e.error||`Invalid PIN`);return}let s=await r.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);H.current=c,V(c);try{sessionStorage.setItem(`maxy-admin-session-key`,s.session_key)}catch{}i(``),n(`chat`)}catch(e){console.error(`[admin] connection error:`,e),h(`Could not connect.`)}finally{y(!1)}}let Z=(0,p.useCallback)(async e=>{if(e.preventDefault(),v)return;h(``);let t=s.trim();if(!t){h(`Please enter your name.`);return}if(r.length<4){h(`PIN must be at least 4 characters.`);return}let o=r;y(!0);try{let e=await fetch(`/api/onboarding/set-pin`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({pin:o,name:t})});if(!e.ok){let t=await e.json().catch(()=>({}));if(e.status===401&&t?.code===`remote-auth-required`){a(`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 r=await e.json();r.pin_configured&&r.claude_authenticated?n(`enter-pin`):r.pin_configured?n(`connect-claude`):h(t.error||`Failed to set PIN.`)}else n(`enter-pin`)}catch{n(`enter-pin`)}return}h(t.error||`Failed to set PIN.`);return}let r=await fetch(`/api/health`);if((r.ok?await r.json():null)?.claude_authenticated){await X(o);return}i(``),n(`connect-claude`)}catch(e){console.error(`[admin] connection error:`,e),h(`Could not connect.`)}finally{y(!1)}},[r,v,s]),Q=(0,p.useCallback)(async e=>{e.preventDefault(),h(``),await X(r)},[r]),ee=(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;K(!1),D(null),N(null),F(void 0),L(null);try{sessionStorage.removeItem(`maxy-admin-session-key`),sessionStorage.removeItem(u)}catch{}return n(`connect-claude`),!0}finally{T(!1)}},[]),$=(0,p.useCallback)(()=>{D(null),N(null),F(void 0),L(null);try{sessionStorage.removeItem(`maxy-admin-session-key`),sessionStorage.removeItem(u)}catch{}i(``),h(``),n(`enter-pin`)},[]);return(0,p.useEffect)(()=>{Y.current=$},[$]),{appState:t,setAppState:n,pin:r,setPin:i,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,claudeConnected:G,pinInputRef:q,setPinFormRef:J,handleSetPin:Z,handleLogin:Q,handleDisconnect:ee,handleLogout:$}}var h=r();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:n,setPin:r,showPin:a,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:t,alt:i.productName,className:`connect-logo connect-logo--maxy`}),!i.logoContainsName&&(0,h.jsxs)(`h1`,{className:`connect-title`,children:[`Welcome to `,i.productName]}),(0,h.jsxs)(`p`,{className:`connect-subtitle`,children:[`Tell `,i.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:n,onChange:r,onComplete:()=>{},showPin:a}),(0,h.jsx)(s,{variant:`send`,type:`submit`,disabled:!n||!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:a,onChange:()=>o(e=>!e),label:`Show PIN`})]}),u&&(0,h.jsx)(`p`,{className:`admin-pin-error`,children:u})]})})}function v(e){let{pin:n,setPin:r,showPin:a,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:t,alt:i.productName,className:`connect-logo connect-logo--maxy`}),!i.logoContainsName&&(0,h.jsx)(`h1`,{className:`connect-title`,children:i.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:n,onChange:r,onComplete:()=>{},showPin:a,autoFocus:!0}),(0,h.jsx)(s,{variant:`send`,type:`submit`,disabled:!n,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:a,onChange:()=>o(e=>!e),label:`Show PIN`})})]}),u&&(0,h.jsx)(`p`,{className:`admin-pin-error`,children:u})]})]})}function y(e){let{authPolling:n,setAuthPolling:r,authLoading:a,setAuthLoading:o,pinError:c,setPinError:l,setAppState:u}=e,[d,f]=(0,p.useState)(!1),[m,g]=(0,p.useState)(!1),[_,v]=(0,p.useState)(``),[y,b]=(0,p.useState)(``),[x,S]=(0,p.useState)(``);async function C(){S(``);try{let e=await(await fetch(`/api/onboarding/claude-auth`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`paste-code`,code:y})})).json();e.accepted?(S(`Code submitted. Finishing sign-in…`),b(``)):S(e.error||`Could not submit code.`)}catch(e){console.error(`[admin] paste-code error:`,e),S(`Could not submit code.`)}}async function w(){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 T(){o(!0),l(``);try{let e=await(await fetch(`/api/onboarding/claude-auth`,{method:`POST`})).json();if(e.started){r(!0),f(!0),o(!1),v(e.transport||``);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.`),r(!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 E(){await fetch(`/api/onboarding/claude-auth`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`stop`})}),r(!1),l(``)}return n||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:[n?(0,h.jsx)(`button`,{onClick:E,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:n?`Sign in and authorize in the browser below.`:`Open your email or prepare your accounts, then sign in.`}),!n&&(0,h.jsx)(`div`,{style:{marginTop:`12px`},children:(0,h.jsx)(s,{variant:`primary`,onClick:T,disabled:a,children:a?(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(`span`,{className:`spin`,style:{display:`inline-block`},children:`✱`}),` Connecting…`]}):`Sign in to Claude`})}),n&&_===`native`&&(0,h.jsxs)(`div`,{style:{marginTop:`14px`,maxWidth:`420px`,margin:`14px auto 0`,display:`flex`,flexDirection:`column`,gap:`8px`},children:[(0,h.jsx)(`label`,{style:{fontSize:`12px`,color:`#999`,lineHeight:1.4},children:`If the browser didn't finish sign-in, paste the code or full redirect URL from Claude's page:`}),(0,h.jsxs)(`div`,{style:{display:`flex`,gap:`8px`},children:[(0,h.jsx)(`input`,{type:`text`,value:y,onChange:e=>b(e.target.value),placeholder:`Paste code or redirect URL`,style:{flex:1,padding:`8px 10px`,fontSize:`13px`,border:`1px solid #ccc`,borderRadius:`6px`}}),(0,h.jsx)(s,{variant:`primary`,onClick:C,disabled:!y.trim(),children:`Submit`})]}),x&&(0,h.jsx)(`p`,{style:{fontSize:`12px`,color:`#999`,margin:0},children:x})]})]}),(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:t,alt:i.productName,className:`connect-logo connect-logo--maxy`}),!i.logoContainsName&&(0,h.jsx)(`span`,{className:`connect-logo-label`,children:i.productName})]})]}),(0,h.jsxs)(`h1`,{className:`connect-title`,children:[`Connect Claude to power `,i.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:T,disabled:a,children:a?(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:w,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};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{o as e}from"./chunk-TPjIAO9U.js";import{A as t,C as n,D as r,E as i,H as a,I as o,L as s,M as c,N as l,O as u,P as d,S as f,T as p,V as m,_ as h,a as g,b as _,d as v,g as ee,h as y,i as b,j as x,l as S,m as C,n as w,p as te,t as ne,u as re,v as ie,w as ae,x as oe,y as T}from"./useSubAccountSwitcher-sPN6lobE.js";async function se(){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 E=e(a(),1),D=s(),O={sm:14,md:16,lg:18},k={sm:30,md:38,lg:46};function A({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,"aria-pressed":u,style:d,className:f,children:p}){let m=[`btn`,`btn--${e}`,t===`md`?``:`btn--${t}`,a?`btn--full`:``,f].filter(Boolean).join(` `),h=O[t],g={...e===`send`?{width:k[t],height:k[t]}:{},...d},_=Object.keys(g).length>0;return(0,D.jsxs)(`button`,{type:s,className:m,disabled:i||o,onClick:c,"aria-label":l,"aria-pressed":u,style:_?g:void 0,children:[(0,D.jsxs)(`span`,{className:`btn__content`,style:{visibility:i?`hidden`:`visible`},children:[n&&r===`leading`&&(0,D.jsx)(n,{size:h}),p,n&&r===`trailing`&&(0,D.jsx)(n,{size:h})]}),i&&(0,D.jsx)(`span`,{className:`btn__spinner`,children:`✱`})]})}var ce=c(`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`}]]),le=c(`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`}]]),ue=c(`ellipsis-vertical`,[[`circle`,{cx:`12`,cy:`12`,r:`1`,key:`41hilf`}],[`circle`,{cx:`12`,cy:`5`,r:`1`,key:`gxeob9`}],[`circle`,{cx:`12`,cy:`19`,r:`1`,key:`lyex9k`}]]),de=c(`gauge`,[[`path`,{d:`m12 14 4-4`,key:`9kzdfg`}],[`path`,{d:`M3.34 19a10 10 0 1 1 17.32 0`,key:`19p75a`}]]),j=c(`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`}]]),fe=c(`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`}]]),pe=c(`panel-left`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M9 3v18`,key:`fh3hqa`}]]),me=c(`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`}]]);function he({connected:e,onConnectClaude:t}){return e?(0,D.jsxs)(`span`,{className:`claude-status-pill`,"data-connected":`true`,title:`Claude is connected`,children:[(0,D.jsx)(`img`,{src:`/brand/claude.png`,alt:``,className:`claude-status-pill__mark`}),(0,D.jsx)(`span`,{className:`claude-status-pill__label`,children:`Connected`}),(0,D.jsx)(`span`,{className:`claude-status-pill__dot claude-status-pill__dot--live`,"aria-hidden":`true`})]}):(0,D.jsxs)(`button`,{type:`button`,className:`claude-status-pill claude-status-pill--action`,"data-connected":`false`,onClick:t,title:`Connect Claude`,children:[(0,D.jsx)(`img`,{src:`/brand/claude.png`,alt:``,className:`claude-status-pill__mark`}),(0,D.jsx)(`span`,{className:`claude-status-pill__label`,children:`Connect`}),(0,D.jsx)(`span`,{className:`claude-status-pill__dot claude-status-pill__dot--down`,"aria-hidden":`true`})]})}function ge(e){return e===`/`||e===``?`Dashboard`:e.startsWith(`/chat`)?`Chat`:e.startsWith(`/tasks`)?`Tasks`:e.startsWith(`/data`)?`Data`:e.startsWith(`/calendar`)?`Calendar`:e.startsWith(`/graph`)?`Graph`:e.startsWith(`/activity`)?`Activity`:e.startsWith(`/browser`)?`Browser`:`Dashboard`}function _e({title:e,sidebarOpen:t,onToggleSidebar:n,claudeConnected:r,onConnectClaude:i}){let a=e??ge(typeof window<`u`?window.location.pathname:`/`),o=r!==void 0&&i!==void 0;return(0,D.jsxs)(`header`,{className:`admin-page-header`,children:[(0,D.jsxs)(`button`,{type:`button`,className:`admin-page-header__toggle`,"aria-label":t?`Hide sidebar`:`Show sidebar`,title:t?`Hide sidebar`:`Show sidebar`,"aria-expanded":t,onClick:n,children:[(0,D.jsx)(pe,{className:`admin-page-header__toggle-desktop`,size:18,strokeWidth:1.75}),(0,D.jsx)(f,{className:`admin-page-header__toggle-mobile`,size:22,strokeWidth:1.75})]}),(0,D.jsx)(`h1`,{className:`admin-page-header__title`,children:a}),o&&(0,D.jsx)(`div`,{className:`admin-page-header__right`,children:(0,D.jsx)(he,{connected:r,onConnectClaude:i})})]})}var ve=[{label:`Home`,href:`/`,Icon:ae,match:e=>e===`/`||e===``},{label:`Chat`,href:`/chat`,Icon:oe,match:e=>e.startsWith(`/chat`)},{label:`Tasks`,href:`/tasks`,Icon:j,match:e=>e.startsWith(`/tasks`)},{label:`Data`,href:`/data`,Icon:u,match:e=>e.startsWith(`/data`)},{label:`Calendar`,href:`/calendar`,Icon:t,match:e=>e.startsWith(`/calendar`)}];function ye(e){let t=ve.find(t=>t.match(e));return t?t.href:`/`}function be(){let e=ye(typeof window<`u`?window.location.pathname:`/`);return(0,D.jsx)(`nav`,{className:`bottom-tab-bar`,"aria-label":`Primary`,children:ve.map(t=>{let n=t.href===e,{Icon:r}=t;return(0,D.jsxs)(`a`,{href:t.href,className:`bottom-tab${n?` is-active`:``}`,"aria-current":n?`page`:void 0,children:[(0,D.jsx)(r,{size:19,strokeWidth:1.75}),(0,D.jsx)(`span`,{className:`bottom-tab__label`,children:t.label})]},t.href)})})}var M=`maxy-shell-side-px`;function xe(){if(typeof window>`u`)return 0;let e=document.querySelector(`.platform > .artefact`)?.getBoundingClientRect();return e&&e.width>0?Math.round(e.width):0}function N(e){if(typeof window>`u`)return e;let t=window.innerWidth,n=Math.max(248,t-480-xe());return Math.min(Math.max(e,248),n)}function Se(){if(typeof window>`u`)return 264;try{let e=window.localStorage.getItem(M);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 N(t)}catch{}return 264}function Ce({targetSelector:e=`.platform`}){let t=(0,E.useRef)(null),[n,r]=(0,E.useState)(()=>Se()),i=(0,E.useRef)(n);(0,E.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,E.useCallback)(()=>{r(e=>{let t=N(e);return t===e?e:t})},[]);(0,E.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(N(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(M,String(t))}catch{}console.info(`[admin-ui] sidebar-resize px=${t}`)};window.addEventListener(`pointermove`,o),window.addEventListener(`pointerup`,s)},s=()=>{let e=N(264);r(e);try{window.localStorage.removeItem(M)}catch{}console.info(`[admin-ui] sidebar-resize px=${e}`)};return(0,D.jsx)(`div`,{ref:t,className:`side-resize-handle`,role:`separator`,"aria-orientation":`vertical`,"aria-label":`Resize sidebar`,onPointerDown:o,onDoubleClick:s})}var we=m();function Te(e){return Math.max(14,e/2-386)}function Ee(e){return e.left===0&&e.top===0&&e.width===0&&e.height===0}var De={position:`fixed`,visibility:`hidden`};function P({anchorRef:e,onClose:t,className:n,role:r,ariaLabel:i,anchorId:a,children:o}){let s=(0,E.useRef)(null),[c,l]=(0,E.useState)(De),u=(0,E.useRef)(null),d=(0,E.useCallback)(()=>{let t=s.current;if(!t)return;let r=e.current,i=[n,a].filter(Boolean).join(`:`)||`unknown`,o=t.getBoundingClientRect(),c=window.innerWidth,d=window.innerHeight,f=o.width>0&&o.height>0,p=r?r.getBoundingClientRect():null,m=(e,t)=>console.error(`[anchored-popover] op=offscreen id=${i} left=${e} top=${t} w=${o.width} h=${o.height} viewport=${c},${d}`),h=e=>{e!==u.current&&(u.current=e,console.log(e))};if(h(`[anchored-popover] op=anchor id=${i} present=${!!r} rect=${p?`${p.left},${p.top},${p.width},${p.height}`:`none`}`),!p){let e=Math.max(4,c-o.width-Te(c)),t=Math.max(4,d-o.height-14);l({position:`fixed`,left:e,top:t,visibility:`visible`}),h(`[anchored-popover] op=placed id=${i} left=${e} top=${t} w=${o.width} h=${o.height} flipped=false clampedLeft=false clampedRight=false`);return}if(f&&Ee(p)){l(De),m(p.left,p.top);return}let g=p.right-o.width,_=c-o.width-4,v=!1,ee=!1;g>_&&(g=_,v=!0),g<4&&(g=4,ee=!0);let y=d-p.bottom-4,b=p.top-4,x=o.height+8<=y?!1:o.height+8<=b?!0:b>y,S=Math.max(0,x?b:y),C=x?Math.max(4,p.top-Math.min(o.height,S)):p.bottom;l({position:`fixed`,left:g,top:C,maxHeight:S,visibility:`visible`}),h(`[anchored-popover] op=placed id=${i} left=${g} top=${C} w=${o.width} h=${o.height} maxH=${S} flipped=${x} clampedLeft=${ee} clampedRight=${v}`);let w=Math.min(o.height,S);f&&(g+o.width<=0||g>=c||C+w<=0||C>=d)&&m(g,C)},[e,a,n]);return(0,E.useLayoutEffect)(()=>{if(d(),typeof ResizeObserver>`u`)return;let e=new ResizeObserver(()=>d());return s.current&&e.observe(s.current),()=>e.disconnect()},[d]),(0,E.useEffect)(()=>{let n=e=>{e.key===`Escape`&&t()},r=n=>{let r=n.target;e.current?.contains(r)||s.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,we.createPortal)((0,D.jsx)(`div`,{ref:s,className:n,role:r,"aria-label":i,style:c,children:o}),document.body)}function Oe({actions:e,disabled:t}){let[n,r]=(0,E.useState)(!1),[i,a]=(0,E.useState)(null),o=(0,E.useRef)(null),s=(0,E.useCallback)(()=>{r(!1),a(null)},[]);return(0,D.jsxs)(`div`,{className:`conv-actions`,children:[(0,D.jsx)(`button`,{ref:o,type:`button`,className:`conv-action conv-actions-overflow`,onClick:()=>r(e=>!e),disabled:t,"aria-haspopup":`menu`,"aria-expanded":n,"aria-label":`Session actions`,title:`Session actions`,children:(0,D.jsx)(f,{size:12})}),n&&(0,D.jsx)(P,{anchorRef:o,onClose:s,className:`conv-actions-menu`,role:`menu`,children:e.map(e=>e.panel?(0,D.jsxs)(`div`,{className:`conv-actions-menu-disclosure`,children:[(0,D.jsxs)(`button`,{type:`button`,role:`menuitem`,"aria-haspopup":`dialog`,"aria-expanded":i===e.key,disabled:t,onClick:()=>a(t=>t===e.key?null:e.key),children:[e.icon,(0,D.jsx)(`span`,{children:e.menuLabel})]}),i===e.key&&(0,D.jsx)(`div`,{className:`conv-actions-menu-panel`,children:e.panel()})]},e.key):(0,D.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),s()},children:[e.icon,(0,D.jsx)(`span`,{children:e.menuLabel})]},e.key))})]})}var F=`claude-opus-4-8[1m]`,I=`claude-sonnet-5`,L=`claude-haiku-4-5`,R={[F]:`Opus 4.8 (1M context)`,[I]:`Sonnet 5`,[L]:`Haiku 4.5`};function ke(e){return R[e]??e}var Ae=[F,I,L];function z(e){return e.replace(/\[1m\]$/,``)}function je(e){return Ae.find(t=>z(t)===z(e))??e}var B=[`default`,`acceptEdits`,`plan`,`auto`,`bypassPermissions`],V=[`low`,`medium`,`high`,`xhigh`];[...B],[...V],[...V];var Me=[F,I,L],Ne={default:`Ask permissions`,acceptEdits:`Accept edits`,plan:`Plan mode`,auto:`Auto mode`,bypassPermissions:`Bypass permissions`},Pe=B.map(e=>({value:e,label:Ne[e]??e})),Fe={low:`Low`,medium:`Medium`,high:`High`,xhigh:`Highest`},Ie=V.map(e=>({value:e,label:Fe[e]??e}));function H(e){if(e){let t=Me.find(t=>z(t)===z(e));if(t)return t}return F}function Le({row:e,adminFetch:t,onError:r}){let[i,a]=(0,E.useState)(()=>H(e.model)),[o,s]=(0,E.useState)(``),[c,l]=(0,E.useState)(``),[u,d]=(0,E.useState)(!1),f=(0,E.useRef)(!1);(0,E.useEffect)(()=>{a(H(e.model))},[e.model]);let p=async()=>{if(!f.current){f.current=!0,d(!0);try{let n=await t(`/api/admin/session-reseat`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({fromSessionId:e.sessionId,model:i,...o?{permissionMode:o}:{},...c?{effort:c}:{}})});if(!n.ok){r(`Could not reset ${e.title} (status ${n.status})`),console.error(`[admin-ui] dashboard-reseat-failed sessionId=${e.sessionId} status=${n.status}`),f.current=!1,d(!1);return}let a=await n.json().catch(()=>({}));a.target?window.location.assign(a.target):(r(`Reset of ${e.title} returned no target`),f.current=!1,d(!1))}catch(t){r(`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,d(!1)}}};return(0,D.jsxs)(D.Fragment,{children:[(0,D.jsxs)(`label`,{className:`reseat-field`,children:[(0,D.jsx)(`span`,{children:`Model`}),(0,D.jsx)(`select`,{"data-kind":`model`,value:i,disabled:u,onChange:e=>a(e.target.value),children:Me.map(e=>(0,D.jsx)(`option`,{value:e,children:ke(e)},e))})]}),(0,D.jsxs)(`label`,{className:`reseat-field`,children:[(0,D.jsx)(`span`,{children:`Mode`}),(0,D.jsxs)(`select`,{"data-kind":`mode`,value:o,disabled:u,onChange:e=>s(e.target.value),children:[(0,D.jsx)(`option`,{value:``,children:`Keep current`}),Pe.map(e=>(0,D.jsx)(`option`,{value:e.value,children:e.label},e.value))]})]}),(0,D.jsxs)(`label`,{className:`reseat-field`,children:[(0,D.jsx)(`span`,{children:`Effort`}),(0,D.jsxs)(`select`,{"data-kind":`effort`,value:c,disabled:u,onChange:e=>l(e.target.value),children:[(0,D.jsx)(`option`,{value:``,children:`Keep current`}),Ie.map(e=>(0,D.jsx)(`option`,{value:e.value,children:e.label},e.value))]})]}),(0,D.jsx)(`button`,{type:`button`,className:`reseat-apply`,disabled:u,"aria-busy":u,onClick:()=>void p(),children:u?(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(n,{size:12,className:`spin`,"aria-hidden":`true`}),`Resetting…`]}):`Reset`})]})}function Re(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 U(e){return e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e)}function ze({target:e,anchorEl:t,onConfirm:n,onCancel:r}){let i=(0,E.useRef)(null);return i.current=t,e?(0,D.jsxs)(P,{anchorRef:i,onClose:r,className:`conv-delete-confirm`,role:`alertdialog`,ariaLabel:`Confirm delete session`,children:[(0,D.jsxs)(`div`,{className:`claude-info-header`,children:[(0,D.jsx)(`span`,{children:`Delete this conversation?`}),(0,D.jsx)(`button`,{className:`claude-info-close`,onClick:r,"aria-label":`Close`,children:`✕`})]}),(0,D.jsxs)(`div`,{className:`claude-info-section`,style:{padding:`12px 14px`,fontSize:`11px`,color:`var(--text-secondary)`},children:[(0,D.jsxs)(`div`,{className:`conv-delete-target`,children:[(0,D.jsx)(`span`,{className:`conv-delete-label`,title:e.title,children:e.title||`Untitled session`}),(0,D.jsx)(`code`,{className:`conv-delete-id`,title:e.sessionId,children:e.sessionId.slice(0,8)})]}),(0,D.jsx)(`div`,{style:{marginTop:`8px`},children:`This permanently removes the transcript. It is not moved to Archive and cannot be recovered.`}),e.live&&(0,D.jsx)(`div`,{style:{marginTop:`8px`},children:`This session is running; deleting stops it first.`})]}),(0,D.jsxs)(`div`,{className:`claude-info-section`,style:{display:`flex`,gap:`8px`,padding:`10px 14px`},children:[(0,D.jsx)(A,{variant:`danger`,size:`sm`,style:{flex:1},onClick:n,children:`Delete`}),(0,D.jsx)(A,{variant:`secondary`,size:`sm`,style:{flex:1},onClick:r,children:`Cancel`})]})]}):null}function Be({open:e,count:t,liveCount:n,onConfirm:r,onCancel:i}){if(!e)return null;let a=t===1?``:`s`;return(0,D.jsx)(`div`,{className:`claude-info-overlay`,onClick:i,children:(0,D.jsxs)(`div`,{className:`claude-info-modal`,onClick:e=>e.stopPropagation(),role:`alertdialog`,"aria-label":`Confirm delete sessions`,children:[(0,D.jsxs)(`div`,{className:`claude-info-header`,children:[(0,D.jsxs)(`span`,{children:[`Delete `,t,` conversation`,a,`?`]}),(0,D.jsx)(`button`,{className:`claude-info-close`,onClick:i,"aria-label":`Close`,children:`✕`})]}),(0,D.jsxs)(`div`,{className:`claude-info-section`,style:{padding:`12px 14px`,fontSize:`11px`,color:`var(--text-secondary)`},children:[`This permanently removes `,t,` transcript`,a,`. `,t===1?`It is`:`They are`,` not moved to Archive and cannot be recovered.`,n>0&&(0,D.jsxs)(`div`,{style:{marginTop:`8px`},children:[n,` `,n===1?`is`:`are`,` running and will be stopped first.`]})]}),(0,D.jsxs)(`div`,{className:`claude-info-section`,style:{display:`flex`,gap:`8px`,padding:`10px 14px`},children:[(0,D.jsxs)(A,{variant:`danger`,size:`sm`,style:{flex:1},onClick:r,children:[`Delete `,t]}),(0,D.jsx)(A,{variant:`secondary`,size:`sm`,style:{flex:1},onClick:i,children:`Cancel`})]})]})})}var Ve=`auth-refresh-failed`;function He({error:e,onClose:t}){if(!e)return null;let n=e.reason===Ve,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,D.jsx)(`div`,{className:`claude-info-overlay`,onClick:t,children:(0,D.jsxs)(`div`,{className:`claude-info-modal`,onClick:e=>e.stopPropagation(),role:`alertdialog`,"aria-label":`Session could not be opened`,children:[(0,D.jsxs)(`div`,{className:`claude-info-header`,children:[(0,D.jsx)(`span`,{children:r}),(0,D.jsx)(`button`,{className:`claude-info-close`,onClick:t,"aria-label":`Close`,children:`✕`})]}),(0,D.jsxs)(`div`,{className:`claude-info-section`,style:{padding:`12px 14px`,fontSize:`11px`,color:`var(--text-secondary)`},children:[i,(0,D.jsxs)(`div`,{className:`claude-info-row`,style:{marginTop:`8px`},children:[(0,D.jsx)(`span`,{className:`claude-info-label`,children:`Reason`}),(0,D.jsx)(`span`,{className:`claude-info-value`,children:e.reason})]}),e.sessionId&&(0,D.jsxs)(`div`,{className:`claude-info-row`,children:[(0,D.jsx)(`span`,{className:`claude-info-label`,children:`Session`}),(0,D.jsxs)(`span`,{className:`claude-info-value`,children:[e.sessionId.slice(0,8),`…`]})]})]})]})})}function Ue(e){let{show:t,onClose:n,claudeInfo:r,messages:i,sessionElapsed:a,sessionId:o,cacheKey:s}=e,[c,l]=(0,E.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,D.jsx)(`div`,{className:`claude-info-overlay`,onClick:n,children:(0,D.jsxs)(`div`,{className:`claude-info-modal`,onClick:e=>e.stopPropagation(),children:[(0,D.jsxs)(`div`,{className:`claude-info-header`,children:[(0,D.jsx)(`img`,{src:`/brand/claude.png`,alt:`Claude`,className:`claude-info-icon`}),(0,D.jsx)(`span`,{children:`Claude Code`}),(0,D.jsx)(`button`,{className:`claude-info-close`,onClick:n,"aria-label":`Close`,children:`✕`})]}),(0,D.jsxs)(`div`,{className:`claude-info-section`,children:[(0,D.jsxs)(`div`,{className:`claude-info-row`,children:[(0,D.jsx)(`span`,{className:`claude-info-label`,children:`Version`}),(0,D.jsx)(`span`,{className:`claude-info-value`,children:r?r.version:`…`})]}),(0,D.jsxs)(`div`,{className:`claude-info-row`,children:[(0,D.jsx)(`span`,{className:`claude-info-label`,children:`Email`}),(0,D.jsx)(`span`,{className:`claude-info-value`,children:r?.account?.email??`…`})]})]}),(g||m||h>0)&&(0,D.jsxs)(`div`,{className:`claude-info-section`,children:[g&&(0,D.jsxs)(`div`,{className:`claude-info-row`,children:[(0,D.jsx)(`span`,{className:`claude-info-label`,children:`Plan`}),(0,D.jsx)(`span`,{className:`claude-info-value`,style:{textTransform:`capitalize`},children:g})]}),m&&(0,D.jsxs)(D.Fragment,{children:[(0,D.jsxs)(`div`,{className:`claude-info-row`,children:[(0,D.jsx)(`span`,{className:`claude-info-label`,children:`Usage`}),(0,D.jsxs)(`span`,{className:`claude-info-value`,children:[Math.round(m.utilization*100),`%`]})]}),(0,D.jsxs)(`div`,{className:`claude-info-row`,children:[(0,D.jsx)(`span`,{className:`claude-info-label`,children:`Resets in`}),(0,D.jsx)(`span`,{className:`claude-info-value`,children:_(m.resetsAt)})]}),m.isUsingOverage&&(0,D.jsxs)(`div`,{className:`claude-info-row`,children:[(0,D.jsx)(`span`,{className:`claude-info-label`,children:`Overage`}),(0,D.jsx)(`span`,{className:`claude-info-value`,children:`Active`})]})]}),h>0&&(0,D.jsxs)(`div`,{className:`claude-info-row`,children:[(0,D.jsx)(`span`,{className:`claude-info-label`,children:`Session cost`}),(0,D.jsxs)(`span`,{className:`claude-info-value`,children:[`$`,h<.01?h.toFixed(4):h.toFixed(2)]})]})]}),(0,D.jsxs)(`div`,{className:`claude-info-section`,children:[(0,D.jsxs)(`div`,{className:`claude-info-row`,children:[(0,D.jsx)(`span`,{className:`claude-info-label`,children:`Model`}),(0,D.jsx)(`span`,{className:`claude-info-value`,children:r?.model??`…`})]}),(0,D.jsxs)(`div`,{className:`claude-info-row`,children:[(0,D.jsx)(`span`,{className:`claude-info-label`,children:`Context used`}),(0,D.jsx)(`span`,{className:`claude-info-value`,children:f>0?`${f}%`:`—`})]}),(0,D.jsxs)(`div`,{className:`claude-info-row`,children:[(0,D.jsx)(`span`,{className:`claude-info-label`,children:`Tokens`}),(0,D.jsx)(`span`,{className:`claude-info-value`,children:p>0?U(p):`—`})]}),(0,D.jsxs)(`div`,{className:`claude-info-row`,children:[(0,D.jsx)(`span`,{className:`claude-info-label`,children:`Session`}),(0,D.jsx)(`span`,{className:`claude-info-value`,children:Re(a)})]}),(o||s)&&(()=>{let e=o??s??``;return(0,D.jsxs)(`div`,{className:`claude-info-row`,children:[(0,D.jsx)(`span`,{className:`claude-info-label`,children:`Session`}),(0,D.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 w(e)?`copied`:`failed`),setTimeout(()=>l(null),1200)},children:c===`copied`?`copied ✓`:c===`failed`?`copy failed ✕`:`${e.slice(0,8)}…`})]})})()]})]})})}function We({open:e,onConnect:t,onClose:n}){return e?(0,D.jsx)(`div`,{className:`claude-info-overlay`,onClick:n,children:(0,D.jsxs)(`div`,{className:`claude-info-modal`,onClick:e=>e.stopPropagation(),role:`alertdialog`,"aria-label":`Claude is not connected`,children:[(0,D.jsxs)(`div`,{className:`claude-info-header`,children:[(0,D.jsx)(`span`,{children:`Claude isn’t connected`}),(0,D.jsx)(`button`,{className:`claude-info-close`,onClick:n,"aria-label":`Close`,children:`✕`})]}),(0,D.jsxs)(`div`,{className:`claude-info-section`,style:{padding:`12px 14px`,fontSize:`11px`,color:`var(--text-secondary)`,display:`flex`,flexDirection:`column`,gap:`10px`},children:[(0,D.jsx)(`span`,{children:`This needs Claude, which is currently disconnected. Connect to continue — the rest of the dashboard stays available either way.`}),(0,D.jsxs)(`div`,{style:{display:`flex`,gap:`8px`,alignItems:`center`},children:[(0,D.jsx)(A,{variant:`primary`,size:`sm`,onClick:t,children:`Connect Claude`}),(0,D.jsx)(`button`,{type:`button`,className:`claude-info-close`,style:{fontSize:`11px`},onClick:n,children:`Not now`})]})]})]})}):null}function Ge(e){let t=Math.round(e/6e4),n=Math.floor(t/60),r=t%60;return`${n}h ${String(r).padStart(2,`0`)}m`}function Ke(e){return e.activeMs.thinking+e.activeMs.messaging+e.activeMs.toolUse}function W(e){return e.toLocaleString(`en-GB`)}function qe(e){return`£${e.toFixed(2)}`}function G(e){let t=[`Day`,`Active`,`Output tokens`,`Input tokens`,`Cache write`,`Cache read`,`Opus 4.8 (GBP)`,`Sonnet 4.6 (GBP)`],n=(e,t)=>[e,Ge(Ke(t)),String(t.tokens.output),String(t.tokens.input),String(t.tokens.cacheWrite),String(t.tokens.cacheRead),t.costGBP.opus.toFixed(2),t.costGBP.sonnet.toFixed(2)];return[t,...e.days.map(e=>n(e.date,e)),n(`TOTAL (${e.days.length} d)`,e.totals)].map(e=>e.join(`,`)).join(`
|
|
2
|
+
`)}function Je({label:e,d:t,bold:n}){let r=n?`th`:`td`;return(0,D.jsxs)(`tr`,{className:n?`usage-total-row`:void 0,children:[(0,D.jsx)(r,{className:`usage-day`,children:e}),(0,D.jsx)(r,{children:Ge(Ke(t))}),(0,D.jsx)(r,{children:W(t.tokens.output)}),(0,D.jsx)(r,{children:W(t.tokens.input)}),(0,D.jsx)(r,{children:W(t.tokens.cacheWrite)}),(0,D.jsx)(r,{children:W(t.tokens.cacheRead)}),(0,D.jsx)(r,{children:qe(t.costGBP.opus)}),(0,D.jsx)(r,{children:qe(t.costGBP.sonnet)})]})}function Ye({show:e,onClose:t,anchorEl:n,sessionId:i,summary:a,loading:o,error:s}){let c=(0,E.useRef)(null);if(c.current=n,!e)return null;let l=!!a&&a.days.length>0;return(0,D.jsxs)(P,{anchorRef:c,onClose:t,className:`usage-popover`,role:`dialog`,ariaLabel:`Session usage and cost`,anchorId:i??void 0,children:[(0,D.jsxs)(`div`,{className:`claude-info-header`,children:[(0,D.jsxs)(`span`,{children:[`Usage & cost`,i?` · ${i.slice(0,8)}`:``]}),l&&(0,D.jsx)(`button`,{className:`usage-download`,onClick:()=>{if(!a)return;let e=new Blob([G(a)],{type:`text/csv;charset=utf-8`}),t=URL.createObjectURL(e),n=document.createElement(`a`);n.href=t,n.download=`usage-${i?i.slice(0,8):`session`}.csv`,document.body.appendChild(n),n.click(),n.remove(),URL.revokeObjectURL(t)},"aria-label":`Download as CSV`,title:`Download as CSV`,children:(0,D.jsx)(r,{size:14})}),(0,D.jsx)(`button`,{className:`claude-info-close`,onClick:t,"aria-label":`Close`,children:(0,D.jsx)(C,{size:14})})]}),(0,D.jsxs)(`div`,{className:`claude-info-section usage-body`,children:[o&&(0,D.jsx)(`div`,{className:`usage-note`,children:`Computing usage…`}),!o&&s&&(0,D.jsx)(`div`,{className:`usage-note usage-error`,children:s}),!o&&!s&&a&&a.days.length===0&&(0,D.jsx)(`div`,{className:`usage-note`,children:`No usage recorded for this session yet.`}),!o&&!s&&a&&a.days.length>0&&(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(`div`,{className:`usage-table-scroll`,children:(0,D.jsxs)(`table`,{className:`usage-table`,children:[(0,D.jsx)(`thead`,{children:(0,D.jsxs)(`tr`,{children:[(0,D.jsx)(`th`,{className:`usage-day`,children:`Day`}),(0,D.jsx)(`th`,{children:`Active`}),(0,D.jsx)(`th`,{children:`Output tok`}),(0,D.jsx)(`th`,{children:`Input tok`}),(0,D.jsx)(`th`,{children:`Cache write`}),(0,D.jsx)(`th`,{children:`Cache read`}),(0,D.jsx)(`th`,{children:`Opus 4.8 (£)`}),(0,D.jsx)(`th`,{children:`Sonnet 4.6 (£)`})]})}),(0,D.jsxs)(`tbody`,{children:[a.days.map(e=>(0,D.jsx)(Je,{label:e.date,d:e},e.date)),(0,D.jsx)(Je,{label:`TOTAL (${a.days.length} d)`,d:a.totals,bold:!0})]})]})}),(0,D.jsxs)(`div`,{className:`usage-note usage-caveats`,children:[`Prices dated `,a.pricing.opusPriceDate,` · £/$ `,a.pricing.usdPerGbp,` · Sonnet tokenizer factor `,a.pricing.tokenizerFactor,`. Idle human-wait dominates the calendar span; cache-read tokens dominate cost; Sonnet is a tokenizer-adjusted estimate.`]})]})]})]})}var K=`https://claude.ai/code`,Xe=200,Ze=[500,1e3,1500,2e3,2500,3e3,3e3];function Qe(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:`${K}/${r}`,sameOrigin:!1};let i=n.reason||n.error||`status ${t}`;return{kind:`error`,sessionId:n.sessionId??null,reason:i}}function $e(e){if(!e)return``;let t=Date.parse(e);return Number.isFinite(t)?new Date(t).toLocaleString(void 0,{dateStyle:`medium`,timeStyle:`short`}):``}function et(e){let{businessName:n,cacheKey:r,onConnectClaude:a,role:s,userName:c,userAvatar:f,onSelectProjects:m,onSelectTasks:C,onCloseMobileDrawer:w,collapsed:ne,onSelectData:re,initialDataSurface:se=!1,onLogout:O,onDisconnect:k,disconnecting:A,claudeConnected:pe=!0,subAccounts:he,activeAccountId:ge,switchingAccount:_e,onSwitchAccount:ve,refreshAccounts:ye,onOpenConversations:be}=e,M=te(r),xe=(0,E.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,D.jsx)(me,{size:12}),panel:()=>(0,D.jsx)(Le,{row:e,adminFetch:M,onError:e=>I({message:e,failed:!0})})}),[M]),N=l.productName,Se=n||N,Ce=typeof c==`string`?c:c===null?`name unavailable`:Se,we=(Ce.trim().charAt(0)||`?`).toUpperCase(),[Te,Ee]=(0,E.useState)(se?`data`:`sessions`),[De,P]=(0,E.useState)(!1),[F,I]=(0,E.useState)(null),[L,R]=(0,E.useState)(null),[ke,Ae]=(0,E.useState)(!1),[z,je]=(0,E.useState)([]),[B]=(0,E.useState)(()=>typeof window>`u`?null:new URLSearchParams(window.location.search).get(`session`)),[V,Me]=(0,E.useState)(!1),[Ne,Pe]=(0,E.useState)(null),[Fe,Ie]=(0,E.useState)(!1),[H,Re]=(0,E.useState)(!1),[U,Ve]=(0,E.useState)(!1),[Ue,Ge]=(0,E.useState)(null),[Ke,W]=(0,E.useState)(new Set),qe=(0,E.useRef)(new Map),[G,Je]=(0,E.useState)(!1),[K,et]=(0,E.useState)(new Set),[tt,q]=(0,E.useState)(!1),[J,it]=(0,E.useState)(null),[at,ot]=(0,E.useState)(new Set),[st,ct]=(0,E.useState)(new Set),[lt,ut]=(0,E.useState)(new Set),[Y,X]=(0,E.useState)(null),[dt,Z]=(0,E.useState)(``),[ft,pt]=(0,E.useState)(!1),[mt,ht]=(0,E.useState)(null),[gt,_t]=(0,E.useState)(null),[vt,yt]=(0,E.useState)(!1),[bt,xt]=(0,E.useState)(null),[St,Ct]=(0,E.useState)(!1),wt=(0,E.useRef)(0);(0,E.useEffect)(()=>{if(!F)return;let e=setTimeout(()=>I(null),2500);return()=>clearTimeout(e)},[F]);let Tt=B!=null&&z.some(e=>e.sessionId===B);(0,E.useEffect)(()=>{B==null||!V||console.info(`[sidebar-sessions] op=select-highlight session=${B.slice(0,8)} matched=${Tt}`)},[B,Tt,V]);let Q=(0,E.useCallback)(async()=>{if(!r)return null;let e=++wt.current;Ie(!0),Pe(null);try{let t=await M(`/api/admin/sidebar-sessions`);if(!t.ok)throw Error(`status ${t.status}`);let n=await t.json(),r=n.sessions??[];return e===wt.current?(je(r),Ge(n.accountId??null),Me(!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===wt.current&&Pe(`Failed to load sessions: ${n}`),console.error(`[admin-ui] sidebar-sessions fetch failed: ${n}`),null}finally{e===wt.current&&Ie(!1)}},[r,M]);(0,E.useEffect)(()=>{!r||V||Q()},[r,V,Q]),(0,E.useEffect)(()=>{if(!r)return;let e=null;function t(){console.info(`[admin-ui] sidebar-refresh surface=sessions trigger=poll`),Q()}function n(){e===null&&(e=setInterval(t,nt))}function i(){e!==null&&(clearInterval(e),e=null)}function a(){document.hidden?i():(t(),n())}return document.hidden||n(),document.addEventListener(`visibilitychange`,a),()=>{i(),document.removeEventListener(`visibilitychange`,a)}},[r,Q]);let Et=()=>{console.info(`[admin-ui] sidebar-refresh surface=sessions trigger=manual`),Q()},Dt=()=>{Ee(`data`),console.info(`[admin-ui] sidebar-nav surface=data collapsed=${ne}`),re(),w()},$=typeof window<`u`&&window.location?.pathname||`/`,Ot=Te===`data`,kt=e=>{w(),window.location.href=e},At=[{key:`dashboard`,label:`Dashboard`,icon:(0,D.jsx)(ae,{size:17,strokeWidth:1.75}),active:$===`/`&&!Ot,onClick:()=>kt(`/`)},{key:`chat`,label:`Chat`,icon:(0,D.jsx)(oe,{size:17,strokeWidth:1.75}),active:$.startsWith(`/chat`),onClick:()=>kt(`/chat`)},{key:`tasks`,label:`Tasks`,icon:(0,D.jsx)(j,{size:17,strokeWidth:1.75}),active:$.startsWith(`/tasks`),onClick:()=>{C(),w()}},{key:`calendar`,label:`Calendar`,icon:(0,D.jsx)(t,{size:17,strokeWidth:1.75}),active:$.startsWith(`/calendar`),onClick:()=>kt(`/calendar`)},{key:`data`,label:`Data`,icon:(0,D.jsx)(u,{size:17,strokeWidth:1.75}),active:Ot,onClick:Dt},{key:`container`,label:o().term,icon:(0,D.jsx)(h,{size:17,strokeWidth:1.75}),active:$.startsWith(`/graph`),onClick:()=>{m(),w()}},{key:`activity`,label:`Activity`,icon:(0,D.jsx)(x,{size:17,strokeWidth:1.75}),active:$.startsWith(`/activity`),onClick:()=>kt(`/activity`)},{key:`browser`,label:`Browser`,icon:(0,D.jsx)(p,{size:17,strokeWidth:1.75}),active:$.startsWith(`/browser`),onClick:()=>kt(`/browser`)}],jt=(0,E.useCallback)(async e=>{if(at.has(e.sessionId))return;ot(t=>{let n=new Set(t);return n.add(e.sessionId),n});let t=window.open(``,`_blank`);try{let n=await M(`/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=Qe(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`?(w(),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}`),R(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}`),R({sessionId:e.sessionId,reason:r})}finally{ot(t=>{let n=new Set(t);return n.delete(e.sessionId),n})}},[M,w,at]),Mt=(0,E.useCallback)(async e=>{let t=e.slice(0,8);for(let n=1;n<=Ze.length;n++){await new Promise(e=>setTimeout(e,Ze[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]),Nt=(0,E.useCallback)(async()=>{if(!St){Ct(!0);try{let e=await M(`/api/admin/session-rc-spawn`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({})}),t=await e.json().catch(()=>({})),n=Qe(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?Mt(t.sessionId):console.error(`[admin-ui] sidebar-new-session-converge-skipped reason=no-session-id`)):e.status===503||n.reason===`claude-auth-dead`?(console.info(`[admin-ui] op=llm-action-blocked action=spawn reason=claude-disconnected`),Ae(!0)):(console.error(`[admin-ui] sidebar-new-session-failed status=${e.status} reason=${n.reason}`),R(n))}catch(e){let t=e instanceof Error?e.message:String(e);console.error(`[admin-ui] sidebar-new-session-failed error=${t}`),R({sessionId:null,reason:t})}finally{Ct(!1)}}},[M,St,Mt]),Pt=(0,E.useCallback)((e,t)=>{e.stopPropagation(),it(t)},[]),Ft=(0,E.useCallback)(async(e,t)=>{e.stopPropagation(),ht(t),_t(null),xt(null),yt(!0);try{let e=await M(`/api/admin/session-usage?sessionId=${encodeURIComponent(t.sessionId)}`),n=await e.json().catch(()=>({}));e.ok?_t(n):xt(n.error??`status ${e.status}`)}catch(e){xt(e instanceof Error?e.message:String(e))}finally{yt(!1)}},[M]),It=(0,E.useCallback)(async(e,t={})=>{let n=t.refresh??!0;if(Ke.has(e.sessionId))return!1;W(t=>{let n=new Set(t);return n.add(e.sessionId),n});try{let t=await M(`/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(()=>({}));return console.error(`[admin-ui] sidebar-session-delete-failed sessionId=${e.sessionId} status=${t.status} error=${n.error??`unknown`}`),I({message:`Delete failed: ${n.error??`status ${t.status}`}`,failed:!0}),!1}let r=await t.json();return console.info(`[admin-ui] sidebar-session-delete sessionId=${e.sessionId} live=${e.live} confirmed=true pidKilled=${r.pidKilled??`?`} deleted=${r.deleted??`?`}`),je(t=>t.filter(t=>t.sessionId!==e.sessionId)),n&&Q(),!0}catch(t){let n=t instanceof Error?t.message:String(t);return console.error(`[admin-ui] sidebar-session-delete-failed sessionId=${e.sessionId} error=${n}`),I({message:`Delete failed: ${n}`,failed:!0}),!1}finally{W(t=>{let n=new Set(t);return n.delete(e.sessionId),n})}},[M,Ke,Q]),Lt=(0,E.useCallback)(e=>{et(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),Rt=(0,E.useCallback)(()=>{Je(!1),et(new Set)},[]),zt=(0,E.useCallback)(async()=>{let e=[...K].map(e=>z.find(t=>t.sessionId===e)).filter(e=>!!e),t=e.filter(e=>e.live).length;console.info(`[admin-ui] sidebar-bulk-delete op=start count=${e.length} live=${t}`);let n=(await Promise.all(e.map(e=>It(e,{refresh:!1})))).filter(Boolean).length;console.info(`[admin-ui] sidebar-bulk-delete op=done requested=${e.length} ok=${n} failed=${e.length-n}`),Q(),Rt()},[K,z,It,Q,Rt]),Bt=(0,E.useCallback)(async(e,t)=>{if(e.stopPropagation(),!st.has(t.sessionId)){ct(e=>{let n=new Set(e);return n.add(t.sessionId),n});try{let e=await M(`/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`}`),I({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}`),I({message:`Stop failed: ${n}`,failed:!0})}finally{ct(e=>{let n=new Set(e);return n.delete(t.sessionId),n})}}},[M,st,Q]),Vt=(0,E.useCallback)(async(e,t,n)=>{if(e.stopPropagation(),!lt.has(t.sessionId)){ut(e=>{let n=new Set(e);return n.add(t.sessionId),n});try{let e=await M(`/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`}`),I({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}`),I({message:`${n===`archive`?`Archive`:`Unarchive`} failed: ${r}`,failed:!0})}finally{ut(e=>{let n=new Set(e);return n.delete(t.sessionId),n})}}},[M,lt,Q]),Ht=(0,E.useCallback)(async e=>{let t=dt.trim();if(!t){I({message:`Title can’t be empty`,failed:!0});return}if(t.length>Xe){I({message:`Title too long (max ${Xe})`,failed:!0});return}pt(!0);try{let n=await M(`/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}`),I({message:`Rename failed: ${r}`,failed:!0});return}console.info(`[admin-ui] sidebar-session-rename sessionId=${e.sessionId.slice(0,8)} outcome=ok`),X(null),Z(``),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}`),I({message:`Rename failed: ${n}`,failed:!0})}finally{pt(!1)}},[M,dt,Q]);return(0,D.jsxs)(`aside`,{className:`side`,children:[(0,D.jsxs)(`div`,{className:`side-brand`,children:[(0,D.jsx)(`img`,{className:`side-brand-icon`,src:d,alt:``,"aria-hidden":`true`}),(0,D.jsxs)(`span`,{className:`side-brand-lockup`,children:[(0,D.jsx)(`span`,{className:`side-brand-business`,children:Se}),(0,D.jsx)(`span`,{className:`side-brand-product`,children:l.productName})]})]}),(0,D.jsx)(`nav`,{className:`side-nav`,children:At.map(e=>(0,D.jsxs)(`button`,{type:`button`,className:`admin-row nav-row${e.active?` active`:``}`,"aria-current":e.active?`page`:void 0,onClick:e.onClick,children:[e.icon,(0,D.jsx)(`span`,{className:`label`,children:e.label}),(0,D.jsx)(`span`,{className:`kbd`})]},e.key))}),(()=>{let e=z.filter(e=>H?!0:!e.isSubagent).filter(e=>U?!0:!e.archived),t=z.some(e=>e.isSubagent),n=z.some(e=>e.archived);return(0,D.jsx)(`div`,{className:`side-sessions`,children:(0,D.jsxs)(`div`,{className:`side-list`,children:[(0,D.jsxs)(`div`,{className:`group-head`,children:[(0,D.jsx)(`span`,{children:`Sessions`}),(0,D.jsxs)(`span`,{className:`group-head-meta`,children:[(0,D.jsx)(`button`,{type:`button`,className:`group-head-select${G?` active`:``}`,"aria-pressed":G,title:G?`Exit select mode`:`Select multiple sessions to delete`,onClick:()=>{Je(e=>!e),et(new Set),X(null),Z(``)},children:`Select`}),(0,D.jsx)(`button`,{type:`button`,className:`group-head-refresh`,title:`Refresh sessions`,"aria-label":`Refresh sessions`,onClick:Et,disabled:Fe,children:(0,D.jsx)(ie,{size:12,className:Fe?`spinning`:void 0})}),(0,D.jsx)(`span`,{children:Fe?`…`:String(e.length)}),(0,D.jsxs)(`button`,{type:`button`,className:`admin-btn-cta side-sessions-new`,onClick:Nt,disabled:St,"aria-busy":St,children:[(0,D.jsx)(T,{size:13}),(0,D.jsx)(`span`,{children:St?`Spawning…`:`New session`})]})]})]}),G&&(0,D.jsxs)(`div`,{className:`session-select-bar`,children:[(0,D.jsxs)(`span`,{className:`session-select-count`,children:[K.size,` selected`]}),(0,D.jsxs)(`button`,{type:`button`,className:`session-select-delete`,disabled:K.size===0,onClick:()=>q(!0),children:[`Delete `,K.size]}),(0,D.jsx)(`button`,{type:`button`,className:`session-select-cancel`,onClick:Rt,children:`Cancel`})]}),Ue&&(0,D.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,D.jsx)(`code`,{children:Ue})}),(t||n)&&(0,D.jsxs)(`div`,{className:`artefact-filter-chips`,children:[t&&(0,D.jsx)(`button`,{type:`button`,className:`artefact-filter-chip${H?` active`:``}`,"aria-pressed":H,onClick:()=>Re(e=>!e),title:H?`Hide subagent sessions`:`Show subagent sessions`,children:`Subagents`}),n&&(0,D.jsx)(`button`,{type:`button`,className:`artefact-filter-chip${U?` active`:``}`,"aria-pressed":U,onClick:()=>Ve(e=>!e),title:U?`Hide archived sessions`:`Show archived sessions`,children:`Archived`})]}),Ne&&(0,D.jsx)(`div`,{className:`conv`,style:{color:`var(--text-tertiary)`,cursor:`default`},children:Ne}),V&&!Ne&&e.length===0&&(0,D.jsx)(`div`,{className:`conv`,style:{color:`var(--text-tertiary)`,cursor:`default`},children:`No sessions yet`}),e.map(e=>{let t=$e(e.startedAt),n=at.has(e.sessionId),r=Ke.has(e.sessionId),a=st.has(e.sessionId),o=lt.has(e.sessionId),s=n||r||a||o,c=()=>{window.location.assign(`/chat?session=${e.sessionId}`)},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,D.jsx)(i,{size:12}),busy:n,onClick:()=>{jt(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,D.jsx)(fe,{size:12}),onClick:()=>{c()}},{key:`usage`,label:`Usage and cost for session ${e.title}`,menuLabel:`Usage & cost`,title:`Per-day active time, tokens, and estimated GBP cost`,icon:(0,D.jsx)(de,{size:12}),onClick:t=>{Ft(t,e)}},...e.live?[{key:`stop`,label:`Stop session ${e.title}`,menuLabel:`Stop`,title:`Stop session process (keeps the conversation, can resume later)`,icon:(0,D.jsx)(ee,{size:12}),busy:a,onClick:t=>{Bt(t,e)}}]:[],e.archived?{key:`unarchive`,label:`Unarchive session ${e.title}`,menuLabel:`Unarchive`,title:`Unarchive (move back to the active list)`,icon:(0,D.jsx)(ce,{size:12}),busy:o,onClick:t=>{Vt(t,e,`unarchive`)}}:{key:`archive`,label:`Archive session ${e.title}`,menuLabel:`Archive`,title:`Archive (hide from the list, keeps the conversation resumable)`,icon:(0,D.jsx)(le,{size:12}),busy:o,onClick:t=>{Vt(t,e,`archive`)}},{key:`rename`,label:`Rename session ${e.title}`,menuLabel:`Rename`,title:`Rename this session`,icon:(0,D.jsx)(_,{size:12}),busy:ft&&Y===e.sessionId,onClick:t=>{t.stopPropagation(),X(e.sessionId),Z(e.personName??e.title)}},{key:`delete`,label:`Delete session ${e.title}`,menuLabel:`Delete`,title:`Delete session (stops the process, removes the conversation)`,icon:(0,D.jsx)(y,{size:12}),danger:!0,busy:r,onClick:t=>{Pt(t,e)}},xe({sessionId:e.sessionId,model:e.model??null,title:e.personName??e.title})],u=e.channel===`whatsapp`?` conv-channel-whatsapp`:e.channel===`telegram`?` conv-channel-telegram`:``,d=e.channel===`whatsapp`||e.channel===`telegram`||e.channel===`webchat`,f=g.includes(e.channel??``)&&e.senderId&&e.titleSource===`prefix`?b({operatorName:e.personName??null,whatsappName:e.whatsappName??null,senderId:e.senderId,title:e.title}):e.personName??e.title;return(0,D.jsxs)(`div`,{ref:t=>{let n=qe.current;t?n.set(e.sessionId,t):n.delete(e.sessionId)},className:`conv conv-with-actions${u}${e.sessionId===B?` active`:``}`,children:[(0,D.jsxs)(`div`,{className:`conv-main-static conv-main-clickable`,role:`button`,tabIndex:0,"aria-label":`Open ${f} in webchat`,onClick:()=>{if(Y!==e.sessionId){if(G){Lt(e.sessionId);return}c()}},onKeyDown:t=>{Y!==e.sessionId&&(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),G?Lt(e.sessionId):c())},children:[G&&(0,D.jsx)(`input`,{type:`checkbox`,className:`conv-select-check`,checked:K.has(e.sessionId),"aria-label":`Select ${f}`,onChange:()=>Lt(e.sessionId),onClick:e=>e.stopPropagation()}),(0,D.jsx)(`span`,{className:`conv-live-dot`,"data-live":e.live?`1`:`0`,"aria-label":e.live?`live session`:`ended session`}),(0,D.jsxs)(`span`,{className:`conv-stack`,children:[(0,D.jsxs)(`span`,{className:`conv-name-line`,children:[d&&(0,D.jsx)(S,{channel:e.channel,size:13}),Y===e.sessionId?(0,D.jsx)(`input`,{className:`conv-name conv-name-edit`,autoFocus:!0,onFocus:e=>e.currentTarget.select(),value:dt,disabled:ft,"aria-label":`New title for session ${e.title}`,onChange:e=>Z(e.target.value),onClick:e=>e.stopPropagation(),onKeyDown:t=>{t.key===`Enter`?(t.preventDefault(),Ht(e)):t.key===`Escape`&&(t.preventDefault(),X(null),Z(``))},onBlur:()=>{Y===e.sessionId&&!ft&&(X(null),Z(``))}}):(0,D.jsx)(`span`,{className:`conv-name`,title:f,children:f})]}),(0,D.jsxs)(`span`,{className:`conv-timestamp`,children:[(0,D.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,D.jsxs)(`span`,{children:[` · `,t]})]})]})]}),!G&&(0,D.jsx)(Oe,{actions:l,disabled:s})]},e.sessionId)})]})})})(),(0,D.jsxs)(`div`,{className:`side-foot`,children:[(0,D.jsx)(`div`,{className:`avatar`,children:f?(0,D.jsx)(`img`,{src:f,alt:Ce}):we}),(0,D.jsxs)(`div`,{className:`who`,children:[(0,D.jsx)(`span`,{className:`name`,children:Ce}),(0,D.jsx)(rt,{})]}),(0,D.jsx)(`button`,{type:`button`,className:`side-foot-kebab`,"aria-label":`Account menu`,"aria-haspopup":`menu`,"aria-expanded":De,onClick:()=>P(e=>!e),children:(0,D.jsx)(ue,{size:16})}),De&&(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(`div`,{className:`side-foot-menu-scrim`,"aria-hidden":`true`,onClick:()=>P(!1)}),(0,D.jsx)(`div`,{className:`side-foot-menu`,role:`menu`,children:(0,D.jsx)(v,{variant:`admin`,onCloseMenu:()=>P(!1),onLogout:O??(()=>{}),onDisconnect:k,disconnecting:A,claudeConnected:pe,onConnectClaude:a,cacheKey:r,subAccounts:he,activeAccountId:ge,switchingAccount:_e,onSwitchAccount:ve,refreshAccounts:ye,onOpenConversations:be})})]})]}),F&&(0,D.jsx)(`div`,{className:`copy-toast${F.failed?` copy-toast-failed`:``}`,role:`status`,children:F.message}),(0,D.jsx)(He,{error:L,onClose:()=>R(null)}),(0,D.jsx)(We,{open:ke,onConnect:()=>{Ae(!1),a?.()},onClose:()=>Ae(!1)}),(0,D.jsx)(ze,{target:J,anchorEl:J?qe.current.get(J.sessionId)??null:null,onCancel:()=>it(null),onConfirm:()=>{let e=J;it(null),e&&It(e)}},J?.sessionId??`none`),(0,D.jsx)(Be,{open:tt,count:K.size,liveCount:z.filter(e=>K.has(e.sessionId)&&e.live).length,onConfirm:()=>{q(!1),zt()},onCancel:()=>q(!1)}),(0,D.jsx)(Ye,{show:mt!==null,onClose:()=>{ht(null),_t(null),xt(null)},anchorEl:mt?qe.current.get(mt.sessionId)??null:null,sessionId:mt?.sessionId??null,summary:gt,loading:vt,error:bt},mt?.sessionId??`none`)]})}var tt=5e3,nt=3e4;function rt(){let[e,t]=(0,E.useState)(null);if((0,E.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()},tt))}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=[`system-stats`];return c&&d.push(`system-stats--warn`),l&&d.push(`system-stats--crit`),(0,D.jsxs)(`span`,{className:d.join(` `),role:`status`,"aria-label":`host CPU and RAM`,children:[(0,D.jsxs)(`span`,{className:i?`system-stats__fig system-stats__fig--warn`:`system-stats__fig`,children:[`CPU `,u(n)]}),` · `,(0,D.jsxs)(`span`,{className:o?`system-stats__fig system-stats__fig--warn`:`system-stats__fig`,children:[`RAM `,u(r)]})]})}var q=`admin-sidebar-collapsed`,J=`admin-sidebar-drawer-open`,it=1080;function at(){if(typeof window>`u`)return!1;let e=null;try{e=window.sessionStorage.getItem(q)}catch{e=null}return e===null?typeof window.matchMedia==`function`?window.matchMedia(`(min-width: 721px) and (max-width: ${it}px)`).matches:!1:e===`1`}function ot(e){if(!(typeof window>`u`))try{e?window.sessionStorage.setItem(q,`1`):window.sessionStorage.removeItem(q)}catch{}}function st(){if(typeof window>`u`)return!1;try{return window.sessionStorage.getItem(J)===`1`}catch{return!1}}function ct(e){if(!(typeof window>`u`))try{e?window.sessionStorage.setItem(J,`1`):window.sessionStorage.removeItem(J)}catch{}}function lt(e){let[t,n]=(0,E.useState)(()=>typeof window>`u`||typeof window.matchMedia!=`function`?!1:window.matchMedia(e).matches);return(0,E.useEffect)(()=>{if(typeof window>`u`||typeof window.matchMedia!=`function`)return;let t=window.matchMedia(e),r=()=>n(t.matches);return r(),t.addEventListener(`change`,r),()=>t.removeEventListener(`change`,r)},[e]),t}var ut=720;function Y(e,t){return e===`/`?{via:`in-place`}:{via:`navigate`,href:`/?wa=${encodeURIComponent(t.remoteJid??``)}&acct=${encodeURIComponent(t.accountId??``)}`}}function X(e){return e===`/`?{via:`in-place`}:{via:`navigate`,href:`/?data=1`}}function dt(e,t){if(e!==`/`)return null;let n=new URLSearchParams(t),r=n.get(`wa`),i=n.get(`acct`);return!r||!i?null:{sessionId:``,projectDir:``,title:``,senderId:null,startedAt:``,channel:`whatsapp`,role:`public`,operatorName:null,whatsappName:null,lastMessageAt:null,modelGated:!1,model:null,source:`store`,accountId:i,remoteJid:r}}function Z(e,t){return e===`/`?new URLSearchParams(t).has(`data`):!1}function ft(e,t){return t===`operator`&&e===`chat`||e===`dashboard`?`/`:e===`data`?`/data`:e===`graph`?`/graph`:e===`calendar`?`/calendar`:e===`chat`?`/chat`:e===`activity`?`/activity`:`/browser`}function pt(e){let{cacheKey:t,businessName:n,variant:r=`admin`,onLogout:i,onDisconnect:a,disconnecting:s,claudeConnected:c,onConnectClaude:l,userName:u,userAvatar:d,role:f,onOpenConversations:p,children:m,footer:h}=e,{subAccounts:g,activeAccountId:_,switching:v,switchAccount:ee,refreshAccounts:y}=ne(t),[b,x]=(0,E.useState)(!0);(0,E.useEffect)(()=>{if(c!==void 0||r!==`admin`)return;let e=!1,t=async()=>{try{let t=await fetch(`/api/health`);if(!t.ok)return;let n=await t.json();e||x(n.auth_status!==`dead`&&n.auth_status!==`missing`)}catch{}};t();let n=setInterval(t,6e4);return()=>{e=!0,clearInterval(n)}},[c,r]);let S=c??b,C=l??(()=>{window.location.assign(`/?connect=claude`)}),[w,te]=(0,E.useState)(()=>at()),[ie,ae]=(0,E.useState)(!1),oe=(0,E.useRef)(!0);(0,E.useEffect)(()=>{if(oe.current){oe.current=!1;return}ae(!0);let e=setTimeout(()=>ae(!1),260);return()=>clearTimeout(e)},[w]);let[T,se]=(0,E.useState)(()=>st()),O=lt(`(max-width: ${ut}px)`),[k,A]=(0,E.useState)(()=>typeof window>`u`||Z(window.location.pathname,window.location.search)?null:dt(window.location.pathname,window.location.search)),[ce,le]=(0,E.useState)(()=>typeof window>`u`?!1:Z(window.location.pathname,window.location.search)),[ue]=(0,E.useState)(()=>ce),de=(0,E.useCallback)(e=>{ot(e),te(e)},[]),j=(0,E.useCallback)(e=>{ct(e),se(e)},[]);(0,E.useEffect)(()=>{if(typeof window>`u`)return;let e=window.location?.pathname??``;console.info(`[admin-ui] shell-mount route=${e} variant=${r} sidebar=${r===`operator`?`none`:`present`} collapsed=${w} drawer=${T}`)},[]),(0,E.useEffect)(()=>{typeof window>`u`||!k||(console.info(`[admin-ui] wa-hydrate route=/ remoteJid=${k.remoteJid??``}`),window.history.replaceState(null,``,`/`))},[]),(0,E.useEffect)(()=>{typeof window>`u`||!ce||(console.info(`[admin-ui] data-hydrate route=/`),window.history.replaceState(null,``,`/`))},[]);let fe=(0,E.useCallback)(e=>{if(le(!1),e===null){A(null);return}let t=typeof window<`u`?window.location.pathname:`/`,n=Y(t,e);console.info(`[admin-ui] wa-open route=${t} via=${n.via} sessionId=${e.sessionId.slice(0,8)}`),n.via===`in-place`?A(e):window.location.href=n.href},[]),pe=(0,E.useCallback)(()=>{let e=typeof window<`u`?window.location.pathname:`/`,t=X(e);if(console.info(`[admin-ui] data-open route=${e} via=${t.via}`),t.via===`navigate`){window.location.href=t.href;return}A(null),le(!0)},[]),me=O?T:!w,he=(0,E.useCallback)(()=>{if(!(typeof window>`u`))if(window.matchMedia(`(max-width: ${ut}px)`).matches){let e=T;console.info(`[admin-ui] header-sidebar-toggle from=${e?`open`:`closed`} mode=drawer`),j(!e)}else{let e=w;console.info(`[admin-ui] header-sidebar-toggle from=${e?`closed`:`open`} mode=collapse`),de(!e)}},[w,T,de,j]),ge=(0,E.useCallback)(e=>{let t=ft(e,r);console.info(`[admin-ui] header-menu-nav target=${e} dest=${t}`),window.location.href=t},[r]),ve={collapsed:w,mobileDrawerOpen:T,sidebarOpen:me,onToggleSidebar:he,setMobileDrawerOpen:j,selectedWhatsapp:k,onClearWhatsapp:()=>A(null),onSelectWhatsappConversation:fe,dataOpen:ce};return r===`operator`?(0,D.jsxs)(`div`,{className:`admin-shell admin-page admin-shell-root`,children:[(0,D.jsx)(re,{businessName:n,variant:r,onNavigate:ge,onOpenConversations:p,onToggleSidebar:he,sidebarOpen:me,onLogout:i,onDisconnect:a,disconnecting:s,cacheKey:t,subAccounts:g,activeAccountId:_,switchingAccount:v,onSwitchAccount:ee,refreshAccounts:y}),(0,D.jsx)(`div`,{className:`platform platform-operator`,children:typeof m==`function`?m(ve):m}),h]}):(0,D.jsxs)(`div`,{className:`admin-shell admin-page admin-shell-root`,children:[(0,D.jsxs)(`div`,{className:`platform${T?` menu-open`:``}${!O&&w?` sidebar-collapsed`:``}${ie?` sidebar-animating`:``}`,"data-artefact":`closed`,children:[(0,D.jsx)(et,{businessName:n,cacheKey:t,onConnectClaude:C,role:f??null,userName:u,userAvatar:d??null,onSelectProjects:()=>{window.location.href=`/graph?label=${o().label}`},onSelectTasks:()=>{window.location.href=`/tasks`},onCloseMobileDrawer:()=>j(!1),collapsed:w,mobileDrawerOpen:T,onSelectData:pe,onCloseData:()=>le(!1),initialDataSurface:ue,onLogout:i,onDisconnect:a,disconnecting:s,claudeConnected:S,subAccounts:g,activeAccountId:_,switchingAccount:v,onSwitchAccount:ee,refreshAccounts:y,onOpenConversations:p}),!O&&(0,D.jsx)(Ce,{}),(0,D.jsx)(_e,{sidebarOpen:me,onToggleSidebar:he,claudeConnected:S,onConnectClaude:C}),typeof m==`function`?m(ve):m]}),T&&(0,D.jsx)(`div`,{className:`sidebar-backdrop menu-open`,"aria-hidden":`true`,onClick:()=>j(!1)}),(0,D.jsx)(be,{}),h]})}export{A as _,Ue as a,I as c,me as d,j as f,ce as g,le as h,We as i,je as l,ue as m,lt as n,L as o,de as p,Qe as r,F as s,pt as t,ke as u,se as v};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{L as e}from"./useSubAccountSwitcher-
|
|
1
|
+
import{L as e}from"./useSubAccountSwitcher-sPN6lobE.js";var t=e();function n({checked:e,onChange:n,label:r,disabled:i,ariaLabel:a=r}){return(0,t.jsxs)(`label`,{className:`maxy-checkbox${i?` maxy-checkbox--disabled`:``}`,children:[(0,t.jsx)(`input`,{type:`checkbox`,"aria-label":a,checked:e,onChange:e=>n(e.target.checked),disabled:i}),(0,t.jsx)(`span`,{className:`maxy-checkbox__box`,children:`✱`}),r&&(0,t.jsx)(`span`,{className:`maxy-checkbox__label`,children:r})]})}export{n as t};
|