@rubytech/create-sitedesk-code 0.1.528 → 0.1.530

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 (282) hide show
  1. package/dist/index.js +13 -0
  2. package/package.json +1 -1
  3. package/payload/platform/lib/account-ingest-token/dist/index.d.ts +21 -0
  4. package/payload/platform/lib/account-ingest-token/dist/index.d.ts.map +1 -0
  5. package/payload/platform/lib/account-ingest-token/dist/index.js +128 -0
  6. package/payload/platform/lib/account-ingest-token/dist/index.js.map +1 -0
  7. package/payload/platform/lib/account-ingest-token/src/index.ts +137 -0
  8. package/payload/platform/lib/account-ingest-token/tsconfig.json +8 -0
  9. package/payload/platform/lib/agent-dispatch-rule/dist/index.d.ts +5 -0
  10. package/payload/platform/lib/agent-dispatch-rule/dist/index.d.ts.map +1 -1
  11. package/payload/platform/lib/agent-dispatch-rule/dist/index.js.map +1 -1
  12. package/payload/platform/lib/agent-dispatch-rule/src/index.ts +5 -0
  13. package/payload/platform/lib/routine-templates/dist/index.d.ts +19 -3
  14. package/payload/platform/lib/routine-templates/dist/index.d.ts.map +1 -1
  15. package/payload/platform/lib/routine-templates/dist/index.js +22 -4
  16. package/payload/platform/lib/routine-templates/dist/index.js.map +1 -1
  17. package/payload/platform/lib/routine-templates/dist/roster.d.ts +19 -6
  18. package/payload/platform/lib/routine-templates/dist/roster.d.ts.map +1 -1
  19. package/payload/platform/lib/routine-templates/dist/roster.js +127 -17
  20. package/payload/platform/lib/routine-templates/dist/roster.js.map +1 -1
  21. package/payload/platform/lib/routine-templates/src/__tests__/roster.test.ts +46 -3
  22. package/payload/platform/lib/routine-templates/src/__tests__/seed.test.ts +52 -10
  23. package/payload/platform/lib/routine-templates/src/index.ts +30 -4
  24. package/payload/platform/lib/routine-templates/src/roster.ts +147 -17
  25. package/payload/platform/package.json +2 -2
  26. package/payload/platform/plugins/admin/.claude-plugin/plugin.json +1 -1
  27. package/payload/platform/plugins/admin/PLUGIN.md +5 -1
  28. package/payload/platform/plugins/admin/mcp/dist/index.js +37 -0
  29. package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
  30. package/payload/platform/plugins/admin/mcp/dist/tools/linkedin-ingest-token.d.ts +10 -0
  31. package/payload/platform/plugins/admin/mcp/dist/tools/linkedin-ingest-token.d.ts.map +1 -0
  32. package/payload/platform/plugins/admin/mcp/dist/tools/linkedin-ingest-token.js +22 -0
  33. package/payload/platform/plugins/admin/mcp/dist/tools/linkedin-ingest-token.js.map +1 -0
  34. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +31 -6
  35. package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +12 -0
  36. package/payload/platform/plugins/docs/references/admin-ui.md +28 -3
  37. package/payload/platform/plugins/docs/references/linkedin-extension.md +2 -2
  38. package/payload/platform/plugins/linkedin-extension/extension/README.md +3 -3
  39. package/payload/platform/plugins/linkedin-extension/extension/background/sw.js +12 -7
  40. package/payload/platform/plugins/linkedin-extension/extension/content/profile.js +4 -1
  41. package/payload/platform/plugins/linkedin-extension/extension/content/thread.js +4 -1
  42. package/payload/platform/plugins/linkedin-extension/extension/options/options.html +3 -3
  43. package/payload/platform/plugins/linkedin-extension/extension/options/options.js +24 -16
  44. package/payload/platform/plugins/scheduling/PLUGIN.md +2 -0
  45. package/payload/platform/plugins/scheduling/mcp/dist/index.js +5 -0
  46. package/payload/platform/plugins/scheduling/mcp/dist/index.js.map +1 -1
  47. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/normalise-start-date.test.d.ts +2 -0
  48. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/normalise-start-date.test.d.ts.map +1 -0
  49. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/normalise-start-date.test.js +100 -0
  50. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/normalise-start-date.test.js.map +1 -0
  51. package/payload/platform/plugins/scheduling/mcp/dist/lib/dispatcher-env.d.ts +36 -0
  52. package/payload/platform/plugins/scheduling/mcp/dist/lib/dispatcher-env.d.ts.map +1 -0
  53. package/payload/platform/plugins/scheduling/mcp/dist/lib/dispatcher-env.js +82 -0
  54. package/payload/platform/plugins/scheduling/mcp/dist/lib/dispatcher-env.js.map +1 -0
  55. package/payload/platform/plugins/scheduling/mcp/dist/lib/time-format.d.ts +31 -0
  56. package/payload/platform/plugins/scheduling/mcp/dist/lib/time-format.d.ts.map +1 -1
  57. package/payload/platform/plugins/scheduling/mcp/dist/lib/time-format.js +99 -0
  58. package/payload/platform/plugins/scheduling/mcp/dist/lib/time-format.js.map +1 -1
  59. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/agent-turn-dispatch.test.js +12 -12
  60. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/agent-turn-dispatch.test.js.map +1 -1
  61. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/converge-startdate-utc.test.d.ts +2 -0
  62. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/converge-startdate-utc.test.d.ts.map +1 -0
  63. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/converge-startdate-utc.test.js +79 -0
  64. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/converge-startdate-utc.test.js.map +1 -0
  65. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/dispatch-lateness.test.d.ts +2 -0
  66. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/dispatch-lateness.test.d.ts.map +1 -0
  67. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/dispatch-lateness.test.js +23 -0
  68. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/dispatch-lateness.test.js.map +1 -0
  69. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/routine-roster-audit.test.js +61 -1
  70. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/routine-roster-audit.test.js.map +1 -1
  71. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/suspension-census.test.js +45 -2
  72. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/suspension-census.test.js.map +1 -1
  73. package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.d.ts +33 -1
  74. package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.d.ts.map +1 -1
  75. package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.js +111 -9
  76. package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.js.map +1 -1
  77. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js +21 -69
  78. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js.map +1 -1
  79. package/payload/platform/plugins/scheduling/mcp/dist/scripts/converge-startdate-utc.d.ts +24 -0
  80. package/payload/platform/plugins/scheduling/mcp/dist/scripts/converge-startdate-utc.d.ts.map +1 -0
  81. package/payload/platform/plugins/scheduling/mcp/dist/scripts/converge-startdate-utc.js +87 -0
  82. package/payload/platform/plugins/scheduling/mcp/dist/scripts/converge-startdate-utc.js.map +1 -0
  83. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-event-startdate.test.d.ts +2 -0
  84. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-event-startdate.test.d.ts.map +1 -0
  85. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-event-startdate.test.js +123 -0
  86. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-event-startdate.test.js.map +1 -0
  87. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-update-startdate.test.d.ts +2 -0
  88. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-update-startdate.test.d.ts.map +1 -0
  89. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-update-startdate.test.js +71 -0
  90. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-update-startdate.test.js.map +1 -0
  91. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-update-status.test.js +14 -3
  92. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-update-status.test.js.map +1 -1
  93. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.d.ts +9 -0
  94. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.d.ts.map +1 -1
  95. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js +19 -3
  96. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js.map +1 -1
  97. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.d.ts.map +1 -1
  98. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.js +24 -9
  99. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.js.map +1 -1
  100. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts.map +1 -1
  101. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +1 -0
  102. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
  103. package/payload/server/{chunk-UTIHI6KV.js → chunk-2YMGNYA3.js} +12 -12
  104. package/payload/server/{manager-B4LRDZKC.js → manager-XPRN5UF5.js} +1 -1
  105. package/payload/server/package.json +1 -1
  106. package/payload/server/public/activity.html +5 -5
  107. package/payload/server/public/agents.html +4 -4
  108. package/payload/server/public/assets/{AdminLoginScreens-Bx9vPuUg.js → AdminLoginScreens-7Czw3MAC.js} +1 -1
  109. package/payload/server/public/assets/AdminLoginScreens-7Czw3MAC.js.br +0 -0
  110. package/payload/server/public/assets/AdminLoginScreens-7Czw3MAC.js.gz +0 -0
  111. package/payload/server/public/assets/{AdminShell-BxJPbC3p.js → AdminShell-D5GApZ_n.js} +1 -1
  112. package/payload/server/public/assets/AdminShell-D5GApZ_n.js.br +0 -0
  113. package/payload/server/public/assets/AdminShell-D5GApZ_n.js.gz +0 -0
  114. package/payload/server/public/assets/{CdpScreencastSurface-5HLhTQTV.js → CdpScreencastSurface-BbekDUFw.js} +1 -1
  115. package/payload/server/public/assets/CdpScreencastSurface-BbekDUFw.js.br +0 -0
  116. package/payload/server/public/assets/CdpScreencastSurface-BbekDUFw.js.gz +0 -0
  117. package/payload/server/public/assets/{activity-BaSYn62l.js → activity-ClI-RgJu.js} +1 -1
  118. package/payload/server/public/assets/activity-ClI-RgJu.js.br +0 -0
  119. package/payload/server/public/assets/activity-ClI-RgJu.js.gz +0 -0
  120. package/payload/server/public/assets/{admin-CYCKrV_x.js → admin-svtCmBPk.js} +1 -1
  121. package/payload/server/public/assets/admin-svtCmBPk.js.br +0 -0
  122. package/payload/server/public/assets/admin-svtCmBPk.js.gz +0 -0
  123. package/payload/server/public/assets/{agents-D8EJG-ta.js → agents-BO8YBj8d.js} +1 -1
  124. package/payload/server/public/assets/agents-BO8YBj8d.js.br +0 -0
  125. package/payload/server/public/assets/agents-BO8YBj8d.js.gz +0 -0
  126. package/payload/server/public/assets/{browser-D6Y_Zu8C.js → browser-Bj8oTG5R.js} +1 -1
  127. package/payload/server/public/assets/browser-Bj8oTG5R.js.br +0 -0
  128. package/payload/server/public/assets/browser-Bj8oTG5R.js.gz +0 -0
  129. package/payload/server/public/assets/{calendar-DD4oVa-r.js → calendar-CrkSY8U7.js} +1 -1
  130. package/payload/server/public/assets/calendar-CrkSY8U7.js.br +0 -0
  131. package/payload/server/public/assets/calendar-CrkSY8U7.js.gz +0 -0
  132. package/payload/server/public/assets/chat-Bvxoni2e.js +1 -0
  133. package/payload/server/public/assets/chat-Bvxoni2e.js.br +0 -0
  134. package/payload/server/public/assets/chat-Bvxoni2e.js.gz +0 -0
  135. package/payload/server/public/assets/chevron-left-CdUzxzeB.js +1 -0
  136. package/payload/server/public/assets/chevron-left-CdUzxzeB.js.br +0 -0
  137. package/payload/server/public/assets/chevron-right-CKGwd-M0.js +1 -0
  138. package/payload/server/public/assets/chevron-right-CKGwd-M0.js.br +0 -0
  139. package/payload/server/public/assets/clock-Cf8Oe9qi.js +1 -0
  140. package/payload/server/public/assets/clock-Cf8Oe9qi.js.br +0 -0
  141. package/payload/server/public/assets/clock-Cf8Oe9qi.js.gz +0 -0
  142. package/payload/server/public/assets/data-DF0Pstdp.js +1 -0
  143. package/payload/server/public/assets/data-DF0Pstdp.js.br +1 -0
  144. package/payload/server/public/assets/data-DF0Pstdp.js.gz +0 -0
  145. package/payload/server/public/assets/{file-download-sXU3_umF.js → file-download-Di_s0_4w.js} +1 -1
  146. package/payload/server/public/assets/file-download-Di_s0_4w.js.br +0 -0
  147. package/payload/server/public/assets/file-download-Di_s0_4w.js.gz +0 -0
  148. package/payload/server/public/assets/{file-text-CeXBviDH.js → file-text-CP1KIrJV.js} +1 -1
  149. package/payload/server/public/assets/file-text-CP1KIrJV.js.br +1 -0
  150. package/payload/server/public/assets/file-text-CP1KIrJV.js.gz +0 -0
  151. package/payload/server/public/assets/{graph-BSuDP6k7.js → graph-BCMscnCV.js} +1 -1
  152. package/payload/server/public/assets/graph-BCMscnCV.js.br +0 -0
  153. package/payload/server/public/assets/graph-BCMscnCV.js.gz +0 -0
  154. package/payload/server/public/assets/{graph-labels-D2pQkgYW.js → graph-labels-CgP17xHK.js} +1 -1
  155. package/payload/server/public/assets/graph-labels-CgP17xHK.js.br +0 -0
  156. package/payload/server/public/assets/graph-labels-CgP17xHK.js.gz +0 -0
  157. package/payload/server/public/assets/{maximize-2-DlzSNygU.js → maximize-2-DkQzDv-g.js} +1 -1
  158. package/payload/server/public/assets/maximize-2-DkQzDv-g.js.br +0 -0
  159. package/payload/server/public/assets/maximize-2-DkQzDv-g.js.gz +0 -0
  160. package/payload/server/public/assets/{operator-BP61-xjz.js → operator-CLbCar9e.js} +1 -1
  161. package/payload/server/public/assets/operator-CLbCar9e.js.br +0 -0
  162. package/payload/server/public/assets/operator-CLbCar9e.js.gz +0 -0
  163. package/payload/server/public/assets/{page-DX7ArY_s.js → page-CNJl3tWT.js} +1 -1
  164. package/payload/server/public/assets/page-CNJl3tWT.js.br +0 -0
  165. package/payload/server/public/assets/page-CNJl3tWT.js.gz +0 -0
  166. package/payload/server/public/assets/{page-eQ4OVros.js → page-CPVUAwb8.js} +1 -1
  167. package/payload/server/public/assets/page-CPVUAwb8.js.br +0 -0
  168. package/payload/server/public/assets/page-CPVUAwb8.js.gz +0 -0
  169. package/payload/server/public/assets/{public-DPDKFKM2.js → public-DQea3Ybz.js} +1 -1
  170. package/payload/server/public/assets/public-DQea3Ybz.js.br +0 -0
  171. package/payload/server/public/assets/public-DQea3Ybz.js.gz +0 -0
  172. package/payload/server/public/assets/{rotate-ccw-BR0JbPFV.js → rotate-ccw-DPw0vXC0.js} +1 -1
  173. package/payload/server/public/assets/rotate-ccw-DPw0vXC0.js.br +0 -0
  174. package/payload/server/public/assets/rotate-ccw-DPw0vXC0.js.gz +0 -0
  175. package/payload/server/public/assets/routines-CwiiYpfK.js +2 -0
  176. package/payload/server/public/assets/routines-CwiiYpfK.js.br +0 -0
  177. package/payload/server/public/assets/routines-CwiiYpfK.js.gz +0 -0
  178. package/payload/server/public/assets/{skills-fH0uA7cj.js → skills-0FOjKUM-.js} +1 -1
  179. package/payload/server/public/assets/skills-0FOjKUM-.js.br +0 -0
  180. package/payload/server/public/assets/skills-0FOjKUM-.js.gz +0 -0
  181. package/payload/server/public/assets/{tasks-CrVzFrTR.js → tasks-BUVsPEGm.js} +1 -1
  182. package/payload/server/public/assets/tasks-BUVsPEGm.js.br +0 -0
  183. package/payload/server/public/assets/tasks-BUVsPEGm.js.gz +0 -0
  184. package/payload/server/public/assets/{time-entry-format-C_0jiMpQ.js → time-entry-format-B6fX_19a.js} +1 -1
  185. package/payload/server/public/assets/time-entry-format-B6fX_19a.js.br +0 -0
  186. package/payload/server/public/assets/time-entry-format-B6fX_19a.js.gz +0 -0
  187. package/payload/server/public/assets/{triangle-alert-eLJHC_QJ.js → triangle-alert-vAaSDhVq.js} +1 -1
  188. package/payload/server/public/assets/triangle-alert-vAaSDhVq.js.br +0 -0
  189. package/payload/server/public/assets/triangle-alert-vAaSDhVq.js.gz +0 -0
  190. package/payload/server/public/assets/{useCopyFeedback-vPCmdOmY.js → useCopyFeedback-BvIRgs7W.js} +1 -1
  191. package/payload/server/public/assets/useCopyFeedback-BvIRgs7W.js.br +0 -0
  192. package/payload/server/public/assets/useCopyFeedback-BvIRgs7W.js.gz +0 -0
  193. package/payload/server/public/assets/{useSubAccountSwitcher-DxuUS_C7.css → useSubAccountSwitcher-DM5Y9eio.css} +1 -1
  194. package/payload/server/public/assets/useSubAccountSwitcher-DM5Y9eio.css.br +0 -0
  195. package/payload/server/public/assets/{useSubAccountSwitcher-DxuUS_C7.css.gz → useSubAccountSwitcher-DM5Y9eio.css.gz} +0 -0
  196. package/payload/server/public/assets/{useVoiceRecorder-D5bFDRqL.js → useVoiceRecorder-CiDOh8PG.js} +1 -1
  197. package/payload/server/public/assets/useVoiceRecorder-CiDOh8PG.js.br +0 -0
  198. package/payload/server/public/assets/useVoiceRecorder-CiDOh8PG.js.gz +0 -0
  199. package/payload/server/public/assets/{wrench-sXisQXkf.js → wrench-BNBtwT2p.js} +1 -1
  200. package/payload/server/public/assets/wrench-BNBtwT2p.js.br +0 -0
  201. package/payload/server/public/assets/wrench-BNBtwT2p.js.gz +0 -0
  202. package/payload/server/public/browser.html +5 -5
  203. package/payload/server/public/calendar.html +7 -7
  204. package/payload/server/public/chat.html +13 -13
  205. package/payload/server/public/data.html +12 -12
  206. package/payload/server/public/graph.html +9 -9
  207. package/payload/server/public/index.html +16 -16
  208. package/payload/server/public/operator.html +15 -15
  209. package/payload/server/public/public.html +13 -13
  210. package/payload/server/public/routines.html +7 -7
  211. package/payload/server/public/skills.html +5 -5
  212. package/payload/server/public/tasks.html +6 -6
  213. package/payload/server/server.js +353 -209
  214. package/payload/server/public/assets/AdminLoginScreens-Bx9vPuUg.js.br +0 -0
  215. package/payload/server/public/assets/AdminLoginScreens-Bx9vPuUg.js.gz +0 -0
  216. package/payload/server/public/assets/AdminShell-BxJPbC3p.js.br +0 -0
  217. package/payload/server/public/assets/AdminShell-BxJPbC3p.js.gz +0 -0
  218. package/payload/server/public/assets/CdpScreencastSurface-5HLhTQTV.js.br +0 -0
  219. package/payload/server/public/assets/CdpScreencastSurface-5HLhTQTV.js.gz +0 -0
  220. package/payload/server/public/assets/activity-BaSYn62l.js.br +0 -0
  221. package/payload/server/public/assets/activity-BaSYn62l.js.gz +0 -0
  222. package/payload/server/public/assets/admin-CYCKrV_x.js.br +0 -0
  223. package/payload/server/public/assets/admin-CYCKrV_x.js.gz +0 -0
  224. package/payload/server/public/assets/agents-D8EJG-ta.js.br +0 -0
  225. package/payload/server/public/assets/agents-D8EJG-ta.js.gz +0 -0
  226. package/payload/server/public/assets/browser-D6Y_Zu8C.js.br +0 -0
  227. package/payload/server/public/assets/browser-D6Y_Zu8C.js.gz +0 -0
  228. package/payload/server/public/assets/calendar-DD4oVa-r.js.br +0 -0
  229. package/payload/server/public/assets/calendar-DD4oVa-r.js.gz +0 -0
  230. package/payload/server/public/assets/chat-CwWs69PO.js +0 -1
  231. package/payload/server/public/assets/chat-CwWs69PO.js.br +0 -0
  232. package/payload/server/public/assets/chat-CwWs69PO.js.gz +0 -0
  233. package/payload/server/public/assets/chevron-left-ClfIy5Fx.js +0 -1
  234. package/payload/server/public/assets/chevron-right-B0QvXpxl.js +0 -1
  235. package/payload/server/public/assets/chevron-right-B0QvXpxl.js.br +0 -0
  236. package/payload/server/public/assets/clock-BIaRnIP_.js +0 -1
  237. package/payload/server/public/assets/clock-BIaRnIP_.js.br +0 -0
  238. package/payload/server/public/assets/clock-BIaRnIP_.js.gz +0 -0
  239. package/payload/server/public/assets/data-O_9Kiicl.js +0 -1
  240. package/payload/server/public/assets/data-O_9Kiicl.js.br +0 -2
  241. package/payload/server/public/assets/data-O_9Kiicl.js.gz +0 -0
  242. package/payload/server/public/assets/file-download-sXU3_umF.js.br +0 -0
  243. package/payload/server/public/assets/file-download-sXU3_umF.js.gz +0 -0
  244. package/payload/server/public/assets/file-text-CeXBviDH.js.br +0 -0
  245. package/payload/server/public/assets/file-text-CeXBviDH.js.gz +0 -0
  246. package/payload/server/public/assets/graph-BSuDP6k7.js.br +0 -0
  247. package/payload/server/public/assets/graph-BSuDP6k7.js.gz +0 -0
  248. package/payload/server/public/assets/graph-labels-D2pQkgYW.js.br +0 -0
  249. package/payload/server/public/assets/graph-labels-D2pQkgYW.js.gz +0 -0
  250. package/payload/server/public/assets/maximize-2-DlzSNygU.js.br +0 -0
  251. package/payload/server/public/assets/maximize-2-DlzSNygU.js.gz +0 -0
  252. package/payload/server/public/assets/operator-BP61-xjz.js.br +0 -0
  253. package/payload/server/public/assets/operator-BP61-xjz.js.gz +0 -0
  254. package/payload/server/public/assets/page-DX7ArY_s.js.br +0 -0
  255. package/payload/server/public/assets/page-DX7ArY_s.js.gz +0 -0
  256. package/payload/server/public/assets/page-eQ4OVros.js.br +0 -0
  257. package/payload/server/public/assets/page-eQ4OVros.js.gz +0 -0
  258. package/payload/server/public/assets/public-DPDKFKM2.js.br +0 -0
  259. package/payload/server/public/assets/public-DPDKFKM2.js.gz +0 -0
  260. package/payload/server/public/assets/rotate-ccw-BR0JbPFV.js.br +0 -0
  261. package/payload/server/public/assets/rotate-ccw-BR0JbPFV.js.gz +0 -0
  262. package/payload/server/public/assets/routines-y413YZa-.js +0 -1
  263. package/payload/server/public/assets/routines-y413YZa-.js.br +0 -0
  264. package/payload/server/public/assets/routines-y413YZa-.js.gz +0 -0
  265. package/payload/server/public/assets/skills-fH0uA7cj.js.br +0 -0
  266. package/payload/server/public/assets/skills-fH0uA7cj.js.gz +0 -0
  267. package/payload/server/public/assets/tasks-CrVzFrTR.js.br +0 -0
  268. package/payload/server/public/assets/tasks-CrVzFrTR.js.gz +0 -0
  269. package/payload/server/public/assets/time-entry-format-C_0jiMpQ.js.br +0 -1
  270. package/payload/server/public/assets/time-entry-format-C_0jiMpQ.js.gz +0 -0
  271. package/payload/server/public/assets/triangle-alert-eLJHC_QJ.js.br +0 -1
  272. package/payload/server/public/assets/triangle-alert-eLJHC_QJ.js.gz +0 -0
  273. package/payload/server/public/assets/useCopyFeedback-vPCmdOmY.js.br +0 -0
  274. package/payload/server/public/assets/useCopyFeedback-vPCmdOmY.js.gz +0 -0
  275. package/payload/server/public/assets/useSubAccountSwitcher-DxuUS_C7.css.br +0 -0
  276. package/payload/server/public/assets/useVoiceRecorder-D5bFDRqL.js.br +0 -0
  277. package/payload/server/public/assets/useVoiceRecorder-D5bFDRqL.js.gz +0 -0
  278. package/payload/server/public/assets/wrench-sXisQXkf.js.br +0 -0
  279. package/payload/server/public/assets/wrench-sXisQXkf.js.gz +0 -0
  280. /package/payload/server/public/assets/{useSubAccountSwitcher-DMr3DR5N.js → useSubAccountSwitcher-BEwQMRMo.js} +0 -0
  281. /package/payload/server/public/assets/{useSubAccountSwitcher-DMr3DR5N.js.br → useSubAccountSwitcher-BEwQMRMo.js.br} +0 -0
  282. /package/payload/server/public/assets/{useSubAccountSwitcher-DMr3DR5N.js.gz → useSubAccountSwitcher-BEwQMRMo.js.gz} +0 -0
@@ -0,0 +1,79 @@
1
+ // Task 2213. The migration must be idempotent and must never guess a zone.
2
+ import { describe, it, expect, vi } from "vitest";
3
+ import { convergeStartDates } from "../converge-startdate-utc.js";
4
+ const ACCT = "acct-2213-aaaa";
5
+ /** A driver over an in-memory row set; SET writes mutate the rows. */
6
+ function fakeDriver(rows) {
7
+ return {
8
+ session: () => ({
9
+ run: vi.fn(async (cypher, params) => {
10
+ if (String(cypher).includes("SET e.startDate")) {
11
+ const row = rows.find((r) => r.eventId === params.eventId);
12
+ if (row)
13
+ row.startDate = params.startDate;
14
+ return { records: [] };
15
+ }
16
+ return {
17
+ records: rows
18
+ .filter((r) => r.startDate !== null)
19
+ .map((r) => ({ get: (k) => r[k] })),
20
+ };
21
+ }),
22
+ close: vi.fn(async () => { }),
23
+ }),
24
+ };
25
+ }
26
+ describe("convergeStartDates", () => {
27
+ it("rewrites every non-canonical form and leaves canonical and null alone", async () => {
28
+ const rows = [
29
+ { eventId: "e-offset", startDate: "2026-07-06T09:50:00+01:00", timezone: "Europe/London" },
30
+ { eventId: "e-zoneless", startDate: "2026-07-20T09:00:00", timezone: "Europe/London" },
31
+ {
32
+ eventId: "e-ms-offset",
33
+ startDate: "2026-08-02T19:00:00.000+01:00",
34
+ timezone: "Europe/London",
35
+ },
36
+ { eventId: "e-canonical", startDate: "2026-06-28T05:00:00.000Z", timezone: "UTC" },
37
+ { eventId: "e-null", startDate: null, timezone: "Europe/London" },
38
+ ];
39
+ const r = await convergeStartDates(fakeDriver(rows), [ACCT]);
40
+ expect(rows.find((x) => x.eventId === "e-offset").startDate).toBe("2026-07-06T08:50:00.000Z");
41
+ expect(rows.find((x) => x.eventId === "e-zoneless").startDate).toBe("2026-07-20T08:00:00.000Z");
42
+ expect(rows.find((x) => x.eventId === "e-ms-offset").startDate).toBe("2026-08-02T18:00:00.000Z");
43
+ expect(rows.find((x) => x.eventId === "e-canonical").startDate).toBe("2026-06-28T05:00:00.000Z");
44
+ expect(rows.find((x) => x.eventId === "e-null").startDate).toBeNull();
45
+ expect(r.rewritten).toBe(3);
46
+ });
47
+ it("is idempotent — a second run rewrites nothing", async () => {
48
+ const rows = [
49
+ { eventId: "e-offset", startDate: "2026-07-06T09:50:00+01:00", timezone: "Europe/London" },
50
+ ];
51
+ const driver = fakeDriver(rows);
52
+ await convergeStartDates(driver, [ACCT]);
53
+ const second = await convergeStartDates(driver, [ACCT]);
54
+ expect(second.rewritten).toBe(0);
55
+ expect(rows[0].startDate).toBe("2026-07-06T08:50:00.000Z");
56
+ });
57
+ it("refuses a zoneless row with no timezone instead of guessing", async () => {
58
+ const rows = [
59
+ { eventId: "e-nozone", startDate: "2026-07-20T09:00:00", timezone: null },
60
+ ];
61
+ const err = vi.spyOn(console, "error").mockImplementation(() => { });
62
+ const r = await convergeStartDates(fakeDriver(rows), [ACCT]);
63
+ expect(r.refused).toBe(1);
64
+ expect(rows[0].startDate).toBe("2026-07-20T09:00:00");
65
+ expect(err.mock.calls.map(String).some((l) => l.includes("op=refuse") && l.includes("e-nozone"))).toBe(true);
66
+ err.mockRestore();
67
+ });
68
+ it("prints a summary even when it changes nothing", async () => {
69
+ const err = vi.spyOn(console, "error").mockImplementation(() => { });
70
+ await convergeStartDates(fakeDriver([]), [ACCT]);
71
+ expect(err.mock.calls.map(String).some((l) => l.includes("op=done") && l.includes("rewritten=0"))).toBe(true);
72
+ err.mockRestore();
73
+ });
74
+ it("is a no-op with no local accounts", async () => {
75
+ const r = await convergeStartDates({ session: vi.fn() }, []);
76
+ expect(r).toEqual({ scanned: 0, rewritten: 0, refused: 0 });
77
+ });
78
+ });
79
+ //# sourceMappingURL=converge-startdate-utc.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"converge-startdate-utc.test.js","sourceRoot":"","sources":["../../../src/scripts/__tests__/converge-startdate-utc.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=dispatch-lateness.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch-lateness.test.d.ts","sourceRoot":"","sources":["../../../src/scripts/__tests__/dispatch-lateness.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,23 @@
1
+ // Task 2213. The incident logged "2 processed, 2 dispatched, 0 errors" and
2
+ // httpStatus=200 while landing 60 minutes late. Nothing measured the gap.
3
+ import { describe, it, expect } from "vitest";
4
+ import { lateMs } from "../agent-turn-dispatch.js";
5
+ describe("lateMs", () => {
6
+ it("is the elapsed gap for a dispatch at its due instant", () => {
7
+ expect(lateMs("2026-07-30T10:45:00.000Z", "2026-07-30T10:45:01.389Z")).toBe(1389);
8
+ });
9
+ it("is a full hour for the incident row under the pre-fix comparison", () => {
10
+ // startDate 2026-07-30T11:45:00+01:00 is 10:45:00Z; it dispatched at 11:45:02.169Z.
11
+ expect(lateMs("2026-07-30T11:45:00+01:00", "2026-07-30T11:45:02.169Z")).toBe(3_602_169);
12
+ });
13
+ it("never goes negative for a dispatch that beat its due instant", () => {
14
+ expect(lateMs("2026-07-30T10:45:00.000Z", "2026-07-30T10:44:00.000Z")).toBe(0);
15
+ });
16
+ it("is null when there is no due instant to measure against", () => {
17
+ expect(lateMs(null, "2026-07-30T10:45:00.000Z")).toBeNull();
18
+ });
19
+ it("is null rather than NaN for an unparseable due instant", () => {
20
+ expect(lateMs("not a date", "2026-07-30T10:45:00.000Z")).toBeNull();
21
+ });
22
+ });
23
+ //# sourceMappingURL=dispatch-lateness.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch-lateness.test.js","sourceRoot":"","sources":["../../../src/scripts/__tests__/dispatch-lateness.test.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,0EAA0E;AAC1E,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAEnD,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,0BAA0B,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,oFAAoF;QACpF,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,0BAA0B,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,0BAA0B,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,0BAA0B,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,0BAA0B,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACtE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -8,7 +8,7 @@
8
8
  * cannot be told apart from a check that has stopped running.
9
9
  */
10
10
  import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
11
- import { auditRoutineRoster, auditDispatchModeNone, auditNullTimezone, auditStartDateNeverFired, auditScheduledNoNextRun, dispatchGapReason, } from "../agent-turn-dispatch.js";
11
+ import { auditRoutineRoster, auditDispatchModeNone, auditNullTimezone, auditStartDateNeverFired, auditScheduledNoNextRun, auditNonCanonicalStartDate, dispatchGapReason, } from "../agent-turn-dispatch.js";
12
12
  import { ROUTINE_ROSTER_KEYS } from "../../../../../../lib/routine-templates/dist/index.js";
13
13
  const ACCT_A = "aaaaaaaa-1111-4111-8111-111111111111";
14
14
  const ACCT_B = "bbbbbbbb-2222-4222-8222-222222222222";
@@ -357,4 +357,64 @@ describe("auditScheduledNoNextRun", () => {
357
357
  expect(lines()[0]).toContain("op=scheduled-no-nextrun-error");
358
358
  });
359
359
  });
360
+ describe("auditNonCanonicalStartDate", () => {
361
+ it("names the offending events and counts them per account", async () => {
362
+ const driver = {
363
+ session: () => ({
364
+ run: vi.fn(async () => ({
365
+ records: [
366
+ {
367
+ get: (k) => k === "accountId"
368
+ ? ACCT_A
369
+ : k === "n"
370
+ ? { toNumber: () => 2 }
371
+ : ["evt-offset", "evt-zoneless"],
372
+ },
373
+ ],
374
+ })),
375
+ close: vi.fn(async () => { }),
376
+ }),
377
+ };
378
+ const err = vi.spyOn(console, "error").mockImplementation(() => { });
379
+ await auditNonCanonicalStartDate(driver, [ACCT_A, ACCT_B]);
380
+ const lines = err.mock.calls.map(String);
381
+ expect(lines.some((l) => l.includes("op=non-canonical-startdate") &&
382
+ l.includes("count=2") &&
383
+ l.includes("evt-offset"))).toBe(true);
384
+ err.mockRestore();
385
+ });
386
+ it("still emits a line at count=0 for a clean account", async () => {
387
+ // A standing check that goes quiet when healthy cannot be told apart from
388
+ // one that has stopped running. This assertion is the whole point.
389
+ const driver = {
390
+ session: () => ({ run: vi.fn(async () => ({ records: [] })), close: vi.fn(async () => { }) }),
391
+ };
392
+ const err = vi.spyOn(console, "error").mockImplementation(() => { });
393
+ await auditNonCanonicalStartDate(driver, [ACCT_A, ACCT_B]);
394
+ const lines = err.mock.calls
395
+ .map(String)
396
+ .filter((l) => l.includes("op=non-canonical-startdate"));
397
+ expect(lines).toHaveLength(2);
398
+ expect(lines.every((l) => l.includes("count=0"))).toBe(true);
399
+ err.mockRestore();
400
+ });
401
+ it("does not throw when the session rejects", async () => {
402
+ const driver = {
403
+ session: () => ({
404
+ run: vi.fn(async () => {
405
+ throw new Error("bolt down");
406
+ }),
407
+ close: vi.fn(async () => { }),
408
+ }),
409
+ };
410
+ const err = vi.spyOn(console, "error").mockImplementation(() => { });
411
+ await expect(auditNonCanonicalStartDate(driver, [ACCT_A])).resolves.toBeUndefined();
412
+ err.mockRestore();
413
+ });
414
+ it("is a no-op with no local accounts", async () => {
415
+ const session = vi.fn();
416
+ await auditNonCanonicalStartDate({ session }, []);
417
+ expect(session).not.toHaveBeenCalled();
418
+ });
419
+ });
360
420
  //# sourceMappingURL=routine-roster-audit.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"routine-roster-audit.test.js","sourceRoot":"","sources":["../../../src/scripts/__tests__/routine-roster-audit.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"routine-roster-audit.test.js","sourceRoot":"","sources":["../../../src/scripts/__tests__/routine-roster-audit.test.ts"],"names":[],"mappings":"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"}
@@ -32,14 +32,14 @@ describe("auditSuspensionCensus", () => {
32
32
  it("emits a line for an account with no routines at all, so silence is never healthy", async () => {
33
33
  await auditSuspensionCensus(driverReturning([]), [ACCT]);
34
34
  expect(censusLines()).toEqual([
35
- "[schedule-audit] op=suspension-census acct=aaaaaaaa routines=0 dispatchable=0 suspended=0 due=0 cancelled=0 completed=0 other=0",
35
+ "[schedule-audit] op=suspension-census acct=aaaaaaaa routines=0 dispatchable=0 suspended=0 due=0 cancelled=0 completed=0 other=0 unattributed=0",
36
36
  ]);
37
37
  });
38
38
  it("reports each status and leaves other at zero when they account for every row", async () => {
39
39
  await auditSuspensionCensus(driverReturning([
40
40
  { accountId: ACCT, routines: 10, dispatchable: 4, suspended: 3, due: 2, cancelled: 1 },
41
41
  ]), [ACCT]);
42
- expect(censusLines()[0]).toBe("[schedule-audit] op=suspension-census acct=aaaaaaaa routines=10 dispatchable=4 suspended=3 due=2 cancelled=1 completed=0 other=0");
42
+ expect(censusLines()[0]).toBe("[schedule-audit] op=suspension-census acct=aaaaaaaa routines=10 dispatchable=4 suspended=3 due=2 cancelled=1 completed=0 other=0 unattributed=0");
43
43
  });
44
44
  // The standing check. dispatchable + suspended + due + cancelled + other =
45
45
  // routines holds by construction, so a non-zero `other` is the only signal
@@ -79,6 +79,49 @@ describe("auditSuspensionCensus", () => {
79
79
  ]), [ACCT]);
80
80
  expect(censusLines()[0]).toContain("completed=1 other=0");
81
81
  });
82
+ // Task 2209 — the detail-modal history panel can only show a reason that was
83
+ // written. A suspend path that appended no note leaves the panel blank with
84
+ // nothing to say why, and no log line exists for a note that was never
85
+ // written, so this count is the only signal. These cases stub the driver, so
86
+ // they prove the field plumbing and the emitted line, not the Cypher
87
+ // predicate; that is the publish-gated device check in Task 2209.
88
+ it("counts a suspended row whose notes never record the suspension", async () => {
89
+ await auditSuspensionCensus(driverReturning([
90
+ { accountId: ACCT, routines: 2, dispatchable: 1, suspended: 1, due: 0, cancelled: 0, completed: 0, unattributed: 1 },
91
+ ]), [ACCT]);
92
+ expect(censusLines()[0]).toContain("other=0 unattributed=1");
93
+ });
94
+ it("reports unattributed at zero rather than omitting the field, so a healthy account and a dead audit do not read alike", async () => {
95
+ await auditSuspensionCensus(driverReturning([
96
+ { accountId: ACCT, routines: 2, dispatchable: 1, suspended: 1, due: 0, cancelled: 0, completed: 0, unattributed: 0 },
97
+ ]), [ACCT]);
98
+ expect(censusLines()[0]).toContain("unattributed=0");
99
+ });
100
+ it("carries unattributed=0 for an account the query returned no row for", async () => {
101
+ await auditSuspensionCensus(driverReturning([]), [ACCT]);
102
+ expect(censusLines()[0]).toContain("unattributed=0");
103
+ });
104
+ // `other` reconciles status buckets against the row count; `unattributed`
105
+ // reconciles a suspended row against whether anything recorded why. Folding
106
+ // one into the other would make a missing note look like an unknown status.
107
+ it("keeps unattributed out of the other arithmetic", async () => {
108
+ await auditSuspensionCensus(driverReturning([
109
+ { accountId: ACCT, routines: 3, dispatchable: 1, suspended: 2, due: 0, cancelled: 0, completed: 0, unattributed: 2 },
110
+ ]), [ACCT]);
111
+ expect(censusLines()[0]).toContain("other=0 unattributed=2");
112
+ });
113
+ it("unwraps a neo4j integer for unattributed too", async () => {
114
+ await auditSuspensionCensus(driverReturning([
115
+ {
116
+ accountId: ACCT,
117
+ routines: { toNumber: () => 1 }, dispatchable: { toNumber: () => 0 },
118
+ suspended: { toNumber: () => 1 }, due: { toNumber: () => 0 },
119
+ cancelled: { toNumber: () => 0 }, completed: { toNumber: () => 0 },
120
+ unattributed: { toNumber: () => 1 },
121
+ },
122
+ ]), [ACCT]);
123
+ expect(censusLines()[0]).toContain("unattributed=1");
124
+ });
82
125
  it("never throws, so a census failure cannot take the sweep down", async () => {
83
126
  const driver = {
84
127
  session: () => ({
@@ -1 +1 @@
1
- {"version":3,"file":"suspension-census.test.js","sourceRoot":"","sources":["../../../src/scripts/__tests__/suspension-census.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"suspension-census.test.js","sourceRoot":"","sources":["../../../src/scripts/__tests__/suspension-census.test.ts"],"names":[],"mappings":"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"}
@@ -63,6 +63,16 @@ export declare function dispatchGapReason(fields: Parameters<typeof chooseDispat
63
63
  * nowhere to fire.
64
64
  */
65
65
  export declare function targetOf(mode: DispatchMode): string;
66
+ /**
67
+ * Task 2213 — how late this dispatch is against the instant the row was due.
68
+ *
69
+ * The incident that produced this field logged `2 processed, 2 dispatched,
70
+ * 0 errors` and `httpStatus=200` while landing 60 minutes late, because nothing
71
+ * compared the dispatch time to the due time. Clamped at zero: the sweep can run
72
+ * fractionally early against a rounded due instant, and a negative "lateness"
73
+ * reads as a clock fault that is not there.
74
+ */
75
+ export declare function lateMs(dueAt: string | null, now: string): number | null;
66
76
  /**
67
77
  * Fire an agent-bearing dispatch: POST the prompt to the UI server's loopback
68
78
  * inject route and record the outcome on the `:Event` node exactly as
@@ -74,7 +84,7 @@ export declare function targetOf(mode: DispatchMode): string;
74
84
  * Task 2136 — this also closes the `:RoutineRun` its caller opened, and
75
85
  * persists the produced-output pointer the inject route returns.
76
86
  */
77
- export declare function dispatchAgentTurn(eventId: string, channel: string, destination: string, prompt: string, eventAccountId: string, nextRun: string | null, createdByTool: string | null, accountsDir: string, driver: Driver, runId: string | null): Promise<void>;
87
+ export declare function dispatchAgentTurn(eventId: string, channel: string, destination: string, prompt: string, eventAccountId: string, nextRun: string | null, dueAt: string | null, createdByTool: string | null, accountsDir: string, driver: Driver, runId: string | null): Promise<void>;
78
88
  /**
79
89
  * The no-event detector. Each heartbeat tick, over every agent-dispatch event
80
90
  * for a local account, re-checks the destination binding against the current
@@ -253,4 +263,26 @@ export declare function auditSuspensionCensus(driver: Driver, localAccountIds: s
253
263
  * throws (honours the sweep contract).
254
264
  */
255
265
  export declare function auditSelfCancels(driver: Driver, localAccountIds: string[], nowMs: number): Promise<void>;
266
+ /**
267
+ * Task 2213 — a `startDate` that is not the canonical 24-character
268
+ * `toISOString()` form.
269
+ *
270
+ * A standing check rather than a line at the write site, because the failure it
271
+ * guards emits NO event. A row written with a `+01:00` offset logs a clean
272
+ * write, sits in the graph looking healthy, and then fires 60 minutes late
273
+ * exactly once; re-running nothing surfaces it, and by the time anyone looks the
274
+ * row is already `due`. Only periodic reconciliation of stored state against the
275
+ * canonical form reports it.
276
+ *
277
+ * The predicate is deliberately the full 24-character shape, not merely "ends
278
+ * with Z". `2026-07-30T10:45:00Z` is the right instant and still wrong, because
279
+ * `"…00.000Z"` sorts before `"…00Z"` and a mixed-width corpus breaks the
280
+ * ordering the fix restores.
281
+ *
282
+ * `count=0` is emitted every sweep for every local account. A check that goes
283
+ * quiet when healthy cannot be distinguished from one that has stopped running.
284
+ *
285
+ * Never throws (honours the sweep's contract).
286
+ */
287
+ export declare function auditNonCanonicalStartDate(driver: Driver, localAccountIds: string[]): Promise<void>;
256
288
  //# sourceMappingURL=agent-turn-dispatch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-turn-dispatch.d.ts","sourceRoot":"","sources":["../../src/scripts/agent-turn-dispatch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-turn-dispatch.d.ts","sourceRoot":"","sources":["../../src/scripts/agent-turn-dispatch.ts"],"names":[],"mappings":"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"}
@@ -76,6 +76,24 @@ export function targetOf(mode) {
76
76
  return `${mode.plugin}.${mode.tool}`;
77
77
  return "-";
78
78
  }
79
+ /**
80
+ * Task 2213 — how late this dispatch is against the instant the row was due.
81
+ *
82
+ * The incident that produced this field logged `2 processed, 2 dispatched,
83
+ * 0 errors` and `httpStatus=200` while landing 60 minutes late, because nothing
84
+ * compared the dispatch time to the due time. Clamped at zero: the sweep can run
85
+ * fractionally early against a rounded due instant, and a negative "lateness"
86
+ * reads as a clock fault that is not there.
87
+ */
88
+ export function lateMs(dueAt, now) {
89
+ if (!dueAt)
90
+ return null;
91
+ const due = Date.parse(dueAt);
92
+ const at = Date.parse(now);
93
+ if (Number.isNaN(due) || Number.isNaN(at))
94
+ return null;
95
+ return Math.max(0, at - due);
96
+ }
79
97
  /**
80
98
  * Fire an agent-bearing dispatch: POST the prompt to the UI server's loopback
81
99
  * inject route and record the outcome on the `:Event` node exactly as
@@ -87,7 +105,12 @@ export function targetOf(mode) {
87
105
  * Task 2136 — this also closes the `:RoutineRun` its caller opened, and
88
106
  * persists the produced-output pointer the inject route returns.
89
107
  */
90
- export async function dispatchAgentTurn(eventId, channel, destination, prompt, eventAccountId, nextRun, createdByTool, accountsDir, driver,
108
+ export async function dispatchAgentTurn(eventId, channel, destination, prompt, eventAccountId, nextRun,
109
+ // Task 2213 — the instant the row became eligible: `startDate` on the
110
+ // one-time path, the PRE-ADVANCE `nextRun` on the recurring path. Never the
111
+ // freshly-advanced value, which is in the future by construction and would
112
+ // report every dispatch as zero late.
113
+ dueAt, createdByTool, accountsDir, driver,
91
114
  // Task 2136 — the record this dispatch belongs to. Null when the open failed;
92
115
  // every routine-run call is then a no-op, so a bookkeeping failure never costs
93
116
  // a dispatch.
@@ -95,7 +118,9 @@ runId) {
95
118
  const port = process.env.MAXY_UI_INTERNAL_PORT;
96
119
  const promptBytes = Buffer.byteLength(prompt, "utf8");
97
120
  const recurring = nextRun !== null;
98
- console.error(`[schedule-dispatch] op=due eventId=${eventId} channel=${channel} destination=${destination} account=${eventAccountId} recurring=${recurring}`);
121
+ const late = lateMs(dueAt, new Date().toISOString());
122
+ console.error(`[schedule-dispatch] op=due eventId=${eventId} channel=${channel} destination=${destination} ` +
123
+ `account=${eventAccountId} recurring=${recurring} lateMs=${late ?? "-"}`);
99
124
  console.error(`[schedule-dispatch] op=agent-inject eventId=${eventId} channel=${channel} destination=${destination} promptBytes=${promptBytes} nextRun=${nextRun ?? "-"}`);
100
125
  // Task 1516 — the operator-provenance marker. Every field is resolved by the
101
126
  // dispatcher from the owning account/event, NEVER from `prompt` (the payload),
@@ -441,11 +466,13 @@ export async function auditNullTimezone(driver, localAccountIds) {
441
466
  * Task 2146 — is this start date itself an occurrence of its own recurrence?
442
467
  *
443
468
  * The same anchor `schedule-event` now uses: one millisecond before the start
444
- * instant, so an exact match is returned rather than consumed. Compared as
445
- * epoch milliseconds, not as strings `startDate` is stored in mixed ISO
446
- * shapes (`2026-07-26T08:00:00` and `2026-08-02T19:00:00.000+01:00` both occur
447
- * on one account) while `toISOString()` always normalises, so a string equality
448
- * would miss every offset-form row.
469
+ * instant, so an exact match is returned rather than consumed. Compared as epoch
470
+ * milliseconds, not as strings. Task 2213 made every stored `startDate`
471
+ * canonical UTC, so the mixed ISO shapes that used to occur on one account
472
+ * (`2026-07-26T08:00:00` beside `2026-08-02T19:00:00.000+01:00`) can no longer
473
+ * be written but epoch comparison stays, because it is correct for both the
474
+ * converged corpus and any row a future writer gets wrong, and
475
+ * `op=non-canonical-startdate` is what reports the latter.
449
476
  *
450
477
  * A recurrence that will not parse, or a start date that will not parse,
451
478
  * returns false: neither can be shown to have skipped an occurrence, and
@@ -670,7 +697,11 @@ export async function auditSuspensionCensus(driver, localAccountIds) {
670
697
  sum(CASE WHEN e.eventStatus = 'suspended' THEN 1 ELSE 0 END) AS suspended,
671
698
  sum(CASE WHEN e.eventStatus = 'due' THEN 1 ELSE 0 END) AS due,
672
699
  sum(CASE WHEN e.eventStatus = 'cancelled' THEN 1 ELSE 0 END) AS cancelled,
673
- sum(CASE WHEN e.eventStatus = 'completed' THEN 1 ELSE 0 END) AS completed`, { localAccountIds });
700
+ sum(CASE WHEN e.eventStatus = 'completed' THEN 1 ELSE 0 END) AS completed,
701
+ sum(CASE WHEN e.eventStatus = 'suspended'
702
+ AND ( (e.notes IS NULL AND e.routineTemplate IS NULL)
703
+ OR (e.notes IS NOT NULL AND NOT e.notes CONTAINS 'Suspended') )
704
+ THEN 1 ELSE 0 END) AS unattributed`, { localAccountIds });
674
705
  const num = (raw) => typeof raw === "number"
675
706
  ? raw
676
707
  : raw && typeof raw.toNumber === "function"
@@ -685,6 +716,7 @@ export async function auditSuspensionCensus(driver, localAccountIds) {
685
716
  due: num(rec.get("due")),
686
717
  cancelled: num(rec.get("cancelled")),
687
718
  completed: num(rec.get("completed")),
719
+ unattributed: num(rec.get("unattributed")),
688
720
  });
689
721
  }
690
722
  // Driven by localAccountIds, not by the result rows: an account with no
@@ -693,11 +725,19 @@ export async function auditSuspensionCensus(driver, localAccountIds) {
693
725
  for (const accountId of localAccountIds) {
694
726
  const c = byAccount.get(accountId) ?? {
695
727
  routines: 0, dispatchable: 0, suspended: 0, due: 0, cancelled: 0, completed: 0,
728
+ unattributed: 0,
696
729
  };
697
730
  const other = c.routines - c.dispatchable - c.suspended - c.due - c.cancelled - c.completed;
731
+ // Task 2209 — `unattributed` is appended after `other` and deliberately
732
+ // outside its arithmetic: `other` reconciles status buckets against the
733
+ // row count, while this reconciles a suspended row against whether
734
+ // anything recorded why it stopped. The detail modal can only show a
735
+ // reason that was written, and a suspend path that appended no note emits
736
+ // no event of its own, so this count is the only control that reveals it.
698
737
  console.error(`[schedule-audit] op=suspension-census acct=${accountId.slice(0, 8)} ` +
699
738
  `routines=${c.routines} dispatchable=${c.dispatchable} suspended=${c.suspended} ` +
700
- `due=${c.due} cancelled=${c.cancelled} completed=${c.completed} other=${other}`);
739
+ `due=${c.due} cancelled=${c.cancelled} completed=${c.completed} other=${other} ` +
740
+ `unattributed=${c.unattributed}`);
701
741
  }
702
742
  }
703
743
  catch (err) {
@@ -758,4 +798,66 @@ export async function auditSelfCancels(driver, localAccountIds, nowMs) {
758
798
  }
759
799
  }
760
800
  }
801
+ /**
802
+ * Task 2213 — a `startDate` that is not the canonical 24-character
803
+ * `toISOString()` form.
804
+ *
805
+ * A standing check rather than a line at the write site, because the failure it
806
+ * guards emits NO event. A row written with a `+01:00` offset logs a clean
807
+ * write, sits in the graph looking healthy, and then fires 60 minutes late
808
+ * exactly once; re-running nothing surfaces it, and by the time anyone looks the
809
+ * row is already `due`. Only periodic reconciliation of stored state against the
810
+ * canonical form reports it.
811
+ *
812
+ * The predicate is deliberately the full 24-character shape, not merely "ends
813
+ * with Z". `2026-07-30T10:45:00Z` is the right instant and still wrong, because
814
+ * `"…00.000Z"` sorts before `"…00Z"` and a mixed-width corpus breaks the
815
+ * ordering the fix restores.
816
+ *
817
+ * `count=0` is emitted every sweep for every local account. A check that goes
818
+ * quiet when healthy cannot be distinguished from one that has stopped running.
819
+ *
820
+ * Never throws (honours the sweep's contract).
821
+ */
822
+ export async function auditNonCanonicalStartDate(driver, localAccountIds) {
823
+ if (localAccountIds.length === 0)
824
+ return;
825
+ const session = driver.session();
826
+ try {
827
+ const res = await session.run(`MATCH (e:Event)
828
+ WHERE e.accountId IN $localAccountIds
829
+ AND e.startDate IS NOT NULL
830
+ AND NOT e.startDate =~ '\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}\\\\.\\\\d{3}Z'
831
+ RETURN e.accountId AS accountId, count(e) AS n,
832
+ collect(e.eventId)[0..10] AS eventIds`, { localAccountIds });
833
+ const counts = new Map();
834
+ const ids = new Map();
835
+ for (const rec of res.records) {
836
+ const raw = rec.get("n");
837
+ const n = typeof raw === "number"
838
+ ? raw
839
+ : raw && typeof raw.toNumber === "function"
840
+ ? raw.toNumber()
841
+ : Number(raw ?? 0);
842
+ const acct = rec.get("accountId");
843
+ counts.set(acct, n);
844
+ ids.set(acct, rec.get("eventIds") ?? []);
845
+ }
846
+ for (const accountId of localAccountIds) {
847
+ console.error(`[schedule-audit] op=non-canonical-startdate acct=${accountId.slice(0, 8)} ` +
848
+ `count=${counts.get(accountId) ?? 0} eventIds=[${(ids.get(accountId) ?? []).join(",")}]`);
849
+ }
850
+ }
851
+ catch (err) {
852
+ console.error(`[schedule-audit] op=non-canonical-startdate-error detail=${err instanceof Error ? err.message : String(err)}`);
853
+ }
854
+ finally {
855
+ try {
856
+ await session.close();
857
+ }
858
+ catch {
859
+ // ignore
860
+ }
861
+ }
862
+ }
761
863
  //# sourceMappingURL=agent-turn-dispatch.js.map