@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.
Files changed (793) hide show
  1. package/dist/index.js +14 -0
  2. package/package.json +1 -1
  3. package/payload/platform/lib/canonical-instant/dist/index.d.ts +57 -0
  4. package/payload/platform/lib/canonical-instant/dist/index.d.ts.map +1 -0
  5. package/payload/platform/lib/canonical-instant/dist/index.js +139 -0
  6. package/payload/platform/lib/canonical-instant/dist/index.js.map +1 -0
  7. package/payload/platform/lib/canonical-instant/src/__tests__/normalise-instant.test.ts +158 -0
  8. package/payload/platform/lib/canonical-instant/src/index.ts +147 -0
  9. package/payload/platform/lib/canonical-instant/tsconfig.json +9 -0
  10. package/payload/platform/lib/canonical-instant/vitest.config.ts +9 -0
  11. package/payload/platform/lib/dispatch-read/dist/geo.d.ts +34 -0
  12. package/payload/platform/lib/dispatch-read/dist/geo.d.ts.map +1 -0
  13. package/payload/platform/lib/dispatch-read/dist/geo.js +27 -0
  14. package/payload/platform/lib/dispatch-read/dist/geo.js.map +1 -0
  15. package/payload/platform/lib/dispatch-read/dist/index.d.ts +6 -2
  16. package/payload/platform/lib/dispatch-read/dist/index.d.ts.map +1 -1
  17. package/payload/platform/lib/dispatch-read/dist/index.js +21 -1
  18. package/payload/platform/lib/dispatch-read/dist/index.js.map +1 -1
  19. package/payload/platform/lib/dispatch-read/dist/keyboard.d.ts +66 -0
  20. package/payload/platform/lib/dispatch-read/dist/keyboard.d.ts.map +1 -0
  21. package/payload/platform/lib/dispatch-read/dist/keyboard.js +64 -0
  22. package/payload/platform/lib/dispatch-read/dist/keyboard.js.map +1 -0
  23. package/payload/platform/lib/dispatch-read/dist/read.d.ts +144 -9
  24. package/payload/platform/lib/dispatch-read/dist/read.d.ts.map +1 -1
  25. package/payload/platform/lib/dispatch-read/dist/read.js +437 -118
  26. package/payload/platform/lib/dispatch-read/dist/read.js.map +1 -1
  27. package/payload/platform/lib/dispatch-read/dist/types.d.ts +80 -11
  28. package/payload/platform/lib/dispatch-read/dist/types.d.ts.map +1 -1
  29. package/payload/platform/lib/dispatch-read/src/__tests__/geo.test.ts +86 -0
  30. package/payload/platform/lib/dispatch-read/src/__tests__/keyboard.test.ts +124 -0
  31. package/payload/platform/lib/dispatch-read/src/__tests__/previous-visit.test.ts +98 -0
  32. package/payload/platform/lib/dispatch-read/src/__tests__/read.test.ts +107 -8
  33. package/payload/platform/lib/dispatch-read/src/__tests__/worker-day.test.ts +215 -10
  34. package/payload/platform/lib/dispatch-read/src/geo.ts +56 -0
  35. package/payload/platform/lib/dispatch-read/src/index.ts +25 -1
  36. package/payload/platform/lib/dispatch-read/src/keyboard.ts +98 -0
  37. package/payload/platform/lib/dispatch-read/src/read.ts +522 -119
  38. package/payload/platform/lib/dispatch-read/src/types.ts +83 -11
  39. package/payload/platform/lib/dispatch-write/dist/write.d.ts +14 -0
  40. package/payload/platform/lib/dispatch-write/dist/write.d.ts.map +1 -1
  41. package/payload/platform/lib/dispatch-write/dist/write.js +50 -11
  42. package/payload/platform/lib/dispatch-write/dist/write.js.map +1 -1
  43. package/payload/platform/lib/dispatch-write/src/__tests__/write.test.ts +72 -2
  44. package/payload/platform/lib/dispatch-write/src/write.ts +79 -14
  45. package/payload/platform/neo4j/schema.cypher +66 -1
  46. package/payload/platform/package.json +2 -2
  47. package/payload/platform/plugins/admin/PLUGIN.md +3 -0
  48. package/payload/platform/plugins/admin/hooks/__tests__/fs-schema-guard-bash.test.sh +106 -0
  49. package/payload/platform/plugins/admin/hooks/__tests__/fs-schema-guard.test.sh +66 -0
  50. package/payload/platform/plugins/admin/hooks/fs-schema-guard-bash-post.sh +85 -12
  51. package/payload/platform/plugins/admin/hooks/fs-schema-guard.sh +18 -0
  52. package/payload/platform/plugins/admin/mcp/dist/index.js +2 -2
  53. package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
  54. package/payload/platform/plugins/admin/skills/admin-user-management/SKILL.md +10 -11
  55. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +106 -36
  56. package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +8 -0
  57. package/payload/platform/plugins/cloudflare/mcp/__tests__/portal-visits-scope.test.ts +130 -1
  58. package/payload/platform/plugins/cloudflare/skills/data-portal/schema.sql +63 -0
  59. package/payload/platform/plugins/cloudflare/skills/data-portal/template/functions/api/visits.ts +104 -3
  60. package/payload/platform/plugins/dispatch/.claude-plugin/plugin.json +1 -1
  61. package/payload/platform/plugins/dispatch/PLUGIN.md +49 -6
  62. package/payload/platform/plugins/dispatch/mcp/dist/index.js +200 -2
  63. package/payload/platform/plugins/dispatch/mcp/dist/index.js.map +1 -1
  64. package/payload/platform/plugins/dispatch/mcp/dist/lib/allocate.d.ts +22 -4
  65. package/payload/platform/plugins/dispatch/mcp/dist/lib/allocate.d.ts.map +1 -1
  66. package/payload/platform/plugins/dispatch/mcp/dist/lib/allocate.js +4 -0
  67. package/payload/platform/plugins/dispatch/mcp/dist/lib/allocate.js.map +1 -1
  68. package/payload/platform/plugins/dispatch/mcp/dist/lib/bot-token.d.ts +10 -0
  69. package/payload/platform/plugins/dispatch/mcp/dist/lib/bot-token.d.ts.map +1 -0
  70. package/payload/platform/plugins/dispatch/mcp/dist/lib/bot-token.js +47 -0
  71. package/payload/platform/plugins/dispatch/mcp/dist/lib/bot-token.js.map +1 -0
  72. package/payload/platform/plugins/dispatch/mcp/dist/lib/config.d.ts.map +1 -1
  73. package/payload/platform/plugins/dispatch/mcp/dist/lib/config.js +12 -0
  74. package/payload/platform/plugins/dispatch/mcp/dist/lib/config.js.map +1 -1
  75. package/payload/platform/plugins/dispatch/mcp/dist/lib/ids.d.ts +1 -0
  76. package/payload/platform/plugins/dispatch/mcp/dist/lib/ids.d.ts.map +1 -1
  77. package/payload/platform/plugins/dispatch/mcp/dist/lib/ids.js +1 -0
  78. package/payload/platform/plugins/dispatch/mcp/dist/lib/ids.js.map +1 -1
  79. package/payload/platform/plugins/dispatch/mcp/dist/lib/intake.d.ts +36 -0
  80. package/payload/platform/plugins/dispatch/mcp/dist/lib/intake.d.ts.map +1 -0
  81. package/payload/platform/plugins/dispatch/mcp/dist/lib/intake.js +36 -0
  82. package/payload/platform/plugins/dispatch/mcp/dist/lib/intake.js.map +1 -0
  83. package/payload/platform/plugins/dispatch/mcp/dist/lib/keyboard.d.ts +11 -0
  84. package/payload/platform/plugins/dispatch/mcp/dist/lib/keyboard.d.ts.map +1 -0
  85. package/payload/platform/plugins/dispatch/mcp/dist/lib/keyboard.js +10 -0
  86. package/payload/platform/plugins/dispatch/mcp/dist/lib/keyboard.js.map +1 -0
  87. package/payload/platform/plugins/dispatch/mcp/dist/lib/read.d.ts +2 -2
  88. package/payload/platform/plugins/dispatch/mcp/dist/lib/read.d.ts.map +1 -1
  89. package/payload/platform/plugins/dispatch/mcp/dist/lib/read.js +9 -1
  90. package/payload/platform/plugins/dispatch/mcp/dist/lib/read.js.map +1 -1
  91. package/payload/platform/plugins/dispatch/mcp/dist/lib/travel.d.ts +43 -0
  92. package/payload/platform/plugins/dispatch/mcp/dist/lib/travel.d.ts.map +1 -0
  93. package/payload/platform/plugins/dispatch/mcp/dist/lib/travel.js +53 -0
  94. package/payload/platform/plugins/dispatch/mcp/dist/lib/travel.js.map +1 -0
  95. package/payload/platform/plugins/dispatch/mcp/dist/lib/types.d.ts +13 -2
  96. package/payload/platform/plugins/dispatch/mcp/dist/lib/types.d.ts.map +1 -1
  97. package/payload/platform/plugins/dispatch/mcp/dist/scripts/converge-visit-instants.d.ts +6 -0
  98. package/payload/platform/plugins/dispatch/mcp/dist/scripts/converge-visit-instants.d.ts.map +1 -0
  99. package/payload/platform/plugins/dispatch/mcp/dist/scripts/converge-visit-instants.js +102 -0
  100. package/payload/platform/plugins/dispatch/mcp/dist/scripts/converge-visit-instants.js.map +1 -0
  101. package/payload/platform/plugins/dispatch/mcp/dist/tools/allocate.d.ts +18 -0
  102. package/payload/platform/plugins/dispatch/mcp/dist/tools/allocate.d.ts.map +1 -1
  103. package/payload/platform/plugins/dispatch/mcp/dist/tools/allocate.js +251 -40
  104. package/payload/platform/plugins/dispatch/mcp/dist/tools/allocate.js.map +1 -1
  105. package/payload/platform/plugins/dispatch/mcp/dist/tools/intake.d.ts +75 -0
  106. package/payload/platform/plugins/dispatch/mcp/dist/tools/intake.d.ts.map +1 -0
  107. package/payload/platform/plugins/dispatch/mcp/dist/tools/intake.js +194 -0
  108. package/payload/platform/plugins/dispatch/mcp/dist/tools/intake.js.map +1 -0
  109. package/payload/platform/plugins/dispatch/mcp/dist/tools/notify-worker.d.ts +61 -0
  110. package/payload/platform/plugins/dispatch/mcp/dist/tools/notify-worker.d.ts.map +1 -0
  111. package/payload/platform/plugins/dispatch/mcp/dist/tools/notify-worker.js +130 -0
  112. package/payload/platform/plugins/dispatch/mcp/dist/tools/notify-worker.js.map +1 -0
  113. package/payload/platform/plugins/dispatch/mcp/dist/tools/site-location-set.d.ts +28 -0
  114. package/payload/platform/plugins/dispatch/mcp/dist/tools/site-location-set.d.ts.map +1 -0
  115. package/payload/platform/plugins/dispatch/mcp/dist/tools/site-location-set.js +44 -0
  116. package/payload/platform/plugins/dispatch/mcp/dist/tools/site-location-set.js.map +1 -0
  117. package/payload/platform/plugins/dispatch/mcp/dist/tools/site-upsert.d.ts +43 -0
  118. package/payload/platform/plugins/dispatch/mcp/dist/tools/site-upsert.d.ts.map +1 -0
  119. package/payload/platform/plugins/dispatch/mcp/dist/tools/site-upsert.js +139 -0
  120. package/payload/platform/plugins/dispatch/mcp/dist/tools/site-upsert.js.map +1 -0
  121. package/payload/platform/plugins/dispatch/skills/dispatch-page/SKILL.md +85 -0
  122. package/payload/platform/plugins/dispatch/skills/dispatch-page/template/planner.css +97 -0
  123. package/payload/platform/plugins/dispatch/skills/dispatch-page/template/planner.html +59 -0
  124. package/payload/platform/plugins/dispatch/skills/dispatch-page/template/planner.js +343 -0
  125. package/payload/platform/plugins/dispatch/skills/dispatch-setup/SKILL.md +9 -4
  126. package/payload/platform/plugins/docs/references/channel-wake-and-prompt.md +11 -20
  127. package/payload/platform/plugins/docs/references/dispatch.md +94 -15
  128. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/dispatch-vertical-coverage.test.js +4 -1
  129. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/dispatch-vertical-coverage.test.js.map +1 -1
  130. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/relationship-patterns.test.js +24 -1
  131. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/relationship-patterns.test.js.map +1 -1
  132. package/payload/platform/plugins/memory/references/schema-dispatch.md +70 -4
  133. package/payload/platform/plugins/scheduling/mcp/dist/lib/time-format.d.ts +2 -35
  134. package/payload/platform/plugins/scheduling/mcp/dist/lib/time-format.d.ts.map +1 -1
  135. package/payload/platform/plugins/scheduling/mcp/dist/lib/time-format.js +6 -114
  136. package/payload/platform/plugins/scheduling/mcp/dist/lib/time-format.js.map +1 -1
  137. package/payload/platform/plugins/scheduling/mcp/dist/scripts/converge-startdate-utc.d.ts +1 -1
  138. package/payload/platform/plugins/scheduling/mcp/dist/scripts/converge-startdate-utc.js +3 -3
  139. package/payload/platform/plugins/scheduling/mcp/dist/scripts/converge-startdate-utc.js.map +1 -1
  140. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js +2 -2
  141. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js.map +1 -1
  142. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.js +3 -3
  143. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.js.map +1 -1
  144. package/payload/platform/services/claude-session-manager/dist/blocked-tool-census.d.ts +40 -6
  145. package/payload/platform/services/claude-session-manager/dist/blocked-tool-census.d.ts.map +1 -1
  146. package/payload/platform/services/claude-session-manager/dist/blocked-tool-census.js +116 -15
  147. package/payload/platform/services/claude-session-manager/dist/blocked-tool-census.js.map +1 -1
  148. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts.map +1 -1
  149. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +6 -0
  150. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
  151. package/payload/platform/services/telegram-channel/dist/notification.d.ts +0 -12
  152. package/payload/platform/services/telegram-channel/dist/notification.d.ts.map +1 -1
  153. package/payload/platform/services/telegram-channel/dist/notification.js +8 -29
  154. package/payload/platform/services/telegram-channel/dist/notification.js.map +1 -1
  155. package/payload/platform/services/telegram-channel/dist/server.d.ts.map +1 -1
  156. package/payload/platform/services/telegram-channel/dist/server.js +8 -11
  157. package/payload/platform/services/telegram-channel/dist/server.js.map +1 -1
  158. package/payload/server/public/activity.html +7 -7
  159. package/payload/server/public/agents.html +6 -6
  160. package/payload/server/public/assets/{AdminLoginScreens-Dp6k1XgD.js → AdminLoginScreens-BLGZEaKU.js} +1 -1
  161. package/payload/server/public/assets/AdminLoginScreens-BLGZEaKU.js.br +0 -0
  162. package/payload/server/public/assets/AdminLoginScreens-BLGZEaKU.js.gz +0 -0
  163. package/payload/server/public/assets/AdminShell-C_M7YE5Z.js +3 -0
  164. package/payload/server/public/assets/AdminShell-C_M7YE5Z.js.br +0 -0
  165. package/payload/server/public/assets/AdminShell-C_M7YE5Z.js.gz +0 -0
  166. package/payload/server/public/assets/{activity-BJxhblz-.js → activity-BL6qbB9a.js} +1 -1
  167. package/payload/server/public/assets/activity-BL6qbB9a.js.br +0 -0
  168. package/payload/server/public/assets/activity-BL6qbB9a.js.gz +0 -0
  169. package/payload/server/public/assets/admin-jnJ3P2u4.js +1 -0
  170. package/payload/server/public/assets/admin-jnJ3P2u4.js.br +0 -0
  171. package/payload/server/public/assets/admin-jnJ3P2u4.js.gz +0 -0
  172. package/payload/server/public/assets/{agents-DTL8kjfD.js → agents-BzhfKZDN.js} +1 -1
  173. package/payload/server/public/assets/agents-BzhfKZDN.js.br +0 -0
  174. package/payload/server/public/assets/agents-BzhfKZDN.js.gz +0 -0
  175. package/payload/server/public/assets/{arc-CWXBKNZd.js → arc-Bge2fWf4.js} +1 -1
  176. package/payload/server/public/assets/arc-Bge2fWf4.js.br +0 -0
  177. package/payload/server/public/assets/arc-Bge2fWf4.js.gz +0 -0
  178. package/payload/server/public/assets/architecture-YZFGNWBL-B9jqFTbw.js +1 -0
  179. package/payload/server/public/assets/architecture-YZFGNWBL-B9jqFTbw.js.br +0 -0
  180. package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-C-KPMyG4.js → architectureDiagram-Q4EWVU46-BRauf5b8.js} +1 -1
  181. package/payload/server/public/assets/architectureDiagram-Q4EWVU46-BRauf5b8.js.br +0 -0
  182. package/payload/server/public/assets/architectureDiagram-Q4EWVU46-BRauf5b8.js.gz +0 -0
  183. package/payload/server/public/assets/{blockDiagram-DXYQGD6D-DkYbV9Sf.js → blockDiagram-DXYQGD6D-CUJ554WZ.js} +1 -1
  184. package/payload/server/public/assets/blockDiagram-DXYQGD6D-CUJ554WZ.js.br +0 -0
  185. package/payload/server/public/assets/blockDiagram-DXYQGD6D-CUJ554WZ.js.gz +0 -0
  186. package/payload/server/public/assets/{browser-UZp75zhx.js → browser-C-6io2B9.js} +1 -1
  187. package/payload/server/public/assets/browser-C-6io2B9.js.br +0 -0
  188. package/payload/server/public/assets/browser-C-6io2B9.js.gz +0 -0
  189. package/payload/server/public/assets/{c4Diagram-AHTNJAMY-EYW4kdlx.js → c4Diagram-AHTNJAMY-CV9gKsKo.js} +1 -1
  190. package/payload/server/public/assets/c4Diagram-AHTNJAMY-CV9gKsKo.js.br +0 -0
  191. package/payload/server/public/assets/{c4Diagram-AHTNJAMY-EYW4kdlx.js.gz → c4Diagram-AHTNJAMY-CV9gKsKo.js.gz} +0 -0
  192. package/payload/server/public/assets/{calendar-Dfo0O2K_.js → calendar-Dt3gS88s.js} +1 -1
  193. package/payload/server/public/assets/calendar-Dt3gS88s.js.br +0 -0
  194. package/payload/server/public/assets/calendar-Dt3gS88s.js.gz +0 -0
  195. package/payload/server/public/assets/channel-DUwJcjZw.js +1 -0
  196. package/payload/server/public/assets/channel-DUwJcjZw.js.br +0 -0
  197. package/payload/server/public/assets/chat-IUOvVkL-.js +1 -0
  198. package/payload/server/public/assets/chat-IUOvVkL-.js.br +1 -0
  199. package/payload/server/public/assets/chat-IUOvVkL-.js.gz +0 -0
  200. package/payload/server/public/assets/chevron-left-DSzR9zR7.js +1 -0
  201. package/payload/server/public/assets/chevron-left-DSzR9zR7.js.br +0 -0
  202. package/payload/server/public/assets/{chunk-2KRD3SAO-CmAF1UmH.js → chunk-2KRD3SAO-HzWGrran.js} +1 -1
  203. package/payload/server/public/assets/chunk-2KRD3SAO-HzWGrran.js.br +0 -0
  204. package/payload/server/public/assets/chunk-2KRD3SAO-HzWGrran.js.gz +0 -0
  205. package/payload/server/public/assets/{chunk-336JU56O-CyhmJeMM.js → chunk-336JU56O-ChGDYu_S.js} +2 -2
  206. package/payload/server/public/assets/chunk-336JU56O-ChGDYu_S.js.br +0 -0
  207. package/payload/server/public/assets/chunk-336JU56O-ChGDYu_S.js.gz +0 -0
  208. package/payload/server/public/assets/chunk-426QAEUC-DLLi1nAr.js +1 -0
  209. package/payload/server/public/assets/chunk-426QAEUC-DLLi1nAr.js.br +0 -0
  210. package/payload/server/public/assets/chunk-426QAEUC-DLLi1nAr.js.gz +0 -0
  211. package/payload/server/public/assets/{chunk-4BX2VUAB-DCzC40-Y.js → chunk-4BX2VUAB-BJunAy2u.js} +1 -1
  212. package/payload/server/public/assets/chunk-4BX2VUAB-BJunAy2u.js.br +0 -0
  213. package/payload/server/public/assets/chunk-4BX2VUAB-BJunAy2u.js.gz +0 -0
  214. package/payload/server/public/assets/{chunk-4TB4RGXK-D9BXrSA_.js → chunk-4TB4RGXK-Df9Ew0fN.js} +1 -1
  215. package/payload/server/public/assets/chunk-4TB4RGXK-Df9Ew0fN.js.br +0 -0
  216. package/payload/server/public/assets/chunk-4TB4RGXK-Df9Ew0fN.js.gz +0 -0
  217. package/payload/server/public/assets/{chunk-55IACEB6-BwXC-qTZ.js → chunk-55IACEB6-DtquCg7p.js} +1 -1
  218. package/payload/server/public/assets/chunk-55IACEB6-DtquCg7p.js.br +0 -0
  219. package/payload/server/public/assets/chunk-55IACEB6-DtquCg7p.js.gz +0 -0
  220. package/payload/server/public/assets/{chunk-5FUZZQ4R-De7QtXxM.js → chunk-5FUZZQ4R-B3s1YuQa.js} +1 -1
  221. package/payload/server/public/assets/chunk-5FUZZQ4R-B3s1YuQa.js.br +0 -0
  222. package/payload/server/public/assets/chunk-5FUZZQ4R-B3s1YuQa.js.gz +0 -0
  223. package/payload/server/public/assets/{chunk-5PVQY5BW-B5tsJiCq.js → chunk-5PVQY5BW-C0bRnMKQ.js} +1 -1
  224. package/payload/server/public/assets/chunk-5PVQY5BW-C0bRnMKQ.js.br +0 -0
  225. package/payload/server/public/assets/chunk-5PVQY5BW-C0bRnMKQ.js.gz +0 -0
  226. package/payload/server/public/assets/{chunk-67CJDMHE-BjTh9STV.js → chunk-67CJDMHE-B9jxnEpu.js} +1 -1
  227. package/payload/server/public/assets/chunk-67CJDMHE-B9jxnEpu.js.br +0 -0
  228. package/payload/server/public/assets/chunk-67CJDMHE-B9jxnEpu.js.gz +0 -0
  229. package/payload/server/public/assets/{chunk-7N4EOEYR-91klRswn.js → chunk-7N4EOEYR-DaimaIlO.js} +1 -1
  230. package/payload/server/public/assets/chunk-7N4EOEYR-DaimaIlO.js.br +0 -0
  231. package/payload/server/public/assets/chunk-7N4EOEYR-DaimaIlO.js.gz +0 -0
  232. package/payload/server/public/assets/{chunk-AA7GKIK3-XFPGEoBu.js → chunk-AA7GKIK3-htgz4y5z.js} +1 -1
  233. package/payload/server/public/assets/chunk-AA7GKIK3-htgz4y5z.js.br +0 -0
  234. package/payload/server/public/assets/chunk-AA7GKIK3-htgz4y5z.js.gz +0 -0
  235. package/payload/server/public/assets/{chunk-BSJP7CBP-B7wgMyWq.js → chunk-BSJP7CBP-0xBlnKJN.js} +1 -1
  236. package/payload/server/public/assets/chunk-BSJP7CBP-0xBlnKJN.js.br +0 -0
  237. package/payload/server/public/assets/chunk-BSJP7CBP-0xBlnKJN.js.gz +0 -0
  238. package/payload/server/public/assets/{chunk-CIAEETIT-WPy9vcOo.js → chunk-CIAEETIT-HZOrcAzJ.js} +1 -1
  239. package/payload/server/public/assets/chunk-CIAEETIT-HZOrcAzJ.js.br +0 -0
  240. package/payload/server/public/assets/chunk-CIAEETIT-HZOrcAzJ.js.gz +0 -0
  241. package/payload/server/public/assets/{chunk-EDXVE4YY-D_2JIFFG.js → chunk-EDXVE4YY-CC8hCcuU.js} +1 -1
  242. package/payload/server/public/assets/chunk-EDXVE4YY-CC8hCcuU.js.br +0 -0
  243. package/payload/server/public/assets/chunk-EDXVE4YY-CC8hCcuU.js.gz +0 -0
  244. package/payload/server/public/assets/{chunk-ENJZ2VHE-xORReRt0.js → chunk-ENJZ2VHE-BdPfdZYB.js} +1 -1
  245. package/payload/server/public/assets/chunk-ENJZ2VHE-BdPfdZYB.js.br +0 -0
  246. package/payload/server/public/assets/chunk-ENJZ2VHE-BdPfdZYB.js.gz +0 -0
  247. package/payload/server/public/assets/{chunk-FMBD7UC4-BZsDu4nl.js → chunk-FMBD7UC4-MHdn_KgF.js} +1 -1
  248. package/payload/server/public/assets/chunk-FMBD7UC4-MHdn_KgF.js.br +0 -0
  249. package/payload/server/public/assets/chunk-FMBD7UC4-MHdn_KgF.js.gz +0 -0
  250. package/payload/server/public/assets/{chunk-FOC6F5B3-QzUp8wXX.js → chunk-FOC6F5B3-Ti8BlQKX.js} +1 -1
  251. package/payload/server/public/assets/chunk-FOC6F5B3-Ti8BlQKX.js.br +0 -0
  252. package/payload/server/public/assets/chunk-FOC6F5B3-Ti8BlQKX.js.gz +0 -0
  253. package/payload/server/public/assets/{chunk-ICPOFSXX-B64S7i7x.js → chunk-ICPOFSXX-BP8A8zb1.js} +2 -2
  254. package/payload/server/public/assets/chunk-ICPOFSXX-BP8A8zb1.js.br +0 -0
  255. package/payload/server/public/assets/chunk-ICPOFSXX-BP8A8zb1.js.gz +0 -0
  256. package/payload/server/public/assets/{chunk-K5T4RW27-DzPc6X1_.js → chunk-K5T4RW27-F30EnSBL.js} +1 -1
  257. package/payload/server/public/assets/chunk-K5T4RW27-F30EnSBL.js.br +0 -0
  258. package/payload/server/public/assets/chunk-K5T4RW27-F30EnSBL.js.gz +0 -0
  259. package/payload/server/public/assets/{chunk-KGLVRYIC-A2rPnD7k.js → chunk-KGLVRYIC-DNSEkg2Q.js} +1 -1
  260. package/payload/server/public/assets/chunk-KGLVRYIC-DNSEkg2Q.js.br +2 -0
  261. package/payload/server/public/assets/chunk-KGLVRYIC-DNSEkg2Q.js.gz +0 -0
  262. package/payload/server/public/assets/{chunk-LIHQZDEY-CaWX327m.js → chunk-LIHQZDEY-DM7b0dec.js} +1 -1
  263. package/payload/server/public/assets/chunk-LIHQZDEY-DM7b0dec.js.br +0 -0
  264. package/payload/server/public/assets/chunk-LIHQZDEY-DM7b0dec.js.gz +0 -0
  265. package/payload/server/public/assets/{chunk-ORNJ4GCN-zrWhdmnc.js → chunk-ORNJ4GCN-B0qoI_vp.js} +1 -1
  266. package/payload/server/public/assets/chunk-ORNJ4GCN-B0qoI_vp.js.br +0 -0
  267. package/payload/server/public/assets/chunk-ORNJ4GCN-B0qoI_vp.js.gz +0 -0
  268. package/payload/server/public/assets/{chunk-OYMX7WX6-B_2qQir6.js → chunk-OYMX7WX6-Bfzo53eI.js} +1 -1
  269. package/payload/server/public/assets/chunk-OYMX7WX6-Bfzo53eI.js.br +0 -0
  270. package/payload/server/public/assets/chunk-OYMX7WX6-Bfzo53eI.js.gz +0 -0
  271. package/payload/server/public/assets/chunk-QZHKN3VN-A6b8ZN9i.js +1 -0
  272. package/payload/server/public/assets/chunk-QZHKN3VN-A6b8ZN9i.js.br +0 -0
  273. package/payload/server/public/assets/chunk-QZHKN3VN-A6b8ZN9i.js.gz +0 -0
  274. package/payload/server/public/assets/{chunk-U2HBQHQK-B-IYgxsc.js → chunk-U2HBQHQK-DcqGPXEy.js} +1 -1
  275. package/payload/server/public/assets/chunk-U2HBQHQK-DcqGPXEy.js.br +0 -0
  276. package/payload/server/public/assets/chunk-U2HBQHQK-DcqGPXEy.js.gz +0 -0
  277. package/payload/server/public/assets/{chunk-X2U36JSP-Y9Y1_EuG.js → chunk-X2U36JSP-DtRi7n5Z.js} +1 -1
  278. package/payload/server/public/assets/chunk-X2U36JSP-DtRi7n5Z.js.br +0 -0
  279. package/payload/server/public/assets/chunk-X2U36JSP-DtRi7n5Z.js.gz +0 -0
  280. package/payload/server/public/assets/{chunk-XPW4576I-C-6yETG_.js → chunk-XPW4576I-DmuDCcY3.js} +1 -1
  281. package/payload/server/public/assets/chunk-XPW4576I-DmuDCcY3.js.br +0 -0
  282. package/payload/server/public/assets/chunk-XPW4576I-DmuDCcY3.js.gz +0 -0
  283. package/payload/server/public/assets/{chunk-YZCP3GAM-KAuQIU5n.js → chunk-YZCP3GAM-oKk9Gv_e.js} +1 -1
  284. package/payload/server/public/assets/chunk-YZCP3GAM-oKk9Gv_e.js.br +0 -0
  285. package/payload/server/public/assets/chunk-YZCP3GAM-oKk9Gv_e.js.gz +0 -0
  286. package/payload/server/public/assets/{chunk-ZZ45TVLE-BJcH3KDH.js → chunk-ZZ45TVLE-teET41Yh.js} +1 -1
  287. package/payload/server/public/assets/chunk-ZZ45TVLE-teET41Yh.js.br +0 -0
  288. package/payload/server/public/assets/chunk-ZZ45TVLE-teET41Yh.js.gz +0 -0
  289. package/payload/server/public/assets/classDiagram-6PBFFD2Q-CMXajSzA.js +1 -0
  290. package/payload/server/public/assets/classDiagram-6PBFFD2Q-CMXajSzA.js.br +0 -0
  291. package/payload/server/public/assets/classDiagram-6PBFFD2Q-CMXajSzA.js.gz +0 -0
  292. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-Cz5Kib2r.js +1 -0
  293. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-Cz5Kib2r.js.br +0 -0
  294. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-Cz5Kib2r.js.gz +0 -0
  295. package/payload/server/public/assets/clock-C5xE5p2I.js +1 -0
  296. package/payload/server/public/assets/clock-C5xE5p2I.js.br +0 -0
  297. package/payload/server/public/assets/clone-BORhq8On.js +1 -0
  298. package/payload/server/public/assets/clone-BORhq8On.js.br +0 -0
  299. package/payload/server/public/assets/{copy-CGI2jioK.js → copy-TkPJgllS.js} +1 -1
  300. package/payload/server/public/assets/copy-TkPJgllS.js.br +0 -0
  301. package/payload/server/public/assets/copy-TkPJgllS.js.gz +0 -0
  302. package/payload/server/public/assets/{cose-bilkent-S5V4N54A-CcXj8vHa.js → cose-bilkent-S5V4N54A-D1xLpHGm.js} +1 -1
  303. package/payload/server/public/assets/cose-bilkent-S5V4N54A-D1xLpHGm.js.br +0 -0
  304. package/payload/server/public/assets/cose-bilkent-S5V4N54A-D1xLpHGm.js.gz +0 -0
  305. package/payload/server/public/assets/{dagre-KV5264BT-BOhQs4rS.js → dagre-KV5264BT-Byl65NKT.js} +1 -1
  306. package/payload/server/public/assets/dagre-KV5264BT-Byl65NKT.js.br +0 -0
  307. package/payload/server/public/assets/dagre-KV5264BT-Byl65NKT.js.gz +0 -0
  308. package/payload/server/public/assets/{dagre-DOtq9kYX.js → dagre-ZzXkSDir.js} +1 -1
  309. package/payload/server/public/assets/dagre-ZzXkSDir.js.br +0 -0
  310. package/payload/server/public/assets/dagre-ZzXkSDir.js.gz +0 -0
  311. package/payload/server/public/assets/data-Bhv0Pvfl.js +1 -0
  312. package/payload/server/public/assets/data-Bhv0Pvfl.js.br +0 -0
  313. package/payload/server/public/assets/data-Bhv0Pvfl.js.gz +0 -0
  314. package/payload/server/public/assets/{diagram-5BDNPKRD-CqJFt5ZM.js → diagram-5BDNPKRD-BFNkV5GK.js} +1 -1
  315. package/payload/server/public/assets/diagram-5BDNPKRD-BFNkV5GK.js.br +0 -0
  316. package/payload/server/public/assets/diagram-5BDNPKRD-BFNkV5GK.js.gz +0 -0
  317. package/payload/server/public/assets/{diagram-G4DWMVQ6-WQIyAZMn.js → diagram-G4DWMVQ6-1n6vHXzR.js} +1 -1
  318. package/payload/server/public/assets/diagram-G4DWMVQ6-1n6vHXzR.js.br +0 -0
  319. package/payload/server/public/assets/diagram-G4DWMVQ6-1n6vHXzR.js.gz +0 -0
  320. package/payload/server/public/assets/{diagram-MMDJMWI5-jcKc4a2w.js → diagram-MMDJMWI5-D4QOzaw0.js} +1 -1
  321. package/payload/server/public/assets/diagram-MMDJMWI5-D4QOzaw0.js.br +0 -0
  322. package/payload/server/public/assets/diagram-MMDJMWI5-D4QOzaw0.js.gz +0 -0
  323. package/payload/server/public/assets/{diagram-TYMM5635-Bbt2KuWe.js → diagram-TYMM5635-z8lBRsaV.js} +1 -1
  324. package/payload/server/public/assets/diagram-TYMM5635-z8lBRsaV.js.br +0 -0
  325. package/payload/server/public/assets/diagram-TYMM5635-z8lBRsaV.js.gz +0 -0
  326. package/payload/server/public/assets/{dist-9RiN6lky.js → dist-DjYA4E4S.js} +1 -1
  327. package/payload/server/public/assets/dist-DjYA4E4S.js.br +0 -0
  328. package/payload/server/public/assets/dist-DjYA4E4S.js.gz +0 -0
  329. package/payload/server/public/assets/{erDiagram-SMLLAGMA-BBm6azPJ.js → erDiagram-SMLLAGMA-CXj3tbtX.js} +1 -1
  330. package/payload/server/public/assets/erDiagram-SMLLAGMA-CXj3tbtX.js.br +0 -0
  331. package/payload/server/public/assets/erDiagram-SMLLAGMA-CXj3tbtX.js.gz +0 -0
  332. package/payload/server/public/assets/field-B490-evJ.js +1 -0
  333. package/payload/server/public/assets/field-B490-evJ.js.br +0 -0
  334. package/payload/server/public/assets/field-B490-evJ.js.gz +0 -0
  335. package/payload/server/public/assets/{file-text-RWintp9q.js → file-text-DyAL2DCh.js} +1 -1
  336. package/payload/server/public/assets/file-text-DyAL2DCh.js.br +0 -0
  337. package/payload/server/public/assets/file-text-DyAL2DCh.js.gz +0 -0
  338. package/payload/server/public/assets/{flatten-BurGKeIy.js → flatten-UdUTbm8v.js} +1 -1
  339. package/payload/server/public/assets/flatten-UdUTbm8v.js.br +0 -0
  340. package/payload/server/public/assets/flatten-UdUTbm8v.js.gz +0 -0
  341. package/payload/server/public/assets/{flowDiagram-DWJPFMVM-_r45DYJ8.js → flowDiagram-DWJPFMVM-DnySI-I4.js} +1 -1
  342. package/payload/server/public/assets/flowDiagram-DWJPFMVM-DnySI-I4.js.br +0 -0
  343. package/payload/server/public/assets/flowDiagram-DWJPFMVM-DnySI-I4.js.gz +0 -0
  344. package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-Bjgj9Bej.js → ganttDiagram-T4ZO3ILL-BIE2Q78F.js} +1 -1
  345. package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-BIE2Q78F.js.br +0 -0
  346. package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-BIE2Q78F.js.gz +0 -0
  347. package/payload/server/public/assets/gitGraph-7Q5UKJZL-Ua2z-DNt.js +1 -0
  348. package/payload/server/public/assets/gitGraph-7Q5UKJZL-Ua2z-DNt.js.br +0 -0
  349. package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-DTRdhGJA.js → gitGraphDiagram-UUTBAWPF-B2RTRpyG.js} +1 -1
  350. package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-B2RTRpyG.js.br +0 -0
  351. package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-B2RTRpyG.js.gz +0 -0
  352. package/payload/server/public/assets/{graph-CpBlfYrJ.js → graph-PiNIcCfX.js} +1 -1
  353. package/payload/server/public/assets/graph-PiNIcCfX.js.br +0 -0
  354. package/payload/server/public/assets/graph-PiNIcCfX.js.gz +0 -0
  355. package/payload/server/public/assets/{graph-labels-BOMyPppX.js → graph-labels-8jKFrLHn.js} +1 -1
  356. package/payload/server/public/assets/graph-labels-8jKFrLHn.js.br +0 -0
  357. package/payload/server/public/assets/graph-labels-8jKFrLHn.js.gz +0 -0
  358. package/payload/server/public/assets/{graphlib-DT4h6-4N.js → graphlib-SOh92ucm.js} +1 -1
  359. package/payload/server/public/assets/graphlib-SOh92ucm.js.br +0 -0
  360. package/payload/server/public/assets/graphlib-SOh92ucm.js.gz +0 -0
  361. package/payload/server/public/assets/info-OMHHGYJF-CNYp42iX.js +1 -0
  362. package/payload/server/public/assets/info-OMHHGYJF-CNYp42iX.js.br +0 -0
  363. package/payload/server/public/assets/infoDiagram-42DDH7IO-DklHffYr.js +2 -0
  364. package/payload/server/public/assets/infoDiagram-42DDH7IO-DklHffYr.js.br +0 -0
  365. package/payload/server/public/assets/infoDiagram-42DDH7IO-DklHffYr.js.gz +0 -0
  366. package/payload/server/public/assets/{isEmpty-C5v0-EY7.js → isEmpty-DY_Xp9Na.js} +1 -1
  367. package/payload/server/public/assets/isEmpty-DY_Xp9Na.js.br +0 -0
  368. package/payload/server/public/assets/isEmpty-DY_Xp9Na.js.gz +0 -0
  369. package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-BklHzVHm.js → ishikawaDiagram-UXIWVN3A-KAC06i3M.js} +1 -1
  370. package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-KAC06i3M.js.br +0 -0
  371. package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-KAC06i3M.js.gz +0 -0
  372. package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-Ckxx2CmV.js → journeyDiagram-VCZTEJTY-cA37ob8S.js} +1 -1
  373. package/payload/server/public/assets/journeyDiagram-VCZTEJTY-cA37ob8S.js.br +0 -0
  374. package/payload/server/public/assets/journeyDiagram-VCZTEJTY-cA37ob8S.js.gz +0 -0
  375. package/payload/server/public/assets/{jsx-runtime-DxsQ5Y-z.css → jsx-runtime-ChVh0xOm.css} +1 -1
  376. package/payload/server/public/assets/jsx-runtime-ChVh0xOm.css.br +0 -0
  377. package/payload/server/public/assets/{jsx-runtime-DxsQ5Y-z.css.gz → jsx-runtime-ChVh0xOm.css.gz} +0 -0
  378. package/payload/server/public/assets/{jsx-runtime-5lmxFBIw.js → jsx-runtime-YcUntiud.js} +1 -1
  379. package/payload/server/public/assets/jsx-runtime-YcUntiud.js.br +0 -0
  380. package/payload/server/public/assets/jsx-runtime-YcUntiud.js.gz +0 -0
  381. package/payload/server/public/assets/{kanban-definition-6JOO6SKY-BLELXpqn.js → kanban-definition-6JOO6SKY-CBjL70wU.js} +1 -1
  382. package/payload/server/public/assets/kanban-definition-6JOO6SKY-CBjL70wU.js.br +0 -0
  383. package/payload/server/public/assets/kanban-definition-6JOO6SKY-CBjL70wU.js.gz +0 -0
  384. package/payload/server/public/assets/{line-BkI5icOY.js → line-K8229GLG.js} +1 -1
  385. package/payload/server/public/assets/line-K8229GLG.js.br +0 -0
  386. package/payload/server/public/assets/line-K8229GLG.js.gz +0 -0
  387. package/payload/server/public/assets/{linear-B64ANRVs.js → linear-DeX7Wdt6.js} +1 -1
  388. package/payload/server/public/assets/linear-DeX7Wdt6.js.br +0 -0
  389. package/payload/server/public/assets/linear-DeX7Wdt6.js.gz +0 -0
  390. package/payload/server/public/assets/{mermaid-parser.core-qXPKkdJe.js → mermaid-parser.core-OnNOAzPX.js} +2 -2
  391. package/payload/server/public/assets/mermaid-parser.core-OnNOAzPX.js.br +0 -0
  392. package/payload/server/public/assets/mermaid-parser.core-OnNOAzPX.js.gz +0 -0
  393. package/payload/server/public/assets/{mermaid.core-BMsz65Wy.js → mermaid.core-DA-Gezeo.js} +3 -3
  394. package/payload/server/public/assets/mermaid.core-DA-Gezeo.js.br +0 -0
  395. package/payload/server/public/assets/mermaid.core-DA-Gezeo.js.gz +0 -0
  396. package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-DhFTS2sx.js → mindmap-definition-QFDTVHPH-C24TcDyS.js} +1 -1
  397. package/payload/server/public/assets/mindmap-definition-QFDTVHPH-C24TcDyS.js.br +0 -0
  398. package/payload/server/public/assets/mindmap-definition-QFDTVHPH-C24TcDyS.js.gz +0 -0
  399. package/payload/server/public/assets/operator-DKGKGzrb.js +1 -0
  400. package/payload/server/public/assets/operator-DKGKGzrb.js.br +0 -0
  401. package/payload/server/public/assets/operator-DKGKGzrb.js.gz +0 -0
  402. package/payload/server/public/assets/{ordinal-CJ_pL32Z.js → ordinal-gnpqfIHn.js} +1 -1
  403. package/payload/server/public/assets/ordinal-gnpqfIHn.js.br +0 -0
  404. package/payload/server/public/assets/ordinal-gnpqfIHn.js.gz +0 -0
  405. package/payload/server/public/assets/packet-4T2RLAQJ-B3ZAElsg.js +1 -0
  406. package/payload/server/public/assets/packet-4T2RLAQJ-B3ZAElsg.js.br +0 -0
  407. package/payload/server/public/assets/{page-BRShHSH0.js → page-BU5vlY9Y.js} +1 -1
  408. package/payload/server/public/assets/page-BU5vlY9Y.js.br +0 -0
  409. package/payload/server/public/assets/page-BU5vlY9Y.js.gz +0 -0
  410. package/payload/server/public/assets/{page-BbBCu9iP.js → page-DXz_K10G.js} +3 -3
  411. package/payload/server/public/assets/page-DXz_K10G.js.br +0 -0
  412. package/payload/server/public/assets/page-DXz_K10G.js.gz +0 -0
  413. package/payload/server/public/assets/{pdf-render-ynIPXfRA.js → pdf-render-B5af7vu1.js} +1 -1
  414. package/payload/server/public/assets/pdf-render-B5af7vu1.js.br +0 -0
  415. package/payload/server/public/assets/pdf-render-B5af7vu1.js.gz +0 -0
  416. package/payload/server/public/assets/pie-ZZUOXDRM-BWsRCj8p.js +1 -0
  417. package/payload/server/public/assets/pie-ZZUOXDRM-BWsRCj8p.js.br +0 -0
  418. package/payload/server/public/assets/{pieDiagram-DEJITSTG-B2TxkbHK.js → pieDiagram-DEJITSTG-ChS9jalQ.js} +1 -1
  419. package/payload/server/public/assets/pieDiagram-DEJITSTG-ChS9jalQ.js.br +0 -0
  420. package/payload/server/public/assets/pieDiagram-DEJITSTG-ChS9jalQ.js.gz +0 -0
  421. package/payload/server/public/assets/play-CmSyYrB6.js +1 -0
  422. package/payload/server/public/assets/play-CmSyYrB6.js.br +0 -0
  423. package/payload/server/public/assets/play-CmSyYrB6.js.gz +0 -0
  424. package/payload/server/public/assets/{public-DkObqkzL.js → public-BmA3-jLj.js} +1 -1
  425. package/payload/server/public/assets/public-BmA3-jLj.js.br +0 -0
  426. package/payload/server/public/assets/public-BmA3-jLj.js.gz +0 -0
  427. package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-GsMxIJuS.js → quadrantDiagram-34T5L4WZ-BxLfRK0z.js} +1 -1
  428. package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-BxLfRK0z.js.br +0 -0
  429. package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-BxLfRK0z.js.gz +0 -0
  430. package/payload/server/public/assets/radar-PYXPWWZC-Gxbt2rGT.js +1 -0
  431. package/payload/server/public/assets/radar-PYXPWWZC-Gxbt2rGT.js.br +0 -0
  432. package/payload/server/public/assets/{reduce-CfkEiHc9.js → reduce-BvezuHIe.js} +1 -1
  433. package/payload/server/public/assets/reduce-BvezuHIe.js.br +0 -0
  434. package/payload/server/public/assets/reduce-BvezuHIe.js.gz +0 -0
  435. package/payload/server/public/assets/{requirementDiagram-MS252O5E-DqNprm-1.js → requirementDiagram-MS252O5E-CWy48VI3.js} +1 -1
  436. package/payload/server/public/assets/requirementDiagram-MS252O5E-CWy48VI3.js.br +0 -0
  437. package/payload/server/public/assets/requirementDiagram-MS252O5E-CWy48VI3.js.gz +0 -0
  438. package/payload/server/public/assets/{rotate-ccw-DgMO69nh.js → rotate-ccw-fCH0LSMq.js} +1 -1
  439. package/payload/server/public/assets/rotate-ccw-fCH0LSMq.js.br +0 -0
  440. package/payload/server/public/assets/rotate-ccw-fCH0LSMq.js.gz +0 -0
  441. package/payload/server/public/assets/{routines-D9kvg_Xu.js → routines-BeFrmkls.js} +1 -1
  442. package/payload/server/public/assets/routines-BeFrmkls.js.br +0 -0
  443. package/payload/server/public/assets/routines-BeFrmkls.js.gz +0 -0
  444. package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-B-kRuiuz.js → sankeyDiagram-XADWPNL6-BBCLEJA3.js} +1 -1
  445. package/payload/server/public/assets/sankeyDiagram-XADWPNL6-BBCLEJA3.js.br +0 -0
  446. package/payload/server/public/assets/sankeyDiagram-XADWPNL6-BBCLEJA3.js.gz +0 -0
  447. package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-DEhL9g3K.js → sequenceDiagram-FGHM5R23-wu64F04G.js} +1 -1
  448. package/payload/server/public/assets/sequenceDiagram-FGHM5R23-wu64F04G.js.br +0 -0
  449. package/payload/server/public/assets/sequenceDiagram-FGHM5R23-wu64F04G.js.gz +0 -0
  450. package/payload/server/public/assets/{skills-l5I9HZ3D.js → skills-mjls5HBa.js} +1 -1
  451. package/payload/server/public/assets/skills-mjls5HBa.js.br +0 -0
  452. package/payload/server/public/assets/skills-mjls5HBa.js.gz +0 -0
  453. package/payload/server/public/assets/{src-BrAT6wKv.js → src-BvINb2fL.js} +1 -1
  454. package/payload/server/public/assets/src-BvINb2fL.js.br +0 -0
  455. package/payload/server/public/assets/src-BvINb2fL.js.gz +0 -0
  456. package/payload/server/public/assets/{stateDiagram-FHFEXIEX-Q-g6BHdz.js → stateDiagram-FHFEXIEX-Bq6BFFDC.js} +1 -1
  457. package/payload/server/public/assets/stateDiagram-FHFEXIEX-Bq6BFFDC.js.br +0 -0
  458. package/payload/server/public/assets/stateDiagram-FHFEXIEX-Bq6BFFDC.js.gz +0 -0
  459. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-PxPsWt1r.js +1 -0
  460. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-PxPsWt1r.js.br +0 -0
  461. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-PxPsWt1r.js.gz +0 -0
  462. package/payload/server/public/assets/{tasks-C2qJMv6i.js → tasks-p6puHHD0.js} +1 -1
  463. package/payload/server/public/assets/tasks-p6puHHD0.js.br +0 -0
  464. package/payload/server/public/assets/tasks-p6puHHD0.js.gz +0 -0
  465. package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-B3-52q4Q.js → timeline-definition-GMOUNBTQ-DTdvVZp-.js} +1 -1
  466. package/payload/server/public/assets/timeline-definition-GMOUNBTQ-DTdvVZp-.js.br +0 -0
  467. package/payload/server/public/assets/timeline-definition-GMOUNBTQ-DTdvVZp-.js.gz +0 -0
  468. package/payload/server/public/assets/treeView-SZITEDCU-Bl-aPmE3.js +1 -0
  469. package/payload/server/public/assets/treeView-SZITEDCU-Bl-aPmE3.js.br +0 -0
  470. package/payload/server/public/assets/treemap-W4RFUUIX-CUxE8Ofg.js +1 -0
  471. package/payload/server/public/assets/treemap-W4RFUUIX-CUxE8Ofg.js.br +0 -0
  472. package/payload/server/public/assets/{triangle-alert-BnC67uSs.js → triangle-alert-CrZ1ewbd.js} +1 -1
  473. package/payload/server/public/assets/triangle-alert-CrZ1ewbd.js.br +0 -0
  474. package/payload/server/public/assets/triangle-alert-CrZ1ewbd.js.gz +0 -0
  475. package/payload/server/public/assets/{useCopyFeedback-1RmgkTFh.js → useCopyFeedback-zOQNrIwd.js} +1 -1
  476. package/payload/server/public/assets/useCopyFeedback-zOQNrIwd.js.br +0 -0
  477. package/payload/server/public/assets/useCopyFeedback-zOQNrIwd.js.gz +0 -0
  478. package/payload/server/public/assets/{useMediaQuery-BQslddHQ.js → useMediaQuery-BmG090FR.js} +1 -1
  479. package/payload/server/public/assets/useMediaQuery-BmG090FR.js.br +0 -0
  480. package/payload/server/public/assets/useMediaQuery-BmG090FR.js.gz +0 -0
  481. package/payload/server/public/assets/{useVoiceRecorder-BeZNQEC4.js → useVoiceRecorder-9pf6FFJ-.js} +2 -2
  482. package/payload/server/public/assets/useVoiceRecorder-9pf6FFJ-.js.br +0 -0
  483. package/payload/server/public/assets/useVoiceRecorder-9pf6FFJ-.js.gz +0 -0
  484. package/payload/server/public/assets/{vennDiagram-DHZGUBPP-Bzm1VDi1.js → vennDiagram-DHZGUBPP-CigqIBdl.js} +1 -1
  485. package/payload/server/public/assets/vennDiagram-DHZGUBPP-CigqIBdl.js.br +0 -0
  486. package/payload/server/public/assets/vennDiagram-DHZGUBPP-CigqIBdl.js.gz +0 -0
  487. package/payload/server/public/assets/wardley-RL74JXVD-DPB13D22.js +1 -0
  488. package/payload/server/public/assets/wardley-RL74JXVD-DPB13D22.js.br +0 -0
  489. package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-DIqGZr4v.js → wardleyDiagram-NUSXRM2D-VhV1plUD.js} +1 -1
  490. package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-VhV1plUD.js.br +0 -0
  491. package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-VhV1plUD.js.gz +0 -0
  492. package/payload/server/public/assets/{wrench-D4ufQG6C.js → wrench-k4GYG5rc.js} +1 -1
  493. package/payload/server/public/assets/wrench-k4GYG5rc.js.br +0 -0
  494. package/payload/server/public/assets/wrench-k4GYG5rc.js.gz +0 -0
  495. package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-0W2L2hQA.js → xychartDiagram-5P7HB3ND-DGkkNLZt.js} +1 -1
  496. package/payload/server/public/assets/xychartDiagram-5P7HB3ND-DGkkNLZt.js.br +0 -0
  497. package/payload/server/public/assets/xychartDiagram-5P7HB3ND-DGkkNLZt.js.gz +0 -0
  498. package/payload/server/public/browser.html +6 -6
  499. package/payload/server/public/calendar.html +9 -9
  500. package/payload/server/public/chat.html +16 -16
  501. package/payload/server/public/data.html +15 -15
  502. package/payload/server/public/field.html +4 -4
  503. package/payload/server/public/graph.html +11 -11
  504. package/payload/server/public/index.html +17 -17
  505. package/payload/server/public/operator.html +17 -17
  506. package/payload/server/public/public.html +16 -16
  507. package/payload/server/public/routines.html +10 -10
  508. package/payload/server/public/skills.html +7 -7
  509. package/payload/server/public/tasks.html +8 -8
  510. package/payload/server/server.js +2930 -2125
  511. package/payload/platform/lib/dispatch-read/src/config.d.ts +0 -26
  512. package/payload/platform/lib/dispatch-read/src/types.d.ts +0 -143
  513. package/payload/server/public/assets/AdminLoginScreens-Dp6k1XgD.js.br +0 -0
  514. package/payload/server/public/assets/AdminLoginScreens-Dp6k1XgD.js.gz +0 -0
  515. package/payload/server/public/assets/AdminShell-D-wB90c3.js +0 -3
  516. package/payload/server/public/assets/AdminShell-D-wB90c3.js.br +0 -0
  517. package/payload/server/public/assets/AdminShell-D-wB90c3.js.gz +0 -0
  518. package/payload/server/public/assets/activity-BJxhblz-.js.br +0 -0
  519. package/payload/server/public/assets/activity-BJxhblz-.js.gz +0 -0
  520. package/payload/server/public/assets/admin-DzEi8shs.js +0 -1
  521. package/payload/server/public/assets/admin-DzEi8shs.js.br +0 -0
  522. package/payload/server/public/assets/admin-DzEi8shs.js.gz +0 -0
  523. package/payload/server/public/assets/agents-DTL8kjfD.js.br +0 -0
  524. package/payload/server/public/assets/agents-DTL8kjfD.js.gz +0 -0
  525. package/payload/server/public/assets/arc-CWXBKNZd.js.br +0 -0
  526. package/payload/server/public/assets/arc-CWXBKNZd.js.gz +0 -0
  527. package/payload/server/public/assets/architecture-YZFGNWBL-CIL4I0fc.js +0 -1
  528. package/payload/server/public/assets/architecture-YZFGNWBL-CIL4I0fc.js.br +0 -0
  529. package/payload/server/public/assets/architectureDiagram-Q4EWVU46-C-KPMyG4.js.br +0 -0
  530. package/payload/server/public/assets/architectureDiagram-Q4EWVU46-C-KPMyG4.js.gz +0 -0
  531. package/payload/server/public/assets/blockDiagram-DXYQGD6D-DkYbV9Sf.js.br +0 -0
  532. package/payload/server/public/assets/blockDiagram-DXYQGD6D-DkYbV9Sf.js.gz +0 -0
  533. package/payload/server/public/assets/browser-UZp75zhx.js.br +0 -0
  534. package/payload/server/public/assets/browser-UZp75zhx.js.gz +0 -0
  535. package/payload/server/public/assets/c4Diagram-AHTNJAMY-EYW4kdlx.js.br +0 -0
  536. package/payload/server/public/assets/calendar-Dfo0O2K_.js.br +0 -0
  537. package/payload/server/public/assets/calendar-Dfo0O2K_.js.gz +0 -0
  538. package/payload/server/public/assets/channel-CbHmRjy_.js +0 -1
  539. package/payload/server/public/assets/channel-CbHmRjy_.js.br +0 -0
  540. package/payload/server/public/assets/chat-ByJAvEWZ.js +0 -1
  541. package/payload/server/public/assets/chat-ByJAvEWZ.js.br +0 -0
  542. package/payload/server/public/assets/chat-ByJAvEWZ.js.gz +0 -0
  543. package/payload/server/public/assets/chevron-left-iG7sYNm7.js +0 -1
  544. package/payload/server/public/assets/chevron-left-iG7sYNm7.js.br +0 -0
  545. package/payload/server/public/assets/chunk-2KRD3SAO-CmAF1UmH.js.br +0 -0
  546. package/payload/server/public/assets/chunk-2KRD3SAO-CmAF1UmH.js.gz +0 -0
  547. package/payload/server/public/assets/chunk-336JU56O-CyhmJeMM.js.br +0 -0
  548. package/payload/server/public/assets/chunk-336JU56O-CyhmJeMM.js.gz +0 -0
  549. package/payload/server/public/assets/chunk-426QAEUC-C2tnHCM7.js +0 -1
  550. package/payload/server/public/assets/chunk-426QAEUC-C2tnHCM7.js.br +0 -0
  551. package/payload/server/public/assets/chunk-426QAEUC-C2tnHCM7.js.gz +0 -0
  552. package/payload/server/public/assets/chunk-4BX2VUAB-DCzC40-Y.js.br +0 -0
  553. package/payload/server/public/assets/chunk-4BX2VUAB-DCzC40-Y.js.gz +0 -0
  554. package/payload/server/public/assets/chunk-4TB4RGXK-D9BXrSA_.js.br +0 -0
  555. package/payload/server/public/assets/chunk-4TB4RGXK-D9BXrSA_.js.gz +0 -0
  556. package/payload/server/public/assets/chunk-55IACEB6-BwXC-qTZ.js.br +0 -0
  557. package/payload/server/public/assets/chunk-55IACEB6-BwXC-qTZ.js.gz +0 -0
  558. package/payload/server/public/assets/chunk-5FUZZQ4R-De7QtXxM.js.br +0 -0
  559. package/payload/server/public/assets/chunk-5FUZZQ4R-De7QtXxM.js.gz +0 -0
  560. package/payload/server/public/assets/chunk-5PVQY5BW-B5tsJiCq.js.br +0 -0
  561. package/payload/server/public/assets/chunk-5PVQY5BW-B5tsJiCq.js.gz +0 -0
  562. package/payload/server/public/assets/chunk-67CJDMHE-BjTh9STV.js.br +0 -0
  563. package/payload/server/public/assets/chunk-67CJDMHE-BjTh9STV.js.gz +0 -0
  564. package/payload/server/public/assets/chunk-7N4EOEYR-91klRswn.js.br +0 -0
  565. package/payload/server/public/assets/chunk-7N4EOEYR-91klRswn.js.gz +0 -0
  566. package/payload/server/public/assets/chunk-AA7GKIK3-XFPGEoBu.js.br +0 -3
  567. package/payload/server/public/assets/chunk-AA7GKIK3-XFPGEoBu.js.gz +0 -0
  568. package/payload/server/public/assets/chunk-BSJP7CBP-B7wgMyWq.js.br +0 -0
  569. package/payload/server/public/assets/chunk-BSJP7CBP-B7wgMyWq.js.gz +0 -0
  570. package/payload/server/public/assets/chunk-CIAEETIT-WPy9vcOo.js.br +0 -0
  571. package/payload/server/public/assets/chunk-CIAEETIT-WPy9vcOo.js.gz +0 -0
  572. package/payload/server/public/assets/chunk-EDXVE4YY-D_2JIFFG.js.br +0 -0
  573. package/payload/server/public/assets/chunk-EDXVE4YY-D_2JIFFG.js.gz +0 -0
  574. package/payload/server/public/assets/chunk-ENJZ2VHE-xORReRt0.js.br +0 -0
  575. package/payload/server/public/assets/chunk-ENJZ2VHE-xORReRt0.js.gz +0 -0
  576. package/payload/server/public/assets/chunk-FMBD7UC4-BZsDu4nl.js.br +0 -0
  577. package/payload/server/public/assets/chunk-FMBD7UC4-BZsDu4nl.js.gz +0 -0
  578. package/payload/server/public/assets/chunk-FOC6F5B3-QzUp8wXX.js.br +0 -0
  579. package/payload/server/public/assets/chunk-FOC6F5B3-QzUp8wXX.js.gz +0 -0
  580. package/payload/server/public/assets/chunk-ICPOFSXX-B64S7i7x.js.br +0 -0
  581. package/payload/server/public/assets/chunk-ICPOFSXX-B64S7i7x.js.gz +0 -0
  582. package/payload/server/public/assets/chunk-K5T4RW27-DzPc6X1_.js.br +0 -0
  583. package/payload/server/public/assets/chunk-K5T4RW27-DzPc6X1_.js.gz +0 -0
  584. package/payload/server/public/assets/chunk-KGLVRYIC-A2rPnD7k.js.br +0 -1
  585. package/payload/server/public/assets/chunk-KGLVRYIC-A2rPnD7k.js.gz +0 -0
  586. package/payload/server/public/assets/chunk-LIHQZDEY-CaWX327m.js.br +0 -0
  587. package/payload/server/public/assets/chunk-LIHQZDEY-CaWX327m.js.gz +0 -0
  588. package/payload/server/public/assets/chunk-ORNJ4GCN-zrWhdmnc.js.br +0 -0
  589. package/payload/server/public/assets/chunk-ORNJ4GCN-zrWhdmnc.js.gz +0 -0
  590. package/payload/server/public/assets/chunk-OYMX7WX6-B_2qQir6.js.br +0 -0
  591. package/payload/server/public/assets/chunk-OYMX7WX6-B_2qQir6.js.gz +0 -0
  592. package/payload/server/public/assets/chunk-QZHKN3VN-BzgrgCTo.js +0 -1
  593. package/payload/server/public/assets/chunk-QZHKN3VN-BzgrgCTo.js.br +0 -0
  594. package/payload/server/public/assets/chunk-QZHKN3VN-BzgrgCTo.js.gz +0 -0
  595. package/payload/server/public/assets/chunk-U2HBQHQK-B-IYgxsc.js.br +0 -0
  596. package/payload/server/public/assets/chunk-U2HBQHQK-B-IYgxsc.js.gz +0 -0
  597. package/payload/server/public/assets/chunk-X2U36JSP-Y9Y1_EuG.js.br +0 -0
  598. package/payload/server/public/assets/chunk-X2U36JSP-Y9Y1_EuG.js.gz +0 -0
  599. package/payload/server/public/assets/chunk-XPW4576I-C-6yETG_.js.br +0 -0
  600. package/payload/server/public/assets/chunk-XPW4576I-C-6yETG_.js.gz +0 -0
  601. package/payload/server/public/assets/chunk-YZCP3GAM-KAuQIU5n.js.br +0 -0
  602. package/payload/server/public/assets/chunk-YZCP3GAM-KAuQIU5n.js.gz +0 -0
  603. package/payload/server/public/assets/chunk-ZZ45TVLE-BJcH3KDH.js.br +0 -0
  604. package/payload/server/public/assets/chunk-ZZ45TVLE-BJcH3KDH.js.gz +0 -0
  605. package/payload/server/public/assets/classDiagram-6PBFFD2Q-BxvqeBEj.js +0 -1
  606. package/payload/server/public/assets/classDiagram-6PBFFD2Q-BxvqeBEj.js.br +0 -0
  607. package/payload/server/public/assets/classDiagram-6PBFFD2Q-BxvqeBEj.js.gz +0 -0
  608. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-R3-NzMRG.js +0 -1
  609. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-R3-NzMRG.js.br +0 -0
  610. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-R3-NzMRG.js.gz +0 -0
  611. package/payload/server/public/assets/clock-xSs0UF10.js +0 -1
  612. package/payload/server/public/assets/clock-xSs0UF10.js.br +0 -0
  613. package/payload/server/public/assets/clock-xSs0UF10.js.gz +0 -0
  614. package/payload/server/public/assets/clone-QdOE5SXR.js +0 -1
  615. package/payload/server/public/assets/copy-CGI2jioK.js.br +0 -0
  616. package/payload/server/public/assets/copy-CGI2jioK.js.gz +0 -0
  617. package/payload/server/public/assets/cose-bilkent-S5V4N54A-CcXj8vHa.js.br +0 -0
  618. package/payload/server/public/assets/cose-bilkent-S5V4N54A-CcXj8vHa.js.gz +0 -0
  619. package/payload/server/public/assets/dagre-DOtq9kYX.js.br +0 -0
  620. package/payload/server/public/assets/dagre-DOtq9kYX.js.gz +0 -0
  621. package/payload/server/public/assets/dagre-KV5264BT-BOhQs4rS.js.br +0 -0
  622. package/payload/server/public/assets/dagre-KV5264BT-BOhQs4rS.js.gz +0 -0
  623. package/payload/server/public/assets/data-dvwK4BcP.js +0 -1
  624. package/payload/server/public/assets/data-dvwK4BcP.js.br +0 -0
  625. package/payload/server/public/assets/data-dvwK4BcP.js.gz +0 -0
  626. package/payload/server/public/assets/diagram-5BDNPKRD-CqJFt5ZM.js.br +0 -0
  627. package/payload/server/public/assets/diagram-5BDNPKRD-CqJFt5ZM.js.gz +0 -0
  628. package/payload/server/public/assets/diagram-G4DWMVQ6-WQIyAZMn.js.br +0 -0
  629. package/payload/server/public/assets/diagram-G4DWMVQ6-WQIyAZMn.js.gz +0 -0
  630. package/payload/server/public/assets/diagram-MMDJMWI5-jcKc4a2w.js.br +0 -0
  631. package/payload/server/public/assets/diagram-MMDJMWI5-jcKc4a2w.js.gz +0 -0
  632. package/payload/server/public/assets/diagram-TYMM5635-Bbt2KuWe.js.br +0 -0
  633. package/payload/server/public/assets/diagram-TYMM5635-Bbt2KuWe.js.gz +0 -0
  634. package/payload/server/public/assets/dispatch-Dx9-ty1K.js +0 -1
  635. package/payload/server/public/assets/dispatch-Dx9-ty1K.js.br +0 -0
  636. package/payload/server/public/assets/dispatch-Dx9-ty1K.js.gz +0 -0
  637. package/payload/server/public/assets/dist-9RiN6lky.js.br +0 -0
  638. package/payload/server/public/assets/dist-9RiN6lky.js.gz +0 -0
  639. package/payload/server/public/assets/erDiagram-SMLLAGMA-BBm6azPJ.js.br +0 -0
  640. package/payload/server/public/assets/erDiagram-SMLLAGMA-BBm6azPJ.js.gz +0 -0
  641. package/payload/server/public/assets/field-D-P6CsWA.js +0 -1
  642. package/payload/server/public/assets/field-D-P6CsWA.js.br +0 -0
  643. package/payload/server/public/assets/field-D-P6CsWA.js.gz +0 -0
  644. package/payload/server/public/assets/file-text-RWintp9q.js.br +0 -0
  645. package/payload/server/public/assets/file-text-RWintp9q.js.gz +0 -0
  646. package/payload/server/public/assets/flatten-BurGKeIy.js.br +0 -0
  647. package/payload/server/public/assets/flatten-BurGKeIy.js.gz +0 -0
  648. package/payload/server/public/assets/flowDiagram-DWJPFMVM-_r45DYJ8.js.br +0 -0
  649. package/payload/server/public/assets/flowDiagram-DWJPFMVM-_r45DYJ8.js.gz +0 -0
  650. package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-Bjgj9Bej.js.br +0 -0
  651. package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-Bjgj9Bej.js.gz +0 -0
  652. package/payload/server/public/assets/gitGraph-7Q5UKJZL-DdbK59od.js +0 -1
  653. package/payload/server/public/assets/gitGraph-7Q5UKJZL-DdbK59od.js.br +0 -0
  654. package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-DTRdhGJA.js.br +0 -0
  655. package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-DTRdhGJA.js.gz +0 -0
  656. package/payload/server/public/assets/graph-CpBlfYrJ.js.br +0 -0
  657. package/payload/server/public/assets/graph-CpBlfYrJ.js.gz +0 -0
  658. package/payload/server/public/assets/graph-labels-BOMyPppX.js.br +0 -0
  659. package/payload/server/public/assets/graph-labels-BOMyPppX.js.gz +0 -0
  660. package/payload/server/public/assets/graphlib-DT4h6-4N.js.br +0 -0
  661. package/payload/server/public/assets/graphlib-DT4h6-4N.js.gz +0 -0
  662. package/payload/server/public/assets/info-OMHHGYJF-BR8gm0wj.js +0 -1
  663. package/payload/server/public/assets/info-OMHHGYJF-BR8gm0wj.js.br +0 -0
  664. package/payload/server/public/assets/infoDiagram-42DDH7IO-Cr3Efss6.js +0 -2
  665. package/payload/server/public/assets/infoDiagram-42DDH7IO-Cr3Efss6.js.br +0 -0
  666. package/payload/server/public/assets/infoDiagram-42DDH7IO-Cr3Efss6.js.gz +0 -0
  667. package/payload/server/public/assets/isEmpty-C5v0-EY7.js.br +0 -0
  668. package/payload/server/public/assets/isEmpty-C5v0-EY7.js.gz +0 -0
  669. package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-BklHzVHm.js.br +0 -0
  670. package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-BklHzVHm.js.gz +0 -0
  671. package/payload/server/public/assets/journeyDiagram-VCZTEJTY-Ckxx2CmV.js.br +0 -0
  672. package/payload/server/public/assets/journeyDiagram-VCZTEJTY-Ckxx2CmV.js.gz +0 -0
  673. package/payload/server/public/assets/jsx-runtime-5lmxFBIw.js.br +0 -0
  674. package/payload/server/public/assets/jsx-runtime-5lmxFBIw.js.gz +0 -0
  675. package/payload/server/public/assets/jsx-runtime-DxsQ5Y-z.css.br +0 -0
  676. package/payload/server/public/assets/kanban-definition-6JOO6SKY-BLELXpqn.js.br +0 -0
  677. package/payload/server/public/assets/kanban-definition-6JOO6SKY-BLELXpqn.js.gz +0 -0
  678. package/payload/server/public/assets/line-BkI5icOY.js.br +0 -0
  679. package/payload/server/public/assets/line-BkI5icOY.js.gz +0 -0
  680. package/payload/server/public/assets/linear-B64ANRVs.js.br +0 -0
  681. package/payload/server/public/assets/linear-B64ANRVs.js.gz +0 -0
  682. package/payload/server/public/assets/mermaid-parser.core-qXPKkdJe.js.br +0 -0
  683. package/payload/server/public/assets/mermaid-parser.core-qXPKkdJe.js.gz +0 -0
  684. package/payload/server/public/assets/mermaid.core-BMsz65Wy.js.br +0 -0
  685. package/payload/server/public/assets/mermaid.core-BMsz65Wy.js.gz +0 -0
  686. package/payload/server/public/assets/mindmap-definition-QFDTVHPH-DhFTS2sx.js.br +0 -0
  687. package/payload/server/public/assets/mindmap-definition-QFDTVHPH-DhFTS2sx.js.gz +0 -0
  688. package/payload/server/public/assets/operator-DFgW6GiH.js +0 -1
  689. package/payload/server/public/assets/operator-DFgW6GiH.js.br +0 -0
  690. package/payload/server/public/assets/operator-DFgW6GiH.js.gz +0 -0
  691. package/payload/server/public/assets/ordinal-CJ_pL32Z.js.br +0 -0
  692. package/payload/server/public/assets/ordinal-CJ_pL32Z.js.gz +0 -0
  693. package/payload/server/public/assets/packet-4T2RLAQJ-B31PbAeA.js +0 -1
  694. package/payload/server/public/assets/packet-4T2RLAQJ-B31PbAeA.js.br +0 -0
  695. package/payload/server/public/assets/page-BRShHSH0.js.br +0 -0
  696. package/payload/server/public/assets/page-BRShHSH0.js.gz +0 -0
  697. package/payload/server/public/assets/page-BbBCu9iP.js.br +0 -0
  698. package/payload/server/public/assets/page-BbBCu9iP.js.gz +0 -0
  699. package/payload/server/public/assets/pdf-render-ynIPXfRA.js.br +0 -0
  700. package/payload/server/public/assets/pdf-render-ynIPXfRA.js.gz +0 -0
  701. package/payload/server/public/assets/pie-ZZUOXDRM-BbSc1VXl.js +0 -1
  702. package/payload/server/public/assets/pie-ZZUOXDRM-BbSc1VXl.js.br +0 -0
  703. package/payload/server/public/assets/pieDiagram-DEJITSTG-B2TxkbHK.js.br +0 -0
  704. package/payload/server/public/assets/pieDiagram-DEJITSTG-B2TxkbHK.js.gz +0 -0
  705. package/payload/server/public/assets/play-BJxUaf6-.js +0 -1
  706. package/payload/server/public/assets/play-BJxUaf6-.js.br +0 -0
  707. package/payload/server/public/assets/play-BJxUaf6-.js.gz +0 -0
  708. package/payload/server/public/assets/public-DkObqkzL.js.br +0 -0
  709. package/payload/server/public/assets/public-DkObqkzL.js.gz +0 -0
  710. package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-GsMxIJuS.js.br +0 -0
  711. package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-GsMxIJuS.js.gz +0 -0
  712. package/payload/server/public/assets/radar-PYXPWWZC-B0La8_mZ.js +0 -1
  713. package/payload/server/public/assets/radar-PYXPWWZC-B0La8_mZ.js.br +0 -0
  714. package/payload/server/public/assets/reduce-CfkEiHc9.js.br +0 -0
  715. package/payload/server/public/assets/reduce-CfkEiHc9.js.gz +0 -0
  716. package/payload/server/public/assets/requirementDiagram-MS252O5E-DqNprm-1.js.br +0 -0
  717. package/payload/server/public/assets/requirementDiagram-MS252O5E-DqNprm-1.js.gz +0 -0
  718. package/payload/server/public/assets/rotate-ccw-DgMO69nh.js.br +0 -0
  719. package/payload/server/public/assets/rotate-ccw-DgMO69nh.js.gz +0 -0
  720. package/payload/server/public/assets/routines-D9kvg_Xu.js.br +0 -0
  721. package/payload/server/public/assets/routines-D9kvg_Xu.js.gz +0 -0
  722. package/payload/server/public/assets/sankeyDiagram-XADWPNL6-B-kRuiuz.js.br +0 -0
  723. package/payload/server/public/assets/sankeyDiagram-XADWPNL6-B-kRuiuz.js.gz +0 -0
  724. package/payload/server/public/assets/sequenceDiagram-FGHM5R23-DEhL9g3K.js.br +0 -0
  725. package/payload/server/public/assets/sequenceDiagram-FGHM5R23-DEhL9g3K.js.gz +0 -0
  726. package/payload/server/public/assets/skills-l5I9HZ3D.js.br +0 -0
  727. package/payload/server/public/assets/skills-l5I9HZ3D.js.gz +0 -0
  728. package/payload/server/public/assets/src-BrAT6wKv.js.br +0 -0
  729. package/payload/server/public/assets/src-BrAT6wKv.js.gz +0 -0
  730. package/payload/server/public/assets/stateDiagram-FHFEXIEX-Q-g6BHdz.js.br +0 -0
  731. package/payload/server/public/assets/stateDiagram-FHFEXIEX-Q-g6BHdz.js.gz +0 -0
  732. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-ssRWItVj.js +0 -1
  733. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-ssRWItVj.js.br +0 -0
  734. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-ssRWItVj.js.gz +0 -0
  735. package/payload/server/public/assets/tasks-C2qJMv6i.js.br +0 -0
  736. package/payload/server/public/assets/tasks-C2qJMv6i.js.gz +0 -0
  737. package/payload/server/public/assets/timeline-definition-GMOUNBTQ-B3-52q4Q.js.br +0 -0
  738. package/payload/server/public/assets/timeline-definition-GMOUNBTQ-B3-52q4Q.js.gz +0 -0
  739. package/payload/server/public/assets/treeView-SZITEDCU-BBR3hu9P.js +0 -1
  740. package/payload/server/public/assets/treeView-SZITEDCU-BBR3hu9P.js.br +0 -0
  741. package/payload/server/public/assets/treemap-W4RFUUIX-wSQMuzBT.js +0 -1
  742. package/payload/server/public/assets/treemap-W4RFUUIX-wSQMuzBT.js.br +0 -0
  743. package/payload/server/public/assets/triangle-alert-BnC67uSs.js.br +0 -0
  744. package/payload/server/public/assets/triangle-alert-BnC67uSs.js.gz +0 -0
  745. package/payload/server/public/assets/useCopyFeedback-1RmgkTFh.js.br +0 -0
  746. package/payload/server/public/assets/useCopyFeedback-1RmgkTFh.js.gz +0 -0
  747. package/payload/server/public/assets/useMediaQuery-BQslddHQ.js.br +0 -0
  748. package/payload/server/public/assets/useMediaQuery-BQslddHQ.js.gz +0 -0
  749. package/payload/server/public/assets/useVoiceRecorder-BeZNQEC4.js.br +0 -0
  750. package/payload/server/public/assets/useVoiceRecorder-BeZNQEC4.js.gz +0 -0
  751. package/payload/server/public/assets/vennDiagram-DHZGUBPP-Bzm1VDi1.js.br +0 -0
  752. package/payload/server/public/assets/vennDiagram-DHZGUBPP-Bzm1VDi1.js.gz +0 -0
  753. package/payload/server/public/assets/wardley-RL74JXVD-3QaECtQN.js +0 -1
  754. package/payload/server/public/assets/wardley-RL74JXVD-3QaECtQN.js.br +0 -0
  755. package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-DIqGZr4v.js.br +0 -0
  756. package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-DIqGZr4v.js.gz +0 -0
  757. package/payload/server/public/assets/wrench-D4ufQG6C.js.br +0 -0
  758. package/payload/server/public/assets/wrench-D4ufQG6C.js.gz +0 -0
  759. package/payload/server/public/assets/xychartDiagram-5P7HB3ND-0W2L2hQA.js.br +0 -0
  760. package/payload/server/public/assets/xychartDiagram-5P7HB3ND-0W2L2hQA.js.gz +0 -0
  761. package/payload/server/public/dispatch.html +0 -20
  762. /package/payload/server/public/assets/{_baseFor-D1duyODO.js → _baseFor-BApe6Tla.js} +0 -0
  763. /package/payload/server/public/assets/{_baseFor-D1duyODO.js.br → _baseFor-BApe6Tla.js.br} +0 -0
  764. /package/payload/server/public/assets/{_baseFor-D1duyODO.js.gz → _baseFor-BApe6Tla.js.gz} +0 -0
  765. /package/payload/server/public/assets/{array-j7Xa9Fap.js → array-eiH4WfvY.js} +0 -0
  766. /package/payload/server/public/assets/{array-j7Xa9Fap.js.br → array-eiH4WfvY.js.br} +0 -0
  767. /package/payload/server/public/assets/{chunk-DlZTsV_O.js → chunk-BycB0eMI.js} +0 -0
  768. /package/payload/server/public/assets/{chunk-DlZTsV_O.js.br → chunk-BycB0eMI.js.br} +0 -0
  769. /package/payload/server/public/assets/{chunk-DlZTsV_O.js.gz → chunk-BycB0eMI.js.gz} +0 -0
  770. /package/payload/server/public/assets/{cytoscape.esm-Dob3eilA.js → cytoscape.esm-BZ6NYo0w.js} +0 -0
  771. /package/payload/server/public/assets/{cytoscape.esm-Dob3eilA.js.br → cytoscape.esm-BZ6NYo0w.js.br} +0 -0
  772. /package/payload/server/public/assets/{cytoscape.esm-Dob3eilA.js.gz → cytoscape.esm-BZ6NYo0w.js.gz} +0 -0
  773. /package/payload/server/public/assets/{defaultLocale-BNILPWh2.js → defaultLocale-DWHqsa6O.js} +0 -0
  774. /package/payload/server/public/assets/{defaultLocale-BNILPWh2.js.br → defaultLocale-DWHqsa6O.js.br} +0 -0
  775. /package/payload/server/public/assets/{defaultLocale-BNILPWh2.js.gz → defaultLocale-DWHqsa6O.js.gz} +0 -0
  776. /package/payload/server/public/assets/{file-download-CN4H4Eih.js → file-download-B7zwa78w.js} +0 -0
  777. /package/payload/server/public/assets/{file-download-CN4H4Eih.js.br → file-download-B7zwa78w.js.br} +0 -0
  778. /package/payload/server/public/assets/{file-download-CN4H4Eih.js.gz → file-download-B7zwa78w.js.gz} +0 -0
  779. /package/payload/server/public/assets/{init-ve51bpJo.js → init-BdkYWjJJ.js} +0 -0
  780. /package/payload/server/public/assets/{init-ve51bpJo.js.br → init-BdkYWjJJ.js.br} +0 -0
  781. /package/payload/server/public/assets/{init-ve51bpJo.js.gz → init-BdkYWjJJ.js.gz} +0 -0
  782. /package/payload/server/public/assets/{katex-CJNaolDQ.js → katex-BCzoGtFh.js} +0 -0
  783. /package/payload/server/public/assets/{katex-CJNaolDQ.js.br → katex-BCzoGtFh.js.br} +0 -0
  784. /package/payload/server/public/assets/{katex-CJNaolDQ.js.gz → katex-BCzoGtFh.js.gz} +0 -0
  785. /package/payload/server/public/assets/{path-B4emajHp.js → path-DY2qBuPM.js} +0 -0
  786. /package/payload/server/public/assets/{path-B4emajHp.js.br → path-DY2qBuPM.js.br} +0 -0
  787. /package/payload/server/public/assets/{path-B4emajHp.js.gz → path-DY2qBuPM.js.gz} +0 -0
  788. /package/payload/server/public/assets/{preload-helper-3YNEDsJZ.js → preload-helper-eAV8hweq.js} +0 -0
  789. /package/payload/server/public/assets/{preload-helper-3YNEDsJZ.js.br → preload-helper-eAV8hweq.js.br} +0 -0
  790. /package/payload/server/public/assets/{preload-helper-3YNEDsJZ.js.gz → preload-helper-eAV8hweq.js.gz} +0 -0
  791. /package/payload/server/public/assets/{rough.esm-zabqYs6f.js → rough.esm-ec8xsRC7.js} +0 -0
  792. /package/payload/server/public/assets/{rough.esm-zabqYs6f.js.br → rough.esm-ec8xsRC7.js.br} +0 -0
  793. /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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rubytech/create-realagent-code",
3
- "version": "0.1.574",
3
+ "version": "0.1.575",
4
4
  "description": "Install Real Agent — Built for agents. By agents.",
5
5
  "bin": {
6
6
  "create-realagent-code": "./dist/index.js"
@@ -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,9 @@
1
+ {
2
+ "extends": "../../tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "outDir": "dist",
5
+ "rootDir": "src"
6
+ },
7
+ "include": ["src"],
8
+ "exclude": ["src/__tests__"]
9
+ }
@@ -0,0 +1,9 @@
1
+ import { defineConfig } from "vitest/config";
2
+
3
+ export default defineConfig({
4
+ test: {
5
+ environment: "node",
6
+ globals: false,
7
+ include: ["src/__tests__/**/*.test.ts"],
8
+ },
9
+ });
@@ -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