@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
@@ -41,14 +41,18 @@ describe("projectVisit", () => {
41
41
  startDate: "2026-08-07T09:00:00.000Z",
42
42
  endDate: null,
43
43
  purpose: null,
44
- workerId: "W1",
45
44
  siteName: null,
46
45
  customerId: null,
47
46
  customerName: null,
48
47
  jobType: null,
49
- arrivedPressedAt: "2026-08-07T09:05:00.000Z",
50
- arrivedObservedAt: "2026-08-07T08:58:00.000Z",
51
- arrivedObservedDistanceM: 42,
48
+ attendances: [
49
+ {
50
+ workerId: "W1",
51
+ arrivedPressedAt: "2026-08-07T09:05:00.000Z",
52
+ arrivedObservedAt: "2026-08-07T08:58:00.000Z",
53
+ arrivedObservedDistanceM: 42,
54
+ },
55
+ ],
52
56
  }),
53
57
  );
54
58
  expect(v.arrivedPressedAt).toBe("2026-08-07T09:05:00.000Z");
@@ -65,19 +69,114 @@ describe("projectVisit", () => {
65
69
  startDate: null,
66
70
  endDate: null,
67
71
  purpose: null,
68
- workerId: null,
69
72
  siteName: null,
70
73
  customerId: null,
71
74
  customerName: null,
72
75
  jobType: null,
73
- arrivedPressedAt: null,
74
- arrivedObservedAt: null,
75
- arrivedObservedDistanceM: { low: 137, high: 0 },
76
+ attendances: [
77
+ {
78
+ workerId: "W1",
79
+ arrivedPressedAt: null,
80
+ arrivedObservedAt: null,
81
+ arrivedObservedDistanceM: { low: 137, high: 0 },
82
+ },
83
+ ],
76
84
  }),
77
85
  );
78
86
  expect(v.arrivedObservedDistanceM).toBe(137);
79
87
  });
80
88
 
89
+ // Task 2512. The shipped projection returned a scalar `workerId` off a second
90
+ // ATTENDED_BY edge, so a two-worker visit arrived as two records sharing one
91
+ // set of times and drew as two separate visits.
92
+ it("projects a single-attendance visit exactly as Task 2499 returned it", () => {
93
+ const v = projectVisit(
94
+ row({
95
+ visitId: "V5",
96
+ jobId: "J5",
97
+ status: "On site",
98
+ startDate: "2026-08-07T09:00:00.000Z",
99
+ endDate: null,
100
+ purpose: null,
101
+ siteName: null,
102
+ customerId: null,
103
+ customerName: null,
104
+ jobType: null,
105
+ attendances: [
106
+ {
107
+ workerId: "W1",
108
+ arrivedPressedAt: "2026-08-07T09:05:00.000Z",
109
+ arrivedObservedAt: null,
110
+ arrivedObservedDistanceM: null,
111
+ },
112
+ ],
113
+ }),
114
+ );
115
+ expect(v.workerId).toBe("W1");
116
+ expect(v.arrivedPressedAt).toBe("2026-08-07T09:05:00.000Z");
117
+ expect(v.attendances).toHaveLength(1);
118
+ });
119
+
120
+ it("carries two workers on one visit, each with their own arrival", () => {
121
+ const v = projectVisit(
122
+ row({
123
+ visitId: "V6",
124
+ jobId: "J6",
125
+ status: "On site",
126
+ startDate: "2026-08-07T09:00:00.000Z",
127
+ endDate: null,
128
+ purpose: null,
129
+ siteName: null,
130
+ customerId: null,
131
+ customerName: null,
132
+ jobType: null,
133
+ attendances: [
134
+ {
135
+ workerId: "W2",
136
+ arrivedPressedAt: "2026-08-07T09:20:00.000Z",
137
+ arrivedObservedAt: null,
138
+ arrivedObservedDistanceM: null,
139
+ },
140
+ {
141
+ workerId: "W1",
142
+ arrivedPressedAt: "2026-08-07T09:05:00.000Z",
143
+ arrivedObservedAt: null,
144
+ arrivedObservedDistanceM: null,
145
+ },
146
+ ],
147
+ }),
148
+ );
149
+ expect(v.attendances).toHaveLength(2);
150
+ // Sorted, so two reads of one visit cannot order the names differently.
151
+ expect(v.attendances.map((a) => a.workerId)).toEqual(["W1", "W2"]);
152
+ expect(v.attendances[0].arrivedPressedAt).toBe("2026-08-07T09:05:00.000Z");
153
+ expect(v.attendances[1].arrivedPressedAt).toBe("2026-08-07T09:20:00.000Z");
154
+ // The sole-attendee scalars go null rather than picking one of the two: a
155
+ // silent cross-assignment shows one worker another's arrival.
156
+ expect(v.workerId).toBeNull();
157
+ expect(v.arrivedPressedAt).toBeNull();
158
+ });
159
+
160
+ it("returns no attendances for an unallocated visit, never a list holding an empty entry", () => {
161
+ const v = projectVisit(
162
+ row({
163
+ visitId: "V7",
164
+ jobId: null,
165
+ status: "New",
166
+ startDate: null,
167
+ endDate: null,
168
+ purpose: null,
169
+ siteName: null,
170
+ customerId: null,
171
+ customerName: null,
172
+ jobType: null,
173
+ attendances: [],
174
+ }),
175
+ );
176
+ expect(v.attendances).toEqual([]);
177
+ expect(v.workerId).toBeNull();
178
+ });
179
+
81
180
  it("renders an empty string as null so a blank never reads as a real value", () => {
82
181
  const v = projectVisit(
83
182
  row({
@@ -1,6 +1,6 @@
1
1
  import { describe, expect, it, vi } from "vitest";
2
2
  import { __setDriverForTests } from "../session.js";
3
- import { readWorkerDay, readSiteHistory } from "../read.js";
3
+ import { readWorkerDay, readSiteHistory, readFieldVisit } from "../read.js";
4
4
  import { workerForTelegramUser } from "../config.js";
5
5
  import type { DispatchConfig } from "../types.js";
6
6
 
@@ -31,8 +31,23 @@ const ROW = {
31
31
  customerName: "Acme",
32
32
  contactName: "Jo Bell",
33
33
  contactTelephone: "01234 567890",
34
+ addressed: false,
35
+ streetAddress: null,
36
+ addressLocality: null,
37
+ postalCode: null,
34
38
  };
35
39
 
40
+ const ADDRESSED = {
41
+ ...ROW,
42
+ addressed: true,
43
+ streetAddress: "12 High Street",
44
+ addressLocality: "Dunmow",
45
+ postalCode: "CM6 1EJ",
46
+ };
47
+
48
+ const FROM = "2026-08-07T00:00:00.000Z";
49
+ const TO = "2026-08-08T00:00:00.000Z";
50
+
36
51
  describe("readWorkerDay", () => {
37
52
  it("returns the field card shape", async () => {
38
53
  __setDriverForTests(driverReturning([ROW]));
@@ -48,17 +63,39 @@ describe("readWorkerDay", () => {
48
63
  __setDriverForTests(null);
49
64
  });
50
65
 
51
- it("carries no address and no postcode key at all", async () => {
66
+ it("carries no address key when the site has no AT_ADDRESS edge", async () => {
52
67
  __setDriverForTests(driverReturning([ROW]));
53
- const [visit] = await readWorkerDay(
54
- "a1", "w1", "2026-08-07T00:00:00.000Z", "2026-08-08T00:00:00.000Z",
55
- );
56
- // Conflict 7 of the design: the ontology has no address for a :Site. The
57
- // keys must be ABSENT, not null, so the deferral to task 2514 cannot be
58
- // half-implemented as an always-empty column that reads to a worker as
59
- // "this site has no address".
68
+ const [visit] = await readWorkerDay("a1", "w1", FROM, TO);
69
+ // ABSENT, not null. An always-present key holding nulls reads to a worker
70
+ // as "this site has no address" rather than "we hold none for it", which is
71
+ // the reason task 2502 shipped no column at all.
60
72
  expect(Object.keys(visit)).not.toContain("address");
61
- expect(Object.keys(visit)).not.toContain("postcode");
73
+ __setDriverForTests(null);
74
+ });
75
+
76
+ it("carries the address as one object when the edge exists", async () => {
77
+ __setDriverForTests(driverReturning([ADDRESSED]));
78
+ const [visit] = await readWorkerDay("a1", "w1", FROM, TO);
79
+ expect(visit.address).toEqual({
80
+ streetAddress: "12 High Street",
81
+ addressLocality: "Dunmow",
82
+ postalCode: "CM6 1EJ",
83
+ });
84
+ __setDriverForTests(null);
85
+ });
86
+
87
+ it("carries the address whole when the edge exists but a part is missing", async () => {
88
+ // The edge is what decides the key. A PostalAddress written without its
89
+ // locality is still an address the worker can drive to, and dropping the
90
+ // key would report the site as unaddressed while the census counted it
91
+ // addressed — the two would disagree.
92
+ __setDriverForTests(driverReturning([{ ...ADDRESSED, addressLocality: null }]));
93
+ const [visit] = await readWorkerDay("a1", "w1", FROM, TO);
94
+ expect(visit.address).toEqual({
95
+ streetAddress: "12 High Street",
96
+ addressLocality: null,
97
+ postalCode: "CM6 1EJ",
98
+ });
62
99
  __setDriverForTests(null);
63
100
  });
64
101
 
@@ -76,6 +113,128 @@ describe("readWorkerDay", () => {
76
113
  expect(visit.contactName).toBeNull();
77
114
  __setDriverForTests(null);
78
115
  });
116
+
117
+ it("shows the caller their OWN arrival on a visit they share (Task 2512)", async () => {
118
+ // The sole-attendee rule returns null at two attendances, and a sheet
119
+ // showing no arrival to the worker who pressed it reads as a lost press.
120
+ // The worker day therefore reads arrival off the caller's own attendance,
121
+ // which the query returns in the `own*` columns.
122
+ __setDriverForTests(driverReturning([
123
+ {
124
+ ...ROW,
125
+ attendances: [
126
+ { workerId: "w1", arrivedPressedAt: "2026-08-07T08:12:00.000Z",
127
+ arrivedObservedAt: null, arrivedObservedDistanceM: null },
128
+ { workerId: "w2", arrivedPressedAt: "2026-08-07T08:40:00.000Z",
129
+ arrivedObservedAt: null, arrivedObservedDistanceM: null },
130
+ ],
131
+ ownArrivedPressedAt: "2026-08-07T08:12:00.000Z",
132
+ ownArrivedObservedAt: null,
133
+ ownArrivedObservedDistanceM: null,
134
+ },
135
+ ]));
136
+ const [visit] = await readWorkerDay("a1", "w1", FROM, TO);
137
+ expect(visit.workerId).toBe("w1");
138
+ expect(visit.arrivedPressedAt).toBe("2026-08-07T08:12:00.000Z");
139
+ // Both workers reach the sheet, so it can name who they are working with.
140
+ expect(visit.attendances.map((a) => a.workerId)).toEqual(["w1", "w2"]);
141
+ __setDriverForTests(null);
142
+ });
143
+
144
+ it("is ONE card for a shared visit, never one per worker", async () => {
145
+ // The failure the task exists to end: a row per attendance rendered as two
146
+ // separate visits sharing one set of times.
147
+ __setDriverForTests(driverReturning([
148
+ {
149
+ ...ROW,
150
+ attendances: [
151
+ { workerId: "w1", arrivedPressedAt: null, arrivedObservedAt: null,
152
+ arrivedObservedDistanceM: null },
153
+ { workerId: "w2", arrivedPressedAt: null, arrivedObservedAt: null,
154
+ arrivedObservedDistanceM: null },
155
+ ],
156
+ },
157
+ ]));
158
+ const visits = await readWorkerDay("a1", "w1", FROM, TO);
159
+ expect(visits).toHaveLength(1);
160
+ __setDriverForTests(null);
161
+ });
162
+ });
163
+
164
+ describe("readFieldVisit", () => {
165
+ // The job sheet's read. It exists so the sheet and the today list share one
166
+ // projection: the sheet served a plain visit row, so its site name, customer
167
+ // and contact rendered as absent on every card since the sheet shipped.
168
+ it("returns the same field shape as the day read, for one visit", async () => {
169
+ const session = {
170
+ run: vi.fn(async () => ({
171
+ records: [{ get: (k: string) => (ADDRESSED as Record<string, unknown>)[k] }],
172
+ })),
173
+ } as never;
174
+ const visit = await readFieldVisit(session, "a1", "v1");
175
+ expect(visit?.siteName).toBe("Ladywell Prospect");
176
+ expect(visit?.contactTelephone).toBe("01234 567890");
177
+ expect(visit?.address?.postalCode).toBe("CM6 1EJ");
178
+ });
179
+
180
+ it("omits the address key for a site with no edge", async () => {
181
+ const session = {
182
+ run: vi.fn(async () => ({
183
+ records: [{ get: (k: string) => (ROW as Record<string, unknown>)[k] }],
184
+ })),
185
+ } as never;
186
+ const visit = await readFieldVisit(session, "a1", "v1");
187
+ expect(Object.keys(visit ?? {})).not.toContain("address");
188
+ });
189
+
190
+ it("returns null for a visit that is not on this account", async () => {
191
+ const session = { run: vi.fn(async () => ({ records: [] })) } as never;
192
+ expect(await readFieldVisit(session, "a1", "nope")).toBeNull();
193
+ });
194
+
195
+ it("names no single worker on a shared visit, and lists both (Task 2512)", async () => {
196
+ // This read applies no worker filter — the route does its own ownership
197
+ // check — so there is no "my" attendance to prefer. Answering "which single
198
+ // worker?" with either one would be a silent cross-assignment, so it
199
+ // answers with nothing and the list carries both.
200
+ const row = {
201
+ ...ROW,
202
+ attendances: [
203
+ { workerId: "w2", arrivedPressedAt: "2026-08-07T08:40:00.000Z",
204
+ arrivedObservedAt: null, arrivedObservedDistanceM: null },
205
+ { workerId: "w1", arrivedPressedAt: "2026-08-07T08:12:00.000Z",
206
+ arrivedObservedAt: null, arrivedObservedDistanceM: null },
207
+ ],
208
+ };
209
+ const session = {
210
+ run: vi.fn(async () => ({
211
+ records: [{ get: (k: string) => (row as Record<string, unknown>)[k] }],
212
+ })),
213
+ } as never;
214
+ const visit = await readFieldVisit(session, "a1", "v1");
215
+ expect(visit?.workerId).toBeNull();
216
+ expect(visit?.arrivedPressedAt).toBeNull();
217
+ // Sorted, so two reads of one visit cannot order the workers differently.
218
+ expect(visit?.attendances.map((a) => a.workerId)).toEqual(["w1", "w2"]);
219
+ });
220
+
221
+ it("still projects a one-worker visit exactly as before", async () => {
222
+ const row = {
223
+ ...ROW,
224
+ attendances: [
225
+ { workerId: "w1", arrivedPressedAt: "2026-08-07T08:12:00.000Z",
226
+ arrivedObservedAt: null, arrivedObservedDistanceM: null },
227
+ ],
228
+ };
229
+ const session = {
230
+ run: vi.fn(async () => ({
231
+ records: [{ get: (k: string) => (row as Record<string, unknown>)[k] }],
232
+ })),
233
+ } as never;
234
+ const visit = await readFieldVisit(session, "a1", "v1");
235
+ expect(visit?.workerId).toBe("w1");
236
+ expect(visit?.arrivedPressedAt).toBe("2026-08-07T08:12:00.000Z");
237
+ });
79
238
  });
80
239
 
81
240
  describe("readSiteHistory", () => {
@@ -139,3 +298,49 @@ describe("workerForTelegramUser", () => {
139
298
  expect(workerForTelegramUser(cfg, "")).toBeNull();
140
299
  });
141
300
  });
301
+
302
+ describe("a site with more than one address", () => {
303
+ // An OPTIONAL MATCH that finds two nodes returns two rows, so a site holding
304
+ // two AT_ADDRESS edges would put the same visit on a worker's list twice,
305
+ // each copy showing a different address. That state is reachable:
306
+ // `memory-write`'s edge check is warn-only, so nothing blocks a second edge.
307
+ //
308
+ // The collapse is in Cypher, so the query is what carries it. Asserting a row
309
+ // count against the fake driver would prove nothing — the fake returns the
310
+ // rows it was handed and models no aggregation.
311
+ function captureQuery() {
312
+ const seen: string[] = [];
313
+ __setDriverForTests({
314
+ session: () => ({
315
+ run: vi.fn(async (q: string) => {
316
+ seen.push(q);
317
+ return { records: [] };
318
+ }),
319
+ close: vi.fn(async () => {}),
320
+ }),
321
+ } as never);
322
+ return seen;
323
+ }
324
+
325
+ it("collapses the day read to one address and one contact per visit", async () => {
326
+ const seen = captureQuery();
327
+ await readWorkerDay("a1", "w1", FROM, TO);
328
+ __setDriverForTests(null);
329
+ expect(seen, "no query was captured").toHaveLength(1);
330
+ expect(seen[0]).toContain("head(collect(DISTINCT pa0)) AS pa");
331
+ expect(seen[0]).toContain("head(collect(DISTINCT ct0)) AS ct");
332
+ });
333
+
334
+ it("collapses the sheet read the same way", async () => {
335
+ const seen: string[] = [];
336
+ const session = {
337
+ run: vi.fn(async (q: string) => {
338
+ seen.push(q);
339
+ return { records: [] };
340
+ }),
341
+ } as never;
342
+ await readFieldVisit(session, "a1", "v1");
343
+ expect(seen, "no query was captured").toHaveLength(1);
344
+ expect(seen[0]).toContain("head(collect(DISTINCT pa0)) AS pa");
345
+ });
346
+ });
@@ -0,0 +1,56 @@
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
+
11
+ const EARTH_RADIUS_M = 6_371_000;
12
+
13
+ const toRad = (deg: number): number => (deg * Math.PI) / 180;
14
+
15
+ /** Great-circle distance in metres, rounded. */
16
+ export function distanceM(
17
+ a: { latitude: number; longitude: number },
18
+ b: { latitude: number; longitude: number },
19
+ ): number {
20
+ const dLat = toRad(b.latitude - a.latitude);
21
+ const dLon = toRad(b.longitude - a.longitude);
22
+ const lat1 = toRad(a.latitude);
23
+ const lat2 = toRad(b.latitude);
24
+ const h =
25
+ Math.sin(dLat / 2) ** 2 + Math.sin(dLon / 2) ** 2 * Math.cos(lat1) * Math.cos(lat2);
26
+ return Math.round(2 * EARTH_RADIUS_M * Math.asin(Math.sqrt(h)));
27
+ }
28
+
29
+ export interface GeofenceVerdict {
30
+ siteHasCoords: boolean;
31
+ /** The site's own radius, else the account default, else null. */
32
+ radiusM: number | null;
33
+ /** Null when there is nothing to measure against. */
34
+ distanceM: number | null;
35
+ inside: boolean;
36
+ }
37
+
38
+ export function geofenceVerdict(p: {
39
+ site: SiteLocation | null;
40
+ cfg: DispatchConfig;
41
+ at: { latitude: number; longitude: number };
42
+ }): GeofenceVerdict {
43
+ const siteHasCoords =
44
+ p.site !== null && p.site.latitude !== null && p.site.longitude !== null;
45
+ const radiusM = p.site?.geofenceRadiusM ?? p.cfg.vehicles?.defaultGeofenceRadiusM ?? null;
46
+ if (!siteHasCoords) {
47
+ return { siteHasCoords: false, radiusM, distanceM: null, inside: false };
48
+ }
49
+ const d = distanceM(
50
+ { latitude: p.site!.latitude as number, longitude: p.site!.longitude as number },
51
+ p.at,
52
+ );
53
+ // A distance with no radius to compare it against cannot say whether anybody
54
+ // arrived. Reported, never assumed.
55
+ return { siteHasCoords: true, radiusM, distanceM: d, inside: radiusM !== null && d <= radiusM };
56
+ }
@@ -18,6 +18,18 @@ export {
18
18
  workerForTelegramUser,
19
19
  } from "./config.js";
20
20
  export type { RecordableField } from "./config.js";
21
+
22
+ // Task 2510 — the card's buttons and the press's wire format. Config-derived
23
+ // and pure, so the plugin that draws a card and the route that reads a press
24
+ // share one implementation rather than two encoders that can drift.
25
+ export {
26
+ CALLBACK_DATA_MAX_BYTES,
27
+ buildVisitKeyboard,
28
+ dispatchCallbackData,
29
+ parseDispatchCallback,
30
+ } from "./keyboard.js";
31
+ export type { DispatchButton, VisitKeyboard } from "./keyboard.js";
32
+
21
33
  export { withSession } from "./session.js";
22
34
  export { resolveAccountZone } from "./zone.js";
23
35
  export {
@@ -34,21 +46,33 @@ export {
34
46
  // Session-taking reads: the dispatch plugin's, moved here unchanged.
35
47
  export {
36
48
  buildJobListQuery,
49
+ projectFieldVisit,
37
50
  projectJob,
38
51
  projectVisit,
39
52
  readCommitments,
53
+ readDraft,
54
+ readDrafts,
55
+ readFieldVisit,
40
56
  readJob,
41
57
  readJobs,
42
58
  readNodeId,
59
+ readOpenVisitsForWorker,
60
+ readPreviousVisits,
43
61
  readSiteHistory,
62
+ readSiteLocation,
44
63
  readVisit,
45
64
  readVisitRecordState,
46
65
  readVisitsForJob,
47
66
  readVisitsInWindow,
48
67
  } from "./read.js";
49
68
 
69
+ // Task 2510 — the geofence maths. Pure, so it is asserted against real
70
+ // coordinates rather than against a mocked graph.
71
+ export { distanceM, geofenceVerdict } from "./geo.js";
72
+ export type { GeofenceVerdict } from "./geo.js";
73
+
50
74
  // Session-owning reads: the planner's, so a route holds no graph access.
51
75
  export { nonZuluStarts, readCounts, readDay, readJobList, readWorkerDay } from "./read.js";
52
76
 
53
- export type { Commitment, VisitRecordState } from "./read.js";
77
+ export type { Commitment, DraftRow, PreviousVisit, VisitRecordState } from "./read.js";
54
78
  export type * from "./types.js";
@@ -0,0 +1,98 @@
1
+ /**
2
+ * The buttons on a dispatch card, and the wire format a press comes back on.
3
+ *
4
+ * One implementation for two processes. The dispatch MCP plugin draws the card;
5
+ * the UI server's webhook route reads the press and redraws it. Two encoders
6
+ * would be two authorities for one wire format, and the failure would be a
7
+ * button that does nothing with no line anywhere saying why.
8
+ *
9
+ * No status string appears below. The buttons are the account's own configured
10
+ * transitions out of the visit's current status, labelled with the account's own
11
+ * status names.
12
+ */
13
+ import type { DispatchConfig } from "./types.js";
14
+
15
+ /** Bot API: "Data to be sent in a callback query to the bot when the button is
16
+ * pressed, UTF-8 1-64 bytes." Telegram refuses a longer button at send time
17
+ * with nothing in our logs to explain it, so the builder measures instead. */
18
+ export const CALLBACK_DATA_MAX_BYTES = 64;
19
+
20
+ /** The prefix that makes a press ours. A press without it belongs to some other
21
+ * keyboard and falls through the route untouched. */
22
+ const PREFIX = "d";
23
+
24
+ const SEP = ":";
25
+
26
+ export interface DispatchButton {
27
+ text: string;
28
+ callbackData?: string;
29
+ webAppUrl?: string;
30
+ }
31
+
32
+ export interface VisitKeyboard {
33
+ rows: DispatchButton[][];
34
+ /** Transitions whose encoded data exceeded the cap. Named, never silent: a
35
+ * dropped button is a worker who cannot close a job. */
36
+ dropped: Array<{ status: string; bytes: number }>;
37
+ }
38
+
39
+ /**
40
+ * `d:<visitId>:<to>:<drawnFor>`.
41
+ *
42
+ * Status NAMES rather than indices into `cfg.statuses.visit`. Indices always fit
43
+ * the 64 bytes, but an operator reordering the status list would silently
44
+ * repoint every live button, and the stale check exists to catch a visit that
45
+ * moved on, not a config that did.
46
+ */
47
+ export function dispatchCallbackData(p: {
48
+ visitId: string;
49
+ to: string;
50
+ drawnFor: string;
51
+ }): string {
52
+ return [PREFIX, p.visitId, p.to, p.drawnFor].join(SEP);
53
+ }
54
+
55
+ /** Null means "not ours". A status name containing a colon would split wrongly,
56
+ * so the parse requires exactly four parts rather than joining the tail. */
57
+ export function parseDispatchCallback(
58
+ data: string | null,
59
+ ): { visitId: string; to: string; drawnFor: string } | null {
60
+ if (data === null) return null;
61
+ const parts = data.split(SEP);
62
+ if (parts.length !== 4 || parts[0] !== PREFIX) return null;
63
+ const [, visitId, to, drawnFor] = parts;
64
+ if (!visitId || !to || !drawnFor) return null;
65
+ return { visitId, to, drawnFor };
66
+ }
67
+
68
+ /**
69
+ * The card's buttons for a visit at `status`.
70
+ *
71
+ * One button per legal transition out of `status`, plus one `web_app` button
72
+ * opening the job sheet. `web_app` and never `url`: a `url` button sends the
73
+ * worker to the device browser, where Telegram has signed nothing and the sheet
74
+ * refuses him.
75
+ */
76
+ export function buildVisitKeyboard(p: {
77
+ cfg: DispatchConfig;
78
+ visitId: string;
79
+ status: string;
80
+ sheetUrl: string;
81
+ }): VisitKeyboard {
82
+ const rows: DispatchButton[][] = [];
83
+ const dropped: Array<{ status: string; bytes: number }> = [];
84
+
85
+ for (const [from, to] of p.cfg.statuses.visitTransitions) {
86
+ if (from !== p.status) continue;
87
+ const callbackData = dispatchCallbackData({ visitId: p.visitId, to, drawnFor: p.status });
88
+ const bytes = Buffer.byteLength(callbackData, "utf8");
89
+ if (bytes > CALLBACK_DATA_MAX_BYTES) {
90
+ dropped.push({ status: to, bytes });
91
+ continue;
92
+ }
93
+ rows.push([{ text: to, callbackData }]);
94
+ }
95
+
96
+ rows.push([{ text: p.cfg.vocabulary.visit, webAppUrl: p.sheetUrl }]);
97
+ return { rows, dropped };
98
+ }