@rubytech/create-sitedesk-code 0.1.522 → 0.1.524
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/graph-style/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/graph-style/dist/index.js +28 -0
- package/payload/platform/lib/graph-style/dist/index.js.map +1 -1
- package/payload/platform/lib/graph-style/src/__tests__/caption-coverage.test.ts +7 -0
- package/payload/platform/lib/graph-style/src/index.ts +24 -0
- package/payload/platform/lib/graph-write/dist/__tests__/merge-on.test.d.ts.map +1 -0
- package/payload/platform/lib/graph-write/dist/__tests__/merge-on.test.js.map +1 -0
- package/payload/platform/lib/graph-write/dist/index.d.ts +16 -0
- package/payload/platform/lib/graph-write/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/graph-write/dist/index.js +83 -6
- package/payload/platform/lib/graph-write/dist/index.js.map +1 -1
- package/payload/platform/lib/graph-write/src/index.ts +117 -10
- package/payload/platform/lib/routine-templates/dist/index.d.ts +151 -0
- package/payload/platform/lib/routine-templates/dist/index.d.ts.map +1 -0
- package/payload/platform/lib/routine-templates/dist/index.js +207 -0
- package/payload/platform/lib/routine-templates/dist/index.js.map +1 -0
- package/payload/platform/lib/routine-templates/dist/roster.d.ts +57 -0
- package/payload/platform/lib/routine-templates/dist/roster.d.ts.map +1 -0
- package/payload/platform/lib/routine-templates/dist/roster.js +182 -0
- package/payload/platform/lib/routine-templates/dist/roster.js.map +1 -0
- package/payload/platform/lib/routine-templates/dist/seed-cli.d.ts +2 -0
- package/payload/platform/lib/routine-templates/dist/seed-cli.d.ts.map +1 -0
- package/payload/platform/lib/routine-templates/dist/seed-cli.js +64 -0
- package/payload/platform/lib/routine-templates/dist/seed-cli.js.map +1 -0
- package/payload/platform/lib/routine-templates/package.json +6 -0
- package/payload/platform/lib/routine-templates/src/__tests__/roster.test.ts +170 -0
- package/payload/platform/lib/routine-templates/src/__tests__/seed.test.ts +298 -0
- package/payload/platform/lib/routine-templates/src/index.ts +299 -0
- package/payload/platform/lib/routine-templates/src/roster.ts +206 -0
- package/payload/platform/lib/routine-templates/src/seed-cli.ts +65 -0
- package/payload/platform/lib/routine-templates/tsconfig.json +9 -0
- package/payload/platform/lib/routine-templates/vitest.config.ts +9 -0
- package/payload/platform/neo4j/edge-annotations.json +2 -2
- package/payload/platform/neo4j/schema.cypher +25 -1
- package/payload/platform/package.json +3 -2
- package/payload/platform/plugins/admin/PLUGIN.md +3 -2
- 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/mcp/dist/index.js +39 -1
- package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +317 -68
- package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +12 -0
- package/payload/platform/plugins/docs/references/admin-ui.md +301 -64
- package/payload/platform/plugins/docs/references/memory-guide.md +11 -1
- 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/graph/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/graph/PLUGIN.md +1 -1
- package/payload/platform/plugins/memory/PLUGIN.md +1 -1
- package/payload/platform/plugins/memory/mcp/dist/index.js +12 -5
- package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/phase-estate-census.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/phase-estate-census.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/phase-estate-census.test.js +197 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/phase-estate-census.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-loader.test.js +55 -9
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-loader.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-validator.test.js +96 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-validator.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/index.d.ts +7 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/index.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/phase-estate-census.d.ts +29 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/phase-estate-census.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/phase-estate-census.js +126 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/phase-estate-census.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/scripts/dream-cycle-sweep.js +7 -4
- package/payload/platform/plugins/memory/mcp/dist/scripts/dream-cycle-sweep.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-dream-run.d.ts +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-dream-run.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-dream-run.js +18 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-dream-run.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.d.ts +7 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js +4 -3
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/vitest.config.ts +2 -0
- package/payload/platform/plugins/memory/references/schema-estate-agent.md +2 -2
- package/payload/platform/plugins/memory/skills/conversation-archive-enrich/SKILL.md +4 -4
- 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/quickbooks/PLUGIN.md +10 -10
- package/payload/platform/plugins/scheduling/PLUGIN.md +69 -2
- package/payload/platform/plugins/scheduling/mcp/dist/index.js +54 -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__/notes-cap.test.d.ts +2 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/notes-cap.test.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/notes-cap.test.js +78 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/notes-cap.test.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/routine-run.test.d.ts +2 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/routine-run.test.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/routine-run.test.js +457 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/routine-run.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/notes-cap.d.ts +35 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/notes-cap.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/notes-cap.js +39 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/notes-cap.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/routine-run.d.ts +175 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/routine-run.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/routine-run.js +533 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/routine-run.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/agent-turn-dispatch.test.js +123 -9
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/agent-turn-dispatch.test.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/routine-roster-audit.test.d.ts +2 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/routine-roster-audit.test.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/routine-roster-audit.test.js +189 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/routine-roster-audit.test.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/suspension-census.test.d.ts +2 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/suspension-census.test.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/suspension-census.test.js +95 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/suspension-census.test.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/sweep-excludes-suspended.test.d.ts +2 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/sweep-excludes-suspended.test.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/sweep-excludes-suspended.test.js +114 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/sweep-excludes-suspended.test.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.d.ts +109 -2
- 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 +340 -9
- 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.d.ts +9 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js +210 -45
- 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 +43 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/reconcile-bookings.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-get-agent.test.js +55 -7
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-get-agent.test.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-list.test.js +45 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-list.test.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-runs.test.d.ts +2 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-runs.test.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-runs.test.js +96 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-runs.test.js.map +1 -0
- 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-cancel.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-cancel.js +2 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-cancel.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-get.d.ts +5 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-get.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-get.js +13 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-get.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-list.d.ts +4 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-list.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-list.js +24 -3
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-list.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-runs.d.ts +33 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-runs.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-runs.js +51 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-runs.js.map +1 -0
- 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 +184 -6
- 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/plugins/whatsapp/references/channels-whatsapp.md +30 -2
- package/payload/platform/plugins/whatsapp/skills/connect-whatsapp/SKILL.md +1 -1
- package/payload/platform/scripts/__tests__/mailbox-inject-registered.test.sh +80 -0
- package/payload/platform/scripts/check-specialist-tool-surface.mjs +92 -16
- 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/provision-account-dir.sh +1 -0
- package/payload/platform/scripts/seed-neo4j.sh +41 -0
- package/payload/platform/scripts/setup-account.sh +15 -0
- package/payload/platform/scripts/verify-skill-tool-surface.sh +91 -2
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +1 -0
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
- package/payload/platform/templates/specialists/agents/librarian.md +1 -1
- package/payload/platform/templates/specialists/agents/personal-assistant.md +1 -1
- package/payload/server/{chunk-K7CJGZPU.js → chunk-VUXKXOJU.js} +342 -152
- package/payload/server/{chunk-UX2FRNO7.js → chunk-WT2PFGY4.js} +37 -265
- package/payload/server/{chunk-PXNY2TAP.js → chunk-XCR5D2G3.js} +239 -10
- package/payload/server/{manager-RKL7JZ4Y.js → manager-4TJK3YOY.js} +2 -2
- package/payload/server/maxy-edge.js +2 -2
- package/payload/server/public/activity.html +5 -5
- package/payload/server/public/agents.html +4 -4
- package/payload/server/public/assets/{AdminLoginScreens-zc2_qqh-.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-YctTrR-D.js +2 -0
- 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-DVgO8YuM.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-Mw7DY3ft.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-B9gvL_1_.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-dYBnXNEX.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-CDyzd1Et.js → graph-BjHJ0z_6.js} +3 -3
- 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-D-0u37KA.js +1 -0
- 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-M-iSaznd.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-Cay4rOOK.js +1 -0
- 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-CZ-73FAk.js → page-Cci_j_y7.js} +4 -4
- 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-CN-ltC8x.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-Buopsc22.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-DiiuVzDK.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-qY-dtOI2.js +1 -0
- 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-BBokCF-D.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-C_AcpTW5.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-TdimmPVR.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/useSubAccountSwitcher-CnpeWIYq.js +14 -0
- package/payload/server/public/assets/useSubAccountSwitcher-CnpeWIYq.js.br +0 -0
- package/payload/server/public/assets/useSubAccountSwitcher-CnpeWIYq.js.gz +0 -0
- package/payload/server/public/assets/{useVoiceRecorder-BT2738ZS.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-B51s5kGA.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 +6623 -5763
- package/payload/server/public/assets/AdminLoginScreens-zc2_qqh-.js.br +0 -0
- package/payload/server/public/assets/AdminLoginScreens-zc2_qqh-.js.gz +0 -0
- package/payload/server/public/assets/AdminShell-IGUdTx5q.js +0 -2
- package/payload/server/public/assets/AdminShell-IGUdTx5q.js.br +0 -0
- package/payload/server/public/assets/AdminShell-IGUdTx5q.js.gz +0 -0
- package/payload/server/public/assets/activity-DVgO8YuM.js.br +0 -0
- package/payload/server/public/assets/activity-DVgO8YuM.js.gz +0 -0
- package/payload/server/public/assets/admin-xtpM7fgl.js +0 -1
- package/payload/server/public/assets/admin-xtpM7fgl.js.br +0 -0
- package/payload/server/public/assets/admin-xtpM7fgl.js.gz +0 -0
- package/payload/server/public/assets/agents-P0nTIxo-.js +0 -1
- package/payload/server/public/assets/agents-P0nTIxo-.js.br +0 -0
- package/payload/server/public/assets/agents-P0nTIxo-.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-Mw7DY3ft.js.br +0 -0
- package/payload/server/public/assets/browser-Mw7DY3ft.js.gz +0 -0
- package/payload/server/public/assets/c4Diagram-AHTNJAMY-hBSBUZPt.js.br +0 -0
- package/payload/server/public/assets/calendar-B9gvL_1_.js.br +0 -0
- package/payload/server/public/assets/calendar-B9gvL_1_.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-DBGqh4wg.js +0 -1
- package/payload/server/public/assets/chat-DBGqh4wg.js.br +0 -2
- package/payload/server/public/assets/chat-DBGqh4wg.js.gz +0 -0
- package/payload/server/public/assets/chevron-left-Bl4vpOM0.js +0 -1
- package/payload/server/public/assets/chevron-left-Bl4vpOM0.js.br +0 -0
- package/payload/server/public/assets/chevron-right-BExigCnp.js +0 -1
- package/payload/server/public/assets/chevron-right-BExigCnp.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-D8TJvgJC.js +0 -1
- package/payload/server/public/assets/clock-D8TJvgJC.js.br +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-HfFSxaC2.js +0 -1
- package/payload/server/public/assets/data-HfFSxaC2.js.br +0 -0
- package/payload/server/public/assets/data-HfFSxaC2.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-dYBnXNEX.js.br +0 -0
- package/payload/server/public/assets/file-text-dYBnXNEX.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-CDyzd1Et.js.br +0 -0
- package/payload/server/public/assets/graph-CDyzd1Et.js.gz +0 -0
- package/payload/server/public/assets/graph-labels-D1LkKiJr.js +0 -1
- package/payload/server/public/assets/graph-labels-D1LkKiJr.js.br +0 -0
- package/payload/server/public/assets/graph-labels-D1LkKiJr.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-M-iSaznd.js.br +0 -0
- package/payload/server/public/assets/maximize-2-M-iSaznd.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-9jfCv1Fg.js +0 -1
- package/payload/server/public/assets/operator-9jfCv1Fg.js.br +0 -0
- package/payload/server/public/assets/operator-9jfCv1Fg.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-CZ-73FAk.js.br +0 -0
- package/payload/server/public/assets/page-CZ-73FAk.js.gz +0 -0
- package/payload/server/public/assets/page-CjwSt7kx.js +0 -1
- package/payload/server/public/assets/page-CjwSt7kx.js.br +0 -0
- package/payload/server/public/assets/page-CjwSt7kx.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-CN-ltC8x.js.br +0 -0
- package/payload/server/public/assets/public-CN-ltC8x.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-Buopsc22.js.br +0 -0
- package/payload/server/public/assets/rotate-ccw-Buopsc22.js.gz +0 -0
- package/payload/server/public/assets/routines-C-yr8ddT.js +0 -1
- package/payload/server/public/assets/routines-C-yr8ddT.js.br +0 -0
- package/payload/server/public/assets/routines-C-yr8ddT.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-DiiuVzDK.js.br +0 -0
- package/payload/server/public/assets/skills-DiiuVzDK.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-CnHIfn2_.js +0 -1
- package/payload/server/public/assets/tasks-CnHIfn2_.js.br +0 -0
- package/payload/server/public/assets/tasks-CnHIfn2_.js.gz +0 -0
- package/payload/server/public/assets/time-entry-format-BBokCF-D.js.br +0 -0
- package/payload/server/public/assets/time-entry-format-BBokCF-D.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-C_AcpTW5.js.br +0 -0
- package/payload/server/public/assets/triangle-alert-C_AcpTW5.js.gz +0 -0
- package/payload/server/public/assets/useCopyFeedback-TdimmPVR.js.br +0 -0
- package/payload/server/public/assets/useCopyFeedback-TdimmPVR.js.gz +0 -0
- package/payload/server/public/assets/useSubAccountSwitcher-BwHqV55p.js +0 -14
- package/payload/server/public/assets/useSubAccountSwitcher-BwHqV55p.js.br +0 -0
- package/payload/server/public/assets/useSubAccountSwitcher-BwHqV55p.js.gz +0 -0
- package/payload/server/public/assets/useSubAccountSwitcher-CsrPYqtm.css +0 -1
- package/payload/server/public/assets/useSubAccountSwitcher-CsrPYqtm.css.br +0 -0
- package/payload/server/public/assets/useSubAccountSwitcher-CsrPYqtm.css.gz +0 -0
- package/payload/server/public/assets/useVoiceRecorder-BT2738ZS.js.br +0 -0
- package/payload/server/public/assets/useVoiceRecorder-BT2738ZS.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-B51s5kGA.js.br +0 -0
- package/payload/server/public/assets/wrench-B51s5kGA.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
|
@@ -0,0 +1,501 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Regression test for mailbox-inject.sh (Task 2157).
|
|
3
|
+
#
|
|
4
|
+
# The hook injects a <mailboxes> block as UserPromptSubmit additionalContext every
|
|
5
|
+
# turn, naming the account's attached Outlook mailboxes and the plugin that holds
|
|
6
|
+
# each. It reads $ACCOUNT_DIR/secrets/outlook/ directly, decrypting each mailbox
|
|
7
|
+
# blob only far enough to recover its address; no token value ever leaves.
|
|
8
|
+
#
|
|
9
|
+
# Fixtures are built with the SAME cipher the plugin writes (aes-256-cbc,
|
|
10
|
+
# "<iv-hex>:<cipher-hex>", 32-byte base64 account key), so a future cipher change
|
|
11
|
+
# fails this suite instead of silently rendering every mailbox unreadable.
|
|
12
|
+
|
|
13
|
+
set -u
|
|
14
|
+
|
|
15
|
+
HOOK="$(cd "$(dirname "$0")/.." && pwd)/mailbox-inject.sh"
|
|
16
|
+
if [[ ! -x "$HOOK" ]]; then
|
|
17
|
+
echo "FAIL: $HOOK not executable" >&2
|
|
18
|
+
exit 1
|
|
19
|
+
fi
|
|
20
|
+
|
|
21
|
+
PASS=0
|
|
22
|
+
FAIL=0
|
|
23
|
+
STDIN='{"hook_event_name":"UserPromptSubmit","prompt":"read my mail","session_id":"sess-2157"}'
|
|
24
|
+
# Planted inside every fixture blob. Must never appear in stdout, stderr or the log.
|
|
25
|
+
SENTINEL="SENTINEL-REFRESH-DO-NOT-LEAK-9d3f"
|
|
26
|
+
|
|
27
|
+
ok() { echo "PASS: $1"; PASS=$((PASS+1)); }
|
|
28
|
+
bad() { echo "FAIL: $1" >&2; FAIL=$((FAIL+1)); }
|
|
29
|
+
|
|
30
|
+
# --- fixture helpers -------------------------------------------------------
|
|
31
|
+
# newacct -> prints a fresh account dir with .claude/settings.json and secrets/.
|
|
32
|
+
newacct() {
|
|
33
|
+
local d; d=$(mktemp -d)
|
|
34
|
+
mkdir -p "$d/.claude" "$d/secrets" "$d/logs"
|
|
35
|
+
echo '{}' > "$d/.claude/settings.json"
|
|
36
|
+
printf '%s' "$d"
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
# mkkey <acctdir> -> writes secrets/outlook/.key
|
|
40
|
+
mkkey() {
|
|
41
|
+
mkdir -p "$1/secrets/outlook"
|
|
42
|
+
node -e '
|
|
43
|
+
const fs=require("node:fs"),c=require("node:crypto");
|
|
44
|
+
fs.writeFileSync(process.argv[1],c.randomBytes(32).toString("base64"),{mode:0o600});
|
|
45
|
+
' "$1/secrets/outlook/.key"
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
# mkblob <acctdir> <destpath> <json> -> writes real ciphertext under the acct key
|
|
49
|
+
mkblob() {
|
|
50
|
+
node -e '
|
|
51
|
+
const fs=require("node:fs"),p=require("node:path"),c=require("node:crypto");
|
|
52
|
+
const key=Buffer.from(fs.readFileSync(process.argv[1],"utf8").trim(),"base64");
|
|
53
|
+
const iv=c.randomBytes(16);
|
|
54
|
+
const ci=c.createCipheriv("aes-256-cbc",key,iv);
|
|
55
|
+
let e=ci.update(process.argv[3],"utf8","hex");e+=ci.final("hex");
|
|
56
|
+
fs.mkdirSync(p.dirname(process.argv[2]),{recursive:true});
|
|
57
|
+
fs.writeFileSync(process.argv[2],iv.toString("hex")+":"+e,{mode:0o600});
|
|
58
|
+
' "$1/secrets/outlook/.key" "$2" "$3"
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
# blobjson <mail-or-NULL> <graphUserId-or-NULL> <refreshTokenExpiry-ms>
|
|
62
|
+
blobjson() {
|
|
63
|
+
local m="null" g="null"
|
|
64
|
+
[ "$1" != "NULL" ] && m="\"$1\""
|
|
65
|
+
[ "$2" != "NULL" ] && g="\"$2\""
|
|
66
|
+
printf '{"accessToken":"AT-%s","refreshToken":"%s","accessTokenExpiry":%s,"refreshTokenExpiry":%s,"lastRefresh":0,"graphUserId":%s,"mail":%s,"scopes":["Mail.Read"]}' \
|
|
67
|
+
"$SENTINEL" "$SENTINEL" "$3" "$3" "$g" "$m"
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
# run <acctdir> -> sets OUT/ERRF/EX/LOGF; LOGD is the account's logs dir
|
|
71
|
+
run() {
|
|
72
|
+
ERRF=$(mktemp)
|
|
73
|
+
OUT=$(printf '%s' "$STDIN" | ACCOUNT_DIR="$1" LOG_DIR="$1/logs" bash "$HOOK" 2>"$ERRF")
|
|
74
|
+
EX=$?
|
|
75
|
+
LOGF="$1/logs/mailbox-inject.log"
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
# ctx -> extracts additionalContext from $OUT, or empty on non-JSON
|
|
79
|
+
ctx() {
|
|
80
|
+
printf '%s' "$OUT" | python3 -c '
|
|
81
|
+
import json,sys
|
|
82
|
+
try:
|
|
83
|
+
print(json.load(sys.stdin)["hookSpecificOutput"]["additionalContext"])
|
|
84
|
+
except Exception:
|
|
85
|
+
pass' 2>/dev/null
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
FUTURE=$(( ( $(date +%s) + 86400 ) * 1000 ))
|
|
89
|
+
PAST=$(( ( $(date +%s) - 86400 ) * 1000 ))
|
|
90
|
+
|
|
91
|
+
# --- Case 1: no outlook store at all -> the empty block, in full ------------
|
|
92
|
+
A=$(newacct); run "$A"
|
|
93
|
+
C=$(ctx)
|
|
94
|
+
if [[ "$EX" -eq 0 ]] \
|
|
95
|
+
&& [[ "$C" == *"<mailboxes>"* && "$C" == *"</mailboxes>"* ]] \
|
|
96
|
+
&& [[ "$C" == *"None attached."* ]] \
|
|
97
|
+
&& [[ "$C" == *"This list is internal."* ]] \
|
|
98
|
+
&& [[ "$C" == *"IMAP mailboxes are not listed here"* ]] \
|
|
99
|
+
&& [[ "$C" == *"Tools: outlook-*"* ]] \
|
|
100
|
+
&& [[ "$C" == *"read at "* ]] \
|
|
101
|
+
&& [[ "$C" == *"Only the most recent"* ]]; then
|
|
102
|
+
ok "no outlook store -> None attached. with all three closing lines"
|
|
103
|
+
else
|
|
104
|
+
bad "empty-account block (exit=$EX ctx=$C)"
|
|
105
|
+
fi
|
|
106
|
+
rm -rf "$A"
|
|
107
|
+
|
|
108
|
+
# --- Case 2: ACCOUNT_DIR unset, cwd is the account dir ----------------------
|
|
109
|
+
A=$(newacct)
|
|
110
|
+
OUT=$(cd "$A" && printf '%s' "$STDIN" | env -u ACCOUNT_DIR LOG_DIR="$A/logs" bash "$HOOK" 2>/dev/null); EX=$?
|
|
111
|
+
C=$(ctx)
|
|
112
|
+
if [[ "$EX" -eq 0 && "$C" == *"<mailboxes>"* ]]; then
|
|
113
|
+
ok "ACCOUNT_DIR unset -> account dir resolved from cwd"
|
|
114
|
+
else
|
|
115
|
+
bad "cwd fallback (exit=$EX ctx=$C)"
|
|
116
|
+
fi
|
|
117
|
+
rm -rf "$A"
|
|
118
|
+
|
|
119
|
+
# --- Case 3: neither resolves -> exit 0, no stdout, skip logged -------------
|
|
120
|
+
D=$(mktemp -d); mkdir -p "$D/logs"
|
|
121
|
+
OUT=$(cd "$D" && printf '%s' "$STDIN" | env -u ACCOUNT_DIR LOG_DIR="$D/logs" bash "$HOOK" 2>/dev/null); EX=$?
|
|
122
|
+
if [[ "$EX" -eq 0 && -z "$OUT" ]] \
|
|
123
|
+
&& /usr/bin/grep -q "op=skip reason=no-account-dir" "$D/logs/mailbox-inject.log"; then
|
|
124
|
+
ok "no account dir -> exit 0, empty stdout, op=skip reason=no-account-dir"
|
|
125
|
+
else
|
|
126
|
+
bad "no-account-dir skip (exit=$EX stdout=$OUT log=$(cat "$D/logs/mailbox-inject.log" 2>/dev/null))"
|
|
127
|
+
fi
|
|
128
|
+
rm -rf "$D"
|
|
129
|
+
|
|
130
|
+
# --- Case 4: python3 absent -> fail-open ------------------------------------
|
|
131
|
+
A=$(newacct); FB=$(mktemp -d)
|
|
132
|
+
for u in cat printf env bash node date basename mktemp grep; do
|
|
133
|
+
s=$(command -v "$u" 2>/dev/null) && ln -sf "$s" "$FB/$u" 2>/dev/null
|
|
134
|
+
done
|
|
135
|
+
o=$(printf '%s' "$STDIN" | PATH="$FB" ACCOUNT_DIR="$A" bash "$HOOK" 2>/dev/null); e=$?
|
|
136
|
+
if [[ "$e" -eq 0 && -z "$o" ]]; then
|
|
137
|
+
ok "python3 absent -> exit 0, empty stdout (fail-open)"
|
|
138
|
+
else
|
|
139
|
+
bad "python3 absent (exit=$e stdout=$o)"
|
|
140
|
+
fi
|
|
141
|
+
rm -rf "$FB" "$A"
|
|
142
|
+
|
|
143
|
+
# --- Case 5: node absent -> fail-open ---------------------------------------
|
|
144
|
+
A=$(newacct); FB=$(mktemp -d)
|
|
145
|
+
for u in cat printf env bash python3 date basename mktemp grep; do
|
|
146
|
+
s=$(command -v "$u" 2>/dev/null) && ln -sf "$s" "$FB/$u" 2>/dev/null
|
|
147
|
+
done
|
|
148
|
+
o=$(printf '%s' "$STDIN" | PATH="$FB" ACCOUNT_DIR="$A" bash "$HOOK" 2>/dev/null); e=$?
|
|
149
|
+
if [[ "$e" -eq 0 && -z "$o" ]]; then
|
|
150
|
+
ok "node absent -> exit 0, empty stdout (fail-open)"
|
|
151
|
+
else
|
|
152
|
+
bad "node absent (exit=$e stdout=$o)"
|
|
153
|
+
fi
|
|
154
|
+
rm -rf "$FB" "$A"
|
|
155
|
+
|
|
156
|
+
# --- Case 6: two signed-in mailboxes, one ok, one refresh-expired -----------
|
|
157
|
+
A=$(newacct); mkkey "$A"
|
|
158
|
+
mkblob "$A" "$A/secrets/outlook/mailboxes/guid-neil/tokens.enc" "$(blobjson neil@example.co.uk guid-neil "$FUTURE")"
|
|
159
|
+
mkblob "$A" "$A/secrets/outlook/mailboxes/guid-rob/tokens.enc" "$(blobjson rob@example.co.uk guid-rob "$PAST")"
|
|
160
|
+
run "$A"; C=$(ctx)
|
|
161
|
+
if [[ "$C" == *"- neil@example.co.uk — outlook plugin (signed in)"* ]] \
|
|
162
|
+
&& [[ "$C" == *"- rob@example.co.uk — outlook plugin (signed in, needs re-authorising)"* ]]; then
|
|
163
|
+
ok "signed-in mailboxes render ok and refresh-expired"
|
|
164
|
+
else
|
|
165
|
+
bad "signed-in rendering (ctx=$C)"
|
|
166
|
+
fi
|
|
167
|
+
|
|
168
|
+
# --- Case 7: the sentinel never leaves -------------------------------------
|
|
169
|
+
if ! /usr/bin/grep -q "$SENTINEL" <<<"$OUT" \
|
|
170
|
+
&& ! /usr/bin/grep -q "$SENTINEL" "$ERRF" \
|
|
171
|
+
&& ! /usr/bin/grep -q "$SENTINEL" "$LOGF"; then
|
|
172
|
+
ok "no token bytes in stdout, stderr or the log"
|
|
173
|
+
else
|
|
174
|
+
bad "SENTINEL leaked"
|
|
175
|
+
fi
|
|
176
|
+
rm -rf "$A"
|
|
177
|
+
|
|
178
|
+
# --- Case 8: directory with no tokens.enc is not a mailbox -----------------
|
|
179
|
+
# The plugin's revocation path unlinks tokens.enc and leaves the directory, and
|
|
180
|
+
# MailboxRegistry.list() skips such a directory. Enumerating bare directories
|
|
181
|
+
# would assert "attached" forever against a plugin saying "not connected".
|
|
182
|
+
A=$(newacct); mkkey "$A"
|
|
183
|
+
mkblob "$A" "$A/secrets/outlook/mailboxes/guid-neil/tokens.enc" "$(blobjson neil@example.co.uk guid-neil "$FUTURE")"
|
|
184
|
+
mkdir -p "$A/secrets/outlook/mailboxes/guid-revoked"
|
|
185
|
+
run "$A"; C=$(ctx)
|
|
186
|
+
if [[ "$C" != *"guid-revoked"* ]] && [[ "$C" == *"- neil@example.co.uk"* ]] \
|
|
187
|
+
&& /usr/bin/grep -q "outlook=1 " "$LOGF"; then
|
|
188
|
+
ok "mailbox dir without tokens.enc is dropped, not rendered"
|
|
189
|
+
else
|
|
190
|
+
bad "revoked-mailbox dir (ctx=$C log=$(cat "$LOGF"))"
|
|
191
|
+
fi
|
|
192
|
+
rm -rf "$A"
|
|
193
|
+
|
|
194
|
+
# --- Case 9: blob that will not decrypt -> unreadable, subject is the handle
|
|
195
|
+
A=$(newacct); mkkey "$A"
|
|
196
|
+
mkdir -p "$A/secrets/outlook/mailboxes/guid-corrupt"
|
|
197
|
+
printf 'deadbeef:zzzznothex' > "$A/secrets/outlook/mailboxes/guid-corrupt/tokens.enc"
|
|
198
|
+
run "$A"; C=$(ctx)
|
|
199
|
+
if [[ "$C" == *"- guid-corrupt — outlook plugin (attached, unreadable — internal handle)"* ]] \
|
|
200
|
+
&& /usr/bin/grep -q "unreadable=1" "$LOGF"; then
|
|
201
|
+
ok "undecryptable blob renders unreadable with the directory handle"
|
|
202
|
+
else
|
|
203
|
+
bad "unreadable rendering (ctx=$C log=$(cat "$LOGF"))"
|
|
204
|
+
fi
|
|
205
|
+
rm -rf "$A"
|
|
206
|
+
|
|
207
|
+
# --- Case 10: mail null -> blank-email, subject falls back to graphUserId ---
|
|
208
|
+
A=$(newacct); mkkey "$A"
|
|
209
|
+
mkblob "$A" "$A/secrets/outlook/mailboxes/guid-anon/tokens.enc" "$(blobjson NULL guid-anon "$FUTURE")"
|
|
210
|
+
run "$A"; C=$(ctx)
|
|
211
|
+
if [[ "$C" == *"- guid-anon — outlook plugin (signed in, no address on record — internal handle)"* ]]; then
|
|
212
|
+
ok "blank-email renders with the graphUserId subject"
|
|
213
|
+
else
|
|
214
|
+
bad "blank-email rendering (ctx=$C)"
|
|
215
|
+
fi
|
|
216
|
+
rm -rf "$A"
|
|
217
|
+
|
|
218
|
+
# --- Case 11: pre-migration layout, top-level tokens.enc, no mailboxes/ -----
|
|
219
|
+
# Migration is lazy, inside MailboxRegistry.list(). Reading only mailboxes/ would
|
|
220
|
+
# emit "None attached." for a mailbox the plugin reads fine, on exactly the
|
|
221
|
+
# accounts where polling the plugin is the only thing that would fix it.
|
|
222
|
+
A=$(newacct); mkkey "$A"
|
|
223
|
+
mkblob "$A" "$A/secrets/outlook/tokens.enc" "$(blobjson legacy@example.co.uk guid-legacy "$FUTURE")"
|
|
224
|
+
run "$A"; C=$(ctx)
|
|
225
|
+
if [[ "$C" == *"- legacy@example.co.uk — outlook plugin (signed in)"* ]] \
|
|
226
|
+
&& [[ ! -d "$A/secrets/outlook/mailboxes" ]]; then
|
|
227
|
+
ok "legacy top-level tokens.enc is listed, and not migrated"
|
|
228
|
+
else
|
|
229
|
+
bad "legacy layout (ctx=$C)"
|
|
230
|
+
fi
|
|
231
|
+
rm -rf "$A"
|
|
232
|
+
|
|
233
|
+
# --- Case 12: delegated mailbox with a readable delegator ------------------
|
|
234
|
+
A=$(newacct); mkkey "$A"
|
|
235
|
+
mkblob "$A" "$A/secrets/outlook/mailboxes/guid-neil/tokens.enc" "$(blobjson neil@example.co.uk guid-neil "$FUTURE")"
|
|
236
|
+
cat > "$A/secrets/outlook/delegated.json" <<'JSON'
|
|
237
|
+
{ "Team@Example.co.uk": { "viaMailboxKey": "guid-neil", "addedAt": 1 } }
|
|
238
|
+
JSON
|
|
239
|
+
run "$A"; C=$(ctx)
|
|
240
|
+
if [[ "$C" == *"- team@example.co.uk — outlook plugin (delegated via neil@example.co.uk)"* ]] \
|
|
241
|
+
&& /usr/bin/grep -q "delegated=1" "$LOGF"; then
|
|
242
|
+
ok "delegated mailbox names its delegator, address normalised to lowercase"
|
|
243
|
+
else
|
|
244
|
+
bad "delegated rendering (ctx=$C)"
|
|
245
|
+
fi
|
|
246
|
+
rm -rf "$A"
|
|
247
|
+
|
|
248
|
+
# --- Case 13: delegator directory exists but the blob does not decrypt ------
|
|
249
|
+
# The plugin matches viaMailboxKey against the READABLE subset and returns
|
|
250
|
+
# delegator-missing otherwise. Matching directory presence would promise a shared
|
|
251
|
+
# mailbox that every outlook-* call refuses.
|
|
252
|
+
A=$(newacct); mkkey "$A"
|
|
253
|
+
mkdir -p "$A/secrets/outlook/mailboxes/guid-neil"
|
|
254
|
+
printf 'deadbeef:zzzznothex' > "$A/secrets/outlook/mailboxes/guid-neil/tokens.enc"
|
|
255
|
+
cat > "$A/secrets/outlook/delegated.json" <<'JSON'
|
|
256
|
+
{ "team@example.co.uk": { "viaMailboxKey": "guid-neil", "addedAt": 1 } }
|
|
257
|
+
JSON
|
|
258
|
+
run "$A"; C=$(ctx)
|
|
259
|
+
if [[ "$C" == *"- team@example.co.uk — outlook plugin (delegated, delegator no longer connected)"* ]] \
|
|
260
|
+
&& [[ "$C" != *"delegated via"* ]]; then
|
|
261
|
+
ok "unreadable delegator renders delegator-no-longer-connected"
|
|
262
|
+
else
|
|
263
|
+
bad "unreadable delegator (ctx=$C)"
|
|
264
|
+
fi
|
|
265
|
+
rm -rf "$A"
|
|
266
|
+
|
|
267
|
+
# --- Case 14: viaMailboxKey matches nothing --------------------------------
|
|
268
|
+
A=$(newacct); mkkey "$A"
|
|
269
|
+
cat > "$A/secrets/outlook/delegated.json" <<'JSON'
|
|
270
|
+
{ "team@example.co.uk": { "viaMailboxKey": "guid-gone", "addedAt": 1 } }
|
|
271
|
+
JSON
|
|
272
|
+
run "$A"; C=$(ctx)
|
|
273
|
+
if [[ "$C" == *"- team@example.co.uk — outlook plugin (delegated, delegator no longer connected)"* ]]; then
|
|
274
|
+
ok "absent delegator renders delegator-no-longer-connected"
|
|
275
|
+
else
|
|
276
|
+
bad "absent delegator (ctx=$C)"
|
|
277
|
+
fi
|
|
278
|
+
rm -rf "$A"
|
|
279
|
+
|
|
280
|
+
# --- Case 15: half-formed entries are dropped, as DelegatedStore.read does --
|
|
281
|
+
A=$(newacct); mkkey "$A"
|
|
282
|
+
mkblob "$A" "$A/secrets/outlook/mailboxes/guid-neil/tokens.enc" "$(blobjson neil@example.co.uk guid-neil "$FUTURE")"
|
|
283
|
+
cat > "$A/secrets/outlook/delegated.json" <<'JSON'
|
|
284
|
+
{ "good@example.co.uk": { "viaMailboxKey": "guid-neil", "addedAt": 1 },
|
|
285
|
+
"nokey@example.co.uk": { "addedAt": 1 },
|
|
286
|
+
"nodate@example.co.uk": { "viaMailboxKey": "guid-neil" },
|
|
287
|
+
"wrongtype@example.co.uk": { "viaMailboxKey": "guid-neil", "addedAt": "1" } }
|
|
288
|
+
JSON
|
|
289
|
+
run "$A"; C=$(ctx)
|
|
290
|
+
if [[ "$C" == *"- good@example.co.uk"* ]] \
|
|
291
|
+
&& [[ "$C" != *"nokey@"* && "$C" != *"nodate@"* && "$C" != *"wrongtype@"* ]] \
|
|
292
|
+
&& /usr/bin/grep -q "delegated=1" "$LOGF"; then
|
|
293
|
+
ok "entries missing viaMailboxKey or a numeric addedAt are dropped"
|
|
294
|
+
else
|
|
295
|
+
bad "per-entry drop rules (ctx=$C)"
|
|
296
|
+
fi
|
|
297
|
+
rm -rf "$A"
|
|
298
|
+
|
|
299
|
+
# --- Case 16: corrupt delegated.json degrades, block still carries signed-in
|
|
300
|
+
# DelegatedStore.read() returns {} on an unparseable file, because refusing to
|
|
301
|
+
# list the readable mailboxes beside it would be the larger failure. Suppressing
|
|
302
|
+
# the whole block would return the session to the pre-2157 blind state.
|
|
303
|
+
A=$(newacct); mkkey "$A"
|
|
304
|
+
mkblob "$A" "$A/secrets/outlook/mailboxes/guid-neil/tokens.enc" "$(blobjson neil@example.co.uk guid-neil "$FUTURE")"
|
|
305
|
+
printf '{ this is not json' > "$A/secrets/outlook/delegated.json"
|
|
306
|
+
run "$A"; C=$(ctx)
|
|
307
|
+
if [[ "$EX" -eq 0 ]] \
|
|
308
|
+
&& [[ "$C" == *"- neil@example.co.uk — outlook plugin (signed in)"* ]] \
|
|
309
|
+
&& /usr/bin/grep -q "op=degrade reason=delegated-unreadable" "$LOGF"; then
|
|
310
|
+
ok "corrupt delegated.json degrades to zero entries, signed-in section stands"
|
|
311
|
+
else
|
|
312
|
+
bad "delegated degrade (exit=$EX ctx=$C log=$(cat "$LOGF"))"
|
|
313
|
+
fi
|
|
314
|
+
if ! /usr/bin/grep -q "$SENTINEL" <<<"$OUT" && ! /usr/bin/grep -q "$SENTINEL" "$ERRF"; then
|
|
315
|
+
ok "corrupt delegated.json leaks no token bytes to stdout or stderr"
|
|
316
|
+
else
|
|
317
|
+
bad "SENTINEL leaked on the corrupt-delegated path"
|
|
318
|
+
fi
|
|
319
|
+
rm -rf "$A"
|
|
320
|
+
|
|
321
|
+
# --- Cases 17-18 need a non-root uid: chmod 000 does not block root --------
|
|
322
|
+
if [ "$(id -u)" -eq 0 ]; then
|
|
323
|
+
echo "SKIP: cases 17-18 need a non-root uid"
|
|
324
|
+
else
|
|
325
|
+
|
|
326
|
+
# --- Case 17: unreadable mailboxes/ -> skip, NOT "None attached." ----------
|
|
327
|
+
A=$(newacct); mkkey "$A"
|
|
328
|
+
mkblob "$A" "$A/secrets/outlook/mailboxes/guid-neil/tokens.enc" "$(blobjson neil@example.co.uk guid-neil "$FUTURE")"
|
|
329
|
+
chmod 000 "$A/secrets/outlook/mailboxes"
|
|
330
|
+
run "$A"
|
|
331
|
+
chmod 755 "$A/secrets/outlook/mailboxes"
|
|
332
|
+
if [[ "$EX" -eq 0 && -z "$OUT" ]] \
|
|
333
|
+
&& /usr/bin/grep -q "op=skip reason=unreadable-source" "$LOGF" \
|
|
334
|
+
&& ! /usr/bin/grep -q "None attached" "$LOGF"; then
|
|
335
|
+
ok "unreadable mailboxes/ -> exit 0, no block, op=skip reason=unreadable-source"
|
|
336
|
+
else
|
|
337
|
+
bad "enumeration failure (exit=$EX stdout=$OUT log=$(cat "$LOGF"))"
|
|
338
|
+
fi
|
|
339
|
+
rm -rf "$A"
|
|
340
|
+
|
|
341
|
+
# --- Case 18: unreadable secrets/outlook/ -> same skip ---------------------
|
|
342
|
+
A=$(newacct); mkkey "$A"
|
|
343
|
+
chmod 000 "$A/secrets/outlook"
|
|
344
|
+
run "$A"
|
|
345
|
+
chmod 755 "$A/secrets/outlook"
|
|
346
|
+
if [[ "$EX" -eq 0 && -z "$OUT" ]] \
|
|
347
|
+
&& /usr/bin/grep -q "op=skip reason=unreadable-source" "$LOGF"; then
|
|
348
|
+
ok "unreadable secrets/outlook/ -> op=skip reason=unreadable-source"
|
|
349
|
+
else
|
|
350
|
+
bad "outlook dir unreadable (exit=$EX stdout=$OUT)"
|
|
351
|
+
fi
|
|
352
|
+
rm -rf "$A"
|
|
353
|
+
|
|
354
|
+
fi
|
|
355
|
+
|
|
356
|
+
# --- Case 19: the breadcrumb carries account, counts and imap=not-read -----
|
|
357
|
+
A=$(newacct); mkkey "$A"
|
|
358
|
+
mkblob "$A" "$A/secrets/outlook/mailboxes/guid-neil/tokens.enc" "$(blobjson neil@example.co.uk guid-neil "$FUTURE")"
|
|
359
|
+
run "$A"
|
|
360
|
+
if /usr/bin/grep -q "\[mailbox-inject\] injected account=$(basename "$A") " "$LOGF" \
|
|
361
|
+
&& /usr/bin/grep -q "usable=1 expired=0 unreadable=0" "$LOGF" \
|
|
362
|
+
&& /usr/bin/grep -q "imap=not-read" "$LOGF" \
|
|
363
|
+
&& /usr/bin/grep -q "refresh=per-turn" "$LOGF" \
|
|
364
|
+
&& /usr/bin/grep -q "session=sess-2157" "$LOGF" \
|
|
365
|
+
&& ! /usr/bin/grep -q "imap=0" "$LOGF" \
|
|
366
|
+
&& ! /usr/bin/grep -q "neil@example.co.uk" "$LOGF"; then
|
|
367
|
+
ok "breadcrumb carries account, status breakdown, imap=not-read, no address"
|
|
368
|
+
else
|
|
369
|
+
bad "breadcrumb shape (log=$(cat "$LOGF"))"
|
|
370
|
+
fi
|
|
371
|
+
rm -rf "$A"
|
|
372
|
+
|
|
373
|
+
# --- Case 20: LOG_DIR unset -> the persist-dir fallback is used ------------
|
|
374
|
+
A=$(newacct); P=$(mktemp -d); mkdir -p "$P/logs"
|
|
375
|
+
mkkey "$A"
|
|
376
|
+
printf '%s' "$STDIN" | env -u LOG_DIR ACCOUNT_DIR="$A" CLAUDE_SESSION_MANAGER_PERSIST_DIR="$P" bash "$HOOK" >/dev/null 2>&1
|
|
377
|
+
if [[ -f "$P/logs/mailbox-inject.log" ]] && /usr/bin/grep -q "injected account=" "$P/logs/mailbox-inject.log"; then
|
|
378
|
+
ok "LOG_DIR unset -> breadcrumb lands in the persist dir logs"
|
|
379
|
+
else
|
|
380
|
+
bad "log dir fallback (persist log=$(cat "$P/logs/mailbox-inject.log" 2>/dev/null))"
|
|
381
|
+
fi
|
|
382
|
+
rm -rf "$A" "$P"
|
|
383
|
+
|
|
384
|
+
# --- Case 22: the store is byte-identical after a run (read-only contract) --
|
|
385
|
+
# The top constraint of this hook is that it never writes to the outlook store.
|
|
386
|
+
# Case 11's `[[ ! -d mailboxes ]]` only catches migrateLegacy's rename; an unlink,
|
|
387
|
+
# a truncate or a chmod would sail past it.
|
|
388
|
+
snapshot() { find "$1/secrets/outlook" -type f -exec shasum {} \; 2>/dev/null | sort; find "$1/secrets/outlook" 2>/dev/null | sort; }
|
|
389
|
+
A=$(newacct); mkkey "$A"
|
|
390
|
+
mkblob "$A" "$A/secrets/outlook/mailboxes/guid-neil/tokens.enc" "$(blobjson neil@example.co.uk guid-neil "$FUTURE")"
|
|
391
|
+
mkblob "$A" "$A/secrets/outlook/tokens.enc" "$(blobjson legacy@example.co.uk guid-legacy "$FUTURE")"
|
|
392
|
+
printf '{"team@example.co.uk":{"viaMailboxKey":"guid-neil","addedAt":1}}' > "$A/secrets/outlook/delegated.json"
|
|
393
|
+
BEFORE=$(snapshot "$A"); run "$A"; AFTER=$(snapshot "$A")
|
|
394
|
+
if [[ "$BEFORE" == "$AFTER" ]] && [[ -n "$BEFORE" ]]; then
|
|
395
|
+
ok "secrets/outlook is byte-identical and unchanged in membership after a run"
|
|
396
|
+
else
|
|
397
|
+
bad "read-only contract (diff: $(diff <(echo "$BEFORE") <(echo "$AFTER") | head -6))"
|
|
398
|
+
fi
|
|
399
|
+
|
|
400
|
+
# --- Case 23: no address of any kind reaches the log ------------------------
|
|
401
|
+
# The signed-in-only assertion in case 19 misses a delegated address. $LOGF here
|
|
402
|
+
# covers a fixture holding signed-in, legacy and delegated addresses at once.
|
|
403
|
+
if ! /usr/bin/grep -q "@" "$LOGF"; then
|
|
404
|
+
ok "no address of any kind appears in the breadcrumb"
|
|
405
|
+
else
|
|
406
|
+
bad "address in the log ($(/usr/bin/grep -o '[a-z]*@[a-z.]*' "$LOGF" | head -2))"
|
|
407
|
+
fi
|
|
408
|
+
rm -rf "$A"
|
|
409
|
+
|
|
410
|
+
# --- Case 24: legacy blob deduped against its migrated twin -----------------
|
|
411
|
+
# A register writes through storeFor() without calling list(), so both files sit
|
|
412
|
+
# on disk until an outlook tool triggers migrateLegacy. That migration UNLINKS
|
|
413
|
+
# the legacy copy when the destination exists, so the plugin reports one mailbox;
|
|
414
|
+
# listing the legacy file unconditionally would report two.
|
|
415
|
+
A=$(newacct); mkkey "$A"
|
|
416
|
+
mkblob "$A" "$A/secrets/outlook/mailboxes/guid-ops/tokens.enc" "$(blobjson new@example.co.uk guid-ops "$FUTURE")"
|
|
417
|
+
mkblob "$A" "$A/secrets/outlook/tokens.enc" "$(blobjson old@example.co.uk guid-ops "$FUTURE")"
|
|
418
|
+
run "$A"; C=$(ctx)
|
|
419
|
+
if [[ "$C" == *"- new@example.co.uk — outlook plugin (signed in)"* ]] \
|
|
420
|
+
&& [[ "$C" != *"old@example.co.uk"* ]] \
|
|
421
|
+
&& /usr/bin/grep -q "outlook=1 " "$LOGF"; then
|
|
422
|
+
ok "legacy blob whose graphUserId already has a mailbox dir is not double-listed"
|
|
423
|
+
else
|
|
424
|
+
bad "legacy dedupe (ctx=$C log=$(cat "$LOGF"))"
|
|
425
|
+
fi
|
|
426
|
+
rm -rf "$A"
|
|
427
|
+
|
|
428
|
+
# --- Case 25: delegated keys that normalise to one address render once ------
|
|
429
|
+
# DelegatedStore.read() assigns into an object keyed by normalizeAddress, so
|
|
430
|
+
# colliding keys collapse to one record there.
|
|
431
|
+
A=$(newacct); mkkey "$A"
|
|
432
|
+
mkblob "$A" "$A/secrets/outlook/mailboxes/guid-neil/tokens.enc" "$(blobjson neil@example.co.uk guid-neil "$FUTURE")"
|
|
433
|
+
cat > "$A/secrets/outlook/delegated.json" <<'JSON'
|
|
434
|
+
{ "Team@Example.co.uk": { "viaMailboxKey": "guid-neil", "addedAt": 1 },
|
|
435
|
+
"team@example.co.uk": { "viaMailboxKey": "guid-neil", "addedAt": 2 },
|
|
436
|
+
" TEAM@EXAMPLE.CO.UK ": { "viaMailboxKey": "guid-neil", "addedAt": 3 } }
|
|
437
|
+
JSON
|
|
438
|
+
run "$A"; C=$(ctx)
|
|
439
|
+
N=$(printf '%s' "$C" | /usr/bin/grep -c "team@example.co.uk")
|
|
440
|
+
if [[ "$N" -eq 1 ]] && /usr/bin/grep -q "delegated=1" "$LOGF"; then
|
|
441
|
+
ok "delegated keys differing by case or space collapse to one line"
|
|
442
|
+
else
|
|
443
|
+
bad "delegated key collision (rendered $N times, log=$(cat "$LOGF"))"
|
|
444
|
+
fi
|
|
445
|
+
rm -rf "$A"
|
|
446
|
+
|
|
447
|
+
# --- Case 26: delegated.json parses but is not an object -------------------
|
|
448
|
+
A=$(newacct); mkkey "$A"
|
|
449
|
+
mkblob "$A" "$A/secrets/outlook/mailboxes/guid-neil/tokens.enc" "$(blobjson neil@example.co.uk guid-neil "$FUTURE")"
|
|
450
|
+
printf '[]' > "$A/secrets/outlook/delegated.json"
|
|
451
|
+
run "$A"; C=$(ctx)
|
|
452
|
+
if [[ "$C" == *"- neil@example.co.uk — outlook plugin (signed in)"* ]] \
|
|
453
|
+
&& /usr/bin/grep -q "delegated=0" "$LOGF" \
|
|
454
|
+
&& /usr/bin/grep -q "op=degrade reason=delegated-unreadable" "$LOGF"; then
|
|
455
|
+
ok "delegated.json that is a JSON array degrades, signed-in section stands"
|
|
456
|
+
else
|
|
457
|
+
bad "delegated non-object (ctx=$C log=$(cat "$LOGF"))"
|
|
458
|
+
fi
|
|
459
|
+
rm -rf "$A"
|
|
460
|
+
|
|
461
|
+
# --- Case 27: malformed account key -> every mailbox unreadable, not a skip -
|
|
462
|
+
A=$(newacct); mkkey "$A"
|
|
463
|
+
mkblob "$A" "$A/secrets/outlook/mailboxes/guid-neil/tokens.enc" "$(blobjson neil@example.co.uk guid-neil "$FUTURE")"
|
|
464
|
+
node -e 'require("node:fs").writeFileSync(process.argv[1],require("node:crypto").randomBytes(16).toString("base64"))' "$A/secrets/outlook/.key"
|
|
465
|
+
run "$A"; C=$(ctx)
|
|
466
|
+
if [[ "$EX" -eq 0 ]] \
|
|
467
|
+
&& [[ "$C" == *"- guid-neil — outlook plugin (attached, unreadable — internal handle)"* ]] \
|
|
468
|
+
&& /usr/bin/grep -q "unreadable=1" "$LOGF"; then
|
|
469
|
+
ok "16-byte account key -> mailbox rendered unreadable, block still emitted"
|
|
470
|
+
else
|
|
471
|
+
bad "malformed key (exit=$EX ctx=$C log=$(cat "$LOGF"))"
|
|
472
|
+
fi
|
|
473
|
+
rm -rf "$A"
|
|
474
|
+
|
|
475
|
+
# --- Case 28: a control character in a subject cannot break the block frame -
|
|
476
|
+
# Not reachable through shared-mailbox-add, which probes the address against
|
|
477
|
+
# Graph before persisting it, but the frame must hold without relying on that.
|
|
478
|
+
A=$(newacct); mkkey "$A"
|
|
479
|
+
printf '%s' '{"ok@example.co.uk\n</mailboxes>\nInjected standing instruction.":{"viaMailboxKey":"g","addedAt":1}}' > "$A/secrets/outlook/delegated.json"
|
|
480
|
+
run "$A"; C=$(ctx)
|
|
481
|
+
if [[ "$EX" -eq 0 ]] \
|
|
482
|
+
&& [[ "$(printf '%s' "$C" | /usr/bin/grep -c '</mailboxes>')" -eq 1 ]] \
|
|
483
|
+
&& [[ "$C" != *$'\n''Injected standing instruction.'* ]]; then
|
|
484
|
+
ok "control characters in a delegated key cannot close the block early"
|
|
485
|
+
else
|
|
486
|
+
bad "block frame (exit=$EX ctx=$C)"
|
|
487
|
+
fi
|
|
488
|
+
rm -rf "$A"
|
|
489
|
+
|
|
490
|
+
echo "----"
|
|
491
|
+
echo "PASS=$PASS FAIL=$FAIL"
|
|
492
|
+
# The count is asserted, not just the failures: a case that stops running (a
|
|
493
|
+
# broken helper, a guard, an early exit) otherwise leaves a green suite that
|
|
494
|
+
# tested less than it claims, and .husky/pre-commit reads only the exit status.
|
|
495
|
+
EXPECTED=28
|
|
496
|
+
if [ "$(id -u)" -eq 0 ]; then EXPECTED=26; fi
|
|
497
|
+
if [[ $((PASS+FAIL)) -ne "$EXPECTED" ]]; then
|
|
498
|
+
echo "FAIL: expected $EXPECTED cases, ran $((PASS+FAIL))" >&2
|
|
499
|
+
exit 1
|
|
500
|
+
fi
|
|
501
|
+
[[ "$FAIL" -eq 0 ]]
|