@rubytech/create-sitedesk-code 0.1.522 → 0.1.524

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 (843) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/lib/agent-dispatch-rule/dist/index.d.ts +99 -0
  3. package/payload/platform/lib/agent-dispatch-rule/dist/index.d.ts.map +1 -0
  4. package/payload/platform/lib/agent-dispatch-rule/dist/index.js +228 -0
  5. package/payload/platform/lib/agent-dispatch-rule/dist/index.js.map +1 -0
  6. package/payload/platform/lib/agent-dispatch-rule/package.json +6 -0
  7. package/payload/platform/lib/agent-dispatch-rule/src/__tests__/rule.test.ts +384 -0
  8. package/payload/platform/lib/agent-dispatch-rule/src/index.ts +269 -0
  9. package/payload/platform/lib/agent-dispatch-rule/tsconfig.json +9 -0
  10. package/payload/platform/lib/agent-dispatch-rule/vitest.config.ts +9 -0
  11. package/payload/platform/lib/graph-style/dist/index.d.ts.map +1 -1
  12. package/payload/platform/lib/graph-style/dist/index.js +28 -0
  13. package/payload/platform/lib/graph-style/dist/index.js.map +1 -1
  14. package/payload/platform/lib/graph-style/src/__tests__/caption-coverage.test.ts +7 -0
  15. package/payload/platform/lib/graph-style/src/index.ts +24 -0
  16. package/payload/platform/lib/graph-write/dist/__tests__/merge-on.test.d.ts.map +1 -0
  17. package/payload/platform/lib/graph-write/dist/__tests__/merge-on.test.js.map +1 -0
  18. package/payload/platform/lib/graph-write/dist/index.d.ts +16 -0
  19. package/payload/platform/lib/graph-write/dist/index.d.ts.map +1 -1
  20. package/payload/platform/lib/graph-write/dist/index.js +83 -6
  21. package/payload/platform/lib/graph-write/dist/index.js.map +1 -1
  22. package/payload/platform/lib/graph-write/src/index.ts +117 -10
  23. package/payload/platform/lib/routine-templates/dist/index.d.ts +151 -0
  24. package/payload/platform/lib/routine-templates/dist/index.d.ts.map +1 -0
  25. package/payload/platform/lib/routine-templates/dist/index.js +207 -0
  26. package/payload/platform/lib/routine-templates/dist/index.js.map +1 -0
  27. package/payload/platform/lib/routine-templates/dist/roster.d.ts +57 -0
  28. package/payload/platform/lib/routine-templates/dist/roster.d.ts.map +1 -0
  29. package/payload/platform/lib/routine-templates/dist/roster.js +182 -0
  30. package/payload/platform/lib/routine-templates/dist/roster.js.map +1 -0
  31. package/payload/platform/lib/routine-templates/dist/seed-cli.d.ts +2 -0
  32. package/payload/platform/lib/routine-templates/dist/seed-cli.d.ts.map +1 -0
  33. package/payload/platform/lib/routine-templates/dist/seed-cli.js +64 -0
  34. package/payload/platform/lib/routine-templates/dist/seed-cli.js.map +1 -0
  35. package/payload/platform/lib/routine-templates/package.json +6 -0
  36. package/payload/platform/lib/routine-templates/src/__tests__/roster.test.ts +170 -0
  37. package/payload/platform/lib/routine-templates/src/__tests__/seed.test.ts +298 -0
  38. package/payload/platform/lib/routine-templates/src/index.ts +299 -0
  39. package/payload/platform/lib/routine-templates/src/roster.ts +206 -0
  40. package/payload/platform/lib/routine-templates/src/seed-cli.ts +65 -0
  41. package/payload/platform/lib/routine-templates/tsconfig.json +9 -0
  42. package/payload/platform/lib/routine-templates/vitest.config.ts +9 -0
  43. package/payload/platform/neo4j/edge-annotations.json +2 -2
  44. package/payload/platform/neo4j/schema.cypher +25 -1
  45. package/payload/platform/package.json +3 -2
  46. package/payload/platform/plugins/admin/PLUGIN.md +3 -2
  47. package/payload/platform/plugins/admin/hooks/__tests__/mailbox-inject.test.sh +501 -0
  48. package/payload/platform/plugins/admin/hooks/mailbox-inject.sh +299 -0
  49. package/payload/platform/plugins/admin/mcp/dist/index.js +39 -1
  50. package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
  51. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +317 -68
  52. package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +12 -0
  53. package/payload/platform/plugins/docs/references/admin-ui.md +301 -64
  54. package/payload/platform/plugins/docs/references/memory-guide.md +11 -1
  55. package/payload/platform/plugins/docs/references/workflows.md +4 -2
  56. package/payload/platform/plugins/email/mcp/dist/__tests__/email-status.test.js +72 -1
  57. package/payload/platform/plugins/email/mcp/dist/__tests__/email-status.test.js.map +1 -1
  58. package/payload/platform/plugins/email/mcp/dist/__tests__/mailbox-resolve.test.js +4 -1
  59. package/payload/platform/plugins/email/mcp/dist/__tests__/mailbox-resolve.test.js.map +1 -1
  60. package/payload/platform/plugins/email/mcp/dist/lib/credentials.d.ts.map +1 -1
  61. package/payload/platform/plugins/email/mcp/dist/lib/credentials.js +4 -2
  62. package/payload/platform/plugins/email/mcp/dist/lib/credentials.js.map +1 -1
  63. package/payload/platform/plugins/email/mcp/dist/tools/email-status.d.ts +0 -6
  64. package/payload/platform/plugins/email/mcp/dist/tools/email-status.d.ts.map +1 -1
  65. package/payload/platform/plugins/email/mcp/dist/tools/email-status.js +24 -2
  66. package/payload/platform/plugins/email/mcp/dist/tools/email-status.js.map +1 -1
  67. package/payload/platform/plugins/email/references/email-reference.md +1 -1
  68. package/payload/platform/plugins/graph/.claude-plugin/plugin.json +1 -1
  69. package/payload/platform/plugins/graph/PLUGIN.md +1 -1
  70. package/payload/platform/plugins/memory/PLUGIN.md +1 -1
  71. package/payload/platform/plugins/memory/mcp/dist/index.js +12 -5
  72. package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -1
  73. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/phase-estate-census.test.d.ts +2 -0
  74. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/phase-estate-census.test.d.ts.map +1 -0
  75. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/phase-estate-census.test.js +197 -0
  76. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/phase-estate-census.test.js.map +1 -0
  77. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-loader.test.js +55 -9
  78. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-loader.test.js.map +1 -1
  79. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-validator.test.js +96 -0
  80. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-validator.test.js.map +1 -1
  81. package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/index.d.ts +7 -0
  82. package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/index.d.ts.map +1 -1
  83. package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/phase-estate-census.d.ts +29 -0
  84. package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/phase-estate-census.d.ts.map +1 -0
  85. package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/phase-estate-census.js +126 -0
  86. package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/phase-estate-census.js.map +1 -0
  87. package/payload/platform/plugins/memory/mcp/dist/scripts/dream-cycle-sweep.js +7 -4
  88. package/payload/platform/plugins/memory/mcp/dist/scripts/dream-cycle-sweep.js.map +1 -1
  89. package/payload/platform/plugins/memory/mcp/dist/tools/memory-dream-run.d.ts +1 -0
  90. package/payload/platform/plugins/memory/mcp/dist/tools/memory-dream-run.d.ts.map +1 -1
  91. package/payload/platform/plugins/memory/mcp/dist/tools/memory-dream-run.js +18 -1
  92. package/payload/platform/plugins/memory/mcp/dist/tools/memory-dream-run.js.map +1 -1
  93. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.d.ts +7 -0
  94. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.d.ts.map +1 -1
  95. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js +4 -3
  96. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js.map +1 -1
  97. package/payload/platform/plugins/memory/mcp/vitest.config.ts +2 -0
  98. package/payload/platform/plugins/memory/references/schema-estate-agent.md +2 -2
  99. package/payload/platform/plugins/memory/skills/conversation-archive-enrich/SKILL.md +4 -4
  100. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-search-delegated-ids.test.d.ts +2 -0
  101. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-search-delegated-ids.test.d.ts.map +1 -0
  102. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-search-delegated-ids.test.js +322 -0
  103. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-search-delegated-ids.test.js.map +1 -0
  104. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mailbox-registry.test.js +21 -1
  105. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mailbox-registry.test.js.map +1 -1
  106. package/payload/platform/plugins/outlook/mcp/dist/auth/mailbox-registry.d.ts +13 -0
  107. package/payload/platform/plugins/outlook/mcp/dist/auth/mailbox-registry.d.ts.map +1 -1
  108. package/payload/platform/plugins/outlook/mcp/dist/auth/mailbox-registry.js +16 -0
  109. package/payload/platform/plugins/outlook/mcp/dist/auth/mailbox-registry.js.map +1 -1
  110. package/payload/platform/plugins/outlook/mcp/dist/index.js +5 -5
  111. package/payload/platform/plugins/outlook/mcp/dist/index.js.map +1 -1
  112. package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.d.ts.map +1 -1
  113. package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.js +6 -0
  114. package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.js.map +1 -1
  115. package/payload/platform/plugins/outlook/mcp/dist/tools/mail-search.d.ts +7 -0
  116. package/payload/platform/plugins/outlook/mcp/dist/tools/mail-search.d.ts.map +1 -1
  117. package/payload/platform/plugins/outlook/mcp/dist/tools/mail-search.js +122 -8
  118. package/payload/platform/plugins/outlook/mcp/dist/tools/mail-search.js.map +1 -1
  119. package/payload/platform/plugins/quickbooks/PLUGIN.md +10 -10
  120. package/payload/platform/plugins/scheduling/PLUGIN.md +69 -2
  121. package/payload/platform/plugins/scheduling/mcp/dist/index.js +54 -4
  122. package/payload/platform/plugins/scheduling/mcp/dist/index.js.map +1 -1
  123. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/agent-dispatch.test.js +8 -36
  124. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/agent-dispatch.test.js.map +1 -1
  125. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/notes-cap.test.d.ts +2 -0
  126. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/notes-cap.test.d.ts.map +1 -0
  127. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/notes-cap.test.js +78 -0
  128. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/notes-cap.test.js.map +1 -0
  129. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/routine-run.test.d.ts +2 -0
  130. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/routine-run.test.d.ts.map +1 -0
  131. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/routine-run.test.js +457 -0
  132. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/routine-run.test.js.map +1 -0
  133. package/payload/platform/plugins/scheduling/mcp/dist/lib/agent-dispatch.d.ts +10 -65
  134. package/payload/platform/plugins/scheduling/mcp/dist/lib/agent-dispatch.d.ts.map +1 -1
  135. package/payload/platform/plugins/scheduling/mcp/dist/lib/agent-dispatch.js +29 -122
  136. package/payload/platform/plugins/scheduling/mcp/dist/lib/agent-dispatch.js.map +1 -1
  137. package/payload/platform/plugins/scheduling/mcp/dist/lib/notes-cap.d.ts +35 -0
  138. package/payload/platform/plugins/scheduling/mcp/dist/lib/notes-cap.d.ts.map +1 -0
  139. package/payload/platform/plugins/scheduling/mcp/dist/lib/notes-cap.js +39 -0
  140. package/payload/platform/plugins/scheduling/mcp/dist/lib/notes-cap.js.map +1 -0
  141. package/payload/platform/plugins/scheduling/mcp/dist/lib/routine-run.d.ts +175 -0
  142. package/payload/platform/plugins/scheduling/mcp/dist/lib/routine-run.d.ts.map +1 -0
  143. package/payload/platform/plugins/scheduling/mcp/dist/lib/routine-run.js +533 -0
  144. package/payload/platform/plugins/scheduling/mcp/dist/lib/routine-run.js.map +1 -0
  145. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/agent-turn-dispatch.test.js +123 -9
  146. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/agent-turn-dispatch.test.js.map +1 -1
  147. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/routine-roster-audit.test.d.ts +2 -0
  148. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/routine-roster-audit.test.d.ts.map +1 -0
  149. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/routine-roster-audit.test.js +189 -0
  150. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/routine-roster-audit.test.js.map +1 -0
  151. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/suspension-census.test.d.ts +2 -0
  152. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/suspension-census.test.d.ts.map +1 -0
  153. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/suspension-census.test.js +95 -0
  154. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/suspension-census.test.js.map +1 -0
  155. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/sweep-excludes-suspended.test.d.ts +2 -0
  156. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/sweep-excludes-suspended.test.d.ts.map +1 -0
  157. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/sweep-excludes-suspended.test.js +114 -0
  158. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/sweep-excludes-suspended.test.js.map +1 -0
  159. package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.d.ts +109 -2
  160. package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.d.ts.map +1 -1
  161. package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.js +340 -9
  162. package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.js.map +1 -1
  163. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.d.ts +9 -1
  164. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.d.ts.map +1 -1
  165. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js +210 -45
  166. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js.map +1 -1
  167. package/payload/platform/plugins/scheduling/mcp/dist/scripts/reconcile-bookings.js +43 -1
  168. package/payload/platform/plugins/scheduling/mcp/dist/scripts/reconcile-bookings.js.map +1 -1
  169. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-get-agent.test.js +55 -7
  170. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-get-agent.test.js.map +1 -1
  171. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-list.test.js +45 -1
  172. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-list.test.js.map +1 -1
  173. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-runs.test.d.ts +2 -0
  174. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-runs.test.d.ts.map +1 -0
  175. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-runs.test.js +96 -0
  176. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-runs.test.js.map +1 -0
  177. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-update-status.test.d.ts +2 -0
  178. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-update-status.test.d.ts.map +1 -0
  179. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-update-status.test.js +305 -0
  180. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-update-status.test.js.map +1 -0
  181. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-cancel.d.ts.map +1 -1
  182. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-cancel.js +2 -1
  183. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-cancel.js.map +1 -1
  184. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-get.d.ts +5 -0
  185. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-get.d.ts.map +1 -1
  186. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-get.js +13 -0
  187. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-get.js.map +1 -1
  188. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-list.d.ts +4 -0
  189. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-list.d.ts.map +1 -1
  190. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-list.js +24 -3
  191. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-list.js.map +1 -1
  192. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-runs.d.ts +33 -0
  193. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-runs.d.ts.map +1 -0
  194. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-runs.js +51 -0
  195. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-runs.js.map +1 -0
  196. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.d.ts +46 -1
  197. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.d.ts.map +1 -1
  198. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.js +184 -6
  199. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.js.map +1 -1
  200. package/payload/platform/plugins/scheduling/skills/routine-control/SKILL.md +48 -0
  201. package/payload/platform/plugins/sweep/skills/email-graph-sweep/SKILL.md +21 -7
  202. package/payload/platform/plugins/whatsapp/references/channels-whatsapp.md +30 -2
  203. package/payload/platform/plugins/whatsapp/skills/connect-whatsapp/SKILL.md +1 -1
  204. package/payload/platform/scripts/__tests__/mailbox-inject-registered.test.sh +80 -0
  205. package/payload/platform/scripts/check-specialist-tool-surface.mjs +92 -16
  206. package/payload/platform/scripts/lib/__tests__/account-settings-mailbox-inject.test.sh +166 -0
  207. package/payload/platform/scripts/lib/account-settings-mailbox-inject.sh +91 -0
  208. package/payload/platform/scripts/lib/provision-account-dir.sh +1 -0
  209. package/payload/platform/scripts/seed-neo4j.sh +41 -0
  210. package/payload/platform/scripts/setup-account.sh +15 -0
  211. package/payload/platform/scripts/verify-skill-tool-surface.sh +91 -2
  212. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts.map +1 -1
  213. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +1 -0
  214. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
  215. package/payload/platform/templates/specialists/agents/librarian.md +1 -1
  216. package/payload/platform/templates/specialists/agents/personal-assistant.md +1 -1
  217. package/payload/server/{chunk-K7CJGZPU.js → chunk-VUXKXOJU.js} +342 -152
  218. package/payload/server/{chunk-UX2FRNO7.js → chunk-WT2PFGY4.js} +37 -265
  219. package/payload/server/{chunk-PXNY2TAP.js → chunk-XCR5D2G3.js} +239 -10
  220. package/payload/server/{manager-RKL7JZ4Y.js → manager-4TJK3YOY.js} +2 -2
  221. package/payload/server/maxy-edge.js +2 -2
  222. package/payload/server/public/activity.html +5 -5
  223. package/payload/server/public/agents.html +4 -4
  224. package/payload/server/public/assets/{AdminLoginScreens-zc2_qqh-.js → AdminLoginScreens-BgDjueVe.js} +1 -1
  225. package/payload/server/public/assets/AdminLoginScreens-BgDjueVe.js.br +0 -0
  226. package/payload/server/public/assets/AdminLoginScreens-BgDjueVe.js.gz +0 -0
  227. package/payload/server/public/assets/AdminShell-YctTrR-D.js +2 -0
  228. package/payload/server/public/assets/AdminShell-YctTrR-D.js.br +0 -0
  229. package/payload/server/public/assets/AdminShell-YctTrR-D.js.gz +0 -0
  230. package/payload/server/public/assets/{activity-DVgO8YuM.js → activity-DGQt5ys_.js} +1 -1
  231. package/payload/server/public/assets/activity-DGQt5ys_.js.br +0 -0
  232. package/payload/server/public/assets/activity-DGQt5ys_.js.gz +0 -0
  233. package/payload/server/public/assets/admin-DnUxbB3P.js +1 -0
  234. package/payload/server/public/assets/admin-DnUxbB3P.js.br +0 -0
  235. package/payload/server/public/assets/admin-DnUxbB3P.js.gz +0 -0
  236. package/payload/server/public/assets/agents-Bc2LZjwC.js +1 -0
  237. package/payload/server/public/assets/agents-Bc2LZjwC.js.br +0 -0
  238. package/payload/server/public/assets/agents-Bc2LZjwC.js.gz +0 -0
  239. package/payload/server/public/assets/{arc-DaI5MLTq.js → arc-DaudCnXg.js} +1 -1
  240. package/payload/server/public/assets/arc-DaudCnXg.js.br +0 -0
  241. package/payload/server/public/assets/arc-DaudCnXg.js.gz +0 -0
  242. package/payload/server/public/assets/architecture-YZFGNWBL-DPFsm5jD.js +1 -0
  243. package/payload/server/public/assets/architecture-YZFGNWBL-DPFsm5jD.js.br +0 -0
  244. package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-CBGVUEN9.js → architectureDiagram-Q4EWVU46-BEEC3s7i.js} +1 -1
  245. package/payload/server/public/assets/architectureDiagram-Q4EWVU46-BEEC3s7i.js.br +0 -0
  246. package/payload/server/public/assets/architectureDiagram-Q4EWVU46-BEEC3s7i.js.gz +0 -0
  247. package/payload/server/public/assets/{blockDiagram-DXYQGD6D-DS6dS4GZ.js → blockDiagram-DXYQGD6D-BIWyfb18.js} +1 -1
  248. package/payload/server/public/assets/blockDiagram-DXYQGD6D-BIWyfb18.js.br +0 -0
  249. package/payload/server/public/assets/blockDiagram-DXYQGD6D-BIWyfb18.js.gz +0 -0
  250. package/payload/server/public/assets/{browser-Mw7DY3ft.js → browser-BtF7SzvG.js} +1 -1
  251. package/payload/server/public/assets/browser-BtF7SzvG.js.br +0 -0
  252. package/payload/server/public/assets/browser-BtF7SzvG.js.gz +0 -0
  253. package/payload/server/public/assets/{c4Diagram-AHTNJAMY-hBSBUZPt.js → c4Diagram-AHTNJAMY--h6oE2cv.js} +1 -1
  254. package/payload/server/public/assets/c4Diagram-AHTNJAMY--h6oE2cv.js.br +0 -0
  255. package/payload/server/public/assets/{c4Diagram-AHTNJAMY-hBSBUZPt.js.gz → c4Diagram-AHTNJAMY--h6oE2cv.js.gz} +0 -0
  256. package/payload/server/public/assets/{calendar-B9gvL_1_.js → calendar-D25EhXbD.js} +1 -1
  257. package/payload/server/public/assets/calendar-D25EhXbD.js.br +0 -0
  258. package/payload/server/public/assets/calendar-D25EhXbD.js.gz +0 -0
  259. package/payload/server/public/assets/channel-TwxCDSpK.js +1 -0
  260. package/payload/server/public/assets/channel-TwxCDSpK.js.br +0 -0
  261. package/payload/server/public/assets/chat-z4jsHFXg.js +1 -0
  262. package/payload/server/public/assets/chat-z4jsHFXg.js.br +0 -0
  263. package/payload/server/public/assets/chat-z4jsHFXg.js.gz +0 -0
  264. package/payload/server/public/assets/chevron-left-BD09SN6R.js +1 -0
  265. package/payload/server/public/assets/chevron-right-ChmWeo7T.js +1 -0
  266. package/payload/server/public/assets/chevron-right-ChmWeo7T.js.br +0 -0
  267. package/payload/server/public/assets/{chunk-2KRD3SAO-B6koUoB7.js → chunk-2KRD3SAO-BwEVlnxo.js} +1 -1
  268. package/payload/server/public/assets/chunk-2KRD3SAO-BwEVlnxo.js.br +0 -0
  269. package/payload/server/public/assets/chunk-2KRD3SAO-BwEVlnxo.js.gz +0 -0
  270. package/payload/server/public/assets/{chunk-336JU56O-BF6BRh8u.js → chunk-336JU56O-DQddTATH.js} +2 -2
  271. package/payload/server/public/assets/chunk-336JU56O-DQddTATH.js.br +0 -0
  272. package/payload/server/public/assets/chunk-336JU56O-DQddTATH.js.gz +0 -0
  273. package/payload/server/public/assets/chunk-426QAEUC-BDC8wptW.js +1 -0
  274. package/payload/server/public/assets/chunk-426QAEUC-BDC8wptW.js.br +0 -0
  275. package/payload/server/public/assets/chunk-426QAEUC-BDC8wptW.js.gz +0 -0
  276. package/payload/server/public/assets/{chunk-4BX2VUAB-7sO95xR2.js → chunk-4BX2VUAB-C5p3xTC6.js} +1 -1
  277. package/payload/server/public/assets/chunk-4BX2VUAB-C5p3xTC6.js.br +0 -0
  278. package/payload/server/public/assets/chunk-4BX2VUAB-C5p3xTC6.js.gz +0 -0
  279. package/payload/server/public/assets/{chunk-4TB4RGXK-GCTndJYx.js → chunk-4TB4RGXK-gClfNc1w.js} +1 -1
  280. package/payload/server/public/assets/chunk-4TB4RGXK-gClfNc1w.js.br +0 -0
  281. package/payload/server/public/assets/chunk-4TB4RGXK-gClfNc1w.js.gz +0 -0
  282. package/payload/server/public/assets/{chunk-55IACEB6-ggIJf_TC.js → chunk-55IACEB6-DDU_m1ra.js} +1 -1
  283. package/payload/server/public/assets/chunk-55IACEB6-DDU_m1ra.js.br +0 -0
  284. package/payload/server/public/assets/chunk-55IACEB6-DDU_m1ra.js.gz +0 -0
  285. package/payload/server/public/assets/{chunk-5FUZZQ4R-DeGmkimt.js → chunk-5FUZZQ4R-CZ2jQWNR.js} +1 -1
  286. package/payload/server/public/assets/chunk-5FUZZQ4R-CZ2jQWNR.js.br +0 -0
  287. package/payload/server/public/assets/chunk-5FUZZQ4R-CZ2jQWNR.js.gz +0 -0
  288. package/payload/server/public/assets/{chunk-5PVQY5BW-aFIQKk_U.js → chunk-5PVQY5BW-kcZ5kfTg.js} +1 -1
  289. package/payload/server/public/assets/chunk-5PVQY5BW-kcZ5kfTg.js.br +0 -0
  290. package/payload/server/public/assets/chunk-5PVQY5BW-kcZ5kfTg.js.gz +0 -0
  291. package/payload/server/public/assets/{chunk-67CJDMHE-LS8rUbii.js → chunk-67CJDMHE-9W0Qv0jm.js} +1 -1
  292. package/payload/server/public/assets/chunk-67CJDMHE-9W0Qv0jm.js.br +0 -0
  293. package/payload/server/public/assets/chunk-67CJDMHE-9W0Qv0jm.js.gz +0 -0
  294. package/payload/server/public/assets/{chunk-7N4EOEYR-JKOVngS0.js → chunk-7N4EOEYR-B3gqydR3.js} +1 -1
  295. package/payload/server/public/assets/chunk-7N4EOEYR-B3gqydR3.js.br +0 -0
  296. package/payload/server/public/assets/chunk-7N4EOEYR-B3gqydR3.js.gz +0 -0
  297. package/payload/server/public/assets/{chunk-AA7GKIK3-CoXnTVK6.js → chunk-AA7GKIK3-DW8a-2NK.js} +1 -1
  298. package/payload/server/public/assets/chunk-AA7GKIK3-DW8a-2NK.js.br +4 -0
  299. package/payload/server/public/assets/chunk-AA7GKIK3-DW8a-2NK.js.gz +0 -0
  300. package/payload/server/public/assets/{chunk-BSJP7CBP-CcsqObFg.js → chunk-BSJP7CBP-DqXIO_5R.js} +1 -1
  301. package/payload/server/public/assets/chunk-BSJP7CBP-DqXIO_5R.js.br +0 -0
  302. package/payload/server/public/assets/chunk-BSJP7CBP-DqXIO_5R.js.gz +0 -0
  303. package/payload/server/public/assets/{chunk-CIAEETIT-CpsybR7q.js → chunk-CIAEETIT-BMJfgj2u.js} +1 -1
  304. package/payload/server/public/assets/chunk-CIAEETIT-BMJfgj2u.js.br +0 -0
  305. package/payload/server/public/assets/chunk-CIAEETIT-BMJfgj2u.js.gz +0 -0
  306. package/payload/server/public/assets/{chunk-EDXVE4YY-BZ2I9PSq.js → chunk-EDXVE4YY-BxdLPk0b.js} +1 -1
  307. package/payload/server/public/assets/chunk-EDXVE4YY-BxdLPk0b.js.br +0 -0
  308. package/payload/server/public/assets/chunk-EDXVE4YY-BxdLPk0b.js.gz +0 -0
  309. package/payload/server/public/assets/{chunk-ENJZ2VHE-DbTwt6OZ.js → chunk-ENJZ2VHE-Cfe2DCjQ.js} +1 -1
  310. package/payload/server/public/assets/chunk-ENJZ2VHE-Cfe2DCjQ.js.br +0 -0
  311. package/payload/server/public/assets/chunk-ENJZ2VHE-Cfe2DCjQ.js.gz +0 -0
  312. package/payload/server/public/assets/{chunk-FMBD7UC4-D27VnSCa.js → chunk-FMBD7UC4-CdPjwbtf.js} +1 -1
  313. package/payload/server/public/assets/chunk-FMBD7UC4-CdPjwbtf.js.br +0 -0
  314. package/payload/server/public/assets/chunk-FMBD7UC4-CdPjwbtf.js.gz +0 -0
  315. package/payload/server/public/assets/{chunk-FOC6F5B3-C0tU2UFl.js → chunk-FOC6F5B3-Dl6l1KAh.js} +1 -1
  316. package/payload/server/public/assets/chunk-FOC6F5B3-Dl6l1KAh.js.br +0 -0
  317. package/payload/server/public/assets/chunk-FOC6F5B3-Dl6l1KAh.js.gz +0 -0
  318. package/payload/server/public/assets/{chunk-ICPOFSXX-UPPu2OIq.js → chunk-ICPOFSXX-PnsGrqtx.js} +2 -2
  319. package/payload/server/public/assets/chunk-ICPOFSXX-PnsGrqtx.js.br +0 -0
  320. package/payload/server/public/assets/chunk-ICPOFSXX-PnsGrqtx.js.gz +0 -0
  321. package/payload/server/public/assets/{chunk-K5T4RW27-DIKxqyYw.js → chunk-K5T4RW27--g29_wjW.js} +1 -1
  322. package/payload/server/public/assets/chunk-K5T4RW27--g29_wjW.js.br +0 -0
  323. package/payload/server/public/assets/chunk-K5T4RW27--g29_wjW.js.gz +0 -0
  324. package/payload/server/public/assets/{chunk-KGLVRYIC-CiL4YVLo.js → chunk-KGLVRYIC-CI77ENeO.js} +1 -1
  325. package/payload/server/public/assets/chunk-KGLVRYIC-CI77ENeO.js.br +3 -0
  326. package/payload/server/public/assets/chunk-KGLVRYIC-CI77ENeO.js.gz +0 -0
  327. package/payload/server/public/assets/{chunk-LIHQZDEY-ejKezVlD.js → chunk-LIHQZDEY-CE-XByg6.js} +1 -1
  328. package/payload/server/public/assets/chunk-LIHQZDEY-CE-XByg6.js.br +0 -0
  329. package/payload/server/public/assets/chunk-LIHQZDEY-CE-XByg6.js.gz +0 -0
  330. package/payload/server/public/assets/{chunk-ORNJ4GCN-Cc0vqc-D.js → chunk-ORNJ4GCN-DkjJQQSm.js} +1 -1
  331. package/payload/server/public/assets/chunk-ORNJ4GCN-DkjJQQSm.js.br +0 -0
  332. package/payload/server/public/assets/chunk-ORNJ4GCN-DkjJQQSm.js.gz +0 -0
  333. package/payload/server/public/assets/{chunk-OYMX7WX6-Drxn1qG0.js → chunk-OYMX7WX6-DhogFeD7.js} +1 -1
  334. package/payload/server/public/assets/chunk-OYMX7WX6-DhogFeD7.js.br +0 -0
  335. package/payload/server/public/assets/chunk-OYMX7WX6-DhogFeD7.js.gz +0 -0
  336. package/payload/server/public/assets/chunk-QZHKN3VN-DnqqL1de.js +1 -0
  337. package/payload/server/public/assets/chunk-QZHKN3VN-DnqqL1de.js.br +0 -0
  338. package/payload/server/public/assets/chunk-QZHKN3VN-DnqqL1de.js.gz +0 -0
  339. package/payload/server/public/assets/{chunk-U2HBQHQK-DnbQIkRP.js → chunk-U2HBQHQK-CeaRXuiO.js} +1 -1
  340. package/payload/server/public/assets/chunk-U2HBQHQK-CeaRXuiO.js.br +0 -0
  341. package/payload/server/public/assets/chunk-U2HBQHQK-CeaRXuiO.js.gz +0 -0
  342. package/payload/server/public/assets/{chunk-X2U36JSP-CauTSVWg.js → chunk-X2U36JSP-BqxXeOqf.js} +1 -1
  343. package/payload/server/public/assets/chunk-X2U36JSP-BqxXeOqf.js.br +0 -0
  344. package/payload/server/public/assets/chunk-X2U36JSP-BqxXeOqf.js.gz +0 -0
  345. package/payload/server/public/assets/{chunk-XPW4576I-DZqqB9Zi.js → chunk-XPW4576I-DtqJwn2x.js} +1 -1
  346. package/payload/server/public/assets/chunk-XPW4576I-DtqJwn2x.js.br +0 -0
  347. package/payload/server/public/assets/chunk-XPW4576I-DtqJwn2x.js.gz +0 -0
  348. package/payload/server/public/assets/{chunk-YZCP3GAM-BGHo4Li-.js → chunk-YZCP3GAM-COBlEwQw.js} +1 -1
  349. package/payload/server/public/assets/chunk-YZCP3GAM-COBlEwQw.js.br +0 -0
  350. package/payload/server/public/assets/chunk-YZCP3GAM-COBlEwQw.js.gz +0 -0
  351. package/payload/server/public/assets/{chunk-ZZ45TVLE-DWGJKPd7.js → chunk-ZZ45TVLE-CcL088y6.js} +1 -1
  352. package/payload/server/public/assets/chunk-ZZ45TVLE-CcL088y6.js.br +0 -0
  353. package/payload/server/public/assets/chunk-ZZ45TVLE-CcL088y6.js.gz +0 -0
  354. package/payload/server/public/assets/classDiagram-6PBFFD2Q-Bc3P4dpc.js +1 -0
  355. package/payload/server/public/assets/classDiagram-6PBFFD2Q-Bc3P4dpc.js.br +0 -0
  356. package/payload/server/public/assets/classDiagram-6PBFFD2Q-Bc3P4dpc.js.gz +0 -0
  357. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DgEF_rR_.js +1 -0
  358. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DgEF_rR_.js.br +0 -0
  359. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DgEF_rR_.js.gz +0 -0
  360. package/payload/server/public/assets/clock-Yqf7Ke7I.js +1 -0
  361. package/payload/server/public/assets/clock-Yqf7Ke7I.js.br +0 -0
  362. package/payload/server/public/assets/clock-Yqf7Ke7I.js.gz +0 -0
  363. package/payload/server/public/assets/clone-B3vq32j7.js +1 -0
  364. package/payload/server/public/assets/{cose-bilkent-S5V4N54A-D-95BzXL.js → cose-bilkent-S5V4N54A-kEHVkDNn.js} +1 -1
  365. package/payload/server/public/assets/cose-bilkent-S5V4N54A-kEHVkDNn.js.br +0 -0
  366. package/payload/server/public/assets/cose-bilkent-S5V4N54A-kEHVkDNn.js.gz +0 -0
  367. package/payload/server/public/assets/{dagre-BZYNBHvT.js → dagre-D2wUw1zC.js} +1 -1
  368. package/payload/server/public/assets/dagre-D2wUw1zC.js.br +0 -0
  369. package/payload/server/public/assets/dagre-D2wUw1zC.js.gz +0 -0
  370. package/payload/server/public/assets/{dagre-KV5264BT-DyU4HQLQ.js → dagre-KV5264BT-BWfTDwEs.js} +1 -1
  371. package/payload/server/public/assets/dagre-KV5264BT-BWfTDwEs.js.br +0 -0
  372. package/payload/server/public/assets/dagre-KV5264BT-BWfTDwEs.js.gz +0 -0
  373. package/payload/server/public/assets/data-RmnKj5nC.js +1 -0
  374. package/payload/server/public/assets/data-RmnKj5nC.js.br +2 -0
  375. package/payload/server/public/assets/data-RmnKj5nC.js.gz +0 -0
  376. package/payload/server/public/assets/{diagram-5BDNPKRD-CCttJ9XA.js → diagram-5BDNPKRD-Tl9dS8w0.js} +1 -1
  377. package/payload/server/public/assets/diagram-5BDNPKRD-Tl9dS8w0.js.br +0 -0
  378. package/payload/server/public/assets/diagram-5BDNPKRD-Tl9dS8w0.js.gz +0 -0
  379. package/payload/server/public/assets/{diagram-G4DWMVQ6-DvkpgSLO.js → diagram-G4DWMVQ6-CeSe6TMu.js} +1 -1
  380. package/payload/server/public/assets/diagram-G4DWMVQ6-CeSe6TMu.js.br +0 -0
  381. package/payload/server/public/assets/diagram-G4DWMVQ6-CeSe6TMu.js.gz +0 -0
  382. package/payload/server/public/assets/{diagram-MMDJMWI5-DHmW5Y9k.js → diagram-MMDJMWI5-DYBNJCmk.js} +1 -1
  383. package/payload/server/public/assets/diagram-MMDJMWI5-DYBNJCmk.js.br +0 -0
  384. package/payload/server/public/assets/diagram-MMDJMWI5-DYBNJCmk.js.gz +0 -0
  385. package/payload/server/public/assets/{diagram-TYMM5635-C6T4hwzO.js → diagram-TYMM5635-BmpUGltx.js} +1 -1
  386. package/payload/server/public/assets/diagram-TYMM5635-BmpUGltx.js.br +0 -0
  387. package/payload/server/public/assets/diagram-TYMM5635-BmpUGltx.js.gz +0 -0
  388. package/payload/server/public/assets/{erDiagram-SMLLAGMA-5v_o7s3T.js → erDiagram-SMLLAGMA-DuwuNGqx.js} +1 -1
  389. package/payload/server/public/assets/erDiagram-SMLLAGMA-DuwuNGqx.js.br +0 -0
  390. package/payload/server/public/assets/erDiagram-SMLLAGMA-DuwuNGqx.js.gz +0 -0
  391. package/payload/server/public/assets/file-download-CiGklOfA.js +1 -0
  392. package/payload/server/public/assets/file-download-CiGklOfA.js.br +0 -0
  393. package/payload/server/public/assets/file-download-CiGklOfA.js.gz +0 -0
  394. package/payload/server/public/assets/{file-text-dYBnXNEX.js → file-text-XjJPULAZ.js} +1 -1
  395. package/payload/server/public/assets/file-text-XjJPULAZ.js.br +0 -0
  396. package/payload/server/public/assets/file-text-XjJPULAZ.js.gz +0 -0
  397. package/payload/server/public/assets/{flatten-BtIc9jX7.js → flatten-Bu-b1uTY.js} +1 -1
  398. package/payload/server/public/assets/flatten-Bu-b1uTY.js.br +0 -0
  399. package/payload/server/public/assets/flatten-Bu-b1uTY.js.gz +0 -0
  400. package/payload/server/public/assets/{flowDiagram-DWJPFMVM-3UhCDsjt.js → flowDiagram-DWJPFMVM-Bpp8P6Ba.js} +1 -1
  401. package/payload/server/public/assets/flowDiagram-DWJPFMVM-Bpp8P6Ba.js.br +0 -0
  402. package/payload/server/public/assets/flowDiagram-DWJPFMVM-Bpp8P6Ba.js.gz +0 -0
  403. package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-F2zgHIIQ.js → ganttDiagram-T4ZO3ILL-CE6ppjB4.js} +1 -1
  404. package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-CE6ppjB4.js.br +0 -0
  405. package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-CE6ppjB4.js.gz +0 -0
  406. package/payload/server/public/assets/gitGraph-7Q5UKJZL-B0OUwOUx.js +1 -0
  407. package/payload/server/public/assets/gitGraph-7Q5UKJZL-B0OUwOUx.js.br +0 -0
  408. package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-oQc1N3dT.js → gitGraphDiagram-UUTBAWPF-BdK1GjPr.js} +1 -1
  409. package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-BdK1GjPr.js.br +0 -0
  410. package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-BdK1GjPr.js.gz +0 -0
  411. package/payload/server/public/assets/{graph-CDyzd1Et.js → graph-BjHJ0z_6.js} +3 -3
  412. package/payload/server/public/assets/graph-BjHJ0z_6.js.br +0 -0
  413. package/payload/server/public/assets/graph-BjHJ0z_6.js.gz +0 -0
  414. package/payload/server/public/assets/graph-labels-D-0u37KA.js +1 -0
  415. package/payload/server/public/assets/graph-labels-D-0u37KA.js.br +0 -0
  416. package/payload/server/public/assets/graph-labels-D-0u37KA.js.gz +0 -0
  417. package/payload/server/public/assets/{graphlib-DY4-AT2Q.js → graphlib-CHEXylyU.js} +1 -1
  418. package/payload/server/public/assets/graphlib-CHEXylyU.js.br +0 -0
  419. package/payload/server/public/assets/graphlib-CHEXylyU.js.gz +0 -0
  420. package/payload/server/public/assets/info-OMHHGYJF-C_8TwPDe.js +1 -0
  421. package/payload/server/public/assets/info-OMHHGYJF-C_8TwPDe.js.br +0 -0
  422. package/payload/server/public/assets/infoDiagram-42DDH7IO-msfwyvbV.js +2 -0
  423. package/payload/server/public/assets/infoDiagram-42DDH7IO-msfwyvbV.js.br +0 -0
  424. package/payload/server/public/assets/infoDiagram-42DDH7IO-msfwyvbV.js.gz +0 -0
  425. package/payload/server/public/assets/{isEmpty-Bu4fZ8Kf.js → isEmpty-CjH0UASp.js} +1 -1
  426. package/payload/server/public/assets/isEmpty-CjH0UASp.js.br +0 -0
  427. package/payload/server/public/assets/isEmpty-CjH0UASp.js.gz +0 -0
  428. package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-wJhSOkuw.js → ishikawaDiagram-UXIWVN3A-CgkVZ4-3.js} +1 -1
  429. package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-CgkVZ4-3.js.br +0 -0
  430. package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-CgkVZ4-3.js.gz +0 -0
  431. package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-DgadC6Pz.js → journeyDiagram-VCZTEJTY-ByUPv8q6.js} +1 -1
  432. package/payload/server/public/assets/journeyDiagram-VCZTEJTY-ByUPv8q6.js.br +0 -0
  433. package/payload/server/public/assets/journeyDiagram-VCZTEJTY-ByUPv8q6.js.gz +0 -0
  434. package/payload/server/public/assets/{kanban-definition-6JOO6SKY-Bs4nQqXI.js → kanban-definition-6JOO6SKY-CFinqhpu.js} +1 -1
  435. package/payload/server/public/assets/kanban-definition-6JOO6SKY-CFinqhpu.js.br +0 -0
  436. package/payload/server/public/assets/kanban-definition-6JOO6SKY-CFinqhpu.js.gz +0 -0
  437. package/payload/server/public/assets/{line-Bnmxy1hO.js → line-Y4ns5Ghi.js} +1 -1
  438. package/payload/server/public/assets/line-Y4ns5Ghi.js.br +0 -0
  439. package/payload/server/public/assets/line-Y4ns5Ghi.js.gz +0 -0
  440. package/payload/server/public/assets/{linear-RvwZxFzh.js → linear-l39GooQ5.js} +1 -1
  441. package/payload/server/public/assets/linear-l39GooQ5.js.br +0 -0
  442. package/payload/server/public/assets/linear-l39GooQ5.js.gz +0 -0
  443. package/payload/server/public/assets/{maximize-2-M-iSaznd.js → maximize-2-BJ9S-nfS.js} +1 -1
  444. package/payload/server/public/assets/maximize-2-BJ9S-nfS.js.br +0 -0
  445. package/payload/server/public/assets/maximize-2-BJ9S-nfS.js.gz +0 -0
  446. package/payload/server/public/assets/{mermaid-parser.core-DeNV8RtA.js → mermaid-parser.core-5w0T1dRj.js} +2 -2
  447. package/payload/server/public/assets/mermaid-parser.core-5w0T1dRj.js.br +0 -0
  448. package/payload/server/public/assets/mermaid-parser.core-5w0T1dRj.js.gz +0 -0
  449. package/payload/server/public/assets/{mermaid.core-BU9IiSCP.js → mermaid.core-DBADY5VW.js} +3 -3
  450. package/payload/server/public/assets/mermaid.core-DBADY5VW.js.br +0 -0
  451. package/payload/server/public/assets/mermaid.core-DBADY5VW.js.gz +0 -0
  452. package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-D1PMUxxm.js → mindmap-definition-QFDTVHPH-rHz37loq.js} +1 -1
  453. package/payload/server/public/assets/mindmap-definition-QFDTVHPH-rHz37loq.js.br +0 -0
  454. package/payload/server/public/assets/mindmap-definition-QFDTVHPH-rHz37loq.js.gz +0 -0
  455. package/payload/server/public/assets/operator-Cay4rOOK.js +1 -0
  456. package/payload/server/public/assets/operator-Cay4rOOK.js.br +0 -0
  457. package/payload/server/public/assets/operator-Cay4rOOK.js.gz +0 -0
  458. package/payload/server/public/assets/{ordinal-C2TEWKNu.js → ordinal-D6D6WcTC.js} +1 -1
  459. package/payload/server/public/assets/ordinal-D6D6WcTC.js.br +0 -0
  460. package/payload/server/public/assets/ordinal-D6D6WcTC.js.gz +0 -0
  461. package/payload/server/public/assets/packet-4T2RLAQJ-CCQdbIqO.js +1 -0
  462. package/payload/server/public/assets/packet-4T2RLAQJ-CCQdbIqO.js.br +0 -0
  463. package/payload/server/public/assets/{page-CZ-73FAk.js → page-Cci_j_y7.js} +4 -4
  464. package/payload/server/public/assets/page-Cci_j_y7.js.br +0 -0
  465. package/payload/server/public/assets/page-Cci_j_y7.js.gz +0 -0
  466. package/payload/server/public/assets/page-shuh4ES9.js +1 -0
  467. package/payload/server/public/assets/page-shuh4ES9.js.br +0 -0
  468. package/payload/server/public/assets/page-shuh4ES9.js.gz +0 -0
  469. package/payload/server/public/assets/{pdf-render-C257cidb.js → pdf-render-BSgBp8Fr.js} +1 -1
  470. package/payload/server/public/assets/pdf-render-BSgBp8Fr.js.br +0 -0
  471. package/payload/server/public/assets/pdf-render-BSgBp8Fr.js.gz +0 -0
  472. package/payload/server/public/assets/pie-ZZUOXDRM-Bdw3Iqs7.js +1 -0
  473. package/payload/server/public/assets/pie-ZZUOXDRM-Bdw3Iqs7.js.br +0 -0
  474. package/payload/server/public/assets/{pieDiagram-DEJITSTG-BzdNzoKA.js → pieDiagram-DEJITSTG-as0e_DSH.js} +1 -1
  475. package/payload/server/public/assets/pieDiagram-DEJITSTG-as0e_DSH.js.br +0 -0
  476. package/payload/server/public/assets/pieDiagram-DEJITSTG-as0e_DSH.js.gz +0 -0
  477. package/payload/server/public/assets/{public-CN-ltC8x.js → public-BbJcQGsO.js} +1 -1
  478. package/payload/server/public/assets/public-BbJcQGsO.js.br +0 -0
  479. package/payload/server/public/assets/public-BbJcQGsO.js.gz +0 -0
  480. package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-oFr1MJRO.js → quadrantDiagram-34T5L4WZ-B4t8HO9J.js} +1 -1
  481. package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-B4t8HO9J.js.br +0 -0
  482. package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-B4t8HO9J.js.gz +0 -0
  483. package/payload/server/public/assets/radar-PYXPWWZC-D3FUdA3r.js +1 -0
  484. package/payload/server/public/assets/radar-PYXPWWZC-D3FUdA3r.js.br +0 -0
  485. package/payload/server/public/assets/{reduce-BGpN5lgn.js → reduce-BtXXK8Ma.js} +1 -1
  486. package/payload/server/public/assets/reduce-BtXXK8Ma.js.br +0 -0
  487. package/payload/server/public/assets/reduce-BtXXK8Ma.js.gz +0 -0
  488. package/payload/server/public/assets/{requirementDiagram-MS252O5E-C9QBQxDh.js → requirementDiagram-MS252O5E-yxh30zHX.js} +1 -1
  489. package/payload/server/public/assets/requirementDiagram-MS252O5E-yxh30zHX.js.br +0 -0
  490. package/payload/server/public/assets/requirementDiagram-MS252O5E-yxh30zHX.js.gz +0 -0
  491. package/payload/server/public/assets/{rotate-ccw-Buopsc22.js → rotate-ccw-jeSVwUAv.js} +1 -1
  492. package/payload/server/public/assets/rotate-ccw-jeSVwUAv.js.br +0 -0
  493. package/payload/server/public/assets/rotate-ccw-jeSVwUAv.js.gz +0 -0
  494. package/payload/server/public/assets/routines-D3M1Wh3a.js +1 -0
  495. package/payload/server/public/assets/routines-D3M1Wh3a.js.br +0 -0
  496. package/payload/server/public/assets/routines-D3M1Wh3a.js.gz +0 -0
  497. package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-c_y3bvVv.js → sankeyDiagram-XADWPNL6-j-k9Wfty.js} +1 -1
  498. package/payload/server/public/assets/sankeyDiagram-XADWPNL6-j-k9Wfty.js.br +0 -0
  499. package/payload/server/public/assets/sankeyDiagram-XADWPNL6-j-k9Wfty.js.gz +0 -0
  500. package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-YwlCBPHE.js → sequenceDiagram-FGHM5R23-DGLgcLhC.js} +1 -1
  501. package/payload/server/public/assets/sequenceDiagram-FGHM5R23-DGLgcLhC.js.br +0 -0
  502. package/payload/server/public/assets/sequenceDiagram-FGHM5R23-DGLgcLhC.js.gz +0 -0
  503. package/payload/server/public/assets/{skills-DiiuVzDK.js → skills-Bhej2ub1.js} +1 -1
  504. package/payload/server/public/assets/skills-Bhej2ub1.js.br +0 -0
  505. package/payload/server/public/assets/skills-Bhej2ub1.js.gz +0 -0
  506. package/payload/server/public/assets/{stateDiagram-FHFEXIEX-BFE3e-FM.js → stateDiagram-FHFEXIEX-C9p1OUMI.js} +1 -1
  507. package/payload/server/public/assets/stateDiagram-FHFEXIEX-C9p1OUMI.js.br +0 -0
  508. package/payload/server/public/assets/stateDiagram-FHFEXIEX-C9p1OUMI.js.gz +0 -0
  509. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Bf808Apk.js +1 -0
  510. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Bf808Apk.js.br +0 -0
  511. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Bf808Apk.js.gz +0 -0
  512. package/payload/server/public/assets/tasks-qY-dtOI2.js +1 -0
  513. package/payload/server/public/assets/tasks-qY-dtOI2.js.br +0 -0
  514. package/payload/server/public/assets/tasks-qY-dtOI2.js.gz +0 -0
  515. package/payload/server/public/assets/{time-entry-format-BBokCF-D.js → time-entry-format-r5UY9rjG.js} +1 -1
  516. package/payload/server/public/assets/time-entry-format-r5UY9rjG.js.br +0 -0
  517. package/payload/server/public/assets/time-entry-format-r5UY9rjG.js.gz +0 -0
  518. package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-azqhmRwZ.js → timeline-definition-GMOUNBTQ-B1g7pgkH.js} +1 -1
  519. package/payload/server/public/assets/timeline-definition-GMOUNBTQ-B1g7pgkH.js.br +0 -0
  520. package/payload/server/public/assets/timeline-definition-GMOUNBTQ-B1g7pgkH.js.gz +0 -0
  521. package/payload/server/public/assets/treeView-SZITEDCU-DetKw0D0.js +1 -0
  522. package/payload/server/public/assets/treeView-SZITEDCU-DetKw0D0.js.br +0 -0
  523. package/payload/server/public/assets/treemap-W4RFUUIX-zQkIANxW.js +1 -0
  524. package/payload/server/public/assets/treemap-W4RFUUIX-zQkIANxW.js.br +0 -0
  525. package/payload/server/public/assets/{triangle-alert-C_AcpTW5.js → triangle-alert--PCKaewD.js} +1 -1
  526. package/payload/server/public/assets/triangle-alert--PCKaewD.js.br +2 -0
  527. package/payload/server/public/assets/triangle-alert--PCKaewD.js.gz +0 -0
  528. package/payload/server/public/assets/{useCopyFeedback-TdimmPVR.js → useCopyFeedback-Dg5lNgqH.js} +1 -1
  529. package/payload/server/public/assets/useCopyFeedback-Dg5lNgqH.js.br +0 -0
  530. package/payload/server/public/assets/useCopyFeedback-Dg5lNgqH.js.gz +0 -0
  531. package/payload/server/public/assets/useSubAccountSwitcher-BYfe9vj8.css +1 -0
  532. package/payload/server/public/assets/useSubAccountSwitcher-BYfe9vj8.css.br +0 -0
  533. package/payload/server/public/assets/useSubAccountSwitcher-BYfe9vj8.css.gz +0 -0
  534. package/payload/server/public/assets/useSubAccountSwitcher-CnpeWIYq.js +14 -0
  535. package/payload/server/public/assets/useSubAccountSwitcher-CnpeWIYq.js.br +0 -0
  536. package/payload/server/public/assets/useSubAccountSwitcher-CnpeWIYq.js.gz +0 -0
  537. package/payload/server/public/assets/{useVoiceRecorder-BT2738ZS.js → useVoiceRecorder-BY6ZsGMH.js} +2 -2
  538. package/payload/server/public/assets/useVoiceRecorder-BY6ZsGMH.js.br +0 -0
  539. package/payload/server/public/assets/useVoiceRecorder-BY6ZsGMH.js.gz +0 -0
  540. package/payload/server/public/assets/{vennDiagram-DHZGUBPP-Da2RfFs8.js → vennDiagram-DHZGUBPP-D2ZjFfh4.js} +1 -1
  541. package/payload/server/public/assets/vennDiagram-DHZGUBPP-D2ZjFfh4.js.br +0 -0
  542. package/payload/server/public/assets/vennDiagram-DHZGUBPP-D2ZjFfh4.js.gz +0 -0
  543. package/payload/server/public/assets/wardley-RL74JXVD-DkQV3DvB.js +1 -0
  544. package/payload/server/public/assets/wardley-RL74JXVD-DkQV3DvB.js.br +0 -0
  545. package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-HdrdBYES.js → wardleyDiagram-NUSXRM2D-BFAhfkD8.js} +1 -1
  546. package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-BFAhfkD8.js.br +0 -0
  547. package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-BFAhfkD8.js.gz +0 -0
  548. package/payload/server/public/assets/{wrench-B51s5kGA.js → wrench-Bw1FMolk.js} +1 -1
  549. package/payload/server/public/assets/wrench-Bw1FMolk.js.br +0 -0
  550. package/payload/server/public/assets/wrench-Bw1FMolk.js.gz +0 -0
  551. package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-DMk6rTcQ.js → xychartDiagram-5P7HB3ND-Dt94h2RQ.js} +1 -1
  552. package/payload/server/public/assets/xychartDiagram-5P7HB3ND-Dt94h2RQ.js.br +0 -0
  553. package/payload/server/public/assets/xychartDiagram-5P7HB3ND-Dt94h2RQ.js.gz +0 -0
  554. package/payload/server/public/brand-defaults.css +1 -0
  555. package/payload/server/public/browser.html +4 -4
  556. package/payload/server/public/calendar.html +7 -7
  557. package/payload/server/public/chat.html +14 -14
  558. package/payload/server/public/data.html +13 -12
  559. package/payload/server/public/graph.html +9 -9
  560. package/payload/server/public/index.html +16 -15
  561. package/payload/server/public/operator.html +15 -15
  562. package/payload/server/public/public.html +14 -14
  563. package/payload/server/public/routines.html +7 -6
  564. package/payload/server/public/skills.html +5 -5
  565. package/payload/server/public/tasks.html +6 -6
  566. package/payload/server/server.js +6623 -5763
  567. package/payload/server/public/assets/AdminLoginScreens-zc2_qqh-.js.br +0 -0
  568. package/payload/server/public/assets/AdminLoginScreens-zc2_qqh-.js.gz +0 -0
  569. package/payload/server/public/assets/AdminShell-IGUdTx5q.js +0 -2
  570. package/payload/server/public/assets/AdminShell-IGUdTx5q.js.br +0 -0
  571. package/payload/server/public/assets/AdminShell-IGUdTx5q.js.gz +0 -0
  572. package/payload/server/public/assets/activity-DVgO8YuM.js.br +0 -0
  573. package/payload/server/public/assets/activity-DVgO8YuM.js.gz +0 -0
  574. package/payload/server/public/assets/admin-xtpM7fgl.js +0 -1
  575. package/payload/server/public/assets/admin-xtpM7fgl.js.br +0 -0
  576. package/payload/server/public/assets/admin-xtpM7fgl.js.gz +0 -0
  577. package/payload/server/public/assets/agents-P0nTIxo-.js +0 -1
  578. package/payload/server/public/assets/agents-P0nTIxo-.js.br +0 -0
  579. package/payload/server/public/assets/agents-P0nTIxo-.js.gz +0 -0
  580. package/payload/server/public/assets/arc-DaI5MLTq.js.br +0 -0
  581. package/payload/server/public/assets/arc-DaI5MLTq.js.gz +0 -0
  582. package/payload/server/public/assets/architecture-YZFGNWBL-DWZIX5aV.js +0 -1
  583. package/payload/server/public/assets/architecture-YZFGNWBL-DWZIX5aV.js.br +0 -0
  584. package/payload/server/public/assets/architectureDiagram-Q4EWVU46-CBGVUEN9.js.br +0 -0
  585. package/payload/server/public/assets/architectureDiagram-Q4EWVU46-CBGVUEN9.js.gz +0 -0
  586. package/payload/server/public/assets/blockDiagram-DXYQGD6D-DS6dS4GZ.js.br +0 -0
  587. package/payload/server/public/assets/blockDiagram-DXYQGD6D-DS6dS4GZ.js.gz +0 -0
  588. package/payload/server/public/assets/browser-Mw7DY3ft.js.br +0 -0
  589. package/payload/server/public/assets/browser-Mw7DY3ft.js.gz +0 -0
  590. package/payload/server/public/assets/c4Diagram-AHTNJAMY-hBSBUZPt.js.br +0 -0
  591. package/payload/server/public/assets/calendar-B9gvL_1_.js.br +0 -0
  592. package/payload/server/public/assets/calendar-B9gvL_1_.js.gz +0 -0
  593. package/payload/server/public/assets/channel-BEokjAeE.js +0 -1
  594. package/payload/server/public/assets/channel-BEokjAeE.js.br +0 -0
  595. package/payload/server/public/assets/chat-DBGqh4wg.js +0 -1
  596. package/payload/server/public/assets/chat-DBGqh4wg.js.br +0 -2
  597. package/payload/server/public/assets/chat-DBGqh4wg.js.gz +0 -0
  598. package/payload/server/public/assets/chevron-left-Bl4vpOM0.js +0 -1
  599. package/payload/server/public/assets/chevron-left-Bl4vpOM0.js.br +0 -0
  600. package/payload/server/public/assets/chevron-right-BExigCnp.js +0 -1
  601. package/payload/server/public/assets/chevron-right-BExigCnp.js.br +0 -0
  602. package/payload/server/public/assets/chunk-2KRD3SAO-B6koUoB7.js.br +0 -0
  603. package/payload/server/public/assets/chunk-2KRD3SAO-B6koUoB7.js.gz +0 -0
  604. package/payload/server/public/assets/chunk-336JU56O-BF6BRh8u.js.br +0 -0
  605. package/payload/server/public/assets/chunk-336JU56O-BF6BRh8u.js.gz +0 -0
  606. package/payload/server/public/assets/chunk-426QAEUC-pbQ4PWBU.js +0 -1
  607. package/payload/server/public/assets/chunk-426QAEUC-pbQ4PWBU.js.br +0 -0
  608. package/payload/server/public/assets/chunk-426QAEUC-pbQ4PWBU.js.gz +0 -0
  609. package/payload/server/public/assets/chunk-4BX2VUAB-7sO95xR2.js.br +0 -0
  610. package/payload/server/public/assets/chunk-4BX2VUAB-7sO95xR2.js.gz +0 -0
  611. package/payload/server/public/assets/chunk-4TB4RGXK-GCTndJYx.js.br +0 -0
  612. package/payload/server/public/assets/chunk-4TB4RGXK-GCTndJYx.js.gz +0 -0
  613. package/payload/server/public/assets/chunk-55IACEB6-ggIJf_TC.js.br +0 -0
  614. package/payload/server/public/assets/chunk-55IACEB6-ggIJf_TC.js.gz +0 -0
  615. package/payload/server/public/assets/chunk-5FUZZQ4R-DeGmkimt.js.br +0 -0
  616. package/payload/server/public/assets/chunk-5FUZZQ4R-DeGmkimt.js.gz +0 -0
  617. package/payload/server/public/assets/chunk-5PVQY5BW-aFIQKk_U.js.br +0 -0
  618. package/payload/server/public/assets/chunk-5PVQY5BW-aFIQKk_U.js.gz +0 -0
  619. package/payload/server/public/assets/chunk-67CJDMHE-LS8rUbii.js.br +0 -2
  620. package/payload/server/public/assets/chunk-67CJDMHE-LS8rUbii.js.gz +0 -0
  621. package/payload/server/public/assets/chunk-7N4EOEYR-JKOVngS0.js.br +0 -2
  622. package/payload/server/public/assets/chunk-7N4EOEYR-JKOVngS0.js.gz +0 -0
  623. package/payload/server/public/assets/chunk-AA7GKIK3-CoXnTVK6.js.br +0 -0
  624. package/payload/server/public/assets/chunk-AA7GKIK3-CoXnTVK6.js.gz +0 -0
  625. package/payload/server/public/assets/chunk-BSJP7CBP-CcsqObFg.js.br +0 -0
  626. package/payload/server/public/assets/chunk-BSJP7CBP-CcsqObFg.js.gz +0 -0
  627. package/payload/server/public/assets/chunk-CIAEETIT-CpsybR7q.js.br +0 -0
  628. package/payload/server/public/assets/chunk-CIAEETIT-CpsybR7q.js.gz +0 -0
  629. package/payload/server/public/assets/chunk-EDXVE4YY-BZ2I9PSq.js.br +0 -0
  630. package/payload/server/public/assets/chunk-EDXVE4YY-BZ2I9PSq.js.gz +0 -0
  631. package/payload/server/public/assets/chunk-ENJZ2VHE-DbTwt6OZ.js.br +0 -0
  632. package/payload/server/public/assets/chunk-ENJZ2VHE-DbTwt6OZ.js.gz +0 -0
  633. package/payload/server/public/assets/chunk-FMBD7UC4-D27VnSCa.js.br +0 -0
  634. package/payload/server/public/assets/chunk-FMBD7UC4-D27VnSCa.js.gz +0 -0
  635. package/payload/server/public/assets/chunk-FOC6F5B3-C0tU2UFl.js.br +0 -0
  636. package/payload/server/public/assets/chunk-FOC6F5B3-C0tU2UFl.js.gz +0 -0
  637. package/payload/server/public/assets/chunk-ICPOFSXX-UPPu2OIq.js.br +0 -0
  638. package/payload/server/public/assets/chunk-ICPOFSXX-UPPu2OIq.js.gz +0 -0
  639. package/payload/server/public/assets/chunk-K5T4RW27-DIKxqyYw.js.br +0 -0
  640. package/payload/server/public/assets/chunk-K5T4RW27-DIKxqyYw.js.gz +0 -0
  641. package/payload/server/public/assets/chunk-KGLVRYIC-CiL4YVLo.js.br +0 -0
  642. package/payload/server/public/assets/chunk-KGLVRYIC-CiL4YVLo.js.gz +0 -0
  643. package/payload/server/public/assets/chunk-LIHQZDEY-ejKezVlD.js.br +0 -0
  644. package/payload/server/public/assets/chunk-LIHQZDEY-ejKezVlD.js.gz +0 -0
  645. package/payload/server/public/assets/chunk-ORNJ4GCN-Cc0vqc-D.js.br +0 -0
  646. package/payload/server/public/assets/chunk-ORNJ4GCN-Cc0vqc-D.js.gz +0 -0
  647. package/payload/server/public/assets/chunk-OYMX7WX6-Drxn1qG0.js.br +0 -0
  648. package/payload/server/public/assets/chunk-OYMX7WX6-Drxn1qG0.js.gz +0 -0
  649. package/payload/server/public/assets/chunk-QZHKN3VN-Dhlh7Pkk.js +0 -1
  650. package/payload/server/public/assets/chunk-QZHKN3VN-Dhlh7Pkk.js.br +0 -0
  651. package/payload/server/public/assets/chunk-QZHKN3VN-Dhlh7Pkk.js.gz +0 -0
  652. package/payload/server/public/assets/chunk-U2HBQHQK-DnbQIkRP.js.br +0 -0
  653. package/payload/server/public/assets/chunk-U2HBQHQK-DnbQIkRP.js.gz +0 -0
  654. package/payload/server/public/assets/chunk-X2U36JSP-CauTSVWg.js.br +0 -0
  655. package/payload/server/public/assets/chunk-X2U36JSP-CauTSVWg.js.gz +0 -0
  656. package/payload/server/public/assets/chunk-XPW4576I-DZqqB9Zi.js.br +0 -0
  657. package/payload/server/public/assets/chunk-XPW4576I-DZqqB9Zi.js.gz +0 -0
  658. package/payload/server/public/assets/chunk-YZCP3GAM-BGHo4Li-.js.br +0 -0
  659. package/payload/server/public/assets/chunk-YZCP3GAM-BGHo4Li-.js.gz +0 -0
  660. package/payload/server/public/assets/chunk-ZZ45TVLE-DWGJKPd7.js.br +0 -0
  661. package/payload/server/public/assets/chunk-ZZ45TVLE-DWGJKPd7.js.gz +0 -0
  662. package/payload/server/public/assets/classDiagram-6PBFFD2Q-D2z_ZV1x.js +0 -1
  663. package/payload/server/public/assets/classDiagram-6PBFFD2Q-D2z_ZV1x.js.br +0 -0
  664. package/payload/server/public/assets/classDiagram-6PBFFD2Q-D2z_ZV1x.js.gz +0 -0
  665. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BJwJoNEK.js +0 -1
  666. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BJwJoNEK.js.br +0 -0
  667. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BJwJoNEK.js.gz +0 -0
  668. package/payload/server/public/assets/clock-D8TJvgJC.js +0 -1
  669. package/payload/server/public/assets/clock-D8TJvgJC.js.br +0 -0
  670. package/payload/server/public/assets/clone-Bn7XXVhr.js +0 -1
  671. package/payload/server/public/assets/clone-Bn7XXVhr.js.br +0 -0
  672. package/payload/server/public/assets/cose-bilkent-S5V4N54A-D-95BzXL.js.br +0 -0
  673. package/payload/server/public/assets/cose-bilkent-S5V4N54A-D-95BzXL.js.gz +0 -0
  674. package/payload/server/public/assets/dagre-BZYNBHvT.js.br +0 -0
  675. package/payload/server/public/assets/dagre-BZYNBHvT.js.gz +0 -0
  676. package/payload/server/public/assets/dagre-KV5264BT-DyU4HQLQ.js.br +0 -0
  677. package/payload/server/public/assets/dagre-KV5264BT-DyU4HQLQ.js.gz +0 -0
  678. package/payload/server/public/assets/data-HfFSxaC2.js +0 -1
  679. package/payload/server/public/assets/data-HfFSxaC2.js.br +0 -0
  680. package/payload/server/public/assets/data-HfFSxaC2.js.gz +0 -0
  681. package/payload/server/public/assets/diagram-5BDNPKRD-CCttJ9XA.js.br +0 -0
  682. package/payload/server/public/assets/diagram-5BDNPKRD-CCttJ9XA.js.gz +0 -0
  683. package/payload/server/public/assets/diagram-G4DWMVQ6-DvkpgSLO.js.br +0 -0
  684. package/payload/server/public/assets/diagram-G4DWMVQ6-DvkpgSLO.js.gz +0 -0
  685. package/payload/server/public/assets/diagram-MMDJMWI5-DHmW5Y9k.js.br +0 -0
  686. package/payload/server/public/assets/diagram-MMDJMWI5-DHmW5Y9k.js.gz +0 -0
  687. package/payload/server/public/assets/diagram-TYMM5635-C6T4hwzO.js.br +0 -0
  688. package/payload/server/public/assets/diagram-TYMM5635-C6T4hwzO.js.gz +0 -0
  689. package/payload/server/public/assets/erDiagram-SMLLAGMA-5v_o7s3T.js.br +0 -0
  690. package/payload/server/public/assets/erDiagram-SMLLAGMA-5v_o7s3T.js.gz +0 -0
  691. package/payload/server/public/assets/file-text-dYBnXNEX.js.br +0 -0
  692. package/payload/server/public/assets/file-text-dYBnXNEX.js.gz +0 -0
  693. package/payload/server/public/assets/flatten-BtIc9jX7.js.br +0 -0
  694. package/payload/server/public/assets/flatten-BtIc9jX7.js.gz +0 -0
  695. package/payload/server/public/assets/flowDiagram-DWJPFMVM-3UhCDsjt.js.br +0 -0
  696. package/payload/server/public/assets/flowDiagram-DWJPFMVM-3UhCDsjt.js.gz +0 -0
  697. package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-F2zgHIIQ.js.br +0 -0
  698. package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-F2zgHIIQ.js.gz +0 -0
  699. package/payload/server/public/assets/gitGraph-7Q5UKJZL-C-FvNTHZ.js +0 -1
  700. package/payload/server/public/assets/gitGraph-7Q5UKJZL-C-FvNTHZ.js.br +0 -0
  701. package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-oQc1N3dT.js.br +0 -0
  702. package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-oQc1N3dT.js.gz +0 -0
  703. package/payload/server/public/assets/graph-CDyzd1Et.js.br +0 -0
  704. package/payload/server/public/assets/graph-CDyzd1Et.js.gz +0 -0
  705. package/payload/server/public/assets/graph-labels-D1LkKiJr.js +0 -1
  706. package/payload/server/public/assets/graph-labels-D1LkKiJr.js.br +0 -0
  707. package/payload/server/public/assets/graph-labels-D1LkKiJr.js.gz +0 -0
  708. package/payload/server/public/assets/graphlib-DY4-AT2Q.js.br +0 -0
  709. package/payload/server/public/assets/graphlib-DY4-AT2Q.js.gz +0 -0
  710. package/payload/server/public/assets/info-OMHHGYJF-BjLPgHAC.js +0 -1
  711. package/payload/server/public/assets/info-OMHHGYJF-BjLPgHAC.js.br +0 -0
  712. package/payload/server/public/assets/infoDiagram-42DDH7IO-CXNKLTui.js +0 -2
  713. package/payload/server/public/assets/infoDiagram-42DDH7IO-CXNKLTui.js.br +0 -0
  714. package/payload/server/public/assets/infoDiagram-42DDH7IO-CXNKLTui.js.gz +0 -0
  715. package/payload/server/public/assets/isEmpty-Bu4fZ8Kf.js.br +0 -0
  716. package/payload/server/public/assets/isEmpty-Bu4fZ8Kf.js.gz +0 -0
  717. package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-wJhSOkuw.js.br +0 -0
  718. package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-wJhSOkuw.js.gz +0 -0
  719. package/payload/server/public/assets/journeyDiagram-VCZTEJTY-DgadC6Pz.js.br +0 -0
  720. package/payload/server/public/assets/journeyDiagram-VCZTEJTY-DgadC6Pz.js.gz +0 -0
  721. package/payload/server/public/assets/kanban-definition-6JOO6SKY-Bs4nQqXI.js.br +0 -0
  722. package/payload/server/public/assets/kanban-definition-6JOO6SKY-Bs4nQqXI.js.gz +0 -0
  723. package/payload/server/public/assets/line-Bnmxy1hO.js.br +0 -0
  724. package/payload/server/public/assets/line-Bnmxy1hO.js.gz +0 -0
  725. package/payload/server/public/assets/linear-RvwZxFzh.js.br +0 -0
  726. package/payload/server/public/assets/linear-RvwZxFzh.js.gz +0 -0
  727. package/payload/server/public/assets/maximize-2-M-iSaznd.js.br +0 -0
  728. package/payload/server/public/assets/maximize-2-M-iSaznd.js.gz +0 -0
  729. package/payload/server/public/assets/mermaid-parser.core-DeNV8RtA.js.br +0 -0
  730. package/payload/server/public/assets/mermaid-parser.core-DeNV8RtA.js.gz +0 -0
  731. package/payload/server/public/assets/mermaid.core-BU9IiSCP.js.br +0 -0
  732. package/payload/server/public/assets/mermaid.core-BU9IiSCP.js.gz +0 -0
  733. package/payload/server/public/assets/mindmap-definition-QFDTVHPH-D1PMUxxm.js.br +0 -0
  734. package/payload/server/public/assets/mindmap-definition-QFDTVHPH-D1PMUxxm.js.gz +0 -0
  735. package/payload/server/public/assets/operator-9jfCv1Fg.js +0 -1
  736. package/payload/server/public/assets/operator-9jfCv1Fg.js.br +0 -0
  737. package/payload/server/public/assets/operator-9jfCv1Fg.js.gz +0 -0
  738. package/payload/server/public/assets/ordinal-C2TEWKNu.js.br +0 -0
  739. package/payload/server/public/assets/ordinal-C2TEWKNu.js.gz +0 -0
  740. package/payload/server/public/assets/packet-4T2RLAQJ-BBAZASfb.js +0 -1
  741. package/payload/server/public/assets/packet-4T2RLAQJ-BBAZASfb.js.br +0 -0
  742. package/payload/server/public/assets/page-CZ-73FAk.js.br +0 -0
  743. package/payload/server/public/assets/page-CZ-73FAk.js.gz +0 -0
  744. package/payload/server/public/assets/page-CjwSt7kx.js +0 -1
  745. package/payload/server/public/assets/page-CjwSt7kx.js.br +0 -0
  746. package/payload/server/public/assets/page-CjwSt7kx.js.gz +0 -0
  747. package/payload/server/public/assets/pdf-render-C257cidb.js.br +0 -0
  748. package/payload/server/public/assets/pdf-render-C257cidb.js.gz +0 -0
  749. package/payload/server/public/assets/pie-ZZUOXDRM-CCJUnMeG.js +0 -1
  750. package/payload/server/public/assets/pie-ZZUOXDRM-CCJUnMeG.js.br +0 -0
  751. package/payload/server/public/assets/pieDiagram-DEJITSTG-BzdNzoKA.js.br +0 -0
  752. package/payload/server/public/assets/pieDiagram-DEJITSTG-BzdNzoKA.js.gz +0 -0
  753. package/payload/server/public/assets/public-CN-ltC8x.js.br +0 -0
  754. package/payload/server/public/assets/public-CN-ltC8x.js.gz +0 -0
  755. package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-oFr1MJRO.js.br +0 -0
  756. package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-oFr1MJRO.js.gz +0 -0
  757. package/payload/server/public/assets/radar-PYXPWWZC-BsRU8Aep.js +0 -1
  758. package/payload/server/public/assets/radar-PYXPWWZC-BsRU8Aep.js.br +0 -0
  759. package/payload/server/public/assets/reduce-BGpN5lgn.js.br +0 -0
  760. package/payload/server/public/assets/reduce-BGpN5lgn.js.gz +0 -0
  761. package/payload/server/public/assets/requirementDiagram-MS252O5E-C9QBQxDh.js.br +0 -0
  762. package/payload/server/public/assets/requirementDiagram-MS252O5E-C9QBQxDh.js.gz +0 -0
  763. package/payload/server/public/assets/rotate-ccw-Buopsc22.js.br +0 -0
  764. package/payload/server/public/assets/rotate-ccw-Buopsc22.js.gz +0 -0
  765. package/payload/server/public/assets/routines-C-yr8ddT.js +0 -1
  766. package/payload/server/public/assets/routines-C-yr8ddT.js.br +0 -0
  767. package/payload/server/public/assets/routines-C-yr8ddT.js.gz +0 -0
  768. package/payload/server/public/assets/sankeyDiagram-XADWPNL6-c_y3bvVv.js.br +0 -0
  769. package/payload/server/public/assets/sankeyDiagram-XADWPNL6-c_y3bvVv.js.gz +0 -0
  770. package/payload/server/public/assets/sequenceDiagram-FGHM5R23-YwlCBPHE.js.br +0 -0
  771. package/payload/server/public/assets/sequenceDiagram-FGHM5R23-YwlCBPHE.js.gz +0 -0
  772. package/payload/server/public/assets/skills-DiiuVzDK.js.br +0 -0
  773. package/payload/server/public/assets/skills-DiiuVzDK.js.gz +0 -0
  774. package/payload/server/public/assets/stateDiagram-FHFEXIEX-BFE3e-FM.js.br +0 -0
  775. package/payload/server/public/assets/stateDiagram-FHFEXIEX-BFE3e-FM.js.gz +0 -0
  776. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-CpjB4ykI.js +0 -1
  777. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-CpjB4ykI.js.br +0 -4
  778. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-CpjB4ykI.js.gz +0 -0
  779. package/payload/server/public/assets/tasks-CnHIfn2_.js +0 -1
  780. package/payload/server/public/assets/tasks-CnHIfn2_.js.br +0 -0
  781. package/payload/server/public/assets/tasks-CnHIfn2_.js.gz +0 -0
  782. package/payload/server/public/assets/time-entry-format-BBokCF-D.js.br +0 -0
  783. package/payload/server/public/assets/time-entry-format-BBokCF-D.js.gz +0 -0
  784. package/payload/server/public/assets/timeline-definition-GMOUNBTQ-azqhmRwZ.js.br +0 -0
  785. package/payload/server/public/assets/timeline-definition-GMOUNBTQ-azqhmRwZ.js.gz +0 -0
  786. package/payload/server/public/assets/treeView-SZITEDCU-BDzhKA6v.js +0 -1
  787. package/payload/server/public/assets/treeView-SZITEDCU-BDzhKA6v.js.br +0 -0
  788. package/payload/server/public/assets/treemap-W4RFUUIX-epHpdeWa.js +0 -1
  789. package/payload/server/public/assets/treemap-W4RFUUIX-epHpdeWa.js.br +0 -0
  790. package/payload/server/public/assets/triangle-alert-C_AcpTW5.js.br +0 -0
  791. package/payload/server/public/assets/triangle-alert-C_AcpTW5.js.gz +0 -0
  792. package/payload/server/public/assets/useCopyFeedback-TdimmPVR.js.br +0 -0
  793. package/payload/server/public/assets/useCopyFeedback-TdimmPVR.js.gz +0 -0
  794. package/payload/server/public/assets/useSubAccountSwitcher-BwHqV55p.js +0 -14
  795. package/payload/server/public/assets/useSubAccountSwitcher-BwHqV55p.js.br +0 -0
  796. package/payload/server/public/assets/useSubAccountSwitcher-BwHqV55p.js.gz +0 -0
  797. package/payload/server/public/assets/useSubAccountSwitcher-CsrPYqtm.css +0 -1
  798. package/payload/server/public/assets/useSubAccountSwitcher-CsrPYqtm.css.br +0 -0
  799. package/payload/server/public/assets/useSubAccountSwitcher-CsrPYqtm.css.gz +0 -0
  800. package/payload/server/public/assets/useVoiceRecorder-BT2738ZS.js.br +0 -0
  801. package/payload/server/public/assets/useVoiceRecorder-BT2738ZS.js.gz +0 -0
  802. package/payload/server/public/assets/vennDiagram-DHZGUBPP-Da2RfFs8.js.br +0 -0
  803. package/payload/server/public/assets/vennDiagram-DHZGUBPP-Da2RfFs8.js.gz +0 -0
  804. package/payload/server/public/assets/wardley-RL74JXVD-DNSZCrxV.js +0 -1
  805. package/payload/server/public/assets/wardley-RL74JXVD-DNSZCrxV.js.br +0 -0
  806. package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-HdrdBYES.js.br +0 -0
  807. package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-HdrdBYES.js.gz +0 -0
  808. package/payload/server/public/assets/wrench-B51s5kGA.js.br +0 -0
  809. package/payload/server/public/assets/wrench-B51s5kGA.js.gz +0 -0
  810. package/payload/server/public/assets/xychartDiagram-5P7HB3ND-DMk6rTcQ.js.br +0 -0
  811. package/payload/server/public/assets/xychartDiagram-5P7HB3ND-DMk6rTcQ.js.gz +0 -0
  812. /package/payload/server/public/assets/{_baseFor-Be3EKK3K.js → _baseFor-B12He5Rp.js} +0 -0
  813. /package/payload/server/public/assets/{_baseFor-Be3EKK3K.js.br → _baseFor-B12He5Rp.js.br} +0 -0
  814. /package/payload/server/public/assets/{_baseFor-Be3EKK3K.js.gz → _baseFor-B12He5Rp.js.gz} +0 -0
  815. /package/payload/server/public/assets/{array-X0JlPOfd.js → array-DO1uCttT.js} +0 -0
  816. /package/payload/server/public/assets/{array-X0JlPOfd.js.br → array-DO1uCttT.js.br} +0 -0
  817. /package/payload/server/public/assets/{cytoscape.esm-CI2IWMLB.js → cytoscape.esm-DFn2foqy.js} +0 -0
  818. /package/payload/server/public/assets/{cytoscape.esm-CI2IWMLB.js.br → cytoscape.esm-DFn2foqy.js.br} +0 -0
  819. /package/payload/server/public/assets/{cytoscape.esm-CI2IWMLB.js.gz → cytoscape.esm-DFn2foqy.js.gz} +0 -0
  820. /package/payload/server/public/assets/{defaultLocale-B6RGN4id.js → defaultLocale-ieI3yFoA.js} +0 -0
  821. /package/payload/server/public/assets/{defaultLocale-B6RGN4id.js.br → defaultLocale-ieI3yFoA.js.br} +0 -0
  822. /package/payload/server/public/assets/{defaultLocale-B6RGN4id.js.gz → defaultLocale-ieI3yFoA.js.gz} +0 -0
  823. /package/payload/server/public/assets/{dist-QvbmK1IP.js → dist-DlU7AEeD.js} +0 -0
  824. /package/payload/server/public/assets/{dist-QvbmK1IP.js.br → dist-DlU7AEeD.js.br} +0 -0
  825. /package/payload/server/public/assets/{dist-QvbmK1IP.js.gz → dist-DlU7AEeD.js.gz} +0 -0
  826. /package/payload/server/public/assets/{init-BmUWJJHz.js → init-BCRlEgNP.js} +0 -0
  827. /package/payload/server/public/assets/{init-BmUWJJHz.js.br → init-BCRlEgNP.js.br} +0 -0
  828. /package/payload/server/public/assets/{init-BmUWJJHz.js.gz → init-BCRlEgNP.js.gz} +0 -0
  829. /package/payload/server/public/assets/{katex-BjZuzSQn.js → katex-gkTaZgi6.js} +0 -0
  830. /package/payload/server/public/assets/{katex-BjZuzSQn.js.br → katex-gkTaZgi6.js.br} +0 -0
  831. /package/payload/server/public/assets/{katex-BjZuzSQn.js.gz → katex-gkTaZgi6.js.gz} +0 -0
  832. /package/payload/server/public/assets/{path-CoPyR7c2.js → path-DTmzQFjQ.js} +0 -0
  833. /package/payload/server/public/assets/{path-CoPyR7c2.js.br → path-DTmzQFjQ.js.br} +0 -0
  834. /package/payload/server/public/assets/{path-CoPyR7c2.js.gz → path-DTmzQFjQ.js.gz} +0 -0
  835. /package/payload/server/public/assets/{preload-helper-BQrMkyGX.js → preload-helper-eAV8hweq.js} +0 -0
  836. /package/payload/server/public/assets/{preload-helper-BQrMkyGX.js.br → preload-helper-eAV8hweq.js.br} +0 -0
  837. /package/payload/server/public/assets/{preload-helper-BQrMkyGX.js.gz → preload-helper-eAV8hweq.js.gz} +0 -0
  838. /package/payload/server/public/assets/{rough.esm-jSt7UMyi.js → rough.esm-BFJ-MgcB.js} +0 -0
  839. /package/payload/server/public/assets/{rough.esm-jSt7UMyi.js.br → rough.esm-BFJ-MgcB.js.br} +0 -0
  840. /package/payload/server/public/assets/{rough.esm-jSt7UMyi.js.gz → rough.esm-BFJ-MgcB.js.gz} +0 -0
  841. /package/payload/server/public/assets/{src-C2WwTWSY.js → src-9CNk4JU0.js} +0 -0
  842. /package/payload/server/public/assets/{src-C2WwTWSY.js.br → src-9CNk4JU0.js.br} +0 -0
  843. /package/payload/server/public/assets/{src-C2WwTWSY.js.gz → src-9CNk4JU0.js.gz} +0 -0
@@ -97,10 +97,34 @@ dispatches, which the Calendar surface deliberately excludes (`calendar.ts`
97
97
  unions only appointment events, `actionPlugin IS NULL`). It renders one card per
98
98
  routine (title, human-readable schedule, next run, channel/destination or tool,
99
99
  status); a card opens a detail modal modeled on the calendar `EventDetailModal`.
100
- The modal edits the prose instruction (`agentPrompt`, agent-dispatch routines
101
- only) and the schedule via a friendly builder (frequency daily/weekly/monthly,
102
- day-of-week, day-of-month, time) that falls back to a raw-cron field for patterns
103
- it cannot represent.
100
+ The modal edits the prose instruction (`agentPrompt`), the dispatch binding
101
+ (`agentChannel` and `agentDestination`, chosen from a server-supplied roster
102
+ rather than typed), and the schedule via a friendly builder (frequency
103
+ daily/weekly/monthly, day-of-week, day-of-month, time) that falls back to a
104
+ raw-cron field for patterns it cannot represent. The binding control appears on
105
+ an agent routine and on a routine with no dispatch at all; a tool-action
106
+ routine's dispatch stays read-only, because an agent binding takes precedence at
107
+ fire time and would stop the tool running.
108
+
109
+ **The status dot.** The card and the modal each carry a dot ahead of
110
+ the raw status word, so a grid of eight routines can be read without reading
111
+ eight words. `app/routines/types.ts` holds the whole mapping and both surfaces
112
+ render it through one `RoutineStatusDot`, which is what stops them drifting:
113
+
114
+ | `eventStatus` | dot | meaning |
115
+ |---|---|---|
116
+ | `scheduled`, `due` | green (`--session-live`) | armed, the sweep will fire it |
117
+ | `suspended` | amber (`--color-alias-status-warning-solid`) | stood down, nothing runs until resumed |
118
+ | `cancelled`, `completed` | solid grey (`--text-tertiary`) | deliberately stopped or finished |
119
+ | anything else, and `null` | grey ring, no fill | no reading taken |
120
+
121
+ The unrecognised case is a state of its own, never a fallback into green: `GET
122
+ /api/admin/routines` projects `eventStatus` verbatim, so a value outside the set
123
+ can reach the card at any time, and a stood-down routine showing green is a
124
+ failure the operator only learns about when the work does not happen. The
125
+ enumerate-every-status test in `app/routines/__tests__/routine-status-dot.test.tsx`
126
+ is the only place the mapping's domain and the writers' status set get compared,
127
+ so a status added to the scheduling plugin without being added here fails there.
104
128
 
105
129
  The route (`server/routes/admin/routines.ts`) is account-scoped like `calendar.ts`
106
130
  (a foreign-account or non-automation `eventId` 404s):
@@ -109,14 +133,103 @@ The route (`server/routes/admin/routines.ts`) is account-scoped like `calendar.t
109
133
  |-------|-----------|
110
134
  | `GET /api/admin/routines` | Lists automation Events: `recurrence IS NOT NULL OR agentChannel IS NOT NULL OR actionPlugin IS NOT NULL`. Keyed by the `eventId` property. |
111
135
  | `GET /api/admin/routines/:eventId` | One routine, same automation+account guard. |
112
- | `PATCH /api/admin/routines/:eventId` | Edits `agentPrompt` and/or `recurrence`. Cron validation and the timezone-aware `nextRun` recompute copy the scheduling plugin's `schedule-update` tool. An invalid cron is rejected 400 with no write. Only creation and deletion stay agent-only (`schedule-event`/`schedule-cancel`). |
136
+ | `GET /api/admin/routines/:eventId/runs` | One routine's `:RoutineRun` history, newest first. `limit` clamps to 1..500 and defaults to 50, so a caller that wants the full page must ask for it. |
137
+ | `GET /api/admin/routines/:eventId/runs.csv` | The same projection as a `text/csv` attachment with `Content-Disposition`, and **no** limit, so it is not the same row set as a clamped `/runs` call. Re-parses its own output and returns 500 rather than serving a document with fewer rows than the query returned. Zero rows is 404, not a header-only file: the query cannot tell a routine with no runs from an `eventId` on another account. |
138
+ | `PATCH /api/admin/routines/:eventId` | Edits `agentPrompt`, `recurrence`, and the `agentChannel`/`agentDestination` pair. Cron validation and the timezone-aware `nextRun` recompute copy the scheduling plugin's `schedule-update` tool. The binding is revalidated against the same house-authority rule, shared as `platform/lib/agent-dispatch-rule`; it is refused `partial-binding`, `invalid-channel`, `no-prompt`, `not-registered`, `cross-account`, `action-routine` (a routine that runs a tool keeps it — an agent binding outranks the action at fire time) or `clear-would-orphan` (clearing the only field holding a one-time routine inside the automation filter would hide it from every routines surface), and no refusal writes. Both fields as `null` clears the binding. An invalid cron is rejected 400 with no write. Only creation and deletion stay agent-only (`schedule-event`/`schedule-cancel`). |
139
+ | `GET /api/admin/dispatch-destinations` | Every destination the session's account may bind a routine to, across both channels, each labelled by the authoritative list it came from (`House admin`, `Account manager`, `Telegram admin`). Computed from the same lists the validator reads and filtered by the same rule, so the picker cannot offer what the save refuses. |
140
+ | `POST /api/admin/routines/:eventId/suspend` | Writes `eventStatus = 'suspended'` on a routine currently `'scheduled'`. 404s otherwise, so a second suspend is not a silent no-op. |
141
+ | `POST /api/admin/routines/:eventId/resume` | Returns a suspended routine to `'scheduled'`. 404s if it is not suspended, 409s if it cannot be resumed. |
142
+ | `POST /api/admin/routines/suspend-all` | Suspends every routine currently `'scheduled'` and marks each one. Returns the count. |
143
+ | `POST /api/admin/routines/resume-all` | Resumes only the routines `suspend-all` marked. Returns `restored` and a `refused` list. |
144
+
145
+ **Suspension is the reversible stop.** Before it, the only way to stop a routine
146
+ from the dashboard was to delete it. A suspended routine keeps its schedule, its
147
+ instruction and its history; it simply stops being selected. The enforcement is
148
+ not a new guard: all four `eventStatus = 'scheduled'` predicates in
149
+ `check-due-events.ts` are equalities, so any other status is excluded by
150
+ construction, and `'suspended'` is the literal the shipped roster already seeds
151
+ with.
152
+
153
+ The status write lives on dedicated routes rather than on `PATCH`, which admits
154
+ only `agentPrompt` and `recurrence` and 400s on anything else. Widening `PATCH`
155
+ would put a free-form status on the edit path.
156
+
157
+ **Resume schedules forward and never backfills.** For a recurring routine
158
+ `nextRun` is recomputed from the cron in the routine's own timezone; the stored
159
+ value is deliberately not restored, because the sweep selects `nextRun <= now`
160
+ and a stale one fires on the next tick. A one-time routine has no cron to
161
+ advance, so resuming one whose date has passed is refused (409) with the date
162
+ named — resuming it would run it immediately, for a window the operator did not
163
+ choose. A one-time routine still in the future resumes with its date untouched.
164
+
165
+ **Suspend-all acts on exactly the dispatchable set**, so the number on the
166
+ control is the number of routines that could have fired; rows already due,
167
+ cancelled or suspended are untouched and a deliberately cancelled routine is
168
+ never re-armed. Each row it stops is marked, and resume-all selects only marked
169
+ rows — a routine suspended one at a time carries no mark and stays suspended,
170
+ which is what makes resume-all safe to press. The seeded roster is unmarked by
171
+ construction, so resume-all never enables it.
113
172
 
114
173
  Observability rides `[admin:routines]`: `op=list accountId=<8> count=<n>`,
115
- `op=get id=<8> found=<bool>`, and `op=patch id=<8> fields=<…> outcome=ok|rejected
116
- reason=<invalid-cron|not-found> nextRun=<…> cron=<serialized>`. A `count=0` while
117
- routines exist for the account is the account-scope-miss signature; the logged
118
- `cron=` on `outcome=ok` confirms the persisted expression without opening the
119
- graph.
174
+ `op=get id=<8> found=<bool>`, `op=patch id=<8> fields=<…> outcome=ok|rejected
175
+ reason=<invalid-cron|not-found> nextRun=<…> cron=<serialized>`, and
176
+ `op=suspend|resume id=<8> scope=<one|all> outcome=<applied|refused|failed>` with
177
+ `count=`/`restored=` and, on a refusal, `reason=<not-scheduled|not-suspended|
178
+ past-one-time|invalid-cron>`. A `count=0` while routines exist for the account is
179
+ the account-scope-miss signature; the logged `cron=` on `outcome=ok` confirms the
180
+ persisted expression without opening the graph.
181
+
182
+ Two scheduler-side lines close the loop, because a suspend that the sweep ignores
183
+ looks identical to a healthy routine until it fires. `[schedule-sweep]
184
+ op=skip-suspended account=<8> count=<n>` is emitted every sweep for every local
185
+ account including zero, filtered to automation rows by the same predicate the
186
+ routes and the census use, so all three count one set. Nothing else in the sweep
187
+ ever mentions a suspended row, so without this line the whole class is invisible
188
+ there and a suspension that stopped holding would look exactly like one that
189
+ still holds. `[schedule-audit] op=suspension-census acct=<8> routines=<n>
190
+ dispatchable=<n> suspended=<n> due=<n> cancelled=<n> completed=<n> other=<n>` is
191
+ the standing reconciliation: the named buckets are the whole shipped status enum
192
+ plus `suspended`, so they sum to `routines` by construction and `other` above
193
+ zero means a routine carries a status the system does not handle — nothing else
194
+ would say so. `completed` gets its own bucket even though no code path writes it
195
+ today, because it remains part of the shipped enum and one row carrying it would
196
+ otherwise pin `other` above zero forever and kill the alarm.
197
+
198
+ **The shipped roster.** Every account starts with eleven routines —
199
+ `start-of-day`, `inbound-check`, `end-of-day`, `appointment-reminder`,
200
+ `commitment-chase`, `calendar-reconcile`, `contact-reconcile`, `crm-reconcile`,
201
+ `finance-reconcile`, `channel-link-check`, `weekly-digest` — seeded
202
+ `eventStatus:'suspended'` with `nextRun` NULL and no
203
+ channel or destination, so `/routines` is a catalogue to enable rather than a
204
+ blank page. The list query applies no status filter and `AUTOMATION_WHERE`
205
+ admits them on `recurrence IS NOT NULL`, so they render with no change here.
206
+ They cannot fire: every dispatch query in `check-due-events.ts` selects
207
+ `eventStatus = 'scheduled'`, and the recurring one additionally requires
208
+ `nextRun IS NOT NULL`.
209
+
210
+ Enabling one is `schedule-update {eventId, eventStatus:'scheduled', timezone}`.
211
+ The status change arms the row on its own: the resume recomputes `nextRun`
212
+ forward from now in the routine's **stored** `timezone`, so a seeded row with a
213
+ NULL `nextRun` does not need `recurrence` restated to start firing. `timezone` is
214
+ still required on a seeded routine, because the roster seeds none and a resume
215
+ with no stored zone resolves the cron in the server's zone; that row then fires
216
+ at the wrong hour and looks healthy, which is the case the standing
217
+ `[schedule-audit] op=null-timezone` alarm exists to name. Pass `recurrence` only
218
+ to change it. Binding a channel and a
219
+ destination is separate and equally required: `chooseDispatchMode` returns
220
+ `{kind:'none'}` unless `agentChannel`, `agentDestination` and `agentPrompt` are
221
+ all present, and a destination cannot be seeded because
222
+ `validateAgentDestination` is fail-closed against the account's
223
+ `whatsapp.adminPhones` / `telegram.adminUsers`, both empty on a fresh install.
224
+
225
+ The seed re-runs on every upgrade and never writes `eventStatus`,
226
+ `agentChannel`, `agentDestination`, `recurrence` or `timezone` on a row that
227
+ already exists, so an upgrade cannot re-suspend an enabled routine, unbind a
228
+ bound destination or reset a retimed cron. Three standing checks ride the
229
+ scheduling heartbeat and report on every tick including zero:
230
+ `[schedule-audit] op=roster` (a seed that never ran or ran short),
231
+ `op=dispatch-mode-none` (a routine that fires and delivers nothing) and
232
+ `op=null-timezone` (a routine that fires at the box's hour).
120
233
 
121
234
  ### Skills
122
235
 
@@ -171,7 +284,9 @@ both `kind: 'specialist'` and differ only by origin.
171
284
  `agent-builder`). The specialist modal shows the model, tools, the owning
172
285
  plugin's skills, and the system-prompt body. Specialists are authored, edited,
173
286
  and deleted through chat (`agent-builder` / `specialist-management`), so the
174
- specialist modal offers no delete or open-agent link.
287
+ specialist modal offers no delete or open-agent link. **These are the only
288
+ agents that can be switched off from this page**, and the route enforces that
289
+ rather than relying on the UI to withhold the control.
175
290
  - **Shipped specialists** (`origin: 'shipped'`) — the union of
176
291
  `<accountDir>/specialists/agents/`, `<accountDir>/specialists/agents-disabled/`
177
292
  and `PLATFORM_ROOT/templates/specialists/agents/`, in that precedence order.
@@ -179,22 +294,27 @@ both `kind: 'specialist'` and differ only by origin.
179
294
  a disabled agent still appears there through its bundled-template row. The
180
295
  route once walked only the account plugins tree, so the twelve
181
296
  highest-capability agents on the box were the ones the operator could not see.
182
- These are the only agents that can be disabled, and the route enforces that
183
- rather than relying on the UI to withhold the control.
297
+ **A shipped agent cannot be switched off here.** It is part of the product, so
298
+ disabling one breaks a capability the operator did not author and cannot
299
+ repair, and it is not what runs unattended: an agent runs only when something
300
+ dispatches it, an inbound message is operator-initiated, so the only autonomous
301
+ path is the scheduler. The modal says so and points at the routines instead.
184
302
  **A file in the LIVE directory whose name also exists under
185
303
  `<accountDir>/plugins/*/agents/` is excluded from this set.** `agent-builder`
186
304
  copies the authored file into `specialists/agents/` because presence there is
187
305
  what makes an agent dispatchable, so the live directory says nothing about who
188
306
  wrote the agent and every activated user-created specialist used to render
189
307
  twice, the second time as Shipped. The account plugin tree is the authorship
190
- evidence and its row wins, which is also why `disable` refuses a slug present
191
- under `plugins/*/agents/`: quarantine exists to stop provisioning re-delivering
192
- a file, and provisioning never writes that tree. Both gates read filenames off
193
- disk, so a plugin file whose frontmatter does not parse still suppresses its
194
- live twin it is authored either way, and `specialistsSkipped` is what reports
195
- the parse failure. The exclusion applies to the live copy only: a copy found in
196
- quarantine is operator state, keeps its Shipped row and its `disabled:true`,
197
- and is therefore still switchable back on. Each exclusion logs
308
+ evidence and its row wins; it is the same discriminator `disable` requires.
309
+ Both gates read filenames off disk, so a plugin file whose frontmatter does not
310
+ parse still suppresses its live twin it is authored either way, and
311
+ `specialistsSkipped` is what reports the parse failure. **The exclusion covers
312
+ both account directories, live and quarantine.** It was live-only while only a
313
+ shipped agent could be quarantined; now that an authored specialist can be
314
+ switched off, its specialist row carries the plugin, the skills, the detail
315
+ route and its own disabled state, so a second row from the shipped walk would
316
+ be a duplicate with none of that. The bundled templates are never deduped: a
317
+ bundled name is shipped by definition. Each exclusion logs
198
318
  `op=list-shipped-dedup file=<name>` and the count rides `op=list` and the
199
319
  response as `deduped`.
200
320
 
@@ -222,35 +342,137 @@ no class is dashed and uncoloured rather than painted as if it were understood.
222
342
  Badge colours come from the shared semantic status set: `-solid` with white text
223
343
  for the badge, `-tint` with `-textOnTint` for a chip, never white.
224
344
 
345
+ **No tool name on a card.** The card renders the badge word and the plugin (or,
346
+ for a public agent, its status). It does not render `riskiestTool`: a qualified
347
+ tool symbol tells the person reading this dashboard nothing the badge word did
348
+ not. `riskiestTool` stays on the wire and on the `op=risk` line as a diagnostic,
349
+ so a wrong class is still traceable to the tool that set it without re-deriving
350
+ the classification.
351
+
352
+ **Combination rules.** The per-tool max answers "what is the worst single thing
353
+ this agent can do". It cannot answer "what can it do in sequence", which is the
354
+ question the person reading the dashboard is actually asking: an agent that
355
+ reads a customer record and an agent that emails a stranger are both red, and so
356
+ is the one that does both. Four rules in `server/lib/agent-risk.ts` run *after*
357
+ the max. A rule fires when **every** risk class it names is present among the
358
+ resolved tools and its own class is not below the class the max produced; the
359
+ first match in table order wins and supplies the sentence the modal renders.
360
+
361
+ | Rule | Fires when the agent holds | Class | What the operator reads |
362
+ |---|---|---|---|
363
+ | `changes-and-sends` | a `write_local` tool and an `external` tool | red | It can change your records and also send messages out, so a wrong change can reach someone outside the business. |
364
+ | `reads-and-sends` | a `read` tool and an `external` tool | red | It can read what is held on this device and also send things out of it, so anything it reads can leave. |
365
+ | `changes-and-runs` | a `write_local` tool and an `exec` tool | red | It can change files on this device and run commands, so a mistake is not confined to one file. |
366
+ | `reads-and-runs` | a `read` tool and an `exec` tool | red | It can read what is held on this device and run commands on it. |
367
+
368
+ The order is the priority order: reaching outside the business outranks running
369
+ a command inside it, and changing something outranks reading it. A rule may only
370
+ **raise** a class, never lower one, and because `exec` and `external` both
371
+ saturate at red today every rule is itself red — so on the shipped fleet the
372
+ rules change no colour and their whole product is the named hazard in words. A
373
+ rule whose class sat below the derived one would be skipped rather than applied,
374
+ so a softer sentence can never be attached to a harder class.
375
+
376
+ With no rule matched the sentence comes from the class itself: green says it can
377
+ only read, amber says it can change what is held here and nothing reaches
378
+ outside, red says it can run commands or reach services outside. The three
379
+ forced-red paths carry their own sentences instead, because none of them derived
380
+ a capability: a tool with no risk class on this install, an agent with no
381
+ `tools:` line at all, and a plugin registry that failed to load.
382
+
383
+ Of the four rules, three fire on the twelve shipped specialists
384
+ (`changes-and-sends`, `changes-and-runs`, `reads-and-runs`) and `reads-and-sends`
385
+ fires on none of them, which is what the `op=rule-census` line exists to report
386
+ across real accounts.
387
+
225
388
  **Disable.** `<accountDir>/specialists/agents/` is the live dispatchable set —
226
389
  `spawn-context.ts` reads it to build the spawn manifest — so disabling **moves**
227
- the agent file to `<accountDir>/specialists/agents-disabled/` and records the
228
- basename in a 0600 `<accountDir>/agents-disabled.json`. A flag alone would leave
229
- the agent running while the card claimed otherwise.
230
-
231
- The file is moved, never deleted: a premium `--` agent and an operator-edited
232
- override each exist only in the account dir, so deleting one and later restoring
233
- from the bundled template would hand back a different agent than the operator
234
- switched off. A disabled agent stays listed, marked `Disabled`, because an agent
235
- that vanished from the surface that disabled it could never be switched back on.
236
-
237
- `provision-account-dir.sh` re-reads the store after its core-specialist recopy
238
- and removes anything named in it, so an upgrade does not silently re-deliver a
239
- disabled agent. An unreadable store withholds nothing and says so: a corrupt
240
- file is not evidence that an agent was disabled.
241
-
242
- Disabling also reconciles the admin's routing prose. `agents/admin/AGENTS.md`
243
- carries one `- **specialists:<name>**:` line per dispatchable specialist, and
390
+ the agent file to `<accountDir>/specialists/agents-disabled/`. A flag alone would
391
+ leave the agent running while the card claimed otherwise. `agent-builder` copies
392
+ an authored specialist into that same live directory, because presence there is
393
+ what makes it dispatchable, so the same move applies to it.
394
+
395
+ The file is moved, never deleted: an authored specialist's activated copy can
396
+ carry operator edits its plugin-tree original does not, so deleting one and later
397
+ restoring "the original" would hand back a different agent than the operator
398
+ switched off. A disabled agent stays listed, because an agent that vanished from
399
+ the surface that disabled it could never be switched back on.
400
+
401
+ **Authorisation is drawn in both states.** Every specialist card carries a
402
+ `Live` or `Stood down` pill, and the header above the list reads
403
+ `<n> agents · <n> stood down`, derived from the same rows the cards render.
404
+ Drawing only the disabled half made a live agent indistinguishable from a pill
405
+ that failed to render, and left the operator counting cards to answer how much
406
+ of the fleet was switched off. Public agents carry no pill: they have no disable
407
+ path, so `Live` there would assert something the surface never derived.
408
+
409
+ **The disable confirm names what stops.** Before the confirm it reads
410
+ `Stop this agent being dispatched?` plus the skills that run through the agent
411
+ and the fact that nothing can hand it work until it is switched back on. It does
412
+ **not** name the routines that dispatch the agent, and cannot: a routine
413
+ `:Event` stores `agentChannel`, `agentDestination` and `agentPrompt`, never an
414
+ agent, so there is nothing on disk to join against. A shipped agent's detail
415
+ also carries no skills, because a shipped specialist owns no skills directory, so
416
+ today the skills clause appears only on a plugin-backed specialist. The
417
+ shipped-agent sentence is a different thing and does not conflict: it names
418
+ suspending routines as the general way to stop unattended dispatch, which is
419
+ true of every shipped agent, rather than claiming this one's routines can be
420
+ listed.
421
+
422
+ Three cases, no more. Authored with a live copy → moved to quarantine. Authored
423
+ with no live copy → refused 409: it is not in the dispatchable set, so there is
424
+ nothing to switch off and recording one would claim work that did not happen.
425
+ Not authored → refused 404, naming the routines as what stops it instead.
426
+
427
+ **Enable is deliberately not symmetric, and takes no authorship check.** An
428
+ install that disabled a shipped agent before the gate was inverted holds it in
429
+ the quarantine directory and names it in `agents-disabled.json`; requiring
430
+ authorship on enable would strand it there with no route back through the
431
+ product. So enable serves both classes: a quarantined authored specialist, and a
432
+ shipped agent disabled under the old rule (whether it was moved, or was
433
+ bundled-only and recorded in the store alone).
434
+
435
+ **Nothing writes `agents-disabled.json` any more.** That 0600 store exists only
436
+ to stop the next provisioning run re-delivering a withheld shipped file —
437
+ `provision-account-dir.sh` re-reads it after its core-specialist recopy and
438
+ removes anything named in it — and shipped disable is now refused, so no new
439
+ entry can be created. An authored specialist needs no entry either: provisioning
440
+ never writes the account plugin tree, so the quarantined file is its whole state.
441
+ The store is now read-and-clear: the listing reads it for shipped rows and enable
442
+ clears entries from it, rewriting it whole and re-applying 0600 explicitly
443
+ (`writeFileSync`'s `mode` applies only on creation, and nothing creates this file
444
+ now). An unreadable store withholds nothing and says so: a corrupt file is not
445
+ evidence that an agent was disabled.
446
+
447
+ Both routes reconcile the admin's routing prose. `agents/admin/AGENTS.md` carries
448
+ one `- **specialists:<name>**:` line per dispatchable specialist, and
244
449
  `agents-md-bootstrap.sh` used to only ever append, so a disabled agent stayed
245
450
  advertised and the admin dispatched to a file that was no longer there. The
246
- script now withholds a line for every name in the store, and both routes exec it
247
- after the move, so the prose is right immediately rather than after the next
451
+ script withholds a line for every name in the store and both routes exec it after
452
+ the move, so the prose is right immediately rather than after the next
248
453
  provisioning run. It emits `[agents-md] op=specialist-lines account=<id8>
249
- kept=<n> withheld=<comma-list|none|store-unreadable>`. `system-status` reads the
250
- same store, so a disabled agent reports `disabled (operator)` rather than
454
+ kept=<n> withheld=<comma-list|none|store-unreadable>`. Note the reach, because it is not
455
+ symmetric: the script skips every `--` filename as out of scope, and its prune is
456
+ keyed on a store basename (`acme--helper`) while the routing line is keyed on the
457
+ frontmatter name (`helper`) that the activation path in `specialist-management`
458
+ wrote. So the bootstrap can neither remove nor restore an authored specialist's
459
+ line, and before this change that did not matter because that class could not be
460
+ disabled at all. It is now the only class that can be, so the route makes a
461
+ second, targeted pass for it, reading the name from whichever copy of the file
462
+ exists after the move and emitting `op=agents-md-authored`. Without it the admin
463
+ would keep advertising a specialist whose file is quarantined and dispatch would
464
+ fail inside the turn, which is the defect the bootstrap's prune was written to
465
+ prevent, on the one class it does not reach. `system-status` reads the same store, so a shipped agent
466
+ disabled under the old rule reports `disabled (operator)` rather than
251
467
  `missing file`, and the header counts the two separately
252
468
  (`<n> registered, missing=<x> disabled=<y>`).
253
469
 
470
+ Observability rides `[admin/agents] op=disable|enable accountId=<8> slug=<s>
471
+ origin=<specialist|shipped> eligible=<bool> outcome=<applied|refused|failed>`
472
+ with `reason=<not-user-created|not-dispatchable|not-disabled>` on a refusal.
473
+ `eligible=false outcome=refused` is what proves the gate is live rather than
474
+ merely re-labelled in the UI.
475
+
254
476
  **Account scope.** The route (`server/routes/admin/agents.ts`) never infers an
255
477
  account from device state. The two reads resolve from the caller's admin session
256
478
  (`requireAdminSession` + the shared `accountDirForSession` in
@@ -264,10 +486,10 @@ explicit `?plugin=` parameter, not inferred from `--` in the slug.
264
486
 
265
487
  | Route | Behaviour |
266
488
  |-------|-----------|
267
- | `GET /api/admin/agents` | Session-scoped. Lists the session account's public `agents/*/` dirs (never the `admin` agent), its user-created specialists from `plugins/*/agents/*.md`, and its shipped specialists, each row tagged `kind` and `origin` and carrying `risk`, `riskiestTool`, `unresolved` and `disabled`. A live-directory candidate whose filename also exists under `plugins/*/agents/` is dropped and counted, so an activated user-created agent is listed once. Returns `{agents, accountId, skipped, specialistsSkipped, shippedSkipped, deduped, riskSurfaceFailed}`. 401 when the session maps to no account. |
268
- | `GET /api/admin/agents/:slug` | Session-scoped. Without `?plugin=` or `?origin=`, returns a public agent's config fields + four owned docs + a `present` map (a missing or unreadable doc is `''`/`present.<role>=false`, never a 500). With `?plugin=`, that plugin's user-created specialist; with `?origin=shipped`, the shipped one. Both specialist shapes add `{risk, riskiestTool, unresolved, byTool, disabled}`, where `byTool` is one class per declared tool. Selection is explicit rather than inferred, because a premium file and a user-created specialist under a plugin of the same name produce the same slug. Unknown 404s, 401 as above. |
269
- | `POST /api/admin/agents/:slug/disable?accountId=` | Shipped agents only, enforced here: a slug present in none of the three shipped directories 404s, and so does a slug present under `plugins/*/agents/` (a user-created specialist, `reason=user-created-specialist`), because its activated copy in the live directory would otherwise pass the shipped test. Moves the file from `specialists/agents/` to `specialists/agents-disabled/` and records the basename in the 0600 store. Returns `{ok, moved}`; `moved:false` means the agent existed only as a bundled template, so nothing was there to move and the store entry is what stops the next provisioning run delivering it. The store is read strictly before anything moves, so an unreadable store 500s with the file untouched rather than rewriting the file whole from an empty set and dropping every other disabled agent. Returns `routingReconciled`, which is `false` when the AGENTS.md reconcile threw: the move and the store write already happened, so the request is not failed, and the caller is told rather than left assuming the prose is correct. Same `accountId` contract as delete. |
270
- | `POST /api/admin/agents/:slug/enable?accountId=` | Covers both of disable's outcomes. Returns `{ok, restored}`: a quarantined file moves back (`restored:true`); a bundled-only agent has nothing to move, so clearing the store entry is the whole job (`restored:false`), which is what stops provisioning withholding it. Treating that second case as "nothing to restore" made disable a one-way door. 404 only when neither directory nor store knows the agent. Carries the same `routingReconciled` field; the restored file is what puts the routing line back. |
489
+ | `GET /api/admin/agents` | Session-scoped. Lists the session account's public `agents/*/` dirs (never the `admin` agent), its user-created specialists from `plugins/*/agents/*.md`, and its shipped specialists, each row tagged `kind` and `origin` and carrying `risk`, `riskiestTool`, `riskRule`, `riskReason`, `unresolved` and `disabled`. A live-directory candidate whose filename also exists under `plugins/*/agents/` is dropped and counted, so an activated user-created agent is listed once. Returns `{agents, accountId, skipped, specialistsSkipped, shippedSkipped, deduped, riskSurfaceFailed}`. 401 when the session maps to no account. |
490
+ | `GET /api/admin/agents/:slug` | Session-scoped. Without `?plugin=` or `?origin=`, returns a public agent's config fields + four owned docs + a `present` map (a missing or unreadable doc is `''`/`present.<role>=false`, never a 500). With `?plugin=`, that plugin's user-created specialist; with `?origin=shipped`, the shipped one. Both specialist shapes add `{risk, riskiestTool, riskRule, riskReason, unresolved, byTool, disabled}`, where `byTool` is one class per declared tool. Selection is explicit rather than inferred, because a premium file and a user-created specialist under a plugin of the same name produce the same slug. Unknown 404s, 401 as above. |
491
+ | `POST /api/admin/agents/:slug/disable?accountId=` | Agents the operator authored only, enforced here rather than left to the UI: a slug NOT present under `plugins/*/agents/` 404s (`reason=not-user-created`), and the message names suspending the routines as what stops a shipped agent instead. An authored slug with no copy in `specialists/agents/` 409s (`reason=not-dispatchable`): it is already not dispatchable, so there is nothing to move and nothing to record. Otherwise it moves the file from `specialists/agents/` to `specialists/agents-disabled/` and returns `{ok, moved:true}` the only outcome, since the two other cases refuse. It writes NO store entry: `agents-disabled.json` exists to stop provisioning re-delivering a withheld shipped file, and provisioning never writes the account plugin tree. Returns `routingReconciled`, false when either AGENTS.md pass threw; the move already happened and already stopped dispatch, so the request is not failed and the caller is told rather than left assuming the prose is right. Same `accountId` contract as delete. |
492
+ | `POST /api/admin/agents/:slug/enable?accountId=` | Takes NO authorship check, and that asymmetry with disable is deliberate: an install that switched a shipped agent off under the old gate must still reach this route, or inverting the gate strands it. For an authored slug the quarantined file is the whole state — 404 when it is absent, `restored:true` when it moves back, and the store is never touched. For a shipped slug it covers both of the old disable's outcomes: a quarantined file moves back (`restored:true`), and a bundled-only agent has nothing to move so clearing the store entry is the whole job (`restored:false`), which is what stops provisioning withholding it. 404 only when neither the quarantine directory nor the store knows the slug. The store is read strictly first, because this is the read half of a read-modify-write that rewrites the file whole, and it is written back only when an entry was actually removed — so enabling never creates a store an account did not have. |
271
493
  | `DELETE /api/admin/agents/:slug?accountId=` | Public agents only, on the named validated account. Removes the dir after `deleteAgentProjection`; refuses the `admin` slug (403) and a missing/unknown `accountId` (400) with no write. Loud-fail: a graph-cleanup throw aborts the file removal. |
272
494
  | `POST /api/admin/agents/:slug/project?accountId=` | Re-projects the named account's on-disk agent into the graph. Same `accountId` contract as delete. |
273
495
 
@@ -301,25 +523,40 @@ Agents page survived undiagnosed on a multi-account install.
301
523
  does not add up is visible without reproducing anything. The over-exclusion to
302
524
  watch for is a `deduped` line naming a file that is also a bundled or premium
303
525
  agent: the authored file then hides a genuinely shipped one.
304
- - `op=classify account=<id8> agent=<name> origin=<shipped|public|specialist>
305
- risk=<green|amber|red> riskiestTool=<tool> tools=<n> unresolved=<comma-list|none>
306
- disabled=<bool>` — one line per classified agent per listing, so it fires on
307
- every page load. `riskiestTool` makes a wrong class diagnosable without
308
- re-deriving it. Its value is the FULL canonical tool name, while the card
309
- renders only the segment after the plugin prefix. One load
310
- showing `riskiest tool: memory-update` on the card and
311
- `riskiestTool=mcp__plugin_memory_memory__memory-update` on this line is the
312
- confirmation that both derive from one value.
313
- **A non-empty `unresolved=` is the one to act on**: the agent
526
+ - `[agents] op=risk account=<id8> slug=<name> origin=<shipped|public|specialist>
527
+ class=<green|amber|red> rule=<id|none> riskiestTool=<tool> tools=<n>
528
+ unresolved=<n> unresolvedTools=<comma-list|none> disabled=<bool>` — one line
529
+ per classified agent per listing, so it fires on every page load.
530
+ **`rule=` is the field that proves the combination table is live**: a
531
+ mis-specified rule emits nothing of its own and is otherwise indistinguishable
532
+ from an absent one. `riskiestTool` makes a wrong class diagnosable without
533
+ re-deriving it; its value is the FULL canonical tool name and it is no longer
534
+ rendered anywhere, so this line is where it is read.
535
+ **A non-zero `unresolved=` is the one to act on**: the agent
314
536
  is forced red, and the cause is that the built-in table or the registry
315
- mapping has drifted, not that the agent changed.
316
- - `op=risk-surface status=load-failed reason=<msg>` the plugin registry did
317
- not parse, so every row is forced red and the listing returns
318
- `riskSurfaceFailed: true`. Without the forced red, every plugin tool would
319
- land in `unresolved` and a registry outage would read as agent drift across
320
- every card at once; without the response field, a red row would be
321
- indistinguishable from a genuinely dangerous agent, because nothing resolved
322
- so `unresolved` is empty and the per-tool explanation cannot fire.
537
+ mapping has drifted, not that the agent changed. `unresolvedTools=` says which.
538
+ - `[agents] op=rule-census account=<id8> rules=<n> classified=<n> fired=<n>
539
+ never=<comma-list|none>` one line per listing, not per agent.
540
+ **This is the standing check.** A rule that never fires produces no evidence of
541
+ its own, so nothing except this line would ever say so; a rule id permanently
542
+ in `never` across every account is dead or wrong. `fired + never` always equals
543
+ `rules`. Read `never` only when `classified` is non-zero: an account with no
544
+ specialists puts every rule in `never` and would otherwise be
545
+ indistinguishable from a table that was never wired. Today `reads-and-sends`
546
+ sits in `never` on an install whose agents are all shipped, which is expected
547
+ and not a fault.
548
+ - `op=risk-surface status=load-failed reason=<msg>`, emitted with
549
+ `[agents] op=risk-surface-failed reason=registry-unreadable detail=<msg>` — the
550
+ plugin registry did not parse, so every row is forced red and the listing
551
+ returns `riskSurfaceFailed: true`. Both lines say the same thing; the second is
552
+ the greppable shape, so one pattern (`\[agents\] op=(risk|rule-census|risk-surface-failed)`)
553
+ covers the per-agent lines, the census and the outage that forced them. Without
554
+ the forced red, every plugin tool would land in `unresolved` and a registry
555
+ outage would read as agent drift across every card at once; without the
556
+ response field, a red row would be indistinguishable from a genuinely dangerous
557
+ agent, because nothing resolved so `unresolved` is empty and the per-tool
558
+ explanation cannot fire. Every row's reason then says the registry is the
559
+ cause rather than asserting a capability the derivation never produced.
323
560
  - `op=disabled-store status=parse-failed reason=<msg>` — the listing then treats
324
561
  every agent as enabled, which is what they actually are. A read surface shows
325
562
  the true dispatchable set rather than a comforting one.
@@ -144,12 +144,22 @@ Every new node in {{productName}}'s graph is created with at least one connectio
144
144
 
145
145
  Every node also carries a provenance stamp — which agent wrote it, in which session, via which tool. You never see these fields, but they are how operators trace unusual growth back to the code path that produced it, and why your graph stays clean over time.
146
146
 
147
- **Two write surfaces, one substrate.** General agents write through schema-aware helpers — {{productName}} can record a new contact, a new commitment, a new preference without ever typing a database query, and the helper enforces the connection-and-provenance rule above structurally. The graph-steward role (the specialist {{productName}} dispatches when you ask for graph hygiene — "merge those two duplicate contacts," "wire those four tasks to the meeting," "rename the legacy label across the graph") additionally has a raw Cypher write tool for the multi-step operations the helpers cannot express. The steward role internalises the same connection-and-provenance discipline in its prompt; a post-write audit emits a warning on every breach so the same rules apply to both surfaces. Both paths feed the same hourly orphan trend and the same forensic provenance fields — read-side, you cannot tell the two apart, and that is the point.
147
+ **Two write surfaces, one substrate.** General agents write through schema-aware helpers — {{productName}} can record a new contact, a new commitment, a new preference without ever typing a database query, and the helper enforces the connection-and-provenance rule above structurally. The librarian (the specialist {{productName}} dispatches for ingest and graph hygiene — "merge those two duplicate contacts," "wire those four tasks to the meeting," "import this archive") additionally has a raw Cypher write tool, scoped to executing templates other tools emit, for the multi-step operations the helpers cannot express. The steward role internalises the same connection-and-provenance discipline in its prompt; a post-write audit emits a warning on every breach so the same rules apply to both surfaces. Both paths feed the same hourly orphan trend and the same forensic provenance fields — read-side, you cannot tell the two apart, and that is the point.
148
148
 
149
149
  ## Vertical schemas
150
150
 
151
151
  On top of the base graph, each brand boots one optional **vertical** — an extra set of entity types tailored to a trade. The vertical is named by `brand.json#vertical` and defined in a `schema-<name>.md` reference; the memory plugin loads it at startup and validates every write against base + the active vertical. Real Agent boots `schema-estate-agent` (Listing, Property, Viewing, Offer). SiteDesk boots `schema-construction`, the canonical JobLogic-derived field-service ontology, which adds the service-delivery entities — `Job`, `Customer`, `Site`, `Asset`, `Visit`, `Quote`, `QuoteLine`, `Valuation`, `VariationNote`, `JobCost`, `Part`, `PurchaseOrder`, `Invoice`, `InboundInvoice`, `PpmContract`, `WhatsAppGroup` (with `Engineer` and `Supplier` as additional labels on `Person`/`Organization`) — grounded in real builder job folders so a job's customer, site, quote, valuations, variations, costs, and received supplier invoices all hang off one `Job` node. The default SiteDesk brand boots no vertical (base graph only).
152
152
 
153
+ ### Estate agents: a listing needs no photo, a property needs no listing
154
+
155
+ Two things {{productName}} used to refuse, and no longer does.
156
+
157
+ **A listing can be recorded before it has a photo.** You take the instruction on Monday and the photographer comes on Thursday. The listing exists as a business fact for those three days, so {{productName}} records it as soon as you tell it about it, with the photo and the live page link added whenever they arrive. The same applies to the link: a property's page does not exist until the site is published.
158
+
159
+ **A property can be recorded before it has a listing.** A property you have valued, or been asked to appraise, or are holding off-market is a real property. {{productName}} records it as the property itself, with no marketing attached, and the listing hangs off it later — the same property can be listed for sale, withdrawn, and re-listed to let without ever becoming three properties.
160
+
161
+ Neither gap is forgotten. Once a day {{productName}} counts the listings visible to the public that still have no photo, and the properties that still have no listing, so a gap that should have closed by now can be seen rather than guessed at. If a public listing genuinely has no photo, its property card is shown as text without one rather than with a broken image.
162
+
153
163
  ## Public-facing summaries for customer-readable subjects
154
164
 
155
165
  Some entities in your graph are knowable by people outside your team — companies you work with, projects you've delivered, the business itself. For those entities ({{productName}} treats `:Organization`, `:Concept`, `:Project`, and `:LocalBusiness` this way), {{productName}} maintains two summaries: a private one only you and your specialist agents see, and a customer-facing public one your public agents are allowed to surface.
@@ -50,11 +50,13 @@ Tell {{productName}} naturally:
50
50
 
51
51
  - "List my workflows."
52
52
  - "Show me the follow-up workflow."
53
- - "Pause the new-lead workflow." or "Turn the new-lead workflow back on."
53
+ - "Stop running the new-lead workflow." or "Start running the new-lead workflow again."
54
54
  - "Change the follow-up workflow so it also messages me."
55
55
  - "Delete the old onboarding workflow."
56
56
 
57
- Pausing keeps a workflow but stops it running. Editing replaces the steps or the inputs with the new version you describe. Deleting removes the workflow and its run history, so {{productName}} confirms with you first.
57
+ Stopping a workflow keeps it but stops it running. Editing replaces the steps or the inputs with the new version you describe. Deleting removes the workflow and its run history, so {{productName}} confirms with you first.
58
+
59
+ A workflow is not a routine. "Pause the morning routine" is about a scheduled trigger, not about a workflow, so say routine when you mean the scheduled thing and {{productName}} will reach for the right one.
58
60
 
59
61
  ## Scheduling a Workflow
60
62
 
@@ -1,4 +1,4 @@
1
- import { describe, it, expect, vi, beforeEach } from "vitest";
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
2
2
  // Mock the heavy IMAP/SMTP/credentials deps so emailStatus is exercised over its
3
3
  // reporting logic in isolation. The never-connected signal is the focus.
4
4
  const imap = vi.hoisted(() => ({ testConnection: vi.fn(), getInboxCount: vi.fn() }));
@@ -86,6 +86,77 @@ describe("email-status multi-mailbox list surface", () => {
86
86
  const out = await emailStatus({ accountId: "acct-1", mailbox: "c@x.com" });
87
87
  expect(out).toMatch(/No mailbox c@x\.com/);
88
88
  expect(out).toMatch(/Stored mailbox identities: \[a@x\.com, b@x\.com\]/);
89
+ // The census is IMAP-only, so the refusal must say so and name the other plugin.
90
+ expect(out).toMatch(/This lists IMAP mailboxes only/);
91
+ expect(out).toMatch(/if c@x\.com is a Microsoft 365 address, call outlook-mailbox-list/);
92
+ });
93
+ });
94
+ // Task 2156. The zero-config branch had no coverage: both beforeEach blocks
95
+ // above stub listConfigs with a non-empty array, so `configs.length === 0` was
96
+ // never reached — which is why the account-wide-claim defect shipped.
97
+ describe("email-status zero-configured-mailbox refusal", () => {
98
+ beforeEach(() => {
99
+ cred.listConfigs.mockResolvedValue([]);
100
+ });
101
+ it("names the outlook plugin's list tool instead of claiming the account has no mail", async () => {
102
+ const out = await emailStatus({ accountId: "acct-1" });
103
+ expect(out).toMatch(/outlook-mailbox-list/);
104
+ expect(out).toMatch(/No IMAP mailbox is configured in the email plugin/);
105
+ expect(out).toMatch(/email-setup/);
106
+ });
107
+ it("no longer emits the unqualified account-wide claim", async () => {
108
+ const out = await emailStatus({ accountId: "acct-1" });
109
+ expect(out).not.toMatch(/Email: not configured/);
110
+ expect(out).not.toMatch(/the agent's email account/);
111
+ });
112
+ });
113
+ // Task 2156. The live incident left no searchable trace because email-status
114
+ // emitted no log line at all — the absence of an outlook cred-resolve line was
115
+ // the only evidence that the wrong plugin had been asked.
116
+ describe("email-status outcome observability", () => {
117
+ let writes;
118
+ beforeEach(() => {
119
+ writes = [];
120
+ vi.spyOn(process.stderr, "write").mockImplementation(((chunk) => {
121
+ writes.push(String(chunk));
122
+ return true;
123
+ }));
124
+ });
125
+ afterEach(() => {
126
+ vi.restoreAllMocks();
127
+ });
128
+ const outcomes = () => writes.filter((w) => w.includes("email-status op=result"));
129
+ it("records no-mailbox when nothing is configured", async () => {
130
+ cred.listConfigs.mockResolvedValue([]);
131
+ await emailStatus({ accountId: "acct-1" });
132
+ expect(outcomes()).toHaveLength(1);
133
+ expect(outcomes()[0]).toContain("[email] email-status op=result outcome=no-mailbox");
134
+ });
135
+ it("records unknown-selector when the named mailbox matches none", async () => {
136
+ cred.listConfigs.mockResolvedValue([config]);
137
+ await emailStatus({ accountId: "acct-1", mailbox: "nobody@x.com" });
138
+ expect(outcomes()).toHaveLength(1);
139
+ expect(outcomes()[0]).toContain("[email] email-status op=result outcome=unknown-selector");
140
+ });
141
+ it("records ok when a configured mailbox is reported", async () => {
142
+ cred.listConfigs.mockResolvedValue([config]);
143
+ imap.testConnection.mockResolvedValue(null);
144
+ smtp.testConnection.mockResolvedValue(null);
145
+ imap.getInboxCount.mockResolvedValue(0);
146
+ await emailStatus({ accountId: "acct-1" });
147
+ expect(outcomes()).toHaveLength(1);
148
+ expect(outcomes()[0]).toContain("[email] email-status op=result outcome=ok");
149
+ });
150
+ // eagerTool wraps every handler in wrapWithLifeline, which writes its own
151
+ // `[email] op=result tool=email-status token=... outcome=ok ...` after the
152
+ // handler returns. If this line shared that prefix, two lines would sit behind
153
+ // one grep with the lifeline's always last, so `tail -1` would report
154
+ // outcome=ok on exactly the call this line exists to record.
155
+ it("does not collide with the lifeline's op=result line for the same tool", async () => {
156
+ cred.listConfigs.mockResolvedValue([]);
157
+ await emailStatus({ accountId: "acct-1" });
158
+ expect(outcomes()).toHaveLength(1);
159
+ expect(outcomes()[0]).not.toMatch(/op=result tool=email-status/);
89
160
  });
90
161
  });
91
162
  //# sourceMappingURL=email-status.test.js.map