@rubytech/create-maxy-code 0.1.495 → 0.1.497
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/docs/superpowers/plans/2026-07-24-task-1942-subaccount-switcher-brand-head.md +327 -0
- package/payload/platform/docs/superpowers/specs/2026-07-24-task-1942-subaccount-switcher-brand-head-design.md +35 -0
- package/payload/platform/plugins/admin/skills/insight/SKILL.md +1 -1
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +36 -11
- package/payload/platform/plugins/docs/references/admin-ui.md +30 -9
- package/payload/platform/plugins/docs/references/outlook-guide.md +5 -1
- package/payload/platform/plugins/memory/references/schema-estate-agent.md +1 -1
- package/payload/platform/plugins/outlook/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/outlook/PLUGIN.md +6 -2
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/dispatch-grouping.test.d.ts +2 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/dispatch-grouping.test.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/dispatch-grouping.test.js +54 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/dispatch-grouping.test.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/fetch-body-fromname.test.d.ts +2 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/fetch-body-fromname.test.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/fetch-body-fromname.test.js +19 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/fetch-body-fromname.test.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-ingest-decisions.test.d.ts +2 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-ingest-decisions.test.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-ingest-decisions.test.js +20 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-ingest-decisions.test.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/index.js +21 -0
- package/payload/platform/plugins/outlook/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/lib/conversation-archive-dispatch.d.ts +40 -0
- package/payload/platform/plugins/outlook/mcp/dist/lib/conversation-archive-dispatch.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/lib/conversation-archive-dispatch.js +143 -0
- package/payload/platform/plugins/outlook/mcp/dist/lib/conversation-archive-dispatch.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/lib/neo4j.d.ts +5 -0
- package/payload/platform/plugins/outlook/mcp/dist/lib/neo4j.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/lib/neo4j.js +44 -0
- package/payload/platform/plugins/outlook/mcp/dist/lib/neo4j.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-fetch-body.d.ts +14 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-fetch-body.d.ts.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-fetch-body.js +13 -1
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-fetch-body.js.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-ingest.d.ts +27 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-ingest.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-ingest.js +69 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-ingest.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/package.json +1 -0
- package/payload/platform/plugins/outlook/references/graph-surfaces.md +10 -1
- package/payload/platform/plugins/outlook/skills/outlook/SKILL.md +4 -0
- package/payload/platform/plugins/outlook/skills/outlook-mail-ingest/SKILL.md +85 -0
- package/payload/platform/scripts/__tests__/account-schema-owned-dirs.test.sh +51 -7
- package/payload/platform/scripts/__tests__/provision-role-stamp.test.sh +4 -1
- package/payload/platform/scripts/lib/account-schema-owned-dirs.py +13 -1
- package/payload/platform/scripts/lib/account-schema-owned-dirs.sh +23 -1
- package/payload/platform/scripts/lib/provision-account-dir.sh +5 -0
- 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/public/activity.html +5 -5
- package/payload/server/public/assets/{AdminLoginScreens-DgVFsHtd.js → AdminLoginScreens-BXDYzNbq.js} +1 -1
- package/payload/server/public/assets/AdminShell-CiTHCp5t.js +2 -0
- package/payload/server/public/assets/{activity-2DL2DwLr.js → activity-cVe5ZnG7.js} +1 -1
- package/payload/server/public/assets/admin-BbcLizN0.js +1 -0
- package/payload/server/public/assets/{arc-CFMJyMm-.js → arc-BrHWN2Kr.js} +1 -1
- package/payload/server/public/assets/architecture-YZFGNWBL-CZQzGRSM.js +1 -0
- package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-CiSSgdL8.js → architectureDiagram-Q4EWVU46-1OxSL3rT.js} +1 -1
- package/payload/server/public/assets/{blockDiagram-DXYQGD6D-_sXtIW5c.js → blockDiagram-DXYQGD6D-C6yKiblF.js} +1 -1
- package/payload/server/public/assets/{bot-CpBuDQlF.js → bot-Bb8yj02k.js} +1 -1
- package/payload/server/public/assets/{browser-CSApuZrv.js → browser-BdWeCfYJ.js} +1 -1
- package/payload/server/public/assets/{c4Diagram-AHTNJAMY-Bh7OAMXs.js → c4Diagram-AHTNJAMY-BzTyHS1I.js} +1 -1
- package/payload/server/public/assets/calendar-B4KbpiXR.js +1 -0
- package/payload/server/public/assets/channel-uhtvXKHn.js +1 -0
- package/payload/server/public/assets/chat-BEcbZB3e.js +1 -0
- package/payload/server/public/assets/chevron-left-Cy_RXwhn.js +1 -0
- package/payload/server/public/assets/chevron-right-CEjdB4AT.js +1 -0
- package/payload/server/public/assets/{chunk-2KRD3SAO-D4fktAwW.js → chunk-2KRD3SAO-BGAUfWvM.js} +1 -1
- package/payload/server/public/assets/{chunk-336JU56O-CcQoKH2G.js → chunk-336JU56O-M1H_u2Qv.js} +2 -2
- package/payload/server/public/assets/chunk-426QAEUC-D4XtWgLR.js +1 -0
- package/payload/server/public/assets/{chunk-4BX2VUAB-C13Wz3zS.js → chunk-4BX2VUAB-CkxXXCiF.js} +1 -1
- package/payload/server/public/assets/{chunk-4TB4RGXK-BL48D7gN.js → chunk-4TB4RGXK-DPWZYGHH.js} +1 -1
- package/payload/server/public/assets/{chunk-55IACEB6-TmOKdy8a.js → chunk-55IACEB6-CBkNmqrt.js} +1 -1
- package/payload/server/public/assets/{chunk-5FUZZQ4R-DZ_jSF6N.js → chunk-5FUZZQ4R-uIqIu9ha.js} +1 -1
- package/payload/server/public/assets/{chunk-5PVQY5BW-De4G1vfV.js → chunk-5PVQY5BW-B_S7XzpE.js} +1 -1
- package/payload/server/public/assets/{chunk-67CJDMHE-Cif9Uu5C.js → chunk-67CJDMHE-BbMV1lgW.js} +1 -1
- package/payload/server/public/assets/{chunk-7N4EOEYR-WjTHCXnd.js → chunk-7N4EOEYR-C49Mv-nQ.js} +1 -1
- package/payload/server/public/assets/{chunk-AA7GKIK3-CwCfdQmb.js → chunk-AA7GKIK3-Dy_pJOp_.js} +1 -1
- package/payload/server/public/assets/{chunk-BSJP7CBP-9A67yXwT.js → chunk-BSJP7CBP-Ce-OmPqn.js} +1 -1
- package/payload/server/public/assets/{chunk-CIAEETIT-DPMiWSBi.js → chunk-CIAEETIT-tnjq-APC.js} +1 -1
- package/payload/server/public/assets/{chunk-EDXVE4YY-C2f_Qvx-.js → chunk-EDXVE4YY-uzO7kO4e.js} +1 -1
- package/payload/server/public/assets/{chunk-ENJZ2VHE-B-Q9EbSQ.js → chunk-ENJZ2VHE-DQMOsG1f.js} +1 -1
- package/payload/server/public/assets/{chunk-FMBD7UC4-Bmt_ZRlV.js → chunk-FMBD7UC4-Top6y08S.js} +1 -1
- package/payload/server/public/assets/{chunk-FOC6F5B3-DfGJGxpX.js → chunk-FOC6F5B3-B9LPNCUS.js} +1 -1
- package/payload/server/public/assets/{chunk-ICPOFSXX-Wyym1Q8K.js → chunk-ICPOFSXX-DeIt3WoY.js} +2 -2
- package/payload/server/public/assets/{chunk-K5T4RW27-DMpoaqw2.js → chunk-K5T4RW27-DAnRM04h.js} +1 -1
- package/payload/server/public/assets/{chunk-KGLVRYIC-DYUFgri2.js → chunk-KGLVRYIC-C0QYcbLe.js} +1 -1
- package/payload/server/public/assets/{chunk-LIHQZDEY-x3LmeKmx.js → chunk-LIHQZDEY-BjvA5ykt.js} +1 -1
- package/payload/server/public/assets/{chunk-ORNJ4GCN-BeuNAWkW.js → chunk-ORNJ4GCN-Cs46Gj7z.js} +1 -1
- package/payload/server/public/assets/{chunk-OYMX7WX6-BUWVAfQA.js → chunk-OYMX7WX6-CBHIFMBx.js} +1 -1
- package/payload/server/public/assets/chunk-QZHKN3VN-Qlc2PFAj.js +1 -0
- package/payload/server/public/assets/{chunk-U2HBQHQK-DKS5adQo.js → chunk-U2HBQHQK-5_DL8yx6.js} +1 -1
- package/payload/server/public/assets/{chunk-X2U36JSP-CT_UM4IN.js → chunk-X2U36JSP-BDCaWRe9.js} +1 -1
- package/payload/server/public/assets/{chunk-XPW4576I-ByFnN4JO.js → chunk-XPW4576I-B10QuxYb.js} +1 -1
- package/payload/server/public/assets/{chunk-YZCP3GAM-DCetC20J.js → chunk-YZCP3GAM-81jJqyDd.js} +1 -1
- package/payload/server/public/assets/{chunk-ZZ45TVLE-Bh1QIv8N.js → chunk-ZZ45TVLE-DGx3J6Dx.js} +1 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-CBH5ngSm.js +1 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-Ck3eNZce.js +1 -0
- package/payload/server/public/assets/clone-Cv8evfNb.js +1 -0
- package/payload/server/public/assets/{cose-bilkent-S5V4N54A-DgLEaApT.js → cose-bilkent-S5V4N54A-CRDvLRXs.js} +1 -1
- package/payload/server/public/assets/{dagre-unhMIyVo.js → dagre--rdjN6xZ.js} +1 -1
- package/payload/server/public/assets/{dagre-KV5264BT-BfkUPrEV.js → dagre-KV5264BT-DHbVQPnV.js} +1 -1
- package/payload/server/public/assets/data-L-hMHLBN.js +1 -0
- package/payload/server/public/assets/{diagram-5BDNPKRD-BjjwcTD9.js → diagram-5BDNPKRD-D8HC1Idg.js} +1 -1
- package/payload/server/public/assets/{diagram-G4DWMVQ6-BbgWtVSS.js → diagram-G4DWMVQ6-evvg8aey.js} +1 -1
- package/payload/server/public/assets/{diagram-MMDJMWI5-DyAnkWGy.js → diagram-MMDJMWI5-4hZuk-Dd.js} +1 -1
- package/payload/server/public/assets/{diagram-TYMM5635-SAMMoLxq.js → diagram-TYMM5635-Cwei1ql9.js} +1 -1
- package/payload/server/public/assets/{erDiagram-SMLLAGMA-Cvo-5-fD.js → erDiagram-SMLLAGMA-BG5OK4Fx.js} +1 -1
- package/payload/server/public/assets/{flatten-BXzaHgtL.js → flatten-naJ5PJ4f.js} +1 -1
- package/payload/server/public/assets/{flowDiagram-DWJPFMVM-y3o2Ycld.js → flowDiagram-DWJPFMVM-CPB_poda.js} +1 -1
- package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-BEm_CQaK.js → ganttDiagram-T4ZO3ILL-CD6BL1UP.js} +1 -1
- package/payload/server/public/assets/gitGraph-7Q5UKJZL-CBZPQJLj.js +1 -0
- package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-CqmOxS7F.js → gitGraphDiagram-UUTBAWPF-C-e8FDGn.js} +1 -1
- package/payload/server/public/assets/{graph-kaxS9a_7.js → graph-COyGp2x1.js} +3 -3
- package/payload/server/public/assets/{graph-labels-GgejRtgV.js → graph-labels-CR-HqNdV.js} +1 -1
- package/payload/server/public/assets/{graphlib-_HfbQcBf.js → graphlib-CdCZY1Mj.js} +1 -1
- package/payload/server/public/assets/info-OMHHGYJF-1vIoX-kP.js +1 -0
- package/payload/server/public/assets/infoDiagram-42DDH7IO-BDInZV9G.js +2 -0
- package/payload/server/public/assets/{isEmpty-uB1dEu_Z.js → isEmpty-Bnpg7b8f.js} +1 -1
- package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-C_d0vcZC.js → ishikawaDiagram-UXIWVN3A-CFLhfPpo.js} +1 -1
- package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-DsjRBqlW.js → journeyDiagram-VCZTEJTY-BN0PaMgT.js} +1 -1
- package/payload/server/public/assets/{kanban-definition-6JOO6SKY-BwtK6LS-.js → kanban-definition-6JOO6SKY-CmRilACp.js} +1 -1
- package/payload/server/public/assets/{line-szBCFOLJ.js → line-DR6Zk7d6.js} +1 -1
- package/payload/server/public/assets/{linear-X3O7lwK3.js → linear-CAOWPodQ.js} +1 -1
- package/payload/server/public/assets/{maximize-2-CPq3nwZA.js → maximize-2-ne1kaQlS.js} +1 -1
- package/payload/server/public/assets/{mermaid-parser.core-BavvMAhU.js → mermaid-parser.core-0vmQl6Gn.js} +2 -2
- package/payload/server/public/assets/{mermaid.core-Br2F9Hdm.js → mermaid.core-DWgpHiLh.js} +3 -3
- package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-4qlwXoJ-.js → mindmap-definition-QFDTVHPH-CViR7VGV.js} +1 -1
- package/payload/server/public/assets/operator-Q0F_EEyq.js +1 -0
- package/payload/server/public/assets/{ordinal-CZY9laxg.js → ordinal-Wx4m9zHk.js} +1 -1
- package/payload/server/public/assets/packet-4T2RLAQJ-CTU0gCGb.js +1 -0
- package/payload/server/public/assets/{page-DBHzC59_.js → page-DwfYACyC.js} +4 -4
- package/payload/server/public/assets/page-bRjlk8Dt.js +1 -0
- package/payload/server/public/assets/{pdf-render-H884L3EI.js → pdf-render-0hyh3Jlf.js} +1 -1
- package/payload/server/public/assets/pie-ZZUOXDRM-D-EEHxhC.js +1 -0
- package/payload/server/public/assets/{pieDiagram-DEJITSTG-BbXryIg0.js → pieDiagram-DEJITSTG-B7YQ1_Kr.js} +1 -1
- package/payload/server/public/assets/{public-jIzvdjt_.js → public-BACeh5xm.js} +1 -1
- package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-BHLjcvh3.js → quadrantDiagram-34T5L4WZ-Dxs0nGu5.js} +1 -1
- package/payload/server/public/assets/radar-PYXPWWZC-DHXATZGB.js +1 -0
- package/payload/server/public/assets/{reduce-BGQzAenn.js → reduce-BUmc8RDR.js} +1 -1
- package/payload/server/public/assets/{requirementDiagram-MS252O5E-BXaVO0lk.js → requirementDiagram-MS252O5E-DDNYDqZc.js} +1 -1
- package/payload/server/public/assets/{rotate-ccw-DieZzl10.js → rotate-ccw-tY4mfSrJ.js} +1 -1
- package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-CmN1s17Q.js → sankeyDiagram-XADWPNL6-DLWoegU5.js} +1 -1
- package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-DC08e5NY.js → sequenceDiagram-FGHM5R23-DINNPlTY.js} +1 -1
- package/payload/server/public/assets/{stateDiagram-FHFEXIEX-DnoQMuOW.js → stateDiagram-FHFEXIEX-Dsan8EIl.js} +1 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-B4yeYYgL.js +1 -0
- package/payload/server/public/assets/{tasks-DYyCGz8W.js → tasks-C4nPXsbX.js} +1 -1
- package/payload/server/public/assets/{time-entry-format-CC_9jFuR.js → time-entry-format-CmqjpGG2.js} +1 -1
- package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-eTn3uRaH.js → timeline-definition-GMOUNBTQ-CISzecz5.js} +1 -1
- package/payload/server/public/assets/treeView-SZITEDCU-CC7ouMFd.js +1 -0
- package/payload/server/public/assets/treemap-W4RFUUIX-CaCg27im.js +1 -0
- package/payload/server/public/assets/{triangle-alert-7mQfCQWP.js → triangle-alert-DKZ69dOa.js} +1 -1
- package/payload/server/public/assets/{useCopyFeedback-os7N0yCx.js → useCopyFeedback-Cf5jFDR5.js} +1 -1
- package/payload/server/public/assets/useSubAccountSwitcher-DFnDNIDO.css +1 -0
- package/payload/server/public/assets/useSubAccountSwitcher-DdctgpPL.js +9 -0
- package/payload/server/public/assets/{useVoiceRecorder-ZFwt5i6d.js → useVoiceRecorder-BVdKbTku.js} +2 -2
- package/payload/server/public/assets/{vennDiagram-DHZGUBPP-DNx6o_ZQ.js → vennDiagram-DHZGUBPP-Bh2s76nJ.js} +1 -1
- package/payload/server/public/assets/wardley-RL74JXVD-bMPsqQZ7.js +1 -0
- package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-BZOchqF3.js → wardleyDiagram-NUSXRM2D-Grzw0FHg.js} +1 -1
- package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-ZBEGH6ZI.js → xychartDiagram-5P7HB3ND-7pY90HjH.js} +1 -1
- package/payload/server/public/browser.html +4 -4
- package/payload/server/public/calendar.html +6 -6
- package/payload/server/public/chat.html +13 -14
- package/payload/server/public/data.html +11 -11
- package/payload/server/public/graph.html +9 -10
- package/payload/server/public/index.html +15 -16
- package/payload/server/public/operator.html +14 -15
- package/payload/server/public/public.html +13 -14
- package/payload/server/public/tasks.html +6 -6
- package/payload/server/public/assets/AdminShell-BwNqwb4k.js +0 -2
- package/payload/server/public/assets/admin-COe0dT2U.js +0 -1
- package/payload/server/public/assets/architecture-YZFGNWBL-Cypt5qHL.js +0 -1
- package/payload/server/public/assets/calendar-DlvwZnS7.js +0 -1
- package/payload/server/public/assets/channel-BMyXE4zc.js +0 -1
- package/payload/server/public/assets/chat-1SSmFsjd.js +0 -1
- package/payload/server/public/assets/chevron-down-Dnuuw6Q2.js +0 -1
- package/payload/server/public/assets/chevron-left-CC4zmWOr.js +0 -1
- package/payload/server/public/assets/chevron-right-CG_lHTx_.js +0 -1
- package/payload/server/public/assets/chunk-426QAEUC-Xu6JKP4d.js +0 -1
- package/payload/server/public/assets/chunk-QZHKN3VN-7_kS3RBy.js +0 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-DJqbNcuC.js +0 -1
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-CGglqfQA.js +0 -1
- package/payload/server/public/assets/clone-BiTMTzp_.js +0 -1
- package/payload/server/public/assets/data-CJbC_cVy.js +0 -1
- package/payload/server/public/assets/gitGraph-7Q5UKJZL-C_-XjxLd.js +0 -1
- package/payload/server/public/assets/info-OMHHGYJF-BH8yDCfL.js +0 -1
- package/payload/server/public/assets/infoDiagram-42DDH7IO-DyDXyJ6U.js +0 -2
- package/payload/server/public/assets/operator-Cxq9TxaH.js +0 -1
- package/payload/server/public/assets/packet-4T2RLAQJ-Bajcns4r.js +0 -1
- package/payload/server/public/assets/page-BE6DkJP9.js +0 -1
- package/payload/server/public/assets/pie-ZZUOXDRM-D7hjM5w1.js +0 -1
- package/payload/server/public/assets/radar-PYXPWWZC-B46d5x7a.js +0 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-CrstH34p.js +0 -1
- package/payload/server/public/assets/treeView-SZITEDCU-3XQh5xQ1.js +0 -1
- package/payload/server/public/assets/treemap-W4RFUUIX-DwR-_l5z.js +0 -1
- package/payload/server/public/assets/useSubAccountSwitcher-Bgfqig1V.css +0 -1
- package/payload/server/public/assets/useSubAccountSwitcher-Q941cZYV.js +0 -9
- package/payload/server/public/assets/wardley-RL74JXVD-DZp9oCGv.js +0 -1
- /package/payload/server/public/assets/{_baseFor-CMWvz0uA.js → _baseFor-k8hYPe-U.js} +0 -0
- /package/payload/server/public/assets/{array-Cny_NT6T.js → array-BFDiaBgf.js} +0 -0
- /package/payload/server/public/assets/{cytoscape.esm-De0CCmB2.js → cytoscape.esm-Ch0xptA4.js} +0 -0
- /package/payload/server/public/assets/{defaultLocale-BahRht8U.js → defaultLocale-ZeknFqNe.js} +0 -0
- /package/payload/server/public/assets/{dist-C9D_xz81.js → dist-B2N0v8hZ.js} +0 -0
- /package/payload/server/public/assets/{init-DoIvjoJ_.js → init-0VJVrkRJ.js} +0 -0
- /package/payload/server/public/assets/{katex-Bfn1OZEl.js → katex-Br7bH10N.js} +0 -0
- /package/payload/server/public/assets/{path-CTezU8L5.js → path-INs8XTPH.js} +0 -0
- /package/payload/server/public/assets/{preload-helper-D_sPnjeL.js → preload-helper-CH6UZRzu.js} +0 -0
- /package/payload/server/public/assets/{rough.esm-BJo4pvXu.js → rough.esm-DU9bZLvZ.js} +0 -0
- /package/payload/server/public/assets/{src-BTKk8KAG.js → src-DHSQDYx-.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mail-fetch-body.d.ts","sourceRoot":"","sources":["../../src/tools/mail-fetch-body.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAMhE,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,EAAE,EAAE,MAAM,EAAE,CAAC;IACb,EAAE,EAAE,MAAM,EAAE,CAAC;IACb,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;CACd;AAkBD;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,iBAAiB,EACzB,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAC1B,OAAO,CAAC,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"mail-fetch-body.d.ts","sourceRoot":"","sources":["../../src/tools/mail-fetch-body.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAMhE,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,EAAE,EAAE,MAAM,EAAE,CAAC;IACb,EAAE,EAAE,MAAM,EAAE,CAAC;IACb,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;CACd;AAkBD;;;GAGG;AACH,wBAAgB,UAAU,CACxB,IAAI,CAAC,EAAE;IAAE,YAAY,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAAG,IAAI,GACnE;IAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAKlD;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,iBAAiB,EACzB,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAC1B,OAAO,CAAC,eAAe,CAAC,CAqC1B"}
|
|
@@ -3,6 +3,16 @@ import { htmlToText } from "../lib/html-to-text.js";
|
|
|
3
3
|
import { log } from "../lib/log.js";
|
|
4
4
|
import { addrs } from "../lib/recipients.js";
|
|
5
5
|
const SELECT = "id,subject,from,toRecipients,ccRecipients,receivedDateTime,conversationId,isRead,hasAttachments,body";
|
|
6
|
+
/**
|
|
7
|
+
* Map Graph's `from.emailAddress` to the archive's { from, fromName } pair.
|
|
8
|
+
* Exported so the mapping is unit-testable without a live Graph call.
|
|
9
|
+
*/
|
|
10
|
+
export function mapRawFrom(from) {
|
|
11
|
+
return {
|
|
12
|
+
from: from?.emailAddress?.address ?? null,
|
|
13
|
+
fromName: from?.emailAddress?.name ?? null,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
6
16
|
/**
|
|
7
17
|
* Read the COMPLETE body of one message by id. Graph's bodyPreview (returned by
|
|
8
18
|
* outlook-mail-list/-search) is capped near 255 chars; this requests the full
|
|
@@ -24,10 +34,12 @@ export async function runMailFetchBody(config, args) {
|
|
|
24
34
|
bytes: body.length,
|
|
25
35
|
contentType,
|
|
26
36
|
});
|
|
37
|
+
const fromMapped = mapRawFrom(msg.from);
|
|
27
38
|
return {
|
|
28
39
|
id: msg.id,
|
|
29
40
|
subject: msg.subject ?? null,
|
|
30
|
-
from:
|
|
41
|
+
from: fromMapped.from,
|
|
42
|
+
fromName: fromMapped.fromName,
|
|
31
43
|
to: addrs(msg.toRecipients),
|
|
32
44
|
cc: addrs(msg.ccRecipients),
|
|
33
45
|
receivedDateTime: msg.receivedDateTime,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mail-fetch-body.js","sourceRoot":"","sources":["../../src/tools/mail-fetch-body.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,KAAK,EAAqB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"mail-fetch-body.js","sourceRoot":"","sources":["../../src/tools/mail-fetch-body.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,KAAK,EAAqB,MAAM,sBAAsB,CAAC;AA8BhE,MAAM,MAAM,GACV,sGAAsG,CAAC;AAEzG;;;GAGG;AACH,MAAM,UAAU,UAAU,CACxB,IAAoE;IAEpE,OAAO;QACL,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,IAAI,IAAI;QACzC,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,IAAI,IAAI;KAC3C,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAyB,EACzB,IAA2B;IAE3B,MAAM,IAAI,GAAG,gBAAgB,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;IAClE,MAAM,GAAG,GAAG,MAAM,SAAS,CACzB,MAAM,EACN,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAe,EAC7E,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,IAAI,EAAE,CAC1C,CAAC;IAEF,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,IAAI,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IAChE,MAAM,WAAW,GAAoB,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IAC1E,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAE5D,GAAG,CAAC;QACF,KAAK,EAAE,iBAAiB;QACxB,EAAE,EAAE,YAAY;QAChB,OAAO,EAAE,MAAM,CAAC,SAAS;QACzB,EAAE,EAAE,IAAI,CAAC,SAAS;QAClB,KAAK,EAAE,IAAI,CAAC,MAAM;QAClB,WAAW;KACZ,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACxC,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,IAAI;QAC5B,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,QAAQ,EAAE,UAAU,CAAC,QAAQ;QAC7B,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC;QAC3B,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC;QAC3B,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;QACtC,cAAc,EAAE,GAAG,CAAC,cAAc,IAAI,IAAI;QAC1C,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,KAAK;QAC3B,cAAc,EAAE,GAAG,CAAC,cAAc,IAAI,KAAK;QAC3C,WAAW;QACX,IAAI;KACL,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { GraphClientConfig } from "../lib/graph-client.js";
|
|
2
|
+
export interface IngestDecision {
|
|
3
|
+
messageId: string;
|
|
4
|
+
disposition: "ingest" | "discard";
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Split decisions into ingest ids + a discard count. Refuses an empty array
|
|
8
|
+
* (nothing to do) or a duplicate messageId (ambiguous disposition) so the
|
|
9
|
+
* operator re-issues a clean set rather than a silent partial ingest. Unlike
|
|
10
|
+
* email-ingest there is no staged batch or high-water mark to guard: the ids
|
|
11
|
+
* are explicit and the per-message decision holds over exactly this call.
|
|
12
|
+
*/
|
|
13
|
+
export declare function validateDecisions(decisions: IngestDecision[]): {
|
|
14
|
+
toIngest: string[];
|
|
15
|
+
discarded: number;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Write operator-reviewed messages into the business graph. For each `ingest`
|
|
19
|
+
* decision the full body + envelope is fetched, threads are grouped by
|
|
20
|
+
* conversationId, participants are resolved closed-set against Neo4j, and each
|
|
21
|
+
* resolvable thread is dispatched through the shared conversation-archive
|
|
22
|
+
* script. Unresolved-address threads are skipped and reported.
|
|
23
|
+
*/
|
|
24
|
+
export declare function runMailIngest(config: GraphClientConfig, params: {
|
|
25
|
+
decisions: IngestDecision[];
|
|
26
|
+
}): Promise<string>;
|
|
27
|
+
//# sourceMappingURL=mail-ingest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mail-ingest.d.ts","sourceRoot":"","sources":["../../src/tools/mail-ingest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAOhE,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,QAAQ,GAAG,SAAS,CAAC;CACnC;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,cAAc,EAAE,GAC1B;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAsB3C;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE;IAAE,SAAS,EAAE,cAAc,EAAE,CAAA;CAAE,GACtC,OAAO,CAAC,MAAM,CAAC,CAwCjB"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { runMailFetchBody } from "./mail-fetch-body.js";
|
|
2
|
+
import { dispatchOutlookMessagesToConversationArchive, } from "../lib/conversation-archive-dispatch.js";
|
|
3
|
+
/**
|
|
4
|
+
* Split decisions into ingest ids + a discard count. Refuses an empty array
|
|
5
|
+
* (nothing to do) or a duplicate messageId (ambiguous disposition) so the
|
|
6
|
+
* operator re-issues a clean set rather than a silent partial ingest. Unlike
|
|
7
|
+
* email-ingest there is no staged batch or high-water mark to guard: the ids
|
|
8
|
+
* are explicit and the per-message decision holds over exactly this call.
|
|
9
|
+
*/
|
|
10
|
+
export function validateDecisions(decisions) {
|
|
11
|
+
if (decisions.length === 0) {
|
|
12
|
+
throw new Error("Refusing to ingest — no decisions passed. List messages with outlook-mail-list or outlook-mail-search first, then pass a disposition for each.");
|
|
13
|
+
}
|
|
14
|
+
const seen = new Set();
|
|
15
|
+
const toIngest = [];
|
|
16
|
+
let discarded = 0;
|
|
17
|
+
for (const d of decisions) {
|
|
18
|
+
const id = d.messageId.trim();
|
|
19
|
+
if (!id)
|
|
20
|
+
throw new Error(`Decision had a blank messageId: ${JSON.stringify(d)}`);
|
|
21
|
+
if (seen.has(id)) {
|
|
22
|
+
throw new Error(`Refusing to ingest — duplicate messageId "${id}". Pass one disposition per message.`);
|
|
23
|
+
}
|
|
24
|
+
seen.add(id);
|
|
25
|
+
if (d.disposition === "ingest")
|
|
26
|
+
toIngest.push(id);
|
|
27
|
+
else
|
|
28
|
+
discarded++;
|
|
29
|
+
}
|
|
30
|
+
return { toIngest, discarded };
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Write operator-reviewed messages into the business graph. For each `ingest`
|
|
34
|
+
* decision the full body + envelope is fetched, threads are grouped by
|
|
35
|
+
* conversationId, participants are resolved closed-set against Neo4j, and each
|
|
36
|
+
* resolvable thread is dispatched through the shared conversation-archive
|
|
37
|
+
* script. Unresolved-address threads are skipped and reported.
|
|
38
|
+
*/
|
|
39
|
+
export async function runMailIngest(config, params) {
|
|
40
|
+
const { toIngest, discarded } = validateDecisions(params.decisions);
|
|
41
|
+
const messages = [];
|
|
42
|
+
for (const messageId of toIngest) {
|
|
43
|
+
const body = await runMailFetchBody(config, { messageId });
|
|
44
|
+
messages.push({
|
|
45
|
+
messageId: body.id,
|
|
46
|
+
conversationId: body.conversationId,
|
|
47
|
+
fromAddress: body.from,
|
|
48
|
+
fromName: body.fromName,
|
|
49
|
+
toAddresses: body.to,
|
|
50
|
+
ccAddresses: body.cc,
|
|
51
|
+
subject: body.subject,
|
|
52
|
+
bodyText: body.body,
|
|
53
|
+
receivedDateTime: body.receivedDateTime,
|
|
54
|
+
accountId: config.accountId,
|
|
55
|
+
});
|
|
56
|
+
console.error(`[outlook-mcp] mail-ingest op=ingest id=${body.id} conversationId=${body.conversationId ?? "none"} disposition=ingest`);
|
|
57
|
+
}
|
|
58
|
+
const { threadsDispatched, threadsSkipped, unresolvedAddresses } = await dispatchOutlookMessagesToConversationArchive(messages);
|
|
59
|
+
console.error(`[outlook-mcp] mail-ingest op=summary ingested=${toIngest.length} discarded=${discarded} threadsDispatched=${threadsDispatched} threadsSkipped=${threadsSkipped} unresolved=${unresolvedAddresses.length}`);
|
|
60
|
+
const lines = [
|
|
61
|
+
`Ingested ${toIngest.length} message(s); discarded ${discarded}.`,
|
|
62
|
+
`Graph: ${threadsDispatched} thread(s) dispatched to conversation-archive, ${threadsSkipped} skipped.`,
|
|
63
|
+
];
|
|
64
|
+
if (unresolvedAddresses.length > 0) {
|
|
65
|
+
lines.push(`Unresolved sender/recipient addresses (no :Person or :AdminUser carries these emails — add them to the graph and re-run outlook-mail-ingest to land their threads): ${unresolvedAddresses.join(", ")}`);
|
|
66
|
+
}
|
|
67
|
+
return lines.join("\n");
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=mail-ingest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mail-ingest.js","sourceRoot":"","sources":["../../src/tools/mail-ingest.ts"],"names":[],"mappings":"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"}
|
|
@@ -76,7 +76,8 @@ Reads the COMPLETE body (not `bodyPreview`). `body.contentType` is `html` or `te
|
|
|
76
76
|
{
|
|
77
77
|
id: string;
|
|
78
78
|
subject: string | null;
|
|
79
|
-
from: string | null;
|
|
79
|
+
from: string | null; // from.emailAddress.address
|
|
80
|
+
fromName: string | null; // from.emailAddress.name (additive) — the sender display name outlook-mail-ingest carries into the archive
|
|
80
81
|
to: string[]; // toRecipients[].emailAddress.address
|
|
81
82
|
cc: string[];
|
|
82
83
|
receivedDateTime: string;
|
|
@@ -124,6 +125,14 @@ Recoverable — moves to Deleted Items, never hard-deletes or expunges. An id al
|
|
|
124
125
|
|
|
125
126
|
**Returned shape:** `{ moved: string[]; notMoved: string[] }`.
|
|
126
127
|
|
|
128
|
+
## outlook-mail-ingest
|
|
129
|
+
|
|
130
|
+
**No direct Graph mutation.** Per approved message it calls `runMailFetchBody`'s `GET /me/messages/{id}?$select=…,body` to read the full body + envelope (including `conversationId` and the additive `fromName`). The graph write is delegated: threads are grouped by `conversationId`, participants resolve closed-set against Neo4j (`UNWIND $addresses … WHERE (p:Person OR p:AdminUser) AND p.accountId=$accountId AND toLower(p.email)=addr`), and each resolvable thread is written by spawning `plugins/memory/bin/conversation-archive-ingest.sh <thread.json> --source email --participant-person-ids <elementIds> --scope admin --session-id outlook-<uuid>`. The thread JSON is `[{from:{name,email}, date, bodyText}]`, the shape the shared `email` normaliser consumes. An unresolved From/To/Cc address skips its whole thread; no `:Person` is auto-created. This is the plugin's only Neo4j coupling (`neo4j-driver`, `lib/neo4j.ts`).
|
|
131
|
+
|
|
132
|
+
**Input:** `{ decisions: [{ messageId, disposition: "ingest" | "discard" }], mailbox? }`. Refuses an empty array and a duplicate messageId.
|
|
133
|
+
|
|
134
|
+
**Returned shape:** a plain-text summary — ingested/discarded counts, threads dispatched/skipped, and any unresolved addresses.
|
|
135
|
+
|
|
127
136
|
## outlook-mail-otp-extract
|
|
128
137
|
|
|
129
138
|
**Endpoints:** `GET /me/mailFolders/Inbox/messages?$top=15&$orderby=receivedDateTime DESC&$select=id,subject,from,receivedDateTime` to list candidates, then `outlook-mail-fetch-body`'s `GET /me/messages/{id}?$select=…,body` per sender-matched candidate. Scans immediately, then polls every 5 s until a code is found or `timeout` seconds (default 60) elapse. `extractOtpFromText` is shared verbatim with the `email` plugin.
|
|
@@ -60,6 +60,10 @@ The revoke path below is scoped to one specific, visible failure. It is not a ge
|
|
|
60
60
|
- `outlook-mail-reply messageId=<id> body=<text>` — reply in-thread. Threads natively (the original conversation is preserved). `replyAll=true` replies to the sender and every original recipient; `cc`/`bcc` add recipients; `attachments` is an array of file paths inside the account directory (up to 25 MB per file). The body is plain text, prepended above the quoted original. Needs `Mail.ReadWrite` + `Mail.Send`.
|
|
61
61
|
- `outlook-mail-delete ids=[<id>...]` — move messages to Deleted Items. RECOVERABLE: it never hard-deletes or expunges, so recovery is possible from the mailbox's Deleted Items. Pass the ids from a prior list/search. An id already gone is reported not-moved without failing the rest. Needs `Mail.ReadWrite`.
|
|
62
62
|
|
|
63
|
+
## Ingesting mail into memory
|
|
64
|
+
|
|
65
|
+
Writing operator-reviewed messages into the business graph is the `outlook-mail-ingest` skill (its own SKILL.md), which drives the list, summarise, ask, ingest loop over `outlook-mail-ingest`.
|
|
66
|
+
|
|
63
67
|
## One-time codes (OTP)
|
|
64
68
|
|
|
65
69
|
- `outlook-mail-otp-extract sender=<domain>` — poll the inbox for a verification code from a sender (e.g. `cloudflare.com`). Optional `subjectPattern` (regex) and `timeout` (seconds, default 60). Reads full bodies to extract the code. Used during service authentication.
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: outlook-mail-ingest
|
|
3
|
+
description: "Operator-initiated Outlook mail ingestion. Activate when the operator asks to check, triage, or pull Outlook mail into memory ('check my Outlook', 'ingest these Outlook messages', 'pull that thread into the graph'). Drives a list, summarise, ask, ingest loop using the outlook-mail-list / outlook-mail-search and outlook-mail-ingest tools. Human-in-the-loop: nothing enters the graph without an explicit operator decision per message."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Outlook mail ingestion
|
|
7
|
+
|
|
8
|
+
Invoked from `specialists:personal-assistant`.
|
|
9
|
+
|
|
10
|
+
Operator-initiated, human-in-the-loop ingestion of an Outlook mailbox into the business graph. Reviewed messages become `:ConversationArchive {source:'email'}` threads. A message enters the graph only when the operator says so, and only the ones they pick. There is no background poll, no automatic classifier, no silent writes.
|
|
11
|
+
|
|
12
|
+
This is the Microsoft Graph analogue of the IMAP `email-ingest` skill. It differs in one structural way: Outlook reads are stateless Graph calls, so there is no staged batch and no high-water mark. You list with the ordinary read tools and pass the exact message ids you want to `outlook-mail-ingest`.
|
|
13
|
+
|
|
14
|
+
## When to activate
|
|
15
|
+
|
|
16
|
+
Activate when the operator wants to bring Outlook mail into the agent's memory. Typical phrasings:
|
|
17
|
+
|
|
18
|
+
- "Check my Outlook."
|
|
19
|
+
- "Ingest these Outlook messages."
|
|
20
|
+
- "Pull that Outlook thread into the graph."
|
|
21
|
+
|
|
22
|
+
Do not activate for:
|
|
23
|
+
|
|
24
|
+
- Reading or searching mail already in the mailbox or the graph. Those are `outlook-mail-list`, `outlook-mail-search`, `outlook-mail-fetch-body`.
|
|
25
|
+
- Drafting or sending. Those are `outlook-draft`, `outlook-mail-reply`, `outlook-mail-send`.
|
|
26
|
+
- Setup, status, or OTP extraction. Those are direct tool calls.
|
|
27
|
+
|
|
28
|
+
## Flow
|
|
29
|
+
|
|
30
|
+
### 1. List
|
|
31
|
+
|
|
32
|
+
Call `outlook-mail-list` (or `outlook-mail-search` for a sender or subject filter). Both return a preview per message with its id, sender, subject, and `receivedDateTime`. They write nothing to the graph.
|
|
33
|
+
|
|
34
|
+
An account can hold more than one mailbox. When it does, every operational tool refuses unless it names one, and the refusal lists the connected mailboxes. That refusal means "say which mailbox", not "there is no mail". Resolve it with `outlook-mailbox-list`, then pass `mailbox` and carry on.
|
|
35
|
+
|
|
36
|
+
Reads page beyond the newest window. When a response carries a `nextCursor`, older messages remain behind it; pass the cursor back to page on. Absence of a `nextCursor` is the only thing that means you saw everything in range.
|
|
37
|
+
|
|
38
|
+
### 2. Summarise
|
|
39
|
+
|
|
40
|
+
Present the listed messages to the operator as a numbered or per-id summary. For each, surface the sender, the subject, and a one-line gist from the preview. Where a message is obviously one or the other, suggest a disposition ("newsletter, looks like discard"; "thread reply from a known correspondent, looks like ingest"). The suggestion is a hint, never an action; the operator decides.
|
|
41
|
+
|
|
42
|
+
There is no screener. If a message looks like phishing, say so in plain English so the operator can discard it by eye.
|
|
43
|
+
|
|
44
|
+
### 3. Ask
|
|
45
|
+
|
|
46
|
+
Ask the operator to confirm a disposition for every message you intend to ingest. Either a blanket call ("ingest all", "discard the rest") that you turn into the per-message map, or an explicit per-message choice ("ingest 1, 2, 4; discard 3"). If the operator answers ambiguously ("the work ones"), restate the messages you think they mean and confirm before proceeding. Never guess.
|
|
47
|
+
|
|
48
|
+
### 4. Ingest
|
|
49
|
+
|
|
50
|
+
Call `outlook-mail-ingest` with a `decisions` array: one `{ messageId, disposition }` per message, `disposition` being `ingest` or `discard`. The tool refuses an empty array and refuses a duplicate messageId, so pass a clean set with one disposition per id.
|
|
51
|
+
|
|
52
|
+
For each `ingest` message the tool fetches the full body and envelope, groups messages into threads by Graph `conversationId`, and resolves every From/To/Cc address closed-set against the graph. An address that does not already resolve to a `:Person` or `:AdminUser` for this account causes its whole thread to skip; the tool returns the unresolved addresses. It never creates a `:Person`.
|
|
53
|
+
|
|
54
|
+
On success the tool returns a one-line summary: how many were ingested, how many discarded, how many threads dispatched or skipped, and any unresolved addresses.
|
|
55
|
+
|
|
56
|
+
### 5. Confirm
|
|
57
|
+
|
|
58
|
+
Echo the tool's summary back to the operator in one sentence. If any thread was skipped for an unresolved address, tell the operator which address, and that adding that person to the graph and re-running will land the thread. If they want to draft a reply to anything just ingested, hand off to the Outlook compose tools.
|
|
59
|
+
|
|
60
|
+
## Edge cases
|
|
61
|
+
|
|
62
|
+
| Situation | Behaviour |
|
|
63
|
+
|-----------|-----------|
|
|
64
|
+
| The list returns zero messages | Tell the operator and stop. Do not call `outlook-mail-ingest`. |
|
|
65
|
+
| An address on a thread does not resolve | The thread is skipped and the address is returned. Surface it; the operator adds the person to the graph, then re-runs for that message. |
|
|
66
|
+
| Operator wants to ingest some now and review the rest later | Fine. Ids are explicit, so ingest exactly the ones decided now and list the rest again later. There is no high-water mark to advance and nothing is silently dropped. |
|
|
67
|
+
| Operator abandons mid-flow | Do not call `outlook-mail-ingest`. Nothing was staged and nothing changes. |
|
|
68
|
+
| A tool errors (Graph down, auth failure) | Surface the error verbatim. Do not retry silently. |
|
|
69
|
+
|
|
70
|
+
## Out of scope
|
|
71
|
+
|
|
72
|
+
- Automatic re-screening or classification. The operator is the screener.
|
|
73
|
+
- Scheduled or recurring ingestion. The operator initiates every cycle.
|
|
74
|
+
- Attachment ingest. This skill lands text threads only.
|
|
75
|
+
- Other channels. WhatsApp, IMAP email, and the public web have their own ingestion paths.
|
|
76
|
+
|
|
77
|
+
## Observability
|
|
78
|
+
|
|
79
|
+
Each ingest emits tagged lines the operator can grep:
|
|
80
|
+
|
|
81
|
+
- `[outlook-mcp] mail-ingest op=ingest id=<id> conversationId=<id> disposition=ingest` per approved message.
|
|
82
|
+
- `[outlook-mcp] mail-ingest op=thread-dispatched root=<key> messages=<n> participants=<n>` per landed thread.
|
|
83
|
+
- `[outlook-mcp] mail-ingest op=summary ingested=<n> discarded=<m> threadsDispatched=<n> threadsSkipped=<n> unresolved=<n>` once per call.
|
|
84
|
+
|
|
85
|
+
A complete cycle is greppable as the `[outlook-mcp] mail-ingest` lines for one session. A `threadsSkipped` above zero with an `unresolved` count is the closed-set resolution refusing an unknown participant, not a failure.
|
|
@@ -13,6 +13,8 @@ PASS=0; FAIL=0; FAILED=()
|
|
|
13
13
|
assert_grep() { if printf '%s' "$2" | grep -qF "$1"; then PASS=$((PASS+1)); else FAIL=$((FAIL+1)); FAILED+=("$3: expected to find [$1]"); fi; }
|
|
14
14
|
assert_nogrep() { if printf '%s' "$2" | grep -qF "$1"; then FAIL=$((FAIL+1)); FAILED+=("$3: expected NOT to find [$1]"); else PASS=$((PASS+1)); fi; }
|
|
15
15
|
assert_eq() { if [ "$1" = "$2" ]; then PASS=$((PASS+1)); else FAIL=$((FAIL+1)); FAILED+=("$3: expected [$2] got [$1]"); fi; }
|
|
16
|
+
assert_dir() { if [ -d "$1" ]; then PASS=$((PASS+1)); else FAIL=$((FAIL+1)); FAILED+=("$2: expected directory [$1]"); fi; }
|
|
17
|
+
assert_nodir() { if [ -d "$1" ]; then FAIL=$((FAIL+1)); FAILED+=("$2: expected NO directory [$1]"); else PASS=$((PASS+1)); fi; }
|
|
16
18
|
|
|
17
19
|
. "$PLAT_SCRIPTS/lib/account-schema-owned-dirs.sh"
|
|
18
20
|
|
|
@@ -156,21 +158,63 @@ assert_eq "$(shasum "$A_C/SCHEMA.md" | awk '{print $1}')" "$B_C" "con-idempotent
|
|
|
156
158
|
RCS="$(PROJECT_DIR="$PROJECT_DIR" python3 "$PLAT_SCRIPTS/lib/account-schema-owned-dirs.py" reconcile "$A_C")"
|
|
157
159
|
assert_grep "ontologyEntity=Supplier bucket=suppliers present=true" "$RCS" "con-supplier-root-present"
|
|
158
160
|
|
|
159
|
-
# --- estate-agent vertical:
|
|
161
|
+
# --- estate-agent vertical: Property is the sole root; Listing (and its own
|
|
162
|
+
# children Viewing/Offer) nest, mirroring Quote<-Job in construction ---
|
|
160
163
|
T_E="$(make_vertical_tree '["real-agent"]' 'schema-estate-agent')"; A_E="$(make_account "$T_E")"
|
|
161
164
|
export PROJECT_DIR="$T_E/platform"
|
|
162
|
-
merge_owned_dirs_into_schema "$A_E"
|
|
165
|
+
OUT_E="$(merge_owned_dirs_into_schema "$A_E")"
|
|
166
|
+
assert_grep "domainBuckets=properties" "$OUT_E" "ea-domain-log"
|
|
167
|
+
assert_grep "roots=properties" "$OUT_E" "ea-roots-log"
|
|
168
|
+
assert_grep "nested=Listing<-Property,Viewing<-Listing,Offer<-Listing" "$OUT_E" "ea-nested-log"
|
|
163
169
|
ALLOWED_E="$(awk '/^```allowed-top-level$/{f=1;next} /^```$/{f=0} f' "$A_E/SCHEMA.md")"
|
|
164
|
-
#
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
for d in viewings offers; do
|
|
170
|
+
# Property (blank Owner) is the only root bucket.
|
|
171
|
+
assert_grep "properties" "$ALLOWED_E" "ea-allow-properties"
|
|
172
|
+
# Listing and its children nest; none is a root bucket.
|
|
173
|
+
for d in listings viewings offers; do
|
|
169
174
|
assert_nogrep "$d" "$ALLOWED_E" "ea-noroot-$d"
|
|
170
175
|
done
|
|
171
176
|
assert_nogrep "jobs" "$ALLOWED_E" "ea-no-sitedesk-jobs"
|
|
172
177
|
# The suppliers/ bucket is construction-only; it must not leak into another vertical.
|
|
173
178
|
assert_nogrep "suppliers" "$ALLOWED_E" "ea-no-suppliers"
|
|
179
|
+
# The descriptive region tells the agent Listing records live under properties/.
|
|
180
|
+
assert_grep '`Listing` records live under `properties/` (owned by `Property`), not a root bucket.' "$(cat "$A_E/SCHEMA.md")" "ea-nested-line"
|
|
181
|
+
|
|
182
|
+
# --- roots subcommand + seed_domain_root_dirs: buckets materialise on disk ---
|
|
183
|
+
# estate-agent (PROJECT_DIR still $T_E/platform): properties/ is created.
|
|
184
|
+
ROOTS_E="$(PROJECT_DIR="$T_E/platform" python3 "$PLAT_SCRIPTS/lib/account-schema-owned-dirs.py" roots)"
|
|
185
|
+
assert_grep "properties" "$ROOTS_E" "ea-roots-cmd"
|
|
186
|
+
assert_nogrep "listings" "$ROOTS_E" "ea-roots-cmd-no-listings"
|
|
187
|
+
SEED_E="$(seed_domain_root_dirs "$A_E")"
|
|
188
|
+
assert_grep "seeded-roots=properties" "$SEED_E" "ea-seed-log"
|
|
189
|
+
assert_dir "$A_E/properties" "ea-seed-dir"
|
|
190
|
+
# Idempotent: a second run creates nothing.
|
|
191
|
+
SEED_E2="$(seed_domain_root_dirs "$A_E")"
|
|
192
|
+
assert_grep "seeded-roots=none" "$SEED_E2" "ea-seed-idempotent"
|
|
193
|
+
|
|
194
|
+
# construction: every root bucket is created; nested entities are not.
|
|
195
|
+
export PROJECT_DIR="$T_C/platform"
|
|
196
|
+
A_SEED_C="$(make_account "$T_C")"
|
|
197
|
+
ROOTS_C="$(PROJECT_DIR="$T_C/platform" python3 "$PLAT_SCRIPTS/lib/account-schema-owned-dirs.py" roots)"
|
|
198
|
+
for d in jobs customers customer-sites assets parts suppliers ppm-contracts; do
|
|
199
|
+
assert_grep "$d" "$ROOTS_C" "con-roots-cmd-$d"
|
|
200
|
+
done
|
|
201
|
+
seed_domain_root_dirs "$A_SEED_C" >/dev/null
|
|
202
|
+
for d in jobs customers customer-sites assets parts suppliers ppm-contracts; do
|
|
203
|
+
assert_dir "$A_SEED_C/$d" "con-seed-dir-$d"
|
|
204
|
+
done
|
|
205
|
+
for d in quotes visits purchase-orders; do
|
|
206
|
+
assert_nodir "$A_SEED_C/$d" "con-seed-nonested-$d"
|
|
207
|
+
done
|
|
208
|
+
|
|
209
|
+
# The all-accounts sweep seeds an existing account's root buckets too, so a
|
|
210
|
+
# sub-account (provisioned once at creation) gains properties/ on upgrade.
|
|
211
|
+
export PROJECT_DIR="$T_E/platform"
|
|
212
|
+
SWEEP_ACCTS="$(mktemp -d)"; mkdir -p "$SWEEP_ACCTS/ea1"
|
|
213
|
+
cp "$T_E/platform/templates/account-schema/SCHEMA.md" "$SWEEP_ACCTS/ea1/SCHEMA.md"
|
|
214
|
+
printf '{"accountId":"ea1","role":"client"}\n' > "$SWEEP_ACCTS/ea1/account.json"
|
|
215
|
+
SWEEP_E="$(reconcile_all_accounts_owned_dirs "$SWEEP_ACCTS" 2>&1)"
|
|
216
|
+
assert_grep "seeded-roots=properties" "$SWEEP_E" "sweep-seed-log"
|
|
217
|
+
assert_dir "$SWEEP_ACCTS/ea1/properties" "sweep-seed-properties-dir"
|
|
174
218
|
|
|
175
219
|
# --- no vertical declared: generic base only ---
|
|
176
220
|
T_N="$(make_tree '[]')"; A_N="$(make_account "$T_N")"
|
|
@@ -20,8 +20,11 @@ export USERS_FILE="/nonexistent/users.json"
|
|
|
20
20
|
|
|
21
21
|
# Fresh account -> role=house stamped
|
|
22
22
|
T1=$(mktemp -d); A1="$T1/acct-house"
|
|
23
|
-
provision_account_dir "$A1" "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" "house" >/dev/null
|
|
23
|
+
OUT1="$(provision_account_dir "$A1" "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" "house" 2>/dev/null)"
|
|
24
24
|
assert_eq "$(role_of "$A1/account.json")" "house" "fresh-house-role"
|
|
25
|
+
# Task 1938 — provision seeds the vertical's root domain buckets; the log line
|
|
26
|
+
# proves seed_domain_root_dirs ran (bucket set depends on the brand's vertical).
|
|
27
|
+
assert_eq "$(printf '%s' "$OUT1" | grep -c 'seeded-roots=')" "1" "fresh-seed-roots-logged"
|
|
25
28
|
assert_eq "$(ms_of "$A1/account.json")" "False" "fresh-managedService-default"
|
|
26
29
|
# Task 1483 — the WhatsApp passive requirement-intake identity is seeded, non-empty.
|
|
27
30
|
assert_nonempty "$A1/agents/passive/IDENTITY.md" "passive-identity-seeded"
|
|
@@ -410,9 +410,19 @@ def reconcile(project_dir, account_dir):
|
|
|
410
410
|
f"bucket={b['dir']} expectedAtRoot=false stray={is_stray}")
|
|
411
411
|
|
|
412
412
|
|
|
413
|
+
def roots(project_dir):
|
|
414
|
+
"""Print each root domain bucket dir (blank/absent Owner) of the brand's
|
|
415
|
+
vertical, one per line, in table order. Empty when no vertical is declared.
|
|
416
|
+
Provision consumes this to mkdir the operator-data buckets so they exist as
|
|
417
|
+
directories, not just allowed names."""
|
|
418
|
+
for b in resolve_domain_buckets(project_dir):
|
|
419
|
+
if _is_root(b["owner"]):
|
|
420
|
+
print(b["dir"])
|
|
421
|
+
|
|
422
|
+
|
|
413
423
|
def main():
|
|
414
424
|
if len(sys.argv) < 2:
|
|
415
|
-
sys.exit("usage: account-schema-owned-dirs.py {resolve|merge|reconcile} [account_dir]")
|
|
425
|
+
sys.exit("usage: account-schema-owned-dirs.py {resolve|merge|reconcile|roots} [account_dir]")
|
|
416
426
|
cmd = sys.argv[1]
|
|
417
427
|
pd = _project_dir()
|
|
418
428
|
if cmd == "resolve":
|
|
@@ -421,6 +431,8 @@ def main():
|
|
|
421
431
|
merge(pd, sys.argv[2])
|
|
422
432
|
elif cmd == "reconcile":
|
|
423
433
|
reconcile(pd, sys.argv[2])
|
|
434
|
+
elif cmd == "roots":
|
|
435
|
+
roots(pd)
|
|
424
436
|
else:
|
|
425
437
|
sys.exit(f"unknown command: {cmd}")
|
|
426
438
|
|
|
@@ -17,9 +17,30 @@ merge_owned_dirs_into_schema() {
|
|
|
17
17
|
echo " [acct-schema] op=seed-owned-dirs ${_out}"
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
+
# seed_domain_root_dirs <account_dir>
|
|
21
|
+
# mkdir each root domain bucket the brand's vertical projects (Property ->
|
|
22
|
+
# properties/ for estate-agent, Job/Customer/... for construction), so the
|
|
23
|
+
# operator-data buckets exist as directories, not just allowed names. Idempotent.
|
|
24
|
+
# Logs the buckets created so a provision can be audited from its log.
|
|
25
|
+
seed_domain_root_dirs() {
|
|
26
|
+
local _acct="$1"
|
|
27
|
+
local _created=""
|
|
28
|
+
local _d
|
|
29
|
+
while IFS= read -r _d; do
|
|
30
|
+
[ -n "$_d" ] || continue
|
|
31
|
+
if [ ! -d "$_acct/$_d" ]; then
|
|
32
|
+
mkdir -p "$_acct/$_d"
|
|
33
|
+
_created="${_created:+$_created,}$_d"
|
|
34
|
+
fi
|
|
35
|
+
done < <(PROJECT_DIR="$PROJECT_DIR" python3 "$_ACCT_SCHEMA_PY" roots 2>/dev/null)
|
|
36
|
+
echo " [acct-schema] seeded-roots=${_created:-none}"
|
|
37
|
+
}
|
|
38
|
+
|
|
20
39
|
# reconcile_all_accounts_owned_dirs <accounts_dir>
|
|
21
40
|
# Standing check + backfill: for every account dir with an account.json, log the
|
|
22
|
-
# pre-merge present state of each declared owned dir,
|
|
41
|
+
# pre-merge present state of each declared owned dir, merge (backfill), then seed
|
|
42
|
+
# the vertical's root buckets so an existing account (sub-accounts are only
|
|
43
|
+
# provisioned once, at creation) gains the same directories a fresh one gets.
|
|
23
44
|
reconcile_all_accounts_owned_dirs() {
|
|
24
45
|
local _accts="$1"
|
|
25
46
|
[ -d "$_accts" ] || return 0
|
|
@@ -29,5 +50,6 @@ reconcile_all_accounts_owned_dirs() {
|
|
|
29
50
|
PROJECT_DIR="$PROJECT_DIR" python3 "$_ACCT_SCHEMA_PY" reconcile "$_acct" 2>/dev/null \
|
|
30
51
|
| while IFS= read -r _line; do echo " [acct-schema] op=reconcile ${_line}"; done
|
|
31
52
|
merge_owned_dirs_into_schema "$_acct"
|
|
53
|
+
seed_domain_root_dirs "$_acct"
|
|
32
54
|
done
|
|
33
55
|
}
|
|
@@ -45,6 +45,11 @@ provision_account_dir() {
|
|
|
45
45
|
# seeded SCHEMA.md so the guard admits them (e.g. quoting/ on SiteDesk).
|
|
46
46
|
merge_owned_dirs_into_schema "$ACCOUNT_DIR"
|
|
47
47
|
|
|
48
|
+
# Create the vertical's root domain buckets on disk (Property -> properties/
|
|
49
|
+
# for estate-agent, Job/Customer/... for construction) so they are present
|
|
50
|
+
# directories, not just allowed names the operator never sees.
|
|
51
|
+
seed_domain_root_dirs "$ACCOUNT_DIR"
|
|
52
|
+
|
|
48
53
|
# Claude Code discovers project-level .claude/ relative to the nearest .git
|
|
49
54
|
# root. Without a .git in the account dir it traverses up to ~/maxy/.git and
|
|
50
55
|
# misses accountDir/.claude/. Initialise a repo so the account dir IS the root.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canonical-tool-names.generated.d.ts","sourceRoot":"","sources":["../src/canonical-tool-names.generated.ts"],"names":[],"mappings":"AAQA,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB,EAAE,SAAS,MAAM,EAyB7C,CAAA;AAED,gEAAgE;AAChE,eAAO,MAAM,yBAAyB,EAAE,SAAS,MAAM,
|
|
1
|
+
{"version":3,"file":"canonical-tool-names.generated.d.ts","sourceRoot":"","sources":["../src/canonical-tool-names.generated.ts"],"names":[],"mappings":"AAQA,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB,EAAE,SAAS,MAAM,EAyB7C,CAAA;AAED,gEAAgE;AAChE,eAAO,MAAM,yBAAyB,EAAE,SAAS,MAAM,EA+TtD,CAAA"}
|
package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js
CHANGED
|
@@ -260,6 +260,7 @@ export const CANONICAL_MAXY_TOOL_NAMES = [
|
|
|
260
260
|
"mcp__plugin_outlook_outlook__outlook-mail-attachment",
|
|
261
261
|
"mcp__plugin_outlook_outlook__outlook-mail-delete",
|
|
262
262
|
"mcp__plugin_outlook_outlook__outlook-mail-fetch-body",
|
|
263
|
+
"mcp__plugin_outlook_outlook__outlook-mail-ingest",
|
|
263
264
|
"mcp__plugin_outlook_outlook__outlook-mail-list",
|
|
264
265
|
"mcp__plugin_outlook_outlook__outlook-mail-otp-extract",
|
|
265
266
|
"mcp__plugin_outlook_outlook__outlook-mail-reply",
|
package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canonical-tool-names.generated.js","sourceRoot":"","sources":["../src/canonical-tool-names.generated.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"canonical-tool-names.generated.js","sourceRoot":"","sources":["../src/canonical-tool-names.generated.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ name: personal-assistant
|
|
|
3
3
|
description: "Platform settings, messaging channels (Telegram, WhatsApp, email, Outlook), and browser automation, plus mechanical calendar subtasks you hand it with the facts already resolved (export these event IDs to .ics, parse this inbound .ics). Delegate when the work is configuring the platform, sending or reading messages, or driving a browser. Do not delegate calendar reasoning or an availability-affecting booking: only your admin session sees the connector-backed real calendar, so the specialist would answer from the internal scheduling store alone and miss it. You own what is on the calendar and what booking against it does."
|
|
4
4
|
summary: "Handles the operational tasks you'd give a personal assistant: scheduling meetings, managing your platform settings, connecting messaging channels, and completing browser-based tasks on your behalf."
|
|
5
5
|
model: claude-sonnet-5
|
|
6
|
-
tools: Skill, mcp__plugin_admin_admin__system-status, mcp__plugin_admin_admin__brand-settings, mcp__plugin_admin_admin__account-manage, mcp__plugin_admin_admin__account-update, mcp__plugin_admin_admin__logs-read, mcp__plugin_admin_admin__plugin-read, mcp__plugin_admin_admin__wifi, mcp__plugin_contacts_contacts__contact-create, mcp__plugin_contacts_contacts__contact-lookup, mcp__plugin_contacts_contacts__contact-update, mcp__plugin_contacts_contacts__contact-delete, mcp__plugin_contacts_contacts__contact-list, mcp__plugin_contacts_contacts__contact-export, mcp__plugin_contacts_contacts__contact-erase, mcp__plugin_contacts_contacts__group-create, mcp__plugin_contacts_contacts__group-manage, mcp__plugin_telegram_telegram__message, mcp__plugin_telegram_telegram__message-history, mcp__plugin_telegram_telegram__telegram-webhook-register, mcp__plugin_whatsapp_whatsapp__whatsapp-login-start, mcp__plugin_whatsapp_whatsapp__whatsapp-login-wait, mcp__plugin_whatsapp_whatsapp__whatsapp-status, mcp__plugin_whatsapp_whatsapp__whatsapp-disconnect, mcp__plugin_whatsapp_whatsapp__whatsapp-config, mcp__plugin_whatsapp_whatsapp__whatsapp-activity, mcp__plugin_whatsapp_whatsapp__whatsapp-conversations, mcp__plugin_whatsapp_whatsapp__whatsapp-messages, mcp__plugin_whatsapp_whatsapp__whatsapp-conversation-graph-state, mcp__plugin_whatsapp_whatsapp__whatsapp-group-info, mcp__plugin_whatsapp_whatsapp__whatsapp-send-admin, mcp__plugin_whatsapp_whatsapp__whatsapp-reply, mcp__plugin_email_email__email-provider-info, mcp__plugin_email_email__email-setup, mcp__plugin_email_email__email-read, mcp__plugin_email_email__email-fetch-body, mcp__plugin_email_email__email-fetch-attachment, mcp__plugin_email_email__email-send, mcp__plugin_email_email__email-draft, mcp__plugin_email_email__email-draft-edit, mcp__plugin_email_email__email-draft-send, mcp__plugin_email_email__email-reply, mcp__plugin_email_email__email-search, mcp__plugin_email_email__email-delete, mcp__plugin_email_email__email-graph-query, mcp__plugin_email_email__email-otp-extract, mcp__plugin_email_email__email-status, mcp__plugin_email_email__email-fetch, mcp__plugin_email_email__email-ingest, mcp__plugin_outlook_outlook__outlook-account-register, mcp__plugin_outlook_outlook__outlook-account-register-poll, mcp__plugin_outlook_outlook__outlook-mail-list, mcp__plugin_outlook_outlook__outlook-mail-search, mcp__plugin_outlook_outlook__outlook-mail-fetch-body, mcp__plugin_outlook_outlook__outlook-mail-attachment, mcp__plugin_outlook_outlook__outlook-mail-reply, mcp__plugin_outlook_outlook__outlook-mail-delete, mcp__plugin_outlook_outlook__outlook-mail-otp-extract, mcp__plugin_outlook_outlook__outlook-mail-send, mcp__plugin_outlook_outlook__outlook-draft, mcp__plugin_outlook_outlook__outlook-draft-edit, mcp__plugin_outlook_outlook__outlook-draft-send, mcp__plugin_outlook_outlook__outlook-calendar-list, mcp__plugin_outlook_outlook__outlook-calendar-event, mcp__plugin_outlook_outlook__outlook-calendar-create, mcp__plugin_outlook_outlook__outlook-calendar-update, mcp__plugin_outlook_outlook__outlook-calendar-cancel, mcp__plugin_outlook_outlook__outlook-calendar-respond, mcp__plugin_outlook_outlook__outlook-calendar-freebusy, mcp__plugin_outlook_outlook__outlook-contacts-list, mcp__plugin_outlook_outlook__outlook-mailbox-info, mcp__plugin_outlook_outlook__outlook-mailbox-list, mcp__plugin_google_google__google-account-register, mcp__plugin_google_google__google-account-register-poll, mcp__plugin_google_google__google-account-register-submit, mcp__plugin_google_google__google-calendar-list, mcp__plugin_google_google__google-calendar-event, mcp__plugin_google_google__google-calendar-create, mcp__plugin_google_google__google-calendar-update, mcp__plugin_google_google__google-calendar-cancel, mcp__plugin_google_google__google-calendar-respond, mcp__plugin_google_google__google-calendar-freebusy, mcp__plugin_google_google__google-account-info, mcp__plugin_google_google__google-account-list, mcp__plugin_scheduling_scheduling__schedule-event, mcp__plugin_scheduling_scheduling__schedule-list, mcp__plugin_scheduling_scheduling__schedule-get, mcp__plugin_scheduling_scheduling__schedule-update, mcp__plugin_scheduling_scheduling__schedule-cancel, mcp__plugin_scheduling_scheduling__schedule-export-ics, mcp__plugin_scheduling_scheduling__schedule-import-ics, mcp__plugin_scheduling_scheduling__time-resolve, mcp__plugin_memory_memory__memory-search, mcp__plugin_memory_memory__profile-update, mcp__plugin_url-get_url-get__url-get, mcp__plugin_browser_browser__browser-render, mcp__plugin_browser_browser__browser-navigate, mcp__plugin_browser_browser__browser-snapshot, mcp__plugin_browser_browser__browser-click, mcp__plugin_browser_browser__browser-fill, mcp__plugin_browser_browser__browser-fill-form, mcp__plugin_browser_browser__browser-type, mcp__plugin_browser_browser__browser-press-key, mcp__plugin_browser_browser__browser-hover, mcp__plugin_browser_browser__browser-select-option, mcp__plugin_browser_browser__browser-wait-for, mcp__plugin_browser_browser__browser-handle-dialog, mcp__plugin_browser_browser__browser-evaluate, mcp__plugin_browser_browser__browser-console-messages, mcp__plugin_browser_browser__browser-tabs, mcp__plugin_browser_browser__browser-pdf-save, mcp__plugin_browser_browser__browser-screenshot, mcp__plugin_browser_browser__browser-resize
|
|
6
|
+
tools: Skill, mcp__plugin_admin_admin__system-status, mcp__plugin_admin_admin__brand-settings, mcp__plugin_admin_admin__account-manage, mcp__plugin_admin_admin__account-update, mcp__plugin_admin_admin__logs-read, mcp__plugin_admin_admin__plugin-read, mcp__plugin_admin_admin__wifi, mcp__plugin_contacts_contacts__contact-create, mcp__plugin_contacts_contacts__contact-lookup, mcp__plugin_contacts_contacts__contact-update, mcp__plugin_contacts_contacts__contact-delete, mcp__plugin_contacts_contacts__contact-list, mcp__plugin_contacts_contacts__contact-export, mcp__plugin_contacts_contacts__contact-erase, mcp__plugin_contacts_contacts__group-create, mcp__plugin_contacts_contacts__group-manage, mcp__plugin_telegram_telegram__message, mcp__plugin_telegram_telegram__message-history, mcp__plugin_telegram_telegram__telegram-webhook-register, mcp__plugin_whatsapp_whatsapp__whatsapp-login-start, mcp__plugin_whatsapp_whatsapp__whatsapp-login-wait, mcp__plugin_whatsapp_whatsapp__whatsapp-status, mcp__plugin_whatsapp_whatsapp__whatsapp-disconnect, mcp__plugin_whatsapp_whatsapp__whatsapp-config, mcp__plugin_whatsapp_whatsapp__whatsapp-activity, mcp__plugin_whatsapp_whatsapp__whatsapp-conversations, mcp__plugin_whatsapp_whatsapp__whatsapp-messages, mcp__plugin_whatsapp_whatsapp__whatsapp-conversation-graph-state, mcp__plugin_whatsapp_whatsapp__whatsapp-group-info, mcp__plugin_whatsapp_whatsapp__whatsapp-send-admin, mcp__plugin_whatsapp_whatsapp__whatsapp-reply, mcp__plugin_email_email__email-provider-info, mcp__plugin_email_email__email-setup, mcp__plugin_email_email__email-read, mcp__plugin_email_email__email-fetch-body, mcp__plugin_email_email__email-fetch-attachment, mcp__plugin_email_email__email-send, mcp__plugin_email_email__email-draft, mcp__plugin_email_email__email-draft-edit, mcp__plugin_email_email__email-draft-send, mcp__plugin_email_email__email-reply, mcp__plugin_email_email__email-search, mcp__plugin_email_email__email-delete, mcp__plugin_email_email__email-graph-query, mcp__plugin_email_email__email-otp-extract, mcp__plugin_email_email__email-status, mcp__plugin_email_email__email-fetch, mcp__plugin_email_email__email-ingest, mcp__plugin_outlook_outlook__outlook-account-register, mcp__plugin_outlook_outlook__outlook-account-register-poll, mcp__plugin_outlook_outlook__outlook-mail-list, mcp__plugin_outlook_outlook__outlook-mail-search, mcp__plugin_outlook_outlook__outlook-mail-fetch-body, mcp__plugin_outlook_outlook__outlook-mail-attachment, mcp__plugin_outlook_outlook__outlook-mail-reply, mcp__plugin_outlook_outlook__outlook-mail-delete, mcp__plugin_outlook_outlook__outlook-mail-ingest, mcp__plugin_outlook_outlook__outlook-mail-otp-extract, mcp__plugin_outlook_outlook__outlook-mail-send, mcp__plugin_outlook_outlook__outlook-draft, mcp__plugin_outlook_outlook__outlook-draft-edit, mcp__plugin_outlook_outlook__outlook-draft-send, mcp__plugin_outlook_outlook__outlook-calendar-list, mcp__plugin_outlook_outlook__outlook-calendar-event, mcp__plugin_outlook_outlook__outlook-calendar-create, mcp__plugin_outlook_outlook__outlook-calendar-update, mcp__plugin_outlook_outlook__outlook-calendar-cancel, mcp__plugin_outlook_outlook__outlook-calendar-respond, mcp__plugin_outlook_outlook__outlook-calendar-freebusy, mcp__plugin_outlook_outlook__outlook-contacts-list, mcp__plugin_outlook_outlook__outlook-mailbox-info, mcp__plugin_outlook_outlook__outlook-mailbox-list, mcp__plugin_google_google__google-account-register, mcp__plugin_google_google__google-account-register-poll, mcp__plugin_google_google__google-account-register-submit, mcp__plugin_google_google__google-calendar-list, mcp__plugin_google_google__google-calendar-event, mcp__plugin_google_google__google-calendar-create, mcp__plugin_google_google__google-calendar-update, mcp__plugin_google_google__google-calendar-cancel, mcp__plugin_google_google__google-calendar-respond, mcp__plugin_google_google__google-calendar-freebusy, mcp__plugin_google_google__google-account-info, mcp__plugin_google_google__google-account-list, mcp__plugin_scheduling_scheduling__schedule-event, mcp__plugin_scheduling_scheduling__schedule-list, mcp__plugin_scheduling_scheduling__schedule-get, mcp__plugin_scheduling_scheduling__schedule-update, mcp__plugin_scheduling_scheduling__schedule-cancel, mcp__plugin_scheduling_scheduling__schedule-export-ics, mcp__plugin_scheduling_scheduling__schedule-import-ics, mcp__plugin_scheduling_scheduling__time-resolve, mcp__plugin_memory_memory__memory-search, mcp__plugin_memory_memory__profile-update, mcp__plugin_url-get_url-get__url-get, mcp__plugin_browser_browser__browser-render, mcp__plugin_browser_browser__browser-navigate, mcp__plugin_browser_browser__browser-snapshot, mcp__plugin_browser_browser__browser-click, mcp__plugin_browser_browser__browser-fill, mcp__plugin_browser_browser__browser-fill-form, mcp__plugin_browser_browser__browser-type, mcp__plugin_browser_browser__browser-press-key, mcp__plugin_browser_browser__browser-hover, mcp__plugin_browser_browser__browser-select-option, mcp__plugin_browser_browser__browser-wait-for, mcp__plugin_browser_browser__browser-handle-dialog, mcp__plugin_browser_browser__browser-evaluate, mcp__plugin_browser_browser__browser-console-messages, mcp__plugin_browser_browser__browser-tabs, mcp__plugin_browser_browser__browser-pdf-save, mcp__plugin_browser_browser__browser-screenshot, mcp__plugin_browser_browser__browser-resize
|
|
7
7
|
pattern_deliverable: false
|
|
8
8
|
---
|
|
9
9
|
|
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
6
|
<title>Activity — Maxy</title>
|
|
7
7
|
<link rel="icon" href="/favicon.ico">
|
|
8
|
-
<script type="module" crossorigin src="/assets/activity-
|
|
8
|
+
<script type="module" crossorigin src="/assets/activity-cVe5ZnG7.js"></script>
|
|
9
9
|
<link rel="modulepreload" crossorigin href="/assets/chunk-TPjIAO9U.js">
|
|
10
|
-
<link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-
|
|
11
|
-
<link rel="modulepreload" crossorigin href="/assets/AdminShell-
|
|
12
|
-
<link rel="modulepreload" crossorigin href="/assets/triangle-alert-
|
|
13
|
-
<link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-
|
|
10
|
+
<link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-DdctgpPL.js">
|
|
11
|
+
<link rel="modulepreload" crossorigin href="/assets/AdminShell-CiTHCp5t.js">
|
|
12
|
+
<link rel="modulepreload" crossorigin href="/assets/triangle-alert-DKZ69dOa.js">
|
|
13
|
+
<link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-DFnDNIDO.css">
|
|
14
14
|
<link rel="stylesheet" href="/brand-defaults.css">
|
|
15
15
|
</head>
|
|
16
16
|
<body>
|