@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
@@ -6,10 +6,10 @@
6
6
  // Runs under `node --test dist/__tests__/*`.
7
7
  import test from "node:test";
8
8
  import assert from "node:assert/strict";
9
- import { mkdtempSync, mkdirSync, writeFileSync, readFileSync, existsSync, rmSync, statSync } from "node:fs";
9
+ import { mkdtempSync, mkdirSync, writeFileSync, readFileSync, existsSync, rmSync } from "node:fs";
10
10
  import { tmpdir } from "node:os";
11
11
  import { join } from "node:path";
12
- import { backupHouseCloudflare, restoreHouseCloudflare, migrateHouseCredentialFromAccount, } from "../preserve-house-cloudflare.js";
12
+ import { backupHouseCloudflare, restoreHouseCloudflare, } from "../preserve-house-cloudflare.js";
13
13
  function makeDirs() {
14
14
  const root = mkdtempSync(join(tmpdir(), "house-1664-"));
15
15
  const installDir = join(root, "install");
@@ -66,73 +66,3 @@ function acctSecrets(installDir, id, contents) {
66
66
  writeFileSync(p, contents);
67
67
  return p;
68
68
  }
69
- test("relocates a per-account master into the house file, mode 600, account untouched", () => {
70
- const { root, installDir } = makeDirs();
71
- try {
72
- const acct = acctSecrets(installDir, "acc-1", "CLOUDFLARE_API_TOKEN=cfat_minter\nCLOUDFLARE_ACCOUNT_ID=deadbeef\nCF_PAGES_D1_TOKEN=stale\n");
73
- const before = readFileSync(acct, "utf-8");
74
- const r = migrateHouseCredentialFromAccount(installDir);
75
- assert.equal(r.result, "relocated");
76
- assert.equal(r.source, "acc-1");
77
- const house = join(installDir, "platform/config", "cloudflare-house.env");
78
- assert.equal(readFileSync(house, "utf-8"), "CLOUDFLARE_API_TOKEN=cfat_minter\nCLOUDFLARE_ACCOUNT_ID=deadbeef\n", "only the two master keys are relocated, no stale scoped token");
79
- assert.equal(statSync(house).mode & 0o777, 0o600, "house file is mode 600");
80
- assert.equal(readFileSync(acct, "utf-8"), before, "account file untouched");
81
- }
82
- finally {
83
- rmSync(root, { recursive: true, force: true });
84
- }
85
- });
86
- test("no-op when the house file already exists (never overwrites)", () => {
87
- const { root, installDir, configDir } = makeDirs();
88
- try {
89
- const house = join(configDir, "cloudflare-house.env");
90
- writeFileSync(house, "CLOUDFLARE_API_TOKEN=existing\nCLOUDFLARE_ACCOUNT_ID=xyz\n");
91
- acctSecrets(installDir, "acc-1", "CLOUDFLARE_API_TOKEN=other\nCLOUDFLARE_ACCOUNT_ID=zzz\n");
92
- const r = migrateHouseCredentialFromAccount(installDir);
93
- assert.equal(r.result, "noop");
94
- assert.equal(readFileSync(house, "utf-8"), "CLOUDFLARE_API_TOKEN=existing\nCLOUDFLARE_ACCOUNT_ID=xyz\n", "existing house file is untouched");
95
- }
96
- finally {
97
- rmSync(root, { recursive: true, force: true });
98
- }
99
- });
100
- test("absent when no account carries a master (no house file, no error)", () => {
101
- const { root, installDir } = makeDirs();
102
- try {
103
- acctSecrets(installDir, "acc-1", "CF_PAGES_D1_TOKEN=scoped_only\n");
104
- const r = migrateHouseCredentialFromAccount(installDir);
105
- assert.equal(r.result, "absent");
106
- assert.ok(!existsSync(join(installDir, "platform/config", "cloudflare-house.env")));
107
- }
108
- finally {
109
- rmSync(root, { recursive: true, force: true });
110
- }
111
- });
112
- test("deterministic pick — lexicographically-first account id wins", () => {
113
- const { root, installDir } = makeDirs();
114
- try {
115
- acctSecrets(installDir, "bbb", "CLOUDFLARE_API_TOKEN=tok_b\nCLOUDFLARE_ACCOUNT_ID=idb\n");
116
- acctSecrets(installDir, "aaa", "CLOUDFLARE_API_TOKEN=tok_a\nCLOUDFLARE_ACCOUNT_ID=ida\n");
117
- const r = migrateHouseCredentialFromAccount(installDir);
118
- assert.equal(r.source, "aaa");
119
- assert.match(readFileSync(join(installDir, "platform/config", "cloudflare-house.env"), "utf-8"), /tok_a/);
120
- }
121
- finally {
122
- rmSync(root, { recursive: true, force: true });
123
- }
124
- });
125
- test("full upgrade path: pre-1631 relocates, second run is a no-op", () => {
126
- const { root, installDir, persistentDir } = makeDirs();
127
- try {
128
- // Pre-1631 upgrade: no house file survives the wipe/restore (nothing saved).
129
- simulateUpgrade(installDir, persistentDir);
130
- assert.ok(!existsSync(join(installDir, "platform/config", "cloudflare-house.env")));
131
- acctSecrets(installDir, "acc-1", "CLOUDFLARE_API_TOKEN=cfat_minter\nCLOUDFLARE_ACCOUNT_ID=deadbeef\n");
132
- assert.equal(migrateHouseCredentialFromAccount(installDir).result, "relocated");
133
- assert.equal(migrateHouseCredentialFromAccount(installDir).result, "noop", "second run is idempotent");
134
- }
135
- finally {
136
- rmSync(root, { recursive: true, force: true });
137
- }
138
- });
package/dist/index.js CHANGED
@@ -10,9 +10,8 @@ import { buildBrandCronBlock, mergeBrandCronBlock } from "./cron-registration.js
10
10
  import { validateTierFlag, validateEntitlementBase64, applyTierToAccountConfig, entitlementPath } from "./tier-flag.js";
11
11
  import { parseOsRelease, isUbuntuLike as isUbuntuLikePure, parseAptCacheCandidate, decideAptResolution, } from "./apt-resolve.js";
12
12
  import { findPeerBrandOnDefaultNeo4jPort } from "./peer-brand-detect.js";
13
- import { removeClientAdminsKey } from "./converge-client-admins.js";
14
13
  import { seedPublicInstructionFiles } from "./public-instruction-seed.js";
15
- import { backupHouseCloudflare, restoreHouseCloudflare, migrateHouseCredentialFromAccount, } from "./preserve-house-cloudflare.js";
14
+ import { backupHouseCloudflare, restoreHouseCloudflare, } from "./preserve-house-cloudflare.js";
16
15
  import { resolveNeo4jPidfileScrub } from "./neo4j-pidfile-scrub.js";
17
16
  import { runInitLogging } from "./init-logging.js";
18
17
  import { requireSupportedPlatform, detectPlatform } from "./platform-detect.js";
@@ -2650,15 +2649,6 @@ function deployPayload() {
2650
2649
  if (restoreHouseCloudflare(INSTALL_DIR, persistentDir)) {
2651
2650
  console.log(" Restored Cloudflare house credential (cloudflare-house.env preserved).");
2652
2651
  }
2653
- // Task 1671 — a pre-1631 install crossing the 0.1.449 boundary has no house
2654
- // credential yet, but its per-account secrets still carry the account-wide
2655
- // master (a minter, Task 1670). Relocate it into the house file so the broker
2656
- // and calendar find it where the 1631 readers expect it, with zero manual
2657
- // step. Idempotent: no-op once the house file exists (fresh install → absent).
2658
- {
2659
- const mig = migrateHouseCredentialFromAccount(INSTALL_DIR);
2660
- console.log(` [install] op=house-cred-migrate result=${mig.result}${mig.source ? ` source=${mig.source}` : ""}`);
2661
- }
2662
2652
  // users.json is read directly from persistentDir by both
2663
2653
  // platform/ui/app/lib/paths.ts (USERS_FILE = MAXY_DIR/users.json) and the
2664
2654
  // admin MCP plugin (USERS_FILE = CONFIG_DIR/users.json). No copy into the
@@ -2690,13 +2680,6 @@ function deployPayload() {
2690
2680
  // installer is its own npm package and doesn't bundle the platform lib.
2691
2681
  // Mirrors checkAdminAuthInvariant() in platform/lib/admins-write/src/index.ts;
2692
2682
  // future divergence between the two should be caught by the test suite.
2693
- // Task 1623 — converge existing client account.json to drop the vestigial
2694
- // admins[] key before the invariant check reads them. House untouched.
2695
- for (const r of removeClientAdminsKey(join(INSTALL_DIR, "data", "accounts"))) {
2696
- if (r.action === "removed" || r.action === "unreadable" || r.action === "write-failed") {
2697
- console.log(` [converge-1623] account=${r.accountId.slice(0, 8)} admins=${r.action}`);
2698
- }
2699
- }
2700
2683
  runInstallInvariantCheck(persistentUsersFile, join(INSTALL_DIR, "data", "accounts"));
2701
2684
  // The version marker is NOT written here. It is stamped at the very end of a
2702
2685
  // fully-successful install (after plugin registration and every throwing
@@ -3392,33 +3375,13 @@ function setupAccount() {
3392
3375
  logFile(` [neo4j] passing NEO4J_URI=${neo4jUri} to seed`);
3393
3376
  shell("bash", [seedScript], { cwd: INSTALL_DIR, env: neo4jEnv });
3394
3377
  }
3395
- // Task 2213 converge :Event.startDate onto canonical UTC. The dispatcher
3396
- // compares startDate to new Date().toISOString() LEXICALLY, so a row storing
3397
- // a +01:00 offset fires 60 minutes late under BST. Runs after the seed so the
3398
- // schema exists, with the same Neo4j env, and needs PLATFORM_ROOT to scope
3399
- // itself to this install's accounts on a shared Neo4j. Idempotent: a converged
3400
- // install rewrites nothing and prints op=done rewritten=0.
3401
- const convergeStartDate = join(INSTALL_DIR, "platform/plugins/scheduling/mcp/dist/scripts/converge-startdate-utc.js");
3402
- if (existsSync(convergeStartDate)) {
3403
- shell("node", [convergeStartDate], {
3404
- cwd: INSTALL_DIR,
3405
- env: { ...neo4jEnv, PLATFORM_ROOT: join(INSTALL_DIR, "platform") },
3406
- });
3407
- }
3408
- // Task 2361 — collapse the two routine description properties onto
3409
- // `:Event.description`, preferring whichever value the operator or the agent
3410
- // wrote. Runs after the seed for the same reasons the convergence above does:
3411
- // the schema exists by then, and the same Neo4j env is already built. Scoped to
3412
- // this install's accounts via PLATFORM_ROOT, so a co-resident brand sharing one
3413
- // Neo4j is untouched. Idempotent: a converged install matches nothing and
3414
- // prints converged=0.
3415
- const convergeRoutineDescription = join(INSTALL_DIR, "platform/plugins/scheduling/mcp/dist/scripts/converge-routine-description.js");
3416
- if (existsSync(convergeRoutineDescription)) {
3417
- shell("node", [convergeRoutineDescription], {
3418
- cwd: INSTALL_DIR,
3419
- env: { ...neo4jEnv, PLATFORM_ROOT: join(INSTALL_DIR, "platform") },
3420
- });
3421
- }
3378
+ // Install-time data migrations were removed on 2026-08-08 by operator
3379
+ // decision. Three convergences ran here (Tasks 2213, 2361, 2513). Every
3380
+ // device in the fleet is past the state each one existed to repair, so on
3381
+ // every install they scanned and rewrote nothing while adding a Neo4j
3382
+ // round-trip and a way to fail: 2513's script leaked its driver and hung
3383
+ // the installer after printing scanned=0. A future migration belongs in a
3384
+ // one-shot the operator runs deliberately, not on the upgrade path.
3422
3385
  // Task 2460 — clear the brand-wide agent root this step used to write.
3423
3386
  // Every bundled specialist now reaches a session through the per-account
3424
3387
  // registry that `syncAccountAgentRegistry` mirrors at spawn from
@@ -6,8 +6,8 @@
6
6
  // calendar reconcile/publish scripts) fails with "house credential not found"
7
7
  // until an operator re-mints the token by hand. The persistent copy lives in
8
8
  // the brand's persistent config dir so even a full reinstall restores it.
9
- import { existsSync, cpSync, chmodSync, readdirSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
10
- import { join, dirname } from "node:path";
9
+ import { existsSync, cpSync, chmodSync } from "node:fs";
10
+ import { join } from "node:path";
11
11
  const HOUSE_CRED_FILE = "cloudflare-house.env";
12
12
  /**
13
13
  * Copy the live house credential (if any) into the persistent store before the
@@ -35,50 +35,3 @@ export function restoreHouseCloudflare(installDir, persistentDir) {
35
35
  chmodSync(dest, 0o600);
36
36
  return true;
37
37
  }
38
- /**
39
- * Task 1671 — on upgrade, if no house credential exists yet, relocate an
40
- * existing per-account master (CLOUDFLARE_API_TOKEN + CLOUDFLARE_ACCOUNT_ID)
41
- * into the house file (mode 600). This lets a pre-1631 install cross the 0.1.449
42
- * boundary with zero manual step: the broker/calendar (Task 1670) then mint
43
- * their scoped tokens from the relocated minter where the 1631 readers expect it.
44
- *
45
- * Fail-safe and idempotent:
46
- * - never overwrites an existing house file (returns "noop");
47
- * - never guesses a token (both master keys required);
48
- * - deterministic: scans accounts sorted by id, takes the first with a master;
49
- * - relocates only the two master keys, so no per-account scoped token leaks
50
- * house-side.
51
- *
52
- * The relocated file is preserved on subsequent upgrades by backupHouseCloudflare
53
- * (Task 1664), which runs before the wipe on the next install.
54
- */
55
- export function migrateHouseCredentialFromAccount(installDir) {
56
- const house = join(installDir, "platform/config", HOUSE_CRED_FILE);
57
- if (existsSync(house))
58
- return { result: "noop" };
59
- const accountsDir = join(installDir, "data/accounts");
60
- if (!existsSync(accountsDir))
61
- return { result: "absent" };
62
- for (const id of readdirSync(accountsDir).sort()) {
63
- const secrets = join(accountsDir, id, "secrets", "cloudflare.env");
64
- if (!existsSync(secrets))
65
- continue;
66
- const env = {};
67
- for (const line of readFileSync(secrets, "utf8").split("\n")) {
68
- const m = line.match(/^\s*([A-Za-z_][A-Za-z0-9_]*)=(.*)$/);
69
- if (m)
70
- env[m[1]] = m[2].trim();
71
- }
72
- const apiToken = env.CLOUDFLARE_API_TOKEN;
73
- const accountId = env.CLOUDFLARE_ACCOUNT_ID;
74
- if (!apiToken || !accountId)
75
- continue;
76
- mkdirSync(dirname(house), { recursive: true });
77
- writeFileSync(house, `CLOUDFLARE_API_TOKEN=${apiToken}\nCLOUDFLARE_ACCOUNT_ID=${accountId}\n`, {
78
- mode: 0o600,
79
- });
80
- chmodSync(house, 0o600);
81
- return { result: "relocated", source: id };
82
- }
83
- return { result: "absent" };
84
- }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rubytech/create-realagent-code",
3
- "version": "0.1.574",
3
+ "version": "0.1.576",
4
4
  "description": "Install Real Agent — Built for agents. By agents.",
5
5
  "bin": {
6
6
  "create-realagent-code": "./dist/index.js"
@@ -0,0 +1,57 @@
1
+ /**
2
+ * The single definition of a canonical stored instant.
3
+ *
4
+ * Extracted from `plugins/scheduling/mcp/src/lib/time-format.ts` by Task 2513,
5
+ * unchanged, so the dispatch writer, the dispatch migration and the two
6
+ * scheduling writers cannot disagree about what canonical means. Task 2213
7
+ * stated the invariant as "One function, three callers, no drift possible"; a
8
+ * second copy in the dispatch tree would have broken it.
9
+ *
10
+ * Pure. No database, no driver, no plugin import.
11
+ */
12
+ /**
13
+ * Validates an IANA timezone string. Throws with a clear message if invalid.
14
+ */
15
+ export declare function validateTimezone(tz: string): void;
16
+ /**
17
+ * The exact 24-character shape `toISOString()` produces, as a regex source.
18
+ *
19
+ * Exported as a string rather than a `RegExp` because it is also passed to
20
+ * Cypher as a `=~` parameter. One source, so the standing audit's predicate and
21
+ * this module's predicate cannot drift; passing it as a parameter also removes
22
+ * the backslash-escaping ambiguity of an inlined Cypher literal.
23
+ */
24
+ export declare const CANONICAL_INSTANT_PATTERN = "\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z";
25
+ /**
26
+ * Task 2213, generalised by Task 2513 — the single definition of a canonical
27
+ * stored instant.
28
+ *
29
+ * Stored instants are compared as STRINGS, lexically, in Cypher: the scheduling
30
+ * dispatcher on `e.startDate <= $now`, and the dispatch planner on
31
+ * `v.startDate >= $from AND v.startDate < $to`. An offset suffix is never
32
+ * parsed, so a `+01:00` value sorts by its wall-clock digits — 60 minutes out
33
+ * under BST, and correct under GMT, which is why the defect self-heals every
34
+ * October and returns every March.
35
+ *
36
+ * The output is therefore always the exact 24-character shape `toISOString()`
37
+ * produces. The fixed width is the point: lexical order equals instant order
38
+ * only when every stored value shares one shape. That is also why this is not
39
+ * done in Cypher — `toString(datetime(...))` omits `.000` at a zero-millisecond
40
+ * instant, and `"…00.000Z"` sorts BEFORE `"…00Z"`.
41
+ *
42
+ * A zoneless wall clock is read in `zone`, never in the server's zone: a
43
+ * server-local reading makes the stored instant depend on which machine wrote
44
+ * it, which is the same fault class one layer down. With no usable zone this
45
+ * throws rather than guessing.
46
+ *
47
+ * DST is resolved the way `Temporal`'s `disambiguation: 'compatible'` resolves
48
+ * it. Take the offsets in force a day either side, giving two candidate
49
+ * instants; keep those that render back to exactly the input wall clock. If any
50
+ * survive, take the earliest (the earlier occurrence of an ambiguous autumn
51
+ * time). If none survive, the wall clock is inside a spring-forward gap and does
52
+ * not exist, so take the later candidate, which shifts it past the gap.
53
+ */
54
+ export declare function normaliseInstant(raw: string, zone: string | null): string;
55
+ /** True when `value` is already in the canonical form above. */
56
+ export declare function isCanonicalInstant(value: string): boolean;
57
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAYjD;AA6CD;;;;;;;GAOG;AACH,eAAO,MAAM,yBAAyB,wDAAwD,CAAC;AAE/F;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CA8BzE;AAED,gEAAgE;AAChE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEzD"}
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ /**
3
+ * The single definition of a canonical stored instant.
4
+ *
5
+ * Extracted from `plugins/scheduling/mcp/src/lib/time-format.ts` by Task 2513,
6
+ * unchanged, so the dispatch writer, the dispatch migration and the two
7
+ * scheduling writers cannot disagree about what canonical means. Task 2213
8
+ * stated the invariant as "One function, three callers, no drift possible"; a
9
+ * second copy in the dispatch tree would have broken it.
10
+ *
11
+ * Pure. No database, no driver, no plugin import.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.CANONICAL_INSTANT_PATTERN = void 0;
15
+ exports.validateTimezone = validateTimezone;
16
+ exports.normaliseInstant = normaliseInstant;
17
+ exports.isCanonicalInstant = isCanonicalInstant;
18
+ /**
19
+ * Validates an IANA timezone string. Throws with a clear message if invalid.
20
+ */
21
+ function validateTimezone(tz) {
22
+ if (!tz || tz.trim().length === 0) {
23
+ throw new Error("Timezone is required but was empty");
24
+ }
25
+ try {
26
+ // Intl.DateTimeFormat throws RangeError for invalid IANA timezone identifiers
27
+ new Intl.DateTimeFormat("en-GB", { timeZone: tz });
28
+ }
29
+ catch {
30
+ throw new Error(`Invalid timezone: "${tz}" — expected IANA format like "Europe/London" or "America/New_York"`);
31
+ }
32
+ }
33
+ /** Ends with `Z` or a numeric UTC offset, e.g. `+01:00`, `-0500`. */
34
+ const HAS_ZONE = /(?:Z|[+-]\d{2}:?\d{2})$/;
35
+ /** The zone's wall-clock parts at a given instant. */
36
+ function partsAt(ms, zone) {
37
+ const dtf = new Intl.DateTimeFormat("en-GB", {
38
+ timeZone: zone,
39
+ hour12: false,
40
+ year: "numeric",
41
+ month: "2-digit",
42
+ day: "2-digit",
43
+ hour: "2-digit",
44
+ minute: "2-digit",
45
+ second: "2-digit",
46
+ });
47
+ return Object.fromEntries(dtf.formatToParts(new Date(ms)).map((p) => [p.type, p.value]));
48
+ }
49
+ /**
50
+ * Milliseconds the zone is ahead of UTC at `ms`.
51
+ *
52
+ * Subtracted against the SECOND-truncated instant, never `ms` itself.
53
+ * `Intl.DateTimeFormat` resolves only to seconds, so differencing its
54
+ * reconstruction against a millisecond-bearing instant folds the fractional part
55
+ * into the offset: at `09:00:00.500` the offset came back as 3_599_500 rather
56
+ * than 3_600_000, and the caller's `naive - offset` then landed a full second
57
+ * out. A real zone offset is always a whole number of minutes, so truncating is
58
+ * lossless here and keeps the caller's sub-second precision intact.
59
+ */
60
+ function offsetMsAt(ms, zone) {
61
+ const p = partsAt(ms, zone);
62
+ // `hour` renders as "24" for midnight in en-GB; % 24 folds it back to 0.
63
+ const wallUtc = Date.UTC(+p.year, +p.month - 1, +p.day, +p.hour % 24, +p.minute, +p.second);
64
+ return wallUtc - Math.floor(ms / 1000) * 1000;
65
+ }
66
+ /** The zone's wall clock at `ms`, in the same shape as a zoneless input. */
67
+ function wallAt(ms, zone) {
68
+ const p = partsAt(ms, zone);
69
+ const hh = String(+p.hour % 24).padStart(2, "0");
70
+ return `${p.year}-${p.month}-${p.day}T${hh}:${p.minute}:${p.second}`;
71
+ }
72
+ /**
73
+ * The exact 24-character shape `toISOString()` produces, as a regex source.
74
+ *
75
+ * Exported as a string rather than a `RegExp` because it is also passed to
76
+ * Cypher as a `=~` parameter. One source, so the standing audit's predicate and
77
+ * this module's predicate cannot drift; passing it as a parameter also removes
78
+ * the backslash-escaping ambiguity of an inlined Cypher literal.
79
+ */
80
+ exports.CANONICAL_INSTANT_PATTERN = "\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z";
81
+ /**
82
+ * Task 2213, generalised by Task 2513 — the single definition of a canonical
83
+ * stored instant.
84
+ *
85
+ * Stored instants are compared as STRINGS, lexically, in Cypher: the scheduling
86
+ * dispatcher on `e.startDate <= $now`, and the dispatch planner on
87
+ * `v.startDate >= $from AND v.startDate < $to`. An offset suffix is never
88
+ * parsed, so a `+01:00` value sorts by its wall-clock digits — 60 minutes out
89
+ * under BST, and correct under GMT, which is why the defect self-heals every
90
+ * October and returns every March.
91
+ *
92
+ * The output is therefore always the exact 24-character shape `toISOString()`
93
+ * produces. The fixed width is the point: lexical order equals instant order
94
+ * only when every stored value shares one shape. That is also why this is not
95
+ * done in Cypher — `toString(datetime(...))` omits `.000` at a zero-millisecond
96
+ * instant, and `"…00.000Z"` sorts BEFORE `"…00Z"`.
97
+ *
98
+ * A zoneless wall clock is read in `zone`, never in the server's zone: a
99
+ * server-local reading makes the stored instant depend on which machine wrote
100
+ * it, which is the same fault class one layer down. With no usable zone this
101
+ * throws rather than guessing.
102
+ *
103
+ * DST is resolved the way `Temporal`'s `disambiguation: 'compatible'` resolves
104
+ * it. Take the offsets in force a day either side, giving two candidate
105
+ * instants; keep those that render back to exactly the input wall clock. If any
106
+ * survive, take the earliest (the earlier occurrence of an ambiguous autumn
107
+ * time). If none survive, the wall clock is inside a spring-forward gap and does
108
+ * not exist, so take the later candidate, which shifts it past the gap.
109
+ */
110
+ function normaliseInstant(raw, zone) {
111
+ const trimmed = raw.trim();
112
+ if (HAS_ZONE.test(trimmed)) {
113
+ const ms = Date.parse(trimmed);
114
+ if (Number.isNaN(ms)) {
115
+ throw new Error(`Unparseable instant: "${raw}" — expected an ISO 8601 date-time`);
116
+ }
117
+ return new Date(ms).toISOString();
118
+ }
119
+ if (!zone) {
120
+ throw new Error(`Instant "${raw}" carries no timezone offset and no timezone is available to read it in — ` +
121
+ `pass an IANA timezone, or write the offset into the value`);
122
+ }
123
+ validateTimezone(zone);
124
+ const naive = Date.parse(`${trimmed}Z`);
125
+ if (Number.isNaN(naive)) {
126
+ throw new Error(`Unparseable instant: "${raw}" — expected an ISO 8601 date-time`);
127
+ }
128
+ const DAY_MS = 86_400_000;
129
+ const before = naive - offsetMsAt(naive - DAY_MS, zone);
130
+ const after = naive - offsetMsAt(naive + DAY_MS, zone);
131
+ const valid = [before, after].filter((ms) => wallAt(ms, zone) === trimmed);
132
+ const chosen = valid.length > 0 ? Math.min(...valid) : Math.max(before, after);
133
+ return new Date(chosen).toISOString();
134
+ }
135
+ /** True when `value` is already in the canonical form above. */
136
+ function isCanonicalInstant(value) {
137
+ return new RegExp(`^${exports.CANONICAL_INSTANT_PATTERN}$`).test(value);
138
+ }
139
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;AAKH,4CAYC;AAoFD,4CA8BC;AAGD,gDAEC;AAtID;;GAEG;AACH,SAAgB,gBAAgB,CAAC,EAAU;IACzC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,CAAC;QACH,8EAA8E;QAC9E,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,sBAAsB,EAAE,qEAAqE,CAC9F,CAAC;IACJ,CAAC;AACH,CAAC;AAED,qEAAqE;AACrE,MAAM,QAAQ,GAAG,yBAAyB,CAAC;AAE3C,sDAAsD;AACtD,SAAS,OAAO,CAAC,EAAU,EAAE,IAAY;IACvC,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;QAC3C,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,SAAS;QAChB,GAAG,EAAE,SAAS;QACd,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3F,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,UAAU,CAAC,EAAU,EAAE,IAAY;IAC1C,MAAM,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC5B,yEAAyE;IACzE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC5F,OAAO,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;AAChD,CAAC;AAED,4EAA4E;AAC5E,SAAS,MAAM,CAAC,EAAU,EAAE,IAAY;IACtC,MAAM,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC5B,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACjD,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;AACvE,CAAC;AAED;;;;;;;GAOG;AACU,QAAA,yBAAyB,GAAG,qDAAqD,CAAC;AAE/F;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,SAAgB,gBAAgB,CAAC,GAAW,EAAE,IAAmB;IAC/D,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAE3B,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/B,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,oCAAoC,CAAC,CAAC;QACpF,CAAC;QACD,OAAO,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACpC,CAAC;IAED,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CACb,YAAY,GAAG,4EAA4E;YACzF,2DAA2D,CAC9D,CAAC;IACJ,CAAC;IACD,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAEvB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC;IACxC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,oCAAoC,CAAC,CAAC;IACpF,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,CAAC;IAC1B,MAAM,MAAM,GAAG,KAAK,GAAG,UAAU,CAAC,KAAK,GAAG,MAAM,EAAE,IAAI,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,KAAK,GAAG,UAAU,CAAC,KAAK,GAAG,MAAM,EAAE,IAAI,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,OAAO,CAAC,CAAC;IAC3E,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC/E,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;AACxC,CAAC;AAED,gEAAgE;AAChE,SAAgB,kBAAkB,CAAC,KAAa;IAC9C,OAAO,IAAI,MAAM,CAAC,IAAI,iCAAyB,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClE,CAAC"}
@@ -0,0 +1,158 @@
1
+ // Task 2213. The due predicate compares startDate lexically against
2
+ // new Date().toISOString(), so every stored value must share that exact shape.
3
+ import { describe, it, expect } from "vitest";
4
+ import { CANONICAL_INSTANT_PATTERN, normaliseInstant, isCanonicalInstant } from "../index.js";
5
+
6
+ describe("normaliseInstant — offset-bearing input", () => {
7
+ it("converts a BST offset to the equivalent UTC instant", () => {
8
+ expect(normaliseInstant("2026-07-30T11:45:00+01:00", "Europe/London")).toBe(
9
+ "2026-07-30T10:45:00.000Z"
10
+ );
11
+ });
12
+ it("leaves an already-canonical value byte-identical", () => {
13
+ expect(normaliseInstant("2026-06-28T05:00:00.000Z", "UTC")).toBe("2026-06-28T05:00:00.000Z");
14
+ });
15
+ it("adds the missing .000 to a Z value that lacks it", () => {
16
+ expect(normaliseInstant("2026-07-28T10:00:00Z", "UTC")).toBe("2026-07-28T10:00:00.000Z");
17
+ });
18
+ it("handles the milliseconds-plus-offset shape", () => {
19
+ expect(normaliseInstant("2026-08-02T19:00:00.000+01:00", "Europe/London")).toBe(
20
+ "2026-08-02T18:00:00.000Z"
21
+ );
22
+ });
23
+ it("ignores the zone argument entirely when the value carries one", () => {
24
+ expect(normaliseInstant("2026-07-30T11:45:00+01:00", "America/New_York")).toBe(
25
+ "2026-07-30T10:45:00.000Z"
26
+ );
27
+ });
28
+ });
29
+
30
+ describe("normaliseInstant — zoneless wall clock", () => {
31
+ it("reads a summer wall clock in the given zone", () => {
32
+ expect(normaliseInstant("2026-07-20T09:00:00", "Europe/London")).toBe(
33
+ "2026-07-20T08:00:00.000Z"
34
+ );
35
+ });
36
+ it("reads a winter wall clock in the given zone", () => {
37
+ expect(normaliseInstant("2026-01-15T09:00:00", "Europe/London")).toBe(
38
+ "2026-01-15T09:00:00.000Z"
39
+ );
40
+ });
41
+ it("reads a non-UK zone", () => {
42
+ expect(normaliseInstant("2026-07-20T09:00:00", "America/New_York")).toBe(
43
+ "2026-07-20T13:00:00.000Z"
44
+ );
45
+ });
46
+ it("shifts a spring-forward gap wall clock past the gap", () => {
47
+ // 01:30 on 29 Mar 2026 does not exist in Europe/London; 01:00 GMT -> 02:00 BST.
48
+ expect(normaliseInstant("2026-03-29T01:30:00", "Europe/London")).toBe(
49
+ "2026-03-29T01:30:00.000Z"
50
+ );
51
+ });
52
+ it("takes the earlier occurrence of an ambiguous autumn wall clock", () => {
53
+ // 01:30 on 25 Oct 2026 happens twice; the earlier one is BST at 00:30Z.
54
+ expect(normaliseInstant("2026-10-25T01:30:00", "Europe/London")).toBe(
55
+ "2026-10-25T00:30:00.000Z"
56
+ );
57
+ });
58
+ it("takes the earlier occurrence of an ambiguous US wall clock", () => {
59
+ expect(normaliseInstant("2026-11-01T01:30:00", "America/New_York")).toBe(
60
+ "2026-11-01T05:30:00.000Z"
61
+ );
62
+ });
63
+ });
64
+
65
+ describe("normaliseInstant — partial and sub-second precision", () => {
66
+ it("keeps the fractional second on a zoneless value", () => {
67
+ // Intl resolves only to seconds. Differencing its reconstruction against a
68
+ // millisecond-bearing instant used to fold the fraction into the offset and
69
+ // land a full second out (09:00:00.5 BST came back as 08:00:01.000Z).
70
+ expect(normaliseInstant("2026-07-20T09:00:00.5", "Europe/London")).toBe(
71
+ "2026-07-20T08:00:00.500Z"
72
+ );
73
+ expect(normaliseInstant("2026-01-15T09:00:00.123", "Europe/London")).toBe(
74
+ "2026-01-15T09:00:00.123Z"
75
+ );
76
+ });
77
+
78
+ it("reads a minute-precision value in the zone", () => {
79
+ expect(normaliseInstant("2026-07-20T09:00", "Europe/London")).toBe(
80
+ "2026-07-20T08:00:00.000Z"
81
+ );
82
+ });
83
+
84
+ it("reads a date-only value as midnight in the zone", () => {
85
+ // Midnight on 20 July in London is 23:00Z on the 19th.
86
+ expect(normaliseInstant("2026-07-20", "Europe/London")).toBe("2026-07-19T23:00:00.000Z");
87
+ expect(normaliseInstant("2026-01-15", "Europe/London")).toBe("2026-01-15T00:00:00.000Z");
88
+ });
89
+
90
+ it("accepts an offset written without a colon", () => {
91
+ expect(normaliseInstant("2026-07-20T09:00:00+0100", "Europe/London")).toBe(
92
+ "2026-07-20T08:00:00.000Z"
93
+ );
94
+ });
95
+ });
96
+
97
+ describe("normaliseInstant — refusals", () => {
98
+ it("throws on a zoneless value with a null zone, naming the value", () => {
99
+ expect(() => normaliseInstant("2026-07-20T09:00:00", null)).toThrow(/2026-07-20T09:00:00/);
100
+ });
101
+ it("throws on a zoneless value with an invalid zone", () => {
102
+ expect(() => normaliseInstant("2026-07-20T09:00:00", "Not/AZone")).toThrow(/Not\/AZone/);
103
+ });
104
+ it("throws on an unparseable value, naming it", () => {
105
+ expect(() => normaliseInstant("next tuesday", "Europe/London")).toThrow(/next tuesday/);
106
+ });
107
+ });
108
+
109
+ describe("normaliseInstant — server timezone independence", () => {
110
+ it("gives the same answer whatever the process TZ is", () => {
111
+ // A server-local reading (new Date("2026-07-20T09:00:00")) would differ here.
112
+ const before = process.env.TZ;
113
+ try {
114
+ process.env.TZ = "Asia/Tokyo";
115
+ expect(normaliseInstant("2026-07-20T09:00:00", "Europe/London")).toBe(
116
+ "2026-07-20T08:00:00.000Z"
117
+ );
118
+ process.env.TZ = "America/Los_Angeles";
119
+ expect(normaliseInstant("2026-07-20T09:00:00", "Europe/London")).toBe(
120
+ "2026-07-20T08:00:00.000Z"
121
+ );
122
+ } finally {
123
+ process.env.TZ = before;
124
+ }
125
+ });
126
+ });
127
+
128
+ describe("isCanonicalInstant", () => {
129
+ it("accepts only the full 24-character shape", () => {
130
+ expect(isCanonicalInstant("2026-07-30T10:45:00.000Z")).toBe(true);
131
+ // Right instant, wrong shape: "…00.000Z" sorts BEFORE "…00Z", so a mixed
132
+ // corpus breaks the ordering the whole fix restores.
133
+ expect(isCanonicalInstant("2026-07-30T10:45:00Z")).toBe(false);
134
+ expect(isCanonicalInstant("2026-07-30T11:45:00+01:00")).toBe(false);
135
+ expect(isCanonicalInstant("2026-07-20T09:00:00")).toBe(false);
136
+ });
137
+ });
138
+
139
+ describe("CANONICAL_INSTANT_PATTERN", () => {
140
+ // The pattern is also handed to Cypher as a `=~` parameter. 2213's review
141
+ // found its audit regex was never executed by any test, the session being
142
+ // mocked. This executes the exact exported string.
143
+ const re = new RegExp(`^${CANONICAL_INSTANT_PATTERN}$`);
144
+
145
+ it("accepts exactly what isCanonicalInstant accepts", () => {
146
+ for (const v of ["2026-08-07T09:00:00.000Z", "2026-01-15T23:59:59.999Z"]) {
147
+ expect(re.test(v)).toBe(true);
148
+ expect(isCanonicalInstant(v)).toBe(true);
149
+ }
150
+ });
151
+
152
+ it("rejects the three non-canonical forms", () => {
153
+ for (const v of ["2026-08-07T09:00:00+01:00", "2026-08-07T09:00:00Z", "2026-08-07T09:00:00"]) {
154
+ expect(re.test(v)).toBe(false);
155
+ expect(isCanonicalInstant(v)).toBe(false);
156
+ }
157
+ });
158
+ });