@rubytech/create-maxy-code 0.1.552 → 0.1.554

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 (690) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/lib/routine-templates/dist/index.d.ts +15 -2
  3. package/payload/platform/lib/routine-templates/dist/index.d.ts.map +1 -1
  4. package/payload/platform/lib/routine-templates/dist/index.js +25 -1
  5. package/payload/platform/lib/routine-templates/dist/index.js.map +1 -1
  6. package/payload/platform/lib/routine-templates/dist/roster.d.ts +76 -1
  7. package/payload/platform/lib/routine-templates/dist/roster.d.ts.map +1 -1
  8. package/payload/platform/lib/routine-templates/dist/roster.js +60 -3
  9. package/payload/platform/lib/routine-templates/dist/roster.js.map +1 -1
  10. package/payload/platform/lib/routine-templates/src/__tests__/roster.test.ts +93 -1
  11. package/payload/platform/lib/routine-templates/src/__tests__/seed.test.ts +74 -0
  12. package/payload/platform/lib/routine-templates/src/index.ts +25 -1
  13. package/payload/platform/lib/routine-templates/src/roster.ts +111 -2
  14. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +22 -11
  15. package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +12 -0
  16. package/payload/platform/plugins/docs/references/admin-ui.md +21 -10
  17. package/payload/platform/plugins/scheduling/PLUGIN.md +50 -4
  18. package/payload/platform/plugins/scheduling/mcp/dist/index.js +51 -6
  19. package/payload/platform/plugins/scheduling/mcp/dist/index.js.map +1 -1
  20. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/connector-freebusy.test.d.ts +2 -0
  21. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/connector-freebusy.test.d.ts.map +1 -0
  22. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/connector-freebusy.test.js +216 -0
  23. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/connector-freebusy.test.js.map +1 -0
  24. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/fires-per-day.test.d.ts +2 -0
  25. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/fires-per-day.test.d.ts.map +1 -0
  26. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/fires-per-day.test.js +44 -0
  27. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/fires-per-day.test.js.map +1 -0
  28. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/gate-classification.test.d.ts +2 -0
  29. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/gate-classification.test.d.ts.map +1 -0
  30. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/gate-classification.test.js +92 -0
  31. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/gate-classification.test.js.map +1 -0
  32. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/schedule-audit.test.js +210 -2
  33. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/schedule-audit.test.js.map +1 -1
  34. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/update-summary.test.js +18 -1
  35. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/update-summary.test.js.map +1 -1
  36. package/payload/platform/plugins/scheduling/mcp/dist/lib/connector-freebusy.d.ts +86 -0
  37. package/payload/platform/plugins/scheduling/mcp/dist/lib/connector-freebusy.d.ts.map +1 -0
  38. package/payload/platform/plugins/scheduling/mcp/dist/lib/connector-freebusy.js +240 -0
  39. package/payload/platform/plugins/scheduling/mcp/dist/lib/connector-freebusy.js.map +1 -0
  40. package/payload/platform/plugins/scheduling/mcp/dist/lib/fires-per-day.d.ts +2 -0
  41. package/payload/platform/plugins/scheduling/mcp/dist/lib/fires-per-day.d.ts.map +1 -0
  42. package/payload/platform/plugins/scheduling/mcp/dist/lib/fires-per-day.js +47 -0
  43. package/payload/platform/plugins/scheduling/mcp/dist/lib/fires-per-day.js.map +1 -0
  44. package/payload/platform/plugins/scheduling/mcp/dist/lib/gate.d.ts +1 -1
  45. package/payload/platform/plugins/scheduling/mcp/dist/lib/gate.d.ts.map +1 -1
  46. package/payload/platform/plugins/scheduling/mcp/dist/lib/gate.js +9 -1
  47. package/payload/platform/plugins/scheduling/mcp/dist/lib/gate.js.map +1 -1
  48. package/payload/platform/plugins/scheduling/mcp/dist/lib/schedule-audit.d.ts +103 -0
  49. package/payload/platform/plugins/scheduling/mcp/dist/lib/schedule-audit.d.ts.map +1 -1
  50. package/payload/platform/plugins/scheduling/mcp/dist/lib/schedule-audit.js +307 -0
  51. package/payload/platform/plugins/scheduling/mcp/dist/lib/schedule-audit.js.map +1 -1
  52. package/payload/platform/plugins/scheduling/mcp/dist/lib/update-summary.d.ts.map +1 -1
  53. package/payload/platform/plugins/scheduling/mcp/dist/lib/update-summary.js +11 -1
  54. package/payload/platform/plugins/scheduling/mcp/dist/lib/update-summary.js.map +1 -1
  55. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js +41 -1
  56. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js.map +1 -1
  57. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-connector-busy-sync.test.js +84 -1
  58. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-connector-busy-sync.test.js.map +1 -1
  59. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-gate-waiver.test.d.ts +2 -0
  60. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-gate-waiver.test.d.ts.map +1 -0
  61. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-gate-waiver.test.js +200 -0
  62. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-gate-waiver.test.js.map +1 -0
  63. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-gate-write.test.js +21 -1
  64. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-gate-write.test.js.map +1 -1
  65. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-update-recurrence-record.test.d.ts +2 -0
  66. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-update-recurrence-record.test.d.ts.map +1 -0
  67. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-update-recurrence-record.test.js +208 -0
  68. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-update-recurrence-record.test.js.map +1 -0
  69. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-connector-busy-sync.d.ts +26 -2
  70. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-connector-busy-sync.d.ts.map +1 -1
  71. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-connector-busy-sync.js +51 -2
  72. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-connector-busy-sync.js.map +1 -1
  73. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.d.ts +40 -0
  74. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.d.ts.map +1 -1
  75. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js +70 -5
  76. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js.map +1 -1
  77. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.d.ts.map +1 -1
  78. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.js +67 -0
  79. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.js.map +1 -1
  80. package/payload/platform/plugins/workflows/skills/workflow-manager/SKILL.md +4 -0
  81. package/payload/server/public/activity.html +5 -5
  82. package/payload/server/public/agents.html +4 -4
  83. package/payload/server/public/assets/{AdminLoginScreens-Bjcs9ta9.js → AdminLoginScreens-BDaJlf67.js} +1 -1
  84. package/payload/server/public/assets/AdminLoginScreens-BDaJlf67.js.br +0 -0
  85. package/payload/server/public/assets/AdminLoginScreens-BDaJlf67.js.gz +0 -0
  86. package/payload/server/public/assets/AdminShell-DUUw6WNs.js +2 -0
  87. package/payload/server/public/assets/AdminShell-DUUw6WNs.js.br +0 -0
  88. package/payload/server/public/assets/AdminShell-DUUw6WNs.js.gz +0 -0
  89. package/payload/server/public/assets/{activity-C8E8-EwQ.js → activity-JpRW4yeS.js} +1 -1
  90. package/payload/server/public/assets/activity-JpRW4yeS.js.br +0 -0
  91. package/payload/server/public/assets/activity-JpRW4yeS.js.gz +0 -0
  92. package/payload/server/public/assets/admin-BH4gL0c2.js +1 -0
  93. package/payload/server/public/assets/admin-BH4gL0c2.js.br +0 -0
  94. package/payload/server/public/assets/admin-BH4gL0c2.js.gz +0 -0
  95. package/payload/server/public/assets/{agents-DuN92iFb.js → agents-EtIviAPH.js} +1 -1
  96. package/payload/server/public/assets/agents-EtIviAPH.js.br +0 -0
  97. package/payload/server/public/assets/agents-EtIviAPH.js.gz +0 -0
  98. package/payload/server/public/assets/{arc-DaudCnXg.js → arc-DaI5MLTq.js} +1 -1
  99. package/payload/server/public/assets/arc-DaI5MLTq.js.br +0 -0
  100. package/payload/server/public/assets/arc-DaI5MLTq.js.gz +0 -0
  101. package/payload/server/public/assets/architecture-YZFGNWBL-DWZIX5aV.js +1 -0
  102. package/payload/server/public/assets/architecture-YZFGNWBL-DWZIX5aV.js.br +0 -0
  103. package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-Dj9L_JR0.js → architectureDiagram-Q4EWVU46-xZ0gDnJQ.js} +1 -1
  104. package/payload/server/public/assets/architectureDiagram-Q4EWVU46-xZ0gDnJQ.js.br +0 -0
  105. package/payload/server/public/assets/architectureDiagram-Q4EWVU46-xZ0gDnJQ.js.gz +0 -0
  106. package/payload/server/public/assets/{blockDiagram-DXYQGD6D-BTXKYwrR.js → blockDiagram-DXYQGD6D-DwWtWBJp.js} +1 -1
  107. package/payload/server/public/assets/blockDiagram-DXYQGD6D-DwWtWBJp.js.br +0 -0
  108. package/payload/server/public/assets/blockDiagram-DXYQGD6D-DwWtWBJp.js.gz +0 -0
  109. package/payload/server/public/assets/{browser-BxebdKbh.js → browser-DntnPrfU.js} +1 -1
  110. package/payload/server/public/assets/browser-DntnPrfU.js.br +0 -0
  111. package/payload/server/public/assets/browser-DntnPrfU.js.gz +0 -0
  112. package/payload/server/public/assets/{c4Diagram-AHTNJAMY-BN7XeOWV.js → c4Diagram-AHTNJAMY-qRseEjtL.js} +1 -1
  113. package/payload/server/public/assets/c4Diagram-AHTNJAMY-qRseEjtL.js.br +0 -0
  114. package/payload/server/public/assets/c4Diagram-AHTNJAMY-qRseEjtL.js.gz +0 -0
  115. package/payload/server/public/assets/calendar-DnmkfQAe.js +1 -0
  116. package/payload/server/public/assets/calendar-DnmkfQAe.js.br +0 -0
  117. package/payload/server/public/assets/calendar-DnmkfQAe.js.gz +0 -0
  118. package/payload/server/public/assets/channel-DnchwXmx.js +1 -0
  119. package/payload/server/public/assets/chat-_Ok0sVx2.js +1 -0
  120. package/payload/server/public/assets/chat-_Ok0sVx2.js.br +2 -0
  121. package/payload/server/public/assets/chat-_Ok0sVx2.js.gz +0 -0
  122. package/payload/server/public/assets/chevron-left-udrHmjzu.js +1 -0
  123. package/payload/server/public/assets/chevron-left-udrHmjzu.js.br +0 -0
  124. package/payload/server/public/assets/{chunk-2KRD3SAO-BwEVlnxo.js → chunk-2KRD3SAO-B6koUoB7.js} +1 -1
  125. package/payload/server/public/assets/chunk-2KRD3SAO-B6koUoB7.js.br +0 -0
  126. package/payload/server/public/assets/chunk-2KRD3SAO-B6koUoB7.js.gz +0 -0
  127. package/payload/server/public/assets/{chunk-336JU56O-DR5EUh9D.js → chunk-336JU56O-ByZrJI-3.js} +2 -2
  128. package/payload/server/public/assets/chunk-336JU56O-ByZrJI-3.js.br +0 -0
  129. package/payload/server/public/assets/chunk-336JU56O-ByZrJI-3.js.gz +0 -0
  130. package/payload/server/public/assets/chunk-426QAEUC-fNi5i3SA.js +1 -0
  131. package/payload/server/public/assets/chunk-426QAEUC-fNi5i3SA.js.br +0 -0
  132. package/payload/server/public/assets/chunk-426QAEUC-fNi5i3SA.js.gz +0 -0
  133. package/payload/server/public/assets/{chunk-4BX2VUAB-C5p3xTC6.js → chunk-4BX2VUAB-7sO95xR2.js} +1 -1
  134. package/payload/server/public/assets/chunk-4BX2VUAB-7sO95xR2.js.br +0 -0
  135. package/payload/server/public/assets/chunk-4BX2VUAB-7sO95xR2.js.gz +0 -0
  136. package/payload/server/public/assets/{chunk-4TB4RGXK-CqrBvvGI.js → chunk-4TB4RGXK-KqKMvkA_.js} +1 -1
  137. package/payload/server/public/assets/chunk-4TB4RGXK-KqKMvkA_.js.br +0 -0
  138. package/payload/server/public/assets/chunk-4TB4RGXK-KqKMvkA_.js.gz +0 -0
  139. package/payload/server/public/assets/{chunk-55IACEB6-DDU_m1ra.js → chunk-55IACEB6-ggIJf_TC.js} +1 -1
  140. package/payload/server/public/assets/chunk-55IACEB6-ggIJf_TC.js.br +0 -0
  141. package/payload/server/public/assets/chunk-55IACEB6-ggIJf_TC.js.gz +0 -0
  142. package/payload/server/public/assets/{chunk-5FUZZQ4R-B21kX6ld.js → chunk-5FUZZQ4R-CEIokxZS.js} +1 -1
  143. package/payload/server/public/assets/chunk-5FUZZQ4R-CEIokxZS.js.br +0 -0
  144. package/payload/server/public/assets/chunk-5FUZZQ4R-CEIokxZS.js.gz +0 -0
  145. package/payload/server/public/assets/{chunk-5PVQY5BW-CYusrVbq.js → chunk-5PVQY5BW-BEsb0aTb.js} +1 -1
  146. package/payload/server/public/assets/chunk-5PVQY5BW-BEsb0aTb.js.br +0 -0
  147. package/payload/server/public/assets/chunk-5PVQY5BW-BEsb0aTb.js.gz +0 -0
  148. package/payload/server/public/assets/{chunk-67CJDMHE-9W0Qv0jm.js → chunk-67CJDMHE-LS8rUbii.js} +1 -1
  149. package/payload/server/public/assets/chunk-67CJDMHE-LS8rUbii.js.br +2 -0
  150. package/payload/server/public/assets/chunk-67CJDMHE-LS8rUbii.js.gz +0 -0
  151. package/payload/server/public/assets/{chunk-7N4EOEYR-B3gqydR3.js → chunk-7N4EOEYR-JKOVngS0.js} +1 -1
  152. package/payload/server/public/assets/chunk-7N4EOEYR-JKOVngS0.js.br +2 -0
  153. package/payload/server/public/assets/chunk-7N4EOEYR-JKOVngS0.js.gz +0 -0
  154. package/payload/server/public/assets/{chunk-AA7GKIK3-DW8a-2NK.js → chunk-AA7GKIK3-CoXnTVK6.js} +1 -1
  155. package/payload/server/public/assets/chunk-AA7GKIK3-CoXnTVK6.js.br +0 -0
  156. package/payload/server/public/assets/chunk-AA7GKIK3-CoXnTVK6.js.gz +0 -0
  157. package/payload/server/public/assets/{chunk-BSJP7CBP-DqXIO_5R.js → chunk-BSJP7CBP-CcsqObFg.js} +1 -1
  158. package/payload/server/public/assets/chunk-BSJP7CBP-CcsqObFg.js.br +0 -0
  159. package/payload/server/public/assets/chunk-BSJP7CBP-CcsqObFg.js.gz +0 -0
  160. package/payload/server/public/assets/{chunk-CIAEETIT-BMJfgj2u.js → chunk-CIAEETIT-CpsybR7q.js} +1 -1
  161. package/payload/server/public/assets/chunk-CIAEETIT-CpsybR7q.js.br +0 -0
  162. package/payload/server/public/assets/chunk-CIAEETIT-CpsybR7q.js.gz +0 -0
  163. package/payload/server/public/assets/{chunk-EDXVE4YY-CyjTyMkv.js → chunk-EDXVE4YY-CCCHYEbG.js} +1 -1
  164. package/payload/server/public/assets/chunk-EDXVE4YY-CCCHYEbG.js.br +2 -0
  165. package/payload/server/public/assets/chunk-EDXVE4YY-CCCHYEbG.js.gz +0 -0
  166. package/payload/server/public/assets/{chunk-ENJZ2VHE-B-k8uOTF.js → chunk-ENJZ2VHE-yVekovt2.js} +1 -1
  167. package/payload/server/public/assets/chunk-ENJZ2VHE-yVekovt2.js.br +0 -0
  168. package/payload/server/public/assets/chunk-ENJZ2VHE-yVekovt2.js.gz +0 -0
  169. package/payload/server/public/assets/{chunk-FMBD7UC4-CdPjwbtf.js → chunk-FMBD7UC4-D27VnSCa.js} +1 -1
  170. package/payload/server/public/assets/chunk-FMBD7UC4-D27VnSCa.js.br +0 -0
  171. package/payload/server/public/assets/chunk-FMBD7UC4-D27VnSCa.js.gz +0 -0
  172. package/payload/server/public/assets/{chunk-FOC6F5B3-Dl6l1KAh.js → chunk-FOC6F5B3-C0tU2UFl.js} +1 -1
  173. package/payload/server/public/assets/chunk-FOC6F5B3-C0tU2UFl.js.br +0 -0
  174. package/payload/server/public/assets/chunk-FOC6F5B3-C0tU2UFl.js.gz +0 -0
  175. package/payload/server/public/assets/{chunk-ICPOFSXX-CKQWnR1l.js → chunk-ICPOFSXX-BmWvYe_5.js} +2 -2
  176. package/payload/server/public/assets/chunk-ICPOFSXX-BmWvYe_5.js.br +0 -0
  177. package/payload/server/public/assets/chunk-ICPOFSXX-BmWvYe_5.js.gz +0 -0
  178. package/payload/server/public/assets/{chunk-K5T4RW27--g29_wjW.js → chunk-K5T4RW27-DIKxqyYw.js} +1 -1
  179. package/payload/server/public/assets/chunk-K5T4RW27-DIKxqyYw.js.br +0 -0
  180. package/payload/server/public/assets/chunk-K5T4RW27-DIKxqyYw.js.gz +0 -0
  181. package/payload/server/public/assets/{chunk-KGLVRYIC-CI77ENeO.js → chunk-KGLVRYIC-CiL4YVLo.js} +1 -1
  182. package/payload/server/public/assets/chunk-KGLVRYIC-CiL4YVLo.js.br +0 -0
  183. package/payload/server/public/assets/chunk-KGLVRYIC-CiL4YVLo.js.gz +0 -0
  184. package/payload/server/public/assets/{chunk-LIHQZDEY-CE-XByg6.js → chunk-LIHQZDEY-ejKezVlD.js} +1 -1
  185. package/payload/server/public/assets/chunk-LIHQZDEY-ejKezVlD.js.br +0 -0
  186. package/payload/server/public/assets/chunk-LIHQZDEY-ejKezVlD.js.gz +0 -0
  187. package/payload/server/public/assets/{chunk-ORNJ4GCN-DkjJQQSm.js → chunk-ORNJ4GCN-Cc0vqc-D.js} +1 -1
  188. package/payload/server/public/assets/chunk-ORNJ4GCN-Cc0vqc-D.js.br +0 -0
  189. package/payload/server/public/assets/chunk-ORNJ4GCN-Cc0vqc-D.js.gz +0 -0
  190. package/payload/server/public/assets/{chunk-OYMX7WX6-Dis40FU5.js → chunk-OYMX7WX6-BE4b8qC9.js} +1 -1
  191. package/payload/server/public/assets/chunk-OYMX7WX6-BE4b8qC9.js.br +0 -0
  192. package/payload/server/public/assets/chunk-OYMX7WX6-BE4b8qC9.js.gz +0 -0
  193. package/payload/server/public/assets/chunk-QZHKN3VN-Dhlh7Pkk.js +1 -0
  194. package/payload/server/public/assets/chunk-QZHKN3VN-Dhlh7Pkk.js.br +0 -0
  195. package/payload/server/public/assets/chunk-QZHKN3VN-Dhlh7Pkk.js.gz +0 -0
  196. package/payload/server/public/assets/{chunk-U2HBQHQK-DT3NLMic.js → chunk-U2HBQHQK-DcEL3so-.js} +1 -1
  197. package/payload/server/public/assets/chunk-U2HBQHQK-DcEL3so-.js.br +0 -0
  198. package/payload/server/public/assets/chunk-U2HBQHQK-DcEL3so-.js.gz +0 -0
  199. package/payload/server/public/assets/{chunk-X2U36JSP-Dxaab1tD.js → chunk-X2U36JSP-D0X5qpg6.js} +1 -1
  200. package/payload/server/public/assets/chunk-X2U36JSP-D0X5qpg6.js.br +0 -0
  201. package/payload/server/public/assets/chunk-X2U36JSP-D0X5qpg6.js.gz +0 -0
  202. package/payload/server/public/assets/{chunk-XPW4576I-DtqJwn2x.js → chunk-XPW4576I-DZqqB9Zi.js} +1 -1
  203. package/payload/server/public/assets/chunk-XPW4576I-DZqqB9Zi.js.br +0 -0
  204. package/payload/server/public/assets/chunk-XPW4576I-DZqqB9Zi.js.gz +0 -0
  205. package/payload/server/public/assets/{chunk-YZCP3GAM-CEEcRrOH.js → chunk-YZCP3GAM-BTxWHFTx.js} +1 -1
  206. package/payload/server/public/assets/chunk-YZCP3GAM-BTxWHFTx.js.br +0 -0
  207. package/payload/server/public/assets/chunk-YZCP3GAM-BTxWHFTx.js.gz +0 -0
  208. package/payload/server/public/assets/{chunk-ZZ45TVLE-CVhqjM4L.js → chunk-ZZ45TVLE-D8nE76c5.js} +1 -1
  209. package/payload/server/public/assets/chunk-ZZ45TVLE-D8nE76c5.js.br +0 -0
  210. package/payload/server/public/assets/chunk-ZZ45TVLE-D8nE76c5.js.gz +0 -0
  211. package/payload/server/public/assets/classDiagram-6PBFFD2Q-D9OvkaTQ.js +1 -0
  212. package/payload/server/public/assets/classDiagram-6PBFFD2Q-D9OvkaTQ.js.br +0 -0
  213. package/payload/server/public/assets/classDiagram-6PBFFD2Q-D9OvkaTQ.js.gz +0 -0
  214. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BEuoBAgN.js +1 -0
  215. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BEuoBAgN.js.br +0 -0
  216. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BEuoBAgN.js.gz +0 -0
  217. package/payload/server/public/assets/clock-BmdrE7vz.js +1 -0
  218. package/payload/server/public/assets/clock-BmdrE7vz.js.br +0 -0
  219. package/payload/server/public/assets/clock-BmdrE7vz.js.gz +0 -0
  220. package/payload/server/public/assets/clone-C-YfAPQ_.js +1 -0
  221. package/payload/server/public/assets/{copy-DCDHXq3O.js → copy-BiOI6GeQ.js} +1 -1
  222. package/payload/server/public/assets/copy-BiOI6GeQ.js.br +0 -0
  223. package/payload/server/public/assets/copy-BiOI6GeQ.js.gz +0 -0
  224. package/payload/server/public/assets/{cose-bilkent-S5V4N54A-kEHVkDNn.js → cose-bilkent-S5V4N54A-D-95BzXL.js} +1 -1
  225. package/payload/server/public/assets/cose-bilkent-S5V4N54A-D-95BzXL.js.br +0 -0
  226. package/payload/server/public/assets/cose-bilkent-S5V4N54A-D-95BzXL.js.gz +0 -0
  227. package/payload/server/public/assets/{dagre-BgQxtxH1.js → dagre-CrjQCEN9.js} +1 -1
  228. package/payload/server/public/assets/dagre-CrjQCEN9.js.br +0 -0
  229. package/payload/server/public/assets/dagre-CrjQCEN9.js.gz +0 -0
  230. package/payload/server/public/assets/{dagre-KV5264BT-CgxwoTcv.js → dagre-KV5264BT-mcGXOajA.js} +1 -1
  231. package/payload/server/public/assets/dagre-KV5264BT-mcGXOajA.js.br +0 -0
  232. package/payload/server/public/assets/dagre-KV5264BT-mcGXOajA.js.gz +0 -0
  233. package/payload/server/public/assets/data-Za62pAv5.js +1 -0
  234. package/payload/server/public/assets/data-Za62pAv5.js.br +2 -0
  235. package/payload/server/public/assets/data-Za62pAv5.js.gz +0 -0
  236. package/payload/server/public/assets/{diagram-5BDNPKRD-MEZ1cQGO.js → diagram-5BDNPKRD-Colq2XR9.js} +1 -1
  237. package/payload/server/public/assets/diagram-5BDNPKRD-Colq2XR9.js.br +0 -0
  238. package/payload/server/public/assets/diagram-5BDNPKRD-Colq2XR9.js.gz +0 -0
  239. package/payload/server/public/assets/{diagram-G4DWMVQ6-DbZg9hWP.js → diagram-G4DWMVQ6-DafrIgN8.js} +1 -1
  240. package/payload/server/public/assets/diagram-G4DWMVQ6-DafrIgN8.js.br +0 -0
  241. package/payload/server/public/assets/diagram-G4DWMVQ6-DafrIgN8.js.gz +0 -0
  242. package/payload/server/public/assets/{diagram-MMDJMWI5-Bb1y8DFy.js → diagram-MMDJMWI5-CD9pSd2z.js} +1 -1
  243. package/payload/server/public/assets/diagram-MMDJMWI5-CD9pSd2z.js.br +0 -0
  244. package/payload/server/public/assets/diagram-MMDJMWI5-CD9pSd2z.js.gz +0 -0
  245. package/payload/server/public/assets/{diagram-TYMM5635-tbStCw5U.js → diagram-TYMM5635-DqhsN-Il.js} +1 -1
  246. package/payload/server/public/assets/diagram-TYMM5635-DqhsN-Il.js.br +0 -0
  247. package/payload/server/public/assets/diagram-TYMM5635-DqhsN-Il.js.gz +0 -0
  248. package/payload/server/public/assets/{erDiagram-SMLLAGMA-ClEFo_Bw.js → erDiagram-SMLLAGMA-mf9kQrIs.js} +1 -1
  249. package/payload/server/public/assets/erDiagram-SMLLAGMA-mf9kQrIs.js.br +0 -0
  250. package/payload/server/public/assets/erDiagram-SMLLAGMA-mf9kQrIs.js.gz +0 -0
  251. package/payload/server/public/assets/{file-text-zQgEQWCF.js → file-text-s2dqE-bu.js} +1 -1
  252. package/payload/server/public/assets/file-text-s2dqE-bu.js.br +0 -0
  253. package/payload/server/public/assets/file-text-s2dqE-bu.js.gz +0 -0
  254. package/payload/server/public/assets/{flatten-Bu-b1uTY.js → flatten-BtIc9jX7.js} +1 -1
  255. package/payload/server/public/assets/flatten-BtIc9jX7.js.br +0 -0
  256. package/payload/server/public/assets/flatten-BtIc9jX7.js.gz +0 -0
  257. package/payload/server/public/assets/{flowDiagram-DWJPFMVM-9yr262Ji.js → flowDiagram-DWJPFMVM-CJLkGmFm.js} +1 -1
  258. package/payload/server/public/assets/flowDiagram-DWJPFMVM-CJLkGmFm.js.br +0 -0
  259. package/payload/server/public/assets/flowDiagram-DWJPFMVM-CJLkGmFm.js.gz +0 -0
  260. package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-ZCSA0DtG.js → ganttDiagram-T4ZO3ILL-JV6PUFic.js} +1 -1
  261. package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-JV6PUFic.js.br +0 -0
  262. package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-ZCSA0DtG.js.gz → ganttDiagram-T4ZO3ILL-JV6PUFic.js.gz} +0 -0
  263. package/payload/server/public/assets/gitGraph-7Q5UKJZL-C-FvNTHZ.js +1 -0
  264. package/payload/server/public/assets/gitGraph-7Q5UKJZL-C-FvNTHZ.js.br +0 -0
  265. package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-0KvpzpaU.js → gitGraphDiagram-UUTBAWPF-JhiumTtl.js} +1 -1
  266. package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-JhiumTtl.js.br +0 -0
  267. package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-JhiumTtl.js.gz +0 -0
  268. package/payload/server/public/assets/{graph-CFCEh_YI.js → graph-ClX4Zn0s.js} +2 -2
  269. package/payload/server/public/assets/graph-ClX4Zn0s.js.br +0 -0
  270. package/payload/server/public/assets/graph-ClX4Zn0s.js.gz +0 -0
  271. package/payload/server/public/assets/{graph-labels-CA1UcDuS.js → graph-labels-BdLfJumr.js} +1 -1
  272. package/payload/server/public/assets/graph-labels-BdLfJumr.js.br +0 -0
  273. package/payload/server/public/assets/graph-labels-BdLfJumr.js.gz +0 -0
  274. package/payload/server/public/assets/{graphlib-B3SsCJOd.js → graphlib-Z7cApv13.js} +1 -1
  275. package/payload/server/public/assets/graphlib-Z7cApv13.js.br +0 -0
  276. package/payload/server/public/assets/graphlib-Z7cApv13.js.gz +0 -0
  277. package/payload/server/public/assets/info-OMHHGYJF-BjLPgHAC.js +1 -0
  278. package/payload/server/public/assets/info-OMHHGYJF-BjLPgHAC.js.br +0 -0
  279. package/payload/server/public/assets/infoDiagram-42DDH7IO-B-6k2hmd.js +2 -0
  280. package/payload/server/public/assets/infoDiagram-42DDH7IO-B-6k2hmd.js.br +0 -0
  281. package/payload/server/public/assets/infoDiagram-42DDH7IO-B-6k2hmd.js.gz +0 -0
  282. package/payload/server/public/assets/{isEmpty-CjH0UASp.js → isEmpty-Bu4fZ8Kf.js} +1 -1
  283. package/payload/server/public/assets/isEmpty-Bu4fZ8Kf.js.br +0 -0
  284. package/payload/server/public/assets/isEmpty-Bu4fZ8Kf.js.gz +0 -0
  285. package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-DsDoNemz.js → ishikawaDiagram-UXIWVN3A-CQIGY8NI.js} +1 -1
  286. package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-CQIGY8NI.js.br +0 -0
  287. package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-CQIGY8NI.js.gz +0 -0
  288. package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-xyayGhw3.js → journeyDiagram-VCZTEJTY-O5rEHC1o.js} +1 -1
  289. package/payload/server/public/assets/journeyDiagram-VCZTEJTY-O5rEHC1o.js.br +0 -0
  290. package/payload/server/public/assets/journeyDiagram-VCZTEJTY-O5rEHC1o.js.gz +0 -0
  291. package/payload/server/public/assets/{kanban-definition-6JOO6SKY-DuV3Go_1.js → kanban-definition-6JOO6SKY-BS7huuG7.js} +1 -1
  292. package/payload/server/public/assets/kanban-definition-6JOO6SKY-BS7huuG7.js.br +0 -0
  293. package/payload/server/public/assets/kanban-definition-6JOO6SKY-BS7huuG7.js.gz +0 -0
  294. package/payload/server/public/assets/{line-Cpb8GRkf.js → line-DjHTnO_W.js} +1 -1
  295. package/payload/server/public/assets/line-DjHTnO_W.js.br +0 -0
  296. package/payload/server/public/assets/line-DjHTnO_W.js.gz +0 -0
  297. package/payload/server/public/assets/{linear-l39GooQ5.js → linear-RvwZxFzh.js} +1 -1
  298. package/payload/server/public/assets/linear-RvwZxFzh.js.br +0 -0
  299. package/payload/server/public/assets/linear-RvwZxFzh.js.gz +0 -0
  300. package/payload/server/public/assets/{mermaid-parser.core-9hkxt3j1.js → mermaid-parser.core-CUoZE61Z.js} +2 -2
  301. package/payload/server/public/assets/mermaid-parser.core-CUoZE61Z.js.br +0 -0
  302. package/payload/server/public/assets/mermaid-parser.core-CUoZE61Z.js.gz +0 -0
  303. package/payload/server/public/assets/{mermaid.core-iR6TQesD.js → mermaid.core-CHquUUrw.js} +3 -3
  304. package/payload/server/public/assets/mermaid.core-CHquUUrw.js.br +0 -0
  305. package/payload/server/public/assets/mermaid.core-CHquUUrw.js.gz +0 -0
  306. package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-LCKhTYzs.js → mindmap-definition-QFDTVHPH-pHUJa3IP.js} +1 -1
  307. package/payload/server/public/assets/mindmap-definition-QFDTVHPH-pHUJa3IP.js.br +0 -0
  308. package/payload/server/public/assets/mindmap-definition-QFDTVHPH-pHUJa3IP.js.gz +0 -0
  309. package/payload/server/public/assets/{operator-hFXPDc2X.js → operator-BQtleyx3.js} +1 -1
  310. package/payload/server/public/assets/operator-BQtleyx3.js.br +0 -0
  311. package/payload/server/public/assets/operator-BQtleyx3.js.gz +0 -0
  312. package/payload/server/public/assets/{ordinal-D6D6WcTC.js → ordinal-C2TEWKNu.js} +1 -1
  313. package/payload/server/public/assets/ordinal-C2TEWKNu.js.br +0 -0
  314. package/payload/server/public/assets/ordinal-C2TEWKNu.js.gz +0 -0
  315. package/payload/server/public/assets/packet-4T2RLAQJ-BBAZASfb.js +1 -0
  316. package/payload/server/public/assets/packet-4T2RLAQJ-BBAZASfb.js.br +0 -0
  317. package/payload/server/public/assets/{page-C8jyPH_3.js → page-BkMbmVu6.js} +1 -1
  318. package/payload/server/public/assets/page-BkMbmVu6.js.br +0 -0
  319. package/payload/server/public/assets/page-BkMbmVu6.js.gz +0 -0
  320. package/payload/server/public/assets/{page-ne7I_r9L.js → page-C-jQaGZ4.js} +3 -3
  321. package/payload/server/public/assets/page-C-jQaGZ4.js.br +0 -0
  322. package/payload/server/public/assets/page-C-jQaGZ4.js.gz +0 -0
  323. package/payload/server/public/assets/{pdf-render-DanMu_cf.js → pdf-render-Bwg_xv1L.js} +1 -1
  324. package/payload/server/public/assets/pdf-render-Bwg_xv1L.js.br +0 -0
  325. package/payload/server/public/assets/{pdf-render-DanMu_cf.js.gz → pdf-render-Bwg_xv1L.js.gz} +0 -0
  326. package/payload/server/public/assets/pie-ZZUOXDRM-CCJUnMeG.js +1 -0
  327. package/payload/server/public/assets/pie-ZZUOXDRM-CCJUnMeG.js.br +0 -0
  328. package/payload/server/public/assets/{pieDiagram-DEJITSTG-Oo7wgo0C.js → pieDiagram-DEJITSTG-DRIRqqhQ.js} +1 -1
  329. package/payload/server/public/assets/pieDiagram-DEJITSTG-DRIRqqhQ.js.br +0 -0
  330. package/payload/server/public/assets/pieDiagram-DEJITSTG-DRIRqqhQ.js.gz +0 -0
  331. package/payload/server/public/assets/play-Da69rmat.js +1 -0
  332. package/payload/server/public/assets/play-Da69rmat.js.br +0 -0
  333. package/payload/server/public/assets/play-Da69rmat.js.gz +0 -0
  334. package/payload/server/public/assets/{public-BgnqjAal.js → public-BPlCLx7p.js} +1 -1
  335. package/payload/server/public/assets/public-BPlCLx7p.js.br +0 -0
  336. package/payload/server/public/assets/public-BPlCLx7p.js.gz +0 -0
  337. package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-B2hs2ord.js → quadrantDiagram-34T5L4WZ-7WHBrI_9.js} +1 -1
  338. package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-7WHBrI_9.js.br +0 -0
  339. package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-7WHBrI_9.js.gz +0 -0
  340. package/payload/server/public/assets/radar-PYXPWWZC-BsRU8Aep.js +1 -0
  341. package/payload/server/public/assets/radar-PYXPWWZC-BsRU8Aep.js.br +0 -0
  342. package/payload/server/public/assets/{reduce-BtXXK8Ma.js → reduce-BGpN5lgn.js} +1 -1
  343. package/payload/server/public/assets/reduce-BGpN5lgn.js.br +0 -0
  344. package/payload/server/public/assets/reduce-BGpN5lgn.js.gz +0 -0
  345. package/payload/server/public/assets/{requirementDiagram-MS252O5E-B8UkCUzW.js → requirementDiagram-MS252O5E-CatBEoHm.js} +1 -1
  346. package/payload/server/public/assets/requirementDiagram-MS252O5E-CatBEoHm.js.br +0 -0
  347. package/payload/server/public/assets/requirementDiagram-MS252O5E-CatBEoHm.js.gz +0 -0
  348. package/payload/server/public/assets/{rotate-ccw-DfJWjXAg.js → rotate-ccw-DpTlNy-M.js} +1 -1
  349. package/payload/server/public/assets/rotate-ccw-DpTlNy-M.js.br +0 -0
  350. package/payload/server/public/assets/rotate-ccw-DpTlNy-M.js.gz +0 -0
  351. package/payload/server/public/assets/routines-YlXtcZNz.js +2 -0
  352. package/payload/server/public/assets/routines-YlXtcZNz.js.br +0 -0
  353. package/payload/server/public/assets/routines-YlXtcZNz.js.gz +0 -0
  354. package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-Cojqqz7t.js → sankeyDiagram-XADWPNL6-DfefvhQ6.js} +1 -1
  355. package/payload/server/public/assets/sankeyDiagram-XADWPNL6-DfefvhQ6.js.br +0 -0
  356. package/payload/server/public/assets/sankeyDiagram-XADWPNL6-DfefvhQ6.js.gz +0 -0
  357. package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-C7ODsPjE.js → sequenceDiagram-FGHM5R23-51FmBwFt.js} +1 -1
  358. package/payload/server/public/assets/sequenceDiagram-FGHM5R23-51FmBwFt.js.br +0 -0
  359. package/payload/server/public/assets/sequenceDiagram-FGHM5R23-51FmBwFt.js.gz +0 -0
  360. package/payload/server/public/assets/{skills-D-6EbgfP.js → skills-CX4p0a2M.js} +1 -1
  361. package/payload/server/public/assets/skills-CX4p0a2M.js.br +0 -0
  362. package/payload/server/public/assets/skills-CX4p0a2M.js.gz +0 -0
  363. package/payload/server/public/assets/{stateDiagram-FHFEXIEX-BC8a_P9c.js → stateDiagram-FHFEXIEX-CPgxX16e.js} +1 -1
  364. package/payload/server/public/assets/stateDiagram-FHFEXIEX-CPgxX16e.js.br +0 -0
  365. package/payload/server/public/assets/stateDiagram-FHFEXIEX-CPgxX16e.js.gz +0 -0
  366. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-DrQl9xC9.js +1 -0
  367. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-DrQl9xC9.js.br +0 -0
  368. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-DrQl9xC9.js.gz +0 -0
  369. package/payload/server/public/assets/{tasks-DnN5Fyds.js → tasks-B51N5DIO.js} +2 -2
  370. package/payload/server/public/assets/tasks-B51N5DIO.js.br +0 -0
  371. package/payload/server/public/assets/tasks-B51N5DIO.js.gz +0 -0
  372. package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-BMxUC3ri.js → timeline-definition-GMOUNBTQ-DC4gTR2m.js} +1 -1
  373. package/payload/server/public/assets/timeline-definition-GMOUNBTQ-DC4gTR2m.js.br +0 -0
  374. package/payload/server/public/assets/timeline-definition-GMOUNBTQ-DC4gTR2m.js.gz +0 -0
  375. package/payload/server/public/assets/treeView-SZITEDCU-BDzhKA6v.js +1 -0
  376. package/payload/server/public/assets/treeView-SZITEDCU-BDzhKA6v.js.br +0 -0
  377. package/payload/server/public/assets/treemap-W4RFUUIX-epHpdeWa.js +1 -0
  378. package/payload/server/public/assets/treemap-W4RFUUIX-epHpdeWa.js.br +0 -0
  379. package/payload/server/public/assets/{triangle-alert-eh9UOKDT.js → triangle-alert-CkE_tzl3.js} +1 -1
  380. package/payload/server/public/assets/triangle-alert-CkE_tzl3.js.br +0 -0
  381. package/payload/server/public/assets/triangle-alert-CkE_tzl3.js.gz +0 -0
  382. package/payload/server/public/assets/{useCopyFeedback-Bz9OJHBb.js → useCopyFeedback-3B_lN6ri.js} +1 -1
  383. package/payload/server/public/assets/useCopyFeedback-3B_lN6ri.js.br +0 -0
  384. package/payload/server/public/assets/useCopyFeedback-3B_lN6ri.js.gz +0 -0
  385. package/payload/server/public/assets/{useMediaQuery-CNxsjKZp.css → useMediaQuery-AAUlD_Av.css} +1 -1
  386. package/payload/server/public/assets/useMediaQuery-AAUlD_Av.css.br +0 -0
  387. package/payload/server/public/assets/useMediaQuery-AAUlD_Av.css.gz +0 -0
  388. package/payload/server/public/assets/{useVoiceRecorder-BaDpMYxX.js → useVoiceRecorder-DtP2IN-j.js} +2 -2
  389. package/payload/server/public/assets/useVoiceRecorder-DtP2IN-j.js.br +0 -0
  390. package/payload/server/public/assets/useVoiceRecorder-DtP2IN-j.js.gz +0 -0
  391. package/payload/server/public/assets/{vennDiagram-DHZGUBPP-BsRGBF0K.js → vennDiagram-DHZGUBPP-CADQLMv_.js} +1 -1
  392. package/payload/server/public/assets/vennDiagram-DHZGUBPP-CADQLMv_.js.br +0 -0
  393. package/payload/server/public/assets/{vennDiagram-DHZGUBPP-BsRGBF0K.js.gz → vennDiagram-DHZGUBPP-CADQLMv_.js.gz} +0 -0
  394. package/payload/server/public/assets/wardley-RL74JXVD-DNSZCrxV.js +1 -0
  395. package/payload/server/public/assets/wardley-RL74JXVD-DNSZCrxV.js.br +0 -0
  396. package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-oQh9A-Mq.js → wardleyDiagram-NUSXRM2D-Cs5AyyGo.js} +1 -1
  397. package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-Cs5AyyGo.js.br +0 -0
  398. package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-Cs5AyyGo.js.gz +0 -0
  399. package/payload/server/public/assets/{wrench-BO-l46rF.js → wrench-B_4KM-f7.js} +1 -1
  400. package/payload/server/public/assets/wrench-B_4KM-f7.js.br +0 -0
  401. package/payload/server/public/assets/wrench-B_4KM-f7.js.gz +0 -0
  402. package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-0K87OmFI.js → xychartDiagram-5P7HB3ND-Bp_VDbBp.js} +1 -1
  403. package/payload/server/public/assets/xychartDiagram-5P7HB3ND-Bp_VDbBp.js.br +0 -0
  404. package/payload/server/public/assets/xychartDiagram-5P7HB3ND-Bp_VDbBp.js.gz +0 -0
  405. package/payload/server/public/browser.html +4 -4
  406. package/payload/server/public/calendar.html +7 -8
  407. package/payload/server/public/chat.html +14 -14
  408. package/payload/server/public/data.html +13 -13
  409. package/payload/server/public/graph.html +9 -9
  410. package/payload/server/public/index.html +15 -16
  411. package/payload/server/public/operator.html +15 -15
  412. package/payload/server/public/public.html +14 -14
  413. package/payload/server/public/routines.html +7 -7
  414. package/payload/server/public/skills.html +5 -5
  415. package/payload/server/public/tasks.html +6 -6
  416. package/payload/server/server.js +73 -16
  417. package/payload/server/public/assets/AdminLoginScreens-Bjcs9ta9.js.br +0 -0
  418. package/payload/server/public/assets/AdminLoginScreens-Bjcs9ta9.js.gz +0 -0
  419. package/payload/server/public/assets/AdminShell-DVBAMUCy.js +0 -2
  420. package/payload/server/public/assets/AdminShell-DVBAMUCy.js.br +0 -0
  421. package/payload/server/public/assets/AdminShell-DVBAMUCy.js.gz +0 -0
  422. package/payload/server/public/assets/activity-C8E8-EwQ.js.br +0 -0
  423. package/payload/server/public/assets/activity-C8E8-EwQ.js.gz +0 -0
  424. package/payload/server/public/assets/admin-CeWAlpRS.js +0 -1
  425. package/payload/server/public/assets/admin-CeWAlpRS.js.br +0 -0
  426. package/payload/server/public/assets/admin-CeWAlpRS.js.gz +0 -0
  427. package/payload/server/public/assets/agents-DuN92iFb.js.br +0 -0
  428. package/payload/server/public/assets/agents-DuN92iFb.js.gz +0 -0
  429. package/payload/server/public/assets/arc-DaudCnXg.js.br +0 -0
  430. package/payload/server/public/assets/arc-DaudCnXg.js.gz +0 -0
  431. package/payload/server/public/assets/architecture-YZFGNWBL-DPFsm5jD.js +0 -1
  432. package/payload/server/public/assets/architecture-YZFGNWBL-DPFsm5jD.js.br +0 -0
  433. package/payload/server/public/assets/architectureDiagram-Q4EWVU46-Dj9L_JR0.js.br +0 -0
  434. package/payload/server/public/assets/architectureDiagram-Q4EWVU46-Dj9L_JR0.js.gz +0 -0
  435. package/payload/server/public/assets/blockDiagram-DXYQGD6D-BTXKYwrR.js.br +0 -0
  436. package/payload/server/public/assets/blockDiagram-DXYQGD6D-BTXKYwrR.js.gz +0 -0
  437. package/payload/server/public/assets/browser-BxebdKbh.js.br +0 -0
  438. package/payload/server/public/assets/browser-BxebdKbh.js.gz +0 -0
  439. package/payload/server/public/assets/c4Diagram-AHTNJAMY-BN7XeOWV.js.br +0 -0
  440. package/payload/server/public/assets/c4Diagram-AHTNJAMY-BN7XeOWV.js.gz +0 -0
  441. package/payload/server/public/assets/calendar-BtFZQ5Np.js +0 -1
  442. package/payload/server/public/assets/calendar-BtFZQ5Np.js.br +0 -0
  443. package/payload/server/public/assets/calendar-BtFZQ5Np.js.gz +0 -0
  444. package/payload/server/public/assets/channel-D08XWP9e.js +0 -1
  445. package/payload/server/public/assets/chat-CGIwynaH.js +0 -1
  446. package/payload/server/public/assets/chat-CGIwynaH.js.br +0 -3
  447. package/payload/server/public/assets/chat-CGIwynaH.js.gz +0 -0
  448. package/payload/server/public/assets/chevron-left-DaNP1zDb.js +0 -1
  449. package/payload/server/public/assets/chevron-left-DaNP1zDb.js.br +0 -0
  450. package/payload/server/public/assets/chevron-right-BbbuTUnt.js +0 -1
  451. package/payload/server/public/assets/chevron-right-BbbuTUnt.js.br +0 -0
  452. package/payload/server/public/assets/chunk-2KRD3SAO-BwEVlnxo.js.br +0 -0
  453. package/payload/server/public/assets/chunk-2KRD3SAO-BwEVlnxo.js.gz +0 -0
  454. package/payload/server/public/assets/chunk-336JU56O-DR5EUh9D.js.br +0 -0
  455. package/payload/server/public/assets/chunk-336JU56O-DR5EUh9D.js.gz +0 -0
  456. package/payload/server/public/assets/chunk-426QAEUC-YPE0DZOq.js +0 -1
  457. package/payload/server/public/assets/chunk-426QAEUC-YPE0DZOq.js.br +0 -0
  458. package/payload/server/public/assets/chunk-426QAEUC-YPE0DZOq.js.gz +0 -0
  459. package/payload/server/public/assets/chunk-4BX2VUAB-C5p3xTC6.js.br +0 -0
  460. package/payload/server/public/assets/chunk-4BX2VUAB-C5p3xTC6.js.gz +0 -0
  461. package/payload/server/public/assets/chunk-4TB4RGXK-CqrBvvGI.js.br +0 -0
  462. package/payload/server/public/assets/chunk-4TB4RGXK-CqrBvvGI.js.gz +0 -0
  463. package/payload/server/public/assets/chunk-55IACEB6-DDU_m1ra.js.br +0 -0
  464. package/payload/server/public/assets/chunk-55IACEB6-DDU_m1ra.js.gz +0 -0
  465. package/payload/server/public/assets/chunk-5FUZZQ4R-B21kX6ld.js.br +0 -0
  466. package/payload/server/public/assets/chunk-5FUZZQ4R-B21kX6ld.js.gz +0 -0
  467. package/payload/server/public/assets/chunk-5PVQY5BW-CYusrVbq.js.br +0 -0
  468. package/payload/server/public/assets/chunk-5PVQY5BW-CYusrVbq.js.gz +0 -0
  469. package/payload/server/public/assets/chunk-67CJDMHE-9W0Qv0jm.js.br +0 -0
  470. package/payload/server/public/assets/chunk-67CJDMHE-9W0Qv0jm.js.gz +0 -0
  471. package/payload/server/public/assets/chunk-7N4EOEYR-B3gqydR3.js.br +0 -0
  472. package/payload/server/public/assets/chunk-7N4EOEYR-B3gqydR3.js.gz +0 -0
  473. package/payload/server/public/assets/chunk-AA7GKIK3-DW8a-2NK.js.br +0 -4
  474. package/payload/server/public/assets/chunk-AA7GKIK3-DW8a-2NK.js.gz +0 -0
  475. package/payload/server/public/assets/chunk-BSJP7CBP-DqXIO_5R.js.br +0 -0
  476. package/payload/server/public/assets/chunk-BSJP7CBP-DqXIO_5R.js.gz +0 -0
  477. package/payload/server/public/assets/chunk-CIAEETIT-BMJfgj2u.js.br +0 -0
  478. package/payload/server/public/assets/chunk-CIAEETIT-BMJfgj2u.js.gz +0 -0
  479. package/payload/server/public/assets/chunk-EDXVE4YY-CyjTyMkv.js.br +0 -0
  480. package/payload/server/public/assets/chunk-EDXVE4YY-CyjTyMkv.js.gz +0 -0
  481. package/payload/server/public/assets/chunk-ENJZ2VHE-B-k8uOTF.js.br +0 -0
  482. package/payload/server/public/assets/chunk-ENJZ2VHE-B-k8uOTF.js.gz +0 -0
  483. package/payload/server/public/assets/chunk-FMBD7UC4-CdPjwbtf.js.br +0 -0
  484. package/payload/server/public/assets/chunk-FMBD7UC4-CdPjwbtf.js.gz +0 -0
  485. package/payload/server/public/assets/chunk-FOC6F5B3-Dl6l1KAh.js.br +0 -0
  486. package/payload/server/public/assets/chunk-FOC6F5B3-Dl6l1KAh.js.gz +0 -0
  487. package/payload/server/public/assets/chunk-ICPOFSXX-CKQWnR1l.js.br +0 -0
  488. package/payload/server/public/assets/chunk-ICPOFSXX-CKQWnR1l.js.gz +0 -0
  489. package/payload/server/public/assets/chunk-K5T4RW27--g29_wjW.js.br +0 -0
  490. package/payload/server/public/assets/chunk-K5T4RW27--g29_wjW.js.gz +0 -0
  491. package/payload/server/public/assets/chunk-KGLVRYIC-CI77ENeO.js.br +0 -3
  492. package/payload/server/public/assets/chunk-KGLVRYIC-CI77ENeO.js.gz +0 -0
  493. package/payload/server/public/assets/chunk-LIHQZDEY-CE-XByg6.js.br +0 -0
  494. package/payload/server/public/assets/chunk-LIHQZDEY-CE-XByg6.js.gz +0 -0
  495. package/payload/server/public/assets/chunk-ORNJ4GCN-DkjJQQSm.js.br +0 -0
  496. package/payload/server/public/assets/chunk-ORNJ4GCN-DkjJQQSm.js.gz +0 -0
  497. package/payload/server/public/assets/chunk-OYMX7WX6-Dis40FU5.js.br +0 -0
  498. package/payload/server/public/assets/chunk-OYMX7WX6-Dis40FU5.js.gz +0 -0
  499. package/payload/server/public/assets/chunk-QZHKN3VN-DnqqL1de.js +0 -1
  500. package/payload/server/public/assets/chunk-QZHKN3VN-DnqqL1de.js.br +0 -0
  501. package/payload/server/public/assets/chunk-QZHKN3VN-DnqqL1de.js.gz +0 -0
  502. package/payload/server/public/assets/chunk-U2HBQHQK-DT3NLMic.js.br +0 -0
  503. package/payload/server/public/assets/chunk-U2HBQHQK-DT3NLMic.js.gz +0 -0
  504. package/payload/server/public/assets/chunk-X2U36JSP-Dxaab1tD.js.br +0 -0
  505. package/payload/server/public/assets/chunk-X2U36JSP-Dxaab1tD.js.gz +0 -0
  506. package/payload/server/public/assets/chunk-XPW4576I-DtqJwn2x.js.br +0 -0
  507. package/payload/server/public/assets/chunk-XPW4576I-DtqJwn2x.js.gz +0 -0
  508. package/payload/server/public/assets/chunk-YZCP3GAM-CEEcRrOH.js.br +0 -0
  509. package/payload/server/public/assets/chunk-YZCP3GAM-CEEcRrOH.js.gz +0 -0
  510. package/payload/server/public/assets/chunk-ZZ45TVLE-CVhqjM4L.js.br +0 -0
  511. package/payload/server/public/assets/chunk-ZZ45TVLE-CVhqjM4L.js.gz +0 -0
  512. package/payload/server/public/assets/classDiagram-6PBFFD2Q-BPY9jtfT.js +0 -1
  513. package/payload/server/public/assets/classDiagram-6PBFFD2Q-BPY9jtfT.js.br +0 -0
  514. package/payload/server/public/assets/classDiagram-6PBFFD2Q-BPY9jtfT.js.gz +0 -0
  515. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-CLgDbwDp.js +0 -1
  516. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-CLgDbwDp.js.br +0 -0
  517. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-CLgDbwDp.js.gz +0 -0
  518. package/payload/server/public/assets/clock-CfDdatjp.js +0 -1
  519. package/payload/server/public/assets/clock-CfDdatjp.js.br +0 -0
  520. package/payload/server/public/assets/clock-CfDdatjp.js.gz +0 -0
  521. package/payload/server/public/assets/clone-B6yMH1PX.js +0 -1
  522. package/payload/server/public/assets/clone-B6yMH1PX.js.br +0 -0
  523. package/payload/server/public/assets/copy-DCDHXq3O.js.br +0 -0
  524. package/payload/server/public/assets/copy-DCDHXq3O.js.gz +0 -0
  525. package/payload/server/public/assets/cose-bilkent-S5V4N54A-kEHVkDNn.js.br +0 -0
  526. package/payload/server/public/assets/cose-bilkent-S5V4N54A-kEHVkDNn.js.gz +0 -0
  527. package/payload/server/public/assets/dagre-BgQxtxH1.js.br +0 -0
  528. package/payload/server/public/assets/dagre-BgQxtxH1.js.gz +0 -0
  529. package/payload/server/public/assets/dagre-KV5264BT-CgxwoTcv.js.br +0 -0
  530. package/payload/server/public/assets/dagre-KV5264BT-CgxwoTcv.js.gz +0 -0
  531. package/payload/server/public/assets/data-BchSWOju.js +0 -1
  532. package/payload/server/public/assets/data-BchSWOju.js.br +0 -1
  533. package/payload/server/public/assets/data-BchSWOju.js.gz +0 -0
  534. package/payload/server/public/assets/diagram-5BDNPKRD-MEZ1cQGO.js.br +0 -0
  535. package/payload/server/public/assets/diagram-5BDNPKRD-MEZ1cQGO.js.gz +0 -0
  536. package/payload/server/public/assets/diagram-G4DWMVQ6-DbZg9hWP.js.br +0 -0
  537. package/payload/server/public/assets/diagram-G4DWMVQ6-DbZg9hWP.js.gz +0 -0
  538. package/payload/server/public/assets/diagram-MMDJMWI5-Bb1y8DFy.js.br +0 -0
  539. package/payload/server/public/assets/diagram-MMDJMWI5-Bb1y8DFy.js.gz +0 -0
  540. package/payload/server/public/assets/diagram-TYMM5635-tbStCw5U.js.br +0 -0
  541. package/payload/server/public/assets/diagram-TYMM5635-tbStCw5U.js.gz +0 -0
  542. package/payload/server/public/assets/erDiagram-SMLLAGMA-ClEFo_Bw.js.br +0 -0
  543. package/payload/server/public/assets/erDiagram-SMLLAGMA-ClEFo_Bw.js.gz +0 -0
  544. package/payload/server/public/assets/file-text-zQgEQWCF.js.br +0 -0
  545. package/payload/server/public/assets/file-text-zQgEQWCF.js.gz +0 -0
  546. package/payload/server/public/assets/flatten-Bu-b1uTY.js.br +0 -0
  547. package/payload/server/public/assets/flatten-Bu-b1uTY.js.gz +0 -0
  548. package/payload/server/public/assets/flowDiagram-DWJPFMVM-9yr262Ji.js.br +0 -0
  549. package/payload/server/public/assets/flowDiagram-DWJPFMVM-9yr262Ji.js.gz +0 -0
  550. package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-ZCSA0DtG.js.br +0 -0
  551. package/payload/server/public/assets/gitGraph-7Q5UKJZL-B0OUwOUx.js +0 -1
  552. package/payload/server/public/assets/gitGraph-7Q5UKJZL-B0OUwOUx.js.br +0 -0
  553. package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-0KvpzpaU.js.br +0 -0
  554. package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-0KvpzpaU.js.gz +0 -0
  555. package/payload/server/public/assets/graph-CFCEh_YI.js.br +0 -0
  556. package/payload/server/public/assets/graph-CFCEh_YI.js.gz +0 -0
  557. package/payload/server/public/assets/graph-labels-CA1UcDuS.js.br +0 -0
  558. package/payload/server/public/assets/graph-labels-CA1UcDuS.js.gz +0 -0
  559. package/payload/server/public/assets/graphlib-B3SsCJOd.js.br +0 -0
  560. package/payload/server/public/assets/graphlib-B3SsCJOd.js.gz +0 -0
  561. package/payload/server/public/assets/info-OMHHGYJF-C_8TwPDe.js +0 -1
  562. package/payload/server/public/assets/info-OMHHGYJF-C_8TwPDe.js.br +0 -0
  563. package/payload/server/public/assets/infoDiagram-42DDH7IO-B607bZBJ.js +0 -2
  564. package/payload/server/public/assets/infoDiagram-42DDH7IO-B607bZBJ.js.br +0 -0
  565. package/payload/server/public/assets/infoDiagram-42DDH7IO-B607bZBJ.js.gz +0 -0
  566. package/payload/server/public/assets/isEmpty-CjH0UASp.js.br +0 -0
  567. package/payload/server/public/assets/isEmpty-CjH0UASp.js.gz +0 -0
  568. package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-DsDoNemz.js.br +0 -0
  569. package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-DsDoNemz.js.gz +0 -0
  570. package/payload/server/public/assets/journeyDiagram-VCZTEJTY-xyayGhw3.js.br +0 -0
  571. package/payload/server/public/assets/journeyDiagram-VCZTEJTY-xyayGhw3.js.gz +0 -0
  572. package/payload/server/public/assets/kanban-definition-6JOO6SKY-DuV3Go_1.js.br +0 -0
  573. package/payload/server/public/assets/kanban-definition-6JOO6SKY-DuV3Go_1.js.gz +0 -0
  574. package/payload/server/public/assets/line-Cpb8GRkf.js.br +0 -0
  575. package/payload/server/public/assets/line-Cpb8GRkf.js.gz +0 -0
  576. package/payload/server/public/assets/linear-l39GooQ5.js.br +0 -0
  577. package/payload/server/public/assets/linear-l39GooQ5.js.gz +0 -0
  578. package/payload/server/public/assets/mermaid-parser.core-9hkxt3j1.js.br +0 -0
  579. package/payload/server/public/assets/mermaid-parser.core-9hkxt3j1.js.gz +0 -0
  580. package/payload/server/public/assets/mermaid.core-iR6TQesD.js.br +0 -0
  581. package/payload/server/public/assets/mermaid.core-iR6TQesD.js.gz +0 -0
  582. package/payload/server/public/assets/mindmap-definition-QFDTVHPH-LCKhTYzs.js.br +0 -0
  583. package/payload/server/public/assets/mindmap-definition-QFDTVHPH-LCKhTYzs.js.gz +0 -0
  584. package/payload/server/public/assets/operator-hFXPDc2X.js.br +0 -0
  585. package/payload/server/public/assets/operator-hFXPDc2X.js.gz +0 -0
  586. package/payload/server/public/assets/ordinal-D6D6WcTC.js.br +0 -0
  587. package/payload/server/public/assets/ordinal-D6D6WcTC.js.gz +0 -0
  588. package/payload/server/public/assets/packet-4T2RLAQJ-CCQdbIqO.js +0 -1
  589. package/payload/server/public/assets/packet-4T2RLAQJ-CCQdbIqO.js.br +0 -0
  590. package/payload/server/public/assets/page-C8jyPH_3.js.br +0 -0
  591. package/payload/server/public/assets/page-C8jyPH_3.js.gz +0 -0
  592. package/payload/server/public/assets/page-ne7I_r9L.js.br +0 -0
  593. package/payload/server/public/assets/page-ne7I_r9L.js.gz +0 -0
  594. package/payload/server/public/assets/pdf-render-DanMu_cf.js.br +0 -0
  595. package/payload/server/public/assets/pie-ZZUOXDRM-Bdw3Iqs7.js +0 -1
  596. package/payload/server/public/assets/pie-ZZUOXDRM-Bdw3Iqs7.js.br +0 -0
  597. package/payload/server/public/assets/pieDiagram-DEJITSTG-Oo7wgo0C.js.br +0 -0
  598. package/payload/server/public/assets/pieDiagram-DEJITSTG-Oo7wgo0C.js.gz +0 -0
  599. package/payload/server/public/assets/play-Ep0SZTbr.js +0 -1
  600. package/payload/server/public/assets/play-Ep0SZTbr.js.br +0 -0
  601. package/payload/server/public/assets/play-Ep0SZTbr.js.gz +0 -0
  602. package/payload/server/public/assets/public-BgnqjAal.js.br +0 -0
  603. package/payload/server/public/assets/public-BgnqjAal.js.gz +0 -0
  604. package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-B2hs2ord.js.br +0 -0
  605. package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-B2hs2ord.js.gz +0 -0
  606. package/payload/server/public/assets/radar-PYXPWWZC-D3FUdA3r.js +0 -1
  607. package/payload/server/public/assets/radar-PYXPWWZC-D3FUdA3r.js.br +0 -0
  608. package/payload/server/public/assets/reduce-BtXXK8Ma.js.br +0 -0
  609. package/payload/server/public/assets/reduce-BtXXK8Ma.js.gz +0 -0
  610. package/payload/server/public/assets/requirementDiagram-MS252O5E-B8UkCUzW.js.br +0 -0
  611. package/payload/server/public/assets/requirementDiagram-MS252O5E-B8UkCUzW.js.gz +0 -0
  612. package/payload/server/public/assets/rotate-ccw-DfJWjXAg.js.br +0 -0
  613. package/payload/server/public/assets/rotate-ccw-DfJWjXAg.js.gz +0 -0
  614. package/payload/server/public/assets/routines-OGFXwTFO.js +0 -2
  615. package/payload/server/public/assets/routines-OGFXwTFO.js.br +0 -0
  616. package/payload/server/public/assets/routines-OGFXwTFO.js.gz +0 -0
  617. package/payload/server/public/assets/sankeyDiagram-XADWPNL6-Cojqqz7t.js.br +0 -0
  618. package/payload/server/public/assets/sankeyDiagram-XADWPNL6-Cojqqz7t.js.gz +0 -0
  619. package/payload/server/public/assets/sequenceDiagram-FGHM5R23-C7ODsPjE.js.br +0 -0
  620. package/payload/server/public/assets/sequenceDiagram-FGHM5R23-C7ODsPjE.js.gz +0 -0
  621. package/payload/server/public/assets/skills-D-6EbgfP.js.br +0 -0
  622. package/payload/server/public/assets/skills-D-6EbgfP.js.gz +0 -0
  623. package/payload/server/public/assets/stateDiagram-FHFEXIEX-BC8a_P9c.js.br +0 -0
  624. package/payload/server/public/assets/stateDiagram-FHFEXIEX-BC8a_P9c.js.gz +0 -0
  625. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-C7KvMtT5.js +0 -1
  626. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-C7KvMtT5.js.br +0 -0
  627. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-C7KvMtT5.js.gz +0 -0
  628. package/payload/server/public/assets/tasks-DnN5Fyds.js.br +0 -0
  629. package/payload/server/public/assets/tasks-DnN5Fyds.js.gz +0 -0
  630. package/payload/server/public/assets/timeline-definition-GMOUNBTQ-BMxUC3ri.js.br +0 -0
  631. package/payload/server/public/assets/timeline-definition-GMOUNBTQ-BMxUC3ri.js.gz +0 -0
  632. package/payload/server/public/assets/treeView-SZITEDCU-DetKw0D0.js +0 -1
  633. package/payload/server/public/assets/treeView-SZITEDCU-DetKw0D0.js.br +0 -0
  634. package/payload/server/public/assets/treemap-W4RFUUIX-zQkIANxW.js +0 -1
  635. package/payload/server/public/assets/treemap-W4RFUUIX-zQkIANxW.js.br +0 -0
  636. package/payload/server/public/assets/triangle-alert-eh9UOKDT.js.br +0 -0
  637. package/payload/server/public/assets/triangle-alert-eh9UOKDT.js.gz +0 -0
  638. package/payload/server/public/assets/useCopyFeedback-Bz9OJHBb.js.br +0 -0
  639. package/payload/server/public/assets/useCopyFeedback-Bz9OJHBb.js.gz +0 -0
  640. package/payload/server/public/assets/useMediaQuery-CNxsjKZp.css.br +0 -0
  641. package/payload/server/public/assets/useMediaQuery-CNxsjKZp.css.gz +0 -0
  642. package/payload/server/public/assets/useVoiceRecorder-BaDpMYxX.js.br +0 -0
  643. package/payload/server/public/assets/useVoiceRecorder-BaDpMYxX.js.gz +0 -0
  644. package/payload/server/public/assets/vennDiagram-DHZGUBPP-BsRGBF0K.js.br +0 -0
  645. package/payload/server/public/assets/wardley-RL74JXVD-DkQV3DvB.js +0 -1
  646. package/payload/server/public/assets/wardley-RL74JXVD-DkQV3DvB.js.br +0 -0
  647. package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-oQh9A-Mq.js.br +0 -0
  648. package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-oQh9A-Mq.js.gz +0 -0
  649. package/payload/server/public/assets/wrench-BO-l46rF.js.br +0 -0
  650. package/payload/server/public/assets/wrench-BO-l46rF.js.gz +0 -0
  651. package/payload/server/public/assets/xychartDiagram-5P7HB3ND-0K87OmFI.js.br +0 -0
  652. package/payload/server/public/assets/xychartDiagram-5P7HB3ND-0K87OmFI.js.gz +0 -0
  653. /package/payload/server/public/assets/{_baseFor-B12He5Rp.js → _baseFor-Be3EKK3K.js} +0 -0
  654. /package/payload/server/public/assets/{_baseFor-B12He5Rp.js.br → _baseFor-Be3EKK3K.js.br} +0 -0
  655. /package/payload/server/public/assets/{_baseFor-B12He5Rp.js.gz → _baseFor-Be3EKK3K.js.gz} +0 -0
  656. /package/payload/server/public/assets/{array-DO1uCttT.js → array-X0JlPOfd.js} +0 -0
  657. /package/payload/server/public/assets/{array-DO1uCttT.js.br → array-X0JlPOfd.js.br} +0 -0
  658. /package/payload/server/public/assets/{cytoscape.esm-DFn2foqy.js → cytoscape.esm-CI2IWMLB.js} +0 -0
  659. /package/payload/server/public/assets/{cytoscape.esm-DFn2foqy.js.br → cytoscape.esm-CI2IWMLB.js.br} +0 -0
  660. /package/payload/server/public/assets/{cytoscape.esm-DFn2foqy.js.gz → cytoscape.esm-CI2IWMLB.js.gz} +0 -0
  661. /package/payload/server/public/assets/{defaultLocale-ieI3yFoA.js → defaultLocale-B6RGN4id.js} +0 -0
  662. /package/payload/server/public/assets/{defaultLocale-ieI3yFoA.js.br → defaultLocale-B6RGN4id.js.br} +0 -0
  663. /package/payload/server/public/assets/{defaultLocale-ieI3yFoA.js.gz → defaultLocale-B6RGN4id.js.gz} +0 -0
  664. /package/payload/server/public/assets/{dist-DlU7AEeD.js → dist-QvbmK1IP.js} +0 -0
  665. /package/payload/server/public/assets/{dist-DlU7AEeD.js.br → dist-QvbmK1IP.js.br} +0 -0
  666. /package/payload/server/public/assets/{dist-DlU7AEeD.js.gz → dist-QvbmK1IP.js.gz} +0 -0
  667. /package/payload/server/public/assets/{file-download-DbNIjWiK.js → file-download-DiQesOd2.js} +0 -0
  668. /package/payload/server/public/assets/{file-download-DbNIjWiK.js.br → file-download-DiQesOd2.js.br} +0 -0
  669. /package/payload/server/public/assets/{file-download-DbNIjWiK.js.gz → file-download-DiQesOd2.js.gz} +0 -0
  670. /package/payload/server/public/assets/{init-BCRlEgNP.js → init-BmUWJJHz.js} +0 -0
  671. /package/payload/server/public/assets/{init-BCRlEgNP.js.br → init-BmUWJJHz.js.br} +0 -0
  672. /package/payload/server/public/assets/{init-BCRlEgNP.js.gz → init-BmUWJJHz.js.gz} +0 -0
  673. /package/payload/server/public/assets/{katex-gkTaZgi6.js → katex-BjZuzSQn.js} +0 -0
  674. /package/payload/server/public/assets/{katex-gkTaZgi6.js.br → katex-BjZuzSQn.js.br} +0 -0
  675. /package/payload/server/public/assets/{katex-gkTaZgi6.js.gz → katex-BjZuzSQn.js.gz} +0 -0
  676. /package/payload/server/public/assets/{path-DTmzQFjQ.js → path-CoPyR7c2.js} +0 -0
  677. /package/payload/server/public/assets/{path-DTmzQFjQ.js.br → path-CoPyR7c2.js.br} +0 -0
  678. /package/payload/server/public/assets/{path-DTmzQFjQ.js.gz → path-CoPyR7c2.js.gz} +0 -0
  679. /package/payload/server/public/assets/{preload-helper-BQrMkyGX.js → preload-helper-BJ2zoBc3.js} +0 -0
  680. /package/payload/server/public/assets/{preload-helper-BQrMkyGX.js.br → preload-helper-BJ2zoBc3.js.br} +0 -0
  681. /package/payload/server/public/assets/{preload-helper-BQrMkyGX.js.gz → preload-helper-BJ2zoBc3.js.gz} +0 -0
  682. /package/payload/server/public/assets/{rough.esm-BFJ-MgcB.js → rough.esm-jSt7UMyi.js} +0 -0
  683. /package/payload/server/public/assets/{rough.esm-BFJ-MgcB.js.br → rough.esm-jSt7UMyi.js.br} +0 -0
  684. /package/payload/server/public/assets/{rough.esm-BFJ-MgcB.js.gz → rough.esm-jSt7UMyi.js.gz} +0 -0
  685. /package/payload/server/public/assets/{src-9CNk4JU0.js → src-C2WwTWSY.js} +0 -0
  686. /package/payload/server/public/assets/{src-9CNk4JU0.js.br → src-C2WwTWSY.js.br} +0 -0
  687. /package/payload/server/public/assets/{src-9CNk4JU0.js.gz → src-C2WwTWSY.js.gz} +0 -0
  688. /package/payload/server/public/assets/{useMediaQuery-_mMln3Fu.js → useMediaQuery-CLxecNeT.js} +0 -0
  689. /package/payload/server/public/assets/{useMediaQuery-_mMln3Fu.js.br → useMediaQuery-CLxecNeT.js.br} +0 -0
  690. /package/payload/server/public/assets/{useMediaQuery-_mMln3Fu.js.gz → useMediaQuery-CLxecNeT.js.gz} +0 -0
@@ -166,7 +166,20 @@ export async function resolveOwnerTimezone(
166
166
  * destroy the operator's own caption on the next version bump; and the
167
167
  * scheduling plugin's one-shot `converge-routine-description` has already given
168
168
  * every pre-existing row a description, so no row is left holding only a
169
- * title. */
169
+ * title.
170
+ *
171
+ * The gate (Task 2379) is written by a `SET` after the MERGE rather than inside
172
+ * either branch, because both branches need `e.eventId` and only one of them
173
+ * has just minted it. `writing` is the same condition the prompt follows, so a
174
+ * gate is written on create, refreshed on a version bump of an unedited row,
175
+ * and never touched on an operator-edited one.
176
+ *
177
+ * Two details are load-bearing. The null branch is symmetric on purpose: a
178
+ * template reclassified gateless must have its three properties cleared, or the
179
+ * row keeps a gate its template no longer declares and nothing reports it. And
180
+ * the commit token is substituted from the same `row.gateChecks` the gate is
181
+ * built from, so the precondition and the turn's own commit call cannot
182
+ * disagree about what this routine checks. */
170
183
  export const MERGE_CYPHER = `
171
184
  UNWIND $rows AS row
172
185
  OPTIONAL MATCH (pre:Event {accountId: $accountId, routineTemplate: row.key})
@@ -202,6 +215,13 @@ MERGE (e:Event {accountId: $accountId, routineTemplate: row.key})
202
215
  e.description = CASE WHEN refreshing THEN row.description ELSE e.description END,
203
216
  e.routineTemplateVersion = CASE WHEN refreshing THEN $version ELSE e.routineTemplateVersion END,
204
217
  e.updatedAt = CASE WHEN refreshing THEN $now ELSE e.updatedAt END
218
+ WITH row, e, existed, priorVersion, edited, (NOT existed OR refreshing) AS writing
219
+ SET e.gatePlugin = CASE WHEN writing THEN (CASE WHEN row.gateChecks IS NULL THEN null ELSE 'scheduling' END) ELSE e.gatePlugin END,
220
+ e.gateTool = CASE WHEN writing THEN (CASE WHEN row.gateChecks IS NULL THEN null ELSE 'scheduling-gate' END) ELSE e.gateTool END,
221
+ e.gateArgs = CASE WHEN writing THEN (CASE WHEN row.gateChecks IS NULL THEN null ELSE '{"eventId":"' + e.eventId + '","checks":' + row.gateChecks + '}' END) ELSE e.gateArgs END,
222
+ e.agentPrompt = CASE WHEN writing AND row.gateChecks IS NOT NULL
223
+ THEN replace(e.agentPrompt, '<<gateCommit>>', '{"eventId":"' + e.eventId + '","checks":' + row.gateChecks + ',"commit":true}')
224
+ ELSE e.agentPrompt END
205
225
  RETURN row.key AS key,
206
226
  e.eventId AS eventId,
207
227
  CASE WHEN NOT existed THEN 'create'
@@ -277,6 +297,10 @@ export async function seedRoutineRoster(args: SeedRoutineRosterArgs): Promise<Ro
277
297
  description: r.description,
278
298
  prompt: r.prompt,
279
299
  recurrence: r.recurrence,
300
+ // Task 2379 — the only place the checks are serialised. Null for a
301
+ // gateless template, which the MERGE reads as "clear the three gate
302
+ // properties on the write path".
303
+ gateChecks: r.gate ? JSON.stringify(r.gate.checks) : null,
280
304
  })),
281
305
  });
282
306
 
@@ -35,7 +35,76 @@
35
35
  * routine's prompt only when the stored `routineTemplateVersion` is BELOW this
36
36
  * and no operator has edited the row, so an unbumped edit ships to new installs
37
37
  * and never reaches existing ones — bump it in the same commit as the edit. */
38
- export const ROUTINE_TEMPLATE_VERSION = 2;
38
+ export const ROUTINE_TEMPLATE_VERSION = 3;
39
+
40
+ /**
41
+ * Task 2379 — the check shapes a shipped template may name.
42
+ *
43
+ * Declared here rather than imported from the scheduling plugin:
44
+ * `routine-templates` is a `platform/lib` package and importing from
45
+ * `platform/plugins` would invert the dependency direction and break the lib
46
+ * build, which has no plugin on its path. The roster test reads the tool's own
47
+ * source and asserts every type used here is one the tool declares, which is the
48
+ * same drift control this file already applies to tool names.
49
+ */
50
+ export interface RoutineMailCheck {
51
+ readonly type: "mail";
52
+ readonly mailbox: string;
53
+ readonly folder?: string;
54
+ readonly subjectPrefixes?: readonly string[];
55
+ }
56
+ export interface RoutineD1Check {
57
+ readonly type: "d1";
58
+ readonly database: string;
59
+ readonly sql: string;
60
+ }
61
+ export interface RoutineWhatsappCheck {
62
+ readonly type: "whatsapp";
63
+ readonly scope: "inbound" | "status";
64
+ }
65
+ export interface RoutineCalendarCheck {
66
+ readonly type: "calendar";
67
+ readonly connector: string;
68
+ }
69
+ export type RoutineGateCheck =
70
+ | RoutineMailCheck
71
+ | RoutineD1Check
72
+ | RoutineWhatsappCheck
73
+ | RoutineCalendarCheck;
74
+
75
+ /** The plugin and the tool are constants for every roster gate, so a template
76
+ * carries neither. `hasWork` is true when ANY check is true. */
77
+ export interface RoutineGate {
78
+ readonly checks: readonly RoutineGateCheck[];
79
+ }
80
+
81
+ /** Substituted by the seed with the full `scheduling-gate` argument object,
82
+ * including the row's own event id.
83
+ *
84
+ * A template cannot write that id: it is minted by the MERGE. Nor can the turn
85
+ * supply it, because the only place a scheduled turn sees its own event is the
86
+ * provenance preamble, which carries the first eight characters. The watermark
87
+ * file is named from the whole id, so a turn committing against the prefix
88
+ * would write a file the next gate never reads and the routine would report
89
+ * work for ever. */
90
+ export const GATE_COMMIT_TOKEN = "<<gateCommit>>";
91
+
92
+ /** True when the check compares against a stored position rather than reading a
93
+ * current one.
94
+ *
95
+ * A watermarked check reads its stored value or zero, so with no watermark file
96
+ * it reports work on every fire until something commits: such a gate is inert
97
+ * until its routine's prompt carries the commit line. Mirrors `probe`'s `mark`
98
+ * field in the scheduling plugin's `tools/scheduling-gate.ts`, which is a
99
+ * function for exactly these three and null for the other two. */
100
+ export function isWatermarkedCheck(check: RoutineGateCheck): boolean {
101
+ if (check.type === "whatsapp") return check.scope === "inbound";
102
+ return check.type === "mail" || check.type === "calendar";
103
+ }
104
+
105
+ export function gateNeedsCommit(gate: RoutineGate): boolean {
106
+ return gate.checks.some(isWatermarkedCheck);
107
+ }
39
108
 
40
109
  export interface RoutineTemplate {
41
110
  /** Stable identity. Half of the MERGE key `(accountId, routineTemplate)`, so
@@ -54,6 +123,31 @@ export interface RoutineTemplate {
54
123
  readonly recurrence: string;
55
124
  /** The injected turn. Refreshed on a version bump when the row is unedited. */
56
125
  readonly prompt: string;
126
+ /** Task 2379 — the precondition, present when this routine's work is
127
+ * conditional AND the check vocabulary can express its source without
128
+ * per-account data. Seeded onto `gatePlugin`/`gateTool`/`gateArgs` under the
129
+ * same rule the prompt follows: written on create, refreshed only on a
130
+ * version bump of an unedited row. */
131
+ readonly gate?: RoutineGate;
132
+ /** Why this template ships with no gate. Exactly one of `gate` and `gateless`
133
+ * is present on every template, and the roster test fails one carrying
134
+ * neither, so a template added later cannot skip the decision. A field rather
135
+ * than a comment because a comment cannot be asserted. */
136
+ readonly gateless?: string;
137
+ }
138
+
139
+ /** A template is classified when it carries exactly one of `gate` and a
140
+ * non-empty `gateless`.
141
+ *
142
+ * The rule lives here, in one function, rather than inline in the assertion
143
+ * that walks the roster. A predicate the test only ever feeds passing input
144
+ * reports clean while checking nothing, so the roster test asserts this both
145
+ * ways: true for all thirteen, and false for a template carrying neither, both
146
+ * and an empty reason. */
147
+ export function isClassified(template: RoutineTemplate): boolean {
148
+ const gated = template.gate != null;
149
+ const declaredGateless = typeof template.gateless === "string" && template.gateless.trim() !== "";
150
+ return gated !== declaredGateless;
57
151
  }
58
152
 
59
153
  const START_OF_DAY = `Prepare the operator's morning briefing and reply with it as a single message.
@@ -128,7 +222,9 @@ An appointment on the provider calendar with no counterpart in the graph is invi
128
222
 
129
223
  If the account has a busy-time sync configured, run schedule-connector-busy-sync so availability reflects what was just reconciled.
130
224
 
131
- Reply only when something was actually changed, naming what and why. A clean reconcile ends the turn without replying, every time. This routine runs often, so a message on every clean run trains the operator to ignore it.`;
225
+ Reply only when something was actually changed, naming what and why. A clean reconcile ends the turn without replying, every time. This routine runs often, so a message on every clean run trains the operator to ignore it.
226
+
227
+ When the run has finished and nothing failed, call scheduling-gate with <<gateCommit>> so the next run does not re-examine what you have just reconciled. Do not call it after a run that failed or that you stopped early: the work would be marked as handled without anyone having seen it.`;
132
228
 
133
229
  const CONTACT_RECONCILE = `Reconcile the people the business actually deals with against the people it has recorded.
134
230
 
@@ -231,6 +327,7 @@ export const ROUTINE_ROSTER: readonly RoutineTemplate[] = [
231
327
  "Sends one morning message covering what needs a decision, what is time-bound and what changed overnight; stays silent when there is nothing worth saying.",
232
328
  recurrence: "30 7 * * 1-5",
233
329
  prompt: START_OF_DAY,
330
+ gateless: "A morning briefing is judgement every fire, so a gate would either always pass or suppress the briefing.",
234
331
  },
235
332
  {
236
333
  key: "inbound-check",
@@ -239,6 +336,7 @@ export const ROUTINE_ROSTER: readonly RoutineTemplate[] = [
239
336
  "Triages mail that arrived since the last check and writes replies for you to approve; it never sends anything itself.",
240
337
  recurrence: "*/30 9-17 * * 1-5",
241
338
  prompt: INBOUND_CHECK,
339
+ gateless: "Conditional on new mail, but the mail check matches an exact mailbox address and no shipped template can name one (Task 2389).",
242
340
  },
243
341
  {
244
342
  key: "end-of-day",
@@ -247,6 +345,7 @@ export const ROUTINE_ROSTER: readonly RoutineTemplate[] = [
247
345
  "Closes the day with your unsent drafts, overdue work and tomorrow's diary; says nothing when all three are empty.",
248
346
  recurrence: "0 18 * * 1-5",
249
347
  prompt: END_OF_DAY,
348
+ gateless: "A wrap-up is judgement every fire, so no cheap check stands in for reading the three surfaces it reports.",
250
349
  },
251
350
  {
252
351
  key: "appointment-reminder",
@@ -255,6 +354,7 @@ export const ROUTINE_ROSTER: readonly RoutineTemplate[] = [
255
354
  "Reminds each attendee once before a booked appointment, on a route they already use; it never opens a conversation with a stranger.",
256
355
  recurrence: "0 * * * *",
257
356
  prompt: APPOINTMENT_REMINDER,
357
+ gateless: "Conditional on an appointment falling in the window, but no check type reads appointments held in the graph (Task 2389).",
258
358
  },
259
359
  {
260
360
  key: "commitment-chase",
@@ -263,6 +363,7 @@ export const ROUTINE_ROSTER: readonly RoutineTemplate[] = [
263
363
  "Surfaces promises the business made and did not keep, and promises made to it that nobody kept; it reports them rather than chasing them.",
264
364
  recurrence: "0 10 * * 2",
265
365
  prompt: COMMITMENT_CHASE,
366
+ gateless: "Whether a promise has been dropped is the judgement itself, so no check can answer it more cheaply.",
266
367
  },
267
368
  {
268
369
  key: "calendar-reconcile",
@@ -271,6 +372,7 @@ export const ROUTINE_ROSTER: readonly RoutineTemplate[] = [
271
372
  "Reconciles the provider calendar against the appointments held in the graph, writing what is missing and marking what was cancelled; a clean run says nothing.",
272
373
  recurrence: "*/15 * * * *",
273
374
  prompt: CALENDAR_RECONCILE,
375
+ gate: { checks: [{ type: "calendar", connector: "account" }] },
274
376
  },
275
377
  {
276
378
  key: "contact-reconcile",
@@ -279,6 +381,7 @@ export const ROUTINE_ROSTER: readonly RoutineTemplate[] = [
279
381
  "Reconciles the people you correspond with against the people on record, creating and updating contacts; it never merges two records that might be two people.",
280
382
  recurrence: "45 6 * * 1-5",
281
383
  prompt: CONTACT_RECONCILE,
384
+ gateless: "Conditional on new correspondence, but no check type reads correspondence (Task 2389).",
282
385
  },
283
386
  {
284
387
  key: "crm-reconcile",
@@ -287,6 +390,7 @@ export const ROUTINE_ROSTER: readonly RoutineTemplate[] = [
287
390
  "Brings across what changed in whichever operational system this business runs; it reads only and never writes back to that system.",
288
391
  recurrence: "0 3 * * *",
289
392
  prompt: CRM_RECONCILE,
393
+ gateless: "Conditional on connector movement, but no check type reads a connector queue (Task 2389).",
290
394
  },
291
395
  {
292
396
  key: "finance-reconcile",
@@ -295,6 +399,7 @@ export const ROUTINE_ROSTER: readonly RoutineTemplate[] = [
295
399
  "Reconciles the accounting system against the internal ledger and reports what does not agree; it never adjusts an entry to make the two sides match.",
296
400
  recurrence: "0 4 * * 1",
297
401
  prompt: FINANCE_RECONCILE,
402
+ gateless: "Conditional on accounting movement, but no check type reads an accounting ledger (Task 2389).",
298
403
  },
299
404
  {
300
405
  key: "weekly-digest",
@@ -303,6 +408,7 @@ export const ROUTINE_ROSTER: readonly RoutineTemplate[] = [
303
408
  "Writes the week in three paragraphs at most: what changed, what is stuck, and what next week turns on.",
304
409
  recurrence: "0 16 * * 5",
305
410
  prompt: WEEKLY_DIGEST,
411
+ gateless: "A digest is judgement every fire, and a gate would suppress the report it exists to send.",
306
412
  },
307
413
  {
308
414
  key: "channel-link-check",
@@ -311,6 +417,7 @@ export const ROUTINE_ROSTER: readonly RoutineTemplate[] = [
311
417
  "Reports a messaging link that has gone down and whether it can recover on its own; it never disconnects a link or starts a re-pair.",
312
418
  recurrence: "*/15 * * * *",
313
419
  prompt: CHANNEL_LINK_CHECK,
420
+ gate: { checks: [{ type: "whatsapp", scope: "status" }] },
314
421
  },
315
422
  {
316
423
  key: "graph-health",
@@ -319,6 +426,7 @@ export const ROUTINE_ROSTER: readonly RoutineTemplate[] = [
319
426
  "Reports what the hourly graph sweep last did and what is waiting for review; it reads only and never runs the sweep itself.",
320
427
  recurrence: "0 9 * * 1",
321
428
  prompt: GRAPH_HEALTH,
429
+ gateless: "Reports the sweep's state every fire by design, so there is nothing conditional to check.",
322
430
  },
323
431
  {
324
432
  key: "filesystem-health",
@@ -327,6 +435,7 @@ export const ROUTINE_ROSTER: readonly RoutineTemplate[] = [
327
435
  "Reports what has grown under the account directory and which paths are worth attention; it deletes nothing.",
328
436
  recurrence: "0 9 * * 1",
329
437
  prompt: FILESYSTEM_HEALTH,
438
+ gateless: "Reports what has grown every fire by design, so there is nothing conditional to check.",
330
439
  },
331
440
  ];
332
441
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: platform-architecture
3
3
  description: Use when grounding any documented-surface claim about what Maxy ships — plugins, skills, specialists, install/deploy flows, internals. This is the install catalogue, not evidence of what is enabled on the current account. For install state on this account, call `capabilities-here`; for documented surface, cite the `Source:` URL inline.
4
- content-hash: sha256:b20c0cc4943d42c84f0e324403b1da911481214c3834ff2c778daf1f5f6db086
4
+ content-hash: sha256:1d79dbcab9f7eb842df0e53078ed706535c2be25329f49a6c2592429417783da
5
5
  brand: maxy-code
6
6
  product-name: Maxy
7
7
  ---
@@ -3484,15 +3484,23 @@ The Routines surface (`/routines`) is the admin view of the account's
3484
3484
  automation `:Event` nodes — the device's scheduled agent turns and tool
3485
3485
  dispatches, which the Calendar surface deliberately excludes (`calendar.ts`
3486
3486
  unions only appointment events, `actionPlugin IS NULL`). It renders one card per
3487
- routine (title, its one-line description where it has one, human-readable
3488
- schedule, next run, channel/destination or tool, status); a card opens a detail
3489
- modal modeled on the calendar `EventDetailModal`. A shipped routine is seeded with
3490
- a description and the operator can rewrite it from the modal; a routine nobody has
3491
- captioned renders with no line and no placeholder. Editing it stamps the row
3487
+ routine (title, human-readable schedule, its one-line description where it has
3488
+ one, next run, channel/destination or tool, status); a card opens a detail
3489
+ modal modeled on the calendar `EventDetailModal`.
3490
+
3491
+ Every card on the page is the same height, whatever its description says. The
3492
+ title takes its own row and truncates to one line with an ellipsis, with the
3493
+ full text on hover and in the modal; the schedule reads directly beneath it; the
3494
+ description is clamped to three lines; and the status line is pinned to the
3495
+ card's bottom edge, so a column of cards shares one baseline for "Next:".
3496
+
3497
+ A shipped routine is seeded with a name and a description, and the operator can
3498
+ rewrite either from the modal; a routine nobody has captioned renders with no
3499
+ description line and no placeholder. Editing either stamps the row
3492
3500
  operator-owned, so the next roster refresh leaves the operator's wording alone,
3493
3501
  and recomputes the row's search vector, which is built from the name and the
3494
- description. A description is never dispatched: `agentPrompt` is the only text a
3495
- fire sends.
3502
+ description together. A description is never dispatched: `agentPrompt` is the
3503
+ only text a fire sends.
3496
3504
  The read-only view shows two prose blocks, each under its own heading, in the
3497
3505
  order **Description** then **Instruction sent to the agent**. Both use the same
3498
3506
  header-above-prose shape, so neither reads as a different kind of thing from the
@@ -3511,7 +3519,10 @@ daily/weekly/monthly, day-of-week, day-of-month, time) that falls back to a
3511
3519
  raw-cron field for patterns it cannot represent. The binding control appears on
3512
3520
  an agent routine and on a routine with no dispatch at all; a tool-action
3513
3521
  routine's dispatch stays read-only, because an agent binding takes precedence at
3514
- fire time and would stop the tool running.
3522
+ fire time and would stop the tool running. The **Name** box is the first field
3523
+ in the edit form: it is bounded at 200 characters, Save is blocked while it is
3524
+ empty, and renaming stamps the row operator-owned so the next roster version
3525
+ bump cannot put the seeded name back.
3515
3526
 
3516
3527
  **The status dot.** The card and the modal each carry a dot ahead of
3517
3528
  the raw status word, so a grid of eight routines can be read without reading
@@ -3525,8 +3536,8 @@ render it through one `RoutineStatusDot`, which is what stops them drifting:
3525
3536
  | `cancelled`, `completed` | solid grey (`--text-tertiary`) | deliberately stopped or finished |
3526
3537
  | anything else, and `null` | grey ring, no fill | no reading taken |
3527
3538
 
3528
- **The run recap.** Each card carries a history icon that opens that routine's
3529
- run history; the detail modal's **Runs** button reaches the same view. A run
3539
+ **The run recap.** The detail modal's **Runs** button opens that routine's run
3540
+ history, and it is the only way in: the card face carries no control. A run
3530
3541
  shows what it sent — the message text itself, on the row and in full in the run
3531
3542
  dialog — and a run that finished having sent nothing says so, which is a
3532
3543
  different statement from a run whose outcome is not yet known. Both the routine
@@ -9,6 +9,18 @@ Invoked by the admin agent directly.
9
9
 
10
10
  This is the platform's release timeline, newest first. Each entry shows the date it shipped and the version it shipped in, so you can tell the operator how current their install is. To compare, read the installed version from `capabilities-here` and match it against the versions below. Keep answers high level and in plain English; this is a summary, not a full commit log.
11
11
 
12
+ ## 2026-08-03 (0.1.554)
13
+
14
+ - You can now rename a routine from its detail view, and your name is kept when the built-in list is next refreshed.
15
+ - Routine cards are now equal height with the title on its own row and past runs reached from the detail view rather than the card face.
16
+ - The sidebar menu can now be collapsed to an icon rail, and your choice is remembered.
17
+
18
+ ## 2026-08-03 (0.1.553)
19
+
20
+ - Each routine now shows how it runs, what its precondition checks, and how often it fired in the last day, so a routine that skipped can be told apart from one that ran quietly.
21
+ - Every built-in routine is now classified as gated or ungated, and a new recurring routine has to answer that question rather than defaulting to waking on the clock.
22
+ - Changing how often a routine runs is now recorded with its cost difference, and the rate across the install is counted on each check.
23
+
12
24
  ## 2026-08-02 (0.1.552)
13
25
 
14
26
  - A recurring routine can now check a condition first, so the clock alone no longer wakes the assistant when there is nothing to do. A one-time reminder is never gated, since skipping it would lose it.
@@ -99,15 +99,23 @@ The Routines surface (`/routines`) is the admin view of the account's
99
99
  automation `:Event` nodes — the device's scheduled agent turns and tool
100
100
  dispatches, which the Calendar surface deliberately excludes (`calendar.ts`
101
101
  unions only appointment events, `actionPlugin IS NULL`). It renders one card per
102
- routine (title, its one-line description where it has one, human-readable
103
- schedule, next run, channel/destination or tool, status); a card opens a detail
104
- modal modeled on the calendar `EventDetailModal`. A shipped routine is seeded with
105
- a description and the operator can rewrite it from the modal; a routine nobody has
106
- captioned renders with no line and no placeholder. Editing it stamps the row
102
+ routine (title, human-readable schedule, its one-line description where it has
103
+ one, next run, channel/destination or tool, status); a card opens a detail
104
+ modal modeled on the calendar `EventDetailModal`.
105
+
106
+ Every card on the page is the same height, whatever its description says. The
107
+ title takes its own row and truncates to one line with an ellipsis, with the
108
+ full text on hover and in the modal; the schedule reads directly beneath it; the
109
+ description is clamped to three lines; and the status line is pinned to the
110
+ card's bottom edge, so a column of cards shares one baseline for "Next:".
111
+
112
+ A shipped routine is seeded with a name and a description, and the operator can
113
+ rewrite either from the modal; a routine nobody has captioned renders with no
114
+ description line and no placeholder. Editing either stamps the row
107
115
  operator-owned, so the next roster refresh leaves the operator's wording alone,
108
116
  and recomputes the row's search vector, which is built from the name and the
109
- description. A description is never dispatched: `agentPrompt` is the only text a
110
- fire sends.
117
+ description together. A description is never dispatched: `agentPrompt` is the
118
+ only text a fire sends.
111
119
  The read-only view shows two prose blocks, each under its own heading, in the
112
120
  order **Description** then **Instruction sent to the agent**. Both use the same
113
121
  header-above-prose shape, so neither reads as a different kind of thing from the
@@ -126,7 +134,10 @@ daily/weekly/monthly, day-of-week, day-of-month, time) that falls back to a
126
134
  raw-cron field for patterns it cannot represent. The binding control appears on
127
135
  an agent routine and on a routine with no dispatch at all; a tool-action
128
136
  routine's dispatch stays read-only, because an agent binding takes precedence at
129
- fire time and would stop the tool running.
137
+ fire time and would stop the tool running. The **Name** box is the first field
138
+ in the edit form: it is bounded at 200 characters, Save is blocked while it is
139
+ empty, and renaming stamps the row operator-owned so the next roster version
140
+ bump cannot put the seeded name back.
130
141
 
131
142
  **The status dot.** The card and the modal each carry a dot ahead of
132
143
  the raw status word, so a grid of eight routines can be read without reading
@@ -140,8 +151,8 @@ render it through one `RoutineStatusDot`, which is what stops them drifting:
140
151
  | `cancelled`, `completed` | solid grey (`--text-tertiary`) | deliberately stopped or finished |
141
152
  | anything else, and `null` | grey ring, no fill | no reading taken |
142
153
 
143
- **The run recap.** Each card carries a history icon that opens that routine's
144
- run history; the detail modal's **Runs** button reaches the same view. A run
154
+ **The run recap.** The detail modal's **Runs** button opens that routine's run
155
+ history, and it is the only way in: the card face carries no control. A run
145
156
  shows what it sent — the message text itself, on the row and in full in the run
146
157
  dialog — and a run that finished having sent nothing says so, which is a
147
158
  different statement from a run whose outcome is not yet known. Both the routine
@@ -105,6 +105,24 @@ is planned; until it ships, the internal calendar plus `.ics` import is the clie
105
105
 
106
106
  Automatic connector-to-internal availability sync is separate future work.
107
107
 
108
+ ## Reflecting a connector calendar into the booking page
109
+
110
+ `schedule-connector-busy-sync` replaces this account's stored connector-busy set. Call it with **no
111
+ arguments**: it resolves the account's own authorised connector from its token store, reads the next
112
+ 15 days of free/busy from that connector, and syncs. Nothing about that is a judgement, so nothing
113
+ about it needs you — the tool spawns the google or outlook plugin's own free/busy tool to do the
114
+ reading, and it is safe to invoke from a scheduled `action` dispatch with `args: {}`.
115
+
116
+ An account with no authorised connector syncs `connector='none'` with an empty set. That is a
117
+ success, not a failure: it clears a deauthorised connector's stale blocks.
118
+
119
+ A failed read is an error and writes nothing. The stored busy set survives a transient provider
120
+ outage, because publishing the operator's booked time as free is worse than not syncing at all.
121
+
122
+ Passing `connector` and `busy` together is the explicit form and behaves exactly as before. Passing
123
+ `busy` without `connector` is refused, because the connector tag is what a later sync compares
124
+ against and it cannot be guessed from the intervals.
125
+
108
126
  ## Meetings vs events — what `schedule-event` writes
109
127
 
110
128
  `schedule-event` writes one of two graph nodes, decided from the parameters you pass — never from keywords in the title:
@@ -268,17 +286,45 @@ Users and plugins both create events with actions via the same `schedule-event`
268
286
 
269
287
  ## Agent-bearing dispatch
270
288
 
271
- An `action` invokes one pre-encoded MCP tool with no reasoning. When a due event needs an agent to decide what to do and say "when this document is signed, work out what to tell me and message me on WhatsApp" pass `agentDispatch` instead. When the event fires, the heartbeat hands the prompt to the destination's native channel: the channel spawns or resumes the deterministic admin session for that phone or chat, the agent runs the prompt with full admin tools, and its answer is delivered back over the account's paired socket. No operator session need be open.
289
+ Choosing a dispatch mode is **two questions, not one**: should this fire run *at all*, and what should it *say* once it does. Answer them separately. A routine that needs a model to compose its message very often needs no model at all to decide whether there is anything to compose, and treating those as one question is how a conditional sweep ends up spawning a full agent turn every fifteen minutes to discover there was nothing to do.
290
+
291
+ 1. **`action`** — nothing here needs a model. One pre-encoded MCP tool, no reasoning, no spawn.
292
+ 2. **`agentDispatch` with a `gate`** — a model is needed to compose or to judge, but only when there is something to act on. **This is the default for anything conditional.** The dispatcher calls the gate tool headlessly before spawning; `hasWork:false` skips the fire entirely.
293
+ 3. **`agentDispatch` with no gate** — judgement applies on *every* fire, whatever the state of the world: a daily briefing, a weekly digest. This is the exception, and it is stated as one. A recurring `agentDispatch` with no `gate` is refused unless it carries `gateWaived` naming why.
294
+
295
+ When an agent-bearing event fires, the heartbeat hands the prompt to the destination's native channel: the channel spawns or resumes the deterministic admin session for that phone or chat, the agent runs the prompt with full admin tools, and its answer is delivered back over the account's paired socket. No operator session need be open.
296
+
297
+ The worked example is the second shape. The signature check is a gate; the prompt keeps only the composing and the messaging:
272
298
 
273
299
  ```json
274
- { "channel": "whatsapp", "destination": "+447700900123", "prompt": "Check whether the tenancy agreement is signed yet and, if it is, message me a one-line confirmation." }
300
+ {
301
+ "agentDispatch": {
302
+ "channel": "whatsapp",
303
+ "destination": "+447700900123",
304
+ "prompt": "The tenancy agreement has just been signed. Write the one-line confirmation and send it."
305
+ },
306
+ "gate": {
307
+ "plugin": "scheduling",
308
+ "tool": "scheduling-gate",
309
+ "args": {
310
+ "eventId": "<this event's id>",
311
+ "checks": [{ "kind": "d1", "database": "<the account's database>", "sql": "SELECT count(*) FROM agreements WHERE signed_at > '<watermark>'" }]
312
+ }
313
+ }
314
+ }
275
315
  ```
276
316
 
317
+ Written as one model turn instead — "check whether it is signed yet and, if it is, message me" — the check runs inside the spawned agent, so the turn costs a full agent run on every fire whether or not anything was signed.
318
+
277
319
  - `channel` — `whatsapp` or `telegram`.
278
320
  - `destination` — the E.164 phone (WhatsApp) or chat id (Telegram) to run the turn for and reply to. It **must already be a registered admin or account-manager** on that channel; a destination that is not is rejected when the event is created. For WhatsApp the authoritative admin/manager lists are read from the socket-owning **house** account (never the event's own account), and the destination's registered account must match the account that created the schedule: an admin belongs to the house, a manager to its bound sub-account. The house/owner account may target any registered admin or manager; a sub-account is locked to its own manager(s). A refusal names the true reason — `not-registered` (in no house list) or `cross-account` (registered to a different account, naming both accounts).
279
- - `prompt` — the instruction the agent runs.
321
+ - `prompt` — the instruction the agent runs. Write it for the case where there **is** work: the gate has already decided that.
322
+ - `gate` — `{ plugin, tool, args }`. The precondition, evaluated headlessly between the `nextRun` advance and the spawn. It must return `structuredContent {hasWork:boolean}`; the dispatcher reads that boolean and nothing else. A gate that errors, times out or returns no boolean **dispatches anyway**, so a broken check never silently mutes a routine. Requires a complete `agentDispatch`, and is refused on an action-mode event.
323
+ - `gateWaived` — a string reason, and the only way to create a recurring `agentDispatch` with no gate. Give the reason this routine has judgement to apply on every fire ("the morning briefing composes from scratch each day"). It is stored on the event and counted by the standing gate-classification check, so a deliberate exception stays readable and the fleet's drift back to ungated is a number someone can look at. A conditional sweep is not an exception; gate it.
324
+
325
+ **Recurring only.** A one-time agent event is never gated — its row is already `due` by the time the dispatcher sees it, so a skip there would drop the routine for good — and it is therefore outside the refusal. `schedule-update` takes no waiver either: an existing routine keeps what it has until it is edited.
280
326
 
281
- An event carries **either** an `action` **or** an `agentDispatch`, never both — setting one clears the other. Agent dispatch is stored as `agentChannel`, `agentDestination`, `agentPrompt`. Use `schedule-update` with `agentDispatch` to modify or `agentDispatch: null` to clear. On WhatsApp, a destination bound as an account-manager scopes the spawned session to its sub-account — unless that same phone is also on the house `adminPhones` list, in which case it scopes to the channel account, because the dispatch rides the house socket and so arrives from the house number. On Telegram the session runs on the house account.
327
+ An event carries **either** an `action` **or** an `agentDispatch`, never both — setting one clears the other. Agent dispatch is stored as `agentChannel`, `agentDestination`, `agentPrompt`; the gate as `gatePlugin`, `gateTool`, `gateArgs`; the waiver as `gateWaived`. Use `schedule-update` with `agentDispatch` to modify or `agentDispatch: null` to clear. On WhatsApp, a destination bound as an account-manager scopes the spawned session to its sub-account — unless that same phone is also on the house `adminPhones` list, in which case it scopes to the channel account, because the dispatch rides the house socket and so arrives from the house number. On Telegram the session runs on the house account.
282
328
 
283
329
  A WhatsApp `agentDispatch` destination may therefore be an account manager, not only an admin phone — this is the supported way to send a manager a proactive or scheduled WhatsApp message. The reply is delivered over the house's paired line regardless of which sub-account the session is scoped to; socket ownership never restricts which number the dispatch can reach.
284
330
 
@@ -13,9 +13,11 @@ import { scheduleCancel } from "./tools/schedule-cancel.js";
13
13
  import { scheduleExportIcs } from "./tools/schedule-export-ics.js";
14
14
  import { scheduleImportIcs } from "./tools/schedule-import-ics.js";
15
15
  import { scheduleArchiveIcs } from "./tools/schedule-archive-ics.js";
16
- import { syncConnectorBusy } from "./tools/schedule-connector-busy-sync.js";
16
+ import { resolveAndSyncConnectorBusy, syncConnectorBusy, } from "./tools/schedule-connector-busy-sync.js";
17
+ import { resolveConnector, spawnProviderCall } from "./lib/connector-freebusy.js";
17
18
  import { closeDriver, getUserTimezone, getSession } from "./lib/neo4j.js";
18
19
  import { formatCombined } from "./lib/time-format.js";
20
+ import { join, resolve } from "node:path";
19
21
  // Cast to `any` to avoid TS2589. TypeScript hits its 50-level instantiation
20
22
  // limit when accumulating typed tool signatures on a generic McpServer.
21
23
  // Individual tool handlers retain full type safety in their own files.
@@ -70,6 +72,9 @@ const gateShape = {
70
72
  args: z.record(z.unknown()).optional().describe("Arguments passed to the gate tool verbatim"),
71
73
  };
72
74
  const GATE_DESCRIPTION = "Precondition: before this routine spawns an agent turn, the dispatcher calls this tool headlessly and reads structuredContent.hasWork. False skips the turn entirely; true dispatches as normal. A gate that errors, times out or returns no boolean dispatches anyway, so a broken gate never silently mutes the routine. Requires a complete agentDispatch and is refused on an action-mode event.";
75
+ // Task 2383 — the declared exception, on the create path only. `schedule-update`
76
+ // takes no waiver: an existing routine keeps what it has until it is edited.
77
+ const GATE_WAIVED_DESCRIPTION = "The declared reason this recurring routine runs a model on every fire with no gate. A daily briefing or a weekly digest composes from scratch each time and has judgement to apply whether or not anything changed; a conditional sweep does not, and belongs behind a gate. Required when a recurring agentDispatch carries no gate — the write is refused without one. Stored on the event and counted by the standing gate-classification check, so every deliberate exception stays readable.";
73
78
  // ---------------------------------------------------------------------------
74
79
  // schedule-event
75
80
  // ---------------------------------------------------------------------------
@@ -98,6 +103,7 @@ eagerTool(server, "schedule-event", "Create a scheduled event or appointment. A
98
103
  prompt: z.string().describe("The instruction the agent runs when the event fires"),
99
104
  }).optional().describe("Agent-bearing dispatch: when the event fires, spawns or resumes the admin channel session for `destination` and runs `prompt` with full admin tools, delivering the answer back over the channel. Mutually exclusive with `action`. Always records an event, never a meeting."),
100
105
  gate: z.object(gateShape).optional().describe(GATE_DESCRIPTION),
106
+ gateWaived: z.string().optional().describe(GATE_WAIVED_DESCRIPTION),
101
107
  }, async (params) => {
102
108
  if (!accountId)
103
109
  return refuseNoAccount("schedule-event");
@@ -138,6 +144,8 @@ eagerTool(server, "schedule-event", "Create a scheduled event or appointment. A
138
144
  parts.push(`agent dispatch: ${params.agentDispatch.channel} → ${params.agentDispatch.destination}`);
139
145
  if (params.gate)
140
146
  parts.push(`gate: ${params.gate.plugin}/${params.gate.tool}`);
147
+ if (params.gateWaived)
148
+ parts.push(`gate waived: ${params.gateWaived}`);
141
149
  return { content: [{ type: "text", text: parts.join(", ") }] };
142
150
  }
143
151
  catch (err) {
@@ -150,24 +158,61 @@ eagerTool(server, "schedule-event", "Create a scheduled event or appointment. A
150
158
  // ---------------------------------------------------------------------------
151
159
  // schedule-connector-busy-sync (Task 1654)
152
160
  // ---------------------------------------------------------------------------
153
- eagerTool(server, "schedule-connector-busy-sync", "Reflect your calendar connector's busy blocks into your booking page availability. Call this from the recurring connector-sync turn after reading your Google Calendar or Microsoft 365 free/busy: pass connector='google' or 'm365' and busy as the list of {start,end} ISO 8601 busy intervals. If no calendar connector is authorised, pass connector='none' and busy=[] to clear stale blocks. Wholesale-replaces the stored connector-busy set for this account.", {
154
- connector: z.enum(["google", "m365", "none"]).describe("Which calendar connector these busy blocks came from, or 'none' if no connector is authorised"),
161
+ eagerTool(server, "schedule-connector-busy-sync", "Reflect your calendar connector's busy blocks into your booking page availability. Call it with NO arguments and it resolves the account's own authorised connector, reads the next 15 days of free/busy itself, and syncs — that is the normal use and needs no reading step from you. Passing connector and busy together is the explicit form: connector='google' or 'm365' with the list of {start,end} ISO 8601 busy intervals, or connector='none' and busy=[] to clear stale blocks. Wholesale-replaces the stored connector-busy set for this account.", {
162
+ connector: z.enum(["google", "m365", "none"]).optional().describe("Which calendar connector these busy blocks came from, or 'none' if no connector is authorised. Omit together with busy to have the tool resolve the account's own connector."),
155
163
  busy: z.array(z.object({
156
164
  start: z.string().describe("ISO 8601 busy-block start"),
157
165
  end: z.string().describe("ISO 8601 busy-block end"),
158
- })).describe("Busy intervals read from the connector. Empty when connector='none'."),
166
+ })).optional().describe("Busy intervals read from the connector. Empty when connector='none'. Omit to have the tool read the next 15 days itself."),
159
167
  }, async (params) => {
160
168
  if (!accountId)
161
169
  return refuseNoAccount("schedule-connector-busy-sync");
170
+ // Both halves are refused rather than defaulted, and for the same reason:
171
+ // either one alone would be silently reinterpreted. A busy list with no
172
+ // connector would have to guess where the intervals came from, and that tag
173
+ // is what a later sync compares against. A connector with no busy list would
174
+ // be discarded in favour of whatever the account actually holds, so a caller
175
+ // naming the wrong connector would be told nothing and get a different one.
176
+ if (Boolean(params.busy) !== Boolean(params.connector)) {
177
+ const passed = params.busy ? "busy" : "connector";
178
+ const missing = params.busy ? "connector" : "busy";
179
+ return {
180
+ content: [{ type: "text", text: `schedule-connector-busy-sync: ${passed} was passed without ${missing}. Pass both, or neither to have the tool resolve and read the account's own connector.` }],
181
+ isError: true,
182
+ };
183
+ }
162
184
  const session = getSession();
163
185
  try {
164
- const r = await syncConnectorBusy(session, accountId, params);
186
+ let r;
187
+ if (params.busy && params.connector) {
188
+ r = await syncConnectorBusy(session, accountId, { connector: params.connector, busy: params.busy });
189
+ }
190
+ else {
191
+ const platformRoot = process.env.PLATFORM_ROOT ?? process.cwd();
192
+ const accountsDir = resolve(platformRoot, "..", "data/accounts");
193
+ // Resolved twice — here and inside resolveAndSyncConnectorBusy — because
194
+ // spawnProviderCall builds the provider environment eagerly and throws
195
+ // when the brand ships no vendor app. An account with no connector at all
196
+ // must reach the clean empty sync instead.
197
+ const { connector } = resolveConnector(join(accountsDir, accountId));
198
+ r = await resolveAndSyncConnectorBusy(session, accountId, {
199
+ accountsDir,
200
+ platformRoot,
201
+ now: new Date(),
202
+ call: connector === "none"
203
+ ? async () => { throw new Error("no calendar connector is authorised for this account"); }
204
+ : spawnProviderCall(platformRoot, accountId, connector),
205
+ });
206
+ }
165
207
  process.stderr.write(`[calendar-availability] op=cal-sync connector=${r.connector} busyBlocks=${r.busyBlocks} reflected=${r.reflected}\n`);
166
208
  return { content: [{ type: "text", text: `Synced ${r.reflected} connector busy block(s) from ${r.connector}.` }] };
167
209
  }
168
210
  catch (err) {
169
211
  const reason = err instanceof Error ? err.message : String(err);
170
- process.stderr.write(`[calendar-availability] op=cal-sync-fail connector=${params.connector} reason=${JSON.stringify(reason)}\n`);
212
+ // `resolved` rather than `undefined` when the caller passed no connector:
213
+ // the connector on this line is what the caller supplied, and the resolved
214
+ // value is already on the `[connector-busy-sync] op=` lines above.
215
+ process.stderr.write(`[calendar-availability] op=cal-sync-fail connector=${params.connector ?? "resolved"} reason=${JSON.stringify(reason)}\n`);
171
216
  return { content: [{ type: "text", text: `Connector busy sync failed: ${reason}` }], isError: true };
172
217
  }
173
218
  finally {