@rubytech/create-realagent-code 0.1.574 → 0.1.575
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/dist/index.js +14 -0
- package/package.json +1 -1
- package/payload/platform/lib/canonical-instant/dist/index.d.ts +57 -0
- package/payload/platform/lib/canonical-instant/dist/index.d.ts.map +1 -0
- package/payload/platform/lib/canonical-instant/dist/index.js +139 -0
- package/payload/platform/lib/canonical-instant/dist/index.js.map +1 -0
- package/payload/platform/lib/canonical-instant/src/__tests__/normalise-instant.test.ts +158 -0
- package/payload/platform/lib/canonical-instant/src/index.ts +147 -0
- package/payload/platform/lib/canonical-instant/tsconfig.json +9 -0
- package/payload/platform/lib/canonical-instant/vitest.config.ts +9 -0
- package/payload/platform/lib/dispatch-read/dist/geo.d.ts +34 -0
- package/payload/platform/lib/dispatch-read/dist/geo.d.ts.map +1 -0
- package/payload/platform/lib/dispatch-read/dist/geo.js +27 -0
- package/payload/platform/lib/dispatch-read/dist/geo.js.map +1 -0
- package/payload/platform/lib/dispatch-read/dist/index.d.ts +6 -2
- package/payload/platform/lib/dispatch-read/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/dispatch-read/dist/index.js +21 -1
- package/payload/platform/lib/dispatch-read/dist/index.js.map +1 -1
- package/payload/platform/lib/dispatch-read/dist/keyboard.d.ts +66 -0
- package/payload/platform/lib/dispatch-read/dist/keyboard.d.ts.map +1 -0
- package/payload/platform/lib/dispatch-read/dist/keyboard.js +64 -0
- package/payload/platform/lib/dispatch-read/dist/keyboard.js.map +1 -0
- package/payload/platform/lib/dispatch-read/dist/read.d.ts +144 -9
- package/payload/platform/lib/dispatch-read/dist/read.d.ts.map +1 -1
- package/payload/platform/lib/dispatch-read/dist/read.js +437 -118
- package/payload/platform/lib/dispatch-read/dist/read.js.map +1 -1
- package/payload/platform/lib/dispatch-read/dist/types.d.ts +80 -11
- package/payload/platform/lib/dispatch-read/dist/types.d.ts.map +1 -1
- package/payload/platform/lib/dispatch-read/src/__tests__/geo.test.ts +86 -0
- package/payload/platform/lib/dispatch-read/src/__tests__/keyboard.test.ts +124 -0
- package/payload/platform/lib/dispatch-read/src/__tests__/previous-visit.test.ts +98 -0
- package/payload/platform/lib/dispatch-read/src/__tests__/read.test.ts +107 -8
- package/payload/platform/lib/dispatch-read/src/__tests__/worker-day.test.ts +215 -10
- package/payload/platform/lib/dispatch-read/src/geo.ts +56 -0
- package/payload/platform/lib/dispatch-read/src/index.ts +25 -1
- package/payload/platform/lib/dispatch-read/src/keyboard.ts +98 -0
- package/payload/platform/lib/dispatch-read/src/read.ts +522 -119
- package/payload/platform/lib/dispatch-read/src/types.ts +83 -11
- package/payload/platform/lib/dispatch-write/dist/write.d.ts +14 -0
- package/payload/platform/lib/dispatch-write/dist/write.d.ts.map +1 -1
- package/payload/platform/lib/dispatch-write/dist/write.js +50 -11
- package/payload/platform/lib/dispatch-write/dist/write.js.map +1 -1
- package/payload/platform/lib/dispatch-write/src/__tests__/write.test.ts +72 -2
- package/payload/platform/lib/dispatch-write/src/write.ts +79 -14
- package/payload/platform/neo4j/schema.cypher +66 -1
- package/payload/platform/package.json +2 -2
- package/payload/platform/plugins/admin/PLUGIN.md +3 -0
- package/payload/platform/plugins/admin/hooks/__tests__/fs-schema-guard-bash.test.sh +106 -0
- package/payload/platform/plugins/admin/hooks/__tests__/fs-schema-guard.test.sh +66 -0
- package/payload/platform/plugins/admin/hooks/fs-schema-guard-bash-post.sh +85 -12
- package/payload/platform/plugins/admin/hooks/fs-schema-guard.sh +18 -0
- package/payload/platform/plugins/admin/mcp/dist/index.js +2 -2
- package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/admin/skills/admin-user-management/SKILL.md +10 -11
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +106 -36
- package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +8 -0
- package/payload/platform/plugins/cloudflare/mcp/__tests__/portal-visits-scope.test.ts +130 -1
- package/payload/platform/plugins/cloudflare/skills/data-portal/schema.sql +63 -0
- package/payload/platform/plugins/cloudflare/skills/data-portal/template/functions/api/visits.ts +104 -3
- package/payload/platform/plugins/dispatch/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/dispatch/PLUGIN.md +49 -6
- package/payload/platform/plugins/dispatch/mcp/dist/index.js +200 -2
- package/payload/platform/plugins/dispatch/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/dispatch/mcp/dist/lib/allocate.d.ts +22 -4
- package/payload/platform/plugins/dispatch/mcp/dist/lib/allocate.d.ts.map +1 -1
- package/payload/platform/plugins/dispatch/mcp/dist/lib/allocate.js +4 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/allocate.js.map +1 -1
- package/payload/platform/plugins/dispatch/mcp/dist/lib/bot-token.d.ts +10 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/bot-token.d.ts.map +1 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/bot-token.js +47 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/bot-token.js.map +1 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/config.d.ts.map +1 -1
- package/payload/platform/plugins/dispatch/mcp/dist/lib/config.js +12 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/config.js.map +1 -1
- package/payload/platform/plugins/dispatch/mcp/dist/lib/ids.d.ts +1 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/ids.d.ts.map +1 -1
- package/payload/platform/plugins/dispatch/mcp/dist/lib/ids.js +1 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/ids.js.map +1 -1
- package/payload/platform/plugins/dispatch/mcp/dist/lib/intake.d.ts +36 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/intake.d.ts.map +1 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/intake.js +36 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/intake.js.map +1 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/keyboard.d.ts +11 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/keyboard.d.ts.map +1 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/keyboard.js +10 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/keyboard.js.map +1 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/read.d.ts +2 -2
- package/payload/platform/plugins/dispatch/mcp/dist/lib/read.d.ts.map +1 -1
- package/payload/platform/plugins/dispatch/mcp/dist/lib/read.js +9 -1
- package/payload/platform/plugins/dispatch/mcp/dist/lib/read.js.map +1 -1
- package/payload/platform/plugins/dispatch/mcp/dist/lib/travel.d.ts +43 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/travel.d.ts.map +1 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/travel.js +53 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/travel.js.map +1 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/types.d.ts +13 -2
- package/payload/platform/plugins/dispatch/mcp/dist/lib/types.d.ts.map +1 -1
- package/payload/platform/plugins/dispatch/mcp/dist/scripts/converge-visit-instants.d.ts +6 -0
- package/payload/platform/plugins/dispatch/mcp/dist/scripts/converge-visit-instants.d.ts.map +1 -0
- package/payload/platform/plugins/dispatch/mcp/dist/scripts/converge-visit-instants.js +102 -0
- package/payload/platform/plugins/dispatch/mcp/dist/scripts/converge-visit-instants.js.map +1 -0
- package/payload/platform/plugins/dispatch/mcp/dist/tools/allocate.d.ts +18 -0
- package/payload/platform/plugins/dispatch/mcp/dist/tools/allocate.d.ts.map +1 -1
- package/payload/platform/plugins/dispatch/mcp/dist/tools/allocate.js +251 -40
- package/payload/platform/plugins/dispatch/mcp/dist/tools/allocate.js.map +1 -1
- package/payload/platform/plugins/dispatch/mcp/dist/tools/intake.d.ts +75 -0
- package/payload/platform/plugins/dispatch/mcp/dist/tools/intake.d.ts.map +1 -0
- package/payload/platform/plugins/dispatch/mcp/dist/tools/intake.js +194 -0
- package/payload/platform/plugins/dispatch/mcp/dist/tools/intake.js.map +1 -0
- package/payload/platform/plugins/dispatch/mcp/dist/tools/notify-worker.d.ts +61 -0
- package/payload/platform/plugins/dispatch/mcp/dist/tools/notify-worker.d.ts.map +1 -0
- package/payload/platform/plugins/dispatch/mcp/dist/tools/notify-worker.js +130 -0
- package/payload/platform/plugins/dispatch/mcp/dist/tools/notify-worker.js.map +1 -0
- package/payload/platform/plugins/dispatch/mcp/dist/tools/site-location-set.d.ts +28 -0
- package/payload/platform/plugins/dispatch/mcp/dist/tools/site-location-set.d.ts.map +1 -0
- package/payload/platform/plugins/dispatch/mcp/dist/tools/site-location-set.js +44 -0
- package/payload/platform/plugins/dispatch/mcp/dist/tools/site-location-set.js.map +1 -0
- package/payload/platform/plugins/dispatch/mcp/dist/tools/site-upsert.d.ts +43 -0
- package/payload/platform/plugins/dispatch/mcp/dist/tools/site-upsert.d.ts.map +1 -0
- package/payload/platform/plugins/dispatch/mcp/dist/tools/site-upsert.js +139 -0
- package/payload/platform/plugins/dispatch/mcp/dist/tools/site-upsert.js.map +1 -0
- package/payload/platform/plugins/dispatch/skills/dispatch-page/SKILL.md +85 -0
- package/payload/platform/plugins/dispatch/skills/dispatch-page/template/planner.css +97 -0
- package/payload/platform/plugins/dispatch/skills/dispatch-page/template/planner.html +59 -0
- package/payload/platform/plugins/dispatch/skills/dispatch-page/template/planner.js +343 -0
- package/payload/platform/plugins/dispatch/skills/dispatch-setup/SKILL.md +9 -4
- package/payload/platform/plugins/docs/references/channel-wake-and-prompt.md +11 -20
- package/payload/platform/plugins/docs/references/dispatch.md +94 -15
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/dispatch-vertical-coverage.test.js +4 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/dispatch-vertical-coverage.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/relationship-patterns.test.js +24 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/relationship-patterns.test.js.map +1 -1
- package/payload/platform/plugins/memory/references/schema-dispatch.md +70 -4
- package/payload/platform/plugins/scheduling/mcp/dist/lib/time-format.d.ts +2 -35
- package/payload/platform/plugins/scheduling/mcp/dist/lib/time-format.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/time-format.js +6 -114
- package/payload/platform/plugins/scheduling/mcp/dist/lib/time-format.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/converge-startdate-utc.d.ts +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/converge-startdate-utc.js +3 -3
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/converge-startdate-utc.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js +2 -2
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.js +3 -3
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/blocked-tool-census.d.ts +40 -6
- package/payload/platform/services/claude-session-manager/dist/blocked-tool-census.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/blocked-tool-census.js +116 -15
- package/payload/platform/services/claude-session-manager/dist/blocked-tool-census.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +6 -0
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
- package/payload/platform/services/telegram-channel/dist/notification.d.ts +0 -12
- package/payload/platform/services/telegram-channel/dist/notification.d.ts.map +1 -1
- package/payload/platform/services/telegram-channel/dist/notification.js +8 -29
- package/payload/platform/services/telegram-channel/dist/notification.js.map +1 -1
- package/payload/platform/services/telegram-channel/dist/server.d.ts.map +1 -1
- package/payload/platform/services/telegram-channel/dist/server.js +8 -11
- package/payload/platform/services/telegram-channel/dist/server.js.map +1 -1
- package/payload/server/public/activity.html +7 -7
- package/payload/server/public/agents.html +6 -6
- package/payload/server/public/assets/{AdminLoginScreens-Dp6k1XgD.js → AdminLoginScreens-BLGZEaKU.js} +1 -1
- package/payload/server/public/assets/AdminLoginScreens-BLGZEaKU.js.br +0 -0
- package/payload/server/public/assets/AdminLoginScreens-BLGZEaKU.js.gz +0 -0
- package/payload/server/public/assets/AdminShell-C_M7YE5Z.js +3 -0
- package/payload/server/public/assets/AdminShell-C_M7YE5Z.js.br +0 -0
- package/payload/server/public/assets/AdminShell-C_M7YE5Z.js.gz +0 -0
- package/payload/server/public/assets/{activity-BJxhblz-.js → activity-BL6qbB9a.js} +1 -1
- package/payload/server/public/assets/activity-BL6qbB9a.js.br +0 -0
- package/payload/server/public/assets/activity-BL6qbB9a.js.gz +0 -0
- package/payload/server/public/assets/admin-jnJ3P2u4.js +1 -0
- package/payload/server/public/assets/admin-jnJ3P2u4.js.br +0 -0
- package/payload/server/public/assets/admin-jnJ3P2u4.js.gz +0 -0
- package/payload/server/public/assets/{agents-DTL8kjfD.js → agents-BzhfKZDN.js} +1 -1
- package/payload/server/public/assets/agents-BzhfKZDN.js.br +0 -0
- package/payload/server/public/assets/agents-BzhfKZDN.js.gz +0 -0
- package/payload/server/public/assets/{arc-CWXBKNZd.js → arc-Bge2fWf4.js} +1 -1
- package/payload/server/public/assets/arc-Bge2fWf4.js.br +0 -0
- package/payload/server/public/assets/arc-Bge2fWf4.js.gz +0 -0
- package/payload/server/public/assets/architecture-YZFGNWBL-B9jqFTbw.js +1 -0
- package/payload/server/public/assets/architecture-YZFGNWBL-B9jqFTbw.js.br +0 -0
- package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-C-KPMyG4.js → architectureDiagram-Q4EWVU46-BRauf5b8.js} +1 -1
- package/payload/server/public/assets/architectureDiagram-Q4EWVU46-BRauf5b8.js.br +0 -0
- package/payload/server/public/assets/architectureDiagram-Q4EWVU46-BRauf5b8.js.gz +0 -0
- package/payload/server/public/assets/{blockDiagram-DXYQGD6D-DkYbV9Sf.js → blockDiagram-DXYQGD6D-CUJ554WZ.js} +1 -1
- package/payload/server/public/assets/blockDiagram-DXYQGD6D-CUJ554WZ.js.br +0 -0
- package/payload/server/public/assets/blockDiagram-DXYQGD6D-CUJ554WZ.js.gz +0 -0
- package/payload/server/public/assets/{browser-UZp75zhx.js → browser-C-6io2B9.js} +1 -1
- package/payload/server/public/assets/browser-C-6io2B9.js.br +0 -0
- package/payload/server/public/assets/browser-C-6io2B9.js.gz +0 -0
- package/payload/server/public/assets/{c4Diagram-AHTNJAMY-EYW4kdlx.js → c4Diagram-AHTNJAMY-CV9gKsKo.js} +1 -1
- package/payload/server/public/assets/c4Diagram-AHTNJAMY-CV9gKsKo.js.br +0 -0
- package/payload/server/public/assets/{c4Diagram-AHTNJAMY-EYW4kdlx.js.gz → c4Diagram-AHTNJAMY-CV9gKsKo.js.gz} +0 -0
- package/payload/server/public/assets/{calendar-Dfo0O2K_.js → calendar-Dt3gS88s.js} +1 -1
- package/payload/server/public/assets/calendar-Dt3gS88s.js.br +0 -0
- package/payload/server/public/assets/calendar-Dt3gS88s.js.gz +0 -0
- package/payload/server/public/assets/channel-DUwJcjZw.js +1 -0
- package/payload/server/public/assets/channel-DUwJcjZw.js.br +0 -0
- package/payload/server/public/assets/chat-IUOvVkL-.js +1 -0
- package/payload/server/public/assets/chat-IUOvVkL-.js.br +1 -0
- package/payload/server/public/assets/chat-IUOvVkL-.js.gz +0 -0
- package/payload/server/public/assets/chevron-left-DSzR9zR7.js +1 -0
- package/payload/server/public/assets/chevron-left-DSzR9zR7.js.br +0 -0
- package/payload/server/public/assets/{chunk-2KRD3SAO-CmAF1UmH.js → chunk-2KRD3SAO-HzWGrran.js} +1 -1
- package/payload/server/public/assets/chunk-2KRD3SAO-HzWGrran.js.br +0 -0
- package/payload/server/public/assets/chunk-2KRD3SAO-HzWGrran.js.gz +0 -0
- package/payload/server/public/assets/{chunk-336JU56O-CyhmJeMM.js → chunk-336JU56O-ChGDYu_S.js} +2 -2
- package/payload/server/public/assets/chunk-336JU56O-ChGDYu_S.js.br +0 -0
- package/payload/server/public/assets/chunk-336JU56O-ChGDYu_S.js.gz +0 -0
- package/payload/server/public/assets/chunk-426QAEUC-DLLi1nAr.js +1 -0
- package/payload/server/public/assets/chunk-426QAEUC-DLLi1nAr.js.br +0 -0
- package/payload/server/public/assets/chunk-426QAEUC-DLLi1nAr.js.gz +0 -0
- package/payload/server/public/assets/{chunk-4BX2VUAB-DCzC40-Y.js → chunk-4BX2VUAB-BJunAy2u.js} +1 -1
- package/payload/server/public/assets/chunk-4BX2VUAB-BJunAy2u.js.br +0 -0
- package/payload/server/public/assets/chunk-4BX2VUAB-BJunAy2u.js.gz +0 -0
- package/payload/server/public/assets/{chunk-4TB4RGXK-D9BXrSA_.js → chunk-4TB4RGXK-Df9Ew0fN.js} +1 -1
- package/payload/server/public/assets/chunk-4TB4RGXK-Df9Ew0fN.js.br +0 -0
- package/payload/server/public/assets/chunk-4TB4RGXK-Df9Ew0fN.js.gz +0 -0
- package/payload/server/public/assets/{chunk-55IACEB6-BwXC-qTZ.js → chunk-55IACEB6-DtquCg7p.js} +1 -1
- package/payload/server/public/assets/chunk-55IACEB6-DtquCg7p.js.br +0 -0
- package/payload/server/public/assets/chunk-55IACEB6-DtquCg7p.js.gz +0 -0
- package/payload/server/public/assets/{chunk-5FUZZQ4R-De7QtXxM.js → chunk-5FUZZQ4R-B3s1YuQa.js} +1 -1
- package/payload/server/public/assets/chunk-5FUZZQ4R-B3s1YuQa.js.br +0 -0
- package/payload/server/public/assets/chunk-5FUZZQ4R-B3s1YuQa.js.gz +0 -0
- package/payload/server/public/assets/{chunk-5PVQY5BW-B5tsJiCq.js → chunk-5PVQY5BW-C0bRnMKQ.js} +1 -1
- package/payload/server/public/assets/chunk-5PVQY5BW-C0bRnMKQ.js.br +0 -0
- package/payload/server/public/assets/chunk-5PVQY5BW-C0bRnMKQ.js.gz +0 -0
- package/payload/server/public/assets/{chunk-67CJDMHE-BjTh9STV.js → chunk-67CJDMHE-B9jxnEpu.js} +1 -1
- package/payload/server/public/assets/chunk-67CJDMHE-B9jxnEpu.js.br +0 -0
- package/payload/server/public/assets/chunk-67CJDMHE-B9jxnEpu.js.gz +0 -0
- package/payload/server/public/assets/{chunk-7N4EOEYR-91klRswn.js → chunk-7N4EOEYR-DaimaIlO.js} +1 -1
- package/payload/server/public/assets/chunk-7N4EOEYR-DaimaIlO.js.br +0 -0
- package/payload/server/public/assets/chunk-7N4EOEYR-DaimaIlO.js.gz +0 -0
- package/payload/server/public/assets/{chunk-AA7GKIK3-XFPGEoBu.js → chunk-AA7GKIK3-htgz4y5z.js} +1 -1
- package/payload/server/public/assets/chunk-AA7GKIK3-htgz4y5z.js.br +0 -0
- package/payload/server/public/assets/chunk-AA7GKIK3-htgz4y5z.js.gz +0 -0
- package/payload/server/public/assets/{chunk-BSJP7CBP-B7wgMyWq.js → chunk-BSJP7CBP-0xBlnKJN.js} +1 -1
- package/payload/server/public/assets/chunk-BSJP7CBP-0xBlnKJN.js.br +0 -0
- package/payload/server/public/assets/chunk-BSJP7CBP-0xBlnKJN.js.gz +0 -0
- package/payload/server/public/assets/{chunk-CIAEETIT-WPy9vcOo.js → chunk-CIAEETIT-HZOrcAzJ.js} +1 -1
- package/payload/server/public/assets/chunk-CIAEETIT-HZOrcAzJ.js.br +0 -0
- package/payload/server/public/assets/chunk-CIAEETIT-HZOrcAzJ.js.gz +0 -0
- package/payload/server/public/assets/{chunk-EDXVE4YY-D_2JIFFG.js → chunk-EDXVE4YY-CC8hCcuU.js} +1 -1
- package/payload/server/public/assets/chunk-EDXVE4YY-CC8hCcuU.js.br +0 -0
- package/payload/server/public/assets/chunk-EDXVE4YY-CC8hCcuU.js.gz +0 -0
- package/payload/server/public/assets/{chunk-ENJZ2VHE-xORReRt0.js → chunk-ENJZ2VHE-BdPfdZYB.js} +1 -1
- package/payload/server/public/assets/chunk-ENJZ2VHE-BdPfdZYB.js.br +0 -0
- package/payload/server/public/assets/chunk-ENJZ2VHE-BdPfdZYB.js.gz +0 -0
- package/payload/server/public/assets/{chunk-FMBD7UC4-BZsDu4nl.js → chunk-FMBD7UC4-MHdn_KgF.js} +1 -1
- package/payload/server/public/assets/chunk-FMBD7UC4-MHdn_KgF.js.br +0 -0
- package/payload/server/public/assets/chunk-FMBD7UC4-MHdn_KgF.js.gz +0 -0
- package/payload/server/public/assets/{chunk-FOC6F5B3-QzUp8wXX.js → chunk-FOC6F5B3-Ti8BlQKX.js} +1 -1
- package/payload/server/public/assets/chunk-FOC6F5B3-Ti8BlQKX.js.br +0 -0
- package/payload/server/public/assets/chunk-FOC6F5B3-Ti8BlQKX.js.gz +0 -0
- package/payload/server/public/assets/{chunk-ICPOFSXX-B64S7i7x.js → chunk-ICPOFSXX-BP8A8zb1.js} +2 -2
- package/payload/server/public/assets/chunk-ICPOFSXX-BP8A8zb1.js.br +0 -0
- package/payload/server/public/assets/chunk-ICPOFSXX-BP8A8zb1.js.gz +0 -0
- package/payload/server/public/assets/{chunk-K5T4RW27-DzPc6X1_.js → chunk-K5T4RW27-F30EnSBL.js} +1 -1
- package/payload/server/public/assets/chunk-K5T4RW27-F30EnSBL.js.br +0 -0
- package/payload/server/public/assets/chunk-K5T4RW27-F30EnSBL.js.gz +0 -0
- package/payload/server/public/assets/{chunk-KGLVRYIC-A2rPnD7k.js → chunk-KGLVRYIC-DNSEkg2Q.js} +1 -1
- package/payload/server/public/assets/chunk-KGLVRYIC-DNSEkg2Q.js.br +2 -0
- package/payload/server/public/assets/chunk-KGLVRYIC-DNSEkg2Q.js.gz +0 -0
- package/payload/server/public/assets/{chunk-LIHQZDEY-CaWX327m.js → chunk-LIHQZDEY-DM7b0dec.js} +1 -1
- package/payload/server/public/assets/chunk-LIHQZDEY-DM7b0dec.js.br +0 -0
- package/payload/server/public/assets/chunk-LIHQZDEY-DM7b0dec.js.gz +0 -0
- package/payload/server/public/assets/{chunk-ORNJ4GCN-zrWhdmnc.js → chunk-ORNJ4GCN-B0qoI_vp.js} +1 -1
- package/payload/server/public/assets/chunk-ORNJ4GCN-B0qoI_vp.js.br +0 -0
- package/payload/server/public/assets/chunk-ORNJ4GCN-B0qoI_vp.js.gz +0 -0
- package/payload/server/public/assets/{chunk-OYMX7WX6-B_2qQir6.js → chunk-OYMX7WX6-Bfzo53eI.js} +1 -1
- package/payload/server/public/assets/chunk-OYMX7WX6-Bfzo53eI.js.br +0 -0
- package/payload/server/public/assets/chunk-OYMX7WX6-Bfzo53eI.js.gz +0 -0
- package/payload/server/public/assets/chunk-QZHKN3VN-A6b8ZN9i.js +1 -0
- package/payload/server/public/assets/chunk-QZHKN3VN-A6b8ZN9i.js.br +0 -0
- package/payload/server/public/assets/chunk-QZHKN3VN-A6b8ZN9i.js.gz +0 -0
- package/payload/server/public/assets/{chunk-U2HBQHQK-B-IYgxsc.js → chunk-U2HBQHQK-DcqGPXEy.js} +1 -1
- package/payload/server/public/assets/chunk-U2HBQHQK-DcqGPXEy.js.br +0 -0
- package/payload/server/public/assets/chunk-U2HBQHQK-DcqGPXEy.js.gz +0 -0
- package/payload/server/public/assets/{chunk-X2U36JSP-Y9Y1_EuG.js → chunk-X2U36JSP-DtRi7n5Z.js} +1 -1
- package/payload/server/public/assets/chunk-X2U36JSP-DtRi7n5Z.js.br +0 -0
- package/payload/server/public/assets/chunk-X2U36JSP-DtRi7n5Z.js.gz +0 -0
- package/payload/server/public/assets/{chunk-XPW4576I-C-6yETG_.js → chunk-XPW4576I-DmuDCcY3.js} +1 -1
- package/payload/server/public/assets/chunk-XPW4576I-DmuDCcY3.js.br +0 -0
- package/payload/server/public/assets/chunk-XPW4576I-DmuDCcY3.js.gz +0 -0
- package/payload/server/public/assets/{chunk-YZCP3GAM-KAuQIU5n.js → chunk-YZCP3GAM-oKk9Gv_e.js} +1 -1
- package/payload/server/public/assets/chunk-YZCP3GAM-oKk9Gv_e.js.br +0 -0
- package/payload/server/public/assets/chunk-YZCP3GAM-oKk9Gv_e.js.gz +0 -0
- package/payload/server/public/assets/{chunk-ZZ45TVLE-BJcH3KDH.js → chunk-ZZ45TVLE-teET41Yh.js} +1 -1
- package/payload/server/public/assets/chunk-ZZ45TVLE-teET41Yh.js.br +0 -0
- package/payload/server/public/assets/chunk-ZZ45TVLE-teET41Yh.js.gz +0 -0
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-CMXajSzA.js +1 -0
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-CMXajSzA.js.br +0 -0
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-CMXajSzA.js.gz +0 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-Cz5Kib2r.js +1 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-Cz5Kib2r.js.br +0 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-Cz5Kib2r.js.gz +0 -0
- package/payload/server/public/assets/clock-C5xE5p2I.js +1 -0
- package/payload/server/public/assets/clock-C5xE5p2I.js.br +0 -0
- package/payload/server/public/assets/clone-BORhq8On.js +1 -0
- package/payload/server/public/assets/clone-BORhq8On.js.br +0 -0
- package/payload/server/public/assets/{copy-CGI2jioK.js → copy-TkPJgllS.js} +1 -1
- package/payload/server/public/assets/copy-TkPJgllS.js.br +0 -0
- package/payload/server/public/assets/copy-TkPJgllS.js.gz +0 -0
- package/payload/server/public/assets/{cose-bilkent-S5V4N54A-CcXj8vHa.js → cose-bilkent-S5V4N54A-D1xLpHGm.js} +1 -1
- package/payload/server/public/assets/cose-bilkent-S5V4N54A-D1xLpHGm.js.br +0 -0
- package/payload/server/public/assets/cose-bilkent-S5V4N54A-D1xLpHGm.js.gz +0 -0
- package/payload/server/public/assets/{dagre-KV5264BT-BOhQs4rS.js → dagre-KV5264BT-Byl65NKT.js} +1 -1
- package/payload/server/public/assets/dagre-KV5264BT-Byl65NKT.js.br +0 -0
- package/payload/server/public/assets/dagre-KV5264BT-Byl65NKT.js.gz +0 -0
- package/payload/server/public/assets/{dagre-DOtq9kYX.js → dagre-ZzXkSDir.js} +1 -1
- package/payload/server/public/assets/dagre-ZzXkSDir.js.br +0 -0
- package/payload/server/public/assets/dagre-ZzXkSDir.js.gz +0 -0
- package/payload/server/public/assets/data-Bhv0Pvfl.js +1 -0
- package/payload/server/public/assets/data-Bhv0Pvfl.js.br +0 -0
- package/payload/server/public/assets/data-Bhv0Pvfl.js.gz +0 -0
- package/payload/server/public/assets/{diagram-5BDNPKRD-CqJFt5ZM.js → diagram-5BDNPKRD-BFNkV5GK.js} +1 -1
- package/payload/server/public/assets/diagram-5BDNPKRD-BFNkV5GK.js.br +0 -0
- package/payload/server/public/assets/diagram-5BDNPKRD-BFNkV5GK.js.gz +0 -0
- package/payload/server/public/assets/{diagram-G4DWMVQ6-WQIyAZMn.js → diagram-G4DWMVQ6-1n6vHXzR.js} +1 -1
- package/payload/server/public/assets/diagram-G4DWMVQ6-1n6vHXzR.js.br +0 -0
- package/payload/server/public/assets/diagram-G4DWMVQ6-1n6vHXzR.js.gz +0 -0
- package/payload/server/public/assets/{diagram-MMDJMWI5-jcKc4a2w.js → diagram-MMDJMWI5-D4QOzaw0.js} +1 -1
- package/payload/server/public/assets/diagram-MMDJMWI5-D4QOzaw0.js.br +0 -0
- package/payload/server/public/assets/diagram-MMDJMWI5-D4QOzaw0.js.gz +0 -0
- package/payload/server/public/assets/{diagram-TYMM5635-Bbt2KuWe.js → diagram-TYMM5635-z8lBRsaV.js} +1 -1
- package/payload/server/public/assets/diagram-TYMM5635-z8lBRsaV.js.br +0 -0
- package/payload/server/public/assets/diagram-TYMM5635-z8lBRsaV.js.gz +0 -0
- package/payload/server/public/assets/{dist-9RiN6lky.js → dist-DjYA4E4S.js} +1 -1
- package/payload/server/public/assets/dist-DjYA4E4S.js.br +0 -0
- package/payload/server/public/assets/dist-DjYA4E4S.js.gz +0 -0
- package/payload/server/public/assets/{erDiagram-SMLLAGMA-BBm6azPJ.js → erDiagram-SMLLAGMA-CXj3tbtX.js} +1 -1
- package/payload/server/public/assets/erDiagram-SMLLAGMA-CXj3tbtX.js.br +0 -0
- package/payload/server/public/assets/erDiagram-SMLLAGMA-CXj3tbtX.js.gz +0 -0
- package/payload/server/public/assets/field-B490-evJ.js +1 -0
- package/payload/server/public/assets/field-B490-evJ.js.br +0 -0
- package/payload/server/public/assets/field-B490-evJ.js.gz +0 -0
- package/payload/server/public/assets/{file-text-RWintp9q.js → file-text-DyAL2DCh.js} +1 -1
- package/payload/server/public/assets/file-text-DyAL2DCh.js.br +0 -0
- package/payload/server/public/assets/file-text-DyAL2DCh.js.gz +0 -0
- package/payload/server/public/assets/{flatten-BurGKeIy.js → flatten-UdUTbm8v.js} +1 -1
- package/payload/server/public/assets/flatten-UdUTbm8v.js.br +0 -0
- package/payload/server/public/assets/flatten-UdUTbm8v.js.gz +0 -0
- package/payload/server/public/assets/{flowDiagram-DWJPFMVM-_r45DYJ8.js → flowDiagram-DWJPFMVM-DnySI-I4.js} +1 -1
- package/payload/server/public/assets/flowDiagram-DWJPFMVM-DnySI-I4.js.br +0 -0
- package/payload/server/public/assets/flowDiagram-DWJPFMVM-DnySI-I4.js.gz +0 -0
- package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-Bjgj9Bej.js → ganttDiagram-T4ZO3ILL-BIE2Q78F.js} +1 -1
- package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-BIE2Q78F.js.br +0 -0
- package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-BIE2Q78F.js.gz +0 -0
- package/payload/server/public/assets/gitGraph-7Q5UKJZL-Ua2z-DNt.js +1 -0
- package/payload/server/public/assets/gitGraph-7Q5UKJZL-Ua2z-DNt.js.br +0 -0
- package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-DTRdhGJA.js → gitGraphDiagram-UUTBAWPF-B2RTRpyG.js} +1 -1
- package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-B2RTRpyG.js.br +0 -0
- package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-B2RTRpyG.js.gz +0 -0
- package/payload/server/public/assets/{graph-CpBlfYrJ.js → graph-PiNIcCfX.js} +1 -1
- package/payload/server/public/assets/graph-PiNIcCfX.js.br +0 -0
- package/payload/server/public/assets/graph-PiNIcCfX.js.gz +0 -0
- package/payload/server/public/assets/{graph-labels-BOMyPppX.js → graph-labels-8jKFrLHn.js} +1 -1
- package/payload/server/public/assets/graph-labels-8jKFrLHn.js.br +0 -0
- package/payload/server/public/assets/graph-labels-8jKFrLHn.js.gz +0 -0
- package/payload/server/public/assets/{graphlib-DT4h6-4N.js → graphlib-SOh92ucm.js} +1 -1
- package/payload/server/public/assets/graphlib-SOh92ucm.js.br +0 -0
- package/payload/server/public/assets/graphlib-SOh92ucm.js.gz +0 -0
- package/payload/server/public/assets/info-OMHHGYJF-CNYp42iX.js +1 -0
- package/payload/server/public/assets/info-OMHHGYJF-CNYp42iX.js.br +0 -0
- package/payload/server/public/assets/infoDiagram-42DDH7IO-DklHffYr.js +2 -0
- package/payload/server/public/assets/infoDiagram-42DDH7IO-DklHffYr.js.br +0 -0
- package/payload/server/public/assets/infoDiagram-42DDH7IO-DklHffYr.js.gz +0 -0
- package/payload/server/public/assets/{isEmpty-C5v0-EY7.js → isEmpty-DY_Xp9Na.js} +1 -1
- package/payload/server/public/assets/isEmpty-DY_Xp9Na.js.br +0 -0
- package/payload/server/public/assets/isEmpty-DY_Xp9Na.js.gz +0 -0
- package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-BklHzVHm.js → ishikawaDiagram-UXIWVN3A-KAC06i3M.js} +1 -1
- package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-KAC06i3M.js.br +0 -0
- package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-KAC06i3M.js.gz +0 -0
- package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-Ckxx2CmV.js → journeyDiagram-VCZTEJTY-cA37ob8S.js} +1 -1
- package/payload/server/public/assets/journeyDiagram-VCZTEJTY-cA37ob8S.js.br +0 -0
- package/payload/server/public/assets/journeyDiagram-VCZTEJTY-cA37ob8S.js.gz +0 -0
- package/payload/server/public/assets/{jsx-runtime-DxsQ5Y-z.css → jsx-runtime-ChVh0xOm.css} +1 -1
- package/payload/server/public/assets/jsx-runtime-ChVh0xOm.css.br +0 -0
- package/payload/server/public/assets/{jsx-runtime-DxsQ5Y-z.css.gz → jsx-runtime-ChVh0xOm.css.gz} +0 -0
- package/payload/server/public/assets/{jsx-runtime-5lmxFBIw.js → jsx-runtime-YcUntiud.js} +1 -1
- package/payload/server/public/assets/jsx-runtime-YcUntiud.js.br +0 -0
- package/payload/server/public/assets/jsx-runtime-YcUntiud.js.gz +0 -0
- package/payload/server/public/assets/{kanban-definition-6JOO6SKY-BLELXpqn.js → kanban-definition-6JOO6SKY-CBjL70wU.js} +1 -1
- package/payload/server/public/assets/kanban-definition-6JOO6SKY-CBjL70wU.js.br +0 -0
- package/payload/server/public/assets/kanban-definition-6JOO6SKY-CBjL70wU.js.gz +0 -0
- package/payload/server/public/assets/{line-BkI5icOY.js → line-K8229GLG.js} +1 -1
- package/payload/server/public/assets/line-K8229GLG.js.br +0 -0
- package/payload/server/public/assets/line-K8229GLG.js.gz +0 -0
- package/payload/server/public/assets/{linear-B64ANRVs.js → linear-DeX7Wdt6.js} +1 -1
- package/payload/server/public/assets/linear-DeX7Wdt6.js.br +0 -0
- package/payload/server/public/assets/linear-DeX7Wdt6.js.gz +0 -0
- package/payload/server/public/assets/{mermaid-parser.core-qXPKkdJe.js → mermaid-parser.core-OnNOAzPX.js} +2 -2
- package/payload/server/public/assets/mermaid-parser.core-OnNOAzPX.js.br +0 -0
- package/payload/server/public/assets/mermaid-parser.core-OnNOAzPX.js.gz +0 -0
- package/payload/server/public/assets/{mermaid.core-BMsz65Wy.js → mermaid.core-DA-Gezeo.js} +3 -3
- package/payload/server/public/assets/mermaid.core-DA-Gezeo.js.br +0 -0
- package/payload/server/public/assets/mermaid.core-DA-Gezeo.js.gz +0 -0
- package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-DhFTS2sx.js → mindmap-definition-QFDTVHPH-C24TcDyS.js} +1 -1
- package/payload/server/public/assets/mindmap-definition-QFDTVHPH-C24TcDyS.js.br +0 -0
- package/payload/server/public/assets/mindmap-definition-QFDTVHPH-C24TcDyS.js.gz +0 -0
- package/payload/server/public/assets/operator-DKGKGzrb.js +1 -0
- package/payload/server/public/assets/operator-DKGKGzrb.js.br +0 -0
- package/payload/server/public/assets/operator-DKGKGzrb.js.gz +0 -0
- package/payload/server/public/assets/{ordinal-CJ_pL32Z.js → ordinal-gnpqfIHn.js} +1 -1
- package/payload/server/public/assets/ordinal-gnpqfIHn.js.br +0 -0
- package/payload/server/public/assets/ordinal-gnpqfIHn.js.gz +0 -0
- package/payload/server/public/assets/packet-4T2RLAQJ-B3ZAElsg.js +1 -0
- package/payload/server/public/assets/packet-4T2RLAQJ-B3ZAElsg.js.br +0 -0
- package/payload/server/public/assets/{page-BRShHSH0.js → page-BU5vlY9Y.js} +1 -1
- package/payload/server/public/assets/page-BU5vlY9Y.js.br +0 -0
- package/payload/server/public/assets/page-BU5vlY9Y.js.gz +0 -0
- package/payload/server/public/assets/{page-BbBCu9iP.js → page-DXz_K10G.js} +3 -3
- package/payload/server/public/assets/page-DXz_K10G.js.br +0 -0
- package/payload/server/public/assets/page-DXz_K10G.js.gz +0 -0
- package/payload/server/public/assets/{pdf-render-ynIPXfRA.js → pdf-render-B5af7vu1.js} +1 -1
- package/payload/server/public/assets/pdf-render-B5af7vu1.js.br +0 -0
- package/payload/server/public/assets/pdf-render-B5af7vu1.js.gz +0 -0
- package/payload/server/public/assets/pie-ZZUOXDRM-BWsRCj8p.js +1 -0
- package/payload/server/public/assets/pie-ZZUOXDRM-BWsRCj8p.js.br +0 -0
- package/payload/server/public/assets/{pieDiagram-DEJITSTG-B2TxkbHK.js → pieDiagram-DEJITSTG-ChS9jalQ.js} +1 -1
- package/payload/server/public/assets/pieDiagram-DEJITSTG-ChS9jalQ.js.br +0 -0
- package/payload/server/public/assets/pieDiagram-DEJITSTG-ChS9jalQ.js.gz +0 -0
- package/payload/server/public/assets/play-CmSyYrB6.js +1 -0
- package/payload/server/public/assets/play-CmSyYrB6.js.br +0 -0
- package/payload/server/public/assets/play-CmSyYrB6.js.gz +0 -0
- package/payload/server/public/assets/{public-DkObqkzL.js → public-BmA3-jLj.js} +1 -1
- package/payload/server/public/assets/public-BmA3-jLj.js.br +0 -0
- package/payload/server/public/assets/public-BmA3-jLj.js.gz +0 -0
- package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-GsMxIJuS.js → quadrantDiagram-34T5L4WZ-BxLfRK0z.js} +1 -1
- package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-BxLfRK0z.js.br +0 -0
- package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-BxLfRK0z.js.gz +0 -0
- package/payload/server/public/assets/radar-PYXPWWZC-Gxbt2rGT.js +1 -0
- package/payload/server/public/assets/radar-PYXPWWZC-Gxbt2rGT.js.br +0 -0
- package/payload/server/public/assets/{reduce-CfkEiHc9.js → reduce-BvezuHIe.js} +1 -1
- package/payload/server/public/assets/reduce-BvezuHIe.js.br +0 -0
- package/payload/server/public/assets/reduce-BvezuHIe.js.gz +0 -0
- package/payload/server/public/assets/{requirementDiagram-MS252O5E-DqNprm-1.js → requirementDiagram-MS252O5E-CWy48VI3.js} +1 -1
- package/payload/server/public/assets/requirementDiagram-MS252O5E-CWy48VI3.js.br +0 -0
- package/payload/server/public/assets/requirementDiagram-MS252O5E-CWy48VI3.js.gz +0 -0
- package/payload/server/public/assets/{rotate-ccw-DgMO69nh.js → rotate-ccw-fCH0LSMq.js} +1 -1
- package/payload/server/public/assets/rotate-ccw-fCH0LSMq.js.br +0 -0
- package/payload/server/public/assets/rotate-ccw-fCH0LSMq.js.gz +0 -0
- package/payload/server/public/assets/{routines-D9kvg_Xu.js → routines-BeFrmkls.js} +1 -1
- package/payload/server/public/assets/routines-BeFrmkls.js.br +0 -0
- package/payload/server/public/assets/routines-BeFrmkls.js.gz +0 -0
- package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-B-kRuiuz.js → sankeyDiagram-XADWPNL6-BBCLEJA3.js} +1 -1
- package/payload/server/public/assets/sankeyDiagram-XADWPNL6-BBCLEJA3.js.br +0 -0
- package/payload/server/public/assets/sankeyDiagram-XADWPNL6-BBCLEJA3.js.gz +0 -0
- package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-DEhL9g3K.js → sequenceDiagram-FGHM5R23-wu64F04G.js} +1 -1
- package/payload/server/public/assets/sequenceDiagram-FGHM5R23-wu64F04G.js.br +0 -0
- package/payload/server/public/assets/sequenceDiagram-FGHM5R23-wu64F04G.js.gz +0 -0
- package/payload/server/public/assets/{skills-l5I9HZ3D.js → skills-mjls5HBa.js} +1 -1
- package/payload/server/public/assets/skills-mjls5HBa.js.br +0 -0
- package/payload/server/public/assets/skills-mjls5HBa.js.gz +0 -0
- package/payload/server/public/assets/{src-BrAT6wKv.js → src-BvINb2fL.js} +1 -1
- package/payload/server/public/assets/src-BvINb2fL.js.br +0 -0
- package/payload/server/public/assets/src-BvINb2fL.js.gz +0 -0
- package/payload/server/public/assets/{stateDiagram-FHFEXIEX-Q-g6BHdz.js → stateDiagram-FHFEXIEX-Bq6BFFDC.js} +1 -1
- package/payload/server/public/assets/stateDiagram-FHFEXIEX-Bq6BFFDC.js.br +0 -0
- package/payload/server/public/assets/stateDiagram-FHFEXIEX-Bq6BFFDC.js.gz +0 -0
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-PxPsWt1r.js +1 -0
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-PxPsWt1r.js.br +0 -0
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-PxPsWt1r.js.gz +0 -0
- package/payload/server/public/assets/{tasks-C2qJMv6i.js → tasks-p6puHHD0.js} +1 -1
- package/payload/server/public/assets/tasks-p6puHHD0.js.br +0 -0
- package/payload/server/public/assets/tasks-p6puHHD0.js.gz +0 -0
- package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-B3-52q4Q.js → timeline-definition-GMOUNBTQ-DTdvVZp-.js} +1 -1
- package/payload/server/public/assets/timeline-definition-GMOUNBTQ-DTdvVZp-.js.br +0 -0
- package/payload/server/public/assets/timeline-definition-GMOUNBTQ-DTdvVZp-.js.gz +0 -0
- package/payload/server/public/assets/treeView-SZITEDCU-Bl-aPmE3.js +1 -0
- package/payload/server/public/assets/treeView-SZITEDCU-Bl-aPmE3.js.br +0 -0
- package/payload/server/public/assets/treemap-W4RFUUIX-CUxE8Ofg.js +1 -0
- package/payload/server/public/assets/treemap-W4RFUUIX-CUxE8Ofg.js.br +0 -0
- package/payload/server/public/assets/{triangle-alert-BnC67uSs.js → triangle-alert-CrZ1ewbd.js} +1 -1
- package/payload/server/public/assets/triangle-alert-CrZ1ewbd.js.br +0 -0
- package/payload/server/public/assets/triangle-alert-CrZ1ewbd.js.gz +0 -0
- package/payload/server/public/assets/{useCopyFeedback-1RmgkTFh.js → useCopyFeedback-zOQNrIwd.js} +1 -1
- package/payload/server/public/assets/useCopyFeedback-zOQNrIwd.js.br +0 -0
- package/payload/server/public/assets/useCopyFeedback-zOQNrIwd.js.gz +0 -0
- package/payload/server/public/assets/{useMediaQuery-BQslddHQ.js → useMediaQuery-BmG090FR.js} +1 -1
- package/payload/server/public/assets/useMediaQuery-BmG090FR.js.br +0 -0
- package/payload/server/public/assets/useMediaQuery-BmG090FR.js.gz +0 -0
- package/payload/server/public/assets/{useVoiceRecorder-BeZNQEC4.js → useVoiceRecorder-9pf6FFJ-.js} +2 -2
- package/payload/server/public/assets/useVoiceRecorder-9pf6FFJ-.js.br +0 -0
- package/payload/server/public/assets/useVoiceRecorder-9pf6FFJ-.js.gz +0 -0
- package/payload/server/public/assets/{vennDiagram-DHZGUBPP-Bzm1VDi1.js → vennDiagram-DHZGUBPP-CigqIBdl.js} +1 -1
- package/payload/server/public/assets/vennDiagram-DHZGUBPP-CigqIBdl.js.br +0 -0
- package/payload/server/public/assets/vennDiagram-DHZGUBPP-CigqIBdl.js.gz +0 -0
- package/payload/server/public/assets/wardley-RL74JXVD-DPB13D22.js +1 -0
- package/payload/server/public/assets/wardley-RL74JXVD-DPB13D22.js.br +0 -0
- package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-DIqGZr4v.js → wardleyDiagram-NUSXRM2D-VhV1plUD.js} +1 -1
- package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-VhV1plUD.js.br +0 -0
- package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-VhV1plUD.js.gz +0 -0
- package/payload/server/public/assets/{wrench-D4ufQG6C.js → wrench-k4GYG5rc.js} +1 -1
- package/payload/server/public/assets/wrench-k4GYG5rc.js.br +0 -0
- package/payload/server/public/assets/wrench-k4GYG5rc.js.gz +0 -0
- package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-0W2L2hQA.js → xychartDiagram-5P7HB3ND-DGkkNLZt.js} +1 -1
- package/payload/server/public/assets/xychartDiagram-5P7HB3ND-DGkkNLZt.js.br +0 -0
- package/payload/server/public/assets/xychartDiagram-5P7HB3ND-DGkkNLZt.js.gz +0 -0
- package/payload/server/public/browser.html +6 -6
- package/payload/server/public/calendar.html +9 -9
- package/payload/server/public/chat.html +16 -16
- package/payload/server/public/data.html +15 -15
- package/payload/server/public/field.html +4 -4
- package/payload/server/public/graph.html +11 -11
- package/payload/server/public/index.html +17 -17
- package/payload/server/public/operator.html +17 -17
- package/payload/server/public/public.html +16 -16
- package/payload/server/public/routines.html +10 -10
- package/payload/server/public/skills.html +7 -7
- package/payload/server/public/tasks.html +8 -8
- package/payload/server/server.js +2930 -2125
- package/payload/platform/lib/dispatch-read/src/config.d.ts +0 -26
- package/payload/platform/lib/dispatch-read/src/types.d.ts +0 -143
- package/payload/server/public/assets/AdminLoginScreens-Dp6k1XgD.js.br +0 -0
- package/payload/server/public/assets/AdminLoginScreens-Dp6k1XgD.js.gz +0 -0
- package/payload/server/public/assets/AdminShell-D-wB90c3.js +0 -3
- package/payload/server/public/assets/AdminShell-D-wB90c3.js.br +0 -0
- package/payload/server/public/assets/AdminShell-D-wB90c3.js.gz +0 -0
- package/payload/server/public/assets/activity-BJxhblz-.js.br +0 -0
- package/payload/server/public/assets/activity-BJxhblz-.js.gz +0 -0
- package/payload/server/public/assets/admin-DzEi8shs.js +0 -1
- package/payload/server/public/assets/admin-DzEi8shs.js.br +0 -0
- package/payload/server/public/assets/admin-DzEi8shs.js.gz +0 -0
- package/payload/server/public/assets/agents-DTL8kjfD.js.br +0 -0
- package/payload/server/public/assets/agents-DTL8kjfD.js.gz +0 -0
- package/payload/server/public/assets/arc-CWXBKNZd.js.br +0 -0
- package/payload/server/public/assets/arc-CWXBKNZd.js.gz +0 -0
- package/payload/server/public/assets/architecture-YZFGNWBL-CIL4I0fc.js +0 -1
- package/payload/server/public/assets/architecture-YZFGNWBL-CIL4I0fc.js.br +0 -0
- package/payload/server/public/assets/architectureDiagram-Q4EWVU46-C-KPMyG4.js.br +0 -0
- package/payload/server/public/assets/architectureDiagram-Q4EWVU46-C-KPMyG4.js.gz +0 -0
- package/payload/server/public/assets/blockDiagram-DXYQGD6D-DkYbV9Sf.js.br +0 -0
- package/payload/server/public/assets/blockDiagram-DXYQGD6D-DkYbV9Sf.js.gz +0 -0
- package/payload/server/public/assets/browser-UZp75zhx.js.br +0 -0
- package/payload/server/public/assets/browser-UZp75zhx.js.gz +0 -0
- package/payload/server/public/assets/c4Diagram-AHTNJAMY-EYW4kdlx.js.br +0 -0
- package/payload/server/public/assets/calendar-Dfo0O2K_.js.br +0 -0
- package/payload/server/public/assets/calendar-Dfo0O2K_.js.gz +0 -0
- package/payload/server/public/assets/channel-CbHmRjy_.js +0 -1
- package/payload/server/public/assets/channel-CbHmRjy_.js.br +0 -0
- package/payload/server/public/assets/chat-ByJAvEWZ.js +0 -1
- package/payload/server/public/assets/chat-ByJAvEWZ.js.br +0 -0
- package/payload/server/public/assets/chat-ByJAvEWZ.js.gz +0 -0
- package/payload/server/public/assets/chevron-left-iG7sYNm7.js +0 -1
- package/payload/server/public/assets/chevron-left-iG7sYNm7.js.br +0 -0
- package/payload/server/public/assets/chunk-2KRD3SAO-CmAF1UmH.js.br +0 -0
- package/payload/server/public/assets/chunk-2KRD3SAO-CmAF1UmH.js.gz +0 -0
- package/payload/server/public/assets/chunk-336JU56O-CyhmJeMM.js.br +0 -0
- package/payload/server/public/assets/chunk-336JU56O-CyhmJeMM.js.gz +0 -0
- package/payload/server/public/assets/chunk-426QAEUC-C2tnHCM7.js +0 -1
- package/payload/server/public/assets/chunk-426QAEUC-C2tnHCM7.js.br +0 -0
- package/payload/server/public/assets/chunk-426QAEUC-C2tnHCM7.js.gz +0 -0
- package/payload/server/public/assets/chunk-4BX2VUAB-DCzC40-Y.js.br +0 -0
- package/payload/server/public/assets/chunk-4BX2VUAB-DCzC40-Y.js.gz +0 -0
- package/payload/server/public/assets/chunk-4TB4RGXK-D9BXrSA_.js.br +0 -0
- package/payload/server/public/assets/chunk-4TB4RGXK-D9BXrSA_.js.gz +0 -0
- package/payload/server/public/assets/chunk-55IACEB6-BwXC-qTZ.js.br +0 -0
- package/payload/server/public/assets/chunk-55IACEB6-BwXC-qTZ.js.gz +0 -0
- package/payload/server/public/assets/chunk-5FUZZQ4R-De7QtXxM.js.br +0 -0
- package/payload/server/public/assets/chunk-5FUZZQ4R-De7QtXxM.js.gz +0 -0
- package/payload/server/public/assets/chunk-5PVQY5BW-B5tsJiCq.js.br +0 -0
- package/payload/server/public/assets/chunk-5PVQY5BW-B5tsJiCq.js.gz +0 -0
- package/payload/server/public/assets/chunk-67CJDMHE-BjTh9STV.js.br +0 -0
- package/payload/server/public/assets/chunk-67CJDMHE-BjTh9STV.js.gz +0 -0
- package/payload/server/public/assets/chunk-7N4EOEYR-91klRswn.js.br +0 -0
- package/payload/server/public/assets/chunk-7N4EOEYR-91klRswn.js.gz +0 -0
- package/payload/server/public/assets/chunk-AA7GKIK3-XFPGEoBu.js.br +0 -3
- package/payload/server/public/assets/chunk-AA7GKIK3-XFPGEoBu.js.gz +0 -0
- package/payload/server/public/assets/chunk-BSJP7CBP-B7wgMyWq.js.br +0 -0
- package/payload/server/public/assets/chunk-BSJP7CBP-B7wgMyWq.js.gz +0 -0
- package/payload/server/public/assets/chunk-CIAEETIT-WPy9vcOo.js.br +0 -0
- package/payload/server/public/assets/chunk-CIAEETIT-WPy9vcOo.js.gz +0 -0
- package/payload/server/public/assets/chunk-EDXVE4YY-D_2JIFFG.js.br +0 -0
- package/payload/server/public/assets/chunk-EDXVE4YY-D_2JIFFG.js.gz +0 -0
- package/payload/server/public/assets/chunk-ENJZ2VHE-xORReRt0.js.br +0 -0
- package/payload/server/public/assets/chunk-ENJZ2VHE-xORReRt0.js.gz +0 -0
- package/payload/server/public/assets/chunk-FMBD7UC4-BZsDu4nl.js.br +0 -0
- package/payload/server/public/assets/chunk-FMBD7UC4-BZsDu4nl.js.gz +0 -0
- package/payload/server/public/assets/chunk-FOC6F5B3-QzUp8wXX.js.br +0 -0
- package/payload/server/public/assets/chunk-FOC6F5B3-QzUp8wXX.js.gz +0 -0
- package/payload/server/public/assets/chunk-ICPOFSXX-B64S7i7x.js.br +0 -0
- package/payload/server/public/assets/chunk-ICPOFSXX-B64S7i7x.js.gz +0 -0
- package/payload/server/public/assets/chunk-K5T4RW27-DzPc6X1_.js.br +0 -0
- package/payload/server/public/assets/chunk-K5T4RW27-DzPc6X1_.js.gz +0 -0
- package/payload/server/public/assets/chunk-KGLVRYIC-A2rPnD7k.js.br +0 -1
- package/payload/server/public/assets/chunk-KGLVRYIC-A2rPnD7k.js.gz +0 -0
- package/payload/server/public/assets/chunk-LIHQZDEY-CaWX327m.js.br +0 -0
- package/payload/server/public/assets/chunk-LIHQZDEY-CaWX327m.js.gz +0 -0
- package/payload/server/public/assets/chunk-ORNJ4GCN-zrWhdmnc.js.br +0 -0
- package/payload/server/public/assets/chunk-ORNJ4GCN-zrWhdmnc.js.gz +0 -0
- package/payload/server/public/assets/chunk-OYMX7WX6-B_2qQir6.js.br +0 -0
- package/payload/server/public/assets/chunk-OYMX7WX6-B_2qQir6.js.gz +0 -0
- package/payload/server/public/assets/chunk-QZHKN3VN-BzgrgCTo.js +0 -1
- package/payload/server/public/assets/chunk-QZHKN3VN-BzgrgCTo.js.br +0 -0
- package/payload/server/public/assets/chunk-QZHKN3VN-BzgrgCTo.js.gz +0 -0
- package/payload/server/public/assets/chunk-U2HBQHQK-B-IYgxsc.js.br +0 -0
- package/payload/server/public/assets/chunk-U2HBQHQK-B-IYgxsc.js.gz +0 -0
- package/payload/server/public/assets/chunk-X2U36JSP-Y9Y1_EuG.js.br +0 -0
- package/payload/server/public/assets/chunk-X2U36JSP-Y9Y1_EuG.js.gz +0 -0
- package/payload/server/public/assets/chunk-XPW4576I-C-6yETG_.js.br +0 -0
- package/payload/server/public/assets/chunk-XPW4576I-C-6yETG_.js.gz +0 -0
- package/payload/server/public/assets/chunk-YZCP3GAM-KAuQIU5n.js.br +0 -0
- package/payload/server/public/assets/chunk-YZCP3GAM-KAuQIU5n.js.gz +0 -0
- package/payload/server/public/assets/chunk-ZZ45TVLE-BJcH3KDH.js.br +0 -0
- package/payload/server/public/assets/chunk-ZZ45TVLE-BJcH3KDH.js.gz +0 -0
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-BxvqeBEj.js +0 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-BxvqeBEj.js.br +0 -0
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-BxvqeBEj.js.gz +0 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-R3-NzMRG.js +0 -1
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-R3-NzMRG.js.br +0 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-R3-NzMRG.js.gz +0 -0
- package/payload/server/public/assets/clock-xSs0UF10.js +0 -1
- package/payload/server/public/assets/clock-xSs0UF10.js.br +0 -0
- package/payload/server/public/assets/clock-xSs0UF10.js.gz +0 -0
- package/payload/server/public/assets/clone-QdOE5SXR.js +0 -1
- package/payload/server/public/assets/copy-CGI2jioK.js.br +0 -0
- package/payload/server/public/assets/copy-CGI2jioK.js.gz +0 -0
- package/payload/server/public/assets/cose-bilkent-S5V4N54A-CcXj8vHa.js.br +0 -0
- package/payload/server/public/assets/cose-bilkent-S5V4N54A-CcXj8vHa.js.gz +0 -0
- package/payload/server/public/assets/dagre-DOtq9kYX.js.br +0 -0
- package/payload/server/public/assets/dagre-DOtq9kYX.js.gz +0 -0
- package/payload/server/public/assets/dagre-KV5264BT-BOhQs4rS.js.br +0 -0
- package/payload/server/public/assets/dagre-KV5264BT-BOhQs4rS.js.gz +0 -0
- package/payload/server/public/assets/data-dvwK4BcP.js +0 -1
- package/payload/server/public/assets/data-dvwK4BcP.js.br +0 -0
- package/payload/server/public/assets/data-dvwK4BcP.js.gz +0 -0
- package/payload/server/public/assets/diagram-5BDNPKRD-CqJFt5ZM.js.br +0 -0
- package/payload/server/public/assets/diagram-5BDNPKRD-CqJFt5ZM.js.gz +0 -0
- package/payload/server/public/assets/diagram-G4DWMVQ6-WQIyAZMn.js.br +0 -0
- package/payload/server/public/assets/diagram-G4DWMVQ6-WQIyAZMn.js.gz +0 -0
- package/payload/server/public/assets/diagram-MMDJMWI5-jcKc4a2w.js.br +0 -0
- package/payload/server/public/assets/diagram-MMDJMWI5-jcKc4a2w.js.gz +0 -0
- package/payload/server/public/assets/diagram-TYMM5635-Bbt2KuWe.js.br +0 -0
- package/payload/server/public/assets/diagram-TYMM5635-Bbt2KuWe.js.gz +0 -0
- package/payload/server/public/assets/dispatch-Dx9-ty1K.js +0 -1
- package/payload/server/public/assets/dispatch-Dx9-ty1K.js.br +0 -0
- package/payload/server/public/assets/dispatch-Dx9-ty1K.js.gz +0 -0
- package/payload/server/public/assets/dist-9RiN6lky.js.br +0 -0
- package/payload/server/public/assets/dist-9RiN6lky.js.gz +0 -0
- package/payload/server/public/assets/erDiagram-SMLLAGMA-BBm6azPJ.js.br +0 -0
- package/payload/server/public/assets/erDiagram-SMLLAGMA-BBm6azPJ.js.gz +0 -0
- package/payload/server/public/assets/field-D-P6CsWA.js +0 -1
- package/payload/server/public/assets/field-D-P6CsWA.js.br +0 -0
- package/payload/server/public/assets/field-D-P6CsWA.js.gz +0 -0
- package/payload/server/public/assets/file-text-RWintp9q.js.br +0 -0
- package/payload/server/public/assets/file-text-RWintp9q.js.gz +0 -0
- package/payload/server/public/assets/flatten-BurGKeIy.js.br +0 -0
- package/payload/server/public/assets/flatten-BurGKeIy.js.gz +0 -0
- package/payload/server/public/assets/flowDiagram-DWJPFMVM-_r45DYJ8.js.br +0 -0
- package/payload/server/public/assets/flowDiagram-DWJPFMVM-_r45DYJ8.js.gz +0 -0
- package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-Bjgj9Bej.js.br +0 -0
- package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-Bjgj9Bej.js.gz +0 -0
- package/payload/server/public/assets/gitGraph-7Q5UKJZL-DdbK59od.js +0 -1
- package/payload/server/public/assets/gitGraph-7Q5UKJZL-DdbK59od.js.br +0 -0
- package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-DTRdhGJA.js.br +0 -0
- package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-DTRdhGJA.js.gz +0 -0
- package/payload/server/public/assets/graph-CpBlfYrJ.js.br +0 -0
- package/payload/server/public/assets/graph-CpBlfYrJ.js.gz +0 -0
- package/payload/server/public/assets/graph-labels-BOMyPppX.js.br +0 -0
- package/payload/server/public/assets/graph-labels-BOMyPppX.js.gz +0 -0
- package/payload/server/public/assets/graphlib-DT4h6-4N.js.br +0 -0
- package/payload/server/public/assets/graphlib-DT4h6-4N.js.gz +0 -0
- package/payload/server/public/assets/info-OMHHGYJF-BR8gm0wj.js +0 -1
- package/payload/server/public/assets/info-OMHHGYJF-BR8gm0wj.js.br +0 -0
- package/payload/server/public/assets/infoDiagram-42DDH7IO-Cr3Efss6.js +0 -2
- package/payload/server/public/assets/infoDiagram-42DDH7IO-Cr3Efss6.js.br +0 -0
- package/payload/server/public/assets/infoDiagram-42DDH7IO-Cr3Efss6.js.gz +0 -0
- package/payload/server/public/assets/isEmpty-C5v0-EY7.js.br +0 -0
- package/payload/server/public/assets/isEmpty-C5v0-EY7.js.gz +0 -0
- package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-BklHzVHm.js.br +0 -0
- package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-BklHzVHm.js.gz +0 -0
- package/payload/server/public/assets/journeyDiagram-VCZTEJTY-Ckxx2CmV.js.br +0 -0
- package/payload/server/public/assets/journeyDiagram-VCZTEJTY-Ckxx2CmV.js.gz +0 -0
- package/payload/server/public/assets/jsx-runtime-5lmxFBIw.js.br +0 -0
- package/payload/server/public/assets/jsx-runtime-5lmxFBIw.js.gz +0 -0
- package/payload/server/public/assets/jsx-runtime-DxsQ5Y-z.css.br +0 -0
- package/payload/server/public/assets/kanban-definition-6JOO6SKY-BLELXpqn.js.br +0 -0
- package/payload/server/public/assets/kanban-definition-6JOO6SKY-BLELXpqn.js.gz +0 -0
- package/payload/server/public/assets/line-BkI5icOY.js.br +0 -0
- package/payload/server/public/assets/line-BkI5icOY.js.gz +0 -0
- package/payload/server/public/assets/linear-B64ANRVs.js.br +0 -0
- package/payload/server/public/assets/linear-B64ANRVs.js.gz +0 -0
- package/payload/server/public/assets/mermaid-parser.core-qXPKkdJe.js.br +0 -0
- package/payload/server/public/assets/mermaid-parser.core-qXPKkdJe.js.gz +0 -0
- package/payload/server/public/assets/mermaid.core-BMsz65Wy.js.br +0 -0
- package/payload/server/public/assets/mermaid.core-BMsz65Wy.js.gz +0 -0
- package/payload/server/public/assets/mindmap-definition-QFDTVHPH-DhFTS2sx.js.br +0 -0
- package/payload/server/public/assets/mindmap-definition-QFDTVHPH-DhFTS2sx.js.gz +0 -0
- package/payload/server/public/assets/operator-DFgW6GiH.js +0 -1
- package/payload/server/public/assets/operator-DFgW6GiH.js.br +0 -0
- package/payload/server/public/assets/operator-DFgW6GiH.js.gz +0 -0
- package/payload/server/public/assets/ordinal-CJ_pL32Z.js.br +0 -0
- package/payload/server/public/assets/ordinal-CJ_pL32Z.js.gz +0 -0
- package/payload/server/public/assets/packet-4T2RLAQJ-B31PbAeA.js +0 -1
- package/payload/server/public/assets/packet-4T2RLAQJ-B31PbAeA.js.br +0 -0
- package/payload/server/public/assets/page-BRShHSH0.js.br +0 -0
- package/payload/server/public/assets/page-BRShHSH0.js.gz +0 -0
- package/payload/server/public/assets/page-BbBCu9iP.js.br +0 -0
- package/payload/server/public/assets/page-BbBCu9iP.js.gz +0 -0
- package/payload/server/public/assets/pdf-render-ynIPXfRA.js.br +0 -0
- package/payload/server/public/assets/pdf-render-ynIPXfRA.js.gz +0 -0
- package/payload/server/public/assets/pie-ZZUOXDRM-BbSc1VXl.js +0 -1
- package/payload/server/public/assets/pie-ZZUOXDRM-BbSc1VXl.js.br +0 -0
- package/payload/server/public/assets/pieDiagram-DEJITSTG-B2TxkbHK.js.br +0 -0
- package/payload/server/public/assets/pieDiagram-DEJITSTG-B2TxkbHK.js.gz +0 -0
- package/payload/server/public/assets/play-BJxUaf6-.js +0 -1
- package/payload/server/public/assets/play-BJxUaf6-.js.br +0 -0
- package/payload/server/public/assets/play-BJxUaf6-.js.gz +0 -0
- package/payload/server/public/assets/public-DkObqkzL.js.br +0 -0
- package/payload/server/public/assets/public-DkObqkzL.js.gz +0 -0
- package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-GsMxIJuS.js.br +0 -0
- package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-GsMxIJuS.js.gz +0 -0
- package/payload/server/public/assets/radar-PYXPWWZC-B0La8_mZ.js +0 -1
- package/payload/server/public/assets/radar-PYXPWWZC-B0La8_mZ.js.br +0 -0
- package/payload/server/public/assets/reduce-CfkEiHc9.js.br +0 -0
- package/payload/server/public/assets/reduce-CfkEiHc9.js.gz +0 -0
- package/payload/server/public/assets/requirementDiagram-MS252O5E-DqNprm-1.js.br +0 -0
- package/payload/server/public/assets/requirementDiagram-MS252O5E-DqNprm-1.js.gz +0 -0
- package/payload/server/public/assets/rotate-ccw-DgMO69nh.js.br +0 -0
- package/payload/server/public/assets/rotate-ccw-DgMO69nh.js.gz +0 -0
- package/payload/server/public/assets/routines-D9kvg_Xu.js.br +0 -0
- package/payload/server/public/assets/routines-D9kvg_Xu.js.gz +0 -0
- package/payload/server/public/assets/sankeyDiagram-XADWPNL6-B-kRuiuz.js.br +0 -0
- package/payload/server/public/assets/sankeyDiagram-XADWPNL6-B-kRuiuz.js.gz +0 -0
- package/payload/server/public/assets/sequenceDiagram-FGHM5R23-DEhL9g3K.js.br +0 -0
- package/payload/server/public/assets/sequenceDiagram-FGHM5R23-DEhL9g3K.js.gz +0 -0
- package/payload/server/public/assets/skills-l5I9HZ3D.js.br +0 -0
- package/payload/server/public/assets/skills-l5I9HZ3D.js.gz +0 -0
- package/payload/server/public/assets/src-BrAT6wKv.js.br +0 -0
- package/payload/server/public/assets/src-BrAT6wKv.js.gz +0 -0
- package/payload/server/public/assets/stateDiagram-FHFEXIEX-Q-g6BHdz.js.br +0 -0
- package/payload/server/public/assets/stateDiagram-FHFEXIEX-Q-g6BHdz.js.gz +0 -0
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-ssRWItVj.js +0 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-ssRWItVj.js.br +0 -0
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-ssRWItVj.js.gz +0 -0
- package/payload/server/public/assets/tasks-C2qJMv6i.js.br +0 -0
- package/payload/server/public/assets/tasks-C2qJMv6i.js.gz +0 -0
- package/payload/server/public/assets/timeline-definition-GMOUNBTQ-B3-52q4Q.js.br +0 -0
- package/payload/server/public/assets/timeline-definition-GMOUNBTQ-B3-52q4Q.js.gz +0 -0
- package/payload/server/public/assets/treeView-SZITEDCU-BBR3hu9P.js +0 -1
- package/payload/server/public/assets/treeView-SZITEDCU-BBR3hu9P.js.br +0 -0
- package/payload/server/public/assets/treemap-W4RFUUIX-wSQMuzBT.js +0 -1
- package/payload/server/public/assets/treemap-W4RFUUIX-wSQMuzBT.js.br +0 -0
- package/payload/server/public/assets/triangle-alert-BnC67uSs.js.br +0 -0
- package/payload/server/public/assets/triangle-alert-BnC67uSs.js.gz +0 -0
- package/payload/server/public/assets/useCopyFeedback-1RmgkTFh.js.br +0 -0
- package/payload/server/public/assets/useCopyFeedback-1RmgkTFh.js.gz +0 -0
- package/payload/server/public/assets/useMediaQuery-BQslddHQ.js.br +0 -0
- package/payload/server/public/assets/useMediaQuery-BQslddHQ.js.gz +0 -0
- package/payload/server/public/assets/useVoiceRecorder-BeZNQEC4.js.br +0 -0
- package/payload/server/public/assets/useVoiceRecorder-BeZNQEC4.js.gz +0 -0
- package/payload/server/public/assets/vennDiagram-DHZGUBPP-Bzm1VDi1.js.br +0 -0
- package/payload/server/public/assets/vennDiagram-DHZGUBPP-Bzm1VDi1.js.gz +0 -0
- package/payload/server/public/assets/wardley-RL74JXVD-3QaECtQN.js +0 -1
- package/payload/server/public/assets/wardley-RL74JXVD-3QaECtQN.js.br +0 -0
- package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-DIqGZr4v.js.br +0 -0
- package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-DIqGZr4v.js.gz +0 -0
- package/payload/server/public/assets/wrench-D4ufQG6C.js.br +0 -0
- package/payload/server/public/assets/wrench-D4ufQG6C.js.gz +0 -0
- package/payload/server/public/assets/xychartDiagram-5P7HB3ND-0W2L2hQA.js.br +0 -0
- package/payload/server/public/assets/xychartDiagram-5P7HB3ND-0W2L2hQA.js.gz +0 -0
- package/payload/server/public/dispatch.html +0 -20
- /package/payload/server/public/assets/{_baseFor-D1duyODO.js → _baseFor-BApe6Tla.js} +0 -0
- /package/payload/server/public/assets/{_baseFor-D1duyODO.js.br → _baseFor-BApe6Tla.js.br} +0 -0
- /package/payload/server/public/assets/{_baseFor-D1duyODO.js.gz → _baseFor-BApe6Tla.js.gz} +0 -0
- /package/payload/server/public/assets/{array-j7Xa9Fap.js → array-eiH4WfvY.js} +0 -0
- /package/payload/server/public/assets/{array-j7Xa9Fap.js.br → array-eiH4WfvY.js.br} +0 -0
- /package/payload/server/public/assets/{chunk-DlZTsV_O.js → chunk-BycB0eMI.js} +0 -0
- /package/payload/server/public/assets/{chunk-DlZTsV_O.js.br → chunk-BycB0eMI.js.br} +0 -0
- /package/payload/server/public/assets/{chunk-DlZTsV_O.js.gz → chunk-BycB0eMI.js.gz} +0 -0
- /package/payload/server/public/assets/{cytoscape.esm-Dob3eilA.js → cytoscape.esm-BZ6NYo0w.js} +0 -0
- /package/payload/server/public/assets/{cytoscape.esm-Dob3eilA.js.br → cytoscape.esm-BZ6NYo0w.js.br} +0 -0
- /package/payload/server/public/assets/{cytoscape.esm-Dob3eilA.js.gz → cytoscape.esm-BZ6NYo0w.js.gz} +0 -0
- /package/payload/server/public/assets/{defaultLocale-BNILPWh2.js → defaultLocale-DWHqsa6O.js} +0 -0
- /package/payload/server/public/assets/{defaultLocale-BNILPWh2.js.br → defaultLocale-DWHqsa6O.js.br} +0 -0
- /package/payload/server/public/assets/{defaultLocale-BNILPWh2.js.gz → defaultLocale-DWHqsa6O.js.gz} +0 -0
- /package/payload/server/public/assets/{file-download-CN4H4Eih.js → file-download-B7zwa78w.js} +0 -0
- /package/payload/server/public/assets/{file-download-CN4H4Eih.js.br → file-download-B7zwa78w.js.br} +0 -0
- /package/payload/server/public/assets/{file-download-CN4H4Eih.js.gz → file-download-B7zwa78w.js.gz} +0 -0
- /package/payload/server/public/assets/{init-ve51bpJo.js → init-BdkYWjJJ.js} +0 -0
- /package/payload/server/public/assets/{init-ve51bpJo.js.br → init-BdkYWjJJ.js.br} +0 -0
- /package/payload/server/public/assets/{init-ve51bpJo.js.gz → init-BdkYWjJJ.js.gz} +0 -0
- /package/payload/server/public/assets/{katex-CJNaolDQ.js → katex-BCzoGtFh.js} +0 -0
- /package/payload/server/public/assets/{katex-CJNaolDQ.js.br → katex-BCzoGtFh.js.br} +0 -0
- /package/payload/server/public/assets/{katex-CJNaolDQ.js.gz → katex-BCzoGtFh.js.gz} +0 -0
- /package/payload/server/public/assets/{path-B4emajHp.js → path-DY2qBuPM.js} +0 -0
- /package/payload/server/public/assets/{path-B4emajHp.js.br → path-DY2qBuPM.js.br} +0 -0
- /package/payload/server/public/assets/{path-B4emajHp.js.gz → path-DY2qBuPM.js.gz} +0 -0
- /package/payload/server/public/assets/{preload-helper-3YNEDsJZ.js → preload-helper-eAV8hweq.js} +0 -0
- /package/payload/server/public/assets/{preload-helper-3YNEDsJZ.js.br → preload-helper-eAV8hweq.js.br} +0 -0
- /package/payload/server/public/assets/{preload-helper-3YNEDsJZ.js.gz → preload-helper-eAV8hweq.js.gz} +0 -0
- /package/payload/server/public/assets/{rough.esm-zabqYs6f.js → rough.esm-ec8xsRC7.js} +0 -0
- /package/payload/server/public/assets/{rough.esm-zabqYs6f.js.br → rough.esm-ec8xsRC7.js.br} +0 -0
- /package/payload/server/public/assets/{rough.esm-zabqYs6f.js.gz → rough.esm-ec8xsRC7.js.gz} +0 -0
package/dist/index.js
CHANGED
|
@@ -3419,6 +3419,20 @@ function setupAccount() {
|
|
|
3419
3419
|
env: { ...neo4jEnv, PLATFORM_ROOT: join(INSTALL_DIR, "platform") },
|
|
3420
3420
|
});
|
|
3421
3421
|
}
|
|
3422
|
+
// Task 2513 — converge :Visit.startDate and :Visit.endDate onto canonical
|
|
3423
|
+
// UTC. The planner window compares startDate to Z-suffixed bounds LEXICALLY,
|
|
3424
|
+
// so a row storing a +01:00 offset lands in the wrong day under BST. Runs
|
|
3425
|
+
// after the seed for the same reasons the two convergences above do, and is
|
|
3426
|
+
// scoped to this install's accounts so a co-resident brand sharing one Neo4j
|
|
3427
|
+
// is untouched. Idempotent: a converged install rewrites nothing and prints
|
|
3428
|
+
// op=start-migration rewritten=0.
|
|
3429
|
+
const convergeVisitInstants = join(INSTALL_DIR, "platform/plugins/dispatch/mcp/dist/scripts/converge-visit-instants.js");
|
|
3430
|
+
if (existsSync(convergeVisitInstants)) {
|
|
3431
|
+
shell("node", [convergeVisitInstants], {
|
|
3432
|
+
cwd: INSTALL_DIR,
|
|
3433
|
+
env: { ...neo4jEnv, PLATFORM_ROOT: join(INSTALL_DIR, "platform") },
|
|
3434
|
+
});
|
|
3435
|
+
}
|
|
3422
3436
|
// Task 2460 — clear the brand-wide agent root this step used to write.
|
|
3423
3437
|
// Every bundled specialist now reaches a session through the per-account
|
|
3424
3438
|
// registry that `syncAccountAgentRegistry` mirrors at spawn from
|
package/package.json
CHANGED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The single definition of a canonical stored instant.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from `plugins/scheduling/mcp/src/lib/time-format.ts` by Task 2513,
|
|
5
|
+
* unchanged, so the dispatch writer, the dispatch migration and the two
|
|
6
|
+
* scheduling writers cannot disagree about what canonical means. Task 2213
|
|
7
|
+
* stated the invariant as "One function, three callers, no drift possible"; a
|
|
8
|
+
* second copy in the dispatch tree would have broken it.
|
|
9
|
+
*
|
|
10
|
+
* Pure. No database, no driver, no plugin import.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Validates an IANA timezone string. Throws with a clear message if invalid.
|
|
14
|
+
*/
|
|
15
|
+
export declare function validateTimezone(tz: string): void;
|
|
16
|
+
/**
|
|
17
|
+
* The exact 24-character shape `toISOString()` produces, as a regex source.
|
|
18
|
+
*
|
|
19
|
+
* Exported as a string rather than a `RegExp` because it is also passed to
|
|
20
|
+
* Cypher as a `=~` parameter. One source, so the standing audit's predicate and
|
|
21
|
+
* this module's predicate cannot drift; passing it as a parameter also removes
|
|
22
|
+
* the backslash-escaping ambiguity of an inlined Cypher literal.
|
|
23
|
+
*/
|
|
24
|
+
export declare const CANONICAL_INSTANT_PATTERN = "\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z";
|
|
25
|
+
/**
|
|
26
|
+
* Task 2213, generalised by Task 2513 — the single definition of a canonical
|
|
27
|
+
* stored instant.
|
|
28
|
+
*
|
|
29
|
+
* Stored instants are compared as STRINGS, lexically, in Cypher: the scheduling
|
|
30
|
+
* dispatcher on `e.startDate <= $now`, and the dispatch planner on
|
|
31
|
+
* `v.startDate >= $from AND v.startDate < $to`. An offset suffix is never
|
|
32
|
+
* parsed, so a `+01:00` value sorts by its wall-clock digits — 60 minutes out
|
|
33
|
+
* under BST, and correct under GMT, which is why the defect self-heals every
|
|
34
|
+
* October and returns every March.
|
|
35
|
+
*
|
|
36
|
+
* The output is therefore always the exact 24-character shape `toISOString()`
|
|
37
|
+
* produces. The fixed width is the point: lexical order equals instant order
|
|
38
|
+
* only when every stored value shares one shape. That is also why this is not
|
|
39
|
+
* done in Cypher — `toString(datetime(...))` omits `.000` at a zero-millisecond
|
|
40
|
+
* instant, and `"…00.000Z"` sorts BEFORE `"…00Z"`.
|
|
41
|
+
*
|
|
42
|
+
* A zoneless wall clock is read in `zone`, never in the server's zone: a
|
|
43
|
+
* server-local reading makes the stored instant depend on which machine wrote
|
|
44
|
+
* it, which is the same fault class one layer down. With no usable zone this
|
|
45
|
+
* throws rather than guessing.
|
|
46
|
+
*
|
|
47
|
+
* DST is resolved the way `Temporal`'s `disambiguation: 'compatible'` resolves
|
|
48
|
+
* it. Take the offsets in force a day either side, giving two candidate
|
|
49
|
+
* instants; keep those that render back to exactly the input wall clock. If any
|
|
50
|
+
* survive, take the earliest (the earlier occurrence of an ambiguous autumn
|
|
51
|
+
* time). If none survive, the wall clock is inside a spring-forward gap and does
|
|
52
|
+
* not exist, so take the later candidate, which shifts it past the gap.
|
|
53
|
+
*/
|
|
54
|
+
export declare function normaliseInstant(raw: string, zone: string | null): string;
|
|
55
|
+
/** True when `value` is already in the canonical form above. */
|
|
56
|
+
export declare function isCanonicalInstant(value: string): boolean;
|
|
57
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAYjD;AA6CD;;;;;;;GAOG;AACH,eAAO,MAAM,yBAAyB,wDAAwD,CAAC;AAE/F;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CA8BzE;AAED,gEAAgE;AAChE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEzD"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* The single definition of a canonical stored instant.
|
|
4
|
+
*
|
|
5
|
+
* Extracted from `plugins/scheduling/mcp/src/lib/time-format.ts` by Task 2513,
|
|
6
|
+
* unchanged, so the dispatch writer, the dispatch migration and the two
|
|
7
|
+
* scheduling writers cannot disagree about what canonical means. Task 2213
|
|
8
|
+
* stated the invariant as "One function, three callers, no drift possible"; a
|
|
9
|
+
* second copy in the dispatch tree would have broken it.
|
|
10
|
+
*
|
|
11
|
+
* Pure. No database, no driver, no plugin import.
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.CANONICAL_INSTANT_PATTERN = void 0;
|
|
15
|
+
exports.validateTimezone = validateTimezone;
|
|
16
|
+
exports.normaliseInstant = normaliseInstant;
|
|
17
|
+
exports.isCanonicalInstant = isCanonicalInstant;
|
|
18
|
+
/**
|
|
19
|
+
* Validates an IANA timezone string. Throws with a clear message if invalid.
|
|
20
|
+
*/
|
|
21
|
+
function validateTimezone(tz) {
|
|
22
|
+
if (!tz || tz.trim().length === 0) {
|
|
23
|
+
throw new Error("Timezone is required but was empty");
|
|
24
|
+
}
|
|
25
|
+
try {
|
|
26
|
+
// Intl.DateTimeFormat throws RangeError for invalid IANA timezone identifiers
|
|
27
|
+
new Intl.DateTimeFormat("en-GB", { timeZone: tz });
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
throw new Error(`Invalid timezone: "${tz}" — expected IANA format like "Europe/London" or "America/New_York"`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/** Ends with `Z` or a numeric UTC offset, e.g. `+01:00`, `-0500`. */
|
|
34
|
+
const HAS_ZONE = /(?:Z|[+-]\d{2}:?\d{2})$/;
|
|
35
|
+
/** The zone's wall-clock parts at a given instant. */
|
|
36
|
+
function partsAt(ms, zone) {
|
|
37
|
+
const dtf = new Intl.DateTimeFormat("en-GB", {
|
|
38
|
+
timeZone: zone,
|
|
39
|
+
hour12: false,
|
|
40
|
+
year: "numeric",
|
|
41
|
+
month: "2-digit",
|
|
42
|
+
day: "2-digit",
|
|
43
|
+
hour: "2-digit",
|
|
44
|
+
minute: "2-digit",
|
|
45
|
+
second: "2-digit",
|
|
46
|
+
});
|
|
47
|
+
return Object.fromEntries(dtf.formatToParts(new Date(ms)).map((p) => [p.type, p.value]));
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Milliseconds the zone is ahead of UTC at `ms`.
|
|
51
|
+
*
|
|
52
|
+
* Subtracted against the SECOND-truncated instant, never `ms` itself.
|
|
53
|
+
* `Intl.DateTimeFormat` resolves only to seconds, so differencing its
|
|
54
|
+
* reconstruction against a millisecond-bearing instant folds the fractional part
|
|
55
|
+
* into the offset: at `09:00:00.500` the offset came back as 3_599_500 rather
|
|
56
|
+
* than 3_600_000, and the caller's `naive - offset` then landed a full second
|
|
57
|
+
* out. A real zone offset is always a whole number of minutes, so truncating is
|
|
58
|
+
* lossless here and keeps the caller's sub-second precision intact.
|
|
59
|
+
*/
|
|
60
|
+
function offsetMsAt(ms, zone) {
|
|
61
|
+
const p = partsAt(ms, zone);
|
|
62
|
+
// `hour` renders as "24" for midnight in en-GB; % 24 folds it back to 0.
|
|
63
|
+
const wallUtc = Date.UTC(+p.year, +p.month - 1, +p.day, +p.hour % 24, +p.minute, +p.second);
|
|
64
|
+
return wallUtc - Math.floor(ms / 1000) * 1000;
|
|
65
|
+
}
|
|
66
|
+
/** The zone's wall clock at `ms`, in the same shape as a zoneless input. */
|
|
67
|
+
function wallAt(ms, zone) {
|
|
68
|
+
const p = partsAt(ms, zone);
|
|
69
|
+
const hh = String(+p.hour % 24).padStart(2, "0");
|
|
70
|
+
return `${p.year}-${p.month}-${p.day}T${hh}:${p.minute}:${p.second}`;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* The exact 24-character shape `toISOString()` produces, as a regex source.
|
|
74
|
+
*
|
|
75
|
+
* Exported as a string rather than a `RegExp` because it is also passed to
|
|
76
|
+
* Cypher as a `=~` parameter. One source, so the standing audit's predicate and
|
|
77
|
+
* this module's predicate cannot drift; passing it as a parameter also removes
|
|
78
|
+
* the backslash-escaping ambiguity of an inlined Cypher literal.
|
|
79
|
+
*/
|
|
80
|
+
exports.CANONICAL_INSTANT_PATTERN = "\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z";
|
|
81
|
+
/**
|
|
82
|
+
* Task 2213, generalised by Task 2513 — the single definition of a canonical
|
|
83
|
+
* stored instant.
|
|
84
|
+
*
|
|
85
|
+
* Stored instants are compared as STRINGS, lexically, in Cypher: the scheduling
|
|
86
|
+
* dispatcher on `e.startDate <= $now`, and the dispatch planner on
|
|
87
|
+
* `v.startDate >= $from AND v.startDate < $to`. An offset suffix is never
|
|
88
|
+
* parsed, so a `+01:00` value sorts by its wall-clock digits — 60 minutes out
|
|
89
|
+
* under BST, and correct under GMT, which is why the defect self-heals every
|
|
90
|
+
* October and returns every March.
|
|
91
|
+
*
|
|
92
|
+
* The output is therefore always the exact 24-character shape `toISOString()`
|
|
93
|
+
* produces. The fixed width is the point: lexical order equals instant order
|
|
94
|
+
* only when every stored value shares one shape. That is also why this is not
|
|
95
|
+
* done in Cypher — `toString(datetime(...))` omits `.000` at a zero-millisecond
|
|
96
|
+
* instant, and `"…00.000Z"` sorts BEFORE `"…00Z"`.
|
|
97
|
+
*
|
|
98
|
+
* A zoneless wall clock is read in `zone`, never in the server's zone: a
|
|
99
|
+
* server-local reading makes the stored instant depend on which machine wrote
|
|
100
|
+
* it, which is the same fault class one layer down. With no usable zone this
|
|
101
|
+
* throws rather than guessing.
|
|
102
|
+
*
|
|
103
|
+
* DST is resolved the way `Temporal`'s `disambiguation: 'compatible'` resolves
|
|
104
|
+
* it. Take the offsets in force a day either side, giving two candidate
|
|
105
|
+
* instants; keep those that render back to exactly the input wall clock. If any
|
|
106
|
+
* survive, take the earliest (the earlier occurrence of an ambiguous autumn
|
|
107
|
+
* time). If none survive, the wall clock is inside a spring-forward gap and does
|
|
108
|
+
* not exist, so take the later candidate, which shifts it past the gap.
|
|
109
|
+
*/
|
|
110
|
+
function normaliseInstant(raw, zone) {
|
|
111
|
+
const trimmed = raw.trim();
|
|
112
|
+
if (HAS_ZONE.test(trimmed)) {
|
|
113
|
+
const ms = Date.parse(trimmed);
|
|
114
|
+
if (Number.isNaN(ms)) {
|
|
115
|
+
throw new Error(`Unparseable instant: "${raw}" — expected an ISO 8601 date-time`);
|
|
116
|
+
}
|
|
117
|
+
return new Date(ms).toISOString();
|
|
118
|
+
}
|
|
119
|
+
if (!zone) {
|
|
120
|
+
throw new Error(`Instant "${raw}" carries no timezone offset and no timezone is available to read it in — ` +
|
|
121
|
+
`pass an IANA timezone, or write the offset into the value`);
|
|
122
|
+
}
|
|
123
|
+
validateTimezone(zone);
|
|
124
|
+
const naive = Date.parse(`${trimmed}Z`);
|
|
125
|
+
if (Number.isNaN(naive)) {
|
|
126
|
+
throw new Error(`Unparseable instant: "${raw}" — expected an ISO 8601 date-time`);
|
|
127
|
+
}
|
|
128
|
+
const DAY_MS = 86_400_000;
|
|
129
|
+
const before = naive - offsetMsAt(naive - DAY_MS, zone);
|
|
130
|
+
const after = naive - offsetMsAt(naive + DAY_MS, zone);
|
|
131
|
+
const valid = [before, after].filter((ms) => wallAt(ms, zone) === trimmed);
|
|
132
|
+
const chosen = valid.length > 0 ? Math.min(...valid) : Math.max(before, after);
|
|
133
|
+
return new Date(chosen).toISOString();
|
|
134
|
+
}
|
|
135
|
+
/** True when `value` is already in the canonical form above. */
|
|
136
|
+
function isCanonicalInstant(value) {
|
|
137
|
+
return new RegExp(`^${exports.CANONICAL_INSTANT_PATTERN}$`).test(value);
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;AAKH,4CAYC;AAoFD,4CA8BC;AAGD,gDAEC;AAtID;;GAEG;AACH,SAAgB,gBAAgB,CAAC,EAAU;IACzC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,CAAC;QACH,8EAA8E;QAC9E,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,sBAAsB,EAAE,qEAAqE,CAC9F,CAAC;IACJ,CAAC;AACH,CAAC;AAED,qEAAqE;AACrE,MAAM,QAAQ,GAAG,yBAAyB,CAAC;AAE3C,sDAAsD;AACtD,SAAS,OAAO,CAAC,EAAU,EAAE,IAAY;IACvC,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;QAC3C,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,SAAS;QAChB,GAAG,EAAE,SAAS;QACd,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3F,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,UAAU,CAAC,EAAU,EAAE,IAAY;IAC1C,MAAM,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC5B,yEAAyE;IACzE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC5F,OAAO,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;AAChD,CAAC;AAED,4EAA4E;AAC5E,SAAS,MAAM,CAAC,EAAU,EAAE,IAAY;IACtC,MAAM,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC5B,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACjD,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;AACvE,CAAC;AAED;;;;;;;GAOG;AACU,QAAA,yBAAyB,GAAG,qDAAqD,CAAC;AAE/F;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,SAAgB,gBAAgB,CAAC,GAAW,EAAE,IAAmB;IAC/D,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAE3B,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/B,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,oCAAoC,CAAC,CAAC;QACpF,CAAC;QACD,OAAO,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACpC,CAAC;IAED,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CACb,YAAY,GAAG,4EAA4E;YACzF,2DAA2D,CAC9D,CAAC;IACJ,CAAC;IACD,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAEvB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC;IACxC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,oCAAoC,CAAC,CAAC;IACpF,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,CAAC;IAC1B,MAAM,MAAM,GAAG,KAAK,GAAG,UAAU,CAAC,KAAK,GAAG,MAAM,EAAE,IAAI,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,KAAK,GAAG,UAAU,CAAC,KAAK,GAAG,MAAM,EAAE,IAAI,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,OAAO,CAAC,CAAC;IAC3E,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC/E,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;AACxC,CAAC;AAED,gEAAgE;AAChE,SAAgB,kBAAkB,CAAC,KAAa;IAC9C,OAAO,IAAI,MAAM,CAAC,IAAI,iCAAyB,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClE,CAAC"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
// Task 2213. The due predicate compares startDate lexically against
|
|
2
|
+
// new Date().toISOString(), so every stored value must share that exact shape.
|
|
3
|
+
import { describe, it, expect } from "vitest";
|
|
4
|
+
import { CANONICAL_INSTANT_PATTERN, normaliseInstant, isCanonicalInstant } from "../index.js";
|
|
5
|
+
|
|
6
|
+
describe("normaliseInstant — offset-bearing input", () => {
|
|
7
|
+
it("converts a BST offset to the equivalent UTC instant", () => {
|
|
8
|
+
expect(normaliseInstant("2026-07-30T11:45:00+01:00", "Europe/London")).toBe(
|
|
9
|
+
"2026-07-30T10:45:00.000Z"
|
|
10
|
+
);
|
|
11
|
+
});
|
|
12
|
+
it("leaves an already-canonical value byte-identical", () => {
|
|
13
|
+
expect(normaliseInstant("2026-06-28T05:00:00.000Z", "UTC")).toBe("2026-06-28T05:00:00.000Z");
|
|
14
|
+
});
|
|
15
|
+
it("adds the missing .000 to a Z value that lacks it", () => {
|
|
16
|
+
expect(normaliseInstant("2026-07-28T10:00:00Z", "UTC")).toBe("2026-07-28T10:00:00.000Z");
|
|
17
|
+
});
|
|
18
|
+
it("handles the milliseconds-plus-offset shape", () => {
|
|
19
|
+
expect(normaliseInstant("2026-08-02T19:00:00.000+01:00", "Europe/London")).toBe(
|
|
20
|
+
"2026-08-02T18:00:00.000Z"
|
|
21
|
+
);
|
|
22
|
+
});
|
|
23
|
+
it("ignores the zone argument entirely when the value carries one", () => {
|
|
24
|
+
expect(normaliseInstant("2026-07-30T11:45:00+01:00", "America/New_York")).toBe(
|
|
25
|
+
"2026-07-30T10:45:00.000Z"
|
|
26
|
+
);
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
describe("normaliseInstant — zoneless wall clock", () => {
|
|
31
|
+
it("reads a summer wall clock in the given zone", () => {
|
|
32
|
+
expect(normaliseInstant("2026-07-20T09:00:00", "Europe/London")).toBe(
|
|
33
|
+
"2026-07-20T08:00:00.000Z"
|
|
34
|
+
);
|
|
35
|
+
});
|
|
36
|
+
it("reads a winter wall clock in the given zone", () => {
|
|
37
|
+
expect(normaliseInstant("2026-01-15T09:00:00", "Europe/London")).toBe(
|
|
38
|
+
"2026-01-15T09:00:00.000Z"
|
|
39
|
+
);
|
|
40
|
+
});
|
|
41
|
+
it("reads a non-UK zone", () => {
|
|
42
|
+
expect(normaliseInstant("2026-07-20T09:00:00", "America/New_York")).toBe(
|
|
43
|
+
"2026-07-20T13:00:00.000Z"
|
|
44
|
+
);
|
|
45
|
+
});
|
|
46
|
+
it("shifts a spring-forward gap wall clock past the gap", () => {
|
|
47
|
+
// 01:30 on 29 Mar 2026 does not exist in Europe/London; 01:00 GMT -> 02:00 BST.
|
|
48
|
+
expect(normaliseInstant("2026-03-29T01:30:00", "Europe/London")).toBe(
|
|
49
|
+
"2026-03-29T01:30:00.000Z"
|
|
50
|
+
);
|
|
51
|
+
});
|
|
52
|
+
it("takes the earlier occurrence of an ambiguous autumn wall clock", () => {
|
|
53
|
+
// 01:30 on 25 Oct 2026 happens twice; the earlier one is BST at 00:30Z.
|
|
54
|
+
expect(normaliseInstant("2026-10-25T01:30:00", "Europe/London")).toBe(
|
|
55
|
+
"2026-10-25T00:30:00.000Z"
|
|
56
|
+
);
|
|
57
|
+
});
|
|
58
|
+
it("takes the earlier occurrence of an ambiguous US wall clock", () => {
|
|
59
|
+
expect(normaliseInstant("2026-11-01T01:30:00", "America/New_York")).toBe(
|
|
60
|
+
"2026-11-01T05:30:00.000Z"
|
|
61
|
+
);
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
describe("normaliseInstant — partial and sub-second precision", () => {
|
|
66
|
+
it("keeps the fractional second on a zoneless value", () => {
|
|
67
|
+
// Intl resolves only to seconds. Differencing its reconstruction against a
|
|
68
|
+
// millisecond-bearing instant used to fold the fraction into the offset and
|
|
69
|
+
// land a full second out (09:00:00.5 BST came back as 08:00:01.000Z).
|
|
70
|
+
expect(normaliseInstant("2026-07-20T09:00:00.5", "Europe/London")).toBe(
|
|
71
|
+
"2026-07-20T08:00:00.500Z"
|
|
72
|
+
);
|
|
73
|
+
expect(normaliseInstant("2026-01-15T09:00:00.123", "Europe/London")).toBe(
|
|
74
|
+
"2026-01-15T09:00:00.123Z"
|
|
75
|
+
);
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
it("reads a minute-precision value in the zone", () => {
|
|
79
|
+
expect(normaliseInstant("2026-07-20T09:00", "Europe/London")).toBe(
|
|
80
|
+
"2026-07-20T08:00:00.000Z"
|
|
81
|
+
);
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
it("reads a date-only value as midnight in the zone", () => {
|
|
85
|
+
// Midnight on 20 July in London is 23:00Z on the 19th.
|
|
86
|
+
expect(normaliseInstant("2026-07-20", "Europe/London")).toBe("2026-07-19T23:00:00.000Z");
|
|
87
|
+
expect(normaliseInstant("2026-01-15", "Europe/London")).toBe("2026-01-15T00:00:00.000Z");
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
it("accepts an offset written without a colon", () => {
|
|
91
|
+
expect(normaliseInstant("2026-07-20T09:00:00+0100", "Europe/London")).toBe(
|
|
92
|
+
"2026-07-20T08:00:00.000Z"
|
|
93
|
+
);
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
describe("normaliseInstant — refusals", () => {
|
|
98
|
+
it("throws on a zoneless value with a null zone, naming the value", () => {
|
|
99
|
+
expect(() => normaliseInstant("2026-07-20T09:00:00", null)).toThrow(/2026-07-20T09:00:00/);
|
|
100
|
+
});
|
|
101
|
+
it("throws on a zoneless value with an invalid zone", () => {
|
|
102
|
+
expect(() => normaliseInstant("2026-07-20T09:00:00", "Not/AZone")).toThrow(/Not\/AZone/);
|
|
103
|
+
});
|
|
104
|
+
it("throws on an unparseable value, naming it", () => {
|
|
105
|
+
expect(() => normaliseInstant("next tuesday", "Europe/London")).toThrow(/next tuesday/);
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
describe("normaliseInstant — server timezone independence", () => {
|
|
110
|
+
it("gives the same answer whatever the process TZ is", () => {
|
|
111
|
+
// A server-local reading (new Date("2026-07-20T09:00:00")) would differ here.
|
|
112
|
+
const before = process.env.TZ;
|
|
113
|
+
try {
|
|
114
|
+
process.env.TZ = "Asia/Tokyo";
|
|
115
|
+
expect(normaliseInstant("2026-07-20T09:00:00", "Europe/London")).toBe(
|
|
116
|
+
"2026-07-20T08:00:00.000Z"
|
|
117
|
+
);
|
|
118
|
+
process.env.TZ = "America/Los_Angeles";
|
|
119
|
+
expect(normaliseInstant("2026-07-20T09:00:00", "Europe/London")).toBe(
|
|
120
|
+
"2026-07-20T08:00:00.000Z"
|
|
121
|
+
);
|
|
122
|
+
} finally {
|
|
123
|
+
process.env.TZ = before;
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
describe("isCanonicalInstant", () => {
|
|
129
|
+
it("accepts only the full 24-character shape", () => {
|
|
130
|
+
expect(isCanonicalInstant("2026-07-30T10:45:00.000Z")).toBe(true);
|
|
131
|
+
// Right instant, wrong shape: "…00.000Z" sorts BEFORE "…00Z", so a mixed
|
|
132
|
+
// corpus breaks the ordering the whole fix restores.
|
|
133
|
+
expect(isCanonicalInstant("2026-07-30T10:45:00Z")).toBe(false);
|
|
134
|
+
expect(isCanonicalInstant("2026-07-30T11:45:00+01:00")).toBe(false);
|
|
135
|
+
expect(isCanonicalInstant("2026-07-20T09:00:00")).toBe(false);
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
describe("CANONICAL_INSTANT_PATTERN", () => {
|
|
140
|
+
// The pattern is also handed to Cypher as a `=~` parameter. 2213's review
|
|
141
|
+
// found its audit regex was never executed by any test, the session being
|
|
142
|
+
// mocked. This executes the exact exported string.
|
|
143
|
+
const re = new RegExp(`^${CANONICAL_INSTANT_PATTERN}$`);
|
|
144
|
+
|
|
145
|
+
it("accepts exactly what isCanonicalInstant accepts", () => {
|
|
146
|
+
for (const v of ["2026-08-07T09:00:00.000Z", "2026-01-15T23:59:59.999Z"]) {
|
|
147
|
+
expect(re.test(v)).toBe(true);
|
|
148
|
+
expect(isCanonicalInstant(v)).toBe(true);
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
it("rejects the three non-canonical forms", () => {
|
|
153
|
+
for (const v of ["2026-08-07T09:00:00+01:00", "2026-08-07T09:00:00Z", "2026-08-07T09:00:00"]) {
|
|
154
|
+
expect(re.test(v)).toBe(false);
|
|
155
|
+
expect(isCanonicalInstant(v)).toBe(false);
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
});
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The single definition of a canonical stored instant.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from `plugins/scheduling/mcp/src/lib/time-format.ts` by Task 2513,
|
|
5
|
+
* unchanged, so the dispatch writer, the dispatch migration and the two
|
|
6
|
+
* scheduling writers cannot disagree about what canonical means. Task 2213
|
|
7
|
+
* stated the invariant as "One function, three callers, no drift possible"; a
|
|
8
|
+
* second copy in the dispatch tree would have broken it.
|
|
9
|
+
*
|
|
10
|
+
* Pure. No database, no driver, no plugin import.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Validates an IANA timezone string. Throws with a clear message if invalid.
|
|
15
|
+
*/
|
|
16
|
+
export function validateTimezone(tz: string): void {
|
|
17
|
+
if (!tz || tz.trim().length === 0) {
|
|
18
|
+
throw new Error("Timezone is required but was empty");
|
|
19
|
+
}
|
|
20
|
+
try {
|
|
21
|
+
// Intl.DateTimeFormat throws RangeError for invalid IANA timezone identifiers
|
|
22
|
+
new Intl.DateTimeFormat("en-GB", { timeZone: tz });
|
|
23
|
+
} catch {
|
|
24
|
+
throw new Error(
|
|
25
|
+
`Invalid timezone: "${tz}" — expected IANA format like "Europe/London" or "America/New_York"`,
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** Ends with `Z` or a numeric UTC offset, e.g. `+01:00`, `-0500`. */
|
|
31
|
+
const HAS_ZONE = /(?:Z|[+-]\d{2}:?\d{2})$/;
|
|
32
|
+
|
|
33
|
+
/** The zone's wall-clock parts at a given instant. */
|
|
34
|
+
function partsAt(ms: number, zone: string): Record<string, string> {
|
|
35
|
+
const dtf = new Intl.DateTimeFormat("en-GB", {
|
|
36
|
+
timeZone: zone,
|
|
37
|
+
hour12: false,
|
|
38
|
+
year: "numeric",
|
|
39
|
+
month: "2-digit",
|
|
40
|
+
day: "2-digit",
|
|
41
|
+
hour: "2-digit",
|
|
42
|
+
minute: "2-digit",
|
|
43
|
+
second: "2-digit",
|
|
44
|
+
});
|
|
45
|
+
return Object.fromEntries(dtf.formatToParts(new Date(ms)).map((p) => [p.type, p.value]));
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Milliseconds the zone is ahead of UTC at `ms`.
|
|
50
|
+
*
|
|
51
|
+
* Subtracted against the SECOND-truncated instant, never `ms` itself.
|
|
52
|
+
* `Intl.DateTimeFormat` resolves only to seconds, so differencing its
|
|
53
|
+
* reconstruction against a millisecond-bearing instant folds the fractional part
|
|
54
|
+
* into the offset: at `09:00:00.500` the offset came back as 3_599_500 rather
|
|
55
|
+
* than 3_600_000, and the caller's `naive - offset` then landed a full second
|
|
56
|
+
* out. A real zone offset is always a whole number of minutes, so truncating is
|
|
57
|
+
* lossless here and keeps the caller's sub-second precision intact.
|
|
58
|
+
*/
|
|
59
|
+
function offsetMsAt(ms: number, zone: string): number {
|
|
60
|
+
const p = partsAt(ms, zone);
|
|
61
|
+
// `hour` renders as "24" for midnight in en-GB; % 24 folds it back to 0.
|
|
62
|
+
const wallUtc = Date.UTC(+p.year, +p.month - 1, +p.day, +p.hour % 24, +p.minute, +p.second);
|
|
63
|
+
return wallUtc - Math.floor(ms / 1000) * 1000;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/** The zone's wall clock at `ms`, in the same shape as a zoneless input. */
|
|
67
|
+
function wallAt(ms: number, zone: string): string {
|
|
68
|
+
const p = partsAt(ms, zone);
|
|
69
|
+
const hh = String(+p.hour % 24).padStart(2, "0");
|
|
70
|
+
return `${p.year}-${p.month}-${p.day}T${hh}:${p.minute}:${p.second}`;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* The exact 24-character shape `toISOString()` produces, as a regex source.
|
|
75
|
+
*
|
|
76
|
+
* Exported as a string rather than a `RegExp` because it is also passed to
|
|
77
|
+
* Cypher as a `=~` parameter. One source, so the standing audit's predicate and
|
|
78
|
+
* this module's predicate cannot drift; passing it as a parameter also removes
|
|
79
|
+
* the backslash-escaping ambiguity of an inlined Cypher literal.
|
|
80
|
+
*/
|
|
81
|
+
export const CANONICAL_INSTANT_PATTERN = "\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z";
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Task 2213, generalised by Task 2513 — the single definition of a canonical
|
|
85
|
+
* stored instant.
|
|
86
|
+
*
|
|
87
|
+
* Stored instants are compared as STRINGS, lexically, in Cypher: the scheduling
|
|
88
|
+
* dispatcher on `e.startDate <= $now`, and the dispatch planner on
|
|
89
|
+
* `v.startDate >= $from AND v.startDate < $to`. An offset suffix is never
|
|
90
|
+
* parsed, so a `+01:00` value sorts by its wall-clock digits — 60 minutes out
|
|
91
|
+
* under BST, and correct under GMT, which is why the defect self-heals every
|
|
92
|
+
* October and returns every March.
|
|
93
|
+
*
|
|
94
|
+
* The output is therefore always the exact 24-character shape `toISOString()`
|
|
95
|
+
* produces. The fixed width is the point: lexical order equals instant order
|
|
96
|
+
* only when every stored value shares one shape. That is also why this is not
|
|
97
|
+
* done in Cypher — `toString(datetime(...))` omits `.000` at a zero-millisecond
|
|
98
|
+
* instant, and `"…00.000Z"` sorts BEFORE `"…00Z"`.
|
|
99
|
+
*
|
|
100
|
+
* A zoneless wall clock is read in `zone`, never in the server's zone: a
|
|
101
|
+
* server-local reading makes the stored instant depend on which machine wrote
|
|
102
|
+
* it, which is the same fault class one layer down. With no usable zone this
|
|
103
|
+
* throws rather than guessing.
|
|
104
|
+
*
|
|
105
|
+
* DST is resolved the way `Temporal`'s `disambiguation: 'compatible'` resolves
|
|
106
|
+
* it. Take the offsets in force a day either side, giving two candidate
|
|
107
|
+
* instants; keep those that render back to exactly the input wall clock. If any
|
|
108
|
+
* survive, take the earliest (the earlier occurrence of an ambiguous autumn
|
|
109
|
+
* time). If none survive, the wall clock is inside a spring-forward gap and does
|
|
110
|
+
* not exist, so take the later candidate, which shifts it past the gap.
|
|
111
|
+
*/
|
|
112
|
+
export function normaliseInstant(raw: string, zone: string | null): string {
|
|
113
|
+
const trimmed = raw.trim();
|
|
114
|
+
|
|
115
|
+
if (HAS_ZONE.test(trimmed)) {
|
|
116
|
+
const ms = Date.parse(trimmed);
|
|
117
|
+
if (Number.isNaN(ms)) {
|
|
118
|
+
throw new Error(`Unparseable instant: "${raw}" — expected an ISO 8601 date-time`);
|
|
119
|
+
}
|
|
120
|
+
return new Date(ms).toISOString();
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
if (!zone) {
|
|
124
|
+
throw new Error(
|
|
125
|
+
`Instant "${raw}" carries no timezone offset and no timezone is available to read it in — ` +
|
|
126
|
+
`pass an IANA timezone, or write the offset into the value`,
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
validateTimezone(zone);
|
|
130
|
+
|
|
131
|
+
const naive = Date.parse(`${trimmed}Z`);
|
|
132
|
+
if (Number.isNaN(naive)) {
|
|
133
|
+
throw new Error(`Unparseable instant: "${raw}" — expected an ISO 8601 date-time`);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
const DAY_MS = 86_400_000;
|
|
137
|
+
const before = naive - offsetMsAt(naive - DAY_MS, zone);
|
|
138
|
+
const after = naive - offsetMsAt(naive + DAY_MS, zone);
|
|
139
|
+
const valid = [before, after].filter((ms) => wallAt(ms, zone) === trimmed);
|
|
140
|
+
const chosen = valid.length > 0 ? Math.min(...valid) : Math.max(before, after);
|
|
141
|
+
return new Date(chosen).toISOString();
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/** True when `value` is already in the canonical form above. */
|
|
145
|
+
export function isCanonicalInstant(value: string): boolean {
|
|
146
|
+
return new RegExp(`^${CANONICAL_INSTANT_PATTERN}$`).test(value);
|
|
147
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Distance to a site, and whether that counts as being there.
|
|
3
|
+
*
|
|
4
|
+
* The verdict names why it could not fire rather than returning a bare false.
|
|
5
|
+
* "This site has no coordinates", "this account configured no radius" and "the
|
|
6
|
+
* worker is four kilometres away" are three different problems with three
|
|
7
|
+
* different fixes, and a single boolean sends an operator to the wrong one.
|
|
8
|
+
*/
|
|
9
|
+
import type { DispatchConfig, SiteLocation } from "./types.js";
|
|
10
|
+
/** Great-circle distance in metres, rounded. */
|
|
11
|
+
export declare function distanceM(a: {
|
|
12
|
+
latitude: number;
|
|
13
|
+
longitude: number;
|
|
14
|
+
}, b: {
|
|
15
|
+
latitude: number;
|
|
16
|
+
longitude: number;
|
|
17
|
+
}): number;
|
|
18
|
+
export interface GeofenceVerdict {
|
|
19
|
+
siteHasCoords: boolean;
|
|
20
|
+
/** The site's own radius, else the account default, else null. */
|
|
21
|
+
radiusM: number | null;
|
|
22
|
+
/** Null when there is nothing to measure against. */
|
|
23
|
+
distanceM: number | null;
|
|
24
|
+
inside: boolean;
|
|
25
|
+
}
|
|
26
|
+
export declare function geofenceVerdict(p: {
|
|
27
|
+
site: SiteLocation | null;
|
|
28
|
+
cfg: DispatchConfig;
|
|
29
|
+
at: {
|
|
30
|
+
latitude: number;
|
|
31
|
+
longitude: number;
|
|
32
|
+
};
|
|
33
|
+
}): GeofenceVerdict;
|
|
34
|
+
//# sourceMappingURL=geo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geo.d.ts","sourceRoot":"","sources":["../src/geo.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAM/D,gDAAgD;AAChD,wBAAgB,SAAS,CACvB,CAAC,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EAC1C,CAAC,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACzC,MAAM,CAQR;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,OAAO,CAAC;IACvB,kEAAkE;IAClE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,qDAAqD;IACrD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE;IACjC,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IAC1B,GAAG,EAAE,cAAc,CAAC;IACpB,EAAE,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7C,GAAG,eAAe,CAclB"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.distanceM = distanceM;
|
|
4
|
+
exports.geofenceVerdict = geofenceVerdict;
|
|
5
|
+
const EARTH_RADIUS_M = 6_371_000;
|
|
6
|
+
const toRad = (deg) => (deg * Math.PI) / 180;
|
|
7
|
+
/** Great-circle distance in metres, rounded. */
|
|
8
|
+
function distanceM(a, b) {
|
|
9
|
+
const dLat = toRad(b.latitude - a.latitude);
|
|
10
|
+
const dLon = toRad(b.longitude - a.longitude);
|
|
11
|
+
const lat1 = toRad(a.latitude);
|
|
12
|
+
const lat2 = toRad(b.latitude);
|
|
13
|
+
const h = Math.sin(dLat / 2) ** 2 + Math.sin(dLon / 2) ** 2 * Math.cos(lat1) * Math.cos(lat2);
|
|
14
|
+
return Math.round(2 * EARTH_RADIUS_M * Math.asin(Math.sqrt(h)));
|
|
15
|
+
}
|
|
16
|
+
function geofenceVerdict(p) {
|
|
17
|
+
const siteHasCoords = p.site !== null && p.site.latitude !== null && p.site.longitude !== null;
|
|
18
|
+
const radiusM = p.site?.geofenceRadiusM ?? p.cfg.vehicles?.defaultGeofenceRadiusM ?? null;
|
|
19
|
+
if (!siteHasCoords) {
|
|
20
|
+
return { siteHasCoords: false, radiusM, distanceM: null, inside: false };
|
|
21
|
+
}
|
|
22
|
+
const d = distanceM({ latitude: p.site.latitude, longitude: p.site.longitude }, p.at);
|
|
23
|
+
// A distance with no radius to compare it against cannot say whether anybody
|
|
24
|
+
// arrived. Reported, never assumed.
|
|
25
|
+
return { siteHasCoords: true, radiusM, distanceM: d, inside: radiusM !== null && d <= radiusM };
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=geo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geo.js","sourceRoot":"","sources":["../src/geo.ts"],"names":[],"mappings":";;AAeA,8BAWC;AAWD,0CAkBC;AA7CD,MAAM,cAAc,GAAG,SAAS,CAAC;AAEjC,MAAM,KAAK,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAE7D,gDAAgD;AAChD,SAAgB,SAAS,CACvB,CAA0C,EAC1C,CAA0C;IAE1C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC/B,MAAM,CAAC,GACL,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtF,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAWD,SAAgB,eAAe,CAAC,CAI/B;IACC,MAAM,aAAa,GACjB,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC;IAC3E,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE,eAAe,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,sBAAsB,IAAI,IAAI,CAAC;IAC1F,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC3E,CAAC;IACD,MAAM,CAAC,GAAG,SAAS,CACjB,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAK,CAAC,QAAkB,EAAE,SAAS,EAAE,CAAC,CAAC,IAAK,CAAC,SAAmB,EAAE,EAChF,CAAC,CAAC,EAAE,CACL,CAAC;IACF,6EAA6E;IAC7E,oCAAoC;IACpC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC;AAClG,CAAC"}
|
|
@@ -12,11 +12,15 @@
|
|
|
12
12
|
*/
|
|
13
13
|
export { RECORDABLE_FIELDS, loadDispatchConfig, terminalJobStatuses, terminalVisitStatuses, workerForTelegramUser, } from "./config.js";
|
|
14
14
|
export type { RecordableField } from "./config.js";
|
|
15
|
+
export { CALLBACK_DATA_MAX_BYTES, buildVisitKeyboard, dispatchCallbackData, parseDispatchCallback, } from "./keyboard.js";
|
|
16
|
+
export type { DispatchButton, VisitKeyboard } from "./keyboard.js";
|
|
15
17
|
export { withSession } from "./session.js";
|
|
16
18
|
export { resolveAccountZone } from "./zone.js";
|
|
17
19
|
export { MAX_RANGE_DAYS, addDaysYmd, currentWeekYmd, daysBetween, minutesIntoDay, ymdInZone, zonedDayStartUtc, zonedRangeBounds, } from "./window.js";
|
|
18
|
-
export { buildJobListQuery, projectJob, projectVisit, readCommitments, readJob, readJobs, readNodeId, readSiteHistory, readVisit, readVisitRecordState, readVisitsForJob, readVisitsInWindow, } from "./read.js";
|
|
20
|
+
export { buildJobListQuery, projectFieldVisit, projectJob, projectVisit, readCommitments, readDraft, readDrafts, readFieldVisit, readJob, readJobs, readNodeId, readOpenVisitsForWorker, readPreviousVisits, readSiteHistory, readSiteLocation, readVisit, readVisitRecordState, readVisitsForJob, readVisitsInWindow, } from "./read.js";
|
|
21
|
+
export { distanceM, geofenceVerdict } from "./geo.js";
|
|
22
|
+
export type { GeofenceVerdict } from "./geo.js";
|
|
19
23
|
export { nonZuluStarts, readCounts, readDay, readJobList, readWorkerDay } from "./read.js";
|
|
20
|
-
export type { Commitment, VisitRecordState } from "./read.js";
|
|
24
|
+
export type { Commitment, DraftRow, PreviousVisit, VisitRecordState } from "./read.js";
|
|
21
25
|
export type * from "./types.js";
|
|
22
26
|
//# sourceMappingURL=index.d.ts.map
|