@rubytech/create-maxy-code 0.1.278 → 0.1.280
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/payload/platform/plugins/admin/PLUGIN.md +1 -0
- package/payload/platform/plugins/admin/hooks/__tests__/prompt-optimiser-directive.test.sh +42 -0
- package/payload/platform/plugins/admin/hooks/prompt-optimiser-directive.sh +60 -15
- package/payload/platform/plugins/admin/mcp/dist/__tests__/e-sign-discoverable.test.d.ts +2 -0
- package/payload/platform/plugins/admin/mcp/dist/__tests__/e-sign-discoverable.test.d.ts.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/__tests__/e-sign-discoverable.test.js +54 -0
- package/payload/platform/plugins/admin/mcp/dist/__tests__/e-sign-discoverable.test.js.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/content-producer-authoring-skills.d.ts +2 -0
- package/payload/platform/plugins/admin/mcp/dist/content-producer-authoring-skills.d.ts.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/content-producer-authoring-skills.js +19 -0
- package/payload/platform/plugins/admin/mcp/dist/content-producer-authoring-skills.js.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/skill-resolution.d.ts.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/skill-resolution.js +2 -5
- package/payload/platform/plugins/admin/mcp/dist/skill-resolution.js.map +1 -1
- package/payload/platform/plugins/admin/skills/a4-print-documents/SKILL.md +2 -0
- package/payload/platform/plugins/admin/skills/access-manager/SKILL.md +2 -0
- package/payload/platform/plugins/admin/skills/admin-user-management/SKILL.md +2 -0
- package/payload/platform/plugins/admin/skills/business-profile/SKILL.md +2 -0
- package/payload/platform/plugins/admin/skills/capabilities-here/SKILL.md +2 -0
- package/payload/platform/plugins/admin/skills/datetime/SKILL.md +2 -0
- package/payload/platform/plugins/admin/skills/deck-pages/SKILL.md +2 -0
- package/payload/platform/plugins/admin/skills/file-presentation/SKILL.md +2 -0
- package/payload/platform/plugins/admin/skills/investigate/SKILL.md +2 -0
- package/payload/platform/plugins/admin/skills/plainly/SKILL.md +2 -0
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +2 -0
- package/payload/platform/plugins/admin/skills/plugin-management/SKILL.md +2 -0
- package/payload/platform/plugins/admin/skills/professional-document/SKILL.md +2 -0
- package/payload/platform/plugins/admin/skills/public-agent-manager/SKILL.md +2 -0
- package/payload/platform/plugins/admin/skills/qr-code/SKILL.md +2 -0
- package/payload/platform/plugins/admin/skills/session-management/SKILL.md +2 -0
- package/payload/platform/plugins/admin/skills/skill-builder/SKILL.md +2 -0
- package/payload/platform/plugins/admin/skills/specialist-management/SKILL.md +2 -0
- package/payload/platform/plugins/admin/skills/stream-log-review/SKILL.md +2 -0
- package/payload/platform/plugins/admin/skills/superpowers-sprint/SKILL.md +2 -0
- package/payload/platform/plugins/admin/skills/task/SKILL.md +2 -0
- package/payload/platform/plugins/admin/skills/update-knowledge/SKILL.md +2 -0
- package/payload/platform/plugins/admin/skills/upgrade/SKILL.md +2 -0
- package/payload/platform/plugins/aeo/skills/structured-answer/SKILL.md +2 -0
- package/payload/platform/plugins/business-assistant/PLUGIN.md +5 -0
- package/payload/platform/plugins/business-assistant/references/crm.md +6 -0
- package/payload/platform/plugins/business-assistant/references/site-lead-intake.md +52 -0
- package/payload/platform/plugins/business-assistant/skills/e-sign/SKILL.md +309 -0
- package/payload/platform/plugins/cloudflare/PLUGIN.md +1 -0
- package/payload/platform/plugins/cloudflare/references/api.md +17 -3
- package/payload/platform/plugins/cloudflare/references/dashboard-guide.md +10 -0
- package/payload/platform/plugins/cloudflare/references/web-analytics.md +64 -0
- package/payload/platform/plugins/cloudflare/skills/cloudflare/SKILL.md +3 -0
- package/payload/platform/plugins/deep-research/skills/academic-verify/SKILL.md +2 -0
- package/payload/platform/plugins/deep-research/skills/book-mirror/SKILL.md +2 -0
- package/payload/platform/plugins/deep-research/skills/data-research/SKILL.md +2 -0
- package/payload/platform/plugins/deep-research/skills/deep-research/SKILL.md +2 -0
- package/payload/platform/plugins/deep-research/skills/strategic-reading/SKILL.md +2 -0
- package/payload/platform/plugins/email/PLUGIN.md +2 -0
- package/payload/platform/plugins/email/mcp/dist/lib/imap.d.ts +42 -11
- package/payload/platform/plugins/email/mcp/dist/lib/imap.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/imap.js +123 -57
- package/payload/platform/plugins/email/mcp/dist/lib/imap.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-otp-extract.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-otp-extract.js +4 -2
- package/payload/platform/plugins/email/mcp/dist/tools/email-otp-extract.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-read.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-read.js +18 -8
- package/payload/platform/plugins/email/mcp/dist/tools/email-read.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-search.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-search.js +18 -8
- package/payload/platform/plugins/email/mcp/dist/tools/email-search.js.map +1 -1
- package/payload/platform/plugins/email/skills/email-composition/SKILL.md +2 -0
- package/payload/platform/plugins/email/skills/email-ingest/SKILL.md +2 -0
- package/payload/platform/plugins/graph-viewer/skills/render-graph/SKILL.md +2 -0
- package/payload/platform/plugins/linkedin-extension/skills/linkedin-extension/SKILL.md +2 -0
- package/payload/platform/plugins/memory/skills/archive-crawler/SKILL.md +2 -0
- package/payload/platform/plugins/memory/skills/challenge/SKILL.md +2 -0
- package/payload/platform/plugins/memory/skills/concept-synthesis/SKILL.md +2 -0
- package/payload/platform/plugins/memory/skills/connect/SKILL.md +2 -0
- package/payload/platform/plugins/memory/skills/conversational-memory/SKILL.md +2 -0
- package/payload/platform/plugins/memory/skills/emerge/SKILL.md +2 -0
- package/payload/platform/plugins/outlook/skills/outlook/SKILL.md +2 -0
- package/payload/platform/plugins/prompt-optimiser/skills/prompt-optimiser/SKILL.md +3 -1
- package/payload/platform/plugins/prompt-optimiser/skills/prompt-optimiser/__tests__/restatement-ladder.test.sh +21 -0
- package/payload/platform/plugins/scheduling/skills/briefing/SKILL.md +2 -0
- package/payload/platform/plugins/scheduling/skills/daily-prep/SKILL.md +2 -0
- package/payload/platform/plugins/slides/skills/deck-system/SKILL.md +2 -0
- package/payload/platform/plugins/whatsapp/skills/connect-whatsapp/SKILL.md +2 -0
- package/payload/platform/plugins/whatsapp/skills/manage-whatsapp-config/SKILL.md +2 -0
- package/payload/platform/plugins/work/skills/execute-task/SKILL.md +2 -0
- package/payload/platform/plugins/workflows/skills/workflow-manager/SKILL.md +2 -0
- package/payload/platform/scripts/lib/__tests__/admin-skills-bootstrap.test.sh +64 -0
- package/payload/platform/scripts/lib/admin-skills-bootstrap.sh +109 -0
- package/payload/platform/scripts/setup-account.sh +8 -0
- package/payload/platform/services/claude-session-manager/dist/fs-watcher.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/fs-watcher.js +43 -11
- package/payload/platform/services/claude-session-manager/dist/fs-watcher.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.js +74 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/index.js +48 -2
- package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/liveness-divergence.d.ts +19 -0
- package/payload/platform/services/claude-session-manager/dist/liveness-divergence.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/liveness-divergence.js +38 -0
- package/payload/platform/services/claude-session-manager/dist/liveness-divergence.js.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +8 -0
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +12 -0
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/scope-record.d.ts +11 -0
- package/payload/platform/services/claude-session-manager/dist/scope-record.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/scope-record.js +81 -0
- package/payload/platform/services/claude-session-manager/dist/scope-record.js.map +1 -0
- package/payload/platform/services/whatsapp-channel/dist/notification.d.ts +10 -0
- package/payload/platform/services/whatsapp-channel/dist/notification.d.ts.map +1 -1
- package/payload/platform/services/whatsapp-channel/dist/notification.js +22 -1
- package/payload/platform/services/whatsapp-channel/dist/notification.js.map +1 -1
- package/payload/platform/templates/agents/admin/IDENTITY.md +2 -6
- package/payload/server/public/assets/AdminShell-C6_5h1cC.js +1 -0
- package/payload/server/public/assets/{Checkbox-BY2lndUH.js → Checkbox-2reCESkb.js} +1 -1
- package/payload/server/public/assets/{admin-C364q_-g.js → admin-BpnsTEa3.js} +1 -1
- package/payload/server/public/assets/{arc-BW1WhwmV.js → arc-BgelqC_3.js} +1 -1
- package/payload/server/public/assets/architecture-YZFGNWBL-YM-TtgPY.js +1 -0
- package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-CLhiy6Rc.js → architectureDiagram-Q4EWVU46-BabnAZJm.js} +1 -1
- package/payload/server/public/assets/{blockDiagram-DXYQGD6D-ue7Vkc-Q.js → blockDiagram-DXYQGD6D-BJzZqNsy.js} +1 -1
- package/payload/server/public/assets/{browser-D66JrDpx.js → browser-fgBRZ5gK.js} +1 -1
- package/payload/server/public/assets/{c4Diagram-AHTNJAMY-dVjuUU_p.js → c4Diagram-AHTNJAMY-By-xuh9F.js} +1 -1
- package/payload/server/public/assets/channel-BRPH0atd.js +1 -0
- package/payload/server/public/assets/{chunk-2KRD3SAO-CKn-bEkI.js → chunk-2KRD3SAO-Gj2dSpBl.js} +1 -1
- package/payload/server/public/assets/{chunk-336JU56O-DLBJaAyL.js → chunk-336JU56O-2PXVPCUA.js} +2 -2
- package/payload/server/public/assets/chunk-426QAEUC-QhauxjvK.js +1 -0
- package/payload/server/public/assets/{chunk-4BX2VUAB-B2mSmC97.js → chunk-4BX2VUAB-9XIBlnC2.js} +1 -1
- package/payload/server/public/assets/{chunk-4TB4RGXK-DPHoq8nE.js → chunk-4TB4RGXK-Cr3mXPnI.js} +1 -1
- package/payload/server/public/assets/{chunk-55IACEB6-JLT9m7Hd.js → chunk-55IACEB6-Ccg46J3A.js} +1 -1
- package/payload/server/public/assets/{chunk-5FUZZQ4R-DjxdZ8WO.js → chunk-5FUZZQ4R-Cz9MvPKc.js} +1 -1
- package/payload/server/public/assets/{chunk-5PVQY5BW-BujJUZqf.js → chunk-5PVQY5BW-BleOdlgO.js} +1 -1
- package/payload/server/public/assets/{chunk-67CJDMHE-CCdP3Pdx.js → chunk-67CJDMHE-CyCYCQWy.js} +1 -1
- package/payload/server/public/assets/{chunk-7N4EOEYR-bXgVzdM9.js → chunk-7N4EOEYR-KpT3uHzH.js} +1 -1
- package/payload/server/public/assets/{chunk-AA7GKIK3-CYeDvY8B.js → chunk-AA7GKIK3-BfOzbuxq.js} +1 -1
- package/payload/server/public/assets/{chunk-BSJP7CBP-U0Fi-Ers.js → chunk-BSJP7CBP-Bq0M3wlv.js} +1 -1
- package/payload/server/public/assets/{chunk-CIAEETIT-C8QrV6Gg.js → chunk-CIAEETIT-CR-2dNaL.js} +1 -1
- package/payload/server/public/assets/{chunk-EDXVE4YY-DF2EBXie.js → chunk-EDXVE4YY-egUGMTOS.js} +1 -1
- package/payload/server/public/assets/{chunk-ENJZ2VHE-CoTooXpM.js → chunk-ENJZ2VHE-CQohBEFw.js} +1 -1
- package/payload/server/public/assets/{chunk-FMBD7UC4-DxAQS3UB.js → chunk-FMBD7UC4-DIxBUbLP.js} +1 -1
- package/payload/server/public/assets/{chunk-FOC6F5B3-CyIK3zeY.js → chunk-FOC6F5B3-C2694Zoq.js} +1 -1
- package/payload/server/public/assets/{chunk-ICPOFSXX-D8F-S9Bk.js → chunk-ICPOFSXX-DpXZKHyn.js} +2 -2
- package/payload/server/public/assets/{chunk-K5T4RW27-7GcDzjyJ.js → chunk-K5T4RW27-CUicG0Rp.js} +1 -1
- package/payload/server/public/assets/{chunk-KGLVRYIC-B7pAr9hf.js → chunk-KGLVRYIC-B5mPJhOr.js} +1 -1
- package/payload/server/public/assets/{chunk-LIHQZDEY-DEoU2jrz.js → chunk-LIHQZDEY-q81QhuMs.js} +1 -1
- package/payload/server/public/assets/{chunk-ORNJ4GCN-BwMFuN24.js → chunk-ORNJ4GCN-DgurdFZs.js} +1 -1
- package/payload/server/public/assets/{chunk-OYMX7WX6-C15Ps-tC.js → chunk-OYMX7WX6-CxqMRu2d.js} +1 -1
- package/payload/server/public/assets/chunk-QZHKN3VN-BDAQvtxz.js +1 -0
- package/payload/server/public/assets/{chunk-U2HBQHQK-BBPMxdAI.js → chunk-U2HBQHQK-BSLctJC9.js} +1 -1
- package/payload/server/public/assets/{chunk-X2U36JSP-xwRszlfe.js → chunk-X2U36JSP--0AUeeFl.js} +1 -1
- package/payload/server/public/assets/{chunk-XPW4576I-BA0a8Ygs.js → chunk-XPW4576I-D-hf9Bcn.js} +1 -1
- package/payload/server/public/assets/{chunk-YZCP3GAM-C4liAf7D.js → chunk-YZCP3GAM-PvOhSwI9.js} +1 -1
- package/payload/server/public/assets/{chunk-ZZ45TVLE-Cy3If_Rl.js → chunk-ZZ45TVLE-1zPUlNWz.js} +1 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-BJv89PB6.js +1 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DNUszH5M.js +1 -0
- package/payload/server/public/assets/clone-CREg9jLM.js +1 -0
- package/payload/server/public/assets/{cose-bilkent-S5V4N54A-Df_JmB8E.js → cose-bilkent-S5V4N54A-Cvo-gkBd.js} +1 -1
- package/payload/server/public/assets/{dagre-DKCdgCLD.js → dagre-CMHsNfjP.js} +1 -1
- package/payload/server/public/assets/{dagre-KV5264BT-DHZ3rA0O.js → dagre-KV5264BT-CM1DSx4E.js} +1 -1
- package/payload/server/public/assets/{data-uiOcPh8T.js → data-Cuynp6Y6.js} +1 -1
- package/payload/server/public/assets/{diagram-5BDNPKRD-XAci8Krv.js → diagram-5BDNPKRD-VDHiHwEI.js} +1 -1
- package/payload/server/public/assets/{diagram-G4DWMVQ6-DI6g5YJH.js → diagram-G4DWMVQ6-OKdufoeW.js} +1 -1
- package/payload/server/public/assets/{diagram-MMDJMWI5-D94oS42o.js → diagram-MMDJMWI5-Yg6QdCA1.js} +1 -1
- package/payload/server/public/assets/{diagram-TYMM5635-D_j5_oj_.js → diagram-TYMM5635-CpEMZQDu.js} +1 -1
- package/payload/server/public/assets/{dist-BmvZ8OaX.js → dist-811BIK0R.js} +1 -1
- package/payload/server/public/assets/{erDiagram-SMLLAGMA-DPx8cHxF.js → erDiagram-SMLLAGMA-Dw5gAkFM.js} +1 -1
- package/payload/server/public/assets/{flatten-Bo6YRmWl.js → flatten-BsWEYbBB.js} +1 -1
- package/payload/server/public/assets/{flowDiagram-DWJPFMVM-Cdfxz2_5.js → flowDiagram-DWJPFMVM-Cy_R1XHz.js} +1 -1
- package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-oregwFNl.js → ganttDiagram-T4ZO3ILL-BYARP_eH.js} +1 -1
- package/payload/server/public/assets/gitGraph-7Q5UKJZL-CtOPqykB.js +1 -0
- package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-BZI26T0o.js → gitGraphDiagram-UUTBAWPF-BGOe0unY.js} +1 -1
- package/payload/server/public/assets/{graph-BSHyF267.js → graph-Ddg24bjy.js} +2 -2
- package/payload/server/public/assets/{graph-labels-D5ecmK-Z.js → graph-labels-eOrWYy0R.js} +1 -1
- package/payload/server/public/assets/{graphlib-BuiXJGQr.js → graphlib-DaefxCga.js} +1 -1
- package/payload/server/public/assets/info-OMHHGYJF-Jba5enA8.js +1 -0
- package/payload/server/public/assets/infoDiagram-42DDH7IO-Df9BlkPA.js +2 -0
- package/payload/server/public/assets/{isEmpty-D6Kr-M1M.js → isEmpty-BWl67LAZ.js} +1 -1
- package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-DnBy6cze.js → ishikawaDiagram-UXIWVN3A-YrGuzpiI.js} +1 -1
- package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-DeYkJsvd.js → journeyDiagram-VCZTEJTY-EIykOcqg.js} +1 -1
- package/payload/server/public/assets/{kanban-definition-6JOO6SKY-BHuZmXiA.js → kanban-definition-6JOO6SKY-BR0TC6Je.js} +1 -1
- package/payload/server/public/assets/{line-BAjS0lyG.js → line-DPGcT5IM.js} +1 -1
- package/payload/server/public/assets/{linear-COm19-p7.js → linear-CPN03uSh.js} +1 -1
- package/payload/server/public/assets/{mermaid-parser.core-Cg06vNXY.js → mermaid-parser.core-D7Iu4c9M.js} +2 -2
- package/payload/server/public/assets/{mermaid.core-DkUCZA6N.js → mermaid.core-krXRpXn9.js} +3 -3
- package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-Gbaa7NRj.js → mindmap-definition-QFDTVHPH-HwiCtPzN.js} +1 -1
- package/payload/server/public/assets/{ordinal-BDi6f4xk.js → ordinal-krseTxxN.js} +1 -1
- package/payload/server/public/assets/packet-4T2RLAQJ-D_eWzeAP.js +1 -0
- package/payload/server/public/assets/pie-ZZUOXDRM-BDiy1Ob2.js +1 -0
- package/payload/server/public/assets/{pieDiagram-DEJITSTG-v7yUgLoq.js → pieDiagram-DEJITSTG-xodxyWLe.js} +1 -1
- package/payload/server/public/assets/{public-CTkj6UYK.js → public-xVaPcg6i.js} +3 -3
- package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-BpVlNbru.js → quadrantDiagram-34T5L4WZ-DuYYY4ZZ.js} +1 -1
- package/payload/server/public/assets/radar-PYXPWWZC-C5mlfmtg.js +1 -0
- package/payload/server/public/assets/{reduce-CGi9ik8i.js → reduce-tk-xY6Fv.js} +1 -1
- package/payload/server/public/assets/{requirementDiagram-MS252O5E-QrSZzaxF.js → requirementDiagram-MS252O5E-D0ta3kru.js} +1 -1
- package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-IVgJCKl1.js → sankeyDiagram-XADWPNL6-KdHdlzvT.js} +1 -1
- package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-DsN4J_nq.js → sequenceDiagram-FGHM5R23-DoSFUTQZ.js} +1 -1
- package/payload/server/public/assets/{src-DLEIsjER.js → src-Cpl1JzME.js} +1 -1
- package/payload/server/public/assets/{stateDiagram-FHFEXIEX-DN0-8ZrI.js → stateDiagram-FHFEXIEX-BLW0KiSA.js} +1 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-C5zlCV4X.js +1 -0
- package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-BLYu380r.js → timeline-definition-GMOUNBTQ-8QAzhYz1.js} +1 -1
- package/payload/server/public/assets/treeView-SZITEDCU-CM-9m-cS.js +1 -0
- package/payload/server/public/assets/treemap-W4RFUUIX-DDHPB-Xh.js +1 -0
- package/payload/server/public/assets/{useSelectionMode-98jrB9kD.css → useSelectionMode-BnRcJeg2.css} +1 -1
- package/payload/server/public/assets/{useSelectionMode-80iYuGPa.js → useSelectionMode-DlJsX-_X.js} +1 -1
- package/payload/server/public/assets/{vennDiagram-DHZGUBPP-Tfn8qVAB.js → vennDiagram-DHZGUBPP-BKvfScOi.js} +1 -1
- package/payload/server/public/assets/wardley-RL74JXVD-CUb3Br4q.js +1 -0
- package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-CeQNnKpT.js → wardleyDiagram-NUSXRM2D-DaMfDpJ3.js} +1 -1
- package/payload/server/public/assets/whatsapp-BE79pNh8.js +1 -0
- package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-H-IatOB_.js → xychartDiagram-5P7HB3ND-BIkNQlLa.js} +1 -1
- package/payload/server/public/browser.html +5 -5
- package/payload/server/public/data.html +6 -6
- package/payload/server/public/graph.html +7 -7
- package/payload/server/public/index.html +6 -6
- package/payload/server/public/public.html +5 -5
- package/payload/server/public/whatsapp.html +18 -0
- package/payload/server/server.js +5772 -5673
- package/payload/server/public/assets/AdminShell-BcHJy_Y2.js +0 -1
- package/payload/server/public/assets/architecture-YZFGNWBL-xHbVjatf.js +0 -1
- package/payload/server/public/assets/channel-1FBBBcz1.js +0 -1
- package/payload/server/public/assets/chunk-426QAEUC-CfdaOTNb.js +0 -1
- package/payload/server/public/assets/chunk-QZHKN3VN-CHE_iZO7.js +0 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q--mLJq--t.js +0 -1
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-C8TJtMFc.js +0 -1
- package/payload/server/public/assets/clone-UUs4PDQ1.js +0 -1
- package/payload/server/public/assets/gitGraph-7Q5UKJZL-CmHdoS27.js +0 -1
- package/payload/server/public/assets/info-OMHHGYJF-DTA9msO-.js +0 -1
- package/payload/server/public/assets/infoDiagram-42DDH7IO-C9cKcMg3.js +0 -2
- package/payload/server/public/assets/packet-4T2RLAQJ-6GjqIKgu.js +0 -1
- package/payload/server/public/assets/pie-ZZUOXDRM-T72DJ5JR.js +0 -1
- package/payload/server/public/assets/radar-PYXPWWZC-x-6xW1dE.js +0 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-DGDGYxGd.js +0 -1
- package/payload/server/public/assets/treeView-SZITEDCU-5-6wEryJ.js +0 -1
- package/payload/server/public/assets/treemap-W4RFUUIX-DF48Cc86.js +0 -1
- package/payload/server/public/assets/wardley-RL74JXVD-duKIa6Hq.js +0 -1
- /package/payload/server/public/assets/{_baseFor-Cam2PbSt.js → _baseFor-BHtDrjIo.js} +0 -0
- /package/payload/server/public/assets/{array-DYRGGQae.js → array-DetWRiSa.js} +0 -0
- /package/payload/server/public/assets/{chunk-CnGqDkHZ.js → chunk-CWOGyPgy.js} +0 -0
- /package/payload/server/public/assets/{cytoscape.esm-nWsJMTNI.js → cytoscape.esm-C9yNhe1u.js} +0 -0
- /package/payload/server/public/assets/{defaultLocale-Du1XY3Dp.js → defaultLocale-_WRwicXn.js} +0 -0
- /package/payload/server/public/assets/{init-B5BXBRcm.js → init-sTEcj9YX.js} +0 -0
- /package/payload/server/public/assets/{katex-HOUACuRw.js → katex-s61Rgv6l.js} +0 -0
- /package/payload/server/public/assets/{path-CNO468J-.js → path-B0Ik7Tu9.js} +0 -0
- /package/payload/server/public/assets/{rough.esm-DRO6hWPh.js → rough.esm-DKRO8IF-.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email-read.d.ts","sourceRoot":"","sources":["../../src/tools/email-read.ts"],"names":[],"mappings":"AAIA,UAAU,UAAU;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"email-read.d.ts","sourceRoot":"","sources":["../../src/tools/email-read.ts"],"names":[],"mappings":"AAIA,UAAU,UAAU;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAqFnE"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { loadCredentials } from "../lib/credentials.js";
|
|
2
|
-
import { fetchRecent, MAX_LIMIT, formatAttachmentsFooter } from "../lib/imap.js";
|
|
2
|
+
import { fetchRecent, MAX_LIMIT, formatAttachmentsFooter, resolveDefaultRecipients, formatRecipientFilterLine } from "../lib/imap.js";
|
|
3
3
|
import { getMessageArchiveHints } from "../lib/conversation-archive-lookup.js";
|
|
4
4
|
export async function emailRead(params) {
|
|
5
5
|
const result = await loadCredentials(params.accountId);
|
|
@@ -9,10 +9,12 @@ export async function emailRead(params) {
|
|
|
9
9
|
// Clamp limit to hard cap — silently, per spec
|
|
10
10
|
const requestedLimit = Math.max(1, params.limit ?? 20);
|
|
11
11
|
const limit = Math.min(requestedLimit, MAX_LIMIT);
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
|
|
15
|
-
const
|
|
12
|
+
// Recipient filter: an explicit `to` is a single-address filter; otherwise
|
|
13
|
+
// default to the owned login + any configured alias (see resolveDefaultRecipients).
|
|
14
|
+
// Coerce empty string to undefined to avoid matching nothing silently.
|
|
15
|
+
const explicitTo = params.to || undefined;
|
|
16
|
+
const to = explicitTo ? [explicitTo] : resolveDefaultRecipients(config);
|
|
17
|
+
const { messages, nextBeforeUid, recipientFilter } = await fetchRecent(config, password, {
|
|
16
18
|
limit,
|
|
17
19
|
sender: params.sender,
|
|
18
20
|
subjectPattern: params.subjectPattern,
|
|
@@ -36,7 +38,11 @@ export async function emailRead(params) {
|
|
|
36
38
|
filters.push(`to: ${params.to}`);
|
|
37
39
|
if (params.folder)
|
|
38
40
|
filters.push(`folder: ${params.folder}`);
|
|
39
|
-
|
|
41
|
+
const empty = `No messages found${filters.length > 0 ? ` matching ${filters.join(", ")}` : ""}.`;
|
|
42
|
+
// When every fetched envelope was dropped by the recipient filter, say so —
|
|
43
|
+
// "I can't see it" must never be indistinguishable from "it isn't there".
|
|
44
|
+
const filterLine = formatRecipientFilterLine(recipientFilter);
|
|
45
|
+
return filterLine ? `${empty}\n\n${filterLine}` : empty;
|
|
40
46
|
}
|
|
41
47
|
// Per-archive enrichment from :ConversationArchive {source:'email'}.
|
|
42
48
|
// Best-effort — failures and empty results degrade silently. Matches on
|
|
@@ -76,9 +82,13 @@ export async function emailRead(params) {
|
|
|
76
82
|
return entry + "\n---";
|
|
77
83
|
})
|
|
78
84
|
.join("\n\n");
|
|
85
|
+
let output = lines;
|
|
79
86
|
if (nextBeforeUid) {
|
|
80
|
-
|
|
87
|
+
output += `\n\nPagination: next_before_uid=${nextBeforeUid} (pass as before_uid to get older messages)`;
|
|
81
88
|
}
|
|
82
|
-
|
|
89
|
+
const filterLine = formatRecipientFilterLine(recipientFilter);
|
|
90
|
+
if (filterLine)
|
|
91
|
+
output += `\n\n${filterLine}`;
|
|
92
|
+
return output;
|
|
83
93
|
}
|
|
84
94
|
//# sourceMappingURL=email-read.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email-read.js","sourceRoot":"","sources":["../../src/tools/email-read.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"email-read.js","sourceRoot":"","sources":["../../src/tools/email-read.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email-search.d.ts","sourceRoot":"","sources":["../../src/tools/email-search.ts"],"names":[],"mappings":"AAIA,UAAU,YAAY;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"email-search.d.ts","sourceRoot":"","sources":["../../src/tools/email-search.ts"],"names":[],"mappings":"AAIA,UAAU,YAAY;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CA0EvE"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { loadCredentials } from "../lib/credentials.js";
|
|
2
|
-
import { searchMessages, MAX_LIMIT, formatAttachmentsFooter } from "../lib/imap.js";
|
|
2
|
+
import { searchMessages, MAX_LIMIT, formatAttachmentsFooter, resolveDefaultRecipients, formatRecipientFilterLine } from "../lib/imap.js";
|
|
3
3
|
import { getMessageArchiveHints } from "../lib/conversation-archive-lookup.js";
|
|
4
4
|
export async function emailSearch(params) {
|
|
5
5
|
const result = await loadCredentials(params.accountId);
|
|
@@ -9,10 +9,12 @@ export async function emailSearch(params) {
|
|
|
9
9
|
// Clamp limit to hard cap — silently, per spec
|
|
10
10
|
const requestedLimit = Math.max(1, params.limit ?? 20);
|
|
11
11
|
const limit = Math.min(requestedLimit, MAX_LIMIT);
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
|
|
15
|
-
const
|
|
12
|
+
// Recipient filter: an explicit `to` is a single-address filter; otherwise
|
|
13
|
+
// default to the owned login + any configured alias (see resolveDefaultRecipients).
|
|
14
|
+
// Coerce empty string to undefined to avoid matching nothing silently.
|
|
15
|
+
const explicitTo = params.to || undefined;
|
|
16
|
+
const to = explicitTo ? [explicitTo] : resolveDefaultRecipients(config);
|
|
17
|
+
const { messages, nextBeforeUid, recipientFilter } = await searchMessages(config, password, {
|
|
16
18
|
sender: params.sender,
|
|
17
19
|
subject: params.subject,
|
|
18
20
|
body: params.body,
|
|
@@ -24,7 +26,11 @@ export async function emailSearch(params) {
|
|
|
24
26
|
beforeUid: params.before_uid,
|
|
25
27
|
});
|
|
26
28
|
if (messages.length === 0) {
|
|
27
|
-
|
|
29
|
+
const empty = "No messages match the search criteria.";
|
|
30
|
+
// When every fetched envelope was dropped by the recipient filter, say so —
|
|
31
|
+
// "I can't see it" must never be indistinguishable from "it isn't there".
|
|
32
|
+
const filterLine = formatRecipientFilterLine(recipientFilter);
|
|
33
|
+
return filterLine ? `${empty}\n\n${filterLine}` : empty;
|
|
28
34
|
}
|
|
29
35
|
// Per-archive enrichment — see email-read.ts for semantics. Task 445.
|
|
30
36
|
const hintInput = messages
|
|
@@ -59,9 +65,13 @@ export async function emailSearch(params) {
|
|
|
59
65
|
return entry + "\n---";
|
|
60
66
|
})
|
|
61
67
|
.join("\n\n");
|
|
68
|
+
let output = lines;
|
|
62
69
|
if (nextBeforeUid) {
|
|
63
|
-
|
|
70
|
+
output += `\n\nPagination: next_before_uid=${nextBeforeUid} (pass as before_uid to get older messages)`;
|
|
64
71
|
}
|
|
65
|
-
|
|
72
|
+
const filterLine = formatRecipientFilterLine(recipientFilter);
|
|
73
|
+
if (filterLine)
|
|
74
|
+
output += `\n\n${filterLine}`;
|
|
75
|
+
return output;
|
|
66
76
|
}
|
|
67
77
|
//# sourceMappingURL=email-search.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email-search.js","sourceRoot":"","sources":["../../src/tools/email-search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"email-search.js","sourceRoot":"","sources":["../../src/tools/email-search.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,8 @@ description: "Conversational wrapper around the email plugin tools. Activate whe
|
|
|
5
5
|
|
|
6
6
|
# Email composition
|
|
7
7
|
|
|
8
|
+
Invoked from `specialists:personal-assistant`.
|
|
9
|
+
|
|
8
10
|
Conversational wrapper around the existing `email-*` tools. Drafting, threading, triage. **Human-in-the-loop only — every send is explicitly approved by the operator.** No drip sequences, no scheduled sends, no automatic categorisation.
|
|
9
11
|
|
|
10
12
|
## When to activate
|
|
@@ -5,6 +5,8 @@ description: "Operator-initiated email ingestion. Activate when the operator ask
|
|
|
5
5
|
|
|
6
6
|
# Email ingestion
|
|
7
7
|
|
|
8
|
+
Invoked from `specialists:personal-assistant`.
|
|
9
|
+
|
|
8
10
|
Operator-initiated, human-in-the-loop ingestion of the agent's IMAP inbox into the graph. New messages enter the knowledge graph **only** when the operator says so, and only the ones they pick. There is no background poll, no automatic classifier, no silent writes.
|
|
9
11
|
|
|
10
12
|
## When to activate
|
|
@@ -5,6 +5,8 @@ description: "Render an inline PNG of a Neo4j subgraph for the operator using th
|
|
|
5
5
|
|
|
6
6
|
# render-graph
|
|
7
7
|
|
|
8
|
+
Invoked by the admin agent directly.
|
|
9
|
+
|
|
8
10
|
When the operator asks for a picture of a subgraph:
|
|
9
11
|
|
|
10
12
|
1. Resolve the root node's `elementId` first — usually via `memory-search`
|
|
@@ -5,6 +5,8 @@ description: Payload contract and DOM-selector rules for the LinkedIn one-click
|
|
|
5
5
|
|
|
6
6
|
# LinkedIn Extension — payload & selectors
|
|
7
7
|
|
|
8
|
+
Invoked from `specialists:librarian`.
|
|
9
|
+
|
|
8
10
|
This skill carries two contracts. Neither is enforced by an LLM; both are enforced by the route schema and the extractor unit tests.
|
|
9
11
|
|
|
10
12
|
## 1. Wire payload
|
|
@@ -5,6 +5,8 @@ description: "Walks a folder of files the owner has accumulated over time (Downl
|
|
|
5
5
|
|
|
6
6
|
# Archive crawler
|
|
7
7
|
|
|
8
|
+
Invoked from `specialists:librarian`.
|
|
9
|
+
|
|
8
10
|
This skill imports volume in a controlled way. It walks a folder, classifies each file, asks the owner to filter, and routes only the approved set through the existing ingest skills. It does not invent a new write path; it sits in front of `document-ingest` and `conversation-archive` and gates them.
|
|
9
11
|
|
|
10
12
|
**Default parent.** This skill performs no graph writes itself. The downstream ingest skill it dispatches to (`document-ingest`, `conversation-archive`, or a per-source archive importer) is responsible for naming the parent in the canonical hierarchy `LocalBusiness → Project → KnowledgeDocument`. The operator's filter selection answers the parent question implicitly — "scan my Downloads for pricing notes" names the topical scope that the downstream skill resolves into a `:Project` anchor before any write.
|
|
@@ -5,6 +5,8 @@ description: "Stress-tests a claim against the operator's own graph. Retrieves n
|
|
|
5
5
|
|
|
6
6
|
# Challenge
|
|
7
7
|
|
|
8
|
+
Invoked by the admin agent directly.
|
|
9
|
+
|
|
8
10
|
This skill retrieves nodes from the operator's graph that contradict or qualify a given claim. It presents the strongest counter-case the graph can support. It reads only — it never writes.
|
|
9
11
|
|
|
10
12
|
## When to run
|
|
@@ -5,6 +5,8 @@ description: "Walks the knowledge documents already in the graph, clusters them
|
|
|
5
5
|
|
|
6
6
|
# Concept synthesis
|
|
7
7
|
|
|
8
|
+
Invoked from `specialists:librarian`.
|
|
9
|
+
|
|
8
10
|
This skill turns a pile of saved documents into a usable concept map. It reads what the graph already holds, groups related material, names the groups, and connects them back to their sources. It writes nothing without the owner's approval, and it never auto-merges across groups.
|
|
9
11
|
|
|
10
12
|
**Default parent.** Every `:Concept` node this skill creates is anchored to a `:Project` (when the scope is a project) or to the account's `:LocalBusiness` (when the scope is a topic phrase or date range that crosses projects). The parent is named at proposal time and shown in the per-cluster row the operator approves — a Concept with no project or LocalBusiness parent is a write defect, never an option.
|
|
@@ -5,6 +5,8 @@ description: "Finds the bridge between two topics or entities in the operator's
|
|
|
5
5
|
|
|
6
6
|
# Connect
|
|
7
7
|
|
|
8
|
+
Invoked by the admin agent directly.
|
|
9
|
+
|
|
8
10
|
This skill finds bridging nodes between two topics or entities in the operator's graph. It names the bridge and lists the nodes that form it. It reads only — it never writes.
|
|
9
11
|
|
|
10
12
|
## When to run
|
|
@@ -5,6 +5,8 @@ description: "Notice, store, and recall who the owner is and how they work, accu
|
|
|
5
5
|
|
|
6
6
|
# Conversational Memory
|
|
7
7
|
|
|
8
|
+
Invoked by the admin agent directly.
|
|
9
|
+
|
|
8
10
|
Memory accumulates from conversation — never from questionnaires, quizzes, or onboarding forms. The owner reveals who they are and how they work through natural interaction. Your role is to notice, store, and recall that knowledge so every session feels continuous rather than starting from scratch.
|
|
9
11
|
|
|
10
12
|
## Memory Tools
|
|
@@ -5,6 +5,8 @@ description: "Clusters KnowledgeDocument and Section nodes that have no Concept
|
|
|
5
5
|
|
|
6
6
|
# Emerge
|
|
7
7
|
|
|
8
|
+
Invoked by the admin agent directly.
|
|
9
|
+
|
|
8
10
|
This skill surfaces unnamed clusters of knowledge already in the operator's graph — documents and sections that share a theme but have no Concept node connecting them yet. For each cluster it proposes a name and routes the write through the operator-approval gate. It never writes without approval.
|
|
9
11
|
|
|
10
12
|
## When to run
|
|
@@ -5,6 +5,8 @@ description: "Microsoft 365 / Outlook.com via Microsoft Graph (read-only). Use w
|
|
|
5
5
|
|
|
6
6
|
# Outlook (Microsoft Graph)
|
|
7
7
|
|
|
8
|
+
Invoked from `specialists:personal-assistant`.
|
|
9
|
+
|
|
8
10
|
Read-only access to the user's Outlook.com or Microsoft 365 mailbox via Microsoft Graph. Per-account OAuth, encrypted token storage, refresh handled automatically.
|
|
9
11
|
|
|
10
12
|
## When to activate
|
|
@@ -5,6 +5,8 @@ description: Turn any rough prompt, half-formed idea, or task description into a
|
|
|
5
5
|
|
|
6
6
|
# Prompt optimiser
|
|
7
7
|
|
|
8
|
+
Invoked by the admin agent directly.
|
|
9
|
+
|
|
8
10
|
You turn whatever the user gives you — a rough draft, a vague idea, a task description, a paragraph of context — into a single high-quality prompt designed to run inside the chat app on Opus 4.7 with adaptive thinking.
|
|
9
11
|
|
|
10
12
|
This is for the **chat app** (claude.ai, Mac, iOS), not the API. The user is going to paste a single message into chat. There is no system prompt, no `effort` parameter, no tool config to tune. The prompt itself has to do all the work.
|
|
@@ -20,7 +22,7 @@ This skill is invoked two ways, and they want opposite outputs. Decide which one
|
|
|
20
22
|
- Do not end with "Think before answering". Do not ask the user to paste anything — you already have the content and the context.
|
|
21
23
|
- Do not invent requirements or add scope the user did not ask for. If the prompt was already clear, say so in one line and restate it tightly.
|
|
22
24
|
- The restated brief is bound by the three doctrines (see `/doctrine`): precise/concise/plain, no speculation, observability-first. If the user's wording carries a speculative claim or skips an observability step the doctrines require, the restatement corrects it rather than echoing the slip.
|
|
23
|
-
- End the restated brief with
|
|
25
|
+
- End the restated brief with the three-tier routing ladder, applied to the restated task in order. **(1)** Delegate to the specialist that owns the deliverable's type via the Agent tool: ownership covers origination, not just the final render, and the brief states the outcome plus the binding constraints, never the lines, anchors, or literal text to insert. **(2)** Only if no installed specialist owns it, load a skill from the admin-usable list with skill-load and do the work from this seat. **(3)** Only if neither fits, author it directly — freestyle inline authoring is the last resort, not a peer of the two routes above. The live specialist roster and admin-usable list are injected each turn by the standing prompt-optimiser directive; the ranked ladder is the classifier. This reverses Task 529's "the closing line is the trigger, not the classifier".
|
|
24
26
|
|
|
25
27
|
Then do the work from the restated task. Everything below this section is for the other mode and does not apply — stop reading here.
|
|
26
28
|
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Task 698 — the prompt-optimiser restatement mode must end with the three-tier
|
|
3
|
+
# routing ladder, not the lone "Delegate this task to the appropriate specialist."
|
|
4
|
+
# line it carried before.
|
|
5
|
+
set -u
|
|
6
|
+
|
|
7
|
+
SK="$(cd "$(dirname "$0")/.." && pwd)/SKILL.md"
|
|
8
|
+
[ -f "$SK" ] || { echo "FAIL: $SK not found" >&2; exit 1; }
|
|
9
|
+
|
|
10
|
+
PASS=0; FAIL=0
|
|
11
|
+
chk() { if eval "$2"; then echo "PASS: $1"; PASS=$((PASS+1)); else echo "FAIL: $1" >&2; FAIL=$((FAIL+1)); fi; }
|
|
12
|
+
|
|
13
|
+
chk "lone delegate line removed" '! grep -q "Delegate this task to the appropriate specialist." "$SK"'
|
|
14
|
+
chk "tier 1 delegate to specialist" 'grep -qiE "delegate to (a |the )?specialist" "$SK"'
|
|
15
|
+
chk "tier 2 admin-usable skill" 'grep -qi "admin-usable" "$SK"'
|
|
16
|
+
chk "tier 3 freestyle last resort" 'grep -qiE "freestyle|last resort" "$SK"'
|
|
17
|
+
chk "restatement section present" 'grep -qi "In-session restatement mode" "$SK"'
|
|
18
|
+
|
|
19
|
+
echo "----"
|
|
20
|
+
echo "PASS=$PASS FAIL=$FAIL"
|
|
21
|
+
[ "$FAIL" -eq 0 ]
|
|
@@ -5,6 +5,8 @@ description: "Composes a one-screen daily briefing covering outstanding commitme
|
|
|
5
5
|
|
|
6
6
|
# Briefing
|
|
7
7
|
|
|
8
|
+
Invoked from `specialists:personal-assistant`.
|
|
9
|
+
|
|
8
10
|
This skill produces the owner's daily reading pack. It pulls four signals from the graph, composes them into a single screen of output, and persists the composed briefing as a `:Report` node so the owner can later ask "what was this morning's briefing" and get the exact text back. It does not draft replies, schedule events, or mark tasks complete; the only write is the report-persistence step.
|
|
9
11
|
|
|
10
12
|
## When to run
|
|
@@ -5,6 +5,8 @@ description: "Fetches today's calendar and produces a per-event context block fo
|
|
|
5
5
|
|
|
6
6
|
# Daily prep
|
|
7
7
|
|
|
8
|
+
Invoked from `specialists:personal-assistant`.
|
|
9
|
+
|
|
8
10
|
This skill turns today's calendar into a ready-to-read context pack. For each event, it looks up the attendees in the graph and surfaces what the owner already knows about each one. It never invents context; if the graph has no record of a person, it says so out loud.
|
|
9
11
|
|
|
10
12
|
## When to run
|
|
@@ -8,6 +8,8 @@ description: >
|
|
|
8
8
|
|
|
9
9
|
# Slides: Deck Generation Skill
|
|
10
10
|
|
|
11
|
+
Invoked from `specialists:content-producer`.
|
|
12
|
+
|
|
11
13
|
You are generating a slide deck using the Slides framework. This skill gives you everything needed to produce correct, on-brand decks.
|
|
12
14
|
|
|
13
15
|
## What you produce
|
|
@@ -5,6 +5,8 @@ description: Guide the user through connecting WhatsApp via a typed pairing code
|
|
|
5
5
|
|
|
6
6
|
# Connect WhatsApp
|
|
7
7
|
|
|
8
|
+
Invoked from `specialists:personal-assistant`.
|
|
9
|
+
|
|
8
10
|
Conversational flow for linking a WhatsApp account to {{productName}} via a typed WhatsApp pairing code, followed by admin phone registration and public agent selection. All three phases are required for a correctly configured WhatsApp channel.
|
|
9
11
|
|
|
10
12
|
## When to activate
|
|
@@ -5,6 +5,8 @@ description: Guide the user through viewing and editing WhatsApp settings — me
|
|
|
5
5
|
|
|
6
6
|
# Manage WhatsApp Config
|
|
7
7
|
|
|
8
|
+
Invoked from `specialists:personal-assistant`.
|
|
9
|
+
|
|
8
10
|
Conversational editing of WhatsApp settings. Every field is presented with its description, current value, and what the default means — the user makes informed decisions without needing backend knowledge.
|
|
9
11
|
|
|
10
12
|
## When to activate
|
|
@@ -5,6 +5,8 @@ description: "Operator task loop for outstanding work. Activate when the operato
|
|
|
5
5
|
|
|
6
6
|
# Execute task
|
|
7
7
|
|
|
8
|
+
Invoked from `specialists:project-manager`.
|
|
9
|
+
|
|
8
10
|
The operator-facing wrapper around the `work-*`, `project-*`, and `session-*` tools. Drives one Task from selection to closure with every artefact tied back to the graph. Five clauses are binding; the skill is a contract, not a recipe.
|
|
9
11
|
|
|
10
12
|
## When to activate
|
|
@@ -5,6 +5,8 @@ description: "Create, test, and diagnose persistent workflows that automate recu
|
|
|
5
5
|
|
|
6
6
|
# Workflow Manager
|
|
7
7
|
|
|
8
|
+
Invoked from `specialists:project-manager`.
|
|
9
|
+
|
|
8
10
|
Create, test, and diagnose persistent workflows that automate recurring multi-step processes.
|
|
9
11
|
|
|
10
12
|
## When to Suggest a Workflow
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Test for admin-skills-bootstrap.sh (Task 698). Builds a fixture plugins tree
|
|
3
|
+
# and asserts the admin-usable derivation, the fail-safe no-declaration handling,
|
|
4
|
+
# the owned-set guard, robust block-scalar description extraction, and the log.
|
|
5
|
+
set -u
|
|
6
|
+
|
|
7
|
+
GEN="$(cd "$(dirname "$0")/.." && pwd)/admin-skills-bootstrap.sh"
|
|
8
|
+
[ -x "$GEN" ] || { echo "FAIL: $GEN not executable" >&2; exit 1; }
|
|
9
|
+
|
|
10
|
+
TMP=$(mktemp -d); ACC="$TMP/account"; PLUG="$TMP/plugins"
|
|
11
|
+
mkdir -p "$ACC/agents/admin"
|
|
12
|
+
|
|
13
|
+
# mk <plugin> <slug> <description-line> <declaration-paragraph>
|
|
14
|
+
mk() {
|
|
15
|
+
mkdir -p "$PLUG/$1/skills/$2"
|
|
16
|
+
printf -- '---\nname: %s\ndescription: %s\n---\n\n# %s\n\n%s\n' \
|
|
17
|
+
"$2" "$3" "$2" "$4" > "$PLUG/$1/skills/$2/SKILL.md"
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
# admin-usable, single-line quoted description
|
|
21
|
+
mk admin session-management '"reset and list sessions"' "Invoked by the admin agent directly."
|
|
22
|
+
# admin-usable, folded block-scalar description (robust extraction must join lines)
|
|
23
|
+
printf -- '---\nname: datetime\ndescription: >\n resolve the current\n date and time\n---\n\n# datetime\n\nInvoked by the admin agent directly.\n' \
|
|
24
|
+
> "$PLUG/admin/skills/datetime/SKILL.md" 2>/dev/null || { mkdir -p "$PLUG/admin/skills/datetime"; printf -- '---\nname: datetime\ndescription: >\n resolve the current\n date and time\n---\n\n# datetime\n\nInvoked by the admin agent directly.\n' > "$PLUG/admin/skills/datetime/SKILL.md"; }
|
|
25
|
+
# specialist-owned — declaration names a specialist
|
|
26
|
+
mk deep-research deep-research '"multi-source research"' 'Invoked from `specialists:research-assistant`.'
|
|
27
|
+
# content-producer authoring, declaration TAMPERED to admin — owned-set must still exclude
|
|
28
|
+
mk admin professional-document '"author a document"' "Invoked by the admin agent directly."
|
|
29
|
+
# admin-usable whose declaration MENTIONS downstream specialists after a period —
|
|
30
|
+
# must stay admin-usable (the specialists: are routing targets, not the owner).
|
|
31
|
+
mk admin unzip-attachment '"safely extract an attachment"' \
|
|
32
|
+
'**Invoked by the admin agent directly.** Admin forwards the tree to `specialists:content-producer` or `specialists:librarian` downstream.'
|
|
33
|
+
# no declaration — fail-safe: excluded and reported
|
|
34
|
+
mk admin mystery-skill '"does a mystery thing"' "No declaration here at all."
|
|
35
|
+
|
|
36
|
+
OWNED="$TMP/owned.ts"
|
|
37
|
+
cat > "$OWNED" <<'EOF'
|
|
38
|
+
export const CONTENT_PRODUCER_AUTHORING_SKILL_SLUGS = [
|
|
39
|
+
"professional-document",
|
|
40
|
+
"a4-print-documents",
|
|
41
|
+
"publish-site",
|
|
42
|
+
] as const;
|
|
43
|
+
EOF
|
|
44
|
+
|
|
45
|
+
OUT=$(bash "$GEN" "$ACC" "$PLUG" "$OWNED" 2>&1)
|
|
46
|
+
MD="$ACC/agents/admin/ADMIN-SKILLS.md"
|
|
47
|
+
|
|
48
|
+
PASS=0; FAIL=0
|
|
49
|
+
chk() { if eval "$2"; then echo "PASS: $1"; PASS=$((PASS+1)); else echo "FAIL: $1 (out=$OUT)" >&2; FAIL=$((FAIL+1)); fi; }
|
|
50
|
+
|
|
51
|
+
chk "admin skill included with desc" 'grep -qE "^- session-management: reset and list sessions$" "$MD"'
|
|
52
|
+
chk "block-scalar desc joined" 'grep -qE "^- datetime: resolve the current date and time$" "$MD"'
|
|
53
|
+
chk "downstream-mention stays admin" 'grep -qE "^- unzip-attachment: " "$MD"'
|
|
54
|
+
chk "specialist skill excluded" '! grep -q "deep-research" "$MD"'
|
|
55
|
+
chk "owned-set skill excluded" '! grep -q "professional-document" "$MD"'
|
|
56
|
+
chk "no-decl skill excluded" '! grep -q "mystery-skill" "$MD"'
|
|
57
|
+
chk "no-decl reported" 'echo "$OUT" | grep -q "skill=mystery-skill missing-declaration"'
|
|
58
|
+
chk "scan log shape" 'echo "$OUT" | grep -qE "\[admin-skills\] scanned=6 admin-usable=3 no-declaration=1"'
|
|
59
|
+
chk "list sorted by slug" '[ "$(grep "^- " "$MD" | head -1)" = "- datetime: resolve the current date and time" ]'
|
|
60
|
+
|
|
61
|
+
rm -rf "$TMP"
|
|
62
|
+
echo "----"
|
|
63
|
+
echo "PASS=$PASS FAIL=$FAIL"
|
|
64
|
+
[ "$FAIL" -eq 0 ]
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Idempotent ADMIN-SKILLS.md bootstrap (Task 698). Sibling of agents-md-bootstrap.sh.
|
|
3
|
+
#
|
|
4
|
+
# Usage: admin-skills-bootstrap.sh <account_dir> <plugins_dir> [<owned_set_ts>]
|
|
5
|
+
#
|
|
6
|
+
# Scans <plugins_dir>/*/skills/*/SKILL.md and writes
|
|
7
|
+
# <account_dir>/agents/admin/ADMIN-SKILLS.md — one `- name: description` line per
|
|
8
|
+
# admin-usable skill, sorted by slug.
|
|
9
|
+
#
|
|
10
|
+
# Admin-usable = the SKILL.md "Invoked by/from" declaration does NOT name a
|
|
11
|
+
# specialist (`specialists:<name>`) AND the slug is not in the content-producer
|
|
12
|
+
# authoring owned-set. A skill with no parseable declaration is excluded
|
|
13
|
+
# (fail-safe — never silently offer a possibly-specialist-owned skill) and
|
|
14
|
+
# reported, so the offender is visible rather than dropped.
|
|
15
|
+
#
|
|
16
|
+
# owned_set_ts defaults to the canonical module in the admin MCP source tree; the
|
|
17
|
+
# quoted slugs between its array brackets are the shared owned-set (one source of
|
|
18
|
+
# truth with the Task 516 runtime gate in skill-resolution.ts).
|
|
19
|
+
#
|
|
20
|
+
# Observability (stdout, two-space indented to match setup-account.sh):
|
|
21
|
+
# [admin-skills] scanned=<N> admin-usable=<M> no-declaration=<K>
|
|
22
|
+
# [admin-skills] skill=<name> missing-declaration (one per offender, when K>0)
|
|
23
|
+
# Failure signature: admin-usable=0 while scanned>0, or any missing-declaration line.
|
|
24
|
+
|
|
25
|
+
set -euo pipefail
|
|
26
|
+
|
|
27
|
+
ACCOUNT_DIR="${1:?Usage: admin-skills-bootstrap.sh <account_dir> <plugins_dir> [owned_set_ts]}"
|
|
28
|
+
PLUGINS_DIR="${2:?Usage: admin-skills-bootstrap.sh <account_dir> <plugins_dir> [owned_set_ts]}"
|
|
29
|
+
OWNED_TS="${3:-$PLUGINS_DIR/admin/mcp/src/content-producer-authoring-skills.ts}"
|
|
30
|
+
OUT="$ACCOUNT_DIR/agents/admin/ADMIN-SKILLS.md"
|
|
31
|
+
|
|
32
|
+
mkdir -p "$(dirname "$OUT")"
|
|
33
|
+
|
|
34
|
+
# Owned-set: quoted slugs inside the canonical array. Missing file -> empty set
|
|
35
|
+
# (the declaration scan still excludes specialist-named skills; the owned-set is
|
|
36
|
+
# only the belt-and-suspenders guard against a declaration regression).
|
|
37
|
+
OWNED=""
|
|
38
|
+
if [ -f "$OWNED_TS" ]; then
|
|
39
|
+
OWNED=$(grep -oE '"[a-z0-9-]+"' "$OWNED_TS" | tr -d '"' || true)
|
|
40
|
+
fi
|
|
41
|
+
is_owned() { printf '%s\n' "$OWNED" | grep -qx "$1"; }
|
|
42
|
+
|
|
43
|
+
# Robust frontmatter description extraction (single-line, folded `>`, literal `|`),
|
|
44
|
+
# mirroring parseSkillFrontmatter in skill-resolution.ts. Block scalars join their
|
|
45
|
+
# indented continuation lines with single spaces.
|
|
46
|
+
extract_desc() {
|
|
47
|
+
python3 - "$1" <<'PY'
|
|
48
|
+
import sys, re
|
|
49
|
+
text = open(sys.argv[1], encoding="utf-8", errors="replace").read()
|
|
50
|
+
m = re.match(r"^---\r?\n(.*?)\r?\n---(?:\r?\n|$)", text, re.S)
|
|
51
|
+
if not m:
|
|
52
|
+
print(""); sys.exit(0)
|
|
53
|
+
lines = m.group(1).split("\n")
|
|
54
|
+
out = ""
|
|
55
|
+
for i, line in enumerate(lines):
|
|
56
|
+
hm = re.match(r"^description:[ \t]*(.*)$", line)
|
|
57
|
+
if not hm:
|
|
58
|
+
continue
|
|
59
|
+
inline = hm.group(1).strip()
|
|
60
|
+
if inline and not re.match(r"^[|>][+-]?[1-9]?[ \t]*(?:#.*)?$", inline):
|
|
61
|
+
if (inline[:1], inline[-1:]) in (('"', '"'), ("'", "'")):
|
|
62
|
+
inline = inline[1:-1]
|
|
63
|
+
out = inline
|
|
64
|
+
else:
|
|
65
|
+
parts = []
|
|
66
|
+
for cont in lines[i + 1:]:
|
|
67
|
+
if re.match(r"^[A-Za-z][\w-]*:", cont):
|
|
68
|
+
break
|
|
69
|
+
t = cont.strip()
|
|
70
|
+
if t:
|
|
71
|
+
parts.append(t)
|
|
72
|
+
out = " ".join(parts)
|
|
73
|
+
break
|
|
74
|
+
print(out)
|
|
75
|
+
PY
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
_scanned=0; _usable=0; _nodecl=0
|
|
79
|
+
TMP=$(mktemp)
|
|
80
|
+
for skill in "$PLUGINS_DIR"/*/skills/*/SKILL.md; do
|
|
81
|
+
[ -f "$skill" ] || continue
|
|
82
|
+
_scanned=$((_scanned + 1))
|
|
83
|
+
slug=$(basename "$(dirname "$skill")")
|
|
84
|
+
decl=$(grep -iE "invoked (by|from)" "$skill" | head -1 || true)
|
|
85
|
+
if [ -z "$decl" ]; then
|
|
86
|
+
_nodecl=$((_nodecl + 1))
|
|
87
|
+
echo " [admin-skills] skill=$slug missing-declaration"
|
|
88
|
+
continue
|
|
89
|
+
fi
|
|
90
|
+
# Specialist-owned iff the invoked clause names a specialist BEFORE its first
|
|
91
|
+
# period: "Invoked from `specialists:<name>`". A later `specialists:` mention
|
|
92
|
+
# after a period is downstream-routing prose, not ownership (e.g. the admin's
|
|
93
|
+
# unzip-attachment names content-producer/librarian as where it forwards to).
|
|
94
|
+
printf '%s' "$decl" | grep -qiE "invoked (by|from)[^.]*specialists:" && continue
|
|
95
|
+
is_owned "$slug" && continue # owned-set guard
|
|
96
|
+
desc=$(extract_desc "$skill")
|
|
97
|
+
printf -- '- %s: %s\n' "$slug" "$desc" >> "$TMP"
|
|
98
|
+
_usable=$((_usable + 1))
|
|
99
|
+
done
|
|
100
|
+
|
|
101
|
+
{
|
|
102
|
+
printf '# Admin-usable skills\n\n'
|
|
103
|
+
printf 'Skills the admin agent may load directly with `skill-load skillName=<name>`.\n'
|
|
104
|
+
printf 'Specialist-owned skills are not listed; dispatch their specialist instead.\n\n'
|
|
105
|
+
sort "$TMP"
|
|
106
|
+
} > "$OUT"
|
|
107
|
+
rm -f "$TMP"
|
|
108
|
+
|
|
109
|
+
echo " [admin-skills] scanned=$_scanned admin-usable=$_usable no-declaration=$_nodecl"
|
|
@@ -228,6 +228,14 @@ fi
|
|
|
228
228
|
# the same code path runs from the test suite.
|
|
229
229
|
bash "$SCRIPT_DIR/lib/agents-md-bootstrap.sh" "$ACCOUNT_DIR"
|
|
230
230
|
|
|
231
|
+
# ADMIN-SKILLS.md — admin-usable skills list (Task 698). Derived from every
|
|
232
|
+
# installed SKILL.md "Invoked by/from" declaration: a declaration naming a
|
|
233
|
+
# specialist excludes the skill; no parseable declaration excludes it and is
|
|
234
|
+
# reported (fail-safe). The per-turn routing-ladder hook re-emits this list each
|
|
235
|
+
# turn. Regenerated on every (re-)seed; a plugin add/remove since the last seed
|
|
236
|
+
# leaves the list stale until the next setup run.
|
|
237
|
+
bash "$SCRIPT_DIR/lib/admin-skills-bootstrap.sh" "$ACCOUNT_DIR" "$PROJECT_DIR/plugins"
|
|
238
|
+
|
|
231
239
|
# ------------------------------------------------------------------
|
|
232
240
|
# 4. Create / backfill account.json
|
|
233
241
|
# ------------------------------------------------------------------
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs-watcher.d.ts","sourceRoot":"","sources":["../src/fs-watcher.ts"],"names":[],"mappings":"AAsCA,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"fs-watcher.d.ts","sourceRoot":"","sources":["../src/fs-watcher.ts"],"names":[],"mappings":"AAsCA,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAGvD,OAAO,EAML,KAAK,cAAc,EACnB,KAAK,eAAe,EAErB,MAAM,oBAAoB,CAAA;AAsC3B,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,CAAA;AACpD;;;;;;;;gCAQgC;AAChC,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,CAAA;AAE7D,MAAM,WAAW,UAAU;IACzB;;mDAE+C;IAC/C,SAAS,EAAE,MAAM,CAAA;IACjB,0EAA0E;IAC1E,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,wEAAwE;IACxE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B;mEAC+D;IAC/D,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB;;;;qCAIiC;IACjC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,KAAK,EAAE,QAAQ,CAAA;IACf,MAAM,EAAE,SAAS,CAAA;IACjB,uEAAuE;IACvE,SAAS,EAAE,MAAM,CAAA;IACjB;;;;;;;qBAOiB;IACjB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAW7B,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,+DAA+D;IAC/D,IAAI,EAAE,IAAI,GAAG,IAAI,CAAA;IACjB,+DAA+D;IAC/D,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IACvB;;wBAEoB;IACpB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,2DAA2D;IAC3D,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB;;oDAEgD;IAChD,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B;;;;;;;mBAOe;IACf,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAA;IACtC;2BACuB;IACvB,MAAM,EAAE,OAAO,CAAA;IACf;;;;yCAIqC;IACrC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAA;CACjC;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAA;IACpC,MAAM,EAAE,KAAK,GAAG,OAAO,CAAA;IACvB,GAAG,EAAE,UAAU,GAAG,IAAI,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAA;AAEtD,MAAM,WAAW,SAAS;IACxB,QAAQ,IAAI,IAAI,CAAA;IAChB,GAAG,IAAI,IAAI,CAAA;IACX,SAAS,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,IAAI,CAAA;IACtC,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAA;IAClD,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAA;IACxD,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAA;IACzD,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAA;IAC7C,GAAG,IAAI,UAAU,EAAE,CAAA;IACnB,6EAA6E;IAC7E,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IAC/D;;;;;;4CAMwC;IACxC,oBAAoB,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3D;;;;;;;;;mDAS+C;IAC/C,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAA;IAC1C,KAAK,IAAI,IAAI,CAAA;IACb;;;;2EAIuE;IACvE,UAAU,EAAE;QACV,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;QACpC,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KACvC,CAAA;CACF;AAyDD,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd;;;;6EAIyE;IACzE,YAAY,CAAC,EAAE,eAAe,CAAA;IAC9B;;8EAE0E;IAC1E,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B;;+EAE2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,GAAG,SAAS,CAuxBZ"}
|