@rubytech/create-realagent-code 0.1.574 → 0.1.576

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 (800) hide show
  1. package/dist/__tests__/preserve-house-cloudflare.test.js +2 -72
  2. package/dist/index.js +8 -45
  3. package/dist/preserve-house-cloudflare.js +2 -49
  4. package/package.json +1 -1
  5. package/payload/platform/lib/canonical-instant/dist/index.d.ts +57 -0
  6. package/payload/platform/lib/canonical-instant/dist/index.d.ts.map +1 -0
  7. package/payload/platform/lib/canonical-instant/dist/index.js +139 -0
  8. package/payload/platform/lib/canonical-instant/dist/index.js.map +1 -0
  9. package/payload/platform/lib/canonical-instant/src/__tests__/normalise-instant.test.ts +158 -0
  10. package/payload/platform/lib/canonical-instant/src/index.ts +147 -0
  11. package/payload/platform/lib/canonical-instant/tsconfig.json +9 -0
  12. package/payload/platform/lib/canonical-instant/vitest.config.ts +9 -0
  13. package/payload/platform/lib/dispatch-read/dist/geo.d.ts +34 -0
  14. package/payload/platform/lib/dispatch-read/dist/geo.d.ts.map +1 -0
  15. package/payload/platform/lib/dispatch-read/dist/geo.js +27 -0
  16. package/payload/platform/lib/dispatch-read/dist/geo.js.map +1 -0
  17. package/payload/platform/lib/dispatch-read/dist/index.d.ts +6 -2
  18. package/payload/platform/lib/dispatch-read/dist/index.d.ts.map +1 -1
  19. package/payload/platform/lib/dispatch-read/dist/index.js +21 -1
  20. package/payload/platform/lib/dispatch-read/dist/index.js.map +1 -1
  21. package/payload/platform/lib/dispatch-read/dist/keyboard.d.ts +66 -0
  22. package/payload/platform/lib/dispatch-read/dist/keyboard.d.ts.map +1 -0
  23. package/payload/platform/lib/dispatch-read/dist/keyboard.js +64 -0
  24. package/payload/platform/lib/dispatch-read/dist/keyboard.js.map +1 -0
  25. package/payload/platform/lib/dispatch-read/dist/read.d.ts +144 -9
  26. package/payload/platform/lib/dispatch-read/dist/read.d.ts.map +1 -1
  27. package/payload/platform/lib/dispatch-read/dist/read.js +437 -118
  28. package/payload/platform/lib/dispatch-read/dist/read.js.map +1 -1
  29. package/payload/platform/lib/dispatch-read/dist/types.d.ts +80 -11
  30. package/payload/platform/lib/dispatch-read/dist/types.d.ts.map +1 -1
  31. package/payload/platform/lib/dispatch-read/src/__tests__/geo.test.ts +86 -0
  32. package/payload/platform/lib/dispatch-read/src/__tests__/keyboard.test.ts +124 -0
  33. package/payload/platform/lib/dispatch-read/src/__tests__/previous-visit.test.ts +98 -0
  34. package/payload/platform/lib/dispatch-read/src/__tests__/read.test.ts +107 -8
  35. package/payload/platform/lib/dispatch-read/src/__tests__/worker-day.test.ts +215 -10
  36. package/payload/platform/lib/dispatch-read/src/geo.ts +56 -0
  37. package/payload/platform/lib/dispatch-read/src/index.ts +25 -1
  38. package/payload/platform/lib/dispatch-read/src/keyboard.ts +98 -0
  39. package/payload/platform/lib/dispatch-read/src/read.ts +522 -119
  40. package/payload/platform/lib/dispatch-read/src/types.ts +83 -11
  41. package/payload/platform/lib/dispatch-write/dist/write.d.ts +14 -0
  42. package/payload/platform/lib/dispatch-write/dist/write.d.ts.map +1 -1
  43. package/payload/platform/lib/dispatch-write/dist/write.js +50 -11
  44. package/payload/platform/lib/dispatch-write/dist/write.js.map +1 -1
  45. package/payload/platform/lib/dispatch-write/src/__tests__/write.test.ts +72 -2
  46. package/payload/platform/lib/dispatch-write/src/write.ts +79 -14
  47. package/payload/platform/neo4j/schema.cypher +66 -1
  48. package/payload/platform/package.json +2 -2
  49. package/payload/platform/plugins/admin/PLUGIN.md +3 -0
  50. package/payload/platform/plugins/admin/hooks/__tests__/fs-schema-guard-bash.test.sh +106 -0
  51. package/payload/platform/plugins/admin/hooks/__tests__/fs-schema-guard.test.sh +66 -0
  52. package/payload/platform/plugins/admin/hooks/fs-schema-guard-bash-post.sh +85 -12
  53. package/payload/platform/plugins/admin/hooks/fs-schema-guard.sh +18 -0
  54. package/payload/platform/plugins/admin/mcp/dist/index.js +2 -2
  55. package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
  56. package/payload/platform/plugins/admin/skills/admin-user-management/SKILL.md +10 -11
  57. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +106 -36
  58. package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +12 -0
  59. package/payload/platform/plugins/cloudflare/mcp/__tests__/portal-visits-scope.test.ts +130 -1
  60. package/payload/platform/plugins/cloudflare/skills/data-portal/schema.sql +63 -0
  61. package/payload/platform/plugins/cloudflare/skills/data-portal/template/functions/api/visits.ts +104 -3
  62. package/payload/platform/plugins/dispatch/.claude-plugin/plugin.json +1 -1
  63. package/payload/platform/plugins/dispatch/PLUGIN.md +49 -6
  64. package/payload/platform/plugins/dispatch/mcp/dist/index.js +200 -2
  65. package/payload/platform/plugins/dispatch/mcp/dist/index.js.map +1 -1
  66. package/payload/platform/plugins/dispatch/mcp/dist/lib/allocate.d.ts +22 -4
  67. package/payload/platform/plugins/dispatch/mcp/dist/lib/allocate.d.ts.map +1 -1
  68. package/payload/platform/plugins/dispatch/mcp/dist/lib/allocate.js +4 -0
  69. package/payload/platform/plugins/dispatch/mcp/dist/lib/allocate.js.map +1 -1
  70. package/payload/platform/plugins/dispatch/mcp/dist/lib/bot-token.d.ts +10 -0
  71. package/payload/platform/plugins/dispatch/mcp/dist/lib/bot-token.d.ts.map +1 -0
  72. package/payload/platform/plugins/dispatch/mcp/dist/lib/bot-token.js +47 -0
  73. package/payload/platform/plugins/dispatch/mcp/dist/lib/bot-token.js.map +1 -0
  74. package/payload/platform/plugins/dispatch/mcp/dist/lib/config.d.ts.map +1 -1
  75. package/payload/platform/plugins/dispatch/mcp/dist/lib/config.js +12 -0
  76. package/payload/platform/plugins/dispatch/mcp/dist/lib/config.js.map +1 -1
  77. package/payload/platform/plugins/dispatch/mcp/dist/lib/ids.d.ts +1 -0
  78. package/payload/platform/plugins/dispatch/mcp/dist/lib/ids.d.ts.map +1 -1
  79. package/payload/platform/plugins/dispatch/mcp/dist/lib/ids.js +1 -0
  80. package/payload/platform/plugins/dispatch/mcp/dist/lib/ids.js.map +1 -1
  81. package/payload/platform/plugins/dispatch/mcp/dist/lib/intake.d.ts +36 -0
  82. package/payload/platform/plugins/dispatch/mcp/dist/lib/intake.d.ts.map +1 -0
  83. package/payload/platform/plugins/dispatch/mcp/dist/lib/intake.js +36 -0
  84. package/payload/platform/plugins/dispatch/mcp/dist/lib/intake.js.map +1 -0
  85. package/payload/platform/plugins/dispatch/mcp/dist/lib/keyboard.d.ts +11 -0
  86. package/payload/platform/plugins/dispatch/mcp/dist/lib/keyboard.d.ts.map +1 -0
  87. package/payload/platform/plugins/dispatch/mcp/dist/lib/keyboard.js +10 -0
  88. package/payload/platform/plugins/dispatch/mcp/dist/lib/keyboard.js.map +1 -0
  89. package/payload/platform/plugins/dispatch/mcp/dist/lib/read.d.ts +2 -2
  90. package/payload/platform/plugins/dispatch/mcp/dist/lib/read.d.ts.map +1 -1
  91. package/payload/platform/plugins/dispatch/mcp/dist/lib/read.js +9 -1
  92. package/payload/platform/plugins/dispatch/mcp/dist/lib/read.js.map +1 -1
  93. package/payload/platform/plugins/dispatch/mcp/dist/lib/travel.d.ts +43 -0
  94. package/payload/platform/plugins/dispatch/mcp/dist/lib/travel.d.ts.map +1 -0
  95. package/payload/platform/plugins/dispatch/mcp/dist/lib/travel.js +53 -0
  96. package/payload/platform/plugins/dispatch/mcp/dist/lib/travel.js.map +1 -0
  97. package/payload/platform/plugins/dispatch/mcp/dist/lib/types.d.ts +13 -2
  98. package/payload/platform/plugins/dispatch/mcp/dist/lib/types.d.ts.map +1 -1
  99. package/payload/platform/plugins/dispatch/mcp/dist/scripts/converge-visit-instants.d.ts +6 -0
  100. package/payload/platform/plugins/dispatch/mcp/dist/scripts/converge-visit-instants.d.ts.map +1 -0
  101. package/payload/platform/plugins/dispatch/mcp/dist/scripts/converge-visit-instants.js +102 -0
  102. package/payload/platform/plugins/dispatch/mcp/dist/scripts/converge-visit-instants.js.map +1 -0
  103. package/payload/platform/plugins/dispatch/mcp/dist/tools/allocate.d.ts +18 -0
  104. package/payload/platform/plugins/dispatch/mcp/dist/tools/allocate.d.ts.map +1 -1
  105. package/payload/platform/plugins/dispatch/mcp/dist/tools/allocate.js +251 -40
  106. package/payload/platform/plugins/dispatch/mcp/dist/tools/allocate.js.map +1 -1
  107. package/payload/platform/plugins/dispatch/mcp/dist/tools/intake.d.ts +75 -0
  108. package/payload/platform/plugins/dispatch/mcp/dist/tools/intake.d.ts.map +1 -0
  109. package/payload/platform/plugins/dispatch/mcp/dist/tools/intake.js +194 -0
  110. package/payload/platform/plugins/dispatch/mcp/dist/tools/intake.js.map +1 -0
  111. package/payload/platform/plugins/dispatch/mcp/dist/tools/notify-worker.d.ts +61 -0
  112. package/payload/platform/plugins/dispatch/mcp/dist/tools/notify-worker.d.ts.map +1 -0
  113. package/payload/platform/plugins/dispatch/mcp/dist/tools/notify-worker.js +130 -0
  114. package/payload/platform/plugins/dispatch/mcp/dist/tools/notify-worker.js.map +1 -0
  115. package/payload/platform/plugins/dispatch/mcp/dist/tools/site-location-set.d.ts +28 -0
  116. package/payload/platform/plugins/dispatch/mcp/dist/tools/site-location-set.d.ts.map +1 -0
  117. package/payload/platform/plugins/dispatch/mcp/dist/tools/site-location-set.js +44 -0
  118. package/payload/platform/plugins/dispatch/mcp/dist/tools/site-location-set.js.map +1 -0
  119. package/payload/platform/plugins/dispatch/mcp/dist/tools/site-upsert.d.ts +43 -0
  120. package/payload/platform/plugins/dispatch/mcp/dist/tools/site-upsert.d.ts.map +1 -0
  121. package/payload/platform/plugins/dispatch/mcp/dist/tools/site-upsert.js +139 -0
  122. package/payload/platform/plugins/dispatch/mcp/dist/tools/site-upsert.js.map +1 -0
  123. package/payload/platform/plugins/dispatch/skills/dispatch-page/SKILL.md +85 -0
  124. package/payload/platform/plugins/dispatch/skills/dispatch-page/template/planner.css +97 -0
  125. package/payload/platform/plugins/dispatch/skills/dispatch-page/template/planner.html +59 -0
  126. package/payload/platform/plugins/dispatch/skills/dispatch-page/template/planner.js +343 -0
  127. package/payload/platform/plugins/dispatch/skills/dispatch-setup/SKILL.md +9 -4
  128. package/payload/platform/plugins/docs/references/channel-wake-and-prompt.md +11 -20
  129. package/payload/platform/plugins/docs/references/dispatch.md +94 -15
  130. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/dispatch-vertical-coverage.test.js +4 -1
  131. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/dispatch-vertical-coverage.test.js.map +1 -1
  132. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/relationship-patterns.test.js +24 -1
  133. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/relationship-patterns.test.js.map +1 -1
  134. package/payload/platform/plugins/memory/references/schema-dispatch.md +70 -4
  135. package/payload/platform/plugins/scheduling/mcp/dist/lib/time-format.d.ts +2 -35
  136. package/payload/platform/plugins/scheduling/mcp/dist/lib/time-format.d.ts.map +1 -1
  137. package/payload/platform/plugins/scheduling/mcp/dist/lib/time-format.js +6 -114
  138. package/payload/platform/plugins/scheduling/mcp/dist/lib/time-format.js.map +1 -1
  139. package/payload/platform/plugins/scheduling/mcp/dist/scripts/converge-startdate-utc.d.ts +1 -1
  140. package/payload/platform/plugins/scheduling/mcp/dist/scripts/converge-startdate-utc.js +3 -3
  141. package/payload/platform/plugins/scheduling/mcp/dist/scripts/converge-startdate-utc.js.map +1 -1
  142. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js +2 -2
  143. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js.map +1 -1
  144. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.js +3 -3
  145. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.js.map +1 -1
  146. package/payload/platform/services/claude-session-manager/dist/blocked-tool-census.d.ts +40 -6
  147. package/payload/platform/services/claude-session-manager/dist/blocked-tool-census.d.ts.map +1 -1
  148. package/payload/platform/services/claude-session-manager/dist/blocked-tool-census.js +116 -15
  149. package/payload/platform/services/claude-session-manager/dist/blocked-tool-census.js.map +1 -1
  150. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts.map +1 -1
  151. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +6 -0
  152. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
  153. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts +5 -0
  154. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
  155. package/payload/platform/services/claude-session-manager/dist/http-server.js +29 -0
  156. package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
  157. package/payload/platform/services/telegram-channel/dist/notification.d.ts +0 -12
  158. package/payload/platform/services/telegram-channel/dist/notification.d.ts.map +1 -1
  159. package/payload/platform/services/telegram-channel/dist/notification.js +8 -29
  160. package/payload/platform/services/telegram-channel/dist/notification.js.map +1 -1
  161. package/payload/platform/services/telegram-channel/dist/server.d.ts.map +1 -1
  162. package/payload/platform/services/telegram-channel/dist/server.js +8 -11
  163. package/payload/platform/services/telegram-channel/dist/server.js.map +1 -1
  164. package/payload/server/public/activity.html +7 -7
  165. package/payload/server/public/agents.html +6 -6
  166. package/payload/server/public/assets/{AdminLoginScreens-Dp6k1XgD.js → AdminLoginScreens-BLGZEaKU.js} +1 -1
  167. package/payload/server/public/assets/AdminLoginScreens-BLGZEaKU.js.br +0 -0
  168. package/payload/server/public/assets/AdminLoginScreens-BLGZEaKU.js.gz +0 -0
  169. package/payload/server/public/assets/AdminShell-C_M7YE5Z.js +3 -0
  170. package/payload/server/public/assets/AdminShell-C_M7YE5Z.js.br +0 -0
  171. package/payload/server/public/assets/AdminShell-C_M7YE5Z.js.gz +0 -0
  172. package/payload/server/public/assets/{activity-BJxhblz-.js → activity-BL6qbB9a.js} +1 -1
  173. package/payload/server/public/assets/activity-BL6qbB9a.js.br +0 -0
  174. package/payload/server/public/assets/activity-BL6qbB9a.js.gz +0 -0
  175. package/payload/server/public/assets/admin-jnJ3P2u4.js +1 -0
  176. package/payload/server/public/assets/admin-jnJ3P2u4.js.br +0 -0
  177. package/payload/server/public/assets/admin-jnJ3P2u4.js.gz +0 -0
  178. package/payload/server/public/assets/{agents-DTL8kjfD.js → agents-BzhfKZDN.js} +1 -1
  179. package/payload/server/public/assets/agents-BzhfKZDN.js.br +0 -0
  180. package/payload/server/public/assets/agents-BzhfKZDN.js.gz +0 -0
  181. package/payload/server/public/assets/{arc-CWXBKNZd.js → arc-Bge2fWf4.js} +1 -1
  182. package/payload/server/public/assets/arc-Bge2fWf4.js.br +0 -0
  183. package/payload/server/public/assets/arc-Bge2fWf4.js.gz +0 -0
  184. package/payload/server/public/assets/architecture-YZFGNWBL-B9jqFTbw.js +1 -0
  185. package/payload/server/public/assets/architecture-YZFGNWBL-B9jqFTbw.js.br +0 -0
  186. package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-C-KPMyG4.js → architectureDiagram-Q4EWVU46-BRauf5b8.js} +1 -1
  187. package/payload/server/public/assets/architectureDiagram-Q4EWVU46-BRauf5b8.js.br +0 -0
  188. package/payload/server/public/assets/architectureDiagram-Q4EWVU46-BRauf5b8.js.gz +0 -0
  189. package/payload/server/public/assets/{blockDiagram-DXYQGD6D-DkYbV9Sf.js → blockDiagram-DXYQGD6D-CUJ554WZ.js} +1 -1
  190. package/payload/server/public/assets/blockDiagram-DXYQGD6D-CUJ554WZ.js.br +0 -0
  191. package/payload/server/public/assets/blockDiagram-DXYQGD6D-CUJ554WZ.js.gz +0 -0
  192. package/payload/server/public/assets/{browser-UZp75zhx.js → browser-C-6io2B9.js} +1 -1
  193. package/payload/server/public/assets/browser-C-6io2B9.js.br +0 -0
  194. package/payload/server/public/assets/browser-C-6io2B9.js.gz +0 -0
  195. package/payload/server/public/assets/{c4Diagram-AHTNJAMY-EYW4kdlx.js → c4Diagram-AHTNJAMY-CV9gKsKo.js} +1 -1
  196. package/payload/server/public/assets/c4Diagram-AHTNJAMY-CV9gKsKo.js.br +0 -0
  197. package/payload/server/public/assets/{c4Diagram-AHTNJAMY-EYW4kdlx.js.gz → c4Diagram-AHTNJAMY-CV9gKsKo.js.gz} +0 -0
  198. package/payload/server/public/assets/{calendar-Dfo0O2K_.js → calendar-Dt3gS88s.js} +1 -1
  199. package/payload/server/public/assets/calendar-Dt3gS88s.js.br +0 -0
  200. package/payload/server/public/assets/calendar-Dt3gS88s.js.gz +0 -0
  201. package/payload/server/public/assets/channel-DUwJcjZw.js +1 -0
  202. package/payload/server/public/assets/channel-DUwJcjZw.js.br +0 -0
  203. package/payload/server/public/assets/chat-IUOvVkL-.js +1 -0
  204. package/payload/server/public/assets/chat-IUOvVkL-.js.br +1 -0
  205. package/payload/server/public/assets/chat-IUOvVkL-.js.gz +0 -0
  206. package/payload/server/public/assets/chevron-left-DSzR9zR7.js +1 -0
  207. package/payload/server/public/assets/chevron-left-DSzR9zR7.js.br +0 -0
  208. package/payload/server/public/assets/{chunk-2KRD3SAO-CmAF1UmH.js → chunk-2KRD3SAO-HzWGrran.js} +1 -1
  209. package/payload/server/public/assets/chunk-2KRD3SAO-HzWGrran.js.br +0 -0
  210. package/payload/server/public/assets/chunk-2KRD3SAO-HzWGrran.js.gz +0 -0
  211. package/payload/server/public/assets/{chunk-336JU56O-CyhmJeMM.js → chunk-336JU56O-ChGDYu_S.js} +2 -2
  212. package/payload/server/public/assets/chunk-336JU56O-ChGDYu_S.js.br +0 -0
  213. package/payload/server/public/assets/chunk-336JU56O-ChGDYu_S.js.gz +0 -0
  214. package/payload/server/public/assets/chunk-426QAEUC-DLLi1nAr.js +1 -0
  215. package/payload/server/public/assets/chunk-426QAEUC-DLLi1nAr.js.br +0 -0
  216. package/payload/server/public/assets/chunk-426QAEUC-DLLi1nAr.js.gz +0 -0
  217. package/payload/server/public/assets/{chunk-4BX2VUAB-DCzC40-Y.js → chunk-4BX2VUAB-BJunAy2u.js} +1 -1
  218. package/payload/server/public/assets/chunk-4BX2VUAB-BJunAy2u.js.br +0 -0
  219. package/payload/server/public/assets/chunk-4BX2VUAB-BJunAy2u.js.gz +0 -0
  220. package/payload/server/public/assets/{chunk-4TB4RGXK-D9BXrSA_.js → chunk-4TB4RGXK-Df9Ew0fN.js} +1 -1
  221. package/payload/server/public/assets/chunk-4TB4RGXK-Df9Ew0fN.js.br +0 -0
  222. package/payload/server/public/assets/chunk-4TB4RGXK-Df9Ew0fN.js.gz +0 -0
  223. package/payload/server/public/assets/{chunk-55IACEB6-BwXC-qTZ.js → chunk-55IACEB6-DtquCg7p.js} +1 -1
  224. package/payload/server/public/assets/chunk-55IACEB6-DtquCg7p.js.br +0 -0
  225. package/payload/server/public/assets/chunk-55IACEB6-DtquCg7p.js.gz +0 -0
  226. package/payload/server/public/assets/{chunk-5FUZZQ4R-De7QtXxM.js → chunk-5FUZZQ4R-B3s1YuQa.js} +1 -1
  227. package/payload/server/public/assets/chunk-5FUZZQ4R-B3s1YuQa.js.br +0 -0
  228. package/payload/server/public/assets/chunk-5FUZZQ4R-B3s1YuQa.js.gz +0 -0
  229. package/payload/server/public/assets/{chunk-5PVQY5BW-B5tsJiCq.js → chunk-5PVQY5BW-C0bRnMKQ.js} +1 -1
  230. package/payload/server/public/assets/chunk-5PVQY5BW-C0bRnMKQ.js.br +0 -0
  231. package/payload/server/public/assets/chunk-5PVQY5BW-C0bRnMKQ.js.gz +0 -0
  232. package/payload/server/public/assets/{chunk-67CJDMHE-BjTh9STV.js → chunk-67CJDMHE-B9jxnEpu.js} +1 -1
  233. package/payload/server/public/assets/chunk-67CJDMHE-B9jxnEpu.js.br +0 -0
  234. package/payload/server/public/assets/chunk-67CJDMHE-B9jxnEpu.js.gz +0 -0
  235. package/payload/server/public/assets/{chunk-7N4EOEYR-91klRswn.js → chunk-7N4EOEYR-DaimaIlO.js} +1 -1
  236. package/payload/server/public/assets/chunk-7N4EOEYR-DaimaIlO.js.br +0 -0
  237. package/payload/server/public/assets/chunk-7N4EOEYR-DaimaIlO.js.gz +0 -0
  238. package/payload/server/public/assets/{chunk-AA7GKIK3-XFPGEoBu.js → chunk-AA7GKIK3-htgz4y5z.js} +1 -1
  239. package/payload/server/public/assets/chunk-AA7GKIK3-htgz4y5z.js.br +0 -0
  240. package/payload/server/public/assets/chunk-AA7GKIK3-htgz4y5z.js.gz +0 -0
  241. package/payload/server/public/assets/{chunk-BSJP7CBP-B7wgMyWq.js → chunk-BSJP7CBP-0xBlnKJN.js} +1 -1
  242. package/payload/server/public/assets/chunk-BSJP7CBP-0xBlnKJN.js.br +0 -0
  243. package/payload/server/public/assets/chunk-BSJP7CBP-0xBlnKJN.js.gz +0 -0
  244. package/payload/server/public/assets/{chunk-CIAEETIT-WPy9vcOo.js → chunk-CIAEETIT-HZOrcAzJ.js} +1 -1
  245. package/payload/server/public/assets/chunk-CIAEETIT-HZOrcAzJ.js.br +0 -0
  246. package/payload/server/public/assets/chunk-CIAEETIT-HZOrcAzJ.js.gz +0 -0
  247. package/payload/server/public/assets/{chunk-EDXVE4YY-D_2JIFFG.js → chunk-EDXVE4YY-CC8hCcuU.js} +1 -1
  248. package/payload/server/public/assets/chunk-EDXVE4YY-CC8hCcuU.js.br +0 -0
  249. package/payload/server/public/assets/chunk-EDXVE4YY-CC8hCcuU.js.gz +0 -0
  250. package/payload/server/public/assets/{chunk-ENJZ2VHE-xORReRt0.js → chunk-ENJZ2VHE-BdPfdZYB.js} +1 -1
  251. package/payload/server/public/assets/chunk-ENJZ2VHE-BdPfdZYB.js.br +0 -0
  252. package/payload/server/public/assets/chunk-ENJZ2VHE-BdPfdZYB.js.gz +0 -0
  253. package/payload/server/public/assets/{chunk-FMBD7UC4-BZsDu4nl.js → chunk-FMBD7UC4-MHdn_KgF.js} +1 -1
  254. package/payload/server/public/assets/chunk-FMBD7UC4-MHdn_KgF.js.br +0 -0
  255. package/payload/server/public/assets/chunk-FMBD7UC4-MHdn_KgF.js.gz +0 -0
  256. package/payload/server/public/assets/{chunk-FOC6F5B3-QzUp8wXX.js → chunk-FOC6F5B3-Ti8BlQKX.js} +1 -1
  257. package/payload/server/public/assets/chunk-FOC6F5B3-Ti8BlQKX.js.br +0 -0
  258. package/payload/server/public/assets/chunk-FOC6F5B3-Ti8BlQKX.js.gz +0 -0
  259. package/payload/server/public/assets/{chunk-ICPOFSXX-B64S7i7x.js → chunk-ICPOFSXX-BP8A8zb1.js} +2 -2
  260. package/payload/server/public/assets/chunk-ICPOFSXX-BP8A8zb1.js.br +0 -0
  261. package/payload/server/public/assets/chunk-ICPOFSXX-BP8A8zb1.js.gz +0 -0
  262. package/payload/server/public/assets/{chunk-K5T4RW27-DzPc6X1_.js → chunk-K5T4RW27-F30EnSBL.js} +1 -1
  263. package/payload/server/public/assets/chunk-K5T4RW27-F30EnSBL.js.br +0 -0
  264. package/payload/server/public/assets/chunk-K5T4RW27-F30EnSBL.js.gz +0 -0
  265. package/payload/server/public/assets/{chunk-KGLVRYIC-A2rPnD7k.js → chunk-KGLVRYIC-DNSEkg2Q.js} +1 -1
  266. package/payload/server/public/assets/chunk-KGLVRYIC-DNSEkg2Q.js.br +2 -0
  267. package/payload/server/public/assets/chunk-KGLVRYIC-DNSEkg2Q.js.gz +0 -0
  268. package/payload/server/public/assets/{chunk-LIHQZDEY-CaWX327m.js → chunk-LIHQZDEY-DM7b0dec.js} +1 -1
  269. package/payload/server/public/assets/chunk-LIHQZDEY-DM7b0dec.js.br +0 -0
  270. package/payload/server/public/assets/chunk-LIHQZDEY-DM7b0dec.js.gz +0 -0
  271. package/payload/server/public/assets/{chunk-ORNJ4GCN-zrWhdmnc.js → chunk-ORNJ4GCN-B0qoI_vp.js} +1 -1
  272. package/payload/server/public/assets/chunk-ORNJ4GCN-B0qoI_vp.js.br +0 -0
  273. package/payload/server/public/assets/chunk-ORNJ4GCN-B0qoI_vp.js.gz +0 -0
  274. package/payload/server/public/assets/{chunk-OYMX7WX6-B_2qQir6.js → chunk-OYMX7WX6-Bfzo53eI.js} +1 -1
  275. package/payload/server/public/assets/chunk-OYMX7WX6-Bfzo53eI.js.br +0 -0
  276. package/payload/server/public/assets/chunk-OYMX7WX6-Bfzo53eI.js.gz +0 -0
  277. package/payload/server/public/assets/chunk-QZHKN3VN-A6b8ZN9i.js +1 -0
  278. package/payload/server/public/assets/chunk-QZHKN3VN-A6b8ZN9i.js.br +0 -0
  279. package/payload/server/public/assets/chunk-QZHKN3VN-A6b8ZN9i.js.gz +0 -0
  280. package/payload/server/public/assets/{chunk-U2HBQHQK-B-IYgxsc.js → chunk-U2HBQHQK-DcqGPXEy.js} +1 -1
  281. package/payload/server/public/assets/chunk-U2HBQHQK-DcqGPXEy.js.br +0 -0
  282. package/payload/server/public/assets/chunk-U2HBQHQK-DcqGPXEy.js.gz +0 -0
  283. package/payload/server/public/assets/{chunk-X2U36JSP-Y9Y1_EuG.js → chunk-X2U36JSP-DtRi7n5Z.js} +1 -1
  284. package/payload/server/public/assets/chunk-X2U36JSP-DtRi7n5Z.js.br +0 -0
  285. package/payload/server/public/assets/chunk-X2U36JSP-DtRi7n5Z.js.gz +0 -0
  286. package/payload/server/public/assets/{chunk-XPW4576I-C-6yETG_.js → chunk-XPW4576I-DmuDCcY3.js} +1 -1
  287. package/payload/server/public/assets/chunk-XPW4576I-DmuDCcY3.js.br +0 -0
  288. package/payload/server/public/assets/chunk-XPW4576I-DmuDCcY3.js.gz +0 -0
  289. package/payload/server/public/assets/{chunk-YZCP3GAM-KAuQIU5n.js → chunk-YZCP3GAM-oKk9Gv_e.js} +1 -1
  290. package/payload/server/public/assets/chunk-YZCP3GAM-oKk9Gv_e.js.br +0 -0
  291. package/payload/server/public/assets/chunk-YZCP3GAM-oKk9Gv_e.js.gz +0 -0
  292. package/payload/server/public/assets/{chunk-ZZ45TVLE-BJcH3KDH.js → chunk-ZZ45TVLE-teET41Yh.js} +1 -1
  293. package/payload/server/public/assets/chunk-ZZ45TVLE-teET41Yh.js.br +0 -0
  294. package/payload/server/public/assets/chunk-ZZ45TVLE-teET41Yh.js.gz +0 -0
  295. package/payload/server/public/assets/classDiagram-6PBFFD2Q-CMXajSzA.js +1 -0
  296. package/payload/server/public/assets/classDiagram-6PBFFD2Q-CMXajSzA.js.br +0 -0
  297. package/payload/server/public/assets/classDiagram-6PBFFD2Q-CMXajSzA.js.gz +0 -0
  298. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-Cz5Kib2r.js +1 -0
  299. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-Cz5Kib2r.js.br +0 -0
  300. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-Cz5Kib2r.js.gz +0 -0
  301. package/payload/server/public/assets/clock-C5xE5p2I.js +1 -0
  302. package/payload/server/public/assets/clock-C5xE5p2I.js.br +0 -0
  303. package/payload/server/public/assets/clone-BORhq8On.js +1 -0
  304. package/payload/server/public/assets/clone-BORhq8On.js.br +0 -0
  305. package/payload/server/public/assets/{copy-CGI2jioK.js → copy-TkPJgllS.js} +1 -1
  306. package/payload/server/public/assets/copy-TkPJgllS.js.br +0 -0
  307. package/payload/server/public/assets/copy-TkPJgllS.js.gz +0 -0
  308. package/payload/server/public/assets/{cose-bilkent-S5V4N54A-CcXj8vHa.js → cose-bilkent-S5V4N54A-D1xLpHGm.js} +1 -1
  309. package/payload/server/public/assets/cose-bilkent-S5V4N54A-D1xLpHGm.js.br +0 -0
  310. package/payload/server/public/assets/cose-bilkent-S5V4N54A-D1xLpHGm.js.gz +0 -0
  311. package/payload/server/public/assets/{dagre-KV5264BT-BOhQs4rS.js → dagre-KV5264BT-Byl65NKT.js} +1 -1
  312. package/payload/server/public/assets/dagre-KV5264BT-Byl65NKT.js.br +0 -0
  313. package/payload/server/public/assets/dagre-KV5264BT-Byl65NKT.js.gz +0 -0
  314. package/payload/server/public/assets/{dagre-DOtq9kYX.js → dagre-ZzXkSDir.js} +1 -1
  315. package/payload/server/public/assets/dagre-ZzXkSDir.js.br +0 -0
  316. package/payload/server/public/assets/dagre-ZzXkSDir.js.gz +0 -0
  317. package/payload/server/public/assets/data-Bhv0Pvfl.js +1 -0
  318. package/payload/server/public/assets/data-Bhv0Pvfl.js.br +0 -0
  319. package/payload/server/public/assets/data-Bhv0Pvfl.js.gz +0 -0
  320. package/payload/server/public/assets/{diagram-5BDNPKRD-CqJFt5ZM.js → diagram-5BDNPKRD-BFNkV5GK.js} +1 -1
  321. package/payload/server/public/assets/diagram-5BDNPKRD-BFNkV5GK.js.br +0 -0
  322. package/payload/server/public/assets/diagram-5BDNPKRD-BFNkV5GK.js.gz +0 -0
  323. package/payload/server/public/assets/{diagram-G4DWMVQ6-WQIyAZMn.js → diagram-G4DWMVQ6-1n6vHXzR.js} +1 -1
  324. package/payload/server/public/assets/diagram-G4DWMVQ6-1n6vHXzR.js.br +0 -0
  325. package/payload/server/public/assets/diagram-G4DWMVQ6-1n6vHXzR.js.gz +0 -0
  326. package/payload/server/public/assets/{diagram-MMDJMWI5-jcKc4a2w.js → diagram-MMDJMWI5-D4QOzaw0.js} +1 -1
  327. package/payload/server/public/assets/diagram-MMDJMWI5-D4QOzaw0.js.br +0 -0
  328. package/payload/server/public/assets/diagram-MMDJMWI5-D4QOzaw0.js.gz +0 -0
  329. package/payload/server/public/assets/{diagram-TYMM5635-Bbt2KuWe.js → diagram-TYMM5635-z8lBRsaV.js} +1 -1
  330. package/payload/server/public/assets/diagram-TYMM5635-z8lBRsaV.js.br +0 -0
  331. package/payload/server/public/assets/diagram-TYMM5635-z8lBRsaV.js.gz +0 -0
  332. package/payload/server/public/assets/{dist-9RiN6lky.js → dist-DjYA4E4S.js} +1 -1
  333. package/payload/server/public/assets/dist-DjYA4E4S.js.br +0 -0
  334. package/payload/server/public/assets/dist-DjYA4E4S.js.gz +0 -0
  335. package/payload/server/public/assets/{erDiagram-SMLLAGMA-BBm6azPJ.js → erDiagram-SMLLAGMA-CXj3tbtX.js} +1 -1
  336. package/payload/server/public/assets/erDiagram-SMLLAGMA-CXj3tbtX.js.br +0 -0
  337. package/payload/server/public/assets/erDiagram-SMLLAGMA-CXj3tbtX.js.gz +0 -0
  338. package/payload/server/public/assets/field-B490-evJ.js +1 -0
  339. package/payload/server/public/assets/field-B490-evJ.js.br +0 -0
  340. package/payload/server/public/assets/field-B490-evJ.js.gz +0 -0
  341. package/payload/server/public/assets/{file-text-RWintp9q.js → file-text-DyAL2DCh.js} +1 -1
  342. package/payload/server/public/assets/file-text-DyAL2DCh.js.br +0 -0
  343. package/payload/server/public/assets/file-text-DyAL2DCh.js.gz +0 -0
  344. package/payload/server/public/assets/{flatten-BurGKeIy.js → flatten-UdUTbm8v.js} +1 -1
  345. package/payload/server/public/assets/flatten-UdUTbm8v.js.br +0 -0
  346. package/payload/server/public/assets/flatten-UdUTbm8v.js.gz +0 -0
  347. package/payload/server/public/assets/{flowDiagram-DWJPFMVM-_r45DYJ8.js → flowDiagram-DWJPFMVM-DnySI-I4.js} +1 -1
  348. package/payload/server/public/assets/flowDiagram-DWJPFMVM-DnySI-I4.js.br +0 -0
  349. package/payload/server/public/assets/flowDiagram-DWJPFMVM-DnySI-I4.js.gz +0 -0
  350. package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-Bjgj9Bej.js → ganttDiagram-T4ZO3ILL-BIE2Q78F.js} +1 -1
  351. package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-BIE2Q78F.js.br +0 -0
  352. package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-BIE2Q78F.js.gz +0 -0
  353. package/payload/server/public/assets/gitGraph-7Q5UKJZL-Ua2z-DNt.js +1 -0
  354. package/payload/server/public/assets/gitGraph-7Q5UKJZL-Ua2z-DNt.js.br +0 -0
  355. package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-DTRdhGJA.js → gitGraphDiagram-UUTBAWPF-B2RTRpyG.js} +1 -1
  356. package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-B2RTRpyG.js.br +0 -0
  357. package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-B2RTRpyG.js.gz +0 -0
  358. package/payload/server/public/assets/{graph-CpBlfYrJ.js → graph-PiNIcCfX.js} +1 -1
  359. package/payload/server/public/assets/graph-PiNIcCfX.js.br +0 -0
  360. package/payload/server/public/assets/graph-PiNIcCfX.js.gz +0 -0
  361. package/payload/server/public/assets/{graph-labels-BOMyPppX.js → graph-labels-8jKFrLHn.js} +1 -1
  362. package/payload/server/public/assets/graph-labels-8jKFrLHn.js.br +0 -0
  363. package/payload/server/public/assets/graph-labels-8jKFrLHn.js.gz +0 -0
  364. package/payload/server/public/assets/{graphlib-DT4h6-4N.js → graphlib-SOh92ucm.js} +1 -1
  365. package/payload/server/public/assets/graphlib-SOh92ucm.js.br +0 -0
  366. package/payload/server/public/assets/graphlib-SOh92ucm.js.gz +0 -0
  367. package/payload/server/public/assets/info-OMHHGYJF-CNYp42iX.js +1 -0
  368. package/payload/server/public/assets/info-OMHHGYJF-CNYp42iX.js.br +0 -0
  369. package/payload/server/public/assets/infoDiagram-42DDH7IO-DklHffYr.js +2 -0
  370. package/payload/server/public/assets/infoDiagram-42DDH7IO-DklHffYr.js.br +0 -0
  371. package/payload/server/public/assets/infoDiagram-42DDH7IO-DklHffYr.js.gz +0 -0
  372. package/payload/server/public/assets/{isEmpty-C5v0-EY7.js → isEmpty-DY_Xp9Na.js} +1 -1
  373. package/payload/server/public/assets/isEmpty-DY_Xp9Na.js.br +0 -0
  374. package/payload/server/public/assets/isEmpty-DY_Xp9Na.js.gz +0 -0
  375. package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-BklHzVHm.js → ishikawaDiagram-UXIWVN3A-KAC06i3M.js} +1 -1
  376. package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-KAC06i3M.js.br +0 -0
  377. package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-KAC06i3M.js.gz +0 -0
  378. package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-Ckxx2CmV.js → journeyDiagram-VCZTEJTY-cA37ob8S.js} +1 -1
  379. package/payload/server/public/assets/journeyDiagram-VCZTEJTY-cA37ob8S.js.br +0 -0
  380. package/payload/server/public/assets/journeyDiagram-VCZTEJTY-cA37ob8S.js.gz +0 -0
  381. package/payload/server/public/assets/{jsx-runtime-DxsQ5Y-z.css → jsx-runtime-ChVh0xOm.css} +1 -1
  382. package/payload/server/public/assets/jsx-runtime-ChVh0xOm.css.br +0 -0
  383. package/payload/server/public/assets/{jsx-runtime-DxsQ5Y-z.css.gz → jsx-runtime-ChVh0xOm.css.gz} +0 -0
  384. package/payload/server/public/assets/{jsx-runtime-5lmxFBIw.js → jsx-runtime-YcUntiud.js} +1 -1
  385. package/payload/server/public/assets/jsx-runtime-YcUntiud.js.br +0 -0
  386. package/payload/server/public/assets/jsx-runtime-YcUntiud.js.gz +0 -0
  387. package/payload/server/public/assets/{kanban-definition-6JOO6SKY-BLELXpqn.js → kanban-definition-6JOO6SKY-CBjL70wU.js} +1 -1
  388. package/payload/server/public/assets/kanban-definition-6JOO6SKY-CBjL70wU.js.br +0 -0
  389. package/payload/server/public/assets/kanban-definition-6JOO6SKY-CBjL70wU.js.gz +0 -0
  390. package/payload/server/public/assets/{line-BkI5icOY.js → line-K8229GLG.js} +1 -1
  391. package/payload/server/public/assets/line-K8229GLG.js.br +0 -0
  392. package/payload/server/public/assets/line-K8229GLG.js.gz +0 -0
  393. package/payload/server/public/assets/{linear-B64ANRVs.js → linear-DeX7Wdt6.js} +1 -1
  394. package/payload/server/public/assets/linear-DeX7Wdt6.js.br +0 -0
  395. package/payload/server/public/assets/linear-DeX7Wdt6.js.gz +0 -0
  396. package/payload/server/public/assets/{mermaid-parser.core-qXPKkdJe.js → mermaid-parser.core-OnNOAzPX.js} +2 -2
  397. package/payload/server/public/assets/mermaid-parser.core-OnNOAzPX.js.br +0 -0
  398. package/payload/server/public/assets/mermaid-parser.core-OnNOAzPX.js.gz +0 -0
  399. package/payload/server/public/assets/{mermaid.core-BMsz65Wy.js → mermaid.core-DA-Gezeo.js} +3 -3
  400. package/payload/server/public/assets/mermaid.core-DA-Gezeo.js.br +0 -0
  401. package/payload/server/public/assets/mermaid.core-DA-Gezeo.js.gz +0 -0
  402. package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-DhFTS2sx.js → mindmap-definition-QFDTVHPH-C24TcDyS.js} +1 -1
  403. package/payload/server/public/assets/mindmap-definition-QFDTVHPH-C24TcDyS.js.br +0 -0
  404. package/payload/server/public/assets/mindmap-definition-QFDTVHPH-C24TcDyS.js.gz +0 -0
  405. package/payload/server/public/assets/operator-DKGKGzrb.js +1 -0
  406. package/payload/server/public/assets/operator-DKGKGzrb.js.br +0 -0
  407. package/payload/server/public/assets/operator-DKGKGzrb.js.gz +0 -0
  408. package/payload/server/public/assets/{ordinal-CJ_pL32Z.js → ordinal-gnpqfIHn.js} +1 -1
  409. package/payload/server/public/assets/ordinal-gnpqfIHn.js.br +0 -0
  410. package/payload/server/public/assets/ordinal-gnpqfIHn.js.gz +0 -0
  411. package/payload/server/public/assets/packet-4T2RLAQJ-B3ZAElsg.js +1 -0
  412. package/payload/server/public/assets/packet-4T2RLAQJ-B3ZAElsg.js.br +0 -0
  413. package/payload/server/public/assets/{page-BRShHSH0.js → page-BU5vlY9Y.js} +1 -1
  414. package/payload/server/public/assets/page-BU5vlY9Y.js.br +0 -0
  415. package/payload/server/public/assets/page-BU5vlY9Y.js.gz +0 -0
  416. package/payload/server/public/assets/{page-BbBCu9iP.js → page-DXz_K10G.js} +3 -3
  417. package/payload/server/public/assets/page-DXz_K10G.js.br +0 -0
  418. package/payload/server/public/assets/page-DXz_K10G.js.gz +0 -0
  419. package/payload/server/public/assets/{pdf-render-ynIPXfRA.js → pdf-render-B5af7vu1.js} +1 -1
  420. package/payload/server/public/assets/pdf-render-B5af7vu1.js.br +0 -0
  421. package/payload/server/public/assets/pdf-render-B5af7vu1.js.gz +0 -0
  422. package/payload/server/public/assets/pie-ZZUOXDRM-BWsRCj8p.js +1 -0
  423. package/payload/server/public/assets/pie-ZZUOXDRM-BWsRCj8p.js.br +0 -0
  424. package/payload/server/public/assets/{pieDiagram-DEJITSTG-B2TxkbHK.js → pieDiagram-DEJITSTG-ChS9jalQ.js} +1 -1
  425. package/payload/server/public/assets/pieDiagram-DEJITSTG-ChS9jalQ.js.br +0 -0
  426. package/payload/server/public/assets/pieDiagram-DEJITSTG-ChS9jalQ.js.gz +0 -0
  427. package/payload/server/public/assets/play-CmSyYrB6.js +1 -0
  428. package/payload/server/public/assets/play-CmSyYrB6.js.br +0 -0
  429. package/payload/server/public/assets/play-CmSyYrB6.js.gz +0 -0
  430. package/payload/server/public/assets/{public-DkObqkzL.js → public-BmA3-jLj.js} +1 -1
  431. package/payload/server/public/assets/public-BmA3-jLj.js.br +0 -0
  432. package/payload/server/public/assets/public-BmA3-jLj.js.gz +0 -0
  433. package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-GsMxIJuS.js → quadrantDiagram-34T5L4WZ-BxLfRK0z.js} +1 -1
  434. package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-BxLfRK0z.js.br +0 -0
  435. package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-BxLfRK0z.js.gz +0 -0
  436. package/payload/server/public/assets/radar-PYXPWWZC-Gxbt2rGT.js +1 -0
  437. package/payload/server/public/assets/radar-PYXPWWZC-Gxbt2rGT.js.br +0 -0
  438. package/payload/server/public/assets/{reduce-CfkEiHc9.js → reduce-BvezuHIe.js} +1 -1
  439. package/payload/server/public/assets/reduce-BvezuHIe.js.br +0 -0
  440. package/payload/server/public/assets/reduce-BvezuHIe.js.gz +0 -0
  441. package/payload/server/public/assets/{requirementDiagram-MS252O5E-DqNprm-1.js → requirementDiagram-MS252O5E-CWy48VI3.js} +1 -1
  442. package/payload/server/public/assets/requirementDiagram-MS252O5E-CWy48VI3.js.br +0 -0
  443. package/payload/server/public/assets/requirementDiagram-MS252O5E-CWy48VI3.js.gz +0 -0
  444. package/payload/server/public/assets/{rotate-ccw-DgMO69nh.js → rotate-ccw-fCH0LSMq.js} +1 -1
  445. package/payload/server/public/assets/rotate-ccw-fCH0LSMq.js.br +0 -0
  446. package/payload/server/public/assets/rotate-ccw-fCH0LSMq.js.gz +0 -0
  447. package/payload/server/public/assets/{routines-D9kvg_Xu.js → routines-BeFrmkls.js} +1 -1
  448. package/payload/server/public/assets/routines-BeFrmkls.js.br +0 -0
  449. package/payload/server/public/assets/routines-BeFrmkls.js.gz +0 -0
  450. package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-B-kRuiuz.js → sankeyDiagram-XADWPNL6-BBCLEJA3.js} +1 -1
  451. package/payload/server/public/assets/sankeyDiagram-XADWPNL6-BBCLEJA3.js.br +0 -0
  452. package/payload/server/public/assets/sankeyDiagram-XADWPNL6-BBCLEJA3.js.gz +0 -0
  453. package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-DEhL9g3K.js → sequenceDiagram-FGHM5R23-wu64F04G.js} +1 -1
  454. package/payload/server/public/assets/sequenceDiagram-FGHM5R23-wu64F04G.js.br +0 -0
  455. package/payload/server/public/assets/sequenceDiagram-FGHM5R23-wu64F04G.js.gz +0 -0
  456. package/payload/server/public/assets/{skills-l5I9HZ3D.js → skills-mjls5HBa.js} +1 -1
  457. package/payload/server/public/assets/skills-mjls5HBa.js.br +0 -0
  458. package/payload/server/public/assets/skills-mjls5HBa.js.gz +0 -0
  459. package/payload/server/public/assets/{src-BrAT6wKv.js → src-BvINb2fL.js} +1 -1
  460. package/payload/server/public/assets/src-BvINb2fL.js.br +0 -0
  461. package/payload/server/public/assets/src-BvINb2fL.js.gz +0 -0
  462. package/payload/server/public/assets/{stateDiagram-FHFEXIEX-Q-g6BHdz.js → stateDiagram-FHFEXIEX-Bq6BFFDC.js} +1 -1
  463. package/payload/server/public/assets/stateDiagram-FHFEXIEX-Bq6BFFDC.js.br +0 -0
  464. package/payload/server/public/assets/stateDiagram-FHFEXIEX-Bq6BFFDC.js.gz +0 -0
  465. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-PxPsWt1r.js +1 -0
  466. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-PxPsWt1r.js.br +0 -0
  467. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-PxPsWt1r.js.gz +0 -0
  468. package/payload/server/public/assets/{tasks-C2qJMv6i.js → tasks-p6puHHD0.js} +1 -1
  469. package/payload/server/public/assets/tasks-p6puHHD0.js.br +0 -0
  470. package/payload/server/public/assets/tasks-p6puHHD0.js.gz +0 -0
  471. package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-B3-52q4Q.js → timeline-definition-GMOUNBTQ-DTdvVZp-.js} +1 -1
  472. package/payload/server/public/assets/timeline-definition-GMOUNBTQ-DTdvVZp-.js.br +0 -0
  473. package/payload/server/public/assets/timeline-definition-GMOUNBTQ-DTdvVZp-.js.gz +0 -0
  474. package/payload/server/public/assets/treeView-SZITEDCU-Bl-aPmE3.js +1 -0
  475. package/payload/server/public/assets/treeView-SZITEDCU-Bl-aPmE3.js.br +0 -0
  476. package/payload/server/public/assets/treemap-W4RFUUIX-CUxE8Ofg.js +1 -0
  477. package/payload/server/public/assets/treemap-W4RFUUIX-CUxE8Ofg.js.br +0 -0
  478. package/payload/server/public/assets/{triangle-alert-BnC67uSs.js → triangle-alert-CrZ1ewbd.js} +1 -1
  479. package/payload/server/public/assets/triangle-alert-CrZ1ewbd.js.br +0 -0
  480. package/payload/server/public/assets/triangle-alert-CrZ1ewbd.js.gz +0 -0
  481. package/payload/server/public/assets/{useCopyFeedback-1RmgkTFh.js → useCopyFeedback-zOQNrIwd.js} +1 -1
  482. package/payload/server/public/assets/useCopyFeedback-zOQNrIwd.js.br +0 -0
  483. package/payload/server/public/assets/useCopyFeedback-zOQNrIwd.js.gz +0 -0
  484. package/payload/server/public/assets/{useMediaQuery-BQslddHQ.js → useMediaQuery-BmG090FR.js} +1 -1
  485. package/payload/server/public/assets/useMediaQuery-BmG090FR.js.br +0 -0
  486. package/payload/server/public/assets/useMediaQuery-BmG090FR.js.gz +0 -0
  487. package/payload/server/public/assets/{useVoiceRecorder-BeZNQEC4.js → useVoiceRecorder-9pf6FFJ-.js} +2 -2
  488. package/payload/server/public/assets/useVoiceRecorder-9pf6FFJ-.js.br +0 -0
  489. package/payload/server/public/assets/useVoiceRecorder-9pf6FFJ-.js.gz +0 -0
  490. package/payload/server/public/assets/{vennDiagram-DHZGUBPP-Bzm1VDi1.js → vennDiagram-DHZGUBPP-CigqIBdl.js} +1 -1
  491. package/payload/server/public/assets/vennDiagram-DHZGUBPP-CigqIBdl.js.br +0 -0
  492. package/payload/server/public/assets/vennDiagram-DHZGUBPP-CigqIBdl.js.gz +0 -0
  493. package/payload/server/public/assets/wardley-RL74JXVD-DPB13D22.js +1 -0
  494. package/payload/server/public/assets/wardley-RL74JXVD-DPB13D22.js.br +0 -0
  495. package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-DIqGZr4v.js → wardleyDiagram-NUSXRM2D-VhV1plUD.js} +1 -1
  496. package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-VhV1plUD.js.br +0 -0
  497. package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-VhV1plUD.js.gz +0 -0
  498. package/payload/server/public/assets/{wrench-D4ufQG6C.js → wrench-k4GYG5rc.js} +1 -1
  499. package/payload/server/public/assets/wrench-k4GYG5rc.js.br +0 -0
  500. package/payload/server/public/assets/wrench-k4GYG5rc.js.gz +0 -0
  501. package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-0W2L2hQA.js → xychartDiagram-5P7HB3ND-DGkkNLZt.js} +1 -1
  502. package/payload/server/public/assets/xychartDiagram-5P7HB3ND-DGkkNLZt.js.br +0 -0
  503. package/payload/server/public/assets/xychartDiagram-5P7HB3ND-DGkkNLZt.js.gz +0 -0
  504. package/payload/server/public/browser.html +6 -6
  505. package/payload/server/public/calendar.html +9 -9
  506. package/payload/server/public/chat.html +16 -16
  507. package/payload/server/public/data.html +15 -15
  508. package/payload/server/public/field.html +4 -4
  509. package/payload/server/public/graph.html +11 -11
  510. package/payload/server/public/index.html +17 -17
  511. package/payload/server/public/operator.html +17 -17
  512. package/payload/server/public/public.html +16 -16
  513. package/payload/server/public/routines.html +10 -10
  514. package/payload/server/public/skills.html +7 -7
  515. package/payload/server/public/tasks.html +8 -8
  516. package/payload/server/server.js +3111 -2182
  517. package/dist/__tests__/converge-client-admins.test.js +0 -50
  518. package/payload/platform/lib/dispatch-read/src/config.d.ts +0 -26
  519. package/payload/platform/lib/dispatch-read/src/types.d.ts +0 -143
  520. package/payload/server/public/assets/AdminLoginScreens-Dp6k1XgD.js.br +0 -0
  521. package/payload/server/public/assets/AdminLoginScreens-Dp6k1XgD.js.gz +0 -0
  522. package/payload/server/public/assets/AdminShell-D-wB90c3.js +0 -3
  523. package/payload/server/public/assets/AdminShell-D-wB90c3.js.br +0 -0
  524. package/payload/server/public/assets/AdminShell-D-wB90c3.js.gz +0 -0
  525. package/payload/server/public/assets/activity-BJxhblz-.js.br +0 -0
  526. package/payload/server/public/assets/activity-BJxhblz-.js.gz +0 -0
  527. package/payload/server/public/assets/admin-DzEi8shs.js +0 -1
  528. package/payload/server/public/assets/admin-DzEi8shs.js.br +0 -0
  529. package/payload/server/public/assets/admin-DzEi8shs.js.gz +0 -0
  530. package/payload/server/public/assets/agents-DTL8kjfD.js.br +0 -0
  531. package/payload/server/public/assets/agents-DTL8kjfD.js.gz +0 -0
  532. package/payload/server/public/assets/arc-CWXBKNZd.js.br +0 -0
  533. package/payload/server/public/assets/arc-CWXBKNZd.js.gz +0 -0
  534. package/payload/server/public/assets/architecture-YZFGNWBL-CIL4I0fc.js +0 -1
  535. package/payload/server/public/assets/architecture-YZFGNWBL-CIL4I0fc.js.br +0 -0
  536. package/payload/server/public/assets/architectureDiagram-Q4EWVU46-C-KPMyG4.js.br +0 -0
  537. package/payload/server/public/assets/architectureDiagram-Q4EWVU46-C-KPMyG4.js.gz +0 -0
  538. package/payload/server/public/assets/blockDiagram-DXYQGD6D-DkYbV9Sf.js.br +0 -0
  539. package/payload/server/public/assets/blockDiagram-DXYQGD6D-DkYbV9Sf.js.gz +0 -0
  540. package/payload/server/public/assets/browser-UZp75zhx.js.br +0 -0
  541. package/payload/server/public/assets/browser-UZp75zhx.js.gz +0 -0
  542. package/payload/server/public/assets/c4Diagram-AHTNJAMY-EYW4kdlx.js.br +0 -0
  543. package/payload/server/public/assets/calendar-Dfo0O2K_.js.br +0 -0
  544. package/payload/server/public/assets/calendar-Dfo0O2K_.js.gz +0 -0
  545. package/payload/server/public/assets/channel-CbHmRjy_.js +0 -1
  546. package/payload/server/public/assets/channel-CbHmRjy_.js.br +0 -0
  547. package/payload/server/public/assets/chat-ByJAvEWZ.js +0 -1
  548. package/payload/server/public/assets/chat-ByJAvEWZ.js.br +0 -0
  549. package/payload/server/public/assets/chat-ByJAvEWZ.js.gz +0 -0
  550. package/payload/server/public/assets/chevron-left-iG7sYNm7.js +0 -1
  551. package/payload/server/public/assets/chevron-left-iG7sYNm7.js.br +0 -0
  552. package/payload/server/public/assets/chunk-2KRD3SAO-CmAF1UmH.js.br +0 -0
  553. package/payload/server/public/assets/chunk-2KRD3SAO-CmAF1UmH.js.gz +0 -0
  554. package/payload/server/public/assets/chunk-336JU56O-CyhmJeMM.js.br +0 -0
  555. package/payload/server/public/assets/chunk-336JU56O-CyhmJeMM.js.gz +0 -0
  556. package/payload/server/public/assets/chunk-426QAEUC-C2tnHCM7.js +0 -1
  557. package/payload/server/public/assets/chunk-426QAEUC-C2tnHCM7.js.br +0 -0
  558. package/payload/server/public/assets/chunk-426QAEUC-C2tnHCM7.js.gz +0 -0
  559. package/payload/server/public/assets/chunk-4BX2VUAB-DCzC40-Y.js.br +0 -0
  560. package/payload/server/public/assets/chunk-4BX2VUAB-DCzC40-Y.js.gz +0 -0
  561. package/payload/server/public/assets/chunk-4TB4RGXK-D9BXrSA_.js.br +0 -0
  562. package/payload/server/public/assets/chunk-4TB4RGXK-D9BXrSA_.js.gz +0 -0
  563. package/payload/server/public/assets/chunk-55IACEB6-BwXC-qTZ.js.br +0 -0
  564. package/payload/server/public/assets/chunk-55IACEB6-BwXC-qTZ.js.gz +0 -0
  565. package/payload/server/public/assets/chunk-5FUZZQ4R-De7QtXxM.js.br +0 -0
  566. package/payload/server/public/assets/chunk-5FUZZQ4R-De7QtXxM.js.gz +0 -0
  567. package/payload/server/public/assets/chunk-5PVQY5BW-B5tsJiCq.js.br +0 -0
  568. package/payload/server/public/assets/chunk-5PVQY5BW-B5tsJiCq.js.gz +0 -0
  569. package/payload/server/public/assets/chunk-67CJDMHE-BjTh9STV.js.br +0 -0
  570. package/payload/server/public/assets/chunk-67CJDMHE-BjTh9STV.js.gz +0 -0
  571. package/payload/server/public/assets/chunk-7N4EOEYR-91klRswn.js.br +0 -0
  572. package/payload/server/public/assets/chunk-7N4EOEYR-91klRswn.js.gz +0 -0
  573. package/payload/server/public/assets/chunk-AA7GKIK3-XFPGEoBu.js.br +0 -3
  574. package/payload/server/public/assets/chunk-AA7GKIK3-XFPGEoBu.js.gz +0 -0
  575. package/payload/server/public/assets/chunk-BSJP7CBP-B7wgMyWq.js.br +0 -0
  576. package/payload/server/public/assets/chunk-BSJP7CBP-B7wgMyWq.js.gz +0 -0
  577. package/payload/server/public/assets/chunk-CIAEETIT-WPy9vcOo.js.br +0 -0
  578. package/payload/server/public/assets/chunk-CIAEETIT-WPy9vcOo.js.gz +0 -0
  579. package/payload/server/public/assets/chunk-EDXVE4YY-D_2JIFFG.js.br +0 -0
  580. package/payload/server/public/assets/chunk-EDXVE4YY-D_2JIFFG.js.gz +0 -0
  581. package/payload/server/public/assets/chunk-ENJZ2VHE-xORReRt0.js.br +0 -0
  582. package/payload/server/public/assets/chunk-ENJZ2VHE-xORReRt0.js.gz +0 -0
  583. package/payload/server/public/assets/chunk-FMBD7UC4-BZsDu4nl.js.br +0 -0
  584. package/payload/server/public/assets/chunk-FMBD7UC4-BZsDu4nl.js.gz +0 -0
  585. package/payload/server/public/assets/chunk-FOC6F5B3-QzUp8wXX.js.br +0 -0
  586. package/payload/server/public/assets/chunk-FOC6F5B3-QzUp8wXX.js.gz +0 -0
  587. package/payload/server/public/assets/chunk-ICPOFSXX-B64S7i7x.js.br +0 -0
  588. package/payload/server/public/assets/chunk-ICPOFSXX-B64S7i7x.js.gz +0 -0
  589. package/payload/server/public/assets/chunk-K5T4RW27-DzPc6X1_.js.br +0 -0
  590. package/payload/server/public/assets/chunk-K5T4RW27-DzPc6X1_.js.gz +0 -0
  591. package/payload/server/public/assets/chunk-KGLVRYIC-A2rPnD7k.js.br +0 -1
  592. package/payload/server/public/assets/chunk-KGLVRYIC-A2rPnD7k.js.gz +0 -0
  593. package/payload/server/public/assets/chunk-LIHQZDEY-CaWX327m.js.br +0 -0
  594. package/payload/server/public/assets/chunk-LIHQZDEY-CaWX327m.js.gz +0 -0
  595. package/payload/server/public/assets/chunk-ORNJ4GCN-zrWhdmnc.js.br +0 -0
  596. package/payload/server/public/assets/chunk-ORNJ4GCN-zrWhdmnc.js.gz +0 -0
  597. package/payload/server/public/assets/chunk-OYMX7WX6-B_2qQir6.js.br +0 -0
  598. package/payload/server/public/assets/chunk-OYMX7WX6-B_2qQir6.js.gz +0 -0
  599. package/payload/server/public/assets/chunk-QZHKN3VN-BzgrgCTo.js +0 -1
  600. package/payload/server/public/assets/chunk-QZHKN3VN-BzgrgCTo.js.br +0 -0
  601. package/payload/server/public/assets/chunk-QZHKN3VN-BzgrgCTo.js.gz +0 -0
  602. package/payload/server/public/assets/chunk-U2HBQHQK-B-IYgxsc.js.br +0 -0
  603. package/payload/server/public/assets/chunk-U2HBQHQK-B-IYgxsc.js.gz +0 -0
  604. package/payload/server/public/assets/chunk-X2U36JSP-Y9Y1_EuG.js.br +0 -0
  605. package/payload/server/public/assets/chunk-X2U36JSP-Y9Y1_EuG.js.gz +0 -0
  606. package/payload/server/public/assets/chunk-XPW4576I-C-6yETG_.js.br +0 -0
  607. package/payload/server/public/assets/chunk-XPW4576I-C-6yETG_.js.gz +0 -0
  608. package/payload/server/public/assets/chunk-YZCP3GAM-KAuQIU5n.js.br +0 -0
  609. package/payload/server/public/assets/chunk-YZCP3GAM-KAuQIU5n.js.gz +0 -0
  610. package/payload/server/public/assets/chunk-ZZ45TVLE-BJcH3KDH.js.br +0 -0
  611. package/payload/server/public/assets/chunk-ZZ45TVLE-BJcH3KDH.js.gz +0 -0
  612. package/payload/server/public/assets/classDiagram-6PBFFD2Q-BxvqeBEj.js +0 -1
  613. package/payload/server/public/assets/classDiagram-6PBFFD2Q-BxvqeBEj.js.br +0 -0
  614. package/payload/server/public/assets/classDiagram-6PBFFD2Q-BxvqeBEj.js.gz +0 -0
  615. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-R3-NzMRG.js +0 -1
  616. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-R3-NzMRG.js.br +0 -0
  617. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-R3-NzMRG.js.gz +0 -0
  618. package/payload/server/public/assets/clock-xSs0UF10.js +0 -1
  619. package/payload/server/public/assets/clock-xSs0UF10.js.br +0 -0
  620. package/payload/server/public/assets/clock-xSs0UF10.js.gz +0 -0
  621. package/payload/server/public/assets/clone-QdOE5SXR.js +0 -1
  622. package/payload/server/public/assets/copy-CGI2jioK.js.br +0 -0
  623. package/payload/server/public/assets/copy-CGI2jioK.js.gz +0 -0
  624. package/payload/server/public/assets/cose-bilkent-S5V4N54A-CcXj8vHa.js.br +0 -0
  625. package/payload/server/public/assets/cose-bilkent-S5V4N54A-CcXj8vHa.js.gz +0 -0
  626. package/payload/server/public/assets/dagre-DOtq9kYX.js.br +0 -0
  627. package/payload/server/public/assets/dagre-DOtq9kYX.js.gz +0 -0
  628. package/payload/server/public/assets/dagre-KV5264BT-BOhQs4rS.js.br +0 -0
  629. package/payload/server/public/assets/dagre-KV5264BT-BOhQs4rS.js.gz +0 -0
  630. package/payload/server/public/assets/data-dvwK4BcP.js +0 -1
  631. package/payload/server/public/assets/data-dvwK4BcP.js.br +0 -0
  632. package/payload/server/public/assets/data-dvwK4BcP.js.gz +0 -0
  633. package/payload/server/public/assets/diagram-5BDNPKRD-CqJFt5ZM.js.br +0 -0
  634. package/payload/server/public/assets/diagram-5BDNPKRD-CqJFt5ZM.js.gz +0 -0
  635. package/payload/server/public/assets/diagram-G4DWMVQ6-WQIyAZMn.js.br +0 -0
  636. package/payload/server/public/assets/diagram-G4DWMVQ6-WQIyAZMn.js.gz +0 -0
  637. package/payload/server/public/assets/diagram-MMDJMWI5-jcKc4a2w.js.br +0 -0
  638. package/payload/server/public/assets/diagram-MMDJMWI5-jcKc4a2w.js.gz +0 -0
  639. package/payload/server/public/assets/diagram-TYMM5635-Bbt2KuWe.js.br +0 -0
  640. package/payload/server/public/assets/diagram-TYMM5635-Bbt2KuWe.js.gz +0 -0
  641. package/payload/server/public/assets/dispatch-Dx9-ty1K.js +0 -1
  642. package/payload/server/public/assets/dispatch-Dx9-ty1K.js.br +0 -0
  643. package/payload/server/public/assets/dispatch-Dx9-ty1K.js.gz +0 -0
  644. package/payload/server/public/assets/dist-9RiN6lky.js.br +0 -0
  645. package/payload/server/public/assets/dist-9RiN6lky.js.gz +0 -0
  646. package/payload/server/public/assets/erDiagram-SMLLAGMA-BBm6azPJ.js.br +0 -0
  647. package/payload/server/public/assets/erDiagram-SMLLAGMA-BBm6azPJ.js.gz +0 -0
  648. package/payload/server/public/assets/field-D-P6CsWA.js +0 -1
  649. package/payload/server/public/assets/field-D-P6CsWA.js.br +0 -0
  650. package/payload/server/public/assets/field-D-P6CsWA.js.gz +0 -0
  651. package/payload/server/public/assets/file-text-RWintp9q.js.br +0 -0
  652. package/payload/server/public/assets/file-text-RWintp9q.js.gz +0 -0
  653. package/payload/server/public/assets/flatten-BurGKeIy.js.br +0 -0
  654. package/payload/server/public/assets/flatten-BurGKeIy.js.gz +0 -0
  655. package/payload/server/public/assets/flowDiagram-DWJPFMVM-_r45DYJ8.js.br +0 -0
  656. package/payload/server/public/assets/flowDiagram-DWJPFMVM-_r45DYJ8.js.gz +0 -0
  657. package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-Bjgj9Bej.js.br +0 -0
  658. package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-Bjgj9Bej.js.gz +0 -0
  659. package/payload/server/public/assets/gitGraph-7Q5UKJZL-DdbK59od.js +0 -1
  660. package/payload/server/public/assets/gitGraph-7Q5UKJZL-DdbK59od.js.br +0 -0
  661. package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-DTRdhGJA.js.br +0 -0
  662. package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-DTRdhGJA.js.gz +0 -0
  663. package/payload/server/public/assets/graph-CpBlfYrJ.js.br +0 -0
  664. package/payload/server/public/assets/graph-CpBlfYrJ.js.gz +0 -0
  665. package/payload/server/public/assets/graph-labels-BOMyPppX.js.br +0 -0
  666. package/payload/server/public/assets/graph-labels-BOMyPppX.js.gz +0 -0
  667. package/payload/server/public/assets/graphlib-DT4h6-4N.js.br +0 -0
  668. package/payload/server/public/assets/graphlib-DT4h6-4N.js.gz +0 -0
  669. package/payload/server/public/assets/info-OMHHGYJF-BR8gm0wj.js +0 -1
  670. package/payload/server/public/assets/info-OMHHGYJF-BR8gm0wj.js.br +0 -0
  671. package/payload/server/public/assets/infoDiagram-42DDH7IO-Cr3Efss6.js +0 -2
  672. package/payload/server/public/assets/infoDiagram-42DDH7IO-Cr3Efss6.js.br +0 -0
  673. package/payload/server/public/assets/infoDiagram-42DDH7IO-Cr3Efss6.js.gz +0 -0
  674. package/payload/server/public/assets/isEmpty-C5v0-EY7.js.br +0 -0
  675. package/payload/server/public/assets/isEmpty-C5v0-EY7.js.gz +0 -0
  676. package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-BklHzVHm.js.br +0 -0
  677. package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-BklHzVHm.js.gz +0 -0
  678. package/payload/server/public/assets/journeyDiagram-VCZTEJTY-Ckxx2CmV.js.br +0 -0
  679. package/payload/server/public/assets/journeyDiagram-VCZTEJTY-Ckxx2CmV.js.gz +0 -0
  680. package/payload/server/public/assets/jsx-runtime-5lmxFBIw.js.br +0 -0
  681. package/payload/server/public/assets/jsx-runtime-5lmxFBIw.js.gz +0 -0
  682. package/payload/server/public/assets/jsx-runtime-DxsQ5Y-z.css.br +0 -0
  683. package/payload/server/public/assets/kanban-definition-6JOO6SKY-BLELXpqn.js.br +0 -0
  684. package/payload/server/public/assets/kanban-definition-6JOO6SKY-BLELXpqn.js.gz +0 -0
  685. package/payload/server/public/assets/line-BkI5icOY.js.br +0 -0
  686. package/payload/server/public/assets/line-BkI5icOY.js.gz +0 -0
  687. package/payload/server/public/assets/linear-B64ANRVs.js.br +0 -0
  688. package/payload/server/public/assets/linear-B64ANRVs.js.gz +0 -0
  689. package/payload/server/public/assets/mermaid-parser.core-qXPKkdJe.js.br +0 -0
  690. package/payload/server/public/assets/mermaid-parser.core-qXPKkdJe.js.gz +0 -0
  691. package/payload/server/public/assets/mermaid.core-BMsz65Wy.js.br +0 -0
  692. package/payload/server/public/assets/mermaid.core-BMsz65Wy.js.gz +0 -0
  693. package/payload/server/public/assets/mindmap-definition-QFDTVHPH-DhFTS2sx.js.br +0 -0
  694. package/payload/server/public/assets/mindmap-definition-QFDTVHPH-DhFTS2sx.js.gz +0 -0
  695. package/payload/server/public/assets/operator-DFgW6GiH.js +0 -1
  696. package/payload/server/public/assets/operator-DFgW6GiH.js.br +0 -0
  697. package/payload/server/public/assets/operator-DFgW6GiH.js.gz +0 -0
  698. package/payload/server/public/assets/ordinal-CJ_pL32Z.js.br +0 -0
  699. package/payload/server/public/assets/ordinal-CJ_pL32Z.js.gz +0 -0
  700. package/payload/server/public/assets/packet-4T2RLAQJ-B31PbAeA.js +0 -1
  701. package/payload/server/public/assets/packet-4T2RLAQJ-B31PbAeA.js.br +0 -0
  702. package/payload/server/public/assets/page-BRShHSH0.js.br +0 -0
  703. package/payload/server/public/assets/page-BRShHSH0.js.gz +0 -0
  704. package/payload/server/public/assets/page-BbBCu9iP.js.br +0 -0
  705. package/payload/server/public/assets/page-BbBCu9iP.js.gz +0 -0
  706. package/payload/server/public/assets/pdf-render-ynIPXfRA.js.br +0 -0
  707. package/payload/server/public/assets/pdf-render-ynIPXfRA.js.gz +0 -0
  708. package/payload/server/public/assets/pie-ZZUOXDRM-BbSc1VXl.js +0 -1
  709. package/payload/server/public/assets/pie-ZZUOXDRM-BbSc1VXl.js.br +0 -0
  710. package/payload/server/public/assets/pieDiagram-DEJITSTG-B2TxkbHK.js.br +0 -0
  711. package/payload/server/public/assets/pieDiagram-DEJITSTG-B2TxkbHK.js.gz +0 -0
  712. package/payload/server/public/assets/play-BJxUaf6-.js +0 -1
  713. package/payload/server/public/assets/play-BJxUaf6-.js.br +0 -0
  714. package/payload/server/public/assets/play-BJxUaf6-.js.gz +0 -0
  715. package/payload/server/public/assets/public-DkObqkzL.js.br +0 -0
  716. package/payload/server/public/assets/public-DkObqkzL.js.gz +0 -0
  717. package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-GsMxIJuS.js.br +0 -0
  718. package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-GsMxIJuS.js.gz +0 -0
  719. package/payload/server/public/assets/radar-PYXPWWZC-B0La8_mZ.js +0 -1
  720. package/payload/server/public/assets/radar-PYXPWWZC-B0La8_mZ.js.br +0 -0
  721. package/payload/server/public/assets/reduce-CfkEiHc9.js.br +0 -0
  722. package/payload/server/public/assets/reduce-CfkEiHc9.js.gz +0 -0
  723. package/payload/server/public/assets/requirementDiagram-MS252O5E-DqNprm-1.js.br +0 -0
  724. package/payload/server/public/assets/requirementDiagram-MS252O5E-DqNprm-1.js.gz +0 -0
  725. package/payload/server/public/assets/rotate-ccw-DgMO69nh.js.br +0 -0
  726. package/payload/server/public/assets/rotate-ccw-DgMO69nh.js.gz +0 -0
  727. package/payload/server/public/assets/routines-D9kvg_Xu.js.br +0 -0
  728. package/payload/server/public/assets/routines-D9kvg_Xu.js.gz +0 -0
  729. package/payload/server/public/assets/sankeyDiagram-XADWPNL6-B-kRuiuz.js.br +0 -0
  730. package/payload/server/public/assets/sankeyDiagram-XADWPNL6-B-kRuiuz.js.gz +0 -0
  731. package/payload/server/public/assets/sequenceDiagram-FGHM5R23-DEhL9g3K.js.br +0 -0
  732. package/payload/server/public/assets/sequenceDiagram-FGHM5R23-DEhL9g3K.js.gz +0 -0
  733. package/payload/server/public/assets/skills-l5I9HZ3D.js.br +0 -0
  734. package/payload/server/public/assets/skills-l5I9HZ3D.js.gz +0 -0
  735. package/payload/server/public/assets/src-BrAT6wKv.js.br +0 -0
  736. package/payload/server/public/assets/src-BrAT6wKv.js.gz +0 -0
  737. package/payload/server/public/assets/stateDiagram-FHFEXIEX-Q-g6BHdz.js.br +0 -0
  738. package/payload/server/public/assets/stateDiagram-FHFEXIEX-Q-g6BHdz.js.gz +0 -0
  739. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-ssRWItVj.js +0 -1
  740. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-ssRWItVj.js.br +0 -0
  741. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-ssRWItVj.js.gz +0 -0
  742. package/payload/server/public/assets/tasks-C2qJMv6i.js.br +0 -0
  743. package/payload/server/public/assets/tasks-C2qJMv6i.js.gz +0 -0
  744. package/payload/server/public/assets/timeline-definition-GMOUNBTQ-B3-52q4Q.js.br +0 -0
  745. package/payload/server/public/assets/timeline-definition-GMOUNBTQ-B3-52q4Q.js.gz +0 -0
  746. package/payload/server/public/assets/treeView-SZITEDCU-BBR3hu9P.js +0 -1
  747. package/payload/server/public/assets/treeView-SZITEDCU-BBR3hu9P.js.br +0 -0
  748. package/payload/server/public/assets/treemap-W4RFUUIX-wSQMuzBT.js +0 -1
  749. package/payload/server/public/assets/treemap-W4RFUUIX-wSQMuzBT.js.br +0 -0
  750. package/payload/server/public/assets/triangle-alert-BnC67uSs.js.br +0 -0
  751. package/payload/server/public/assets/triangle-alert-BnC67uSs.js.gz +0 -0
  752. package/payload/server/public/assets/useCopyFeedback-1RmgkTFh.js.br +0 -0
  753. package/payload/server/public/assets/useCopyFeedback-1RmgkTFh.js.gz +0 -0
  754. package/payload/server/public/assets/useMediaQuery-BQslddHQ.js.br +0 -0
  755. package/payload/server/public/assets/useMediaQuery-BQslddHQ.js.gz +0 -0
  756. package/payload/server/public/assets/useVoiceRecorder-BeZNQEC4.js.br +0 -0
  757. package/payload/server/public/assets/useVoiceRecorder-BeZNQEC4.js.gz +0 -0
  758. package/payload/server/public/assets/vennDiagram-DHZGUBPP-Bzm1VDi1.js.br +0 -0
  759. package/payload/server/public/assets/vennDiagram-DHZGUBPP-Bzm1VDi1.js.gz +0 -0
  760. package/payload/server/public/assets/wardley-RL74JXVD-3QaECtQN.js +0 -1
  761. package/payload/server/public/assets/wardley-RL74JXVD-3QaECtQN.js.br +0 -0
  762. package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-DIqGZr4v.js.br +0 -0
  763. package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-DIqGZr4v.js.gz +0 -0
  764. package/payload/server/public/assets/wrench-D4ufQG6C.js.br +0 -0
  765. package/payload/server/public/assets/wrench-D4ufQG6C.js.gz +0 -0
  766. package/payload/server/public/assets/xychartDiagram-5P7HB3ND-0W2L2hQA.js.br +0 -0
  767. package/payload/server/public/assets/xychartDiagram-5P7HB3ND-0W2L2hQA.js.gz +0 -0
  768. package/payload/server/public/dispatch.html +0 -20
  769. /package/payload/server/public/assets/{_baseFor-D1duyODO.js → _baseFor-BApe6Tla.js} +0 -0
  770. /package/payload/server/public/assets/{_baseFor-D1duyODO.js.br → _baseFor-BApe6Tla.js.br} +0 -0
  771. /package/payload/server/public/assets/{_baseFor-D1duyODO.js.gz → _baseFor-BApe6Tla.js.gz} +0 -0
  772. /package/payload/server/public/assets/{array-j7Xa9Fap.js → array-eiH4WfvY.js} +0 -0
  773. /package/payload/server/public/assets/{array-j7Xa9Fap.js.br → array-eiH4WfvY.js.br} +0 -0
  774. /package/payload/server/public/assets/{chunk-DlZTsV_O.js → chunk-BycB0eMI.js} +0 -0
  775. /package/payload/server/public/assets/{chunk-DlZTsV_O.js.br → chunk-BycB0eMI.js.br} +0 -0
  776. /package/payload/server/public/assets/{chunk-DlZTsV_O.js.gz → chunk-BycB0eMI.js.gz} +0 -0
  777. /package/payload/server/public/assets/{cytoscape.esm-Dob3eilA.js → cytoscape.esm-BZ6NYo0w.js} +0 -0
  778. /package/payload/server/public/assets/{cytoscape.esm-Dob3eilA.js.br → cytoscape.esm-BZ6NYo0w.js.br} +0 -0
  779. /package/payload/server/public/assets/{cytoscape.esm-Dob3eilA.js.gz → cytoscape.esm-BZ6NYo0w.js.gz} +0 -0
  780. /package/payload/server/public/assets/{defaultLocale-BNILPWh2.js → defaultLocale-DWHqsa6O.js} +0 -0
  781. /package/payload/server/public/assets/{defaultLocale-BNILPWh2.js.br → defaultLocale-DWHqsa6O.js.br} +0 -0
  782. /package/payload/server/public/assets/{defaultLocale-BNILPWh2.js.gz → defaultLocale-DWHqsa6O.js.gz} +0 -0
  783. /package/payload/server/public/assets/{file-download-CN4H4Eih.js → file-download-B7zwa78w.js} +0 -0
  784. /package/payload/server/public/assets/{file-download-CN4H4Eih.js.br → file-download-B7zwa78w.js.br} +0 -0
  785. /package/payload/server/public/assets/{file-download-CN4H4Eih.js.gz → file-download-B7zwa78w.js.gz} +0 -0
  786. /package/payload/server/public/assets/{init-ve51bpJo.js → init-BdkYWjJJ.js} +0 -0
  787. /package/payload/server/public/assets/{init-ve51bpJo.js.br → init-BdkYWjJJ.js.br} +0 -0
  788. /package/payload/server/public/assets/{init-ve51bpJo.js.gz → init-BdkYWjJJ.js.gz} +0 -0
  789. /package/payload/server/public/assets/{katex-CJNaolDQ.js → katex-BCzoGtFh.js} +0 -0
  790. /package/payload/server/public/assets/{katex-CJNaolDQ.js.br → katex-BCzoGtFh.js.br} +0 -0
  791. /package/payload/server/public/assets/{katex-CJNaolDQ.js.gz → katex-BCzoGtFh.js.gz} +0 -0
  792. /package/payload/server/public/assets/{path-B4emajHp.js → path-DY2qBuPM.js} +0 -0
  793. /package/payload/server/public/assets/{path-B4emajHp.js.br → path-DY2qBuPM.js.br} +0 -0
  794. /package/payload/server/public/assets/{path-B4emajHp.js.gz → path-DY2qBuPM.js.gz} +0 -0
  795. /package/payload/server/public/assets/{preload-helper-3YNEDsJZ.js → preload-helper-eAV8hweq.js} +0 -0
  796. /package/payload/server/public/assets/{preload-helper-3YNEDsJZ.js.br → preload-helper-eAV8hweq.js.br} +0 -0
  797. /package/payload/server/public/assets/{preload-helper-3YNEDsJZ.js.gz → preload-helper-eAV8hweq.js.gz} +0 -0
  798. /package/payload/server/public/assets/{rough.esm-zabqYs6f.js → rough.esm-ec8xsRC7.js} +0 -0
  799. /package/payload/server/public/assets/{rough.esm-zabqYs6f.js.br → rough.esm-ec8xsRC7.js.br} +0 -0
  800. /package/payload/server/public/assets/{rough.esm-zabqYs6f.js.gz → rough.esm-ec8xsRC7.js.gz} +0 -0
@@ -27,27 +27,26 @@ The remote-access password is the *outer* gate — the password the Cloudflare t
27
27
 
28
28
  ## Channel bindings decide whether an answer reaches a second channel
29
29
 
30
- An admin's `users.json` entry carries two optional bindings, and they are what
31
- lets one answer reach every channel that person holds rather than only the one
32
- the message arrived on.
30
+ An admin's `users.json` entry carries two optional bindings. They say who a
31
+ sender is. They do not decide where an answer goes: an answer always goes back
32
+ to the door the message arrived on and nowhere else.
33
33
 
34
- `phone` is the E.164 number. It identifies a WhatsApp sender as this person, and
35
- it is also the address used to reach them on WhatsApp when a turn arrives
36
- somewhere else. `telegram` is the chat id, matched exactly, doing the same two
37
- jobs for Telegram. They are not interchangeable, and two-way reach needs both.
34
+ `phone` is the E.164 number, identifying a WhatsApp sender as this person.
35
+ `telegram` is the chat id, matched exactly, doing the same for a Telegram
36
+ sender. They are not interchangeable, and a person messaging from both channels
37
+ needs both set to be recognised on both.
38
38
 
39
39
  `account.json` `whatsapp.adminPhones` is a different thing: an allowlist saying
40
40
  a number may reach the admin agent. It grants access; it does not say whose
41
41
  number it is, which is why adding a phone there never binds anyone.
42
42
 
43
- When a binding is missing, the failure is silent to the person messaging. These
43
+ When a binding is missing, the sender is not recognised as this admin. These
44
44
  lines in `server.log` name it:
45
45
 
46
46
  | Line | Means |
47
47
  |---|---|
48
- | `[whatsapp-native] op=admin-identity senderId=… userId=unbound-empty` | this sender resolves to no admin, so no second door is looked for |
49
- | `[channel-fanout] op=no-target origin=… reason=no-admin-user` | the same fact, at the fan-out |
50
- | `[channel-fanout] op=fan-out reached=… notReached=…` | which doors actually received the answer |
48
+ | `[whatsapp-native] op=admin-identity senderId=… userId=unbound-empty` | this sender resolves to no admin |
49
+ | `[channel-fanout] op=fan-out reached=… notReached=…` | whether the door that wrote received the answer |
51
50
 
52
51
  A Telegram bot owned by a `role:'client'` sub-account can never resolve an
53
52
  admin: both resolvers return null on a client account before reading any chat
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: platform-architecture
3
3
  description: Use when grounding any documented-surface claim about what Real Agent ships — plugins, skills, specialists, install/deploy flows, internals. This is the install catalogue, not evidence of what is enabled on the current account. For install state on this account, call `capabilities-here`; for documented surface, cite the `Source:` URL inline.
4
- content-hash: sha256:327b61590f8a5e2dd2a654cd848edd19eccf7df3acecccad012160e8923e8fa0
4
+ content-hash: sha256:c2788a2fda2cab3890e93ca987a686c5115d06a836e1ebbc9da7782f3d827d34
5
5
  brand: realagent-code
6
6
  product-name: Real Agent
7
7
  ---
@@ -730,22 +730,44 @@ No status, job type, qualification, checklist, SLA target or operator noun appea
730
730
  A test walks every source file and fails if any string from either shipped fixture config appears in
731
731
  it.
732
732
 
733
- ## The ten tools
733
+ ## The sixteen tools
734
734
 
735
735
  | Tool | Does | Refuses when |
736
736
  |---|---|---|
737
737
  | `dispatch-config-get` | Returns the vocabulary, statuses, transitions, job types, roster, checklists and the config audit | no config |
738
+ | `dispatch-site-upsert` | Creates a site under its customer, or gives an existing site its street, town and postcode | a new site with no `customerId`, `name` or `region`; a customer that does not exist; a region outside East/North/South/West; some but not all three address fields |
739
+ | `dispatch-intake-draft` | Holds an inbound request as a draft, storing the fields that resolved and naming the required ones that did not | neither the site nor the customer exists, so there is nothing to attach the draft to |
740
+ | `dispatch-intake-decide` | Approves a draft into a job through the `dispatch-job-create` path, or rejects it with a reason and keeps it | draft unknown; already decided; rejecting with no reason; approving while a required field is still missing |
741
+ | `dispatch-intake-list` | The undecided queue oldest first, or drafts already decided when a verdict is named | — |
738
742
  | `dispatch-job-create` | Raises a job at a site for a customer, in the account's first job status, with `slaTargetAt` computed from the type | unknown job type; site or customer does not exist |
739
743
  | `dispatch-job-get` | One job with every visit, its times, who attended and what was recorded | job not on this account |
740
744
  | `dispatch-job-list` | Jobs filtered by status, type, worker, date window, or narrowed to never-allocated. `overdue` computed on every read | status not declared |
741
- | `dispatch-allocate-candidates` | Who could take this job in this window, with clashes shown and exclusions named | job unknown, untyped, or typed to something no longer declared |
745
+ | `dispatch-allocate-candidates` | Who could take this job in this window, with clashes shown, exclusions named, and an estimated travel time from each worker's previous visit that day | job unknown, untyped, or typed to something no longer declared |
742
746
  | `dispatch-allocate` | Creates the visit, attends it, moves the job along its own edge, attaches a vehicle | worker not on the roster; worker lacks the qualification; vehicle passed while `vehicles.enabled` is false; no `:Person:Engineer` node for the workerId |
743
747
  | `dispatch-visit-status-set` | Moves a visit; closes the job when its last visit reaches a terminal status | status not declared; transition not in the edge list; a required record missing |
744
748
  | `dispatch-visit-record` | Note, media reference, fitted part, checklist item, signature, arrival | visit unknown; nothing supplied to record |
745
749
  | `dispatch-site-history` | Every visit at one site, newest first, with notes | — |
746
750
  | `dispatch-day` | One day: every worker with the visits they hold, plus jobs nobody has been sent to | — |
751
+ | `dispatch-notify-worker` | Sends the worker attending a visit its card: one button per move this account allows from where the visit is now, plus a button opening the job sheet inside Telegram | visit unknown or unallocated; worker not on the roster; worker carries no `telegramUserId`; no bot registered; origin is not https |
752
+ | `dispatch-site-location-set` | Gives a site a latitude and longitude, and optionally its own arrival radius in metres | site not on this account; coordinates out of range; radius zero or negative |
747
753
 
748
- All ten are `adminAllowlist: true`, `publicAllowlist: false`.
754
+ All sixteen are `adminAllowlist: true`, `publicAllowlist: false`.
755
+
756
+ ## A request is a draft before it is a job
757
+
758
+ An inbound request becomes an `:IntakeDraft`, never a `:Job` with a flag — a draft that is a `:Job`
759
+ shows up in `dispatch-job-list`, in the census `jobs=` count and in the planner. A value that names
760
+ nothing on this account counts as missing exactly like an omitted one, so there is one list of gaps
761
+ to act on rather than two vocabularies to reconcile.
762
+
763
+ A draft must resolve at least one of its site or its customer, because the graph write path rejects
764
+ a node with no adjacency and this plugin creates neither. A request naming neither is refused with
765
+ both fields named.
766
+
767
+ Approval runs through the same write path `dispatch-job-create` uses, so the opening status and the
768
+ SLA target come from the account's config and `op=job-create` still appears. A rejection stores its
769
+ reason and keeps the draft. A decision is final; a second one is refused rather than raising a
770
+ duplicate job.
749
771
 
750
772
  ## Legality is data
751
773
 
@@ -767,7 +789,19 @@ Only a missing qualification excludes a worker, and every exclusion is named:
767
789
  with the clash shown. Double-booking is the office's decision, and a tool that drops the busy option
768
790
  makes that decision for them with no trace.
769
791
 
770
- There is no travel-time estimate.
792
+ ## How far each candidate has to come
793
+
794
+ Every offered candidate carries `travelMinutes` from their previous visit that day to this job's
795
+ site. It is a **straight-line** figure over an assumed road speed, named in `travelProvider`, so it
796
+ is a lower bound on the drive and never a route: an estuary or a one-way system costs minutes it
797
+ cannot see. Set a site's coordinates with `dispatch-site-location-set` to make it measurable.
798
+
799
+ A candidate with no estimate carries no `travelMinutes` at all, plus a `travelReason` saying why —
800
+ the worker has nothing earlier that day, or a site has no coordinates, named so you know which one
801
+ to fix. There is no zero and no null, because either would read as a measurement.
802
+
803
+ A provider that fails never shortens the list. The office sees the same people it would have seen,
804
+ each carrying the reason instead of a number.
771
805
 
772
806
  ## Arrival is two properties
773
807
 
@@ -776,18 +810,59 @@ either never clears the other. An observation with no press is stored and flagge
776
810
  is what somebody said; an observed one is what was measured, and a single `arrivedAt` cannot show
777
811
  them disagreeing.
778
812
 
813
+ ## The card in the worker's chat
814
+
815
+ A worker does not have to open anything to move a job along. `dispatch-notify-worker` sends the
816
+ visit as a card in his Telegram chat, carrying one button per move this account allows from where the
817
+ visit is now, and one button that opens the full job sheet inside Telegram. Press a button and the
818
+ visit moves; the card redraws itself with whatever is legal next.
819
+
820
+ Two things have to be true before a card can go anywhere. The worker's entry in
821
+ `dispatch/config.json` needs his numeric `telegramUserId`, the same one the job sheet signs him in
822
+ with. And the account needs an admin Telegram bot registered, which `telegram-setup` does.
823
+
824
+ A button that is out of date is refused, not applied. If the office moved the visit on while the
825
+ card sat on his phone, pressing it tells him what the button was for and what the visit is now, and
826
+ redraws the card. Nothing is applied twice and nothing is applied out of order.
827
+
828
+ If he shares his live location, and the site has coordinates, arriving inside the site's radius
829
+ records the arrival independently of anything he pressed. Both times are kept. That is the whole
830
+ point: what somebody said and what was measured can then disagree, and the disagreement is visible.
831
+ A site gets its coordinates from `dispatch-site-location-set`; without them the geofence cannot fire
832
+ and `sitesWithoutCoords=` counts how many are still unplaced. The radius is the site's own if it has
833
+ one, otherwise the account's `vehicles.defaultGeofenceRadiusM`; with neither, nothing is recorded,
834
+ because a distance with nothing to compare it against cannot say whether anybody arrived.
835
+
836
+ A voice note becomes that visit's note, transcribed. A photo becomes its media. Both need exactly
837
+ one visit open for that worker: with none, or with more than one, the message stays in the chat and
838
+ he is told which visit to open, because filing a photograph against the wrong job silently is worse
839
+ than asking.
840
+
779
841
  ## The standing checks
780
842
 
781
- Six failure modes emit no event, because no action occurs: a job created and never allocated, a job
782
- past its SLA target, a status no transition reaches, a job type no worker is qualified for, a worker
783
- with no qualification, and visits closing hours after the work ended.
843
+ Eight failure modes emit no event, because no action occurs: a draft nobody decided on, a job
844
+ created and never allocated, a job past its SLA target, a status no transition reaches, a job
845
+ type no worker is qualified for, a worker with no qualification, visits closing hours after the
846
+ work ended, and a card sent to a worker's phone that never arrived.
847
+
848
+ The draft is the sharpest of them. Nothing was created so there are no write logs, nothing was
849
+ refused so there are no rejection logs, and the requester never got an answer. It is byte-identical
850
+ to a quiet morning until the census counts it.
784
851
 
785
852
  - `[dispatch-census]`, per account, every 15 minutes: `jobs= unallocated= oldestUnallocatedAgeH=
786
- overdue= visitsOpen= visitsOpenOver24h=`
853
+ overdue= visitsOpen= visitsOpenOver24h= intakeUnreviewed= oldestIntakeAgeH=`
787
854
  - `[dispatch-config-audit]`, on config load and each tick: `statuses= unreachable= terminal=
788
855
  jobTypes= typesWithNoQualifiedWorker= workersWithNoQualification=`
789
856
  - `[dispatch-record-census]`, daily: `closedVisits= withNote= withMedia= medianRecordLagS=
790
857
  p90RecordLagS=`
858
+ - `[dispatch-tg-census]`, per account, every 15 minutes: `dispatchedToday= acknowledged=
859
+ unacknowledged= oldestUnackMin= keyboardsLive= keyboardsOnClosedVisits= callbacksToday=
860
+ callbacksFailed= voiceAwaitingTranscription= sitesWithoutCoords=`
861
+
862
+ A card that never reached a worker's phone is the seventh failure mode that emits nothing at all.
863
+ Nothing is logged because nothing happened, so only counting cards sent against cards pressed can
864
+ see it. `oldestUnackMin` climbing across ticks is a phone that is off, out of signal, or a worker
865
+ who has stopped looking.
791
866
 
792
867
  They run in the UI server, not in the plugin, because a plugin only runs when somebody calls it.
793
868
  Accounts without a dispatch config are skipped silently.
@@ -814,11 +889,13 @@ Europe/London visit near local midnight for the whole of British Summer Time, so
814
889
  derives boundaries in the account's own timezone. And `dispatch-job-list` caps its rows, so the
815
890
  planner takes its counts from an aggregate instead of counting what it was given.
816
891
 
817
- It also names a defect it cannot fix. `dispatch-allocate` stores `startDate` exactly as the caller
818
- passed it (`allocate.ts:186`) while normalising `endDate` (`allocate.ts:51`). The window compare is
819
- lexical, so a start carrying a non-UTC offset reads correctly under GMT and an hour out under
820
- British Summer Time. The planner logs `op=nonzulu-start` with the offending visit ids; correcting
821
- it belongs at the writer.
892
+ The window compare is lexical, so an instant carrying a non-UTC offset reads correctly under GMT and
893
+ an hour out under British Summer Time. It is fixed at the writer, the only place it can be fixed:
894
+ `dispatch-allocate` normalises `startDate` and `endDate` through `platform/lib/canonical-instant`,
895
+ the same definition the scheduling writers use, and refuses a value it cannot convert. Stored rows
896
+ converge on install. The planner still logs `op=nonzulu-start` with the offending visit ids, and
897
+ `[dispatch-census]` carries `nonCanonicalInstants` every sweep, so a regression is visible with or
898
+ without a browser open.
822
899
 
823
900
  Full detail: [`.docs/dispatch-planner.md`](../../../.docs/dispatch-planner.md).
824
901
 
@@ -854,11 +931,13 @@ Full detail: [`.docs/dispatch-field-app.md`](../../../.docs/dispatch-field-app.m
854
931
  ## Diagnostic path
855
932
 
856
933
  ```
857
- journalctl --user -u <brand>-* | grep -E '\[dispatch\]|\[dispatch-census\]|\[dispatch-config-audit\]|\[dispatch-record-census\]|\[dispatch-field\]|\[dispatch-field-census\]'
934
+ journalctl --user -u <brand>-* | grep -E '\[dispatch\]|\[dispatch-census\]|\[dispatch-config-audit\]|\[dispatch-record-census\]|\[dispatch-field\]|\[dispatch-field-census\]|\[dispatch-tg\]|\[dispatch-tg-census\]'
858
935
  ```
859
936
 
860
937
  Then filter by `jobId=` for one job's lifeline, `op=transition-refused` to audit rejected writes, or
861
- `exclusions=` to see why allocation offered whom.
938
+ `exclusions=` to see why allocation offered whom. For the card path, `updateId=` follows one press
939
+ end to end, `visitId=` follows one visit's whole field record, and `op=unbound-inbound` finds the
940
+ messages that reached no visit.
862
941
 
863
942
  ---
864
943
  # Install Overview
@@ -1961,33 +2040,24 @@ for that door alone.
1961
2040
  census prints every cycle, including when the counts agree: an absent line means
1962
2041
  the census stopped, never that delivery is healthy.
1963
2042
 
1964
- ## What a second door actually requires
2043
+ ## Which door an answer reaches
1965
2044
 
1966
- Reaching a door other than the one the message arrived on needs two facts.
2045
+ The door the message arrived on, and no other. A question asked on WhatsApp is
2046
+ answered on WhatsApp; one asked on Telegram is answered on Telegram. The browser
2047
+ reader is not a door at all: it tails the session record the answer was taken
2048
+ from, so it shows the conversation without anything being sent to it.
1967
2049
 
1968
- **The person must be resolvable from the turn's sender.** That resolution reads
1969
- one place: the admin's `users.json` entry. `phone` (E.164) identifies a WhatsApp
1970
- sender; `telegram` (the chat id, matched exactly) identifies a Telegram sender.
1971
- `account.json` `whatsapp.adminPhones` is a different store with a different job:
1972
- it says a number may reach the admin agent, not whose number it is, which is why
1973
- adding a phone there binds nobody. Set the bindings with `admin-bind`, or at
1974
- creation with `admin-add`'s `phone` and `telegram`.
2050
+ Answers used to also reach the person's other bound channel. That was removed:
2051
+ only the answer text travelled, never the question, so the second app showed a
2052
+ reply with nothing above it. The same conversation already follows you to
2053
+ another device through WhatsApp Web and Telegram Web, each for its own channel.
1975
2054
 
1976
- **The other door must hold a live target for that person.** `phone` addresses
1977
- WhatsApp when a Telegram turn wants to reach it, and `telegram` addresses
1978
- Telegram from a WhatsApp turn. Two-way reach needs both fields, not one.
1979
-
1980
- The three lines that name each failure:
2055
+ The two lines that name a delivery failure:
1981
2056
 
1982
2057
  | Line | Means |
1983
2058
  |---|---|
1984
- | `[whatsapp-native] op=admin-identity senderId=… userId=unbound-empty` | no binding, so no second door is even looked for |
1985
- | `[channel-fanout] op=no-target origin=… reason=no-admin-user` | the same fact, observed at the fan-out |
1986
2059
  | `[channel-fanout] op=no-target origin=… reason=origin-not-live` | the door holds no live target for this key |
1987
-
1988
- A Telegram bot owned by a `role:'client'` sub-account can never resolve an
1989
- admin: both resolvers return null on a client account before reading any chat
1990
- id. No binding fixes that; the bot has to live on the house account.
2060
+ | `[channel-fanout] op=no-target origin=telegram key=… accountId=none reason=no-account` | no account on this install owns the bot in that key |
1991
2061
 
1992
2062
  `[whatsapp-account-scope] op=non-uuid-account caller=fan-out` means the fan-out
1993
2063
  was handed a Baileys credential dirname where a platform UUID belongs. That is
@@ -9,6 +9,18 @@ Invoked by the admin agent directly.
9
9
 
10
10
  This is the platform's release timeline, newest first. Each entry shows the date it shipped and the version it shipped in, so you can tell the operator how current their install is. To compare, read the installed version from `capabilities-here` and match it against the versions below. Keep answers high level and in plain English; this is a summary, not a full commit log.
11
11
 
12
+ ## 2026-08-08 (0.1.576)
13
+
14
+ - Installing and upgrading no longer runs data conversions on your existing records. Five had accumulated, each added to repair a state that every install has long since passed, so all five did nothing but add work and risk to every upgrade. One of them stopped the install outright after reporting it had nothing to do. Any future conversion will be something you run deliberately, not part of an upgrade.
15
+
16
+ ## 2026-08-08 (0.1.575)
17
+
18
+ - **Reverses one change from 0.1.574.** An answer now stays on the channel you asked from, rather than also being copied to your other channels. The copy arrived as a reply with no question above it, because only the answer travelled and not what you had asked; a WhatsApp question turned up in Telegram as a bare statement. Being reachable on more than one device is already handled per channel, so the copy was removed rather than completed.
19
+ - You no longer get told a tool call is blocked when it is simply taking a while. Every long-running call was being reported as blocked and pushed to your channel.
20
+ - Field and dispatch work is now usable end to end: an incoming request can be reviewed into a job instead of sitting in an unqueued pile, a site carries the address the worker needs to find it, allocation shows the travel time from the previous job, two workers on one visit are no longer indistinguishable from two separate visits, and pressing a button in Telegram now acts on the visit rather than sending a typed message.
21
+ - A visit's start time is stored consistently, so a comparison against a time window is no longer an hour out during British Summer Time.
22
+ - Two safeguards closed: a file the assistant was refused permission to copy across accounts could still land minutes later by another route with nothing recording it, and the outbound check that strips private paths did not know about the media directory now served on the public door.
23
+
12
24
  ## 2026-08-07 (0.1.574)
13
25
 
14
26
  - An answer meant for you now reaches every channel you have live, not just the one you asked from. That had never actually worked, and nothing reported it.
@@ -19,7 +19,27 @@ interface Row {
19
19
  * that replayed rows would pass whatever the gate did, which is the same defect
20
20
  * shape as 1689's upload fake accepting duplicates the schema rejected.
21
21
  */
22
- function db(rows: Row[], person: { ownerId: string; recordScope: string; accountId: string }) {
22
+ interface RosterFixture {
23
+ accountId: string
24
+ workerId: string
25
+ ownerId: string
26
+ name: string
27
+ workingHours: string
28
+ }
29
+
30
+ interface MetaFixture {
31
+ vocabulary: string
32
+ statuses: string
33
+ zone: string
34
+ publishedAt: string
35
+ }
36
+
37
+ function db(
38
+ rows: Row[],
39
+ person: { ownerId: string; recordScope: string; accountId: string },
40
+ roster: RosterFixture[] = [],
41
+ meta: MetaFixture | null = null,
42
+ ) {
23
43
  return {
24
44
  prepare(sql: string) {
25
45
  let bound: unknown[] = []
@@ -29,12 +49,21 @@ function db(rows: Row[], person: { ownerId: string; recordScope: string; account
29
49
  return stmt
30
50
  },
31
51
  async first<T>() {
52
+ // The session resolve and the meta read both use first(); branching on
53
+ // the table is what keeps the fake honest about which one answered.
54
+ if (sql.includes('FROM dispatch_meta')) return meta as unknown as T
32
55
  return person as unknown as T
33
56
  },
34
57
  async run() {
35
58
  return { meta: { changes: 0 } }
36
59
  },
37
60
  async all<T>() {
61
+ if (sql.includes('FROM visit_roster')) {
62
+ const [acct, owner] = bound as string[]
63
+ let out = roster.filter((r) => r.accountId === acct)
64
+ if (sql.includes('r.ownerId = ?')) out = out.filter((r) => r.ownerId === owner)
65
+ return { results: out as unknown as T[] }
66
+ }
38
67
  if (!sql.includes('FROM visits')) return { results: [] as T[] }
39
68
  const [acct, owner] = bound as string[]
40
69
  let out = rows.filter((r) => r.accountId === acct)
@@ -110,3 +139,103 @@ describe('the visits scope gate', () => {
110
139
  expect(lines.join('\n')).toContain('visits=1')
111
140
  })
112
141
  })
142
+
143
+ const ROSTER: RosterFixture[] = [
144
+ {
145
+ accountId: 'acc-a',
146
+ workerId: 'w1',
147
+ ownerId: 'alice',
148
+ name: 'Alice Stone',
149
+ workingHours: '{"mon":["08:00","17:00"]}',
150
+ },
151
+ { accountId: 'acc-a', workerId: 'w2', ownerId: 'bob', name: 'Bob Reed', workingHours: '{}' },
152
+ {
153
+ accountId: 'acc-b',
154
+ workerId: 'w3',
155
+ ownerId: 'alice',
156
+ name: 'Another Alice',
157
+ workingHours: '{}',
158
+ },
159
+ ]
160
+
161
+ const META: MetaFixture = {
162
+ vocabulary: '{"job":"job","visit":"visit","worker":"technician"}',
163
+ statuses: '[{"name":"new","terminal":false}]',
164
+ zone: 'Europe/London',
165
+ publishedAt: '2026-08-07T12:00:00.000Z',
166
+ }
167
+
168
+ describe('the roster and the config come back through the same gate', () => {
169
+ it('gives an account-scoped person every worker on their own account', async () => {
170
+ const h = await processVisits(
171
+ 'sess',
172
+ env(db(ROWS, asPerson('marie', 'account'), ROSTER, META)),
173
+ () => {},
174
+ 1,
175
+ )
176
+ expect(h.status).toBe(200)
177
+ expect((h.payload.roster as Array<{ workerId: string }>).map((w) => w.workerId).sort()).toEqual(
178
+ ['w1', 'w2'],
179
+ )
180
+ })
181
+
182
+ it('gives an own-scoped person only their own roster row, so the page is not a staff list', async () => {
183
+ const h = await processVisits(
184
+ 'sess',
185
+ env(db(ROWS, asPerson('alice', 'own'), ROSTER, META)),
186
+ () => {},
187
+ 1,
188
+ )
189
+ expect((h.payload.roster as Array<{ ownerId: string }>).map((w) => w.ownerId)).toEqual(['alice'])
190
+ })
191
+
192
+ it('parses workingHours out of its JSON column so the page never parses it', async () => {
193
+ const h = await processVisits(
194
+ 'sess',
195
+ env(db(ROWS, asPerson('marie', 'account'), ROSTER, META)),
196
+ () => {},
197
+ 1,
198
+ )
199
+ const roster = h.payload.roster as Array<{
200
+ workerId: string
201
+ workingHours: Record<string, string[]>
202
+ }>
203
+ expect(roster.find((w) => w.workerId === 'w1')!.workingHours.mon).toEqual(['08:00', '17:00'])
204
+ })
205
+
206
+ it('returns the zone and the nouns to both scopes, because they are config not personal data', async () => {
207
+ for (const scope of ['own', 'account']) {
208
+ const h = await processVisits(
209
+ 'sess',
210
+ env(db(ROWS, asPerson('alice', scope), ROSTER, META)),
211
+ () => {},
212
+ 1,
213
+ )
214
+ const m = h.payload.meta as { zone: string; vocabulary: { worker: string } }
215
+ expect(m.zone).toBe('Europe/London')
216
+ expect(m.vocabulary.worker).toBe('technician')
217
+ }
218
+ })
219
+
220
+ it('answers with an empty roster and a null meta when the account published none', async () => {
221
+ const h = await processVisits(
222
+ 'sess',
223
+ env(db(ROWS, asPerson('marie', 'account'))),
224
+ () => {},
225
+ 1,
226
+ )
227
+ expect(h.payload.roster).toEqual([])
228
+ expect(h.payload.meta).toBeNull()
229
+ })
230
+
231
+ it('survives a malformed JSON column rather than failing the whole week', async () => {
232
+ const broken = [{ ...ROSTER[0], workingHours: '{not json' }]
233
+ const h = await processVisits(
234
+ 'sess',
235
+ env(db(ROWS, asPerson('marie', 'account'), broken, META)),
236
+ () => {},
237
+ 1,
238
+ )
239
+ expect((h.payload.roster as Array<{ workingHours: unknown }>)[0].workingHours).toEqual({})
240
+ })
241
+ })
@@ -340,3 +340,66 @@ CREATE TABLE IF NOT EXISTS visit_status (
340
340
  -- The pull selects unclaimed rows for one account every sixty seconds, so the
341
341
  -- pair carries its own index or every cycle is a full scan.
342
342
  CREATE INDEX IF NOT EXISTS visit_status_pending ON visit_status (accountId, claimed);
343
+
344
+ -- One row per configured worker, per staging generation (Task 2539). The office
345
+ -- planner draws a row per worker, including a worker with nothing on: an
346
+ -- omitted row reads as a worker who does not exist.
347
+ --
348
+ -- `workerId` is the id in the account's own dispatch/config.json. `ownerId` is
349
+ -- the enrolled portal person that worker signs in as, resolved by the push from
350
+ -- an explicit `portalOwnerId` on the :Engineer carrying that engineerId, and ''
351
+ -- when they carry none. The binding is a property and NEVER a name match, the
352
+ -- same rule `visits.ownerId` above states: two people share a first name, and a
353
+ -- silent cross-assignment shows one worker another's day.
354
+ --
355
+ -- A worker whose ownerId is '' still gets a row. They are visible to an
356
+ -- account-scoped person, invisible to every own-scoped one, and counted by the
357
+ -- push as `workers-unresolved`, so an unbound worker is found in the journal
358
+ -- rather than by somebody opening an empty week.
359
+ --
360
+ -- `workingHours` is the JSON object from the config ({"mon":["08:00","17:00"]}).
361
+ -- It is read as one unit by one consumer and never filtered on, so it is one
362
+ -- column rather than a table that would need a migration per config field.
363
+ --
364
+ -- `generation` and the flip are the visits' own: this table is staged at the
365
+ -- generation the visits push claims and becomes live through the SAME
366
+ -- `visits_state` pointer, so the roster a week is drawn against and the week
367
+ -- itself can never be one generation apart.
368
+ CREATE TABLE IF NOT EXISTS visit_roster (
369
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
370
+ accountId TEXT NOT NULL,
371
+ workerId TEXT NOT NULL,
372
+ ownerId TEXT NOT NULL DEFAULT '',
373
+ name TEXT NOT NULL DEFAULT '',
374
+ workingHours TEXT NOT NULL DEFAULT '',
375
+ generation INTEGER NOT NULL DEFAULT 0,
376
+ UNIQUE (accountId, workerId, generation)
377
+ );
378
+
379
+ CREATE INDEX IF NOT EXISTS visit_roster_account ON visit_roster (accountId);
380
+
381
+ -- One row per account, per staging generation: the configuration the planner
382
+ -- renders itself from (Task 2539).
383
+ --
384
+ -- `vocabulary` and `statuses` are JSON straight off the account's
385
+ -- dispatch/config.json, so a taxi firm's fare/pickup/driver and a contractor's
386
+ -- job/visit/engineer render through one page with no operator-facing literal in
387
+ -- its source.
388
+ --
389
+ -- `zone` is the account's own timezone, resolved on the device. The page formats
390
+ -- every date in it and never consults the browser's: a browser-zone fallback
391
+ -- renders plausibly and wrongly, which is the defect Task 2280 left on thirteen
392
+ -- other surfaces.
393
+ --
394
+ -- `publishedAt` is when this generation was staged, so the page can state the
395
+ -- age of what it shows. A mirror that stopped refreshing is otherwise identical
396
+ -- to a week with no changes.
397
+ CREATE TABLE IF NOT EXISTS dispatch_meta (
398
+ accountId TEXT NOT NULL,
399
+ vocabulary TEXT NOT NULL DEFAULT '',
400
+ statuses TEXT NOT NULL DEFAULT '',
401
+ zone TEXT NOT NULL DEFAULT '',
402
+ publishedAt TEXT NOT NULL DEFAULT '',
403
+ generation INTEGER NOT NULL DEFAULT 0,
404
+ UNIQUE (accountId, generation)
405
+ );
@@ -19,6 +19,53 @@ export interface VisitRow {
19
19
  purpose: string
20
20
  }
21
21
 
22
+ /**
23
+ * One configured worker, as the office planner draws a row for (Task 2539).
24
+ *
25
+ * `workerId` is the id in the account's own dispatch config; `ownerId` is the
26
+ * enrolled portal person that worker signs in as, and '' when they have no
27
+ * binding. The page groups visits onto rows by `ownerId`, which is the key both
28
+ * halves of the exchange already use.
29
+ */
30
+ export interface RosterRow {
31
+ workerId: string
32
+ ownerId: string
33
+ name: string
34
+ workingHours: Record<string, [string, string]>
35
+ }
36
+
37
+ /**
38
+ * The configuration the planner renders itself from, and the age of what it
39
+ * shows.
40
+ *
41
+ * Null when the account has published none, which is every portal carrying no
42
+ * dispatch config. Null rather than an empty object: a page that renders
43
+ * defaults for a missing config states an account's nouns wrongly instead of
44
+ * saying it has none.
45
+ */
46
+ export interface Meta {
47
+ vocabulary: { job: string; visit: string; worker: string }
48
+ statuses: Array<{ name: string; terminal: boolean }>
49
+ zone: string
50
+ publishedAt: string
51
+ }
52
+
53
+ /**
54
+ * A column of JSON text, or the fallback.
55
+ *
56
+ * Never a throw. One malformed value must not take a whole week off the screen:
57
+ * the worker's row still renders with no hours, which is visibly wrong, where a
58
+ * 500 is indistinguishable from the device being down.
59
+ */
60
+ function parseJson<T>(raw: string, fallback: T): T {
61
+ try {
62
+ const v = JSON.parse(raw) as T
63
+ return v === null || v === undefined ? fallback : v
64
+ } catch {
65
+ return fallback
66
+ }
67
+ }
68
+
22
69
  /**
23
70
  * The visits a signed-in person may read.
24
71
  *
@@ -67,13 +114,67 @@ export async function processVisits(
67
114
  const rows = await bound.all<VisitRow>()
68
115
  const visits = rows.results ?? []
69
116
 
117
+ // THE SAME TWO FILTERS, and the owner one for the same reason: an own-scoped
118
+ // person may see their own row and no other, or this page becomes a way to
119
+ // read colleague names that the file drop deliberately does not give them.
120
+ // Read through the generation pointer, as the visits read is.
121
+ const rosterSql =
122
+ `SELECT r.workerId AS workerId, r.ownerId AS ownerId, r.name AS name,
123
+ r.workingHours AS workingHours
124
+ FROM visit_roster r
125
+ JOIN visits_state s
126
+ ON s.accountId = r.accountId AND s.currentGeneration = r.generation
127
+ WHERE r.accountId = ?` +
128
+ (scoped ? ' AND r.ownerId = ?' : '') +
129
+ ' ORDER BY r.name ASC, r.workerId ASC'
130
+ const rosterStmt = env.DB.prepare(rosterSql)
131
+ const rosterRows = await (
132
+ scoped
133
+ ? rosterStmt.bind(env.PORTAL_ACCOUNT_ID, session.ownerId)
134
+ : rosterStmt.bind(env.PORTAL_ACCOUNT_ID)
135
+ ).all<{ workerId: string; ownerId: string; name: string; workingHours: string }>()
136
+
137
+ // Parsed here, once, rather than on the page: a column of JSON parsed by every
138
+ // consumer is a shape each of them can disagree about.
139
+ const roster: RosterRow[] = (rosterRows.results ?? []).map((r) => ({
140
+ workerId: r.workerId,
141
+ ownerId: r.ownerId,
142
+ name: r.name,
143
+ workingHours: parseJson<Record<string, [string, string]>>(r.workingHours, {}),
144
+ }))
145
+
146
+ const metaRow = await env.DB.prepare(
147
+ `SELECT m.vocabulary AS vocabulary, m.statuses AS statuses, m.zone AS zone,
148
+ m.publishedAt AS publishedAt
149
+ FROM dispatch_meta m
150
+ JOIN visits_state s
151
+ ON s.accountId = m.accountId AND s.currentGeneration = m.generation
152
+ WHERE m.accountId = ?`,
153
+ )
154
+ .bind(env.PORTAL_ACCOUNT_ID)
155
+ .first<{ vocabulary: string; statuses: string; zone: string; publishedAt: string }>()
156
+
157
+ // NOT owner-scoped. The nouns, the statuses and the account's timezone are
158
+ // configuration, not a record about a person, and the page cannot draw a day
159
+ // in the right zone without them.
160
+ const meta: Meta | null = metaRow
161
+ ? {
162
+ vocabulary: parseJson(metaRow.vocabulary, { job: '', visit: '', worker: '' }),
163
+ statuses: parseJson<Array<{ name: string; terminal: boolean }>>(metaRow.statuses, []),
164
+ zone: metaRow.zone,
165
+ publishedAt: metaRow.publishedAt,
166
+ }
167
+ : null
168
+
70
169
  // Counts and the scope, never a visitId or a purpose: those are a real
71
- // person's job, and a Pages log is not where they belong.
170
+ // person's job, and a Pages log is not where they belong. A worker's NAME is
171
+ // the same kind of thing, so the roster contributes a count too.
72
172
  log(
73
173
  `[data-portal] op=visits owner=${q(session.ownerId)} account=${q(session.accountId)} ` +
74
- `scope=${session.recordScope} visits=${visits.length} result=ok`,
174
+ `scope=${session.recordScope} visits=${visits.length} roster=${roster.length} ` +
175
+ `meta=${meta !== null} result=ok`,
75
176
  )
76
- return { status: 200, payload: { ok: true, visits } }
177
+ return { status: 200, payload: { ok: true, visits, roster, meta } }
77
178
  }
78
179
 
79
180
  interface PagesContext {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dispatch",
3
- "description": "Field-work dispatch. Creates a job, allocates it to a qualified worker, moves it through the account's own configured statuses, and records what happened on site. Every status, job type, qualification, checklist, SLA target and operator-facing noun is read from $ACCOUNT_DIR/dispatch/config.json, never hard-coded, so a taxi firm's fare/pickup/driver and a contractor's job/visit/engineer run identical code. Provides dispatch-config-get, dispatch-job-create, dispatch-job-get, dispatch-job-list, dispatch-allocate-candidates, dispatch-allocate, dispatch-visit-status-set, dispatch-visit-record, dispatch-site-history and dispatch-day. Ships the dispatch-setup skill, which elicits and validates the config.",
3
+ "description": "Field-work dispatch. Holds an inbound request as a reviewable draft, creates a job when somebody approves it, allocates it to a qualified worker with an estimate of how far each candidate has to come, moves it through the account's own configured statuses, sends the worker the card he presses to move it, and records what happened on site. Every status, job type, qualification, checklist, SLA target and operator-facing noun is read from $ACCOUNT_DIR/dispatch/config.json, never hard-coded, so a taxi firm's fare/pickup/driver and a contractor's job/visit/engineer run identical code. Provides dispatch-config-get, dispatch-intake-draft, dispatch-intake-decide, dispatch-intake-list, dispatch-site-upsert, dispatch-site-location-set, dispatch-job-create, dispatch-job-get, dispatch-job-list, dispatch-allocate-candidates, dispatch-allocate, dispatch-visit-status-set, dispatch-visit-record, dispatch-site-history, dispatch-day and dispatch-notify-worker. Ships the dispatch-setup skill, which elicits and validates the config, and the dispatch-page skill, which puts the account's week planner on its own portal domain.",
4
4
  "version": "0.1.0",
5
5
  "author": {
6
6
  "name": "Rubytech LLC"