@rubytech/create-sitedesk-code 0.1.523 → 0.1.525
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/lib/agent-dispatch-rule/dist/index.d.ts +99 -0
- package/payload/platform/lib/agent-dispatch-rule/dist/index.d.ts.map +1 -0
- package/payload/platform/lib/agent-dispatch-rule/dist/index.js +228 -0
- package/payload/platform/lib/agent-dispatch-rule/dist/index.js.map +1 -0
- package/payload/platform/lib/agent-dispatch-rule/package.json +6 -0
- package/payload/platform/lib/agent-dispatch-rule/src/__tests__/rule.test.ts +384 -0
- package/payload/platform/lib/agent-dispatch-rule/src/index.ts +269 -0
- package/payload/platform/lib/agent-dispatch-rule/tsconfig.json +9 -0
- package/payload/platform/lib/agent-dispatch-rule/vitest.config.ts +9 -0
- package/payload/platform/lib/routine-templates/dist/roster.js +1 -1
- package/payload/platform/lib/routine-templates/src/roster.ts +1 -1
- package/payload/platform/package.json +2 -2
- package/payload/platform/plugins/admin/PLUGIN.md +1 -0
- package/payload/platform/plugins/admin/hooks/__tests__/mailbox-inject.test.sh +501 -0
- package/payload/platform/plugins/admin/hooks/mailbox-inject.sh +299 -0
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +54 -21
- package/payload/platform/plugins/admin/skills/superpowers-sprint/SKILL.md +26 -0
- package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +12 -0
- package/payload/platform/plugins/docs/references/admin-ui.md +49 -18
- package/payload/platform/plugins/docs/references/workflows.md +4 -2
- package/payload/platform/plugins/email/mcp/dist/__tests__/email-status.test.js +72 -1
- package/payload/platform/plugins/email/mcp/dist/__tests__/email-status.test.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/__tests__/mailbox-resolve.test.js +4 -1
- package/payload/platform/plugins/email/mcp/dist/__tests__/mailbox-resolve.test.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/credentials.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/credentials.js +4 -2
- package/payload/platform/plugins/email/mcp/dist/lib/credentials.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-status.d.ts +0 -6
- package/payload/platform/plugins/email/mcp/dist/tools/email-status.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-status.js +24 -2
- package/payload/platform/plugins/email/mcp/dist/tools/email-status.js.map +1 -1
- package/payload/platform/plugins/email/references/email-reference.md +1 -1
- package/payload/platform/plugins/memory/PLUGIN.md +10 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/compiled-truth-revision.test.js +5 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/compiled-truth-revision.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/temporal-type-preserve.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/temporal-type-preserve.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/temporal-type-preserve.test.js +141 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/temporal-type-preserve.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/log-ingest.d.ts +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/log-ingest.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/log-ingest.js +6 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/log-ingest.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/temporal-type-preserve.d.ts +45 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/temporal-type-preserve.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/temporal-type-preserve.js +122 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/temporal-type-preserve.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-by-name.test.js +26 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-by-name.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-type-preserve.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-type-preserve.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-type-preserve.test.js +201 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-type-preserve.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.js +89 -33
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/vitest.config.ts +2 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-search-delegated-ids.test.d.ts +2 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-search-delegated-ids.test.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-search-delegated-ids.test.js +322 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-search-delegated-ids.test.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/mailbox-registry.test.js +21 -1
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/mailbox-registry.test.js.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/auth/mailbox-registry.d.ts +13 -0
- package/payload/platform/plugins/outlook/mcp/dist/auth/mailbox-registry.d.ts.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/auth/mailbox-registry.js +16 -0
- package/payload/platform/plugins/outlook/mcp/dist/auth/mailbox-registry.js.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/index.js +5 -5
- package/payload/platform/plugins/outlook/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.d.ts.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.js +6 -0
- package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.js.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-search.d.ts +7 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-search.d.ts.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-search.js +122 -8
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-search.js.map +1 -1
- package/payload/platform/plugins/scheduling/PLUGIN.md +26 -1
- package/payload/platform/plugins/scheduling/mcp/dist/index.js +6 -4
- package/payload/platform/plugins/scheduling/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/agent-dispatch.test.js +8 -36
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/agent-dispatch.test.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/meeting-retype.test.d.ts +2 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/meeting-retype.test.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/meeting-retype.test.js +148 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/meeting-retype.test.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/agent-dispatch.d.ts +10 -65
- package/payload/platform/plugins/scheduling/mcp/dist/lib/agent-dispatch.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/agent-dispatch.js +29 -122
- package/payload/platform/plugins/scheduling/mcp/dist/lib/agent-dispatch.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/booking-reconcile.d.ts +83 -6
- package/payload/platform/plugins/scheduling/mcp/dist/lib/booking-reconcile.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/booking-reconcile.js +90 -5
- package/payload/platform/plugins/scheduling/mcp/dist/lib/booking-reconcile.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/routine-roster-audit.test.js +111 -2
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/routine-roster-audit.test.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.d.ts +38 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.js +116 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js +13 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/reconcile-bookings.js +81 -8
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/reconcile-bookings.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-event-agent.test.js +39 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-event-agent.test.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-update-status.test.d.ts +2 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-update-status.test.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-update-status.test.js +305 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-update-status.test.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js +9 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.d.ts +46 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.js +172 -4
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.js.map +1 -1
- package/payload/platform/plugins/scheduling/skills/routine-control/SKILL.md +48 -0
- package/payload/platform/plugins/sweep/skills/email-graph-sweep/SKILL.md +21 -7
- package/payload/platform/scripts/__tests__/check-canonical-tool-names.test.sh +162 -0
- package/payload/platform/scripts/__tests__/check-no-task-id-leaks.test.sh +53 -0
- package/payload/platform/scripts/__tests__/mailbox-inject-registered.test.sh +80 -0
- package/payload/platform/scripts/__tests__/task-id-citation.test.sh +72 -0
- package/payload/platform/scripts/check-canonical-tool-names.mjs +36 -4
- package/payload/platform/scripts/check-no-task-id-leaks.mjs +80 -62
- package/payload/platform/scripts/lib/__tests__/account-settings-mailbox-inject.test.sh +166 -0
- package/payload/platform/scripts/lib/account-settings-mailbox-inject.sh +91 -0
- package/payload/platform/scripts/lib/canonical-tool-names.mjs +130 -26
- package/payload/platform/scripts/lib/provision-account-dir.sh +1 -0
- package/payload/platform/scripts/lib/task-id-citation.mjs +67 -0
- package/payload/platform/scripts/setup-account.sh +15 -0
- package/payload/server/public/activity.html +5 -5
- package/payload/server/public/agents.html +4 -4
- package/payload/server/public/assets/{AdminLoginScreens-uknqh2Pm.js → AdminLoginScreens-BgDjueVe.js} +1 -1
- package/payload/server/public/assets/AdminLoginScreens-BgDjueVe.js.br +0 -0
- package/payload/server/public/assets/AdminLoginScreens-BgDjueVe.js.gz +0 -0
- package/payload/server/public/assets/{AdminShell-GqtMImyQ.js → AdminShell-YctTrR-D.js} +1 -1
- package/payload/server/public/assets/AdminShell-YctTrR-D.js.br +0 -0
- package/payload/server/public/assets/AdminShell-YctTrR-D.js.gz +0 -0
- package/payload/server/public/assets/{activity-B4KfMJqO.js → activity-DGQt5ys_.js} +1 -1
- package/payload/server/public/assets/activity-DGQt5ys_.js.br +0 -0
- package/payload/server/public/assets/activity-DGQt5ys_.js.gz +0 -0
- package/payload/server/public/assets/admin-DnUxbB3P.js +1 -0
- package/payload/server/public/assets/admin-DnUxbB3P.js.br +0 -0
- package/payload/server/public/assets/admin-DnUxbB3P.js.gz +0 -0
- package/payload/server/public/assets/agents-Bc2LZjwC.js +1 -0
- package/payload/server/public/assets/agents-Bc2LZjwC.js.br +0 -0
- package/payload/server/public/assets/agents-Bc2LZjwC.js.gz +0 -0
- package/payload/server/public/assets/{arc-DaI5MLTq.js → arc-DaudCnXg.js} +1 -1
- package/payload/server/public/assets/arc-DaudCnXg.js.br +0 -0
- package/payload/server/public/assets/arc-DaudCnXg.js.gz +0 -0
- package/payload/server/public/assets/architecture-YZFGNWBL-DPFsm5jD.js +1 -0
- package/payload/server/public/assets/architecture-YZFGNWBL-DPFsm5jD.js.br +0 -0
- package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-CBGVUEN9.js → architectureDiagram-Q4EWVU46-BEEC3s7i.js} +1 -1
- package/payload/server/public/assets/architectureDiagram-Q4EWVU46-BEEC3s7i.js.br +0 -0
- package/payload/server/public/assets/architectureDiagram-Q4EWVU46-BEEC3s7i.js.gz +0 -0
- package/payload/server/public/assets/{blockDiagram-DXYQGD6D-DS6dS4GZ.js → blockDiagram-DXYQGD6D-BIWyfb18.js} +1 -1
- package/payload/server/public/assets/blockDiagram-DXYQGD6D-BIWyfb18.js.br +0 -0
- package/payload/server/public/assets/blockDiagram-DXYQGD6D-BIWyfb18.js.gz +0 -0
- package/payload/server/public/assets/{browser-B3hSzI3O.js → browser-BtF7SzvG.js} +1 -1
- package/payload/server/public/assets/browser-BtF7SzvG.js.br +0 -0
- package/payload/server/public/assets/browser-BtF7SzvG.js.gz +0 -0
- package/payload/server/public/assets/{c4Diagram-AHTNJAMY-hBSBUZPt.js → c4Diagram-AHTNJAMY--h6oE2cv.js} +1 -1
- package/payload/server/public/assets/c4Diagram-AHTNJAMY--h6oE2cv.js.br +0 -0
- package/payload/server/public/assets/{c4Diagram-AHTNJAMY-hBSBUZPt.js.gz → c4Diagram-AHTNJAMY--h6oE2cv.js.gz} +0 -0
- package/payload/server/public/assets/{calendar-BggxXxhS.js → calendar-D25EhXbD.js} +1 -1
- package/payload/server/public/assets/calendar-D25EhXbD.js.br +0 -0
- package/payload/server/public/assets/calendar-D25EhXbD.js.gz +0 -0
- package/payload/server/public/assets/channel-TwxCDSpK.js +1 -0
- package/payload/server/public/assets/channel-TwxCDSpK.js.br +0 -0
- package/payload/server/public/assets/chat-z4jsHFXg.js +1 -0
- package/payload/server/public/assets/chat-z4jsHFXg.js.br +0 -0
- package/payload/server/public/assets/chat-z4jsHFXg.js.gz +0 -0
- package/payload/server/public/assets/chevron-left-BD09SN6R.js +1 -0
- package/payload/server/public/assets/chevron-right-ChmWeo7T.js +1 -0
- package/payload/server/public/assets/chevron-right-ChmWeo7T.js.br +0 -0
- package/payload/server/public/assets/{chunk-2KRD3SAO-B6koUoB7.js → chunk-2KRD3SAO-BwEVlnxo.js} +1 -1
- package/payload/server/public/assets/chunk-2KRD3SAO-BwEVlnxo.js.br +0 -0
- package/payload/server/public/assets/chunk-2KRD3SAO-BwEVlnxo.js.gz +0 -0
- package/payload/server/public/assets/{chunk-336JU56O-BF6BRh8u.js → chunk-336JU56O-DQddTATH.js} +2 -2
- package/payload/server/public/assets/chunk-336JU56O-DQddTATH.js.br +0 -0
- package/payload/server/public/assets/chunk-336JU56O-DQddTATH.js.gz +0 -0
- package/payload/server/public/assets/chunk-426QAEUC-BDC8wptW.js +1 -0
- package/payload/server/public/assets/chunk-426QAEUC-BDC8wptW.js.br +0 -0
- package/payload/server/public/assets/chunk-426QAEUC-BDC8wptW.js.gz +0 -0
- package/payload/server/public/assets/{chunk-4BX2VUAB-7sO95xR2.js → chunk-4BX2VUAB-C5p3xTC6.js} +1 -1
- package/payload/server/public/assets/chunk-4BX2VUAB-C5p3xTC6.js.br +0 -0
- package/payload/server/public/assets/chunk-4BX2VUAB-C5p3xTC6.js.gz +0 -0
- package/payload/server/public/assets/{chunk-4TB4RGXK-GCTndJYx.js → chunk-4TB4RGXK-gClfNc1w.js} +1 -1
- package/payload/server/public/assets/chunk-4TB4RGXK-gClfNc1w.js.br +0 -0
- package/payload/server/public/assets/chunk-4TB4RGXK-gClfNc1w.js.gz +0 -0
- package/payload/server/public/assets/{chunk-55IACEB6-ggIJf_TC.js → chunk-55IACEB6-DDU_m1ra.js} +1 -1
- package/payload/server/public/assets/chunk-55IACEB6-DDU_m1ra.js.br +0 -0
- package/payload/server/public/assets/chunk-55IACEB6-DDU_m1ra.js.gz +0 -0
- package/payload/server/public/assets/{chunk-5FUZZQ4R-DeGmkimt.js → chunk-5FUZZQ4R-CZ2jQWNR.js} +1 -1
- package/payload/server/public/assets/chunk-5FUZZQ4R-CZ2jQWNR.js.br +0 -0
- package/payload/server/public/assets/chunk-5FUZZQ4R-CZ2jQWNR.js.gz +0 -0
- package/payload/server/public/assets/{chunk-5PVQY5BW-aFIQKk_U.js → chunk-5PVQY5BW-kcZ5kfTg.js} +1 -1
- package/payload/server/public/assets/chunk-5PVQY5BW-kcZ5kfTg.js.br +0 -0
- package/payload/server/public/assets/chunk-5PVQY5BW-kcZ5kfTg.js.gz +0 -0
- package/payload/server/public/assets/{chunk-67CJDMHE-LS8rUbii.js → chunk-67CJDMHE-9W0Qv0jm.js} +1 -1
- package/payload/server/public/assets/chunk-67CJDMHE-9W0Qv0jm.js.br +0 -0
- package/payload/server/public/assets/chunk-67CJDMHE-9W0Qv0jm.js.gz +0 -0
- package/payload/server/public/assets/{chunk-7N4EOEYR-JKOVngS0.js → chunk-7N4EOEYR-B3gqydR3.js} +1 -1
- package/payload/server/public/assets/chunk-7N4EOEYR-B3gqydR3.js.br +0 -0
- package/payload/server/public/assets/chunk-7N4EOEYR-B3gqydR3.js.gz +0 -0
- package/payload/server/public/assets/{chunk-AA7GKIK3-CoXnTVK6.js → chunk-AA7GKIK3-DW8a-2NK.js} +1 -1
- package/payload/server/public/assets/chunk-AA7GKIK3-DW8a-2NK.js.br +4 -0
- package/payload/server/public/assets/chunk-AA7GKIK3-DW8a-2NK.js.gz +0 -0
- package/payload/server/public/assets/{chunk-BSJP7CBP-CcsqObFg.js → chunk-BSJP7CBP-DqXIO_5R.js} +1 -1
- package/payload/server/public/assets/chunk-BSJP7CBP-DqXIO_5R.js.br +0 -0
- package/payload/server/public/assets/chunk-BSJP7CBP-DqXIO_5R.js.gz +0 -0
- package/payload/server/public/assets/{chunk-CIAEETIT-CpsybR7q.js → chunk-CIAEETIT-BMJfgj2u.js} +1 -1
- package/payload/server/public/assets/chunk-CIAEETIT-BMJfgj2u.js.br +0 -0
- package/payload/server/public/assets/chunk-CIAEETIT-BMJfgj2u.js.gz +0 -0
- package/payload/server/public/assets/{chunk-EDXVE4YY-BZ2I9PSq.js → chunk-EDXVE4YY-BxdLPk0b.js} +1 -1
- package/payload/server/public/assets/chunk-EDXVE4YY-BxdLPk0b.js.br +0 -0
- package/payload/server/public/assets/chunk-EDXVE4YY-BxdLPk0b.js.gz +0 -0
- package/payload/server/public/assets/{chunk-ENJZ2VHE-DbTwt6OZ.js → chunk-ENJZ2VHE-Cfe2DCjQ.js} +1 -1
- package/payload/server/public/assets/chunk-ENJZ2VHE-Cfe2DCjQ.js.br +0 -0
- package/payload/server/public/assets/chunk-ENJZ2VHE-Cfe2DCjQ.js.gz +0 -0
- package/payload/server/public/assets/{chunk-FMBD7UC4-D27VnSCa.js → chunk-FMBD7UC4-CdPjwbtf.js} +1 -1
- package/payload/server/public/assets/chunk-FMBD7UC4-CdPjwbtf.js.br +0 -0
- package/payload/server/public/assets/chunk-FMBD7UC4-CdPjwbtf.js.gz +0 -0
- package/payload/server/public/assets/{chunk-FOC6F5B3-C0tU2UFl.js → chunk-FOC6F5B3-Dl6l1KAh.js} +1 -1
- package/payload/server/public/assets/chunk-FOC6F5B3-Dl6l1KAh.js.br +0 -0
- package/payload/server/public/assets/chunk-FOC6F5B3-Dl6l1KAh.js.gz +0 -0
- package/payload/server/public/assets/{chunk-ICPOFSXX-UPPu2OIq.js → chunk-ICPOFSXX-PnsGrqtx.js} +2 -2
- package/payload/server/public/assets/chunk-ICPOFSXX-PnsGrqtx.js.br +0 -0
- package/payload/server/public/assets/chunk-ICPOFSXX-PnsGrqtx.js.gz +0 -0
- package/payload/server/public/assets/{chunk-K5T4RW27-DIKxqyYw.js → chunk-K5T4RW27--g29_wjW.js} +1 -1
- package/payload/server/public/assets/chunk-K5T4RW27--g29_wjW.js.br +0 -0
- package/payload/server/public/assets/chunk-K5T4RW27--g29_wjW.js.gz +0 -0
- package/payload/server/public/assets/{chunk-KGLVRYIC-CiL4YVLo.js → chunk-KGLVRYIC-CI77ENeO.js} +1 -1
- package/payload/server/public/assets/chunk-KGLVRYIC-CI77ENeO.js.br +3 -0
- package/payload/server/public/assets/chunk-KGLVRYIC-CI77ENeO.js.gz +0 -0
- package/payload/server/public/assets/{chunk-LIHQZDEY-ejKezVlD.js → chunk-LIHQZDEY-CE-XByg6.js} +1 -1
- package/payload/server/public/assets/chunk-LIHQZDEY-CE-XByg6.js.br +0 -0
- package/payload/server/public/assets/chunk-LIHQZDEY-CE-XByg6.js.gz +0 -0
- package/payload/server/public/assets/{chunk-ORNJ4GCN-Cc0vqc-D.js → chunk-ORNJ4GCN-DkjJQQSm.js} +1 -1
- package/payload/server/public/assets/chunk-ORNJ4GCN-DkjJQQSm.js.br +0 -0
- package/payload/server/public/assets/chunk-ORNJ4GCN-DkjJQQSm.js.gz +0 -0
- package/payload/server/public/assets/{chunk-OYMX7WX6-Drxn1qG0.js → chunk-OYMX7WX6-DhogFeD7.js} +1 -1
- package/payload/server/public/assets/chunk-OYMX7WX6-DhogFeD7.js.br +0 -0
- package/payload/server/public/assets/chunk-OYMX7WX6-DhogFeD7.js.gz +0 -0
- package/payload/server/public/assets/chunk-QZHKN3VN-DnqqL1de.js +1 -0
- package/payload/server/public/assets/chunk-QZHKN3VN-DnqqL1de.js.br +0 -0
- package/payload/server/public/assets/chunk-QZHKN3VN-DnqqL1de.js.gz +0 -0
- package/payload/server/public/assets/{chunk-U2HBQHQK-DnbQIkRP.js → chunk-U2HBQHQK-CeaRXuiO.js} +1 -1
- package/payload/server/public/assets/chunk-U2HBQHQK-CeaRXuiO.js.br +0 -0
- package/payload/server/public/assets/chunk-U2HBQHQK-CeaRXuiO.js.gz +0 -0
- package/payload/server/public/assets/{chunk-X2U36JSP-CauTSVWg.js → chunk-X2U36JSP-BqxXeOqf.js} +1 -1
- package/payload/server/public/assets/chunk-X2U36JSP-BqxXeOqf.js.br +0 -0
- package/payload/server/public/assets/chunk-X2U36JSP-BqxXeOqf.js.gz +0 -0
- package/payload/server/public/assets/{chunk-XPW4576I-DZqqB9Zi.js → chunk-XPW4576I-DtqJwn2x.js} +1 -1
- package/payload/server/public/assets/chunk-XPW4576I-DtqJwn2x.js.br +0 -0
- package/payload/server/public/assets/chunk-XPW4576I-DtqJwn2x.js.gz +0 -0
- package/payload/server/public/assets/{chunk-YZCP3GAM-BGHo4Li-.js → chunk-YZCP3GAM-COBlEwQw.js} +1 -1
- package/payload/server/public/assets/chunk-YZCP3GAM-COBlEwQw.js.br +0 -0
- package/payload/server/public/assets/chunk-YZCP3GAM-COBlEwQw.js.gz +0 -0
- package/payload/server/public/assets/{chunk-ZZ45TVLE-DWGJKPd7.js → chunk-ZZ45TVLE-CcL088y6.js} +1 -1
- package/payload/server/public/assets/chunk-ZZ45TVLE-CcL088y6.js.br +0 -0
- package/payload/server/public/assets/chunk-ZZ45TVLE-CcL088y6.js.gz +0 -0
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-Bc3P4dpc.js +1 -0
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-Bc3P4dpc.js.br +0 -0
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-Bc3P4dpc.js.gz +0 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DgEF_rR_.js +1 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DgEF_rR_.js.br +0 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DgEF_rR_.js.gz +0 -0
- package/payload/server/public/assets/clock-Yqf7Ke7I.js +1 -0
- package/payload/server/public/assets/clock-Yqf7Ke7I.js.br +0 -0
- package/payload/server/public/assets/clock-Yqf7Ke7I.js.gz +0 -0
- package/payload/server/public/assets/clone-B3vq32j7.js +1 -0
- package/payload/server/public/assets/{cose-bilkent-S5V4N54A-D-95BzXL.js → cose-bilkent-S5V4N54A-kEHVkDNn.js} +1 -1
- package/payload/server/public/assets/cose-bilkent-S5V4N54A-kEHVkDNn.js.br +0 -0
- package/payload/server/public/assets/cose-bilkent-S5V4N54A-kEHVkDNn.js.gz +0 -0
- package/payload/server/public/assets/{dagre-BZYNBHvT.js → dagre-D2wUw1zC.js} +1 -1
- package/payload/server/public/assets/dagre-D2wUw1zC.js.br +0 -0
- package/payload/server/public/assets/dagre-D2wUw1zC.js.gz +0 -0
- package/payload/server/public/assets/{dagre-KV5264BT-DyU4HQLQ.js → dagre-KV5264BT-BWfTDwEs.js} +1 -1
- package/payload/server/public/assets/dagre-KV5264BT-BWfTDwEs.js.br +0 -0
- package/payload/server/public/assets/dagre-KV5264BT-BWfTDwEs.js.gz +0 -0
- package/payload/server/public/assets/data-RmnKj5nC.js +1 -0
- package/payload/server/public/assets/data-RmnKj5nC.js.br +2 -0
- package/payload/server/public/assets/data-RmnKj5nC.js.gz +0 -0
- package/payload/server/public/assets/{diagram-5BDNPKRD-CCttJ9XA.js → diagram-5BDNPKRD-Tl9dS8w0.js} +1 -1
- package/payload/server/public/assets/diagram-5BDNPKRD-Tl9dS8w0.js.br +0 -0
- package/payload/server/public/assets/diagram-5BDNPKRD-Tl9dS8w0.js.gz +0 -0
- package/payload/server/public/assets/{diagram-G4DWMVQ6-DvkpgSLO.js → diagram-G4DWMVQ6-CeSe6TMu.js} +1 -1
- package/payload/server/public/assets/diagram-G4DWMVQ6-CeSe6TMu.js.br +0 -0
- package/payload/server/public/assets/diagram-G4DWMVQ6-CeSe6TMu.js.gz +0 -0
- package/payload/server/public/assets/{diagram-MMDJMWI5-DHmW5Y9k.js → diagram-MMDJMWI5-DYBNJCmk.js} +1 -1
- package/payload/server/public/assets/diagram-MMDJMWI5-DYBNJCmk.js.br +0 -0
- package/payload/server/public/assets/diagram-MMDJMWI5-DYBNJCmk.js.gz +0 -0
- package/payload/server/public/assets/{diagram-TYMM5635-C6T4hwzO.js → diagram-TYMM5635-BmpUGltx.js} +1 -1
- package/payload/server/public/assets/diagram-TYMM5635-BmpUGltx.js.br +0 -0
- package/payload/server/public/assets/diagram-TYMM5635-BmpUGltx.js.gz +0 -0
- package/payload/server/public/assets/{erDiagram-SMLLAGMA-5v_o7s3T.js → erDiagram-SMLLAGMA-DuwuNGqx.js} +1 -1
- package/payload/server/public/assets/erDiagram-SMLLAGMA-DuwuNGqx.js.br +0 -0
- package/payload/server/public/assets/erDiagram-SMLLAGMA-DuwuNGqx.js.gz +0 -0
- package/payload/server/public/assets/file-download-CiGklOfA.js +1 -0
- package/payload/server/public/assets/file-download-CiGklOfA.js.br +0 -0
- package/payload/server/public/assets/file-download-CiGklOfA.js.gz +0 -0
- package/payload/server/public/assets/{file-text-BKs9eyiw.js → file-text-XjJPULAZ.js} +1 -1
- package/payload/server/public/assets/file-text-XjJPULAZ.js.br +0 -0
- package/payload/server/public/assets/file-text-XjJPULAZ.js.gz +0 -0
- package/payload/server/public/assets/{flatten-BtIc9jX7.js → flatten-Bu-b1uTY.js} +1 -1
- package/payload/server/public/assets/flatten-Bu-b1uTY.js.br +0 -0
- package/payload/server/public/assets/flatten-Bu-b1uTY.js.gz +0 -0
- package/payload/server/public/assets/{flowDiagram-DWJPFMVM-3UhCDsjt.js → flowDiagram-DWJPFMVM-Bpp8P6Ba.js} +1 -1
- package/payload/server/public/assets/flowDiagram-DWJPFMVM-Bpp8P6Ba.js.br +0 -0
- package/payload/server/public/assets/flowDiagram-DWJPFMVM-Bpp8P6Ba.js.gz +0 -0
- package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-F2zgHIIQ.js → ganttDiagram-T4ZO3ILL-CE6ppjB4.js} +1 -1
- package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-CE6ppjB4.js.br +0 -0
- package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-CE6ppjB4.js.gz +0 -0
- package/payload/server/public/assets/gitGraph-7Q5UKJZL-B0OUwOUx.js +1 -0
- package/payload/server/public/assets/gitGraph-7Q5UKJZL-B0OUwOUx.js.br +0 -0
- package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-oQc1N3dT.js → gitGraphDiagram-UUTBAWPF-BdK1GjPr.js} +1 -1
- package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-BdK1GjPr.js.br +0 -0
- package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-BdK1GjPr.js.gz +0 -0
- package/payload/server/public/assets/{graph-DTi71NaZ.js → graph-BjHJ0z_6.js} +1 -1
- package/payload/server/public/assets/graph-BjHJ0z_6.js.br +0 -0
- package/payload/server/public/assets/graph-BjHJ0z_6.js.gz +0 -0
- package/payload/server/public/assets/{graph-labels-BT3S6e9H.js → graph-labels-D-0u37KA.js} +1 -1
- package/payload/server/public/assets/graph-labels-D-0u37KA.js.br +0 -0
- package/payload/server/public/assets/graph-labels-D-0u37KA.js.gz +0 -0
- package/payload/server/public/assets/{graphlib-DY4-AT2Q.js → graphlib-CHEXylyU.js} +1 -1
- package/payload/server/public/assets/graphlib-CHEXylyU.js.br +0 -0
- package/payload/server/public/assets/graphlib-CHEXylyU.js.gz +0 -0
- package/payload/server/public/assets/info-OMHHGYJF-C_8TwPDe.js +1 -0
- package/payload/server/public/assets/info-OMHHGYJF-C_8TwPDe.js.br +0 -0
- package/payload/server/public/assets/infoDiagram-42DDH7IO-msfwyvbV.js +2 -0
- package/payload/server/public/assets/infoDiagram-42DDH7IO-msfwyvbV.js.br +0 -0
- package/payload/server/public/assets/infoDiagram-42DDH7IO-msfwyvbV.js.gz +0 -0
- package/payload/server/public/assets/{isEmpty-Bu4fZ8Kf.js → isEmpty-CjH0UASp.js} +1 -1
- package/payload/server/public/assets/isEmpty-CjH0UASp.js.br +0 -0
- package/payload/server/public/assets/isEmpty-CjH0UASp.js.gz +0 -0
- package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-wJhSOkuw.js → ishikawaDiagram-UXIWVN3A-CgkVZ4-3.js} +1 -1
- package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-CgkVZ4-3.js.br +0 -0
- package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-CgkVZ4-3.js.gz +0 -0
- package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-DgadC6Pz.js → journeyDiagram-VCZTEJTY-ByUPv8q6.js} +1 -1
- package/payload/server/public/assets/journeyDiagram-VCZTEJTY-ByUPv8q6.js.br +0 -0
- package/payload/server/public/assets/journeyDiagram-VCZTEJTY-ByUPv8q6.js.gz +0 -0
- package/payload/server/public/assets/{kanban-definition-6JOO6SKY-Bs4nQqXI.js → kanban-definition-6JOO6SKY-CFinqhpu.js} +1 -1
- package/payload/server/public/assets/kanban-definition-6JOO6SKY-CFinqhpu.js.br +0 -0
- package/payload/server/public/assets/kanban-definition-6JOO6SKY-CFinqhpu.js.gz +0 -0
- package/payload/server/public/assets/{line-Bnmxy1hO.js → line-Y4ns5Ghi.js} +1 -1
- package/payload/server/public/assets/line-Y4ns5Ghi.js.br +0 -0
- package/payload/server/public/assets/line-Y4ns5Ghi.js.gz +0 -0
- package/payload/server/public/assets/{linear-RvwZxFzh.js → linear-l39GooQ5.js} +1 -1
- package/payload/server/public/assets/linear-l39GooQ5.js.br +0 -0
- package/payload/server/public/assets/linear-l39GooQ5.js.gz +0 -0
- package/payload/server/public/assets/{maximize-2-zC94tsxY.js → maximize-2-BJ9S-nfS.js} +1 -1
- package/payload/server/public/assets/maximize-2-BJ9S-nfS.js.br +0 -0
- package/payload/server/public/assets/maximize-2-BJ9S-nfS.js.gz +0 -0
- package/payload/server/public/assets/{mermaid-parser.core-DeNV8RtA.js → mermaid-parser.core-5w0T1dRj.js} +2 -2
- package/payload/server/public/assets/mermaid-parser.core-5w0T1dRj.js.br +0 -0
- package/payload/server/public/assets/mermaid-parser.core-5w0T1dRj.js.gz +0 -0
- package/payload/server/public/assets/{mermaid.core-BU9IiSCP.js → mermaid.core-DBADY5VW.js} +3 -3
- package/payload/server/public/assets/mermaid.core-DBADY5VW.js.br +0 -0
- package/payload/server/public/assets/mermaid.core-DBADY5VW.js.gz +0 -0
- package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-D1PMUxxm.js → mindmap-definition-QFDTVHPH-rHz37loq.js} +1 -1
- package/payload/server/public/assets/mindmap-definition-QFDTVHPH-rHz37loq.js.br +0 -0
- package/payload/server/public/assets/mindmap-definition-QFDTVHPH-rHz37loq.js.gz +0 -0
- package/payload/server/public/assets/{operator-BtWNEMh-.js → operator-Cay4rOOK.js} +1 -1
- package/payload/server/public/assets/operator-Cay4rOOK.js.br +0 -0
- package/payload/server/public/assets/operator-Cay4rOOK.js.gz +0 -0
- package/payload/server/public/assets/{ordinal-C2TEWKNu.js → ordinal-D6D6WcTC.js} +1 -1
- package/payload/server/public/assets/ordinal-D6D6WcTC.js.br +0 -0
- package/payload/server/public/assets/ordinal-D6D6WcTC.js.gz +0 -0
- package/payload/server/public/assets/packet-4T2RLAQJ-CCQdbIqO.js +1 -0
- package/payload/server/public/assets/packet-4T2RLAQJ-CCQdbIqO.js.br +0 -0
- package/payload/server/public/assets/{page-Ccl0FazM.js → page-Cci_j_y7.js} +3 -3
- package/payload/server/public/assets/page-Cci_j_y7.js.br +0 -0
- package/payload/server/public/assets/page-Cci_j_y7.js.gz +0 -0
- package/payload/server/public/assets/page-shuh4ES9.js +1 -0
- package/payload/server/public/assets/page-shuh4ES9.js.br +0 -0
- package/payload/server/public/assets/page-shuh4ES9.js.gz +0 -0
- package/payload/server/public/assets/{pdf-render-C257cidb.js → pdf-render-BSgBp8Fr.js} +1 -1
- package/payload/server/public/assets/pdf-render-BSgBp8Fr.js.br +0 -0
- package/payload/server/public/assets/pdf-render-BSgBp8Fr.js.gz +0 -0
- package/payload/server/public/assets/pie-ZZUOXDRM-Bdw3Iqs7.js +1 -0
- package/payload/server/public/assets/pie-ZZUOXDRM-Bdw3Iqs7.js.br +0 -0
- package/payload/server/public/assets/{pieDiagram-DEJITSTG-BzdNzoKA.js → pieDiagram-DEJITSTG-as0e_DSH.js} +1 -1
- package/payload/server/public/assets/pieDiagram-DEJITSTG-as0e_DSH.js.br +0 -0
- package/payload/server/public/assets/pieDiagram-DEJITSTG-as0e_DSH.js.gz +0 -0
- package/payload/server/public/assets/{public-BpC6cn9S.js → public-BbJcQGsO.js} +1 -1
- package/payload/server/public/assets/public-BbJcQGsO.js.br +0 -0
- package/payload/server/public/assets/public-BbJcQGsO.js.gz +0 -0
- package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-oFr1MJRO.js → quadrantDiagram-34T5L4WZ-B4t8HO9J.js} +1 -1
- package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-B4t8HO9J.js.br +0 -0
- package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-B4t8HO9J.js.gz +0 -0
- package/payload/server/public/assets/radar-PYXPWWZC-D3FUdA3r.js +1 -0
- package/payload/server/public/assets/radar-PYXPWWZC-D3FUdA3r.js.br +0 -0
- package/payload/server/public/assets/{reduce-BGpN5lgn.js → reduce-BtXXK8Ma.js} +1 -1
- package/payload/server/public/assets/reduce-BtXXK8Ma.js.br +0 -0
- package/payload/server/public/assets/reduce-BtXXK8Ma.js.gz +0 -0
- package/payload/server/public/assets/{requirementDiagram-MS252O5E-C9QBQxDh.js → requirementDiagram-MS252O5E-yxh30zHX.js} +1 -1
- package/payload/server/public/assets/requirementDiagram-MS252O5E-yxh30zHX.js.br +0 -0
- package/payload/server/public/assets/requirementDiagram-MS252O5E-yxh30zHX.js.gz +0 -0
- package/payload/server/public/assets/{rotate-ccw-BNcqbHkZ.js → rotate-ccw-jeSVwUAv.js} +1 -1
- package/payload/server/public/assets/rotate-ccw-jeSVwUAv.js.br +0 -0
- package/payload/server/public/assets/rotate-ccw-jeSVwUAv.js.gz +0 -0
- package/payload/server/public/assets/routines-D3M1Wh3a.js +1 -0
- package/payload/server/public/assets/routines-D3M1Wh3a.js.br +0 -0
- package/payload/server/public/assets/routines-D3M1Wh3a.js.gz +0 -0
- package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-c_y3bvVv.js → sankeyDiagram-XADWPNL6-j-k9Wfty.js} +1 -1
- package/payload/server/public/assets/sankeyDiagram-XADWPNL6-j-k9Wfty.js.br +0 -0
- package/payload/server/public/assets/sankeyDiagram-XADWPNL6-j-k9Wfty.js.gz +0 -0
- package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-YwlCBPHE.js → sequenceDiagram-FGHM5R23-DGLgcLhC.js} +1 -1
- package/payload/server/public/assets/sequenceDiagram-FGHM5R23-DGLgcLhC.js.br +0 -0
- package/payload/server/public/assets/sequenceDiagram-FGHM5R23-DGLgcLhC.js.gz +0 -0
- package/payload/server/public/assets/{skills-COLAw_jt.js → skills-Bhej2ub1.js} +1 -1
- package/payload/server/public/assets/skills-Bhej2ub1.js.br +0 -0
- package/payload/server/public/assets/skills-Bhej2ub1.js.gz +0 -0
- package/payload/server/public/assets/{stateDiagram-FHFEXIEX-BFE3e-FM.js → stateDiagram-FHFEXIEX-C9p1OUMI.js} +1 -1
- package/payload/server/public/assets/stateDiagram-FHFEXIEX-C9p1OUMI.js.br +0 -0
- package/payload/server/public/assets/stateDiagram-FHFEXIEX-C9p1OUMI.js.gz +0 -0
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Bf808Apk.js +1 -0
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Bf808Apk.js.br +0 -0
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Bf808Apk.js.gz +0 -0
- package/payload/server/public/assets/{tasks-CZDQI4nB.js → tasks-qY-dtOI2.js} +1 -1
- package/payload/server/public/assets/tasks-qY-dtOI2.js.br +0 -0
- package/payload/server/public/assets/tasks-qY-dtOI2.js.gz +0 -0
- package/payload/server/public/assets/{time-entry-format-laTFzawg.js → time-entry-format-r5UY9rjG.js} +1 -1
- package/payload/server/public/assets/time-entry-format-r5UY9rjG.js.br +0 -0
- package/payload/server/public/assets/time-entry-format-r5UY9rjG.js.gz +0 -0
- package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-azqhmRwZ.js → timeline-definition-GMOUNBTQ-B1g7pgkH.js} +1 -1
- package/payload/server/public/assets/timeline-definition-GMOUNBTQ-B1g7pgkH.js.br +0 -0
- package/payload/server/public/assets/timeline-definition-GMOUNBTQ-B1g7pgkH.js.gz +0 -0
- package/payload/server/public/assets/treeView-SZITEDCU-DetKw0D0.js +1 -0
- package/payload/server/public/assets/treeView-SZITEDCU-DetKw0D0.js.br +0 -0
- package/payload/server/public/assets/treemap-W4RFUUIX-zQkIANxW.js +1 -0
- package/payload/server/public/assets/treemap-W4RFUUIX-zQkIANxW.js.br +0 -0
- package/payload/server/public/assets/{triangle-alert-DrwqhEog.js → triangle-alert--PCKaewD.js} +1 -1
- package/payload/server/public/assets/triangle-alert--PCKaewD.js.br +2 -0
- package/payload/server/public/assets/triangle-alert--PCKaewD.js.gz +0 -0
- package/payload/server/public/assets/{useCopyFeedback-Cxme5GK6.js → useCopyFeedback-Dg5lNgqH.js} +1 -1
- package/payload/server/public/assets/useCopyFeedback-Dg5lNgqH.js.br +0 -0
- package/payload/server/public/assets/useCopyFeedback-Dg5lNgqH.js.gz +0 -0
- package/payload/server/public/assets/useSubAccountSwitcher-BYfe9vj8.css +1 -0
- package/payload/server/public/assets/useSubAccountSwitcher-BYfe9vj8.css.br +0 -0
- package/payload/server/public/assets/useSubAccountSwitcher-BYfe9vj8.css.gz +0 -0
- package/payload/server/public/assets/{useVoiceRecorder-DUBpVa2T.js → useVoiceRecorder-BY6ZsGMH.js} +2 -2
- package/payload/server/public/assets/useVoiceRecorder-BY6ZsGMH.js.br +0 -0
- package/payload/server/public/assets/useVoiceRecorder-BY6ZsGMH.js.gz +0 -0
- package/payload/server/public/assets/{vennDiagram-DHZGUBPP-Da2RfFs8.js → vennDiagram-DHZGUBPP-D2ZjFfh4.js} +1 -1
- package/payload/server/public/assets/vennDiagram-DHZGUBPP-D2ZjFfh4.js.br +0 -0
- package/payload/server/public/assets/vennDiagram-DHZGUBPP-D2ZjFfh4.js.gz +0 -0
- package/payload/server/public/assets/wardley-RL74JXVD-DkQV3DvB.js +1 -0
- package/payload/server/public/assets/wardley-RL74JXVD-DkQV3DvB.js.br +0 -0
- package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-HdrdBYES.js → wardleyDiagram-NUSXRM2D-BFAhfkD8.js} +1 -1
- package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-BFAhfkD8.js.br +0 -0
- package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-BFAhfkD8.js.gz +0 -0
- package/payload/server/public/assets/{wrench-DWuxPnzF.js → wrench-Bw1FMolk.js} +1 -1
- package/payload/server/public/assets/wrench-Bw1FMolk.js.br +0 -0
- package/payload/server/public/assets/wrench-Bw1FMolk.js.gz +0 -0
- package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-DMk6rTcQ.js → xychartDiagram-5P7HB3ND-Dt94h2RQ.js} +1 -1
- package/payload/server/public/assets/xychartDiagram-5P7HB3ND-Dt94h2RQ.js.br +0 -0
- package/payload/server/public/assets/xychartDiagram-5P7HB3ND-Dt94h2RQ.js.gz +0 -0
- package/payload/server/public/brand-defaults.css +1 -0
- package/payload/server/public/browser.html +4 -4
- package/payload/server/public/calendar.html +7 -7
- package/payload/server/public/chat.html +14 -14
- package/payload/server/public/data.html +13 -12
- package/payload/server/public/graph.html +9 -9
- package/payload/server/public/index.html +16 -15
- package/payload/server/public/operator.html +15 -15
- package/payload/server/public/public.html +14 -14
- package/payload/server/public/routines.html +7 -6
- package/payload/server/public/skills.html +5 -5
- package/payload/server/public/tasks.html +6 -6
- package/payload/server/server.js +744 -425
- package/payload/platform/.docs/search-surface-contract.md +0 -58
- package/payload/platform/docs/superpowers/plans/2026-06-02-task-610-follower-202-retry.md +0 -372
- package/payload/platform/docs/superpowers/plans/2026-06-04-public-agent-knowledge-delivery.md +0 -230
- package/payload/platform/docs/superpowers/plans/2026-06-23-account-filesystem-schema.md +0 -544
- package/payload/platform/docs/superpowers/plans/2026-07-11-task-1557-operator-on-behalf-preference-attribution.md +0 -542
- package/payload/platform/docs/superpowers/plans/2026-07-13-account-schema-ontology-projection.md +0 -547
- package/payload/platform/docs/superpowers/plans/2026-07-14-graph-top-level-labels-ontology-single-source.md +0 -458
- package/payload/platform/docs/superpowers/plans/2026-07-17-task-1736-retire-mcp-stderr-tee.md +0 -397
- package/payload/platform/docs/superpowers/plans/2026-07-18-graph-native-ledger.md +0 -807
- package/payload/platform/docs/superpowers/plans/2026-07-18-ledger-write-path-fix.md +0 -109
- package/payload/platform/docs/superpowers/plans/2026-07-20-storage-pages-create.md +0 -82
- package/payload/platform/docs/superpowers/plans/2026-07-20-task-1704-data-portal-standing-audit.md +0 -673
- package/payload/platform/docs/superpowers/plans/2026-07-20-task-1789-reseat-channel-row-fork.md +0 -1244
- package/payload/platform/docs/superpowers/plans/2026-07-20-task-1818-loop-gate-app-routes.md +0 -462
- package/payload/platform/docs/superpowers/plans/2026-07-20-task-1819-top-level-label-allowlist.md +0 -321
- package/payload/platform/docs/superpowers/plans/2026-07-20-task-1829-platform-ui-typecheck.md +0 -830
- package/payload/platform/docs/superpowers/plans/2026-07-20-task-1831-data-portal-class-derived-allowlist.md +0 -2177
- package/payload/platform/docs/superpowers/plans/2026-07-21-graph-caption-resolver.md +0 -124
- package/payload/platform/docs/superpowers/plans/2026-07-21-task-1877-bash-schema-enforcement.md +0 -107
- package/payload/platform/docs/superpowers/plans/2026-07-21-task-1887-reconcile-allowed-top-level.md +0 -205
- package/payload/platform/docs/superpowers/plans/2026-07-22-task-1899-reconcile-report-only.md +0 -748
- package/payload/platform/docs/superpowers/plans/2026-07-22-task-1910-two-way-portal-exchange.md +0 -1716
- package/payload/platform/docs/superpowers/plans/2026-07-23-task-1930-adherence-enforcement.md +0 -422
- package/payload/platform/docs/superpowers/plans/2026-07-24-task-1942-subaccount-switcher-brand-head.md +0 -327
- package/payload/platform/docs/superpowers/plans/2026-07-25-task-1974-uploads-intake-inbox.md +0 -235
- package/payload/platform/docs/superpowers/plans/2026-07-25-task-1976-intra-folder-hygiene.md +0 -215
- package/payload/platform/docs/superpowers/plans/2026-07-26-task-1902-account-owned-entry-declarations.md +0 -555
- package/payload/platform/docs/superpowers/plans/2026-07-26-task-1926-portal-push-concurrency-guard.md +0 -482
- package/payload/platform/docs/superpowers/plans/2026-07-26-task-2023-sidebar-sessions-async-reads.md +0 -394
- package/payload/platform/docs/superpowers/plans/2026-07-27-task-2016-disabled-agent-routing.md +0 -624
- package/payload/platform/docs/superpowers/plans/2026-07-27-task-2028-declared-file-write-deny.md +0 -303
- package/payload/platform/docs/superpowers/plans/2026-07-27-task-2052-account-machinery-write-fence.md +0 -250
- package/payload/platform/docs/superpowers/plans/2026-07-28-task-2097-email-signature-set.md +0 -65
- package/payload/platform/docs/superpowers/specs/2026-06-02-task-610-follower-202-retry-design.md +0 -116
- package/payload/platform/docs/superpowers/specs/2026-06-23-account-filesystem-schema-design.md +0 -170
- package/payload/platform/docs/superpowers/specs/2026-07-11-task-1557-operator-on-behalf-preference-attribution-design.md +0 -90
- package/payload/platform/docs/superpowers/specs/2026-07-13-account-schema-ontology-projection-design.md +0 -178
- package/payload/platform/docs/superpowers/specs/2026-07-14-graph-top-level-labels-ontology-single-source-design.md +0 -119
- package/payload/platform/docs/superpowers/specs/2026-07-17-task-1736-retire-mcp-stderr-tee-design.md +0 -128
- package/payload/platform/docs/superpowers/specs/2026-07-18-graph-native-ledger-design.md +0 -241
- package/payload/platform/docs/superpowers/specs/2026-07-20-task-1704-data-portal-standing-audit-design.md +0 -177
- package/payload/platform/docs/superpowers/specs/2026-07-20-task-1789-reseat-channel-row-fork-design.md +0 -201
- package/payload/platform/docs/superpowers/specs/2026-07-20-task-1818-loop-gate-app-routes-design.md +0 -217
- package/payload/platform/docs/superpowers/specs/2026-07-20-task-1819-top-level-label-allowlist-design.md +0 -80
- package/payload/platform/docs/superpowers/specs/2026-07-20-task-1820-cpu-triage-admin-tools-design.md +0 -97
- package/payload/platform/docs/superpowers/specs/2026-07-20-task-1829-platform-ui-typecheck-design.md +0 -163
- package/payload/platform/docs/superpowers/specs/2026-07-20-task-1831-data-portal-class-derived-allowlist-design.md +0 -163
- package/payload/platform/docs/superpowers/specs/2026-07-22-task-1899-reconcile-report-only-design.md +0 -121
- package/payload/platform/docs/superpowers/specs/2026-07-22-task-1910-two-way-portal-exchange-design.md +0 -103
- package/payload/platform/docs/superpowers/specs/2026-07-23-task-1930-adherence-enforcement-design.md +0 -81
- package/payload/platform/docs/superpowers/specs/2026-07-24-task-1942-subaccount-switcher-brand-head-design.md +0 -35
- package/payload/platform/docs/superpowers/specs/2026-07-26-task-1902-account-owned-entry-declarations-design.md +0 -232
- package/payload/platform/docs/superpowers/specs/2026-07-26-task-1926-portal-push-concurrency-guard-design.md +0 -200
- package/payload/platform/docs/superpowers/specs/2026-07-26-task-2014-ui-suite-nondeterminism-design.md +0 -169
- package/payload/platform/docs/superpowers/specs/2026-07-27-task-2016-disabled-agent-routing-design.md +0 -139
- package/payload/platform/docs/superpowers/specs/2026-07-27-task-2028-declared-file-write-deny-design.md +0 -127
- package/payload/platform/docs/superpowers/specs/2026-07-27-task-2052-account-machinery-write-fence-design.md +0 -150
- package/payload/platform/docs/superpowers/specs/2026-07-28-task-2097-email-signature-set-design.md +0 -155
- package/payload/server/public/assets/AdminLoginScreens-uknqh2Pm.js.br +0 -0
- package/payload/server/public/assets/AdminLoginScreens-uknqh2Pm.js.gz +0 -0
- package/payload/server/public/assets/AdminShell-GqtMImyQ.js.br +0 -0
- package/payload/server/public/assets/AdminShell-GqtMImyQ.js.gz +0 -0
- package/payload/server/public/assets/activity-B4KfMJqO.js.br +0 -0
- package/payload/server/public/assets/activity-B4KfMJqO.js.gz +0 -0
- package/payload/server/public/assets/admin-DxCZeVw0.js +0 -1
- package/payload/server/public/assets/admin-DxCZeVw0.js.br +0 -0
- package/payload/server/public/assets/admin-DxCZeVw0.js.gz +0 -0
- package/payload/server/public/assets/agents-BtwBuO4G.js +0 -1
- package/payload/server/public/assets/agents-BtwBuO4G.js.br +0 -0
- package/payload/server/public/assets/agents-BtwBuO4G.js.gz +0 -0
- package/payload/server/public/assets/arc-DaI5MLTq.js.br +0 -0
- package/payload/server/public/assets/arc-DaI5MLTq.js.gz +0 -0
- package/payload/server/public/assets/architecture-YZFGNWBL-DWZIX5aV.js +0 -1
- package/payload/server/public/assets/architecture-YZFGNWBL-DWZIX5aV.js.br +0 -0
- package/payload/server/public/assets/architectureDiagram-Q4EWVU46-CBGVUEN9.js.br +0 -0
- package/payload/server/public/assets/architectureDiagram-Q4EWVU46-CBGVUEN9.js.gz +0 -0
- package/payload/server/public/assets/blockDiagram-DXYQGD6D-DS6dS4GZ.js.br +0 -0
- package/payload/server/public/assets/blockDiagram-DXYQGD6D-DS6dS4GZ.js.gz +0 -0
- package/payload/server/public/assets/browser-B3hSzI3O.js.br +0 -0
- package/payload/server/public/assets/browser-B3hSzI3O.js.gz +0 -0
- package/payload/server/public/assets/c4Diagram-AHTNJAMY-hBSBUZPt.js.br +0 -0
- package/payload/server/public/assets/calendar-BggxXxhS.js.br +0 -0
- package/payload/server/public/assets/calendar-BggxXxhS.js.gz +0 -0
- package/payload/server/public/assets/channel-BEokjAeE.js +0 -1
- package/payload/server/public/assets/channel-BEokjAeE.js.br +0 -0
- package/payload/server/public/assets/chat-flivHt0t.js +0 -1
- package/payload/server/public/assets/chat-flivHt0t.js.br +0 -0
- package/payload/server/public/assets/chat-flivHt0t.js.gz +0 -0
- package/payload/server/public/assets/chevron-left-nVRThX7f.js +0 -1
- package/payload/server/public/assets/chevron-right-CLqfrkRA.js +0 -1
- package/payload/server/public/assets/chevron-right-CLqfrkRA.js.br +0 -0
- package/payload/server/public/assets/chunk-2KRD3SAO-B6koUoB7.js.br +0 -0
- package/payload/server/public/assets/chunk-2KRD3SAO-B6koUoB7.js.gz +0 -0
- package/payload/server/public/assets/chunk-336JU56O-BF6BRh8u.js.br +0 -0
- package/payload/server/public/assets/chunk-336JU56O-BF6BRh8u.js.gz +0 -0
- package/payload/server/public/assets/chunk-426QAEUC-pbQ4PWBU.js +0 -1
- package/payload/server/public/assets/chunk-426QAEUC-pbQ4PWBU.js.br +0 -0
- package/payload/server/public/assets/chunk-426QAEUC-pbQ4PWBU.js.gz +0 -0
- package/payload/server/public/assets/chunk-4BX2VUAB-7sO95xR2.js.br +0 -0
- package/payload/server/public/assets/chunk-4BX2VUAB-7sO95xR2.js.gz +0 -0
- package/payload/server/public/assets/chunk-4TB4RGXK-GCTndJYx.js.br +0 -0
- package/payload/server/public/assets/chunk-4TB4RGXK-GCTndJYx.js.gz +0 -0
- package/payload/server/public/assets/chunk-55IACEB6-ggIJf_TC.js.br +0 -0
- package/payload/server/public/assets/chunk-55IACEB6-ggIJf_TC.js.gz +0 -0
- package/payload/server/public/assets/chunk-5FUZZQ4R-DeGmkimt.js.br +0 -0
- package/payload/server/public/assets/chunk-5FUZZQ4R-DeGmkimt.js.gz +0 -0
- package/payload/server/public/assets/chunk-5PVQY5BW-aFIQKk_U.js.br +0 -0
- package/payload/server/public/assets/chunk-5PVQY5BW-aFIQKk_U.js.gz +0 -0
- package/payload/server/public/assets/chunk-67CJDMHE-LS8rUbii.js.br +0 -2
- package/payload/server/public/assets/chunk-67CJDMHE-LS8rUbii.js.gz +0 -0
- package/payload/server/public/assets/chunk-7N4EOEYR-JKOVngS0.js.br +0 -2
- package/payload/server/public/assets/chunk-7N4EOEYR-JKOVngS0.js.gz +0 -0
- package/payload/server/public/assets/chunk-AA7GKIK3-CoXnTVK6.js.br +0 -0
- package/payload/server/public/assets/chunk-AA7GKIK3-CoXnTVK6.js.gz +0 -0
- package/payload/server/public/assets/chunk-BSJP7CBP-CcsqObFg.js.br +0 -0
- package/payload/server/public/assets/chunk-BSJP7CBP-CcsqObFg.js.gz +0 -0
- package/payload/server/public/assets/chunk-CIAEETIT-CpsybR7q.js.br +0 -0
- package/payload/server/public/assets/chunk-CIAEETIT-CpsybR7q.js.gz +0 -0
- package/payload/server/public/assets/chunk-EDXVE4YY-BZ2I9PSq.js.br +0 -0
- package/payload/server/public/assets/chunk-EDXVE4YY-BZ2I9PSq.js.gz +0 -0
- package/payload/server/public/assets/chunk-ENJZ2VHE-DbTwt6OZ.js.br +0 -0
- package/payload/server/public/assets/chunk-ENJZ2VHE-DbTwt6OZ.js.gz +0 -0
- package/payload/server/public/assets/chunk-FMBD7UC4-D27VnSCa.js.br +0 -0
- package/payload/server/public/assets/chunk-FMBD7UC4-D27VnSCa.js.gz +0 -0
- package/payload/server/public/assets/chunk-FOC6F5B3-C0tU2UFl.js.br +0 -0
- package/payload/server/public/assets/chunk-FOC6F5B3-C0tU2UFl.js.gz +0 -0
- package/payload/server/public/assets/chunk-ICPOFSXX-UPPu2OIq.js.br +0 -0
- package/payload/server/public/assets/chunk-ICPOFSXX-UPPu2OIq.js.gz +0 -0
- package/payload/server/public/assets/chunk-K5T4RW27-DIKxqyYw.js.br +0 -0
- package/payload/server/public/assets/chunk-K5T4RW27-DIKxqyYw.js.gz +0 -0
- package/payload/server/public/assets/chunk-KGLVRYIC-CiL4YVLo.js.br +0 -0
- package/payload/server/public/assets/chunk-KGLVRYIC-CiL4YVLo.js.gz +0 -0
- package/payload/server/public/assets/chunk-LIHQZDEY-ejKezVlD.js.br +0 -0
- package/payload/server/public/assets/chunk-LIHQZDEY-ejKezVlD.js.gz +0 -0
- package/payload/server/public/assets/chunk-ORNJ4GCN-Cc0vqc-D.js.br +0 -0
- package/payload/server/public/assets/chunk-ORNJ4GCN-Cc0vqc-D.js.gz +0 -0
- package/payload/server/public/assets/chunk-OYMX7WX6-Drxn1qG0.js.br +0 -0
- package/payload/server/public/assets/chunk-OYMX7WX6-Drxn1qG0.js.gz +0 -0
- package/payload/server/public/assets/chunk-QZHKN3VN-Dhlh7Pkk.js +0 -1
- package/payload/server/public/assets/chunk-QZHKN3VN-Dhlh7Pkk.js.br +0 -0
- package/payload/server/public/assets/chunk-QZHKN3VN-Dhlh7Pkk.js.gz +0 -0
- package/payload/server/public/assets/chunk-U2HBQHQK-DnbQIkRP.js.br +0 -0
- package/payload/server/public/assets/chunk-U2HBQHQK-DnbQIkRP.js.gz +0 -0
- package/payload/server/public/assets/chunk-X2U36JSP-CauTSVWg.js.br +0 -0
- package/payload/server/public/assets/chunk-X2U36JSP-CauTSVWg.js.gz +0 -0
- package/payload/server/public/assets/chunk-XPW4576I-DZqqB9Zi.js.br +0 -0
- package/payload/server/public/assets/chunk-XPW4576I-DZqqB9Zi.js.gz +0 -0
- package/payload/server/public/assets/chunk-YZCP3GAM-BGHo4Li-.js.br +0 -0
- package/payload/server/public/assets/chunk-YZCP3GAM-BGHo4Li-.js.gz +0 -0
- package/payload/server/public/assets/chunk-ZZ45TVLE-DWGJKPd7.js.br +0 -0
- package/payload/server/public/assets/chunk-ZZ45TVLE-DWGJKPd7.js.gz +0 -0
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-D2z_ZV1x.js +0 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-D2z_ZV1x.js.br +0 -0
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-D2z_ZV1x.js.gz +0 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BJwJoNEK.js +0 -1
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BJwJoNEK.js.br +0 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BJwJoNEK.js.gz +0 -0
- package/payload/server/public/assets/clock-Dj3SRZKo.js +0 -1
- package/payload/server/public/assets/clock-Dj3SRZKo.js.br +0 -0
- package/payload/server/public/assets/clock-Dj3SRZKo.js.gz +0 -0
- package/payload/server/public/assets/clone-Bn7XXVhr.js +0 -1
- package/payload/server/public/assets/clone-Bn7XXVhr.js.br +0 -0
- package/payload/server/public/assets/cose-bilkent-S5V4N54A-D-95BzXL.js.br +0 -0
- package/payload/server/public/assets/cose-bilkent-S5V4N54A-D-95BzXL.js.gz +0 -0
- package/payload/server/public/assets/dagre-BZYNBHvT.js.br +0 -0
- package/payload/server/public/assets/dagre-BZYNBHvT.js.gz +0 -0
- package/payload/server/public/assets/dagre-KV5264BT-DyU4HQLQ.js.br +0 -0
- package/payload/server/public/assets/dagre-KV5264BT-DyU4HQLQ.js.gz +0 -0
- package/payload/server/public/assets/data-Ckjkne54.js +0 -1
- package/payload/server/public/assets/data-Ckjkne54.js.br +0 -3
- package/payload/server/public/assets/data-Ckjkne54.js.gz +0 -0
- package/payload/server/public/assets/diagram-5BDNPKRD-CCttJ9XA.js.br +0 -0
- package/payload/server/public/assets/diagram-5BDNPKRD-CCttJ9XA.js.gz +0 -0
- package/payload/server/public/assets/diagram-G4DWMVQ6-DvkpgSLO.js.br +0 -0
- package/payload/server/public/assets/diagram-G4DWMVQ6-DvkpgSLO.js.gz +0 -0
- package/payload/server/public/assets/diagram-MMDJMWI5-DHmW5Y9k.js.br +0 -0
- package/payload/server/public/assets/diagram-MMDJMWI5-DHmW5Y9k.js.gz +0 -0
- package/payload/server/public/assets/diagram-TYMM5635-C6T4hwzO.js.br +0 -0
- package/payload/server/public/assets/diagram-TYMM5635-C6T4hwzO.js.gz +0 -0
- package/payload/server/public/assets/erDiagram-SMLLAGMA-5v_o7s3T.js.br +0 -0
- package/payload/server/public/assets/erDiagram-SMLLAGMA-5v_o7s3T.js.gz +0 -0
- package/payload/server/public/assets/file-text-BKs9eyiw.js.br +0 -0
- package/payload/server/public/assets/file-text-BKs9eyiw.js.gz +0 -0
- package/payload/server/public/assets/flatten-BtIc9jX7.js.br +0 -0
- package/payload/server/public/assets/flatten-BtIc9jX7.js.gz +0 -0
- package/payload/server/public/assets/flowDiagram-DWJPFMVM-3UhCDsjt.js.br +0 -0
- package/payload/server/public/assets/flowDiagram-DWJPFMVM-3UhCDsjt.js.gz +0 -0
- package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-F2zgHIIQ.js.br +0 -0
- package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-F2zgHIIQ.js.gz +0 -0
- package/payload/server/public/assets/gitGraph-7Q5UKJZL-C-FvNTHZ.js +0 -1
- package/payload/server/public/assets/gitGraph-7Q5UKJZL-C-FvNTHZ.js.br +0 -0
- package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-oQc1N3dT.js.br +0 -0
- package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-oQc1N3dT.js.gz +0 -0
- package/payload/server/public/assets/graph-DTi71NaZ.js.br +0 -0
- package/payload/server/public/assets/graph-DTi71NaZ.js.gz +0 -0
- package/payload/server/public/assets/graph-labels-BT3S6e9H.js.br +0 -0
- package/payload/server/public/assets/graph-labels-BT3S6e9H.js.gz +0 -0
- package/payload/server/public/assets/graphlib-DY4-AT2Q.js.br +0 -0
- package/payload/server/public/assets/graphlib-DY4-AT2Q.js.gz +0 -0
- package/payload/server/public/assets/info-OMHHGYJF-BjLPgHAC.js +0 -1
- package/payload/server/public/assets/info-OMHHGYJF-BjLPgHAC.js.br +0 -0
- package/payload/server/public/assets/infoDiagram-42DDH7IO-CXNKLTui.js +0 -2
- package/payload/server/public/assets/infoDiagram-42DDH7IO-CXNKLTui.js.br +0 -0
- package/payload/server/public/assets/infoDiagram-42DDH7IO-CXNKLTui.js.gz +0 -0
- package/payload/server/public/assets/isEmpty-Bu4fZ8Kf.js.br +0 -0
- package/payload/server/public/assets/isEmpty-Bu4fZ8Kf.js.gz +0 -0
- package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-wJhSOkuw.js.br +0 -0
- package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-wJhSOkuw.js.gz +0 -0
- package/payload/server/public/assets/journeyDiagram-VCZTEJTY-DgadC6Pz.js.br +0 -0
- package/payload/server/public/assets/journeyDiagram-VCZTEJTY-DgadC6Pz.js.gz +0 -0
- package/payload/server/public/assets/kanban-definition-6JOO6SKY-Bs4nQqXI.js.br +0 -0
- package/payload/server/public/assets/kanban-definition-6JOO6SKY-Bs4nQqXI.js.gz +0 -0
- package/payload/server/public/assets/line-Bnmxy1hO.js.br +0 -0
- package/payload/server/public/assets/line-Bnmxy1hO.js.gz +0 -0
- package/payload/server/public/assets/linear-RvwZxFzh.js.br +0 -0
- package/payload/server/public/assets/linear-RvwZxFzh.js.gz +0 -0
- package/payload/server/public/assets/maximize-2-zC94tsxY.js.br +0 -0
- package/payload/server/public/assets/maximize-2-zC94tsxY.js.gz +0 -0
- package/payload/server/public/assets/mermaid-parser.core-DeNV8RtA.js.br +0 -0
- package/payload/server/public/assets/mermaid-parser.core-DeNV8RtA.js.gz +0 -0
- package/payload/server/public/assets/mermaid.core-BU9IiSCP.js.br +0 -0
- package/payload/server/public/assets/mermaid.core-BU9IiSCP.js.gz +0 -0
- package/payload/server/public/assets/mindmap-definition-QFDTVHPH-D1PMUxxm.js.br +0 -0
- package/payload/server/public/assets/mindmap-definition-QFDTVHPH-D1PMUxxm.js.gz +0 -0
- package/payload/server/public/assets/operator-BtWNEMh-.js.br +0 -0
- package/payload/server/public/assets/operator-BtWNEMh-.js.gz +0 -0
- package/payload/server/public/assets/ordinal-C2TEWKNu.js.br +0 -0
- package/payload/server/public/assets/ordinal-C2TEWKNu.js.gz +0 -0
- package/payload/server/public/assets/packet-4T2RLAQJ-BBAZASfb.js +0 -1
- package/payload/server/public/assets/packet-4T2RLAQJ-BBAZASfb.js.br +0 -0
- package/payload/server/public/assets/page-BFm91p0e.js +0 -1
- package/payload/server/public/assets/page-BFm91p0e.js.br +0 -0
- package/payload/server/public/assets/page-BFm91p0e.js.gz +0 -0
- package/payload/server/public/assets/page-Ccl0FazM.js.br +0 -0
- package/payload/server/public/assets/page-Ccl0FazM.js.gz +0 -0
- package/payload/server/public/assets/pdf-render-C257cidb.js.br +0 -0
- package/payload/server/public/assets/pdf-render-C257cidb.js.gz +0 -0
- package/payload/server/public/assets/pie-ZZUOXDRM-CCJUnMeG.js +0 -1
- package/payload/server/public/assets/pie-ZZUOXDRM-CCJUnMeG.js.br +0 -0
- package/payload/server/public/assets/pieDiagram-DEJITSTG-BzdNzoKA.js.br +0 -0
- package/payload/server/public/assets/pieDiagram-DEJITSTG-BzdNzoKA.js.gz +0 -0
- package/payload/server/public/assets/public-BpC6cn9S.js.br +0 -0
- package/payload/server/public/assets/public-BpC6cn9S.js.gz +0 -0
- package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-oFr1MJRO.js.br +0 -0
- package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-oFr1MJRO.js.gz +0 -0
- package/payload/server/public/assets/radar-PYXPWWZC-BsRU8Aep.js +0 -1
- package/payload/server/public/assets/radar-PYXPWWZC-BsRU8Aep.js.br +0 -0
- package/payload/server/public/assets/reduce-BGpN5lgn.js.br +0 -0
- package/payload/server/public/assets/reduce-BGpN5lgn.js.gz +0 -0
- package/payload/server/public/assets/requirementDiagram-MS252O5E-C9QBQxDh.js.br +0 -0
- package/payload/server/public/assets/requirementDiagram-MS252O5E-C9QBQxDh.js.gz +0 -0
- package/payload/server/public/assets/rotate-ccw-BNcqbHkZ.js.br +0 -0
- package/payload/server/public/assets/rotate-ccw-BNcqbHkZ.js.gz +0 -0
- package/payload/server/public/assets/routines-D5iia-XG.js +0 -1
- package/payload/server/public/assets/routines-D5iia-XG.js.br +0 -0
- package/payload/server/public/assets/routines-D5iia-XG.js.gz +0 -0
- package/payload/server/public/assets/sankeyDiagram-XADWPNL6-c_y3bvVv.js.br +0 -0
- package/payload/server/public/assets/sankeyDiagram-XADWPNL6-c_y3bvVv.js.gz +0 -0
- package/payload/server/public/assets/sequenceDiagram-FGHM5R23-YwlCBPHE.js.br +0 -0
- package/payload/server/public/assets/sequenceDiagram-FGHM5R23-YwlCBPHE.js.gz +0 -0
- package/payload/server/public/assets/skills-COLAw_jt.js.br +0 -0
- package/payload/server/public/assets/skills-COLAw_jt.js.gz +0 -0
- package/payload/server/public/assets/stateDiagram-FHFEXIEX-BFE3e-FM.js.br +0 -0
- package/payload/server/public/assets/stateDiagram-FHFEXIEX-BFE3e-FM.js.gz +0 -0
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-CpjB4ykI.js +0 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-CpjB4ykI.js.br +0 -4
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-CpjB4ykI.js.gz +0 -0
- package/payload/server/public/assets/tasks-CZDQI4nB.js.br +0 -0
- package/payload/server/public/assets/tasks-CZDQI4nB.js.gz +0 -0
- package/payload/server/public/assets/time-entry-format-laTFzawg.js.br +0 -0
- package/payload/server/public/assets/time-entry-format-laTFzawg.js.gz +0 -0
- package/payload/server/public/assets/timeline-definition-GMOUNBTQ-azqhmRwZ.js.br +0 -0
- package/payload/server/public/assets/timeline-definition-GMOUNBTQ-azqhmRwZ.js.gz +0 -0
- package/payload/server/public/assets/treeView-SZITEDCU-BDzhKA6v.js +0 -1
- package/payload/server/public/assets/treeView-SZITEDCU-BDzhKA6v.js.br +0 -0
- package/payload/server/public/assets/treemap-W4RFUUIX-epHpdeWa.js +0 -1
- package/payload/server/public/assets/treemap-W4RFUUIX-epHpdeWa.js.br +0 -0
- package/payload/server/public/assets/triangle-alert-DrwqhEog.js.br +0 -0
- package/payload/server/public/assets/triangle-alert-DrwqhEog.js.gz +0 -0
- package/payload/server/public/assets/useCopyFeedback-Cxme5GK6.js.br +0 -0
- package/payload/server/public/assets/useCopyFeedback-Cxme5GK6.js.gz +0 -0
- package/payload/server/public/assets/useSubAccountSwitcher-B-K8y5a4.css +0 -1
- package/payload/server/public/assets/useSubAccountSwitcher-B-K8y5a4.css.br +0 -0
- package/payload/server/public/assets/useSubAccountSwitcher-B-K8y5a4.css.gz +0 -0
- package/payload/server/public/assets/useVoiceRecorder-DUBpVa2T.js.br +0 -0
- package/payload/server/public/assets/useVoiceRecorder-DUBpVa2T.js.gz +0 -0
- package/payload/server/public/assets/vennDiagram-DHZGUBPP-Da2RfFs8.js.br +0 -0
- package/payload/server/public/assets/vennDiagram-DHZGUBPP-Da2RfFs8.js.gz +0 -0
- package/payload/server/public/assets/wardley-RL74JXVD-DNSZCrxV.js +0 -1
- package/payload/server/public/assets/wardley-RL74JXVD-DNSZCrxV.js.br +0 -0
- package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-HdrdBYES.js.br +0 -0
- package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-HdrdBYES.js.gz +0 -0
- package/payload/server/public/assets/wrench-DWuxPnzF.js.br +0 -0
- package/payload/server/public/assets/wrench-DWuxPnzF.js.gz +0 -0
- package/payload/server/public/assets/xychartDiagram-5P7HB3ND-DMk6rTcQ.js.br +0 -0
- package/payload/server/public/assets/xychartDiagram-5P7HB3ND-DMk6rTcQ.js.gz +0 -0
- /package/payload/server/public/assets/{_baseFor-Be3EKK3K.js → _baseFor-B12He5Rp.js} +0 -0
- /package/payload/server/public/assets/{_baseFor-Be3EKK3K.js.br → _baseFor-B12He5Rp.js.br} +0 -0
- /package/payload/server/public/assets/{_baseFor-Be3EKK3K.js.gz → _baseFor-B12He5Rp.js.gz} +0 -0
- /package/payload/server/public/assets/{array-X0JlPOfd.js → array-DO1uCttT.js} +0 -0
- /package/payload/server/public/assets/{array-X0JlPOfd.js.br → array-DO1uCttT.js.br} +0 -0
- /package/payload/server/public/assets/{cytoscape.esm-CI2IWMLB.js → cytoscape.esm-DFn2foqy.js} +0 -0
- /package/payload/server/public/assets/{cytoscape.esm-CI2IWMLB.js.br → cytoscape.esm-DFn2foqy.js.br} +0 -0
- /package/payload/server/public/assets/{cytoscape.esm-CI2IWMLB.js.gz → cytoscape.esm-DFn2foqy.js.gz} +0 -0
- /package/payload/server/public/assets/{defaultLocale-B6RGN4id.js → defaultLocale-ieI3yFoA.js} +0 -0
- /package/payload/server/public/assets/{defaultLocale-B6RGN4id.js.br → defaultLocale-ieI3yFoA.js.br} +0 -0
- /package/payload/server/public/assets/{defaultLocale-B6RGN4id.js.gz → defaultLocale-ieI3yFoA.js.gz} +0 -0
- /package/payload/server/public/assets/{dist-QvbmK1IP.js → dist-DlU7AEeD.js} +0 -0
- /package/payload/server/public/assets/{dist-QvbmK1IP.js.br → dist-DlU7AEeD.js.br} +0 -0
- /package/payload/server/public/assets/{dist-QvbmK1IP.js.gz → dist-DlU7AEeD.js.gz} +0 -0
- /package/payload/server/public/assets/{init-BmUWJJHz.js → init-BCRlEgNP.js} +0 -0
- /package/payload/server/public/assets/{init-BmUWJJHz.js.br → init-BCRlEgNP.js.br} +0 -0
- /package/payload/server/public/assets/{init-BmUWJJHz.js.gz → init-BCRlEgNP.js.gz} +0 -0
- /package/payload/server/public/assets/{katex-BjZuzSQn.js → katex-gkTaZgi6.js} +0 -0
- /package/payload/server/public/assets/{katex-BjZuzSQn.js.br → katex-gkTaZgi6.js.br} +0 -0
- /package/payload/server/public/assets/{katex-BjZuzSQn.js.gz → katex-gkTaZgi6.js.gz} +0 -0
- /package/payload/server/public/assets/{path-CoPyR7c2.js → path-DTmzQFjQ.js} +0 -0
- /package/payload/server/public/assets/{path-CoPyR7c2.js.br → path-DTmzQFjQ.js.br} +0 -0
- /package/payload/server/public/assets/{path-CoPyR7c2.js.gz → path-DTmzQFjQ.js.gz} +0 -0
- /package/payload/server/public/assets/{preload-helper-BQrMkyGX.js → preload-helper-eAV8hweq.js} +0 -0
- /package/payload/server/public/assets/{preload-helper-BQrMkyGX.js.br → preload-helper-eAV8hweq.js.br} +0 -0
- /package/payload/server/public/assets/{preload-helper-BQrMkyGX.js.gz → preload-helper-eAV8hweq.js.gz} +0 -0
- /package/payload/server/public/assets/{rough.esm-jSt7UMyi.js → rough.esm-BFJ-MgcB.js} +0 -0
- /package/payload/server/public/assets/{rough.esm-jSt7UMyi.js.br → rough.esm-BFJ-MgcB.js.br} +0 -0
- /package/payload/server/public/assets/{rough.esm-jSt7UMyi.js.gz → rough.esm-BFJ-MgcB.js.gz} +0 -0
- /package/payload/server/public/assets/{src-C2WwTWSY.js → src-9CNk4JU0.js} +0 -0
- /package/payload/server/public/assets/{src-C2WwTWSY.js.br → src-9CNk4JU0.js.br} +0 -0
- /package/payload/server/public/assets/{src-C2WwTWSY.js.gz → src-9CNk4JU0.js.gz} +0 -0
- /package/payload/server/public/assets/{useSubAccountSwitcher-C_1E11Dv.js → useSubAccountSwitcher-CnpeWIYq.js} +0 -0
- /package/payload/server/public/assets/{useSubAccountSwitcher-C_1E11Dv.js.br → useSubAccountSwitcher-CnpeWIYq.js.br} +0 -0
- /package/payload/server/public/assets/{useSubAccountSwitcher-C_1E11Dv.js.gz → useSubAccountSwitcher-CnpeWIYq.js.gz} +0 -0
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Task 2157 — UserPromptSubmit hook: inject a <mailboxes> block as
|
|
3
|
+
# additionalContext on every turn, naming the Outlook mailboxes attached to this
|
|
4
|
+
# account and the plugin that holds each, so a session never learns attachment
|
|
5
|
+
# state by polling one mail plugin and reading that plugin's miss as an
|
|
6
|
+
# account-wide fact (Task 2156's incident).
|
|
7
|
+
#
|
|
8
|
+
# Per-turn, not spawn-time: the delegated attach in that incident landed 27
|
|
9
|
+
# minutes after the session spawned, so an env stamp would have been stale in the
|
|
10
|
+
# very case this exists for.
|
|
11
|
+
#
|
|
12
|
+
# The hook is a READ-ONLY observer of the outlook plugin's store. It never writes
|
|
13
|
+
# there, and in particular never performs the rename MailboxRegistry.migrateLegacy
|
|
14
|
+
# does. Three fields leave the decrypt — mail, graphUserId, refreshTokenExpiry —
|
|
15
|
+
# and no other blob field reaches stdout, stderr or the log.
|
|
16
|
+
#
|
|
17
|
+
# Mirrors datetime-inject.sh: drain stdin first, node for the reading, python3 for
|
|
18
|
+
# the JSON envelope, exit 0 on every path, breadcrumb last. UserPromptSubmit
|
|
19
|
+
# output is ADDED to the prompt, never substituted.
|
|
20
|
+
#
|
|
21
|
+
# Input (stdin, UserPromptSubmit contract): { "session_id": "...", ... } —
|
|
22
|
+
# session_id is used only for the breadcrumb; the block is standing and
|
|
23
|
+
# prompt-independent.
|
|
24
|
+
# Output (stdout JSON):
|
|
25
|
+
# { "hookSpecificOutput": { "hookEventName": "UserPromptSubmit",
|
|
26
|
+
# "additionalContext": "<mailboxes>...</mailboxes>" } }
|
|
27
|
+
|
|
28
|
+
set -uo pipefail
|
|
29
|
+
|
|
30
|
+
# Drain stdin FIRST, before any exit path. Claude Code writes the full payload to
|
|
31
|
+
# our stdin; exiting before reading it leaves the parent blocked on write and then
|
|
32
|
+
# hit with EPIPE. Same reason the two sibling hooks drain first.
|
|
33
|
+
HOOK_INPUT=$(cat 2>/dev/null || true)
|
|
34
|
+
|
|
35
|
+
command -v python3 >/dev/null 2>&1 || exit 0
|
|
36
|
+
command -v node >/dev/null 2>&1 || exit 0
|
|
37
|
+
|
|
38
|
+
# --- account dir -----------------------------------------------------------
|
|
39
|
+
# ACCOUNT_DIR is stamped unconditionally on the rc-spawn path (rc-daemon.ts
|
|
40
|
+
# buildRcChildEnv) but only for admin/specialist on the pty-spawner path
|
|
41
|
+
# (pty-spawner.ts, the `isSpecialistSpawn || role === admin` gate), so a
|
|
42
|
+
# role:public webchat or passive WhatsApp spawn has none. The spawn cwd IS the
|
|
43
|
+
# account dir on both paths (config.ts: spawnCwd defaults to accountDir), which
|
|
44
|
+
# is how fs-schema-guard.sh already resolves it.
|
|
45
|
+
ACCT=""
|
|
46
|
+
if [ -n "${ACCOUNT_DIR:-}" ] && [ -d "${ACCOUNT_DIR}" ]; then
|
|
47
|
+
ACCT="$ACCOUNT_DIR"
|
|
48
|
+
elif [ -f "$PWD/.claude/settings.json" ] && [ -d "$PWD/secrets" ]; then
|
|
49
|
+
ACCT="$PWD"
|
|
50
|
+
fi
|
|
51
|
+
|
|
52
|
+
# --- log dir ---------------------------------------------------------------
|
|
53
|
+
# LOG_DIR is stamped ONLY on the rc-spawn path; pty-spawner never sets it and the
|
|
54
|
+
# systemd unit does not carry it. CLAUDE_SESSION_MANAGER_PERSIST_DIR is on the
|
|
55
|
+
# unit, and the manager itself derives its log dir as <persistDir>/logs, so that
|
|
56
|
+
# fallback resolves to the same directory. Task 2173 covers the sibling hooks,
|
|
57
|
+
# which have no such ladder and are silent on that path.
|
|
58
|
+
LOGD=""
|
|
59
|
+
if [ -n "${LOG_DIR:-}" ] && [ -d "${LOG_DIR}" ]; then
|
|
60
|
+
LOGD="$LOG_DIR"
|
|
61
|
+
elif [ -n "${CLAUDE_SESSION_MANAGER_PERSIST_DIR:-}" ] && [ -d "${CLAUDE_SESSION_MANAGER_PERSIST_DIR}/logs" ]; then
|
|
62
|
+
LOGD="$CLAUDE_SESSION_MANAGER_PERSIST_DIR/logs"
|
|
63
|
+
elif [ -n "$ACCT" ] && [ -d "$ACCT/logs" ]; then
|
|
64
|
+
LOGD="$ACCT/logs"
|
|
65
|
+
fi
|
|
66
|
+
|
|
67
|
+
SID=$(printf '%s' "$HOOK_INPUT" | python3 -c 'import json,sys
|
|
68
|
+
try:
|
|
69
|
+
print(json.load(sys.stdin).get("session_id","") or "?")
|
|
70
|
+
except Exception:
|
|
71
|
+
print("?")' 2>/dev/null)
|
|
72
|
+
SID=${SID:-?}
|
|
73
|
+
NOW_ISO=$(date -u +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || echo "?")
|
|
74
|
+
|
|
75
|
+
emit_log() {
|
|
76
|
+
local line="$NOW_ISO [mailbox-inject] $1 session=$SID"
|
|
77
|
+
if [ -n "$LOGD" ]; then
|
|
78
|
+
# stderr redirect FIRST: with the append first, bash emits its own
|
|
79
|
+
# "Permission denied" on an unwritable log before 2>/dev/null takes effect,
|
|
80
|
+
# and that escapes to the hook's stderr on every turn.
|
|
81
|
+
printf '%s\n' "$line" 2>/dev/null >> "$LOGD/mailbox-inject.log" || true
|
|
82
|
+
fi
|
|
83
|
+
echo "$line" >&2 || true
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
if [ -z "$ACCT" ]; then
|
|
87
|
+
emit_log "op=skip reason=no-account-dir"
|
|
88
|
+
exit 0
|
|
89
|
+
fi
|
|
90
|
+
ACCT_ID="$(basename "$ACCT")"
|
|
91
|
+
|
|
92
|
+
# --- read the store --------------------------------------------------------
|
|
93
|
+
# stderr is discarded because node prints the ENTIRE parsed source text on an
|
|
94
|
+
# uncaught exception, which for a decrypted blob is the live access and refresh
|
|
95
|
+
# tokens. The reader also try/catches every read and parse, so this is the second
|
|
96
|
+
# of two independent guards, not the only one.
|
|
97
|
+
READ_OUT=$(MBX_ACCOUNT_DIR="$ACCT" node -e '
|
|
98
|
+
const fs=require("node:fs"),p=require("node:path"),c=require("node:crypto");
|
|
99
|
+
const A=process.env.MBX_ACCOUNT_DIR||"";
|
|
100
|
+
const OD=p.join(A,"secrets","outlook");
|
|
101
|
+
const MD=p.join(OD,"mailboxes");
|
|
102
|
+
const KP=p.join(OD,".key");
|
|
103
|
+
const LP=p.join(OD,"tokens.enc");
|
|
104
|
+
function probe(x){try{fs.statSync(x);return "present";}catch(e){return e.code==="ENOENT"?"absent":"error";}}
|
|
105
|
+
function fail(r){process.stdout.write("skip\treason="+r+"\t");process.exit(0);}
|
|
106
|
+
if(probe(OD)==="error")fail("unreadable-source");
|
|
107
|
+
|
|
108
|
+
// The AES key is account-level and shared by every mailbox in the account. An
|
|
109
|
+
// absent or malformed key is not a skip: it makes every blob unreadable, which
|
|
110
|
+
// is a real state the block reports rather than hides.
|
|
111
|
+
let key=null;
|
|
112
|
+
if(probe(KP)==="present"){
|
|
113
|
+
try{const k=Buffer.from(fs.readFileSync(KP,"utf8").trim(),"base64");if(k.length===32)key=k;}catch(e){key=null;}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// Only mail, graphUserId and refreshTokenExpiry survive this function. The
|
|
117
|
+
// decrypted blob goes out of scope with the tokens still inside it, and no error
|
|
118
|
+
// object is ever printed: a JSON.parse SyntaxError message can quote its input.
|
|
119
|
+
function readBlob(f){
|
|
120
|
+
if(!key)return null;
|
|
121
|
+
try{
|
|
122
|
+
const raw=fs.readFileSync(f,"utf8").trim();
|
|
123
|
+
if(!raw)return null;
|
|
124
|
+
const i=raw.indexOf(":");
|
|
125
|
+
if(i<1)return null;
|
|
126
|
+
const d=c.createDecipheriv("aes-256-cbc",key,Buffer.from(raw.slice(0,i),"hex"));
|
|
127
|
+
let s=d.update(raw.slice(i+1),"hex","utf8");s+=d.final("utf8");
|
|
128
|
+
const b=JSON.parse(s);
|
|
129
|
+
if(!b||typeof b!=="object")return null;
|
|
130
|
+
return {mail:(typeof b.mail==="string"&&b.mail.trim())?b.mail.trim():null,
|
|
131
|
+
gid:(typeof b.graphUserId==="string"&&b.graphUserId.trim())?b.graphUserId.trim():null,
|
|
132
|
+
rte:(typeof b.refreshTokenExpiry==="number")?b.refreshTokenExpiry:null};
|
|
133
|
+
}catch(e){return null;}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// mailboxStatus precedence: unreadable, blank-email, refresh-expired, ok.
|
|
137
|
+
function classify(v){
|
|
138
|
+
if(!v)return "unreadable";
|
|
139
|
+
if(!v.mail)return "blank-email";
|
|
140
|
+
if(v.rte!==null&&Date.now()>v.rte)return "refresh-expired";
|
|
141
|
+
return "ok";
|
|
142
|
+
}
|
|
143
|
+
const boxes=[];
|
|
144
|
+
function addBox(k,f){const v=readBlob(f);boxes.push({key:k,mail:v?v.mail:null,gid:v?v.gid:null,status:classify(v)});return v;}
|
|
145
|
+
// sanitizeMailboxKey, verbatim from token-store.ts, so the legacy-dedupe test
|
|
146
|
+
// below compares the same folded form the plugin would have written.
|
|
147
|
+
function sanKey(k){return String(k).replace(/[^A-Za-z0-9._-]/g,"_");}
|
|
148
|
+
|
|
149
|
+
// Keep only directories containing tokens.enc, exactly the registry gate. A
|
|
150
|
+
// directory without one is what the revocation path leaves behind.
|
|
151
|
+
const mdState=probe(MD);
|
|
152
|
+
if(mdState==="error")fail("unreadable-source");
|
|
153
|
+
if(mdState==="present"){
|
|
154
|
+
let ents=null;
|
|
155
|
+
try{ents=fs.readdirSync(MD,{withFileTypes:true});}catch(e){ents=null;}
|
|
156
|
+
if(ents===null)fail("unreadable-source");
|
|
157
|
+
for(const e of ents){
|
|
158
|
+
if(!e.isDirectory())continue;
|
|
159
|
+
const tf=p.join(MD,e.name,"tokens.enc");
|
|
160
|
+
if(probe(tf)!=="present")continue;
|
|
161
|
+
addBox(e.name,tf);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// The pre-migration single-mailbox layout. Read, never moved.
|
|
165
|
+
//
|
|
166
|
+
// migrateLegacy() moves it to mailboxes/<sanitizeMailboxKey(graphUserId)>/ and,
|
|
167
|
+
// when that destination ALREADY holds a blob, unlinks the legacy copy instead.
|
|
168
|
+
// A register writes through storeFor() without calling list(), so both files can
|
|
169
|
+
// sit on disk at once until some outlook tool triggers the migration. Listing the
|
|
170
|
+
// legacy file unconditionally would then show one mailbox twice, and count it
|
|
171
|
+
// twice, where the plugin shows it once. Mirror the destination test as a
|
|
172
|
+
// read-only skip: same key derivation, no rename, no unlink.
|
|
173
|
+
if(probe(LP)==="present"){
|
|
174
|
+
const lv=addBox("legacy tokens.enc",LP);
|
|
175
|
+
const lkey=sanKey(lv?(lv.gid||"unknown"):"legacy-unreadable");
|
|
176
|
+
for(let i=0;i<boxes.length-1;i++){
|
|
177
|
+
if(boxes[i].key===lkey){boxes.pop();break;}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// Control characters and the angle brackets that frame the block can never
|
|
182
|
+
// appear in a subject: the frame holds by construction, not by the invariants
|
|
183
|
+
// that currently keep them out (sanitizeMailboxKey folds directory names, mail
|
|
184
|
+
// comes from Graph, and shared-mailbox-add probes an address against Graph
|
|
185
|
+
// before persisting it). Bounded length for the same reason.
|
|
186
|
+
function clean(s){
|
|
187
|
+
const t=String(s).replace(/[\u0000-\u001f\u007f<>]/g," ").trim();
|
|
188
|
+
return t.length?t.slice(0,120):"(unnamed)";
|
|
189
|
+
}
|
|
190
|
+
function subject(b){return clean(b.mail||b.gid||b.key);}
|
|
191
|
+
const readable=new Map();
|
|
192
|
+
for(const b of boxes)if(b.status!=="unreadable")readable.set(b.key,b);
|
|
193
|
+
|
|
194
|
+
const DP=p.join(OD,"delegated.json");
|
|
195
|
+
// Mirrors DelegatedStore.read(): an absent or unparseable file means zero
|
|
196
|
+
// entries, never zero block; per-entry drops for a non-string viaMailboxKey or a
|
|
197
|
+
// non-number addedAt; keys normalised with trim+toLowerCase.
|
|
198
|
+
// A Map, not an array: read() assigns into an object keyed by the NORMALISED
|
|
199
|
+
// address, so two keys differing only in case or surrounding space collapse to
|
|
200
|
+
// one record there. Pushing to an array would render such a mailbox once per key.
|
|
201
|
+
const delegMap=new Map();
|
|
202
|
+
let degraded=false;
|
|
203
|
+
const dState=probe(DP);
|
|
204
|
+
if(dState==="error")degraded=true;
|
|
205
|
+
else if(dState==="present"){
|
|
206
|
+
try{
|
|
207
|
+
const o=JSON.parse(fs.readFileSync(DP,"utf8"));
|
|
208
|
+
if(o&&typeof o==="object"&&!Array.isArray(o)){
|
|
209
|
+
for(const kv of Object.entries(o)){
|
|
210
|
+
const a=kv[0],e=kv[1];
|
|
211
|
+
if(!e||typeof e!=="object")continue;
|
|
212
|
+
if(typeof e.viaMailboxKey!=="string")continue;
|
|
213
|
+
if(typeof e.addedAt!=="number")continue;
|
|
214
|
+
delegMap.set(String(a).trim().toLowerCase(),e.viaMailboxKey);
|
|
215
|
+
}
|
|
216
|
+
}else{degraded=true;}
|
|
217
|
+
}catch(e){degraded=true;}
|
|
218
|
+
}
|
|
219
|
+
const deleg=Array.from(delegMap,function(kv){return {addr:kv[0],via:kv[1]};});
|
|
220
|
+
|
|
221
|
+
const SUFFIX={"ok":"signed in",
|
|
222
|
+
"refresh-expired":"signed in, needs re-authorising",
|
|
223
|
+
"blank-email":"signed in, no address on record — internal handle",
|
|
224
|
+
"unreadable":"attached, unreadable — internal handle"};
|
|
225
|
+
const lines=[];
|
|
226
|
+
for(const b of boxes.slice().sort(function(x,y){return subject(x).localeCompare(subject(y));})){
|
|
227
|
+
lines.push("- "+subject(b)+" — outlook plugin ("+SUFFIX[b.status]+")");
|
|
228
|
+
}
|
|
229
|
+
// A delegated entry is connected only when its viaMailboxKey names a mailbox
|
|
230
|
+
// whose blob DECRYPTS, exactly the predicate MailboxRegistry.resolve() uses.
|
|
231
|
+
// Matching directory presence would promise a mailbox every call refuses.
|
|
232
|
+
for(const d of deleg.slice().sort(function(x,y){return x.addr.localeCompare(y.addr);})){
|
|
233
|
+
const g=readable.get(d.via);
|
|
234
|
+
lines.push(g
|
|
235
|
+
? "- "+clean(d.addr)+" — outlook plugin (delegated via "+subject(g)+")"
|
|
236
|
+
: "- "+clean(d.addr)+" — outlook plugin (delegated, delegator no longer connected)");
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
const now=new Date().toISOString();
|
|
240
|
+
const head="Outlook mailboxes attached to this account, read at "+now+". Read this rather than polling the plugin. Only the most recent <mailboxes> block is current.";
|
|
241
|
+
const tail=["This list is internal. Use it to decide which tool to call; do not recite it to whoever is on the other end of a channel conversation.","This list covers the outlook plugin only. IMAP mailboxes are not listed here, so their absence above is not evidence they are unattached — call email-status for those.","Tools: outlook-* for outlook-plugin mailboxes, email-* for email-plugin mailboxes."];
|
|
242
|
+
const body=[head].concat(lines.length?lines:["None attached."]).concat(tail).join("\n");
|
|
243
|
+
|
|
244
|
+
// blank-email counts as usable: resolve() addresses a sole blank-email mailbox
|
|
245
|
+
// through /me, filtering on readable rather than on status === ok.
|
|
246
|
+
let usable=0,exp=0,unr=0;
|
|
247
|
+
for(const b of boxes){
|
|
248
|
+
if(b.status==="ok"||b.status==="blank-email")usable++;
|
|
249
|
+
else if(b.status==="refresh-expired")exp++;
|
|
250
|
+
else unr++;
|
|
251
|
+
}
|
|
252
|
+
const m="outlook="+boxes.length+" delegated="+deleg.length+" usable="+usable+" expired="+exp+" unreadable="+unr+" degraded="+(degraded?"yes":"no");
|
|
253
|
+
process.stdout.write("ok\t"+m+"\t"+body);
|
|
254
|
+
' 2>/dev/null) || READ_OUT=""
|
|
255
|
+
|
|
256
|
+
if [ -z "$READ_OUT" ]; then
|
|
257
|
+
emit_log "op=skip reason=reader-failed account=$ACCT_ID"
|
|
258
|
+
exit 0
|
|
259
|
+
fi
|
|
260
|
+
|
|
261
|
+
VERDICT="${READ_OUT%%$'\t'*}"
|
|
262
|
+
REST="${READ_OUT#*$'\t'}"
|
|
263
|
+
METRICS="${REST%%$'\t'*}"
|
|
264
|
+
BODY="${REST#*$'\t'}"
|
|
265
|
+
|
|
266
|
+
# Exhaustive on purpose. The shipped reader writes only the two-tab `ok` and
|
|
267
|
+
# `skip` shapes, but if anything else ever reached this stdout the fall-through
|
|
268
|
+
# would inject it as the block body AND interpolate it into the breadcrumb, where
|
|
269
|
+
# an address would land in a log the admin route serves unauthenticated. Anything
|
|
270
|
+
# that is not exactly `ok` is a skip, with a fixed reason rather than the payload.
|
|
271
|
+
case "$VERDICT" in
|
|
272
|
+
skip) emit_log "op=skip ${METRICS} account=$ACCT_ID"; exit 0 ;;
|
|
273
|
+
ok) : ;;
|
|
274
|
+
*) emit_log "op=skip reason=reader-malformed account=$ACCT_ID"; exit 0 ;;
|
|
275
|
+
esac
|
|
276
|
+
|
|
277
|
+
CONTEXT="<mailboxes>
|
|
278
|
+
$BODY
|
|
279
|
+
</mailboxes>"
|
|
280
|
+
|
|
281
|
+
ENVELOPE=$(printf '%s' "$CONTEXT" | python3 -c '
|
|
282
|
+
import json, sys
|
|
283
|
+
ctx = sys.stdin.read()
|
|
284
|
+
print(json.dumps({
|
|
285
|
+
"hookSpecificOutput": {
|
|
286
|
+
"hookEventName": "UserPromptSubmit",
|
|
287
|
+
"additionalContext": ctx,
|
|
288
|
+
}
|
|
289
|
+
}))
|
|
290
|
+
' 2>/dev/null) || exit 0
|
|
291
|
+
|
|
292
|
+
[ -n "$ENVELOPE" ] || exit 0
|
|
293
|
+
printf '%s\n' "$ENVELOPE"
|
|
294
|
+
|
|
295
|
+
case "$METRICS" in
|
|
296
|
+
*degraded=yes*) emit_log "op=degrade reason=delegated-unreadable account=$ACCT_ID" ;;
|
|
297
|
+
esac
|
|
298
|
+
emit_log "injected account=$ACCT_ID $METRICS imap=not-read source=disk refresh=per-turn"
|
|
299
|
+
exit 0
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: platform-architecture
|
|
3
3
|
description: Use when grounding any documented-surface claim about what SiteDesk ships — plugins, skills, specialists, install/deploy flows, internals. This is the install catalogue, not evidence of what is enabled on the current account. For install state on this account, call `capabilities-here`; for documented surface, cite the `Source:` URL inline.
|
|
4
|
-
content-hash: sha256:
|
|
4
|
+
content-hash: sha256:c1dc0d24b2faa821b80ec583a83b5828393886fbda1963cfb874401d4137cd03
|
|
5
5
|
brand: sitedesk-code
|
|
6
6
|
product-name: SiteDesk
|
|
7
7
|
---
|
|
@@ -622,11 +622,13 @@ Tell SiteDesk naturally:
|
|
|
622
622
|
|
|
623
623
|
- "List my workflows."
|
|
624
624
|
- "Show me the follow-up workflow."
|
|
625
|
-
- "
|
|
625
|
+
- "Stop running the new-lead workflow." or "Start running the new-lead workflow again."
|
|
626
626
|
- "Change the follow-up workflow so it also messages me."
|
|
627
627
|
- "Delete the old onboarding workflow."
|
|
628
628
|
|
|
629
|
-
|
|
629
|
+
Stopping a workflow keeps it but stops it running. Editing replaces the steps or the inputs with the new version you describe. Deleting removes the workflow and its run history, so SiteDesk confirms with you first.
|
|
630
|
+
|
|
631
|
+
A workflow is not a routine. "Pause the morning routine" is about a scheduled trigger, not about a workflow, so say routine when you mean the scheduled thing and SiteDesk will reach for the right one.
|
|
630
632
|
|
|
631
633
|
## Scheduling a Workflow
|
|
632
634
|
|
|
@@ -3320,10 +3322,34 @@ dispatches, which the Calendar surface deliberately excludes (`calendar.ts`
|
|
|
3320
3322
|
unions only appointment events, `actionPlugin IS NULL`). It renders one card per
|
|
3321
3323
|
routine (title, human-readable schedule, next run, channel/destination or tool,
|
|
3322
3324
|
status); a card opens a detail modal modeled on the calendar `EventDetailModal`.
|
|
3323
|
-
The modal edits the prose instruction (`agentPrompt
|
|
3324
|
-
|
|
3325
|
-
|
|
3326
|
-
|
|
3325
|
+
The modal edits the prose instruction (`agentPrompt`), the dispatch binding
|
|
3326
|
+
(`agentChannel` and `agentDestination`, chosen from a server-supplied roster
|
|
3327
|
+
rather than typed), and the schedule via a friendly builder (frequency
|
|
3328
|
+
daily/weekly/monthly, day-of-week, day-of-month, time) that falls back to a
|
|
3329
|
+
raw-cron field for patterns it cannot represent. The binding control appears on
|
|
3330
|
+
an agent routine and on a routine with no dispatch at all; a tool-action
|
|
3331
|
+
routine's dispatch stays read-only, because an agent binding takes precedence at
|
|
3332
|
+
fire time and would stop the tool running.
|
|
3333
|
+
|
|
3334
|
+
**The status dot.** The card and the modal each carry a dot ahead of
|
|
3335
|
+
the raw status word, so a grid of eight routines can be read without reading
|
|
3336
|
+
eight words. `app/routines/types.ts` holds the whole mapping and both surfaces
|
|
3337
|
+
render it through one `RoutineStatusDot`, which is what stops them drifting:
|
|
3338
|
+
|
|
3339
|
+
| `eventStatus` | dot | meaning |
|
|
3340
|
+
|---|---|---|
|
|
3341
|
+
| `scheduled`, `due` | green (`--session-live`) | armed, the sweep will fire it |
|
|
3342
|
+
| `suspended` | amber (`--color-alias-status-warning-solid`) | stood down, nothing runs until resumed |
|
|
3343
|
+
| `cancelled`, `completed` | solid grey (`--text-tertiary`) | deliberately stopped or finished |
|
|
3344
|
+
| anything else, and `null` | grey ring, no fill | no reading taken |
|
|
3345
|
+
|
|
3346
|
+
The unrecognised case is a state of its own, never a fallback into green: `GET
|
|
3347
|
+
/api/admin/routines` projects `eventStatus` verbatim, so a value outside the set
|
|
3348
|
+
can reach the card at any time, and a stood-down routine showing green is a
|
|
3349
|
+
failure the operator only learns about when the work does not happen. The
|
|
3350
|
+
enumerate-every-status test in `app/routines/__tests__/routine-status-dot.test.tsx`
|
|
3351
|
+
is the only place the mapping's domain and the writers' status set get compared,
|
|
3352
|
+
so a status added to the scheduling plugin without being added here fails there.
|
|
3327
3353
|
|
|
3328
3354
|
The route (`server/routes/admin/routines.ts`) is account-scoped like `calendar.ts`
|
|
3329
3355
|
(a foreign-account or non-automation `eventId` 404s):
|
|
@@ -3332,7 +3358,10 @@ The route (`server/routes/admin/routines.ts`) is account-scoped like `calendar.t
|
|
|
3332
3358
|
|-------|-----------|
|
|
3333
3359
|
| `GET /api/admin/routines` | Lists automation Events: `recurrence IS NOT NULL OR agentChannel IS NOT NULL OR actionPlugin IS NOT NULL`. Keyed by the `eventId` property. |
|
|
3334
3360
|
| `GET /api/admin/routines/:eventId` | One routine, same automation+account guard. |
|
|
3335
|
-
| `
|
|
3361
|
+
| `GET /api/admin/routines/:eventId/runs` | One routine's `:RoutineRun` history, newest first. `limit` clamps to 1..500 and defaults to 50, so a caller that wants the full page must ask for it. |
|
|
3362
|
+
| `GET /api/admin/routines/:eventId/runs.csv` | The same projection as a `text/csv` attachment with `Content-Disposition`, and **no** limit, so it is not the same row set as a clamped `/runs` call. Re-parses its own output and returns 500 rather than serving a document with fewer rows than the query returned. Zero rows is 404, not a header-only file: the query cannot tell a routine with no runs from an `eventId` on another account. |
|
|
3363
|
+
| `PATCH /api/admin/routines/:eventId` | Edits `agentPrompt`, `recurrence`, and the `agentChannel`/`agentDestination` pair. Cron validation and the timezone-aware `nextRun` recompute copy the scheduling plugin's `schedule-update` tool. The binding is revalidated against the same house-authority rule, shared as `platform/lib/agent-dispatch-rule`; it is refused `partial-binding`, `invalid-channel`, `no-prompt`, `not-registered`, `cross-account`, `action-routine` (a routine that runs a tool keeps it — an agent binding outranks the action at fire time) or `clear-would-orphan` (clearing the only field holding a one-time routine inside the automation filter would hide it from every routines surface), and no refusal writes. Both fields as `null` clears the binding. An invalid cron is rejected 400 with no write. Only creation and deletion stay agent-only (`schedule-event`/`schedule-cancel`). |
|
|
3364
|
+
| `GET /api/admin/dispatch-destinations` | Every destination the session's account may bind a routine to, across both channels, each labelled by the authoritative list it came from (`House admin`, `Account manager`, `Telegram admin`). Computed from the same lists the validator reads and filtered by the same rule, so the picker cannot offer what the save refuses. |
|
|
3336
3365
|
| `POST /api/admin/routines/:eventId/suspend` | Writes `eventStatus = 'suspended'` on a routine currently `'scheduled'`. 404s otherwise, so a second suspend is not a silent no-op. |
|
|
3337
3366
|
| `POST /api/admin/routines/:eventId/resume` | Returns a suspended routine to `'scheduled'`. 404s if it is not suspended, 409s if it cannot be resumed. |
|
|
3338
3367
|
| `POST /api/admin/routines/suspend-all` | Suspends every routine currently `'scheduled'` and marks each one. Returns the count. |
|
|
@@ -3388,14 +3417,14 @@ the standing reconciliation: the named buckets are the whole shipped status enum
|
|
|
3388
3417
|
plus `suspended`, so they sum to `routines` by construction and `other` above
|
|
3389
3418
|
zero means a routine carries a status the system does not handle — nothing else
|
|
3390
3419
|
would say so. `completed` gets its own bucket even though no code path writes it
|
|
3391
|
-
today, because
|
|
3392
|
-
|
|
3393
|
-
|
|
3394
|
-
|
|
3395
|
-
|
|
3396
|
-
`
|
|
3397
|
-
`
|
|
3398
|
-
`
|
|
3420
|
+
today, because it remains part of the shipped enum and one row carrying it would
|
|
3421
|
+
otherwise pin `other` above zero forever and kill the alarm.
|
|
3422
|
+
|
|
3423
|
+
**The shipped roster.** Every account starts with eleven routines —
|
|
3424
|
+
`start-of-day`, `inbound-check`, `end-of-day`, `appointment-reminder`,
|
|
3425
|
+
`commitment-chase`, `calendar-reconcile`, `contact-reconcile`, `crm-reconcile`,
|
|
3426
|
+
`finance-reconcile`, `channel-link-check`, `weekly-digest` — seeded
|
|
3427
|
+
`eventStatus:'suspended'` with `nextRun` NULL and no
|
|
3399
3428
|
channel or destination, so `/routines` is a catalogue to enable rather than a
|
|
3400
3429
|
blank page. The list query applies no status filter and `AUTOMATION_WHERE`
|
|
3401
3430
|
admits them on `recurrence IS NOT NULL`, so they render with no change here.
|
|
@@ -3403,11 +3432,15 @@ They cannot fire: every dispatch query in `check-due-events.ts` selects
|
|
|
3403
3432
|
`eventStatus = 'scheduled'`, and the recurring one additionally requires
|
|
3404
3433
|
`nextRun IS NOT NULL`.
|
|
3405
3434
|
|
|
3406
|
-
Enabling one is `schedule-update {eventId, eventStatus:'scheduled',
|
|
3407
|
-
|
|
3408
|
-
|
|
3409
|
-
|
|
3410
|
-
|
|
3435
|
+
Enabling one is `schedule-update {eventId, eventStatus:'scheduled', timezone}`.
|
|
3436
|
+
The status change arms the row on its own: the resume recomputes `nextRun`
|
|
3437
|
+
forward from now in the routine's **stored** `timezone`, so a seeded row with a
|
|
3438
|
+
NULL `nextRun` does not need `recurrence` restated to start firing. `timezone` is
|
|
3439
|
+
still required on a seeded routine, because the roster seeds none and a resume
|
|
3440
|
+
with no stored zone resolves the cron in the server's zone; that row then fires
|
|
3441
|
+
at the wrong hour and looks healthy, which is the case the standing
|
|
3442
|
+
`[schedule-audit] op=null-timezone` alarm exists to name. Pass `recurrence` only
|
|
3443
|
+
to change it. Binding a channel and a
|
|
3411
3444
|
destination is separate and equally required: `chooseDispatchMode` returns
|
|
3412
3445
|
`{kind:'none'}` unless `agentChannel`, `agentDestination` and `agentPrompt` are
|
|
3413
3446
|
all present, and a destination cannot be seeded because
|
|
@@ -11,6 +11,23 @@ A structured workflow for executing development work — features, bug fixes, re
|
|
|
11
11
|
|
|
12
12
|
This skill is the maxy-code counterpart to `sprint`. The phase chain is identical in spirit; the difference is the skill at each phase. If both `gstack` and superpowers are installed and the project is set up for it, prefer `sprint` — its plan reviews are richer. Use this skill when `gstack` is not available.
|
|
13
13
|
|
|
14
|
+
## Execution model: inline only, never subagents
|
|
15
|
+
|
|
16
|
+
Every phase of this sprint runs in the current session, in the main agent's own context. No phase dispatches a subagent, and no phase delegates work to the Agent tool, `superpowers:subagent-driven-development`, or `superpowers:dispatching-parallel-agents`.
|
|
17
|
+
|
|
18
|
+
Several of the chained superpowers skills offer or recommend a subagent path. In this sprint, take the inline path at each of them:
|
|
19
|
+
|
|
20
|
+
| Chained skill | Its subagent offer | What this sprint does |
|
|
21
|
+
|---|---|---|
|
|
22
|
+
| `superpowers:brainstorming` | dispatches a spec document reviewer subagent | review the spec yourself, against the same template |
|
|
23
|
+
| `superpowers:writing-plans` | dispatches a plan document reviewer subagent, and offers "Subagent-Driven (recommended)" as the implementation mode | review the plan yourself; choose the `superpowers:executing-plans` mode, never subagent-driven |
|
|
24
|
+
| `superpowers:executing-plans` | tells you to switch to `superpowers:subagent-driven-development` where subagents exist | ignore that instruction and stay in `executing-plans` |
|
|
25
|
+
| `superpowers:requesting-code-review` | dispatches a `general-purpose` code reviewer subagent | apply the reviewer template to the diff yourself, in this session |
|
|
26
|
+
|
|
27
|
+
A review done inline still uses the chained skill's reviewer template verbatim — the checklist is what makes the review real, not the isolation. The cost of inline is that the reviewer shares the sprint's context and therefore its assumptions; the operator accepts that in exchange for a single visible transcript.
|
|
28
|
+
|
|
29
|
+
Dispatching a subagent from any phase is a defect, not an optimisation.
|
|
30
|
+
|
|
14
31
|
## Output discipline (applies to every emission in this skill)
|
|
15
32
|
|
|
16
33
|
Every message the sprint writes — plan summaries, change logs, status tables, the final summary — is written `/plainly`. That means:
|
|
@@ -54,18 +71,24 @@ Read the task file or operator brief first, then enter brainstorming with what y
|
|
|
54
71
|
|
|
55
72
|
If the operator hands over a fully-formed plan that is already broken into specific files and behaviours, brainstorming can be a fast confirmation rather than an open exploration — but it still runs, because skipping it is the failure mode the phase exists to prevent.
|
|
56
73
|
|
|
74
|
+
When the skill reaches its spec document review, run that review inline against `spec-document-reviewer-prompt.md`. Do not dispatch the reviewer subagent.
|
|
75
|
+
|
|
57
76
|
### Phase 2: Plan — `superpowers:writing-plans`
|
|
58
77
|
|
|
59
78
|
Invoke `superpowers:writing-plans` against the brainstorm output. The skill produces a single written plan: the files to touch, the behaviours to add or change, the edge cases, the test coverage, the deployment story. This is the artefact Phase 6 (Plan Conformity) checks the implementation against.
|
|
60
79
|
|
|
61
80
|
This is a deliberate downgrade from `sprint`'s separate CEO and Eng reviews — multi-approach architecture review is out of scope for the superpowers chain. One reviewed plan is the baseline.
|
|
62
81
|
|
|
82
|
+
Two of the skill's steps offer a subagent; take neither. Review the finished plan inline against `plan-document-reviewer-prompt.md`. When the skill asks which implementation mode to use, choose `superpowers:executing-plans`, never "Subagent-Driven".
|
|
83
|
+
|
|
63
84
|
Present the final plan to the operator and get explicit confirmation before writing any production code.
|
|
64
85
|
|
|
65
86
|
### Phase 3: Implement — `superpowers:executing-plans` + `superpowers:test-driven-development`
|
|
66
87
|
|
|
67
88
|
Invoke `superpowers:executing-plans` to drive execution against the Phase 2 plan. Within each step, follow `superpowers:test-driven-development` — RED-GREEN-REFACTOR for every behaviour change.
|
|
68
89
|
|
|
90
|
+
`superpowers:executing-plans` opens by telling you to switch to `superpowers:subagent-driven-development` when subagents are available. Ignore that line; this sprint runs every task inline in the current session.
|
|
91
|
+
|
|
69
92
|
Tests are ephemeral: design and run them to prove the implementation works during the sprint, then discard them. They are not committed to the repository unless the project's own test suite already lives in the tree and the new behaviour belongs in it. Their purpose is to enforce thinking through behaviour before writing production code, not to build a permanent regression suite.
|
|
70
93
|
|
|
71
94
|
- **Test first.** Write a failing test for each behaviour before implementing it. Watch it fail. Write minimal code to pass. Refactor.
|
|
@@ -94,6 +117,8 @@ If verification fails, return to Phase 3.
|
|
|
94
117
|
|
|
95
118
|
Invoke `superpowers:requesting-code-review` to frame the review request. Then run `code-review:code-review` against the sprint's diff. Process the response through `superpowers:receiving-code-review`, which gates whether each finding is accepted, contested, or filed as follow-up.
|
|
96
119
|
|
|
120
|
+
`superpowers:requesting-code-review` dispatches a `general-purpose` reviewer subagent. Do not dispatch it. Fill its `code-reviewer.md` template with the sprint's context and diff, then work through it inline as the reviewer. `code-review:code-review` likewise runs in this session against the diff, not as a delegated agent.
|
|
121
|
+
|
|
97
122
|
Findings that are accepted and trivial are fixed before proceeding. Findings that are accepted but out-of-scope for this sprint become new `.tasks/NNN-*.md` files (the same deferral rule as Phase 6 — prose deferrals are banned). Findings that are contested get a one-line rebuttal in the debrief.
|
|
98
123
|
|
|
99
124
|
### Phase 6: Land
|
|
@@ -355,6 +380,7 @@ Session: <session-id>
|
|
|
355
380
|
|
|
356
381
|
## Principles
|
|
357
382
|
|
|
383
|
+
- **Inline, always.** Every phase runs in the current session. No subagents, no parallel agent dispatch, no delegated reviewers, whatever the chained skills recommend.
|
|
358
384
|
- **Ship complete.** A sprint is not done until the debrief and the final-status block are delivered. Code without documentation is unfinished work.
|
|
359
385
|
- **Explain the why.** Every change has a reason. "Refactored for clarity" is not a reason. "Extracted to avoid duplicate route derivation across WhatsApp and iMessage" is.
|
|
360
386
|
- **Operator perspective.** Testing instructions are written for the person running the product. If the operator is non-technical, instructions are UI-based.
|
|
@@ -9,6 +9,18 @@ Invoked by the admin agent directly.
|
|
|
9
9
|
|
|
10
10
|
This is the platform's release timeline, newest first. Each entry shows the date it shipped and the version it shipped in, so you can tell the operator how current their install is. To compare, read the installed version from `capabilities-here` and match it against the versions below. Keep answers high level and in plain English; this is a summary, not a full commit log.
|
|
11
11
|
|
|
12
|
+
## 2026-07-29 (0.1.525)
|
|
13
|
+
|
|
14
|
+
- A repeating routine whose start date had already gone by now runs on its next due occurrence instead of sitting silent forever. There is also a standing check that tells you when a routine has a start date that never fired.
|
|
15
|
+
- Saving a memory no longer rewrites the date and time on a meeting into plain text, so meeting times stay comparable and sortable afterwards.
|
|
16
|
+
- Internal engineering documents are no longer included in what gets installed on a customer device, and the check that scans installed text now reads exactly what ships rather than an out-of-date copy of the list.
|
|
17
|
+
|
|
18
|
+
## 2026-07-29 (0.1.524)
|
|
19
|
+
|
|
20
|
+
- Routines are properly editable now. You can pick where a routine sends its result from the routine window, which previously could not be set at all, so the routines that ship with the platform were impossible to make work from the dashboard. Stopping a routine from chat also no longer means cancelling it outright.
|
|
21
|
+
- The dashboard cards have been redesigned to match the rest of the product.
|
|
22
|
+
- When the assistant cannot see one of your mailboxes, it now says which mailbox and why, instead of telling you that no mailbox is connected at all. Shared and delegated mailboxes are reachable again.
|
|
23
|
+
|
|
12
24
|
## 2026-07-29 (0.1.523)
|
|
13
25
|
|
|
14
26
|
- You can now switch off an agent you created yourself. Until now that was refused, while switching off a built-in agent was offered instead, which was the wrong way round. You can also suspend a routine, or all of them at once, without deleting it.
|
|
@@ -97,10 +97,34 @@ dispatches, which the Calendar surface deliberately excludes (`calendar.ts`
|
|
|
97
97
|
unions only appointment events, `actionPlugin IS NULL`). It renders one card per
|
|
98
98
|
routine (title, human-readable schedule, next run, channel/destination or tool,
|
|
99
99
|
status); a card opens a detail modal modeled on the calendar `EventDetailModal`.
|
|
100
|
-
The modal edits the prose instruction (`agentPrompt
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
100
|
+
The modal edits the prose instruction (`agentPrompt`), the dispatch binding
|
|
101
|
+
(`agentChannel` and `agentDestination`, chosen from a server-supplied roster
|
|
102
|
+
rather than typed), and the schedule via a friendly builder (frequency
|
|
103
|
+
daily/weekly/monthly, day-of-week, day-of-month, time) that falls back to a
|
|
104
|
+
raw-cron field for patterns it cannot represent. The binding control appears on
|
|
105
|
+
an agent routine and on a routine with no dispatch at all; a tool-action
|
|
106
|
+
routine's dispatch stays read-only, because an agent binding takes precedence at
|
|
107
|
+
fire time and would stop the tool running.
|
|
108
|
+
|
|
109
|
+
**The status dot.** The card and the modal each carry a dot ahead of
|
|
110
|
+
the raw status word, so a grid of eight routines can be read without reading
|
|
111
|
+
eight words. `app/routines/types.ts` holds the whole mapping and both surfaces
|
|
112
|
+
render it through one `RoutineStatusDot`, which is what stops them drifting:
|
|
113
|
+
|
|
114
|
+
| `eventStatus` | dot | meaning |
|
|
115
|
+
|---|---|---|
|
|
116
|
+
| `scheduled`, `due` | green (`--session-live`) | armed, the sweep will fire it |
|
|
117
|
+
| `suspended` | amber (`--color-alias-status-warning-solid`) | stood down, nothing runs until resumed |
|
|
118
|
+
| `cancelled`, `completed` | solid grey (`--text-tertiary`) | deliberately stopped or finished |
|
|
119
|
+
| anything else, and `null` | grey ring, no fill | no reading taken |
|
|
120
|
+
|
|
121
|
+
The unrecognised case is a state of its own, never a fallback into green: `GET
|
|
122
|
+
/api/admin/routines` projects `eventStatus` verbatim, so a value outside the set
|
|
123
|
+
can reach the card at any time, and a stood-down routine showing green is a
|
|
124
|
+
failure the operator only learns about when the work does not happen. The
|
|
125
|
+
enumerate-every-status test in `app/routines/__tests__/routine-status-dot.test.tsx`
|
|
126
|
+
is the only place the mapping's domain and the writers' status set get compared,
|
|
127
|
+
so a status added to the scheduling plugin without being added here fails there.
|
|
104
128
|
|
|
105
129
|
The route (`server/routes/admin/routines.ts`) is account-scoped like `calendar.ts`
|
|
106
130
|
(a foreign-account or non-automation `eventId` 404s):
|
|
@@ -109,7 +133,10 @@ The route (`server/routes/admin/routines.ts`) is account-scoped like `calendar.t
|
|
|
109
133
|
|-------|-----------|
|
|
110
134
|
| `GET /api/admin/routines` | Lists automation Events: `recurrence IS NOT NULL OR agentChannel IS NOT NULL OR actionPlugin IS NOT NULL`. Keyed by the `eventId` property. |
|
|
111
135
|
| `GET /api/admin/routines/:eventId` | One routine, same automation+account guard. |
|
|
112
|
-
| `
|
|
136
|
+
| `GET /api/admin/routines/:eventId/runs` | One routine's `:RoutineRun` history, newest first. `limit` clamps to 1..500 and defaults to 50, so a caller that wants the full page must ask for it. |
|
|
137
|
+
| `GET /api/admin/routines/:eventId/runs.csv` | The same projection as a `text/csv` attachment with `Content-Disposition`, and **no** limit, so it is not the same row set as a clamped `/runs` call. Re-parses its own output and returns 500 rather than serving a document with fewer rows than the query returned. Zero rows is 404, not a header-only file: the query cannot tell a routine with no runs from an `eventId` on another account. |
|
|
138
|
+
| `PATCH /api/admin/routines/:eventId` | Edits `agentPrompt`, `recurrence`, and the `agentChannel`/`agentDestination` pair. Cron validation and the timezone-aware `nextRun` recompute copy the scheduling plugin's `schedule-update` tool. The binding is revalidated against the same house-authority rule, shared as `platform/lib/agent-dispatch-rule`; it is refused `partial-binding`, `invalid-channel`, `no-prompt`, `not-registered`, `cross-account`, `action-routine` (a routine that runs a tool keeps it — an agent binding outranks the action at fire time) or `clear-would-orphan` (clearing the only field holding a one-time routine inside the automation filter would hide it from every routines surface), and no refusal writes. Both fields as `null` clears the binding. An invalid cron is rejected 400 with no write. Only creation and deletion stay agent-only (`schedule-event`/`schedule-cancel`). |
|
|
139
|
+
| `GET /api/admin/dispatch-destinations` | Every destination the session's account may bind a routine to, across both channels, each labelled by the authoritative list it came from (`House admin`, `Account manager`, `Telegram admin`). Computed from the same lists the validator reads and filtered by the same rule, so the picker cannot offer what the save refuses. |
|
|
113
140
|
| `POST /api/admin/routines/:eventId/suspend` | Writes `eventStatus = 'suspended'` on a routine currently `'scheduled'`. 404s otherwise, so a second suspend is not a silent no-op. |
|
|
114
141
|
| `POST /api/admin/routines/:eventId/resume` | Returns a suspended routine to `'scheduled'`. 404s if it is not suspended, 409s if it cannot be resumed. |
|
|
115
142
|
| `POST /api/admin/routines/suspend-all` | Suspends every routine currently `'scheduled'` and marks each one. Returns the count. |
|
|
@@ -165,14 +192,14 @@ the standing reconciliation: the named buckets are the whole shipped status enum
|
|
|
165
192
|
plus `suspended`, so they sum to `routines` by construction and `other` above
|
|
166
193
|
zero means a routine carries a status the system does not handle — nothing else
|
|
167
194
|
would say so. `completed` gets its own bucket even though no code path writes it
|
|
168
|
-
today, because
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
`
|
|
174
|
-
`
|
|
175
|
-
`
|
|
195
|
+
today, because it remains part of the shipped enum and one row carrying it would
|
|
196
|
+
otherwise pin `other` above zero forever and kill the alarm.
|
|
197
|
+
|
|
198
|
+
**The shipped roster.** Every account starts with eleven routines —
|
|
199
|
+
`start-of-day`, `inbound-check`, `end-of-day`, `appointment-reminder`,
|
|
200
|
+
`commitment-chase`, `calendar-reconcile`, `contact-reconcile`, `crm-reconcile`,
|
|
201
|
+
`finance-reconcile`, `channel-link-check`, `weekly-digest` — seeded
|
|
202
|
+
`eventStatus:'suspended'` with `nextRun` NULL and no
|
|
176
203
|
channel or destination, so `/routines` is a catalogue to enable rather than a
|
|
177
204
|
blank page. The list query applies no status filter and `AUTOMATION_WHERE`
|
|
178
205
|
admits them on `recurrence IS NOT NULL`, so they render with no change here.
|
|
@@ -180,11 +207,15 @@ They cannot fire: every dispatch query in `check-due-events.ts` selects
|
|
|
180
207
|
`eventStatus = 'scheduled'`, and the recurring one additionally requires
|
|
181
208
|
`nextRun IS NOT NULL`.
|
|
182
209
|
|
|
183
|
-
Enabling one is `schedule-update {eventId, eventStatus:'scheduled',
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
210
|
+
Enabling one is `schedule-update {eventId, eventStatus:'scheduled', timezone}`.
|
|
211
|
+
The status change arms the row on its own: the resume recomputes `nextRun`
|
|
212
|
+
forward from now in the routine's **stored** `timezone`, so a seeded row with a
|
|
213
|
+
NULL `nextRun` does not need `recurrence` restated to start firing. `timezone` is
|
|
214
|
+
still required on a seeded routine, because the roster seeds none and a resume
|
|
215
|
+
with no stored zone resolves the cron in the server's zone; that row then fires
|
|
216
|
+
at the wrong hour and looks healthy, which is the case the standing
|
|
217
|
+
`[schedule-audit] op=null-timezone` alarm exists to name. Pass `recurrence` only
|
|
218
|
+
to change it. Binding a channel and a
|
|
188
219
|
destination is separate and equally required: `chooseDispatchMode` returns
|
|
189
220
|
`{kind:'none'}` unless `agentChannel`, `agentDestination` and `agentPrompt` are
|
|
190
221
|
all present, and a destination cannot be seeded because
|
|
@@ -50,11 +50,13 @@ Tell {{productName}} naturally:
|
|
|
50
50
|
|
|
51
51
|
- "List my workflows."
|
|
52
52
|
- "Show me the follow-up workflow."
|
|
53
|
-
- "
|
|
53
|
+
- "Stop running the new-lead workflow." or "Start running the new-lead workflow again."
|
|
54
54
|
- "Change the follow-up workflow so it also messages me."
|
|
55
55
|
- "Delete the old onboarding workflow."
|
|
56
56
|
|
|
57
|
-
|
|
57
|
+
Stopping a workflow keeps it but stops it running. Editing replaces the steps or the inputs with the new version you describe. Deleting removes the workflow and its run history, so {{productName}} confirms with you first.
|
|
58
|
+
|
|
59
|
+
A workflow is not a routine. "Pause the morning routine" is about a scheduled trigger, not about a workflow, so say routine when you mean the scheduled thing and {{productName}} will reach for the right one.
|
|
58
60
|
|
|
59
61
|
## Scheduling a Workflow
|
|
60
62
|
|