@rubytech/create-sitedesk-code 0.1.527 → 0.1.528
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/hooks/__tests__/fs-schema-guard.test.sh +82 -1
- package/payload/platform/plugins/admin/hooks/fs-schema-guard.sh +45 -13
- package/payload/platform/plugins/admin/mcp/dist/index.js +18 -4
- package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/tools/logs-read-mcp.d.ts +16 -0
- package/payload/platform/plugins/admin/mcp/dist/tools/logs-read-mcp.d.ts.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/tools/logs-read-mcp.js +69 -0
- package/payload/platform/plugins/admin/mcp/dist/tools/logs-read-mcp.js.map +1 -0
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +62 -4
- package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +7 -0
- package/payload/platform/plugins/docs/references/admin-ui.md +58 -1
- package/payload/platform/plugins/docs/references/deployment.md +1 -1
- package/payload/platform/plugins/docs/references/plugins-guide.md +2 -1
- package/payload/platform/plugins/email/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/email/PLUGIN.md +8 -3
- package/payload/platform/plugins/email/mcp/dist/__tests__/compose-signature.test.js +61 -4
- package/payload/platform/plugins/email/mcp/dist/__tests__/compose-signature.test.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/__tests__/email-draft-edit.test.js +41 -0
- package/payload/platform/plugins/email/mcp/dist/__tests__/email-draft-edit.test.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/__tests__/email-draft.test.js +47 -1
- package/payload/platform/plugins/email/mcp/dist/__tests__/email-draft.test.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/__tests__/email-sending-identity-set.test.d.ts +2 -0
- package/payload/platform/plugins/email/mcp/dist/__tests__/email-sending-identity-set.test.d.ts.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/__tests__/email-sending-identity-set.test.js +184 -0
- package/payload/platform/plugins/email/mcp/dist/__tests__/email-sending-identity-set.test.js.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/__tests__/email-signature-set.test.js +8 -5
- package/payload/platform/plugins/email/mcp/dist/__tests__/email-signature-set.test.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/__tests__/email-status.test.js +64 -0
- package/payload/platform/plugins/email/mcp/dist/__tests__/email-status.test.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/__tests__/mailbox-resolve.test.js +132 -0
- package/payload/platform/plugins/email/mcp/dist/__tests__/mailbox-resolve.test.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/__tests__/signature.test.js +93 -11
- package/payload/platform/plugins/email/mcp/dist/__tests__/signature.test.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/index.js +34 -3
- package/payload/platform/plugins/email/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/compose.d.ts +2 -1
- package/payload/platform/plugins/email/mcp/dist/lib/compose.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/compose.js +13 -2
- package/payload/platform/plugins/email/mcp/dist/lib/compose.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/credentials.d.ts +47 -2
- package/payload/platform/plugins/email/mcp/dist/lib/credentials.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/credentials.js +92 -5
- package/payload/platform/plugins/email/mcp/dist/lib/credentials.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/signature.d.ts +55 -7
- package/payload/platform/plugins/email/mcp/dist/lib/signature.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/signature.js +72 -9
- package/payload/platform/plugins/email/mcp/dist/lib/signature.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-draft-edit.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-draft-edit.js +5 -2
- package/payload/platform/plugins/email/mcp/dist/tools/email-draft-edit.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-draft.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-draft.js +6 -3
- package/payload/platform/plugins/email/mcp/dist/tools/email-draft.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-sending-identity-set.d.ts +20 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-sending-identity-set.d.ts.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-sending-identity-set.js +32 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-sending-identity-set.js.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-status.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-status.js +22 -2
- package/payload/platform/plugins/email/mcp/dist/tools/email-status.js.map +1 -1
- package/payload/platform/plugins/email/references/email-reference.md +11 -3
- package/payload/platform/plugins/email/skills/email-composition/SKILL.md +3 -0
- package/payload/platform/plugins/email/skills/email-signature/SKILL.md +27 -9
- package/payload/platform/scripts/__tests__/vnc-cdp-liveness.test.sh +25 -2
- package/payload/platform/scripts/vnc.sh +34 -26
- package/payload/platform/services/claude-session-manager/dist/account-dir-schema-reconcile.d.ts +24 -1
- package/payload/platform/services/claude-session-manager/dist/account-dir-schema-reconcile.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/account-dir-schema-reconcile.js +84 -3
- package/payload/platform/services/claude-session-manager/dist/account-dir-schema-reconcile.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +1 -0
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
- package/payload/platform/templates/specialists/agents/personal-assistant.md +1 -1
- package/payload/server/{chunk-XCR5D2G3.js → chunk-BP7LH7MC.js} +0 -1
- package/payload/server/{chunk-KY3BBT67.js → chunk-DLG7XSLA.js} +1 -1
- package/payload/server/{chunk-7MGR5M6G.js → chunk-UTIHI6KV.js} +1 -1
- package/payload/server/{manager-6XOWHREK.js → manager-B4LRDZKC.js} +2 -2
- package/payload/server/maxy-edge.js +2 -2
- package/payload/server/public/activity.html +5 -5
- package/payload/server/public/agents.html +4 -4
- package/payload/server/public/assets/AdminLoginScreens-Bx9vPuUg.js +1 -0
- package/payload/server/public/assets/AdminLoginScreens-Bx9vPuUg.js.br +0 -0
- package/payload/server/public/assets/AdminLoginScreens-Bx9vPuUg.js.gz +0 -0
- package/payload/server/public/assets/AdminShell-BxJPbC3p.js +2 -0
- package/payload/server/public/assets/AdminShell-BxJPbC3p.js.br +0 -0
- package/payload/server/public/assets/AdminShell-BxJPbC3p.js.gz +0 -0
- package/payload/server/public/assets/CdpScreencastSurface-5HLhTQTV.js +1 -0
- package/payload/server/public/assets/CdpScreencastSurface-5HLhTQTV.js.br +0 -0
- package/payload/server/public/assets/CdpScreencastSurface-5HLhTQTV.js.gz +0 -0
- package/payload/server/public/assets/{activity-aVvbaVd4.js → activity-BaSYn62l.js} +1 -1
- package/payload/server/public/assets/activity-BaSYn62l.js.br +0 -0
- package/payload/server/public/assets/activity-BaSYn62l.js.gz +0 -0
- package/payload/server/public/assets/admin-CYCKrV_x.js +1 -0
- package/payload/server/public/assets/admin-CYCKrV_x.js.br +0 -0
- package/payload/server/public/assets/admin-CYCKrV_x.js.gz +0 -0
- package/payload/server/public/assets/{agents-CrpVTPRG.js → agents-D8EJG-ta.js} +1 -1
- package/payload/server/public/assets/agents-D8EJG-ta.js.br +0 -0
- package/payload/server/public/assets/agents-D8EJG-ta.js.gz +0 -0
- package/payload/server/public/assets/{arc-DaudCnXg.js → arc-CHoXZR2f.js} +1 -1
- package/payload/server/public/assets/arc-CHoXZR2f.js.br +0 -0
- package/payload/server/public/assets/arc-CHoXZR2f.js.gz +0 -0
- package/payload/server/public/assets/architecture-YZFGNWBL-CQyo9W6E.js +1 -0
- package/payload/server/public/assets/architecture-YZFGNWBL-CQyo9W6E.js.br +0 -0
- package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-BEEC3s7i.js → architectureDiagram-Q4EWVU46-B8SCI0AR.js} +1 -1
- package/payload/server/public/assets/architectureDiagram-Q4EWVU46-B8SCI0AR.js.br +0 -0
- package/payload/server/public/assets/architectureDiagram-Q4EWVU46-B8SCI0AR.js.gz +0 -0
- package/payload/server/public/assets/{blockDiagram-DXYQGD6D-BIWyfb18.js → blockDiagram-DXYQGD6D-CsJmhz5D.js} +1 -1
- package/payload/server/public/assets/blockDiagram-DXYQGD6D-CsJmhz5D.js.br +0 -0
- package/payload/server/public/assets/blockDiagram-DXYQGD6D-CsJmhz5D.js.gz +0 -0
- package/payload/server/public/assets/browser-D6Y_Zu8C.js +1 -0
- package/payload/server/public/assets/browser-D6Y_Zu8C.js.br +0 -0
- package/payload/server/public/assets/browser-D6Y_Zu8C.js.gz +0 -0
- package/payload/server/public/assets/{c4Diagram-AHTNJAMY--h6oE2cv.js → c4Diagram-AHTNJAMY-CzaSNqcs.js} +1 -1
- package/payload/server/public/assets/c4Diagram-AHTNJAMY-CzaSNqcs.js.br +0 -0
- package/payload/server/public/assets/c4Diagram-AHTNJAMY-CzaSNqcs.js.gz +0 -0
- package/payload/server/public/assets/{calendar-4IWQpwYv.js → calendar-DD4oVa-r.js} +1 -1
- package/payload/server/public/assets/calendar-DD4oVa-r.js.br +0 -0
- package/payload/server/public/assets/calendar-DD4oVa-r.js.gz +0 -0
- package/payload/server/public/assets/channel-Dg_Rah6O.js +1 -0
- package/payload/server/public/assets/channel-Dg_Rah6O.js.br +0 -0
- package/payload/server/public/assets/chat-CwWs69PO.js +1 -0
- package/payload/server/public/assets/chat-CwWs69PO.js.br +0 -0
- package/payload/server/public/assets/chat-CwWs69PO.js.gz +0 -0
- package/payload/server/public/assets/chevron-left-ClfIy5Fx.js +1 -0
- package/payload/server/public/assets/chevron-right-B0QvXpxl.js +1 -0
- package/payload/server/public/assets/chevron-right-B0QvXpxl.js.br +0 -0
- package/payload/server/public/assets/{chunk-2KRD3SAO-BwEVlnxo.js → chunk-2KRD3SAO-DAN3KCZc.js} +1 -1
- package/payload/server/public/assets/chunk-2KRD3SAO-DAN3KCZc.js.br +0 -0
- package/payload/server/public/assets/chunk-2KRD3SAO-DAN3KCZc.js.gz +0 -0
- package/payload/server/public/assets/{chunk-336JU56O-DQddTATH.js → chunk-336JU56O-Dm-0_lIT.js} +2 -2
- package/payload/server/public/assets/chunk-336JU56O-Dm-0_lIT.js.br +0 -0
- package/payload/server/public/assets/chunk-336JU56O-Dm-0_lIT.js.gz +0 -0
- package/payload/server/public/assets/chunk-426QAEUC-Rh8qTRZB.js +1 -0
- package/payload/server/public/assets/chunk-426QAEUC-Rh8qTRZB.js.br +0 -0
- package/payload/server/public/assets/chunk-426QAEUC-Rh8qTRZB.js.gz +0 -0
- package/payload/server/public/assets/{chunk-4BX2VUAB-C5p3xTC6.js → chunk-4BX2VUAB-C2l9bAlo.js} +1 -1
- package/payload/server/public/assets/chunk-4BX2VUAB-C2l9bAlo.js.br +0 -0
- package/payload/server/public/assets/chunk-4BX2VUAB-C2l9bAlo.js.gz +0 -0
- package/payload/server/public/assets/{chunk-4TB4RGXK-gClfNc1w.js → chunk-4TB4RGXK-BMXDzU09.js} +1 -1
- package/payload/server/public/assets/chunk-4TB4RGXK-BMXDzU09.js.br +0 -0
- package/payload/server/public/assets/chunk-4TB4RGXK-BMXDzU09.js.gz +0 -0
- package/payload/server/public/assets/{chunk-55IACEB6-DDU_m1ra.js → chunk-55IACEB6-CbMYAZon.js} +1 -1
- package/payload/server/public/assets/chunk-55IACEB6-CbMYAZon.js.br +0 -0
- package/payload/server/public/assets/chunk-55IACEB6-CbMYAZon.js.gz +0 -0
- package/payload/server/public/assets/{chunk-5FUZZQ4R-CZ2jQWNR.js → chunk-5FUZZQ4R-DjdsuxLA.js} +1 -1
- package/payload/server/public/assets/chunk-5FUZZQ4R-DjdsuxLA.js.br +0 -0
- package/payload/server/public/assets/chunk-5FUZZQ4R-DjdsuxLA.js.gz +0 -0
- package/payload/server/public/assets/{chunk-5PVQY5BW-kcZ5kfTg.js → chunk-5PVQY5BW-CGSBzsF6.js} +1 -1
- package/payload/server/public/assets/chunk-5PVQY5BW-CGSBzsF6.js.br +0 -0
- package/payload/server/public/assets/chunk-5PVQY5BW-CGSBzsF6.js.gz +0 -0
- package/payload/server/public/assets/{chunk-67CJDMHE-9W0Qv0jm.js → chunk-67CJDMHE-ClOLWser.js} +1 -1
- package/payload/server/public/assets/chunk-67CJDMHE-ClOLWser.js.br +0 -0
- package/payload/server/public/assets/chunk-67CJDMHE-ClOLWser.js.gz +0 -0
- package/payload/server/public/assets/{chunk-7N4EOEYR-B3gqydR3.js → chunk-7N4EOEYR-BzC1dzY0.js} +1 -1
- package/payload/server/public/assets/chunk-7N4EOEYR-BzC1dzY0.js.br +0 -0
- package/payload/server/public/assets/chunk-7N4EOEYR-BzC1dzY0.js.gz +0 -0
- package/payload/server/public/assets/{chunk-AA7GKIK3-DW8a-2NK.js → chunk-AA7GKIK3-R_pjI1kw.js} +1 -1
- package/payload/server/public/assets/chunk-AA7GKIK3-R_pjI1kw.js.br +0 -0
- package/payload/server/public/assets/chunk-AA7GKIK3-R_pjI1kw.js.gz +0 -0
- package/payload/server/public/assets/{chunk-BSJP7CBP-DqXIO_5R.js → chunk-BSJP7CBP-D2KRAq3U.js} +1 -1
- package/payload/server/public/assets/chunk-BSJP7CBP-D2KRAq3U.js.br +0 -0
- package/payload/server/public/assets/chunk-BSJP7CBP-D2KRAq3U.js.gz +0 -0
- package/payload/server/public/assets/{chunk-CIAEETIT-BMJfgj2u.js → chunk-CIAEETIT-BPGWtrKR.js} +1 -1
- package/payload/server/public/assets/chunk-CIAEETIT-BPGWtrKR.js.br +0 -0
- package/payload/server/public/assets/chunk-CIAEETIT-BPGWtrKR.js.gz +0 -0
- package/payload/server/public/assets/{chunk-EDXVE4YY-BxdLPk0b.js → chunk-EDXVE4YY-tqt7wueu.js} +1 -1
- package/payload/server/public/assets/chunk-EDXVE4YY-tqt7wueu.js.br +3 -0
- package/payload/server/public/assets/chunk-EDXVE4YY-tqt7wueu.js.gz +0 -0
- package/payload/server/public/assets/{chunk-ENJZ2VHE-Cfe2DCjQ.js → chunk-ENJZ2VHE-DJG3cA6E.js} +1 -1
- package/payload/server/public/assets/chunk-ENJZ2VHE-DJG3cA6E.js.br +0 -0
- package/payload/server/public/assets/chunk-ENJZ2VHE-DJG3cA6E.js.gz +0 -0
- package/payload/server/public/assets/{chunk-FMBD7UC4-CdPjwbtf.js → chunk-FMBD7UC4-DO1xgCDf.js} +1 -1
- package/payload/server/public/assets/chunk-FMBD7UC4-DO1xgCDf.js.br +2 -0
- package/payload/server/public/assets/chunk-FMBD7UC4-DO1xgCDf.js.gz +0 -0
- package/payload/server/public/assets/{chunk-FOC6F5B3-Dl6l1KAh.js → chunk-FOC6F5B3-BhWAbCUG.js} +1 -1
- package/payload/server/public/assets/chunk-FOC6F5B3-BhWAbCUG.js.br +0 -0
- package/payload/server/public/assets/chunk-FOC6F5B3-BhWAbCUG.js.gz +0 -0
- package/payload/server/public/assets/{chunk-ICPOFSXX-PnsGrqtx.js → chunk-ICPOFSXX-BhUzt35c.js} +2 -2
- package/payload/server/public/assets/chunk-ICPOFSXX-BhUzt35c.js.br +0 -0
- package/payload/server/public/assets/chunk-ICPOFSXX-BhUzt35c.js.gz +0 -0
- package/payload/server/public/assets/{chunk-K5T4RW27--g29_wjW.js → chunk-K5T4RW27-Boj-qHrX.js} +1 -1
- package/payload/server/public/assets/chunk-K5T4RW27-Boj-qHrX.js.br +0 -0
- package/payload/server/public/assets/chunk-K5T4RW27-Boj-qHrX.js.gz +0 -0
- package/payload/server/public/assets/{chunk-KGLVRYIC-CI77ENeO.js → chunk-KGLVRYIC-3cBRDk1b.js} +1 -1
- package/payload/server/public/assets/chunk-KGLVRYIC-3cBRDk1b.js.br +2 -0
- package/payload/server/public/assets/chunk-KGLVRYIC-3cBRDk1b.js.gz +0 -0
- package/payload/server/public/assets/{chunk-LIHQZDEY-CE-XByg6.js → chunk-LIHQZDEY-CgkLKaII.js} +1 -1
- package/payload/server/public/assets/chunk-LIHQZDEY-CgkLKaII.js.br +0 -0
- package/payload/server/public/assets/chunk-LIHQZDEY-CgkLKaII.js.gz +0 -0
- package/payload/server/public/assets/{chunk-ORNJ4GCN-DkjJQQSm.js → chunk-ORNJ4GCN-Dl449r_k.js} +1 -1
- package/payload/server/public/assets/chunk-ORNJ4GCN-Dl449r_k.js.br +0 -0
- package/payload/server/public/assets/chunk-ORNJ4GCN-Dl449r_k.js.gz +0 -0
- package/payload/server/public/assets/{chunk-OYMX7WX6-DhogFeD7.js → chunk-OYMX7WX6-Dzkj67n6.js} +1 -1
- package/payload/server/public/assets/chunk-OYMX7WX6-Dzkj67n6.js.br +0 -0
- package/payload/server/public/assets/chunk-OYMX7WX6-Dzkj67n6.js.gz +0 -0
- package/payload/server/public/assets/chunk-QZHKN3VN-BDoCtU0N.js +1 -0
- package/payload/server/public/assets/chunk-QZHKN3VN-BDoCtU0N.js.br +0 -0
- package/payload/server/public/assets/chunk-QZHKN3VN-BDoCtU0N.js.gz +0 -0
- package/payload/server/public/assets/{chunk-U2HBQHQK-CeaRXuiO.js → chunk-U2HBQHQK-Dyz9Kbir.js} +1 -1
- package/payload/server/public/assets/chunk-U2HBQHQK-Dyz9Kbir.js.br +0 -0
- package/payload/server/public/assets/chunk-U2HBQHQK-Dyz9Kbir.js.gz +0 -0
- package/payload/server/public/assets/{chunk-X2U36JSP-BqxXeOqf.js → chunk-X2U36JSP-ag0VVCw6.js} +1 -1
- package/payload/server/public/assets/chunk-X2U36JSP-ag0VVCw6.js.br +0 -0
- package/payload/server/public/assets/chunk-X2U36JSP-ag0VVCw6.js.gz +0 -0
- package/payload/server/public/assets/{chunk-XPW4576I-DtqJwn2x.js → chunk-XPW4576I-B-vhDYPE.js} +1 -1
- package/payload/server/public/assets/chunk-XPW4576I-B-vhDYPE.js.br +0 -0
- package/payload/server/public/assets/chunk-XPW4576I-B-vhDYPE.js.gz +0 -0
- package/payload/server/public/assets/{chunk-YZCP3GAM-COBlEwQw.js → chunk-YZCP3GAM-C4COviPb.js} +1 -1
- package/payload/server/public/assets/chunk-YZCP3GAM-C4COviPb.js.br +0 -0
- package/payload/server/public/assets/chunk-YZCP3GAM-C4COviPb.js.gz +0 -0
- package/payload/server/public/assets/{chunk-ZZ45TVLE-CcL088y6.js → chunk-ZZ45TVLE-8dGsCp5b.js} +1 -1
- package/payload/server/public/assets/chunk-ZZ45TVLE-8dGsCp5b.js.br +0 -0
- package/payload/server/public/assets/chunk-ZZ45TVLE-8dGsCp5b.js.gz +0 -0
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-qevfwy5C.js +1 -0
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-qevfwy5C.js.br +0 -0
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-qevfwy5C.js.gz +0 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-CxOR3aao.js +1 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-CxOR3aao.js.br +0 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-CxOR3aao.js.gz +0 -0
- package/payload/server/public/assets/clock-BIaRnIP_.js +1 -0
- package/payload/server/public/assets/clock-BIaRnIP_.js.br +0 -0
- package/payload/server/public/assets/clock-BIaRnIP_.js.gz +0 -0
- package/payload/server/public/assets/clone-CJmzeWWZ.js +1 -0
- package/payload/server/public/assets/clone-CJmzeWWZ.js.br +0 -0
- package/payload/server/public/assets/{cose-bilkent-S5V4N54A-kEHVkDNn.js → cose-bilkent-S5V4N54A-qM4Q4TuE.js} +1 -1
- package/payload/server/public/assets/cose-bilkent-S5V4N54A-qM4Q4TuE.js.br +0 -0
- package/payload/server/public/assets/cose-bilkent-S5V4N54A-qM4Q4TuE.js.gz +0 -0
- package/payload/server/public/assets/{dagre-D2wUw1zC.js → dagre-DRvHdusQ.js} +1 -1
- package/payload/server/public/assets/dagre-DRvHdusQ.js.br +0 -0
- package/payload/server/public/assets/dagre-DRvHdusQ.js.gz +0 -0
- package/payload/server/public/assets/{dagre-KV5264BT-BWfTDwEs.js → dagre-KV5264BT-CGqSVVTn.js} +1 -1
- package/payload/server/public/assets/dagre-KV5264BT-CGqSVVTn.js.br +0 -0
- package/payload/server/public/assets/dagre-KV5264BT-CGqSVVTn.js.gz +0 -0
- package/payload/server/public/assets/data-O_9Kiicl.js +1 -0
- package/payload/server/public/assets/data-O_9Kiicl.js.br +2 -0
- package/payload/server/public/assets/data-O_9Kiicl.js.gz +0 -0
- package/payload/server/public/assets/{diagram-5BDNPKRD-Tl9dS8w0.js → diagram-5BDNPKRD-DfFgeApz.js} +1 -1
- package/payload/server/public/assets/diagram-5BDNPKRD-DfFgeApz.js.br +0 -0
- package/payload/server/public/assets/diagram-5BDNPKRD-DfFgeApz.js.gz +0 -0
- package/payload/server/public/assets/{diagram-G4DWMVQ6-CeSe6TMu.js → diagram-G4DWMVQ6-DPXc3Q8e.js} +1 -1
- package/payload/server/public/assets/diagram-G4DWMVQ6-DPXc3Q8e.js.br +0 -0
- package/payload/server/public/assets/diagram-G4DWMVQ6-DPXc3Q8e.js.gz +0 -0
- package/payload/server/public/assets/{diagram-MMDJMWI5-DYBNJCmk.js → diagram-MMDJMWI5-V8RCddvy.js} +1 -1
- package/payload/server/public/assets/diagram-MMDJMWI5-V8RCddvy.js.br +0 -0
- package/payload/server/public/assets/diagram-MMDJMWI5-V8RCddvy.js.gz +0 -0
- package/payload/server/public/assets/{diagram-TYMM5635-BmpUGltx.js → diagram-TYMM5635-CrvfIf-m.js} +1 -1
- package/payload/server/public/assets/diagram-TYMM5635-CrvfIf-m.js.br +0 -0
- package/payload/server/public/assets/diagram-TYMM5635-CrvfIf-m.js.gz +0 -0
- package/payload/server/public/assets/{erDiagram-SMLLAGMA-DuwuNGqx.js → erDiagram-SMLLAGMA-DClMgmBB.js} +1 -1
- package/payload/server/public/assets/erDiagram-SMLLAGMA-DClMgmBB.js.br +0 -0
- package/payload/server/public/assets/erDiagram-SMLLAGMA-DClMgmBB.js.gz +0 -0
- package/payload/server/public/assets/{file-download-DayBHhKS.js → file-download-sXU3_umF.js} +1 -1
- package/payload/server/public/assets/file-download-sXU3_umF.js.br +0 -0
- package/payload/server/public/assets/file-download-sXU3_umF.js.gz +0 -0
- package/payload/server/public/assets/{file-text-BSyhVH0m.js → file-text-CeXBviDH.js} +1 -1
- package/payload/server/public/assets/file-text-CeXBviDH.js.br +0 -0
- package/payload/server/public/assets/file-text-CeXBviDH.js.gz +0 -0
- package/payload/server/public/assets/{flatten-Bu-b1uTY.js → flatten-UdUTbm8v.js} +1 -1
- package/payload/server/public/assets/flatten-UdUTbm8v.js.br +0 -0
- package/payload/server/public/assets/flatten-UdUTbm8v.js.gz +0 -0
- package/payload/server/public/assets/{flowDiagram-DWJPFMVM-Bpp8P6Ba.js → flowDiagram-DWJPFMVM-D29Ou09P.js} +1 -1
- package/payload/server/public/assets/flowDiagram-DWJPFMVM-D29Ou09P.js.br +0 -0
- package/payload/server/public/assets/flowDiagram-DWJPFMVM-D29Ou09P.js.gz +0 -0
- package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-CE6ppjB4.js → ganttDiagram-T4ZO3ILL-CoAK7W_V.js} +1 -1
- package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-CoAK7W_V.js.br +0 -0
- package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-CoAK7W_V.js.gz +0 -0
- package/payload/server/public/assets/gitGraph-7Q5UKJZL--JSoLMoH.js +1 -0
- package/payload/server/public/assets/gitGraph-7Q5UKJZL--JSoLMoH.js.br +0 -0
- package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-BdK1GjPr.js → gitGraphDiagram-UUTBAWPF-DMEc_1aX.js} +1 -1
- package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-DMEc_1aX.js.br +0 -0
- package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-DMEc_1aX.js.gz +0 -0
- package/payload/server/public/assets/{graph-Bjv3Tc3B.js → graph-BSuDP6k7.js} +3 -3
- package/payload/server/public/assets/graph-BSuDP6k7.js.br +0 -0
- package/payload/server/public/assets/graph-BSuDP6k7.js.gz +0 -0
- package/payload/server/public/assets/{graph-labels-DegLKGdx.js → graph-labels-D2pQkgYW.js} +1 -1
- package/payload/server/public/assets/graph-labels-D2pQkgYW.js.br +0 -0
- package/payload/server/public/assets/graph-labels-D2pQkgYW.js.gz +0 -0
- package/payload/server/public/assets/{graphlib-CHEXylyU.js → graphlib-ihSLgqUG.js} +1 -1
- package/payload/server/public/assets/graphlib-ihSLgqUG.js.br +0 -0
- package/payload/server/public/assets/graphlib-ihSLgqUG.js.gz +0 -0
- package/payload/server/public/assets/info-OMHHGYJF-CY4gsXn4.js +1 -0
- package/payload/server/public/assets/info-OMHHGYJF-CY4gsXn4.js.br +0 -0
- package/payload/server/public/assets/infoDiagram-42DDH7IO-CpWSNS3C.js +2 -0
- package/payload/server/public/assets/infoDiagram-42DDH7IO-CpWSNS3C.js.br +0 -0
- package/payload/server/public/assets/infoDiagram-42DDH7IO-CpWSNS3C.js.gz +0 -0
- package/payload/server/public/assets/{isEmpty-CjH0UASp.js → isEmpty-DY_Xp9Na.js} +1 -1
- package/payload/server/public/assets/isEmpty-DY_Xp9Na.js.br +0 -0
- package/payload/server/public/assets/isEmpty-DY_Xp9Na.js.gz +0 -0
- package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-CgkVZ4-3.js → ishikawaDiagram-UXIWVN3A-w8fVIbxy.js} +1 -1
- package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-w8fVIbxy.js.br +0 -0
- package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-w8fVIbxy.js.gz +0 -0
- package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-ByUPv8q6.js → journeyDiagram-VCZTEJTY-BRTPKDT5.js} +1 -1
- package/payload/server/public/assets/journeyDiagram-VCZTEJTY-BRTPKDT5.js.br +0 -0
- package/payload/server/public/assets/journeyDiagram-VCZTEJTY-BRTPKDT5.js.gz +0 -0
- package/payload/server/public/assets/{kanban-definition-6JOO6SKY-CFinqhpu.js → kanban-definition-6JOO6SKY-Ls3VaFZ_.js} +1 -1
- package/payload/server/public/assets/kanban-definition-6JOO6SKY-Ls3VaFZ_.js.br +0 -0
- package/payload/server/public/assets/kanban-definition-6JOO6SKY-Ls3VaFZ_.js.gz +0 -0
- package/payload/server/public/assets/{line-Y4ns5Ghi.js → line-BwhAIh8u.js} +1 -1
- package/payload/server/public/assets/line-BwhAIh8u.js.br +0 -0
- package/payload/server/public/assets/line-BwhAIh8u.js.gz +0 -0
- package/payload/server/public/assets/{linear-l39GooQ5.js → linear-USiZPFN4.js} +1 -1
- package/payload/server/public/assets/linear-USiZPFN4.js.br +0 -0
- package/payload/server/public/assets/linear-USiZPFN4.js.gz +0 -0
- package/payload/server/public/assets/{maximize-2-DJFG2EXJ.js → maximize-2-DlzSNygU.js} +1 -1
- package/payload/server/public/assets/maximize-2-DlzSNygU.js.br +0 -0
- package/payload/server/public/assets/maximize-2-DlzSNygU.js.gz +0 -0
- package/payload/server/public/assets/{mermaid-parser.core-5w0T1dRj.js → mermaid-parser.core-Bq--iC2w.js} +2 -2
- package/payload/server/public/assets/mermaid-parser.core-Bq--iC2w.js.br +0 -0
- package/payload/server/public/assets/mermaid-parser.core-Bq--iC2w.js.gz +0 -0
- package/payload/server/public/assets/{mermaid.core-DBADY5VW.js → mermaid.core-oYX-FxVa.js} +3 -3
- package/payload/server/public/assets/mermaid.core-oYX-FxVa.js.br +0 -0
- package/payload/server/public/assets/mermaid.core-oYX-FxVa.js.gz +0 -0
- package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-rHz37loq.js → mindmap-definition-QFDTVHPH-ByZjL4Bs.js} +1 -1
- package/payload/server/public/assets/mindmap-definition-QFDTVHPH-ByZjL4Bs.js.br +0 -0
- package/payload/server/public/assets/mindmap-definition-QFDTVHPH-ByZjL4Bs.js.gz +0 -0
- package/payload/server/public/assets/operator-BP61-xjz.js +1 -0
- package/payload/server/public/assets/operator-BP61-xjz.js.br +0 -0
- package/payload/server/public/assets/operator-BP61-xjz.js.gz +0 -0
- package/payload/server/public/assets/{ordinal-D6D6WcTC.js → ordinal-gnpqfIHn.js} +1 -1
- package/payload/server/public/assets/ordinal-gnpqfIHn.js.br +0 -0
- package/payload/server/public/assets/ordinal-gnpqfIHn.js.gz +0 -0
- package/payload/server/public/assets/packet-4T2RLAQJ-DczCn3uj.js +1 -0
- package/payload/server/public/assets/packet-4T2RLAQJ-DczCn3uj.js.br +0 -0
- package/payload/server/public/assets/page-DX7ArY_s.js +1 -0
- package/payload/server/public/assets/page-DX7ArY_s.js.br +0 -0
- package/payload/server/public/assets/page-DX7ArY_s.js.gz +0 -0
- package/payload/server/public/assets/page-eQ4OVros.js +32 -0
- package/payload/server/public/assets/page-eQ4OVros.js.br +0 -0
- package/payload/server/public/assets/page-eQ4OVros.js.gz +0 -0
- package/payload/server/public/assets/{pdf-render-BSgBp8Fr.js → pdf-render-gEryZmeC.js} +1 -1
- package/payload/server/public/assets/pdf-render-gEryZmeC.js.br +0 -0
- package/payload/server/public/assets/pdf-render-gEryZmeC.js.gz +0 -0
- package/payload/server/public/assets/pie-ZZUOXDRM-CbvZUaof.js +1 -0
- package/payload/server/public/assets/pie-ZZUOXDRM-CbvZUaof.js.br +0 -0
- package/payload/server/public/assets/{pieDiagram-DEJITSTG-as0e_DSH.js → pieDiagram-DEJITSTG-BGFms5bU.js} +1 -1
- package/payload/server/public/assets/pieDiagram-DEJITSTG-BGFms5bU.js.br +0 -0
- package/payload/server/public/assets/pieDiagram-DEJITSTG-BGFms5bU.js.gz +0 -0
- package/payload/server/public/assets/{public-CNVEM-Bx.js → public-DPDKFKM2.js} +1 -1
- package/payload/server/public/assets/public-DPDKFKM2.js.br +0 -0
- package/payload/server/public/assets/public-DPDKFKM2.js.gz +0 -0
- package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-B4t8HO9J.js → quadrantDiagram-34T5L4WZ-_ymoz8bQ.js} +1 -1
- package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-_ymoz8bQ.js.br +0 -0
- package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-_ymoz8bQ.js.gz +0 -0
- package/payload/server/public/assets/radar-PYXPWWZC-XmuabQlO.js +1 -0
- package/payload/server/public/assets/radar-PYXPWWZC-XmuabQlO.js.br +0 -0
- package/payload/server/public/assets/{reduce-BtXXK8Ma.js → reduce-BvezuHIe.js} +1 -1
- package/payload/server/public/assets/reduce-BvezuHIe.js.br +0 -0
- package/payload/server/public/assets/reduce-BvezuHIe.js.gz +0 -0
- package/payload/server/public/assets/{requirementDiagram-MS252O5E-yxh30zHX.js → requirementDiagram-MS252O5E-lrOmOxIA.js} +1 -1
- package/payload/server/public/assets/requirementDiagram-MS252O5E-lrOmOxIA.js.br +0 -0
- package/payload/server/public/assets/requirementDiagram-MS252O5E-lrOmOxIA.js.gz +0 -0
- package/payload/server/public/assets/{rotate-ccw-DQCaky8_.js → rotate-ccw-BR0JbPFV.js} +1 -1
- package/payload/server/public/assets/rotate-ccw-BR0JbPFV.js.br +0 -0
- package/payload/server/public/assets/rotate-ccw-BR0JbPFV.js.gz +0 -0
- package/payload/server/public/assets/{routines-DwK5FeLm.js → routines-y413YZa-.js} +1 -1
- package/payload/server/public/assets/routines-y413YZa-.js.br +0 -0
- package/payload/server/public/assets/routines-y413YZa-.js.gz +0 -0
- package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-j-k9Wfty.js → sankeyDiagram-XADWPNL6-CdUQThXU.js} +1 -1
- package/payload/server/public/assets/sankeyDiagram-XADWPNL6-CdUQThXU.js.br +0 -0
- package/payload/server/public/assets/sankeyDiagram-XADWPNL6-CdUQThXU.js.gz +0 -0
- package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-DGLgcLhC.js → sequenceDiagram-FGHM5R23-DqnEEldq.js} +1 -1
- package/payload/server/public/assets/sequenceDiagram-FGHM5R23-DqnEEldq.js.br +0 -0
- package/payload/server/public/assets/sequenceDiagram-FGHM5R23-DqnEEldq.js.gz +0 -0
- package/payload/server/public/assets/{skills-CosN3uA4.js → skills-fH0uA7cj.js} +1 -1
- package/payload/server/public/assets/skills-fH0uA7cj.js.br +0 -0
- package/payload/server/public/assets/skills-fH0uA7cj.js.gz +0 -0
- package/payload/server/public/assets/{stateDiagram-FHFEXIEX-C9p1OUMI.js → stateDiagram-FHFEXIEX-KEdtxqdq.js} +1 -1
- package/payload/server/public/assets/stateDiagram-FHFEXIEX-KEdtxqdq.js.br +0 -0
- package/payload/server/public/assets/stateDiagram-FHFEXIEX-KEdtxqdq.js.gz +0 -0
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Cs85Ewtt.js +1 -0
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Cs85Ewtt.js.br +0 -0
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Cs85Ewtt.js.gz +0 -0
- package/payload/server/public/assets/{tasks-f0QikHmw.js → tasks-CrVzFrTR.js} +2 -2
- package/payload/server/public/assets/tasks-CrVzFrTR.js.br +0 -0
- package/payload/server/public/assets/tasks-CrVzFrTR.js.gz +0 -0
- package/payload/server/public/assets/{time-entry-format-DLTdS35_.js → time-entry-format-C_0jiMpQ.js} +1 -1
- package/payload/server/public/assets/time-entry-format-C_0jiMpQ.js.br +1 -0
- package/payload/server/public/assets/time-entry-format-C_0jiMpQ.js.gz +0 -0
- package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-B1g7pgkH.js → timeline-definition-GMOUNBTQ-BRXdCMau.js} +1 -1
- package/payload/server/public/assets/timeline-definition-GMOUNBTQ-BRXdCMau.js.br +0 -0
- package/payload/server/public/assets/timeline-definition-GMOUNBTQ-BRXdCMau.js.gz +0 -0
- package/payload/server/public/assets/treeView-SZITEDCU-B-SYhqwK.js +1 -0
- package/payload/server/public/assets/treeView-SZITEDCU-B-SYhqwK.js.br +0 -0
- package/payload/server/public/assets/treemap-W4RFUUIX-DpZmFNM9.js +1 -0
- package/payload/server/public/assets/treemap-W4RFUUIX-DpZmFNM9.js.br +0 -0
- package/payload/server/public/assets/{triangle-alert-CpwrbdYq.js → triangle-alert-eLJHC_QJ.js} +1 -1
- package/payload/server/public/assets/triangle-alert-eLJHC_QJ.js.br +1 -0
- package/payload/server/public/assets/triangle-alert-eLJHC_QJ.js.gz +0 -0
- package/payload/server/public/assets/{useCopyFeedback-D01gSp36.js → useCopyFeedback-vPCmdOmY.js} +1 -1
- package/payload/server/public/assets/useCopyFeedback-vPCmdOmY.js.br +0 -0
- package/payload/server/public/assets/useCopyFeedback-vPCmdOmY.js.gz +0 -0
- package/payload/server/public/assets/useSubAccountSwitcher-DMr3DR5N.js +14 -0
- package/payload/server/public/assets/useSubAccountSwitcher-DMr3DR5N.js.br +0 -0
- package/payload/server/public/assets/useSubAccountSwitcher-DMr3DR5N.js.gz +0 -0
- package/payload/server/public/assets/useSubAccountSwitcher-DxuUS_C7.css +1 -0
- package/payload/server/public/assets/useSubAccountSwitcher-DxuUS_C7.css.br +0 -0
- package/payload/server/public/assets/useSubAccountSwitcher-DxuUS_C7.css.gz +0 -0
- package/payload/server/public/assets/{useVoiceRecorder-DiPgyDUy.js → useVoiceRecorder-D5bFDRqL.js} +2 -2
- package/payload/server/public/assets/useVoiceRecorder-D5bFDRqL.js.br +0 -0
- package/payload/server/public/assets/useVoiceRecorder-D5bFDRqL.js.gz +0 -0
- package/payload/server/public/assets/{vennDiagram-DHZGUBPP-D2ZjFfh4.js → vennDiagram-DHZGUBPP-8nc7NUVQ.js} +1 -1
- package/payload/server/public/assets/vennDiagram-DHZGUBPP-8nc7NUVQ.js.br +0 -0
- package/payload/server/public/assets/vennDiagram-DHZGUBPP-8nc7NUVQ.js.gz +0 -0
- package/payload/server/public/assets/wardley-RL74JXVD-D2FCCV4-.js +1 -0
- package/payload/server/public/assets/wardley-RL74JXVD-D2FCCV4-.js.br +0 -0
- package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-BFAhfkD8.js → wardleyDiagram-NUSXRM2D-Cjjiap8M.js} +1 -1
- package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-Cjjiap8M.js.br +0 -0
- package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-Cjjiap8M.js.gz +0 -0
- package/payload/server/public/assets/{wrench-C5SJreEu.js → wrench-sXisQXkf.js} +1 -1
- package/payload/server/public/assets/wrench-sXisQXkf.js.br +0 -0
- package/payload/server/public/assets/wrench-sXisQXkf.js.gz +0 -0
- package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-Dt94h2RQ.js → xychartDiagram-5P7HB3ND-DEzDNw_i.js} +1 -1
- package/payload/server/public/assets/xychartDiagram-5P7HB3ND-DEzDNw_i.js.br +0 -0
- package/payload/server/public/assets/xychartDiagram-5P7HB3ND-DEzDNw_i.js.gz +0 -0
- package/payload/server/public/browser.html +5 -4
- package/payload/server/public/calendar.html +7 -7
- package/payload/server/public/chat.html +14 -14
- package/payload/server/public/data.html +13 -13
- package/payload/server/public/graph.html +9 -9
- package/payload/server/public/index.html +17 -16
- package/payload/server/public/operator.html +16 -15
- package/payload/server/public/public.html +14 -14
- package/payload/server/public/routines.html +7 -7
- package/payload/server/public/skills.html +5 -5
- package/payload/server/public/tasks.html +6 -6
- package/payload/server/server.js +61 -73
- package/payload/server/public/assets/AdminLoginScreens-DSt9DYZZ.js +0 -1
- package/payload/server/public/assets/AdminLoginScreens-DSt9DYZZ.js.br +0 -0
- package/payload/server/public/assets/AdminLoginScreens-DSt9DYZZ.js.gz +0 -0
- package/payload/server/public/assets/AdminShell-MM3_yp3N.js +0 -2
- package/payload/server/public/assets/AdminShell-MM3_yp3N.js.br +0 -0
- package/payload/server/public/assets/AdminShell-MM3_yp3N.js.gz +0 -0
- package/payload/server/public/assets/activity-aVvbaVd4.js.br +0 -0
- package/payload/server/public/assets/activity-aVvbaVd4.js.gz +0 -0
- package/payload/server/public/assets/admin-B0lQnkH-.js +0 -1
- package/payload/server/public/assets/admin-B0lQnkH-.js.br +0 -0
- package/payload/server/public/assets/admin-B0lQnkH-.js.gz +0 -0
- package/payload/server/public/assets/agents-CrpVTPRG.js.br +0 -0
- package/payload/server/public/assets/agents-CrpVTPRG.js.gz +0 -0
- package/payload/server/public/assets/arc-DaudCnXg.js.br +0 -0
- package/payload/server/public/assets/arc-DaudCnXg.js.gz +0 -0
- package/payload/server/public/assets/architecture-YZFGNWBL-DPFsm5jD.js +0 -1
- package/payload/server/public/assets/architecture-YZFGNWBL-DPFsm5jD.js.br +0 -0
- package/payload/server/public/assets/architectureDiagram-Q4EWVU46-BEEC3s7i.js.br +0 -0
- package/payload/server/public/assets/architectureDiagram-Q4EWVU46-BEEC3s7i.js.gz +0 -0
- package/payload/server/public/assets/blockDiagram-DXYQGD6D-BIWyfb18.js.br +0 -0
- package/payload/server/public/assets/blockDiagram-DXYQGD6D-BIWyfb18.js.gz +0 -0
- package/payload/server/public/assets/browser-CYHUzTop.js +0 -1
- package/payload/server/public/assets/browser-CYHUzTop.js.br +0 -0
- package/payload/server/public/assets/browser-CYHUzTop.js.gz +0 -0
- package/payload/server/public/assets/c4Diagram-AHTNJAMY--h6oE2cv.js.br +0 -0
- package/payload/server/public/assets/c4Diagram-AHTNJAMY--h6oE2cv.js.gz +0 -0
- package/payload/server/public/assets/calendar-4IWQpwYv.js.br +0 -0
- package/payload/server/public/assets/calendar-4IWQpwYv.js.gz +0 -0
- package/payload/server/public/assets/channel-TwxCDSpK.js +0 -1
- package/payload/server/public/assets/channel-TwxCDSpK.js.br +0 -0
- package/payload/server/public/assets/chat-DmjZTqnV.js +0 -1
- package/payload/server/public/assets/chat-DmjZTqnV.js.br +0 -0
- package/payload/server/public/assets/chat-DmjZTqnV.js.gz +0 -0
- package/payload/server/public/assets/chevron-left-CIl-s3LZ.js +0 -1
- package/payload/server/public/assets/chevron-left-CIl-s3LZ.js.br +0 -0
- package/payload/server/public/assets/chevron-right-DpAi2BsF.js +0 -1
- package/payload/server/public/assets/chevron-right-DpAi2BsF.js.br +0 -0
- package/payload/server/public/assets/chunk-2KRD3SAO-BwEVlnxo.js.br +0 -0
- package/payload/server/public/assets/chunk-2KRD3SAO-BwEVlnxo.js.gz +0 -0
- package/payload/server/public/assets/chunk-336JU56O-DQddTATH.js.br +0 -0
- package/payload/server/public/assets/chunk-336JU56O-DQddTATH.js.gz +0 -0
- package/payload/server/public/assets/chunk-426QAEUC-BDC8wptW.js +0 -1
- package/payload/server/public/assets/chunk-426QAEUC-BDC8wptW.js.br +0 -0
- package/payload/server/public/assets/chunk-426QAEUC-BDC8wptW.js.gz +0 -0
- package/payload/server/public/assets/chunk-4BX2VUAB-C5p3xTC6.js.br +0 -0
- package/payload/server/public/assets/chunk-4BX2VUAB-C5p3xTC6.js.gz +0 -0
- package/payload/server/public/assets/chunk-4TB4RGXK-gClfNc1w.js.br +0 -0
- package/payload/server/public/assets/chunk-4TB4RGXK-gClfNc1w.js.gz +0 -0
- package/payload/server/public/assets/chunk-55IACEB6-DDU_m1ra.js.br +0 -0
- package/payload/server/public/assets/chunk-55IACEB6-DDU_m1ra.js.gz +0 -0
- package/payload/server/public/assets/chunk-5FUZZQ4R-CZ2jQWNR.js.br +0 -0
- package/payload/server/public/assets/chunk-5FUZZQ4R-CZ2jQWNR.js.gz +0 -0
- package/payload/server/public/assets/chunk-5PVQY5BW-kcZ5kfTg.js.br +0 -0
- package/payload/server/public/assets/chunk-5PVQY5BW-kcZ5kfTg.js.gz +0 -0
- package/payload/server/public/assets/chunk-67CJDMHE-9W0Qv0jm.js.br +0 -0
- package/payload/server/public/assets/chunk-67CJDMHE-9W0Qv0jm.js.gz +0 -0
- package/payload/server/public/assets/chunk-7N4EOEYR-B3gqydR3.js.br +0 -0
- package/payload/server/public/assets/chunk-7N4EOEYR-B3gqydR3.js.gz +0 -0
- package/payload/server/public/assets/chunk-AA7GKIK3-DW8a-2NK.js.br +0 -4
- package/payload/server/public/assets/chunk-AA7GKIK3-DW8a-2NK.js.gz +0 -0
- package/payload/server/public/assets/chunk-BSJP7CBP-DqXIO_5R.js.br +0 -0
- package/payload/server/public/assets/chunk-BSJP7CBP-DqXIO_5R.js.gz +0 -0
- package/payload/server/public/assets/chunk-CIAEETIT-BMJfgj2u.js.br +0 -0
- package/payload/server/public/assets/chunk-CIAEETIT-BMJfgj2u.js.gz +0 -0
- package/payload/server/public/assets/chunk-EDXVE4YY-BxdLPk0b.js.br +0 -0
- package/payload/server/public/assets/chunk-EDXVE4YY-BxdLPk0b.js.gz +0 -0
- package/payload/server/public/assets/chunk-ENJZ2VHE-Cfe2DCjQ.js.br +0 -0
- package/payload/server/public/assets/chunk-ENJZ2VHE-Cfe2DCjQ.js.gz +0 -0
- package/payload/server/public/assets/chunk-FMBD7UC4-CdPjwbtf.js.br +0 -0
- package/payload/server/public/assets/chunk-FMBD7UC4-CdPjwbtf.js.gz +0 -0
- package/payload/server/public/assets/chunk-FOC6F5B3-Dl6l1KAh.js.br +0 -0
- package/payload/server/public/assets/chunk-FOC6F5B3-Dl6l1KAh.js.gz +0 -0
- package/payload/server/public/assets/chunk-ICPOFSXX-PnsGrqtx.js.br +0 -0
- package/payload/server/public/assets/chunk-ICPOFSXX-PnsGrqtx.js.gz +0 -0
- package/payload/server/public/assets/chunk-K5T4RW27--g29_wjW.js.br +0 -0
- package/payload/server/public/assets/chunk-K5T4RW27--g29_wjW.js.gz +0 -0
- package/payload/server/public/assets/chunk-KGLVRYIC-CI77ENeO.js.br +0 -3
- package/payload/server/public/assets/chunk-KGLVRYIC-CI77ENeO.js.gz +0 -0
- package/payload/server/public/assets/chunk-LIHQZDEY-CE-XByg6.js.br +0 -0
- package/payload/server/public/assets/chunk-LIHQZDEY-CE-XByg6.js.gz +0 -0
- package/payload/server/public/assets/chunk-ORNJ4GCN-DkjJQQSm.js.br +0 -0
- package/payload/server/public/assets/chunk-ORNJ4GCN-DkjJQQSm.js.gz +0 -0
- package/payload/server/public/assets/chunk-OYMX7WX6-DhogFeD7.js.br +0 -0
- package/payload/server/public/assets/chunk-OYMX7WX6-DhogFeD7.js.gz +0 -0
- package/payload/server/public/assets/chunk-QZHKN3VN-DnqqL1de.js +0 -1
- package/payload/server/public/assets/chunk-QZHKN3VN-DnqqL1de.js.br +0 -0
- package/payload/server/public/assets/chunk-QZHKN3VN-DnqqL1de.js.gz +0 -0
- package/payload/server/public/assets/chunk-U2HBQHQK-CeaRXuiO.js.br +0 -0
- package/payload/server/public/assets/chunk-U2HBQHQK-CeaRXuiO.js.gz +0 -0
- package/payload/server/public/assets/chunk-X2U36JSP-BqxXeOqf.js.br +0 -0
- package/payload/server/public/assets/chunk-X2U36JSP-BqxXeOqf.js.gz +0 -0
- package/payload/server/public/assets/chunk-XPW4576I-DtqJwn2x.js.br +0 -0
- package/payload/server/public/assets/chunk-XPW4576I-DtqJwn2x.js.gz +0 -0
- package/payload/server/public/assets/chunk-YZCP3GAM-COBlEwQw.js.br +0 -0
- package/payload/server/public/assets/chunk-YZCP3GAM-COBlEwQw.js.gz +0 -0
- package/payload/server/public/assets/chunk-ZZ45TVLE-CcL088y6.js.br +0 -0
- package/payload/server/public/assets/chunk-ZZ45TVLE-CcL088y6.js.gz +0 -0
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-Bc3P4dpc.js +0 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-Bc3P4dpc.js.br +0 -0
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-Bc3P4dpc.js.gz +0 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DgEF_rR_.js +0 -1
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DgEF_rR_.js.br +0 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DgEF_rR_.js.gz +0 -0
- package/payload/server/public/assets/clock-CGuM9VRx.js +0 -1
- package/payload/server/public/assets/clock-CGuM9VRx.js.br +0 -0
- package/payload/server/public/assets/clone-B3vq32j7.js +0 -1
- package/payload/server/public/assets/cose-bilkent-S5V4N54A-kEHVkDNn.js.br +0 -0
- package/payload/server/public/assets/cose-bilkent-S5V4N54A-kEHVkDNn.js.gz +0 -0
- package/payload/server/public/assets/dagre-D2wUw1zC.js.br +0 -0
- package/payload/server/public/assets/dagre-D2wUw1zC.js.gz +0 -0
- package/payload/server/public/assets/dagre-KV5264BT-BWfTDwEs.js.br +0 -0
- package/payload/server/public/assets/dagre-KV5264BT-BWfTDwEs.js.gz +0 -0
- package/payload/server/public/assets/data-BpdFiZKH.js +0 -1
- package/payload/server/public/assets/data-BpdFiZKH.js.br +0 -2
- package/payload/server/public/assets/data-BpdFiZKH.js.gz +0 -0
- package/payload/server/public/assets/diagram-5BDNPKRD-Tl9dS8w0.js.br +0 -0
- package/payload/server/public/assets/diagram-5BDNPKRD-Tl9dS8w0.js.gz +0 -0
- package/payload/server/public/assets/diagram-G4DWMVQ6-CeSe6TMu.js.br +0 -0
- package/payload/server/public/assets/diagram-G4DWMVQ6-CeSe6TMu.js.gz +0 -0
- package/payload/server/public/assets/diagram-MMDJMWI5-DYBNJCmk.js.br +0 -0
- package/payload/server/public/assets/diagram-MMDJMWI5-DYBNJCmk.js.gz +0 -0
- package/payload/server/public/assets/diagram-TYMM5635-BmpUGltx.js.br +0 -0
- package/payload/server/public/assets/diagram-TYMM5635-BmpUGltx.js.gz +0 -0
- package/payload/server/public/assets/erDiagram-SMLLAGMA-DuwuNGqx.js.br +0 -0
- package/payload/server/public/assets/erDiagram-SMLLAGMA-DuwuNGqx.js.gz +0 -0
- package/payload/server/public/assets/file-download-DayBHhKS.js.br +0 -0
- package/payload/server/public/assets/file-download-DayBHhKS.js.gz +0 -0
- package/payload/server/public/assets/file-text-BSyhVH0m.js.br +0 -0
- package/payload/server/public/assets/file-text-BSyhVH0m.js.gz +0 -0
- package/payload/server/public/assets/flatten-Bu-b1uTY.js.br +0 -0
- package/payload/server/public/assets/flatten-Bu-b1uTY.js.gz +0 -0
- package/payload/server/public/assets/flowDiagram-DWJPFMVM-Bpp8P6Ba.js.br +0 -0
- package/payload/server/public/assets/flowDiagram-DWJPFMVM-Bpp8P6Ba.js.gz +0 -0
- package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-CE6ppjB4.js.br +0 -0
- package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-CE6ppjB4.js.gz +0 -0
- package/payload/server/public/assets/gitGraph-7Q5UKJZL-B0OUwOUx.js +0 -1
- package/payload/server/public/assets/gitGraph-7Q5UKJZL-B0OUwOUx.js.br +0 -0
- package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-BdK1GjPr.js.br +0 -0
- package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-BdK1GjPr.js.gz +0 -0
- package/payload/server/public/assets/graph-Bjv3Tc3B.js.br +0 -0
- package/payload/server/public/assets/graph-Bjv3Tc3B.js.gz +0 -0
- package/payload/server/public/assets/graph-labels-DegLKGdx.js.br +0 -0
- package/payload/server/public/assets/graph-labels-DegLKGdx.js.gz +0 -0
- package/payload/server/public/assets/graphlib-CHEXylyU.js.br +0 -0
- package/payload/server/public/assets/graphlib-CHEXylyU.js.gz +0 -0
- package/payload/server/public/assets/info-OMHHGYJF-C_8TwPDe.js +0 -1
- package/payload/server/public/assets/info-OMHHGYJF-C_8TwPDe.js.br +0 -0
- package/payload/server/public/assets/infoDiagram-42DDH7IO-msfwyvbV.js +0 -2
- package/payload/server/public/assets/infoDiagram-42DDH7IO-msfwyvbV.js.br +0 -0
- package/payload/server/public/assets/infoDiagram-42DDH7IO-msfwyvbV.js.gz +0 -0
- package/payload/server/public/assets/isEmpty-CjH0UASp.js.br +0 -0
- package/payload/server/public/assets/isEmpty-CjH0UASp.js.gz +0 -0
- package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-CgkVZ4-3.js.br +0 -0
- package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-CgkVZ4-3.js.gz +0 -0
- package/payload/server/public/assets/journeyDiagram-VCZTEJTY-ByUPv8q6.js.br +0 -0
- package/payload/server/public/assets/journeyDiagram-VCZTEJTY-ByUPv8q6.js.gz +0 -0
- package/payload/server/public/assets/kanban-definition-6JOO6SKY-CFinqhpu.js.br +0 -0
- package/payload/server/public/assets/kanban-definition-6JOO6SKY-CFinqhpu.js.gz +0 -0
- package/payload/server/public/assets/line-Y4ns5Ghi.js.br +0 -0
- package/payload/server/public/assets/line-Y4ns5Ghi.js.gz +0 -0
- package/payload/server/public/assets/linear-l39GooQ5.js.br +0 -0
- package/payload/server/public/assets/linear-l39GooQ5.js.gz +0 -0
- package/payload/server/public/assets/maximize-2-DJFG2EXJ.js.br +0 -0
- package/payload/server/public/assets/maximize-2-DJFG2EXJ.js.gz +0 -0
- package/payload/server/public/assets/mermaid-parser.core-5w0T1dRj.js.br +0 -0
- package/payload/server/public/assets/mermaid-parser.core-5w0T1dRj.js.gz +0 -0
- package/payload/server/public/assets/mermaid.core-DBADY5VW.js.br +0 -0
- package/payload/server/public/assets/mermaid.core-DBADY5VW.js.gz +0 -0
- package/payload/server/public/assets/mindmap-definition-QFDTVHPH-rHz37loq.js.br +0 -0
- package/payload/server/public/assets/mindmap-definition-QFDTVHPH-rHz37loq.js.gz +0 -0
- package/payload/server/public/assets/operator-Du9Ve_PR.js +0 -1
- package/payload/server/public/assets/operator-Du9Ve_PR.js.br +0 -0
- package/payload/server/public/assets/operator-Du9Ve_PR.js.gz +0 -0
- package/payload/server/public/assets/ordinal-D6D6WcTC.js.br +0 -0
- package/payload/server/public/assets/ordinal-D6D6WcTC.js.gz +0 -0
- package/payload/server/public/assets/packet-4T2RLAQJ-CCQdbIqO.js +0 -1
- package/payload/server/public/assets/packet-4T2RLAQJ-CCQdbIqO.js.br +0 -0
- package/payload/server/public/assets/page-DgHYxG3M.js +0 -1
- package/payload/server/public/assets/page-DgHYxG3M.js.br +0 -0
- package/payload/server/public/assets/page-DgHYxG3M.js.gz +0 -0
- package/payload/server/public/assets/page-qV1ypb6i.js +0 -32
- package/payload/server/public/assets/page-qV1ypb6i.js.br +0 -0
- package/payload/server/public/assets/page-qV1ypb6i.js.gz +0 -0
- package/payload/server/public/assets/pdf-render-BSgBp8Fr.js.br +0 -0
- package/payload/server/public/assets/pdf-render-BSgBp8Fr.js.gz +0 -0
- package/payload/server/public/assets/pie-ZZUOXDRM-Bdw3Iqs7.js +0 -1
- package/payload/server/public/assets/pie-ZZUOXDRM-Bdw3Iqs7.js.br +0 -0
- package/payload/server/public/assets/pieDiagram-DEJITSTG-as0e_DSH.js.br +0 -0
- package/payload/server/public/assets/pieDiagram-DEJITSTG-as0e_DSH.js.gz +0 -0
- package/payload/server/public/assets/public-CNVEM-Bx.js.br +0 -0
- package/payload/server/public/assets/public-CNVEM-Bx.js.gz +0 -0
- package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-B4t8HO9J.js.br +0 -0
- package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-B4t8HO9J.js.gz +0 -0
- package/payload/server/public/assets/radar-PYXPWWZC-D3FUdA3r.js +0 -1
- package/payload/server/public/assets/radar-PYXPWWZC-D3FUdA3r.js.br +0 -0
- package/payload/server/public/assets/reduce-BtXXK8Ma.js.br +0 -0
- package/payload/server/public/assets/reduce-BtXXK8Ma.js.gz +0 -0
- package/payload/server/public/assets/requirementDiagram-MS252O5E-yxh30zHX.js.br +0 -0
- package/payload/server/public/assets/requirementDiagram-MS252O5E-yxh30zHX.js.gz +0 -0
- package/payload/server/public/assets/rotate-ccw-DQCaky8_.js.br +0 -0
- package/payload/server/public/assets/rotate-ccw-DQCaky8_.js.gz +0 -0
- package/payload/server/public/assets/routines-DwK5FeLm.js.br +0 -0
- package/payload/server/public/assets/routines-DwK5FeLm.js.gz +0 -0
- package/payload/server/public/assets/sankeyDiagram-XADWPNL6-j-k9Wfty.js.br +0 -0
- package/payload/server/public/assets/sankeyDiagram-XADWPNL6-j-k9Wfty.js.gz +0 -0
- package/payload/server/public/assets/sequenceDiagram-FGHM5R23-DGLgcLhC.js.br +0 -0
- package/payload/server/public/assets/sequenceDiagram-FGHM5R23-DGLgcLhC.js.gz +0 -0
- package/payload/server/public/assets/skills-CosN3uA4.js.br +0 -0
- package/payload/server/public/assets/skills-CosN3uA4.js.gz +0 -0
- package/payload/server/public/assets/stateDiagram-FHFEXIEX-C9p1OUMI.js.br +0 -0
- package/payload/server/public/assets/stateDiagram-FHFEXIEX-C9p1OUMI.js.gz +0 -0
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Bf808Apk.js +0 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Bf808Apk.js.br +0 -0
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Bf808Apk.js.gz +0 -0
- package/payload/server/public/assets/tasks-f0QikHmw.js.br +0 -0
- package/payload/server/public/assets/tasks-f0QikHmw.js.gz +0 -0
- package/payload/server/public/assets/time-entry-format-DLTdS35_.js.br +0 -0
- package/payload/server/public/assets/time-entry-format-DLTdS35_.js.gz +0 -0
- package/payload/server/public/assets/timeline-definition-GMOUNBTQ-B1g7pgkH.js.br +0 -0
- package/payload/server/public/assets/timeline-definition-GMOUNBTQ-B1g7pgkH.js.gz +0 -0
- package/payload/server/public/assets/treeView-SZITEDCU-DetKw0D0.js +0 -1
- package/payload/server/public/assets/treeView-SZITEDCU-DetKw0D0.js.br +0 -0
- package/payload/server/public/assets/treemap-W4RFUUIX-zQkIANxW.js +0 -1
- package/payload/server/public/assets/treemap-W4RFUUIX-zQkIANxW.js.br +0 -0
- package/payload/server/public/assets/triangle-alert-CpwrbdYq.js.br +0 -3
- package/payload/server/public/assets/triangle-alert-CpwrbdYq.js.gz +0 -0
- package/payload/server/public/assets/useCopyFeedback-D01gSp36.js.br +0 -0
- package/payload/server/public/assets/useCopyFeedback-D01gSp36.js.gz +0 -0
- package/payload/server/public/assets/useSubAccountSwitcher-BRHYXwGO.js +0 -14
- package/payload/server/public/assets/useSubAccountSwitcher-BRHYXwGO.js.br +0 -0
- package/payload/server/public/assets/useSubAccountSwitcher-BRHYXwGO.js.gz +0 -0
- package/payload/server/public/assets/useSubAccountSwitcher-CJzJ9xV3.css +0 -1
- package/payload/server/public/assets/useSubAccountSwitcher-CJzJ9xV3.css.br +0 -0
- package/payload/server/public/assets/useSubAccountSwitcher-CJzJ9xV3.css.gz +0 -0
- package/payload/server/public/assets/useVoiceRecorder-DiPgyDUy.js.br +0 -0
- package/payload/server/public/assets/useVoiceRecorder-DiPgyDUy.js.gz +0 -0
- package/payload/server/public/assets/vennDiagram-DHZGUBPP-D2ZjFfh4.js.br +0 -0
- package/payload/server/public/assets/vennDiagram-DHZGUBPP-D2ZjFfh4.js.gz +0 -0
- package/payload/server/public/assets/wardley-RL74JXVD-DkQV3DvB.js +0 -1
- package/payload/server/public/assets/wardley-RL74JXVD-DkQV3DvB.js.br +0 -0
- package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-BFAhfkD8.js.br +0 -0
- package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-BFAhfkD8.js.gz +0 -0
- package/payload/server/public/assets/wrench-C5SJreEu.js.br +0 -1
- package/payload/server/public/assets/wrench-C5SJreEu.js.gz +0 -0
- package/payload/server/public/assets/xychartDiagram-5P7HB3ND-Dt94h2RQ.js.br +0 -0
- package/payload/server/public/assets/xychartDiagram-5P7HB3ND-Dt94h2RQ.js.gz +0 -0
- /package/payload/server/public/assets/{_baseFor-B12He5Rp.js → _baseFor-BApe6Tla.js} +0 -0
- /package/payload/server/public/assets/{_baseFor-B12He5Rp.js.br → _baseFor-BApe6Tla.js.br} +0 -0
- /package/payload/server/public/assets/{_baseFor-B12He5Rp.js.gz → _baseFor-BApe6Tla.js.gz} +0 -0
- /package/payload/server/public/assets/{array-DO1uCttT.js → array-eiH4WfvY.js} +0 -0
- /package/payload/server/public/assets/{array-DO1uCttT.js.br → array-eiH4WfvY.js.br} +0 -0
- /package/payload/server/public/assets/{cytoscape.esm-DFn2foqy.js → cytoscape.esm-BZ6NYo0w.js} +0 -0
- /package/payload/server/public/assets/{cytoscape.esm-DFn2foqy.js.br → cytoscape.esm-BZ6NYo0w.js.br} +0 -0
- /package/payload/server/public/assets/{cytoscape.esm-DFn2foqy.js.gz → cytoscape.esm-BZ6NYo0w.js.gz} +0 -0
- /package/payload/server/public/assets/{defaultLocale-ieI3yFoA.js → defaultLocale-DWHqsa6O.js} +0 -0
- /package/payload/server/public/assets/{defaultLocale-ieI3yFoA.js.br → defaultLocale-DWHqsa6O.js.br} +0 -0
- /package/payload/server/public/assets/{defaultLocale-ieI3yFoA.js.gz → defaultLocale-DWHqsa6O.js.gz} +0 -0
- /package/payload/server/public/assets/{dist-DlU7AEeD.js → dist-IoQuidkp.js} +0 -0
- /package/payload/server/public/assets/{dist-DlU7AEeD.js.br → dist-IoQuidkp.js.br} +0 -0
- /package/payload/server/public/assets/{dist-DlU7AEeD.js.gz → dist-IoQuidkp.js.gz} +0 -0
- /package/payload/server/public/assets/{init-BCRlEgNP.js → init-BdkYWjJJ.js} +0 -0
- /package/payload/server/public/assets/{init-BCRlEgNP.js.br → init-BdkYWjJJ.js.br} +0 -0
- /package/payload/server/public/assets/{init-BCRlEgNP.js.gz → init-BdkYWjJJ.js.gz} +0 -0
- /package/payload/server/public/assets/{katex-gkTaZgi6.js → katex-BCzoGtFh.js} +0 -0
- /package/payload/server/public/assets/{katex-gkTaZgi6.js.br → katex-BCzoGtFh.js.br} +0 -0
- /package/payload/server/public/assets/{katex-gkTaZgi6.js.gz → katex-BCzoGtFh.js.gz} +0 -0
- /package/payload/server/public/assets/{path-DTmzQFjQ.js → path-DY2qBuPM.js} +0 -0
- /package/payload/server/public/assets/{path-DTmzQFjQ.js.br → path-DY2qBuPM.js.br} +0 -0
- /package/payload/server/public/assets/{path-DTmzQFjQ.js.gz → path-DY2qBuPM.js.gz} +0 -0
- /package/payload/server/public/assets/{preload-helper-eAV8hweq.js → preload-helper-3YNEDsJZ.js} +0 -0
- /package/payload/server/public/assets/{preload-helper-eAV8hweq.js.br → preload-helper-3YNEDsJZ.js.br} +0 -0
- /package/payload/server/public/assets/{preload-helper-eAV8hweq.js.gz → preload-helper-3YNEDsJZ.js.gz} +0 -0
- /package/payload/server/public/assets/{rough.esm-BFJ-MgcB.js → rough.esm-ec8xsRC7.js} +0 -0
- /package/payload/server/public/assets/{rough.esm-BFJ-MgcB.js.br → rough.esm-ec8xsRC7.js.br} +0 -0
- /package/payload/server/public/assets/{rough.esm-BFJ-MgcB.js.gz → rough.esm-ec8xsRC7.js.gz} +0 -0
- /package/payload/server/public/assets/{src-9CNk4JU0.js → src-C-STKunZ.js} +0 -0
- /package/payload/server/public/assets/{src-9CNk4JU0.js.br → src-C-STKunZ.js.br} +0 -0
- /package/payload/server/public/assets/{src-9CNk4JU0.js.gz → src-C-STKunZ.js.gz} +0 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare const MCP_LOG_PREFIX = "mcp-";
|
|
2
|
+
/**
|
|
3
|
+
* Most files one key may fan out to. The key is a substring match, so a short
|
|
4
|
+
* key matches many names — the measured device dir holds 552 `mcp-*` files.
|
|
5
|
+
* A truncated result always names the total, so the cap is never silent.
|
|
6
|
+
*/
|
|
7
|
+
export declare const MCP_KEY_MATCH_CAP = 20;
|
|
8
|
+
/**
|
|
9
|
+
* Tail every `mcp-*.log` in `mcpLogDir` whose FILENAME contains `sessionKey`,
|
|
10
|
+
* up to `MCP_KEY_MATCH_CAP` files. An 8-character key prefix matches a
|
|
11
|
+
* filename carrying the full session id.
|
|
12
|
+
*/
|
|
13
|
+
export declare function readMcpLogsByKey(mcpLogDir: string, sessionKey: string, lines: number): string;
|
|
14
|
+
/** Tail the most recently modified `mcp-*.log` in `mcpLogDir`. */
|
|
15
|
+
export declare function readLatestMcpLog(mcpLogDir: string, lines: number): string;
|
|
16
|
+
//# sourceMappingURL=logs-read-mcp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs-read-mcp.d.ts","sourceRoot":"","sources":["../../src/tools/logs-read-mcp.ts"],"names":[],"mappings":"AAmBA,eAAO,MAAM,cAAc,SAAS,CAAC;AAErC;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAcpC;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAmB7F;AAED,kEAAkE;AAClE,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAazE"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* logs-read type=mcp — resolution and tail.
|
|
3
|
+
*
|
|
4
|
+
* The MCP stderr sink is written by `lib/mcp-spawn-tee` (src/index.ts:60-65)
|
|
5
|
+
* as `${LOG_DIR}/mcp-<server>-<sessionId>.log`, where that LOG_DIR is the
|
|
6
|
+
* session manager's `config.persistDir/logs` — `~/.<brand>/logs`, the admin
|
|
7
|
+
* MCP's CONFIG_DIR. It is NOT the per-account log dir, which is where
|
|
8
|
+
* logs-read looked until Task 2168.
|
|
9
|
+
*
|
|
10
|
+
* The session key lives in the FILENAME. No line inside the file carries it,
|
|
11
|
+
* so a content grep — the strategy every other per-session type uses —
|
|
12
|
+
* returns nothing here however the directory is resolved.
|
|
13
|
+
*
|
|
14
|
+
* Caller supplies the directory; this module never resolves one itself.
|
|
15
|
+
*/
|
|
16
|
+
import { execFileSync } from "node:child_process";
|
|
17
|
+
import { existsSync, readdirSync, statSync } from "node:fs";
|
|
18
|
+
import { resolve } from "node:path";
|
|
19
|
+
export const MCP_LOG_PREFIX = "mcp-";
|
|
20
|
+
/**
|
|
21
|
+
* Most files one key may fan out to. The key is a substring match, so a short
|
|
22
|
+
* key matches many names — the measured device dir holds 552 `mcp-*` files.
|
|
23
|
+
* A truncated result always names the total, so the cap is never silent.
|
|
24
|
+
*/
|
|
25
|
+
export const MCP_KEY_MATCH_CAP = 20;
|
|
26
|
+
function isMcpLog(file) {
|
|
27
|
+
return file.startsWith(MCP_LOG_PREFIX) && file.endsWith(".log");
|
|
28
|
+
}
|
|
29
|
+
function missingDir(mcpLogDir) {
|
|
30
|
+
return `No MCP logs on this install yet (resolved dir does not exist on disk): ${mcpLogDir}. MCP server stderr is teed there on the first plugin spawn.`;
|
|
31
|
+
}
|
|
32
|
+
function tail(filePath, lines) {
|
|
33
|
+
return execFileSync("tail", ["-n", String(lines), filePath], { timeout: 5000 }).toString();
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Tail every `mcp-*.log` in `mcpLogDir` whose FILENAME contains `sessionKey`,
|
|
37
|
+
* up to `MCP_KEY_MATCH_CAP` files. An 8-character key prefix matches a
|
|
38
|
+
* filename carrying the full session id.
|
|
39
|
+
*/
|
|
40
|
+
export function readMcpLogsByKey(mcpLogDir, sessionKey, lines) {
|
|
41
|
+
if (!existsSync(mcpLogDir))
|
|
42
|
+
return missingDir(mcpLogDir);
|
|
43
|
+
const matches = readdirSync(mcpLogDir)
|
|
44
|
+
.filter(f => isMcpLog(f) && f.includes(sessionKey))
|
|
45
|
+
.sort();
|
|
46
|
+
if (matches.length === 0) {
|
|
47
|
+
return `No ${MCP_LOG_PREFIX}*.log filename contains session key "${sessionKey}" (resolved dir: ${mcpLogDir}, prefix: ${MCP_LOG_PREFIX}). The key is matched against the FILENAME, not the file contents — MCP log lines carry no session key.`;
|
|
48
|
+
}
|
|
49
|
+
const shown = matches.slice(0, MCP_KEY_MATCH_CAP);
|
|
50
|
+
const header = matches.length > shown.length
|
|
51
|
+
? `# MCP logs for session key: ${sessionKey}\n${matches.length} filenames matched, showing the first ${shown.length} — narrow the key to see the rest.`
|
|
52
|
+
: `# MCP logs for session key: ${sessionKey}`;
|
|
53
|
+
const sections = shown.map(file => `## ${file}\n${tail(resolve(mcpLogDir, file), lines)}`);
|
|
54
|
+
return `${header}\n\n${sections.join("\n\n")}`;
|
|
55
|
+
}
|
|
56
|
+
/** Tail the most recently modified `mcp-*.log` in `mcpLogDir`. */
|
|
57
|
+
export function readLatestMcpLog(mcpLogDir, lines) {
|
|
58
|
+
if (!existsSync(mcpLogDir))
|
|
59
|
+
return missingDir(mcpLogDir);
|
|
60
|
+
const match = readdirSync(mcpLogDir)
|
|
61
|
+
.filter(isMcpLog)
|
|
62
|
+
.map(file => ({ file, mtime: statSync(resolve(mcpLogDir, file)).mtimeMs }))
|
|
63
|
+
.sort((a, b) => b.mtime - a.mtime)[0];
|
|
64
|
+
if (!match) {
|
|
65
|
+
return `No log file found for type 'mcp' (resolved dir: ${mcpLogDir}, prefix: ${MCP_LOG_PREFIX})`;
|
|
66
|
+
}
|
|
67
|
+
return `# ${match.file}\n\n${tail(resolve(mcpLogDir, match.file), lines)}`;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=logs-read-mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs-read-mcp.js","sourceRoot":"","sources":["../../src/tools/logs-read-mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: platform-architecture
|
|
3
3
|
description: Use when grounding any documented-surface claim about what SiteDesk 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:7106e5166b451f13c373e48b7eb6057846d8e385002c774fa6ba4db1b05aef6e
|
|
5
5
|
brand: sitedesk-code
|
|
6
6
|
product-name: SiteDesk
|
|
7
7
|
---
|
|
@@ -510,7 +510,8 @@ There is no per-conversation stream log that interleaves MCP stderr with agent e
|
|
|
510
510
|
|
|
511
511
|
**Retrieve MCP diagnostic lines for a conversation:**
|
|
512
512
|
|
|
513
|
-
- `logs-read { type: "mcp" }` → tails the most recent `mcp-<name>-*.log`
|
|
513
|
+
- `logs-read { type: "mcp" }` → tails the most recent `mcp-<name>-*.log` under `~/.<brand>/logs`, the platform config dir the tee writes to — not the account log dir, which holds no `mcp-*` at all.
|
|
514
|
+
- `logs-read { type: "mcp", sessionKey }` → tails every `mcp-*.log` whose **filename** carries that key, one section per server, up to 20 files; a truncated reply names how many matched so the cap is never silent. An 8-character key prefix matches the full session id in the name. The key is never matched against file contents, because MCP log lines carry no session key.
|
|
514
515
|
|
|
515
516
|
## Failure-path observability contract
|
|
516
517
|
|
|
@@ -3799,6 +3800,23 @@ pass's summary line, which is what makes the absence of a per-account line
|
|
|
3799
3800
|
readable as "clean" rather than "never audited" — grep the summary line, not the
|
|
3800
3801
|
per-account one, to confirm the check is running.
|
|
3801
3802
|
|
|
3803
|
+
**An unregistered file-write fence is the same shape of failure.** The
|
|
3804
|
+
account-dir path guard refuses a file edit whose resolved path lands inside
|
|
3805
|
+
another account's directory, for every session including a house-scoped one, and
|
|
3806
|
+
the Bash snapshot pair watches the account's own layout. All of them live in the
|
|
3807
|
+
account's `.claude/settings.json`, and a hook that is not registered there runs
|
|
3808
|
+
never and emits nothing, so the silence reads identical to a clean account. The
|
|
3809
|
+
same pass therefore checks the five registrations per account and reports any
|
|
3810
|
+
absence as
|
|
3811
|
+
`[fs-reconcile] op=hook-registration account=<id8> missing=<matcher>:<hook>,…`,
|
|
3812
|
+
with `hooks-missing=0 hooks-unaudited=0` on the summary line as the per-cycle
|
|
3813
|
+
proof the fence is wired everywhere. An account whose settings cannot be read
|
|
3814
|
+
counts as unaudited rather than clean, so an install where none of them can be
|
|
3815
|
+
read never reports itself as fenced. The refusal itself is agent-facing and lands
|
|
3816
|
+
in the session's own child log as
|
|
3817
|
+
`[fs-guard] blocked path=<abs> reason=cross-account target=<id8>`, not in
|
|
3818
|
+
`server.log`.
|
|
3819
|
+
|
|
3802
3820
|
### Graph
|
|
3803
3821
|
|
|
3804
3822
|
| Mount | Purpose |
|
|
@@ -4024,7 +4042,21 @@ paint to a canvas, and the operator's clicks, scrolling and typing leave as
|
|
|
4024
4042
|
`Input.dispatch*`. Interaction therefore lands on page coordinates rather than
|
|
4025
4043
|
screen pixels, and the view is one tab chosen from a strip rather than the whole
|
|
4026
4044
|
X display. `VncSurface` and `/vnc-viewer.html` still exist and still work, but
|
|
4027
|
-
nothing
|
|
4045
|
+
nothing reaches them, and deleting that stack is separate work.
|
|
4046
|
+
|
|
4047
|
+
**The Claude sign-in screen shows the same surface.** `AuthScreen` used to frame
|
|
4048
|
+
`/vnc-viewer.html` so the operator could complete the OAuth flow by looking at
|
|
4049
|
+
the browser on the X display; it now mounts `CdpScreencastSurface` too. Virtual
|
|
4050
|
+
mode runs Chromium headless (`--headless=new`, no `DISPLAY`), and a headless
|
|
4051
|
+
Chromium does not serve the ProcessSingleton socket — so the old mechanism, in
|
|
4052
|
+
which `claude auth login` exec'd `$BROWSER <url>` and a second Chromium handed
|
|
4053
|
+
the URL to the running instance, aborts with exit 21 and never opens the page.
|
|
4054
|
+
The wrapper `writeChromiumWrapper` generates therefore hands its URL to the
|
|
4055
|
+
running browser over CDP (`PUT /json/new`) instead of launching anything. Two
|
|
4056
|
+
details are load-bearing: the URL is percent-encoded into the query string,
|
|
4057
|
+
because that endpoint truncates a raw URL at its first `&`, and the id of the
|
|
4058
|
+
created target is recorded so the sign-in poll can tell the viewer which tab to
|
|
4059
|
+
show rather than leaving it on whichever tab CDP lists first.
|
|
4028
4060
|
|
|
4029
4061
|
The transport is `/cdp-screencast` on the dashboard's own host and port, claimed
|
|
4030
4062
|
by the edge listener before its `forwardUpgrade` catch-all. It is gated by
|
|
@@ -4384,6 +4416,32 @@ mounted (the greeting panel). `fit=false` or `handles=` disagreeing with
|
|
|
4384
4416
|
`governed=` is the failure. A completed drag logs `[admin-ui] webchat-resize
|
|
4385
4417
|
px=<final>`; a bare click logs nothing.
|
|
4386
4418
|
|
|
4419
|
+
**All four resize handles draw one pill.** The `/chat` column pills,
|
|
4420
|
+
the composer grip, and the sidebar and artefact splitters each paint a 3px-thick,
|
|
4421
|
+
48px-long rounded pill (32px long on the horizontal composer grip) in
|
|
4422
|
+
`--text-tertiary`, at half strength when idle and full strength on hover. Every
|
|
4423
|
+
box keeps its old size — 8px wide for the three vertical surfaces — so the pill
|
|
4424
|
+
got thinner and the grab target did not. Thickness and length come from
|
|
4425
|
+
`--resize-grip-thickness` / `--resize-grip-length`; the colour is read as
|
|
4426
|
+
`var(--text-tertiary)` on each pill rather than through an alias, because a
|
|
4427
|
+
`var()` inside a custom property is substituted on the element that DECLARES it,
|
|
4428
|
+
which would freeze the colour at the base `#9A9A9A` instead of the surface's own
|
|
4429
|
+
value (measured inside `.admin-shell`: `rgb(154,154,154)` through an alias,
|
|
4430
|
+
`rgb(138,133,122)` direct). A pill that never paints emits no event and does not
|
|
4431
|
+
reproduce on a re-open, and the measure audit above counts elements rather than
|
|
4432
|
+
pixels, so the standing check is `[admin-ui] op=resize-grip-audit
|
|
4433
|
+
surface=<column-left|column-right|sidebar> thicknessPx= lengthPx= color= opacity=
|
|
4434
|
+
boxPx= painted=`, emitted for the two column pills on mount and on every
|
|
4435
|
+
re-clamp, and for the sidebar splitter once per mount. `opacity=` is the strength
|
|
4436
|
+
the operator actually sees: the column pills carry it on the box and the two
|
|
4437
|
+
splitters carry it on the pill, and the line multiplies both, so a pill hidden at
|
|
4438
|
+
either level reports `opacity=0`.
|
|
4439
|
+
`painted=false` or `thicknessPx=0` means an invisible handle; `thicknessPx=8`
|
|
4440
|
+
means the box is painting and the pill rule never applied; a missing line for a
|
|
4441
|
+
surface that should be mounted is itself the alarm. `painted=false
|
|
4442
|
+
source=unavailable` is the expected reading wherever pseudo-element styles are
|
|
4443
|
+
not reported (the jsdom test environment), never a real zero.
|
|
4444
|
+
|
|
4387
4445
|
## Health vs version
|
|
4388
4446
|
|
|
4389
4447
|
Two endpoints, two surfaces, two restart-survival roles:
|
|
@@ -5606,7 +5664,7 @@ The logs will show which service failed to start and why. Common causes:
|
|
|
5606
5664
|
Each installed brand runs two per-brand `--user` systemd units (earlier platform fixes + — unit filenames are prefixed with the brand's `hostname` so two brands on the same device never share a unit file):
|
|
5607
5665
|
|
|
5608
5666
|
- `{hostname}.service` — the admin + public HTTP server on `127.0.0.1:19201` (public port + 1). Restarted by the upgrade flow; short downtime is expected during steps 8→11 of an upgrade. An earlier fix: the unit carries two port env vars — `PORT=<public>` (canonical public port, read by the upgrade detector) and `MAXY_UI_INTERNAL_PORT=<public+1>` (the port maxy-ui actually binds).
|
|
5609
|
-
- `{hostname}-edge.service` — the always-on public listener on the configured port (default 19200). Reverse-proxies HTTP to the main brand service and handles `/websockify` (VNC) WebSocket upgrades locally. An earlier fix: also hosts `/api/admin/actions/*` and `/api/admin/version*` — the Software Update modal's own routes — so the log stream survives the brand service's restart window. Does NOT restart during an upgrade — the browser WebSocket stays connected by construction. The operator views
|
|
5667
|
+
- `{hostname}-edge.service` — the always-on public listener on the configured port (default 19200). Reverse-proxies HTTP to the main brand service and handles `/websockify` (VNC) WebSocket upgrades locally. An earlier fix: also hosts `/api/admin/actions/*` and `/api/admin/version*` — the Software Update modal's own routes — so the log stream survives the brand service's restart window. Does NOT restart during an upgrade — the browser WebSocket stays connected by construction. The operator views the device's Chromium in the admin UI via the standalone `/browser` page (peer to `/graph` and `/data`) and on the Claude sign-in screen; both render CDP screencast frames over `/cdp-screencast`, not the framebuffer. Virtual-mode Chromium is headless, so nothing renders onto the X display and the `/websockify` upgrade has no remaining consumer; deleting that stack is separate work.
|
|
5610
5668
|
|
|
5611
5669
|
Upgrade and Cloudflare setup run as detached actions: `systemd-run --user` transient units per invocation with stdout+stderr persisted to `~/.maxy/logs/actions/<actionId>.log` and streamed to the UI via SSE. No boot-time service file exists for these.
|
|
5612
5670
|
|
|
@@ -9,6 +9,13 @@ Invoked by the admin agent directly.
|
|
|
9
9
|
|
|
10
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
11
|
|
|
12
|
+
## 2026-07-30 (0.1.528)
|
|
13
|
+
|
|
14
|
+
- Where two or more accounts share one device, the assistant can no longer edit or write files belonging to a different account. Every account is now checked for that protection being in place.
|
|
15
|
+
- Your account now has a designated address that outbound mail is sent from, so asking to send an email no longer gets refused for want of knowing which address to use. The mailbox status tells you which address is designated, or that none is.
|
|
16
|
+
- Saving a draft now tells you exactly which parts of your signature were added, and a signature stored as formatted text now actually appears on the message instead of being silently dropped.
|
|
17
|
+
- The remote browser now runs the browser itself rather than sharing a desktop screen, which means signing in to Claude inside it works. The drag handles for resizing panels are thinner and lighter, matching the reference design.
|
|
18
|
+
|
|
12
19
|
## 2026-07-30 (0.1.527)
|
|
13
20
|
|
|
14
21
|
- The remote browser page now shows a live picture of the browser you can click and type into directly, replacing the old screen-sharing view.
|
|
@@ -573,6 +573,23 @@ pass's summary line, which is what makes the absence of a per-account line
|
|
|
573
573
|
readable as "clean" rather than "never audited" — grep the summary line, not the
|
|
574
574
|
per-account one, to confirm the check is running.
|
|
575
575
|
|
|
576
|
+
**An unregistered file-write fence is the same shape of failure.** The
|
|
577
|
+
account-dir path guard refuses a file edit whose resolved path lands inside
|
|
578
|
+
another account's directory, for every session including a house-scoped one, and
|
|
579
|
+
the Bash snapshot pair watches the account's own layout. All of them live in the
|
|
580
|
+
account's `.claude/settings.json`, and a hook that is not registered there runs
|
|
581
|
+
never and emits nothing, so the silence reads identical to a clean account. The
|
|
582
|
+
same pass therefore checks the five registrations per account and reports any
|
|
583
|
+
absence as
|
|
584
|
+
`[fs-reconcile] op=hook-registration account=<id8> missing=<matcher>:<hook>,…`,
|
|
585
|
+
with `hooks-missing=0 hooks-unaudited=0` on the summary line as the per-cycle
|
|
586
|
+
proof the fence is wired everywhere. An account whose settings cannot be read
|
|
587
|
+
counts as unaudited rather than clean, so an install where none of them can be
|
|
588
|
+
read never reports itself as fenced. The refusal itself is agent-facing and lands
|
|
589
|
+
in the session's own child log as
|
|
590
|
+
`[fs-guard] blocked path=<abs> reason=cross-account target=<id8>`, not in
|
|
591
|
+
`server.log`.
|
|
592
|
+
|
|
576
593
|
### Graph
|
|
577
594
|
|
|
578
595
|
| Mount | Purpose |
|
|
@@ -798,7 +815,21 @@ paint to a canvas, and the operator's clicks, scrolling and typing leave as
|
|
|
798
815
|
`Input.dispatch*`. Interaction therefore lands on page coordinates rather than
|
|
799
816
|
screen pixels, and the view is one tab chosen from a strip rather than the whole
|
|
800
817
|
X display. `VncSurface` and `/vnc-viewer.html` still exist and still work, but
|
|
801
|
-
nothing
|
|
818
|
+
nothing reaches them, and deleting that stack is separate work.
|
|
819
|
+
|
|
820
|
+
**The Claude sign-in screen shows the same surface.** `AuthScreen` used to frame
|
|
821
|
+
`/vnc-viewer.html` so the operator could complete the OAuth flow by looking at
|
|
822
|
+
the browser on the X display; it now mounts `CdpScreencastSurface` too. Virtual
|
|
823
|
+
mode runs Chromium headless (`--headless=new`, no `DISPLAY`), and a headless
|
|
824
|
+
Chromium does not serve the ProcessSingleton socket — so the old mechanism, in
|
|
825
|
+
which `claude auth login` exec'd `$BROWSER <url>` and a second Chromium handed
|
|
826
|
+
the URL to the running instance, aborts with exit 21 and never opens the page.
|
|
827
|
+
The wrapper `writeChromiumWrapper` generates therefore hands its URL to the
|
|
828
|
+
running browser over CDP (`PUT /json/new`) instead of launching anything. Two
|
|
829
|
+
details are load-bearing: the URL is percent-encoded into the query string,
|
|
830
|
+
because that endpoint truncates a raw URL at its first `&`, and the id of the
|
|
831
|
+
created target is recorded so the sign-in poll can tell the viewer which tab to
|
|
832
|
+
show rather than leaving it on whichever tab CDP lists first.
|
|
802
833
|
|
|
803
834
|
The transport is `/cdp-screencast` on the dashboard's own host and port, claimed
|
|
804
835
|
by the edge listener before its `forwardUpgrade` catch-all. It is gated by
|
|
@@ -1158,6 +1189,32 @@ mounted (the greeting panel). `fit=false` or `handles=` disagreeing with
|
|
|
1158
1189
|
`governed=` is the failure. A completed drag logs `[admin-ui] webchat-resize
|
|
1159
1190
|
px=<final>`; a bare click logs nothing.
|
|
1160
1191
|
|
|
1192
|
+
**All four resize handles draw one pill.** The `/chat` column pills,
|
|
1193
|
+
the composer grip, and the sidebar and artefact splitters each paint a 3px-thick,
|
|
1194
|
+
48px-long rounded pill (32px long on the horizontal composer grip) in
|
|
1195
|
+
`--text-tertiary`, at half strength when idle and full strength on hover. Every
|
|
1196
|
+
box keeps its old size — 8px wide for the three vertical surfaces — so the pill
|
|
1197
|
+
got thinner and the grab target did not. Thickness and length come from
|
|
1198
|
+
`--resize-grip-thickness` / `--resize-grip-length`; the colour is read as
|
|
1199
|
+
`var(--text-tertiary)` on each pill rather than through an alias, because a
|
|
1200
|
+
`var()` inside a custom property is substituted on the element that DECLARES it,
|
|
1201
|
+
which would freeze the colour at the base `#9A9A9A` instead of the surface's own
|
|
1202
|
+
value (measured inside `.admin-shell`: `rgb(154,154,154)` through an alias,
|
|
1203
|
+
`rgb(138,133,122)` direct). A pill that never paints emits no event and does not
|
|
1204
|
+
reproduce on a re-open, and the measure audit above counts elements rather than
|
|
1205
|
+
pixels, so the standing check is `[admin-ui] op=resize-grip-audit
|
|
1206
|
+
surface=<column-left|column-right|sidebar> thicknessPx= lengthPx= color= opacity=
|
|
1207
|
+
boxPx= painted=`, emitted for the two column pills on mount and on every
|
|
1208
|
+
re-clamp, and for the sidebar splitter once per mount. `opacity=` is the strength
|
|
1209
|
+
the operator actually sees: the column pills carry it on the box and the two
|
|
1210
|
+
splitters carry it on the pill, and the line multiplies both, so a pill hidden at
|
|
1211
|
+
either level reports `opacity=0`.
|
|
1212
|
+
`painted=false` or `thicknessPx=0` means an invisible handle; `thicknessPx=8`
|
|
1213
|
+
means the box is painting and the pill rule never applied; a missing line for a
|
|
1214
|
+
surface that should be mounted is itself the alarm. `painted=false
|
|
1215
|
+
source=unavailable` is the expected reading wherever pseudo-element styles are
|
|
1216
|
+
not reported (the jsdom test environment), never a real zero.
|
|
1217
|
+
|
|
1161
1218
|
## Health vs version
|
|
1162
1219
|
|
|
1163
1220
|
Two endpoints, two surfaces, two restart-survival roles:
|
|
@@ -201,7 +201,7 @@ The logs will show which service failed to start and why. Common causes:
|
|
|
201
201
|
Each installed brand runs two per-brand `--user` systemd units (earlier platform fixes + — unit filenames are prefixed with the brand's `hostname` so two brands on the same device never share a unit file):
|
|
202
202
|
|
|
203
203
|
- `{hostname}.service` — the admin + public HTTP server on `127.0.0.1:19201` (public port + 1). Restarted by the upgrade flow; short downtime is expected during steps 8→11 of an upgrade. An earlier fix: the unit carries two port env vars — `PORT=<public>` (canonical public port, read by the upgrade detector) and `MAXY_UI_INTERNAL_PORT=<public+1>` (the port maxy-ui actually binds).
|
|
204
|
-
- `{hostname}-edge.service` — the always-on public listener on the configured port (default 19200). Reverse-proxies HTTP to the main brand service and handles `/websockify` (VNC) WebSocket upgrades locally. An earlier fix: also hosts `/api/admin/actions/*` and `/api/admin/version*` — the Software Update modal's own routes — so the log stream survives the brand service's restart window. Does NOT restart during an upgrade — the browser WebSocket stays connected by construction. The operator views
|
|
204
|
+
- `{hostname}-edge.service` — the always-on public listener on the configured port (default 19200). Reverse-proxies HTTP to the main brand service and handles `/websockify` (VNC) WebSocket upgrades locally. An earlier fix: also hosts `/api/admin/actions/*` and `/api/admin/version*` — the Software Update modal's own routes — so the log stream survives the brand service's restart window. Does NOT restart during an upgrade — the browser WebSocket stays connected by construction. The operator views the device's Chromium in the admin UI via the standalone `/browser` page (peer to `/graph` and `/data`) and on the Claude sign-in screen; both render CDP screencast frames over `/cdp-screencast`, not the framebuffer. Virtual-mode Chromium is headless, so nothing renders onto the X display and the `/websockify` upgrade has no remaining consumer; deleting that stack is separate work.
|
|
205
205
|
|
|
206
206
|
Upgrade and Cloudflare setup run as detached actions: `systemd-run --user` transient units per invocation with stdout+stderr persisted to `~/.maxy/logs/actions/<actionId>.log` and streamed to the UI via SSE. No boot-time service file exists for these.
|
|
207
207
|
|
|
@@ -186,7 +186,8 @@ There is no per-conversation stream log that interleaves MCP stderr with agent e
|
|
|
186
186
|
|
|
187
187
|
**Retrieve MCP diagnostic lines for a conversation:**
|
|
188
188
|
|
|
189
|
-
- `logs-read { type: "mcp" }` → tails the most recent `mcp-<name>-*.log`
|
|
189
|
+
- `logs-read { type: "mcp" }` → tails the most recent `mcp-<name>-*.log` under `~/.<brand>/logs`, the platform config dir the tee writes to — not the account log dir, which holds no `mcp-*` at all.
|
|
190
|
+
- `logs-read { type: "mcp", sessionKey }` → tails every `mcp-*.log` whose **filename** carries that key, one section per server, up to 20 files; a truncated reply names how many matched so the cap is never silent. An 8-character key prefix matches the full session id in the name. The key is never matched against file contents, because MCP log lines carry no session key.
|
|
190
191
|
|
|
191
192
|
## Failure-path observability contract
|
|
192
193
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "email",
|
|
3
|
-
"description": "Email — one or more dedicated email mailboxes per account, each addressable by a `mailbox` selector. Retrieval: email-graph-query for stored email-thread history as :ConversationArchive {source:'email'} with :Section chunks (recall, search, 'threads about X', 'what did Y send?'); email-read / email-search for live IMAP inbox previews (with best-effort per-archive section hints from the graph); email-fetch-body for the COMPLETE decoded body of one message (by uid or message_id) when a preview is not enough; email-fetch-attachment for the extracted TEXT of one attachment (PDF via pdftotext, text/* by decode) when data sits inside a file rather than the body. Ingestion (operator-initiated, human-in-the-loop): email-fetch lists new messages, email-ingest writes the operator-approved subset via the conversation-archive pipeline. Sending: email-send (new), email-reply (threaded — resolves the original via IMAP Message-ID search), email-draft (compose to the mailbox Drafts folder, unsent, for operator review; pass messageId for a threaded draft-reply), email-draft-edit (revise a stored draft, located by its Drafts UID or, when Gmail has renumbered it, its draft Message-ID), email-draft-send (dispatch a stored draft by Drafts UID, then remove it), email-draft-list (read the Drafts folder back and confirm what is actually in it — the only tool that can verify a draft's presence). Deleting: email-delete (move named UIDs from email-read/email-search to the mailbox Trash — recoverable, never an expunge). Config: email-provider-info (pre-password host + app-password lookup from an address alone), email-setup, email-signature-set (install the signature every email-draft then appends automatically — never hand-write a signature into a draft body), email-status, email-otp-extract.",
|
|
3
|
+
"description": "Email — one or more dedicated email mailboxes per account, each addressable by a `mailbox` selector. Retrieval: email-graph-query for stored email-thread history as :ConversationArchive {source:'email'} with :Section chunks (recall, search, 'threads about X', 'what did Y send?'); email-read / email-search for live IMAP inbox previews (with best-effort per-archive section hints from the graph); email-fetch-body for the COMPLETE decoded body of one message (by uid or message_id) when a preview is not enough; email-fetch-attachment for the extracted TEXT of one attachment (PDF via pdftotext, text/* by decode) when data sits inside a file rather than the body. Ingestion (operator-initiated, human-in-the-loop): email-fetch lists new messages, email-ingest writes the operator-approved subset via the conversation-archive pipeline. Sending: email-send (new), email-reply (threaded — resolves the original via IMAP Message-ID search), email-draft (compose to the mailbox Drafts folder, unsent, for operator review; pass messageId for a threaded draft-reply), email-draft-edit (revise a stored draft, located by its Drafts UID or, when Gmail has renumbered it, its draft Message-ID), email-draft-send (dispatch a stored draft by Drafts UID, then remove it), email-draft-list (read the Drafts folder back and confirm what is actually in it — the only tool that can verify a draft's presence). Deleting: email-delete (move named UIDs from email-read/email-search to the mailbox Trash — recoverable, never an expunge). Config: email-provider-info (pre-password host + app-password lookup from an address alone), email-setup, email-signature-set (install the signature every email-draft then appends automatically — never hand-write a signature into a draft body), email-sending-identity-set (designate which attached mailbox this account sends from, so a send or draft that names no mailbox resolves it from the account instead of being refused), email-status, email-otp-extract.",
|
|
4
4
|
"version": "0.1.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Rubytech LLC"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: email
|
|
3
|
-
description: "Email — one or more dedicated email mailboxes per account, each addressable by a `mailbox` selector. Retrieval: email-graph-query for stored email-thread history as :ConversationArchive {source:'email'} with :Section chunks (recall, search, 'threads about X', 'what did Y send?'); email-read / email-search for live IMAP inbox previews (with best-effort per-archive section hints from the graph); email-fetch-body for the COMPLETE decoded body of one message (by uid or message_id) when a preview is not enough; email-fetch-attachment for the extracted TEXT of one attachment (PDF via pdftotext, text/* by decode) when data sits inside a file rather than the body. Ingestion (operator-initiated, human-in-the-loop): email-fetch lists new messages, email-ingest writes the operator-approved subset via the conversation-archive pipeline. Sending: email-send (new), email-reply (threaded — resolves the original via IMAP Message-ID search), email-draft (compose to the mailbox Drafts folder, unsent, for operator review; pass messageId for a threaded draft-reply), email-draft-edit (revise a stored draft, located by its Drafts UID or, when Gmail has renumbered it, its draft Message-ID), email-draft-send (dispatch a stored draft by Drafts UID, then remove it), email-draft-list (read the Drafts folder back and confirm what is actually in it — the only tool that can verify a draft's presence). Deleting: email-delete (move named UIDs from email-read/email-search to the mailbox Trash — recoverable, never an expunge). Config: email-provider-info (pre-password host + app-password lookup from an address alone), email-setup, email-signature-set (install the signature every email-draft then appends automatically — never hand-write a signature into a draft body), email-status, email-otp-extract."
|
|
3
|
+
description: "Email — one or more dedicated email mailboxes per account, each addressable by a `mailbox` selector. Retrieval: email-graph-query for stored email-thread history as :ConversationArchive {source:'email'} with :Section chunks (recall, search, 'threads about X', 'what did Y send?'); email-read / email-search for live IMAP inbox previews (with best-effort per-archive section hints from the graph); email-fetch-body for the COMPLETE decoded body of one message (by uid or message_id) when a preview is not enough; email-fetch-attachment for the extracted TEXT of one attachment (PDF via pdftotext, text/* by decode) when data sits inside a file rather than the body. Ingestion (operator-initiated, human-in-the-loop): email-fetch lists new messages, email-ingest writes the operator-approved subset via the conversation-archive pipeline. Sending: email-send (new), email-reply (threaded — resolves the original via IMAP Message-ID search), email-draft (compose to the mailbox Drafts folder, unsent, for operator review; pass messageId for a threaded draft-reply), email-draft-edit (revise a stored draft, located by its Drafts UID or, when Gmail has renumbered it, its draft Message-ID), email-draft-send (dispatch a stored draft by Drafts UID, then remove it), email-draft-list (read the Drafts folder back and confirm what is actually in it — the only tool that can verify a draft's presence). Deleting: email-delete (move named UIDs from email-read/email-search to the mailbox Trash — recoverable, never an expunge). Config: email-provider-info (pre-password host + app-password lookup from an address alone), email-setup, email-signature-set (install the signature every email-draft then appends automatically — never hand-write a signature into a draft body), email-sending-identity-set (designate which attached mailbox this account sends from, so a send or draft that names no mailbox resolves it from the account instead of being refused), email-status, email-otp-extract."
|
|
4
4
|
tools:
|
|
5
5
|
- name: email-provider-info
|
|
6
6
|
publicAllowlist: false
|
|
@@ -14,6 +14,10 @@ tools:
|
|
|
14
14
|
publicAllowlist: false
|
|
15
15
|
adminAllowlist: false
|
|
16
16
|
riskClass: write_local
|
|
17
|
+
- name: email-sending-identity-set
|
|
18
|
+
publicAllowlist: false
|
|
19
|
+
adminAllowlist: false
|
|
20
|
+
riskClass: write_local
|
|
17
21
|
- name: email-read
|
|
18
22
|
publicAllowlist: false
|
|
19
23
|
adminAllowlist: false
|
|
@@ -106,13 +110,14 @@ Manages the agent's own dedicated email account — IMAP for reading, SMTP for s
|
|
|
106
110
|
|
|
107
111
|
**Login vs alias — the default recipient set.** A config carries two addresses. `email` is the IMAP login: the address you authenticate as, and an address this mailbox owns. `agentAddress` is an *additional* alias to surface (often a per-agent address on a shared catch-all mailbox). When they differ, `email-read`, `email-search`, `email-otp-extract`, and `email-fetch` default to surfacing mail whose **To or Cc** carries **either** address — not the alias alone — because replies commonly arrive at the login address, and a reply or multi-party thread routinely Cc's the alias rather than To'ing it (a proposal sent from `info@` is answered to `info@`, not the `maxy@` alias; a thread copies `maxy@` on Cc). When no distinct alias is configured, no recipient filter is applied. Pass an explicit `to=` to narrow to a single address. Whenever the default filter hides messages from the fetched window, `email-read`/`email-search` append a `Recipient filter: kept N, hid M (to ∈ {…}); pass to="…" to change.` line — including when every message was hidden — so "I can't see it" is never indistinguishable from "it isn't there". `email-fetch` has no tool-output filter line; its kept-vs-hidden split is recorded in the stderr `diag("fetchSinceUid", "filter applied", …)` log instead.
|
|
108
112
|
|
|
109
|
-
**Multiple mailboxes.** An account holds any number of mailboxes at once. Each is its own `:EmailAccount` node keyed by `(accountId, email)`, and `email-setup` adds one without touching the others (no destructive re-point to act on a second inbox). Every operational tool takes an optional `mailbox` argument naming which configured mailbox to act on. Resolution order: the named mailbox if given; the single configured mailbox when only one exists (so single-mailbox installs pass nothing); otherwise the call is refused with a line listing the stored mailbox identities
|
|
113
|
+
**Multiple mailboxes.** An account holds any number of mailboxes at once. Each is its own `:EmailAccount` node keyed by `(accountId, email)`, and `email-setup` adds one without touching the others (no destructive re-point to act on a second inbox). Every operational tool takes an optional `mailbox` argument naming which configured mailbox to act on. Resolution order: the named mailbox if given; the single configured mailbox when only one exists (so single-mailbox installs pass nothing); the mailbox designated as the account's **sending identity** when two or more exist and none was named; otherwise the call is refused with a line listing the stored mailbox identities and naming `email-sending-identity-set`, so the account is given an answer rather than the caller guessing an address. Exactly one mailbox carries the designation — the setter clears every sibling in the same write — and a graph holding two is refused naming both rather than one being elected. The poll high-water mark and the pending fetch/ingest batch are per-mailbox. `email-status` lists every attached mailbox.
|
|
110
114
|
|
|
111
115
|
## Capabilities
|
|
112
116
|
|
|
113
117
|
- **Provider lookup:** `email-provider-info` — given just an email address, returns the inferred IMAP/SMTP hosts and the provider's app-password / trusted-application / IMAP-enable requirement, deterministically from the provider map. Call this BEFORE soliciting a password so the requirement is relayed first; most providers reject the normal login password. Returns "unknown" (operator supplies hosts) or "unsupported" (provider blocks IMAP/SMTP, e.g. Tuta).
|
|
114
118
|
- **Setup:** `email-setup` — collect credentials in plain chat and connect IMAP/SMTP. Hosts are auto-inferred for known providers; supports alias addresses (`agentAddress`). For hosts where the client-visible Drafts folder is not the one flagged `\Drafts`, pass `draftsFolder` to name it explicitly (e.g. `INBOX.Drafts`).
|
|
115
|
-
- **Signature:** `email-signature-set` — install the account's signature into the three files `email-draft` already reads at the account root (`email-signature.txt`, `.html`, `.font`). Plain text and HTML are stored and appended byte-for-byte; `font` is one CSS font-family value that wraps the HTML body and has no plain-text effect. **A part you omit is removed**, so a text-only call clears a stale HTML signature rather than leaving it to keep being appended; pass every part you want to keep on each call. A call with no parts at all is refused rather than treated as "erase everything". Because the append is deterministic and happens on every draft, a signature must never be written into a draft body by hand — that duplicates the stored one and drifts from it. Pass the operator's real signature read from its source of truth; reconstructing markup from memory or from stripped graph text is what put a dead logo URL into a client draft. Account-scoped, no `mailbox` selector: one signature per account.
|
|
119
|
+
- **Signature:** `email-signature-set` — install the account's signature into the three files `email-draft` already reads at the account root (`email-signature.txt`, `.html`, `.font`). Plain text and HTML are stored and appended byte-for-byte; `font` is one CSS font-family value that wraps the HTML body and has no plain-text effect. A stored HTML signature lands on every draft, including one composed with no HTML body: the plugin derives an HTML body from the plain text (escaped, blank line to paragraph, single newline to line break) so the branded signature has somewhere to go, which makes that draft `multipart/alternative`. An account with no stored HTML signature derives nothing and its drafts stay `text/plain`. **A part you omit is removed**, so a text-only call clears a stale HTML signature rather than leaving it to keep being appended; pass every part you want to keep on each call. A call with no parts at all is refused rather than treated as "erase everything". Because the append is deterministic and happens on every draft, a signature must never be written into a draft body by hand — that duplicates the stored one and drifts from it. Pass the operator's real signature read from its source of truth; reconstructing markup from memory or from stripped graph text is what put a dead logo URL into a client draft. Account-scoped, no `mailbox` selector: one signature per account.
|
|
120
|
+
- **Sending identity:** `email-sending-identity-set` — designate which attached mailbox is the account's own outbound address. Afterwards an `email-draft`, `email-send` or `email-reply` that names no `mailbox` composes from it, instead of being refused with a list of addresses. Exactly one mailbox carries the designation: the call clears it from every sibling in the same write, so uniqueness is a property of the write rather than of a later check. The address comes from the operator, never from inference — a routing rule, a signature or an inbound trigger names an address for a different purpose, and reading one of those as the sending address is what put a mailbox the operator never sends from into a draft brief. Re-running `email-setup` on a designated mailbox preserves the designation. `email-status` reports which mailbox holds it, and says so when a multi-mailbox account has none.
|
|
116
121
|
- **Read inbox:** `email-read` — metadata only (UID, sender, subject, date), plus a best-effort `Archive`/`Archive-Section` hint when the IMAP message's `receivedAt` falls inside a stored `:ConversationArchive {source:'email'}` section, plus an `Attachments (N): filename (mime, size); …` footer when the message carries enclosures. Supports pagination (`before_uid`), folders (`inbox`/`sent`), filtering by sender/date/subject. Metadata is derived from IMAP `bodyStructure` — no bytes downloaded.
|
|
117
122
|
- **Search inbox:** `email-search` — live IMAP search by sender, subject, body keyword, date range. Same per-archive hint and attachment footer as `email-read`.
|
|
118
123
|
- **Delete (move to Trash):** `email-delete` — move the messages named by `uids` (from a prior `email-read`/`email-search`, scoped to a source `folder` of `inbox` or `sent`) into the mailbox's Trash folder. **Recoverable, never an expunge** — the message leaves the inbox and permanent removal is left to the operator's own mail client or the provider's Trash auto-purge; this tool never permanently deletes. Trash is resolved per provider: the `\Trash` special-use folder if advertised, else the first existing of `Trash`, `[Gmail]/Trash`, `Deleted Items`, `Deleted Messages`. `Junk` is never treated as Trash. A mailbox with no resolvable Trash yields a typed error and moves nothing — there is no silent expunge fallback. A `uid` that is already gone is counted not-moved without failing the rest; the result reports `Moved N of M message(s) to <Trash>`. It deletes only the UIDs you name, never by search criteria.
|
|
@@ -32,22 +32,79 @@ describe('Task 1952 — composeDraft applies signature', () => {
|
|
|
32
32
|
expect(text).toContain('Quote attached.');
|
|
33
33
|
expect(text).toMatch(/Regards,\r?\nDale/);
|
|
34
34
|
});
|
|
35
|
-
it('logs
|
|
35
|
+
it('logs the per-part flags with the account id prefix and asset path', async () => {
|
|
36
36
|
writeFileSync(join(accountDir, 'email-signature.txt'), 'Regards,\nDale');
|
|
37
37
|
const err = vi.spyOn(console, 'error').mockImplementation(() => { });
|
|
38
38
|
await composeDraft(config, 'pw', accountId, { to: 'x@y.test', subject: 'Hi', body: 'Body.' });
|
|
39
39
|
const line = err.mock.calls.map((c) => String(c[0])).find((s) => s.includes('op=signature'));
|
|
40
40
|
expect(line).toContain('accountId=gls12345');
|
|
41
|
-
expect(line).toContain('
|
|
41
|
+
expect(line).toContain('text=true');
|
|
42
|
+
expect(line).toContain('html=false');
|
|
43
|
+
expect(line).toContain('derivedHtml=false');
|
|
44
|
+
expect(line).not.toMatch(/\bapplied=/);
|
|
42
45
|
expect(line).toContain(join(accountDir, 'email-signature'));
|
|
43
46
|
err.mockRestore();
|
|
44
47
|
});
|
|
45
|
-
it('logs
|
|
48
|
+
it('logs all three false when no signature file is present', async () => {
|
|
46
49
|
const err = vi.spyOn(console, 'error').mockImplementation(() => { });
|
|
47
50
|
await composeDraft(config, 'pw', accountId, { to: 'x@y.test', subject: 'Hi', body: 'Body.' });
|
|
48
51
|
const line = err.mock.calls.map((c) => String(c[0])).find((s) => s.includes('op=signature'));
|
|
49
|
-
expect(line).toContain('
|
|
52
|
+
expect(line).toContain('text=false');
|
|
53
|
+
expect(line).toContain('html=false');
|
|
54
|
+
expect(line).toContain('derivedHtml=false');
|
|
50
55
|
err.mockRestore();
|
|
51
56
|
});
|
|
52
57
|
});
|
|
58
|
+
describe('Task 2193 — a stored HTML signature reaches a draft composed without an HTML body', () => {
|
|
59
|
+
let root = '';
|
|
60
|
+
let accountDir = '';
|
|
61
|
+
const accountId = 'gls12345-aaaa';
|
|
62
|
+
const saved = { ...process.env };
|
|
63
|
+
beforeEach(() => {
|
|
64
|
+
root = realpathSync(mkdtempSync(join(tmpdir(), 'cmp-')));
|
|
65
|
+
const platformRoot = join(root, 'platform');
|
|
66
|
+
mkdirSync(platformRoot, { recursive: true });
|
|
67
|
+
accountDir = join(root, 'data', 'accounts', accountId);
|
|
68
|
+
mkdirSync(accountDir, { recursive: true });
|
|
69
|
+
process.env.PLATFORM_ROOT = platformRoot;
|
|
70
|
+
delete process.env.ACCOUNT_DIR;
|
|
71
|
+
});
|
|
72
|
+
afterEach(() => {
|
|
73
|
+
process.env = { ...saved };
|
|
74
|
+
if (root)
|
|
75
|
+
rmSync(root, { recursive: true, force: true });
|
|
76
|
+
});
|
|
77
|
+
it('composes multipart/alternative carrying the html signature, and reports all three flags', async () => {
|
|
78
|
+
writeFileSync(join(accountDir, 'email-signature.txt'), 'Regards,\nDale');
|
|
79
|
+
writeFileSync(join(accountDir, 'email-signature.html'), '<table><tr><td>WORDMARK</td></tr></table>');
|
|
80
|
+
const err = vi.spyOn(console, 'error').mockImplementation(() => { });
|
|
81
|
+
const { raw, textApplied, htmlApplied, derivedHtml } = await composeDraft(config, 'pw', accountId, {
|
|
82
|
+
to: 'x@y.test', subject: 'Hi', body: 'Quote attached.',
|
|
83
|
+
});
|
|
84
|
+
const line = err.mock.calls.map((c) => String(c[0])).find((s) => s.includes('op=signature'));
|
|
85
|
+
err.mockRestore();
|
|
86
|
+
expect(line).toContain('text=true');
|
|
87
|
+
expect(line).toContain('html=true');
|
|
88
|
+
expect(line).toContain('derivedHtml=true');
|
|
89
|
+
expect({ textApplied, htmlApplied, derivedHtml }).toEqual({
|
|
90
|
+
textApplied: true, htmlApplied: true, derivedHtml: true,
|
|
91
|
+
});
|
|
92
|
+
const mime = raw.toString('utf8');
|
|
93
|
+
expect(mime).toContain('multipart/alternative');
|
|
94
|
+
expect(mime).toContain('WORDMARK');
|
|
95
|
+
expect(mime).toMatch(/Regards,\r?\nDale/);
|
|
96
|
+
});
|
|
97
|
+
it('a .txt-only account still composes a text/plain draft with no html part', async () => {
|
|
98
|
+
writeFileSync(join(accountDir, 'email-signature.txt'), 'Regards,\nDale');
|
|
99
|
+
const { raw, htmlApplied, derivedHtml } = await composeDraft(config, 'pw', accountId, {
|
|
100
|
+
to: 'x@y.test', subject: 'Hi', body: 'Quote attached.',
|
|
101
|
+
});
|
|
102
|
+
expect(htmlApplied).toBe(false);
|
|
103
|
+
expect(derivedHtml).toBe(false);
|
|
104
|
+
const mime = raw.toString('utf8');
|
|
105
|
+
expect(mime).toContain('text/plain');
|
|
106
|
+
expect(mime).not.toContain('multipart/alternative');
|
|
107
|
+
expect(mime).not.toContain('text/html');
|
|
108
|
+
});
|
|
109
|
+
});
|
|
53
110
|
//# sourceMappingURL=compose-signature.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compose-signature.test.js","sourceRoot":"","sources":["../../src/__tests__/compose-signature.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AACxE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACrF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,MAAM,MAAM,GAAQ,EAAE,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,gBAAgB,EAAE,CAAA;AAE/E,QAAQ,CAAC,4CAA4C,EAAE,GAAG,EAAE;IAC1D,IAAI,IAAI,GAAG,EAAE,CAAA;IACb,IAAI,UAAU,GAAG,EAAE,CAAA;IACnB,MAAM,SAAS,GAAG,eAAe,CAAA;IACjC,MAAM,KAAK,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;IAEhC,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,GAAG,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;QACxD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;QAC3C,SAAS,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC5C,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,CAAA;QACtD,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC1C,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,YAAY,CAAA;QACxC,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,CAAA;IAChC,CAAC,CAAC,CAAA;IACF,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,KAAK,EAAE,CAAA;QAC1B,IAAI,IAAI;YAAE,MAAM,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,qBAAqB,CAAC,EAAE,gBAAgB,CAAC,CAAA;QACxE,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE;YAC1D,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,iBAAiB;SACvD,CAAC,CAAA;QACF,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QACjC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAA;QACzC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA;IAC3C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"compose-signature.test.js","sourceRoot":"","sources":["../../src/__tests__/compose-signature.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,9 @@ const { composeMock, replaceMock } = vi.hoisted(() => ({
|
|
|
6
6
|
threadedParentId: null,
|
|
7
7
|
draftMessageId: "<new-draft@x>",
|
|
8
8
|
attachments: [],
|
|
9
|
+
textApplied: false,
|
|
10
|
+
htmlApplied: false,
|
|
11
|
+
derivedHtml: false,
|
|
9
12
|
})),
|
|
10
13
|
replaceMock: vi.fn(async () => ({
|
|
11
14
|
folder: "Drafts",
|
|
@@ -33,6 +36,9 @@ describe("Task 819 — email-draft-edit", () => {
|
|
|
33
36
|
threadedParentId: null,
|
|
34
37
|
draftMessageId: "<new-draft@x>",
|
|
35
38
|
attachments: [],
|
|
39
|
+
textApplied: false,
|
|
40
|
+
htmlApplied: false,
|
|
41
|
+
derivedHtml: false,
|
|
36
42
|
});
|
|
37
43
|
replaceMock.mockResolvedValue({
|
|
38
44
|
folder: "Drafts",
|
|
@@ -58,6 +64,38 @@ describe("Task 819 — email-draft-edit", () => {
|
|
|
58
64
|
expect(text).toContain("99");
|
|
59
65
|
expect(text).toMatch(/unsent/); // a revise never dispatches
|
|
60
66
|
});
|
|
67
|
+
// Task 2193 — composeDraft is mocked here, which is the right seam: what this
|
|
68
|
+
// tool owns is rendering the flags it is handed, identically to email-draft.
|
|
69
|
+
it("states which signature parts landed, from the flags composeDraft reports", async () => {
|
|
70
|
+
composeMock.mockResolvedValueOnce({
|
|
71
|
+
raw: Buffer.from("MIME"),
|
|
72
|
+
resolvedSubject: "Re: Quote",
|
|
73
|
+
threadedParentId: null,
|
|
74
|
+
draftMessageId: "<new-draft@x>",
|
|
75
|
+
attachments: [],
|
|
76
|
+
textApplied: true,
|
|
77
|
+
htmlApplied: true,
|
|
78
|
+
derivedHtml: true,
|
|
79
|
+
});
|
|
80
|
+
const text = await emailDraftEdit({
|
|
81
|
+
accountId: "acc-1",
|
|
82
|
+
targetUid: 5,
|
|
83
|
+
to: "c@d.e",
|
|
84
|
+
subject: "Quote",
|
|
85
|
+
body: "Revised body.",
|
|
86
|
+
});
|
|
87
|
+
expect(text).toContain("Signature: plain text and HTML (body derived from the plain text) applied.");
|
|
88
|
+
});
|
|
89
|
+
it("reports a bare account the same way email-draft does", async () => {
|
|
90
|
+
const text = await emailDraftEdit({
|
|
91
|
+
accountId: "acc-1",
|
|
92
|
+
targetUid: 5,
|
|
93
|
+
to: "c@d.e",
|
|
94
|
+
subject: "Quote",
|
|
95
|
+
body: "Revised body.",
|
|
96
|
+
});
|
|
97
|
+
expect(text).toContain("Signature: none stored for this account.");
|
|
98
|
+
});
|
|
61
99
|
it("passes the prior draft Message-ID to replaceDraft for relocation", async () => {
|
|
62
100
|
await emailDraftEdit({
|
|
63
101
|
accountId: "acc-1",
|
|
@@ -106,6 +144,9 @@ describe("Task 819 — email-draft-edit", () => {
|
|
|
106
144
|
threadedParentId: "<parent@x>",
|
|
107
145
|
draftMessageId: "<new-draft@x>",
|
|
108
146
|
attachments: [],
|
|
147
|
+
textApplied: false,
|
|
148
|
+
htmlApplied: false,
|
|
149
|
+
derivedHtml: false,
|
|
109
150
|
});
|
|
110
151
|
const text = await emailDraftEdit({
|
|
111
152
|
accountId: "acc-1",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email-draft-edit.test.js","sourceRoot":"","sources":["../../src/__tests__/email-draft-edit.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9D,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACrD,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QAC9B,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;QACxB,eAAe,EAAE,WAAW;QAC5B,gBAAgB,EAAE,IAAqB;QACvC,cAAc,EAAE,eAAe;QAC/B,WAAW,EAAE,EAA+C;
|
|
1
|
+
{"version":3,"file":"email-draft-edit.test.js","sourceRoot":"","sources":["../../src/__tests__/email-draft-edit.test.ts"],"names":[],"mappings":"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"}
|