@rubytech/create-sitedesk-code 0.1.563 → 0.1.565

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 (318) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/plugins/admin/PLUGIN.md +2 -2
  3. package/payload/platform/plugins/admin/hooks/__tests__/askuserquestion-channel-carrier-gate.test.sh +1 -1
  4. package/payload/platform/plugins/admin/hooks/askuserquestion-channel-carrier-gate.sh +4 -3
  5. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +27 -4
  6. package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +12 -0
  7. package/payload/platform/plugins/cloudflare/mcp/__tests__/portal-visit-status-write.test.ts +118 -0
  8. package/payload/platform/plugins/cloudflare/skills/data-portal/SKILL.md +15 -0
  9. package/payload/platform/plugins/cloudflare/skills/data-portal/schema.sql +25 -7
  10. package/payload/platform/plugins/cloudflare/skills/data-portal/template/functions/api/visit-status.ts +62 -5
  11. package/payload/platform/plugins/docs/references/outlook-guide.md +7 -3
  12. package/payload/platform/plugins/docs/references/telegram-guide.md +19 -0
  13. package/payload/platform/plugins/memory/references/schema-construction.md +1 -1
  14. package/payload/platform/plugins/outlook/PLUGIN.md +2 -2
  15. package/payload/platform/plugins/outlook/mcp/dist/__tests__/attach.test.js +1 -1
  16. package/payload/platform/plugins/outlook/mcp/dist/__tests__/attach.test.js.map +1 -1
  17. package/payload/platform/plugins/outlook/mcp/dist/__tests__/calendar-write.test.js +1 -1
  18. package/payload/platform/plugins/outlook/mcp/dist/__tests__/calendar-write.test.js.map +1 -1
  19. package/payload/platform/plugins/outlook/mcp/dist/__tests__/draft-attachments.test.js +1 -1
  20. package/payload/platform/plugins/outlook/mcp/dist/__tests__/draft-attachments.test.js.map +1 -1
  21. package/payload/platform/plugins/outlook/mcp/dist/__tests__/draft-edit-attachments.test.js +1 -1
  22. package/payload/platform/plugins/outlook/mcp/dist/__tests__/draft-edit-attachments.test.js.map +1 -1
  23. package/payload/platform/plugins/outlook/mcp/dist/__tests__/draft-edit-removal.test.js +1 -1
  24. package/payload/platform/plugins/outlook/mcp/dist/__tests__/draft-edit-removal.test.js.map +1 -1
  25. package/payload/platform/plugins/outlook/mcp/dist/__tests__/draft-edit.test.js +1 -1
  26. package/payload/platform/plugins/outlook/mcp/dist/__tests__/draft-edit.test.js.map +1 -1
  27. package/payload/platform/plugins/outlook/mcp/dist/__tests__/draft-threaded.test.js +51 -1
  28. package/payload/platform/plugins/outlook/mcp/dist/__tests__/draft-threaded.test.js.map +1 -1
  29. package/payload/platform/plugins/outlook/mcp/dist/__tests__/graph-client-paged.test.js +1 -1
  30. package/payload/platform/plugins/outlook/mcp/dist/__tests__/graph-client-paged.test.js.map +1 -1
  31. package/payload/platform/plugins/outlook/mcp/dist/__tests__/graph-client-prefix-wiring.test.js +1 -0
  32. package/payload/platform/plugins/outlook/mcp/dist/__tests__/graph-client-prefix-wiring.test.js.map +1 -1
  33. package/payload/platform/plugins/outlook/mcp/dist/__tests__/graph-client-retry.test.js +2 -2
  34. package/payload/platform/plugins/outlook/mcp/dist/__tests__/graph-client-retry.test.js.map +1 -1
  35. package/payload/platform/plugins/outlook/mcp/dist/__tests__/graph-client.test.js +7 -7
  36. package/payload/platform/plugins/outlook/mcp/dist/__tests__/graph-client.test.js.map +1 -1
  37. package/payload/platform/plugins/outlook/mcp/dist/__tests__/has-attachments.test.js +1 -1
  38. package/payload/platform/plugins/outlook/mcp/dist/__tests__/has-attachments.test.js.map +1 -1
  39. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-attachment.test.js +1 -1
  40. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-attachment.test.js.map +1 -1
  41. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-delete.test.js +1 -1
  42. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-delete.test.js.map +1 -1
  43. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-fetch-body.test.js +1 -1
  44. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-fetch-body.test.js.map +1 -1
  45. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-list-paging.test.js +1 -1
  46. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-list-paging.test.js.map +1 -1
  47. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-otp-extract.test.js +1 -1
  48. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-otp-extract.test.js.map +1 -1
  49. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-reply.test.js +159 -6
  50. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-reply.test.js.map +1 -1
  51. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-search-delegated-ids.test.js +1 -1
  52. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-search-delegated-ids.test.js.map +1 -1
  53. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-search-paging.test.js +1 -1
  54. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-search-paging.test.js.map +1 -1
  55. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-send-attachments.test.js +1 -1
  56. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-send-attachments.test.js.map +1 -1
  57. package/payload/platform/plugins/outlook/mcp/dist/__tests__/shared-mail-only-guard.test.js +1 -0
  58. package/payload/platform/plugins/outlook/mcp/dist/__tests__/shared-mail-only-guard.test.js.map +1 -1
  59. package/payload/platform/plugins/outlook/mcp/dist/__tests__/shared-mailbox-add.test.js +1 -1
  60. package/payload/platform/plugins/outlook/mcp/dist/__tests__/shared-mailbox-add.test.js.map +1 -1
  61. package/payload/platform/plugins/outlook/mcp/dist/__tests__/write-tools.test.js +2 -1
  62. package/payload/platform/plugins/outlook/mcp/dist/__tests__/write-tools.test.js.map +1 -1
  63. package/payload/platform/plugins/outlook/mcp/dist/index.js +13 -4
  64. package/payload/platform/plugins/outlook/mcp/dist/index.js.map +1 -1
  65. package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.d.ts +9 -0
  66. package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.d.ts.map +1 -1
  67. package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.js.map +1 -1
  68. package/payload/platform/plugins/outlook/mcp/dist/tools/draft.d.ts +7 -0
  69. package/payload/platform/plugins/outlook/mcp/dist/tools/draft.d.ts.map +1 -1
  70. package/payload/platform/plugins/outlook/mcp/dist/tools/draft.js +16 -5
  71. package/payload/platform/plugins/outlook/mcp/dist/tools/draft.js.map +1 -1
  72. package/payload/platform/plugins/outlook/mcp/dist/tools/mail-reply.d.ts +5 -0
  73. package/payload/platform/plugins/outlook/mcp/dist/tools/mail-reply.d.ts.map +1 -1
  74. package/payload/platform/plugins/outlook/mcp/dist/tools/mail-reply.js +81 -2
  75. package/payload/platform/plugins/outlook/mcp/dist/tools/mail-reply.js.map +1 -1
  76. package/payload/platform/plugins/whatsapp/PLUGIN.md +2 -2
  77. package/payload/platform/plugins/whatsapp/references/channels-whatsapp.md +2 -2
  78. package/payload/platform/scripts/check-no-esm-require.mjs +10 -0
  79. package/payload/platform/services/claude-session-manager/dist/channel-mcp.d.ts.map +1 -1
  80. package/payload/platform/services/claude-session-manager/dist/channel-mcp.js +9 -3
  81. package/payload/platform/services/claude-session-manager/dist/channel-mcp.js.map +1 -1
  82. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
  83. package/payload/platform/services/claude-session-manager/dist/http-server.js +11 -2
  84. package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
  85. package/payload/platform/services/claude-session-manager/dist/index.js +0 -1
  86. package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
  87. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +0 -1
  88. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
  89. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +7 -2
  90. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
  91. package/payload/platform/services/claude-session-manager/dist/public-allowlist.d.ts +4 -2
  92. package/payload/platform/services/claude-session-manager/dist/public-allowlist.d.ts.map +1 -1
  93. package/payload/platform/services/claude-session-manager/dist/public-allowlist.js +15 -18
  94. package/payload/platform/services/claude-session-manager/dist/public-allowlist.js.map +1 -1
  95. package/payload/platform/services/claude-session-manager/dist/specialist-roster.d.ts +4 -2
  96. package/payload/platform/services/claude-session-manager/dist/specialist-roster.d.ts.map +1 -1
  97. package/payload/platform/services/claude-session-manager/dist/specialist-roster.js +4 -2
  98. package/payload/platform/services/claude-session-manager/dist/specialist-roster.js.map +1 -1
  99. package/payload/platform/services/telegram-channel/dist/instructions.d.ts.map +1 -1
  100. package/payload/platform/services/telegram-channel/dist/instructions.js +31 -16
  101. package/payload/platform/services/telegram-channel/dist/instructions.js.map +1 -1
  102. package/payload/platform/services/telegram-channel/dist/server.d.ts.map +1 -1
  103. package/payload/platform/services/telegram-channel/dist/server.js +21 -38
  104. package/payload/platform/services/telegram-channel/dist/server.js.map +1 -1
  105. package/payload/platform/services/telegram-channel/dist/turn-follow.d.ts +6 -0
  106. package/payload/platform/services/telegram-channel/dist/turn-follow.d.ts.map +1 -1
  107. package/payload/platform/services/telegram-channel/dist/turn-follow.js +16 -1
  108. package/payload/platform/services/telegram-channel/dist/turn-follow.js.map +1 -1
  109. package/payload/platform/services/webchat-channel/dist/instructions.d.ts +0 -2
  110. package/payload/platform/services/webchat-channel/dist/instructions.d.ts.map +1 -1
  111. package/payload/platform/services/webchat-channel/dist/instructions.js +25 -19
  112. package/payload/platform/services/webchat-channel/dist/instructions.js.map +1 -1
  113. package/payload/platform/services/webchat-channel/dist/notification.d.ts +3 -2
  114. package/payload/platform/services/webchat-channel/dist/notification.d.ts.map +1 -1
  115. package/payload/platform/services/webchat-channel/dist/notification.js +14 -4
  116. package/payload/platform/services/webchat-channel/dist/notification.js.map +1 -1
  117. package/payload/platform/services/webchat-channel/dist/server.d.ts.map +1 -1
  118. package/payload/platform/services/webchat-channel/dist/server.js +16 -48
  119. package/payload/platform/services/webchat-channel/dist/server.js.map +1 -1
  120. package/payload/platform/services/webchat-channel/dist/turn-follow.d.ts +6 -0
  121. package/payload/platform/services/webchat-channel/dist/turn-follow.d.ts.map +1 -1
  122. package/payload/platform/services/webchat-channel/dist/turn-follow.js +16 -1
  123. package/payload/platform/services/webchat-channel/dist/turn-follow.js.map +1 -1
  124. package/payload/platform/services/whatsapp-channel/dist/notification.d.ts +5 -2
  125. package/payload/platform/services/whatsapp-channel/dist/notification.d.ts.map +1 -1
  126. package/payload/platform/services/whatsapp-channel/dist/notification.js +31 -14
  127. package/payload/platform/services/whatsapp-channel/dist/notification.js.map +1 -1
  128. package/payload/platform/services/whatsapp-channel/dist/server.d.ts.map +1 -1
  129. package/payload/platform/services/whatsapp-channel/dist/server.js +64 -161
  130. package/payload/platform/services/whatsapp-channel/dist/server.js.map +1 -1
  131. package/payload/platform/services/whatsapp-channel/dist/targets.d.ts +7 -38
  132. package/payload/platform/services/whatsapp-channel/dist/targets.d.ts.map +1 -1
  133. package/payload/platform/services/whatsapp-channel/dist/targets.js +7 -51
  134. package/payload/platform/services/whatsapp-channel/dist/targets.js.map +1 -1
  135. package/payload/platform/services/whatsapp-channel/dist/turn-follow.d.ts +6 -0
  136. package/payload/platform/services/whatsapp-channel/dist/turn-follow.d.ts.map +1 -1
  137. package/payload/platform/services/whatsapp-channel/dist/turn-follow.js +21 -1
  138. package/payload/platform/services/whatsapp-channel/dist/turn-follow.js.map +1 -1
  139. package/payload/premium-plugins/sitedesk/agents/sitedesk--payroll-clerk.md +2 -2
  140. package/payload/premium-plugins/sitedesk/plugins/sitedesk-job/skills/timesheet/SKILL.md +5 -5
  141. package/payload/premium-plugins/sitedesk/plugins/sitedesk-job/skills/timesheet/references/checkin-contract.md +40 -22
  142. package/payload/premium-plugins/sitedesk/plugins/sitedesk-job/skills/timesheet/references/roll-up.md +20 -7
  143. package/payload/premium-plugins/sitedesk/plugins/sitedesk-job/skills/timesheet/references/setup.md +7 -3
  144. package/payload/server/{adminuser-self-heal-ZHFNDKJK.js → adminuser-self-heal-Y4U3UNKF.js} +10 -2
  145. package/payload/server/{chunk-G6ULACHG.js → chunk-637C2FGE.js} +3385 -3275
  146. package/payload/server/{chunk-HYQNUVGO.js → chunk-KVR2FT6O.js} +12 -1
  147. package/payload/server/{chunk-SKYZG6OT.js → chunk-PGGGWUBM.js} +372 -224
  148. package/payload/server/{chunk-JOVREC6E.js → chunk-Y4NH2KLF.js} +3789 -3484
  149. package/payload/server/{manager-2VEJKVEO.js → manager-R3XH3BNM.js} +3 -3
  150. package/payload/server/maxy-edge.js +27 -4
  151. package/payload/server/public/activity.html +5 -5
  152. package/payload/server/public/agents.html +4 -4
  153. package/payload/server/public/assets/{AdminLoginScreens-C6e5jf0S.js → AdminLoginScreens-5gI137xF.js} +1 -1
  154. package/payload/server/public/assets/AdminLoginScreens-5gI137xF.js.br +0 -0
  155. package/payload/server/public/assets/AdminLoginScreens-5gI137xF.js.gz +0 -0
  156. package/payload/server/public/assets/{AdminShell-DStA0lfm.js → AdminShell-Bfapavlp.js} +2 -2
  157. package/payload/server/public/assets/AdminShell-Bfapavlp.js.br +0 -0
  158. package/payload/server/public/assets/AdminShell-Bfapavlp.js.gz +0 -0
  159. package/payload/server/public/assets/{activity--yyBcNfB.js → activity-DnbsmUgn.js} +1 -1
  160. package/payload/server/public/assets/activity-DnbsmUgn.js.br +0 -0
  161. package/payload/server/public/assets/activity-DnbsmUgn.js.gz +0 -0
  162. package/payload/server/public/assets/admin-BXIv0_oj.js +1 -0
  163. package/payload/server/public/assets/admin-BXIv0_oj.js.br +0 -0
  164. package/payload/server/public/assets/admin-BXIv0_oj.js.gz +0 -0
  165. package/payload/server/public/assets/{agents-odyVOb5E.js → agents-Dl2wOcpj.js} +1 -1
  166. package/payload/server/public/assets/agents-Dl2wOcpj.js.br +0 -0
  167. package/payload/server/public/assets/agents-Dl2wOcpj.js.gz +0 -0
  168. package/payload/server/public/assets/{browser-D1K_MoHt.js → browser-D-Uc9ewO.js} +1 -1
  169. package/payload/server/public/assets/browser-D-Uc9ewO.js.br +0 -0
  170. package/payload/server/public/assets/browser-D-Uc9ewO.js.gz +0 -0
  171. package/payload/server/public/assets/{calendar-jqh9U7Ic.js → calendar-Cu3O6Bay.js} +1 -1
  172. package/payload/server/public/assets/calendar-Cu3O6Bay.js.br +0 -0
  173. package/payload/server/public/assets/calendar-Cu3O6Bay.js.gz +0 -0
  174. package/payload/server/public/assets/chat-Bso94e-f.js +1 -0
  175. package/payload/server/public/assets/chat-Bso94e-f.js.br +0 -0
  176. package/payload/server/public/assets/chat-Bso94e-f.js.gz +0 -0
  177. package/payload/server/public/assets/chevron-left-CDwfR9V-.js +1 -0
  178. package/payload/server/public/assets/chevron-left-CDwfR9V-.js.br +0 -0
  179. package/payload/server/public/assets/clock-DDVrNLt9.js +1 -0
  180. package/payload/server/public/assets/clock-DDVrNLt9.js.br +0 -0
  181. package/payload/server/public/assets/clock-DDVrNLt9.js.gz +0 -0
  182. package/payload/server/public/assets/{copy-DkuHwkaB.js → copy-DPBVV8KZ.js} +1 -1
  183. package/payload/server/public/assets/copy-DPBVV8KZ.js.br +0 -0
  184. package/payload/server/public/assets/copy-DPBVV8KZ.js.gz +0 -0
  185. package/payload/server/public/assets/data-Dei8n2EX.js +1 -0
  186. package/payload/server/public/assets/data-Dei8n2EX.js.br +0 -0
  187. package/payload/server/public/assets/data-Dei8n2EX.js.gz +0 -0
  188. package/payload/server/public/assets/{file-text-C6o_NRjj.js → file-text-Dn82O6ke.js} +1 -1
  189. package/payload/server/public/assets/file-text-Dn82O6ke.js.br +0 -0
  190. package/payload/server/public/assets/file-text-Dn82O6ke.js.gz +0 -0
  191. package/payload/server/public/assets/{graph-BN30v5hJ.js → graph-D2J7a7Ll.js} +1 -1
  192. package/payload/server/public/assets/graph-D2J7a7Ll.js.br +0 -0
  193. package/payload/server/public/assets/{graph-BN30v5hJ.js.gz → graph-D2J7a7Ll.js.gz} +0 -0
  194. package/payload/server/public/assets/{graph-labels-DHFyNXQt.js → graph-labels-D3gkY2IH.js} +1 -1
  195. package/payload/server/public/assets/graph-labels-D3gkY2IH.js.br +0 -0
  196. package/payload/server/public/assets/graph-labels-D3gkY2IH.js.gz +0 -0
  197. package/payload/server/public/assets/{operator-DwFYA4Fp.js → operator-Bz_yj1im.js} +1 -1
  198. package/payload/server/public/assets/operator-Bz_yj1im.js.br +0 -0
  199. package/payload/server/public/assets/operator-Bz_yj1im.js.gz +0 -0
  200. package/payload/server/public/assets/page-D6u2xYh7.js +1 -0
  201. package/payload/server/public/assets/page-D6u2xYh7.js.br +0 -0
  202. package/payload/server/public/assets/page-D6u2xYh7.js.gz +0 -0
  203. package/payload/server/public/assets/{page-CEWIP3VF.js → page-mH4nyQ75.js} +2 -2
  204. package/payload/server/public/assets/page-mH4nyQ75.js.br +0 -0
  205. package/payload/server/public/assets/page-mH4nyQ75.js.gz +0 -0
  206. package/payload/server/public/assets/play-ByuChQJJ.js +1 -0
  207. package/payload/server/public/assets/play-ByuChQJJ.js.br +0 -0
  208. package/payload/server/public/assets/play-ByuChQJJ.js.gz +0 -0
  209. package/payload/server/public/assets/{public-Ceb0n7Km.js → public-CtoYVjPR.js} +1 -1
  210. package/payload/server/public/assets/public-CtoYVjPR.js.br +0 -0
  211. package/payload/server/public/assets/public-CtoYVjPR.js.gz +0 -0
  212. package/payload/server/public/assets/{rotate-ccw-CDYdx91V.js → rotate-ccw-BXoIghE3.js} +1 -1
  213. package/payload/server/public/assets/rotate-ccw-BXoIghE3.js.br +0 -0
  214. package/payload/server/public/assets/rotate-ccw-BXoIghE3.js.gz +0 -0
  215. package/payload/server/public/assets/{routines-DwNTih0y.js → routines-DXleYpDv.js} +1 -1
  216. package/payload/server/public/assets/routines-DXleYpDv.js.br +0 -0
  217. package/payload/server/public/assets/routines-DXleYpDv.js.gz +0 -0
  218. package/payload/server/public/assets/{skills-TIDCdOLQ.js → skills-CMl38MKH.js} +1 -1
  219. package/payload/server/public/assets/skills-CMl38MKH.js.br +0 -0
  220. package/payload/server/public/assets/skills-CMl38MKH.js.gz +0 -0
  221. package/payload/server/public/assets/{tasks-eTXvaWnd.js → tasks-Cshaf0Md.js} +1 -1
  222. package/payload/server/public/assets/tasks-Cshaf0Md.js.br +0 -0
  223. package/payload/server/public/assets/tasks-Cshaf0Md.js.gz +0 -0
  224. package/payload/server/public/assets/{triangle-alert-JwLSrj17.js → triangle-alert-CS-NXr_9.js} +1 -1
  225. package/payload/server/public/assets/triangle-alert-CS-NXr_9.js.br +3 -0
  226. package/payload/server/public/assets/triangle-alert-CS-NXr_9.js.gz +0 -0
  227. package/payload/server/public/assets/{useCopyFeedback-DjTkNw2p.js → useCopyFeedback-pKLfQJNG.js} +1 -1
  228. package/payload/server/public/assets/useCopyFeedback-pKLfQJNG.js.br +0 -0
  229. package/payload/server/public/assets/useCopyFeedback-pKLfQJNG.js.gz +0 -0
  230. package/payload/server/public/assets/useMediaQuery-BHFn0-S9.css +1 -0
  231. package/payload/server/public/assets/useMediaQuery-BHFn0-S9.css.br +0 -0
  232. package/payload/server/public/assets/useMediaQuery-BHFn0-S9.css.gz +0 -0
  233. package/payload/server/public/assets/{useMediaQuery-D8VDA0RN.js → useMediaQuery-oDCasnxD.js} +1 -1
  234. package/payload/server/public/assets/useMediaQuery-oDCasnxD.js.br +0 -0
  235. package/payload/server/public/assets/{useMediaQuery-D8VDA0RN.js.gz → useMediaQuery-oDCasnxD.js.gz} +0 -0
  236. package/payload/server/public/assets/useVoiceRecorder-EgO1GmIg.js +2 -0
  237. package/payload/server/public/assets/useVoiceRecorder-EgO1GmIg.js.br +0 -0
  238. package/payload/server/public/assets/useVoiceRecorder-EgO1GmIg.js.gz +0 -0
  239. package/payload/server/public/assets/{wrench-DutUiRu7.js → wrench-czES9Rdy.js} +1 -1
  240. package/payload/server/public/assets/wrench-czES9Rdy.js.br +0 -0
  241. package/payload/server/public/assets/wrench-czES9Rdy.js.gz +0 -0
  242. package/payload/server/public/browser.html +4 -4
  243. package/payload/server/public/calendar.html +7 -7
  244. package/payload/server/public/chat.html +13 -13
  245. package/payload/server/public/data.html +11 -11
  246. package/payload/server/public/graph.html +9 -9
  247. package/payload/server/public/index.html +13 -13
  248. package/payload/server/public/operator.html +14 -14
  249. package/payload/server/public/public.html +13 -13
  250. package/payload/server/public/routines.html +7 -7
  251. package/payload/server/public/skills.html +5 -5
  252. package/payload/server/public/tasks.html +6 -6
  253. package/payload/server/server.js +10213 -8397
  254. package/payload/server/{src-MM64CYYZ.js → src-IJCLNFYU.js} +1 -1
  255. package/payload/server/{userprofile-reconcile-TL4JKBPG.js → userprofile-reconcile-PUA657YX.js} +8 -1
  256. package/payload/server/public/assets/AdminLoginScreens-C6e5jf0S.js.br +0 -0
  257. package/payload/server/public/assets/AdminLoginScreens-C6e5jf0S.js.gz +0 -0
  258. package/payload/server/public/assets/AdminShell-DStA0lfm.js.br +0 -0
  259. package/payload/server/public/assets/AdminShell-DStA0lfm.js.gz +0 -0
  260. package/payload/server/public/assets/activity--yyBcNfB.js.br +0 -0
  261. package/payload/server/public/assets/activity--yyBcNfB.js.gz +0 -0
  262. package/payload/server/public/assets/admin-Dr6Jwe7W.js +0 -1
  263. package/payload/server/public/assets/admin-Dr6Jwe7W.js.br +0 -0
  264. package/payload/server/public/assets/admin-Dr6Jwe7W.js.gz +0 -0
  265. package/payload/server/public/assets/agents-odyVOb5E.js.br +0 -0
  266. package/payload/server/public/assets/agents-odyVOb5E.js.gz +0 -0
  267. package/payload/server/public/assets/browser-D1K_MoHt.js.br +0 -0
  268. package/payload/server/public/assets/browser-D1K_MoHt.js.gz +0 -0
  269. package/payload/server/public/assets/calendar-jqh9U7Ic.js.br +0 -0
  270. package/payload/server/public/assets/calendar-jqh9U7Ic.js.gz +0 -0
  271. package/payload/server/public/assets/chat-QQHBdVor.js +0 -1
  272. package/payload/server/public/assets/chat-QQHBdVor.js.br +0 -0
  273. package/payload/server/public/assets/chat-QQHBdVor.js.gz +0 -0
  274. package/payload/server/public/assets/chevron-left-DwTXgKwr.js +0 -1
  275. package/payload/server/public/assets/clock-DOmh9iKX.js +0 -1
  276. package/payload/server/public/assets/clock-DOmh9iKX.js.br +0 -0
  277. package/payload/server/public/assets/copy-DkuHwkaB.js.br +0 -0
  278. package/payload/server/public/assets/copy-DkuHwkaB.js.gz +0 -0
  279. package/payload/server/public/assets/data-DYmTNqrb.js +0 -1
  280. package/payload/server/public/assets/data-DYmTNqrb.js.br +0 -0
  281. package/payload/server/public/assets/data-DYmTNqrb.js.gz +0 -0
  282. package/payload/server/public/assets/file-text-C6o_NRjj.js.br +0 -0
  283. package/payload/server/public/assets/file-text-C6o_NRjj.js.gz +0 -0
  284. package/payload/server/public/assets/graph-BN30v5hJ.js.br +0 -0
  285. package/payload/server/public/assets/graph-labels-DHFyNXQt.js.br +0 -0
  286. package/payload/server/public/assets/graph-labels-DHFyNXQt.js.gz +0 -0
  287. package/payload/server/public/assets/operator-DwFYA4Fp.js.br +0 -0
  288. package/payload/server/public/assets/operator-DwFYA4Fp.js.gz +0 -0
  289. package/payload/server/public/assets/page-BALVRssF.js +0 -1
  290. package/payload/server/public/assets/page-BALVRssF.js.br +0 -0
  291. package/payload/server/public/assets/page-BALVRssF.js.gz +0 -0
  292. package/payload/server/public/assets/page-CEWIP3VF.js.br +0 -0
  293. package/payload/server/public/assets/page-CEWIP3VF.js.gz +0 -0
  294. package/payload/server/public/assets/play-Bg-BY_oj.js +0 -1
  295. package/payload/server/public/assets/play-Bg-BY_oj.js.br +0 -0
  296. package/payload/server/public/assets/play-Bg-BY_oj.js.gz +0 -0
  297. package/payload/server/public/assets/public-Ceb0n7Km.js.br +0 -0
  298. package/payload/server/public/assets/public-Ceb0n7Km.js.gz +0 -0
  299. package/payload/server/public/assets/rotate-ccw-CDYdx91V.js.gz +0 -0
  300. package/payload/server/public/assets/routines-DwNTih0y.js.br +0 -0
  301. package/payload/server/public/assets/routines-DwNTih0y.js.gz +0 -0
  302. package/payload/server/public/assets/skills-TIDCdOLQ.js.br +0 -0
  303. package/payload/server/public/assets/skills-TIDCdOLQ.js.gz +0 -0
  304. package/payload/server/public/assets/tasks-eTXvaWnd.js.br +0 -0
  305. package/payload/server/public/assets/tasks-eTXvaWnd.js.gz +0 -0
  306. package/payload/server/public/assets/triangle-alert-JwLSrj17.js.br +0 -0
  307. package/payload/server/public/assets/triangle-alert-JwLSrj17.js.gz +0 -0
  308. package/payload/server/public/assets/useCopyFeedback-DjTkNw2p.js.br +0 -0
  309. package/payload/server/public/assets/useCopyFeedback-DjTkNw2p.js.gz +0 -0
  310. package/payload/server/public/assets/useMediaQuery-BsBzbWaf.css +0 -1
  311. package/payload/server/public/assets/useMediaQuery-BsBzbWaf.css.br +0 -0
  312. package/payload/server/public/assets/useMediaQuery-BsBzbWaf.css.gz +0 -0
  313. package/payload/server/public/assets/useMediaQuery-D8VDA0RN.js.br +0 -0
  314. package/payload/server/public/assets/useVoiceRecorder-B8vxObZG.js +0 -2
  315. package/payload/server/public/assets/useVoiceRecorder-B8vxObZG.js.br +0 -0
  316. package/payload/server/public/assets/useVoiceRecorder-B8vxObZG.js.gz +0 -0
  317. package/payload/server/public/assets/wrench-DutUiRu7.js.br +0 -0
  318. package/payload/server/public/assets/wrench-DutUiRu7.js.gz +0 -0
@@ -5,6 +5,12 @@ export interface TurnOutcome {
5
5
  finalText: string;
6
6
  /** The turn reached an assistant end_turn. */
7
7
  reachedEndTurn: boolean;
8
+ /** Task 2078 — the byte range of this turn's lines in the JSONL, so a reader
9
+ * in another process can parse exactly this turn without being handed its
10
+ * text. -1/-1 from `reduceTurnFromLines`, which is given lines and not
11
+ * offsets; `followTurnEnds` overwrites both before calling back. */
12
+ segmentStart: number;
13
+ segmentEnd: number;
8
14
  /**
9
15
  * Task 2111 — how many channel inbounds this turn answered. The harness answers
10
16
  * every inbound queued while it was busy in ONE turn, so turn count and inbound
@@ -1 +1 @@
1
- {"version":3,"file":"turn-follow.d.ts","sourceRoot":"","sources":["../src/turn-follow.ts"],"names":[],"mappings":"AAwBA,MAAM,WAAW,WAAW;IAC1B,4DAA4D;IAC5D,OAAO,EAAE,OAAO,CAAA;IAChB,+EAA+E;IAC/E,SAAS,EAAE,MAAM,CAAA;IACjB,8CAA8C;IAC9C,cAAc,EAAE,OAAO,CAAA;IACvB;;;;;;;;;;;;;;OAcG;IACH,gBAAgB,EAAE,MAAM,CAAA;IACxB;gCAC4B;IAC5B,OAAO,EAAE,iBAAiB,CAAA;CAC3B;AAmDD;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC;;yEAEqE;IACrE,eAAe,EAAE,MAAM,CAAA;IACvB,wEAAwE;IACxE,WAAW,EAAE,MAAM,CAAA;IACnB,yEAAyE;IACzE,YAAY,EAAE,MAAM,CAAA;IACpB;;;6DAGyD;IACzD,cAAc,EAAE,MAAM,CAAA;IACtB;;gEAE4D;IAC5D,aAAa,EAAE,MAAM,CAAA;CACtB;AAOD,2EAA2E;AAC3E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,WAAW,CAmEhE;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAA;AActD;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,IAAI,CAAC,CAuEf"}
1
+ {"version":3,"file":"turn-follow.d.ts","sourceRoot":"","sources":["../src/turn-follow.ts"],"names":[],"mappings":"AA6BA,MAAM,WAAW,WAAW;IAC1B,4DAA4D;IAC5D,OAAO,EAAE,OAAO,CAAA;IAChB,+EAA+E;IAC/E,SAAS,EAAE,MAAM,CAAA;IACjB,8CAA8C;IAC9C,cAAc,EAAE,OAAO,CAAA;IACvB;;;yEAGqE;IACrE,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB;;;;;;;;;;;;;;OAcG;IACH,gBAAgB,EAAE,MAAM,CAAA;IACxB;gCAC4B;IAC5B,OAAO,EAAE,iBAAiB,CAAA;CAC3B;AAmDD;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC;;yEAEqE;IACrE,eAAe,EAAE,MAAM,CAAA;IACvB,wEAAwE;IACxE,WAAW,EAAE,MAAM,CAAA;IACnB,yEAAyE;IACzE,YAAY,EAAE,MAAM,CAAA;IACpB;;;6DAGyD;IACzD,cAAc,EAAE,MAAM,CAAA;IACtB;;gEAE4D;IAC5D,aAAa,EAAE,MAAM,CAAA;CACtB;AAOD,2EAA2E;AAC3E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,WAAW,CAqEhE;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAA;AActD;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,IAAI,CAAC,CAoFf"}
@@ -14,6 +14,11 @@ import { closeSync, openSync, readSync, statSync, watch } from 'node:fs';
14
14
  // Both name shapes are held so this one detector serves both followers; the
15
15
  // names are kept as literals here to avoid a cross-package import. A name from
16
16
  // the other mode never appears in a turn, so carrying all four is safe.
17
+ // Task 2078 retired every one of these tools, and this set is deliberately KEPT.
18
+ // It reads HISTORICAL transcripts: a session that ran before the retirement has
19
+ // real reply tool_use blocks in its JSONL, and `replied` must stay true for them
20
+ // or a re-read of an old turn reports an answer that was delivered as one that
21
+ // was not. No live turn can add a name to it.
17
22
  const REPLY_TOOL_NAMES = new Set([
18
23
  'mcp__whatsapp-channel__reply',
19
24
  'mcp__whatsapp-channel__reply-document',
@@ -130,6 +135,8 @@ export function reduceTurnFromLines(lines) {
130
135
  replied,
131
136
  finalText,
132
137
  reachedEndTurn,
138
+ segmentStart: -1,
139
+ segmentEnd: -1,
133
140
  consumedInbounds,
134
141
  context: { cacheReadTokens, inputTokens, outputTokens, thinkingBlocks, thinkingChars },
135
142
  };
@@ -167,6 +174,14 @@ export async function followTurnEnds(jsonlPath, startOffset, onTurnEnd) {
167
174
  return new Promise((resolve) => {
168
175
  let offset = Math.min(startOffset, baseSize);
169
176
  let carry = '';
177
+ // Task 2078 — byte position of the first line of the segment being built,
178
+ // and of the end of the last line consumed. Both advance only on a
179
+ // fully-delimited line, so a partial trailing line in `carry` never moves
180
+ // them, and a multi-byte character split across two reads cannot
181
+ // desynchronise them: each line's own utf8 length is measured after the
182
+ // line is complete.
183
+ let segStart = Math.min(startOffset, baseSize);
184
+ let segEnd = segStart;
170
185
  // The lines of the turn currently being accumulated; reset after each
171
186
  // end_turn so each onTurnEnd sees exactly one turn's lines.
172
187
  let segment = [];
@@ -221,9 +236,14 @@ export async function followTurnEnds(jsonlPath, startOffset, onTurnEnd) {
221
236
  carry = carry.slice(nl + 1);
222
237
  nl = carry.indexOf('\n');
223
238
  segment.push(line);
239
+ segEnd += Buffer.byteLength(line, 'utf8') + 1;
224
240
  if (isAssistantEndTurn(line)) {
225
- onTurnEnd(reduceTurnFromLines(segment));
241
+ const outcome = reduceTurnFromLines(segment);
242
+ outcome.segmentStart = segStart;
243
+ outcome.segmentEnd = segEnd;
244
+ onTurnEnd(outcome);
226
245
  segment = [];
246
+ segStart = segEnd;
227
247
  }
228
248
  }
229
249
  };
@@ -1 +1 @@
1
- {"version":3,"file":"turn-follow.js","sourceRoot":"","sources":["../src/turn-follow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"turn-follow.js","sourceRoot":"","sources":["../src/turn-follow.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ name: payroll-clerk
3
3
  description: "SiteDesk payroll clerk. Delegate when the operator wants to roll up field workers' daily check-ins into a per-worker timesheet and, for CIS subcontractors, an invoice for a period, reconciled to the penny and emailed to the office. Triggers are jobs like 'run the timesheets', 'do this week's invoices', 'roll up Dave's days'. Not for a new quote (that is the quoter) or an interim valuation (that is the valuer)."
4
4
  summary: "Your payroll clerk — turns field workers' daily check-ins into per-worker timesheets and CIS invoices, reconciled to the penny."
5
5
  model: claude-sonnet-5
6
- tools: Skill, Read, Write, Edit, Bash, Glob, Grep, mcp__plugin_browser_browser__browser-navigate, mcp__plugin_browser_browser__browser-pdf-save, mcp__plugin_email_email__email-send
6
+ tools: Skill, Read, Write, Edit, Bash, Glob, Grep, mcp__plugin_browser_browser__browser-navigate, mcp__plugin_browser_browser__browser-pdf-save, mcp__plugin_email_email__email-send, mcp__plugin_memory_memory__memory-search
7
7
  pattern_deliverable: false
8
8
  ---
9
9
 
@@ -17,7 +17,7 @@ A message from the agent that dispatched you arrives on the platform's own dispa
17
17
 
18
18
  You are the SiteDesk payroll clerk — the one owner of timesheet and CIS-invoice work for an independent service business's field crew. You own one deliverable: a per-worker timesheet and, for a CIS subcontractor, the matching invoice for a period, rendered to A4 PDFs and emailed to the office. The admin agent dispatches a brief to you; you run the `timesheet` skill and return the result.
19
19
 
20
- You never invent the operator's business content. Day counts come from the workers' own daily check-ins; rates, the office invoice address and each worker's engagement are the operator's data — you apply them faithfully. A figure you cannot source is a gap you flag, not a number you guess.
20
+ You never invent the operator's business content. Day counts come from the workers' own job sheets, filed on the data portal and carried into the graph as labour costs, which you read with `memory-search` and never write; rates, the office invoice address and each worker's engagement are the operator's data — you apply them faithfully. A figure you cannot source is a gap you flag, not a number you guess.
21
21
 
22
22
  ## What you own
23
23
 
@@ -22,12 +22,12 @@ maths ([references/roll-up.md](references/roll-up.md)), and the two documents
22
22
 
23
23
  - **Worker setup (per worker, once).** Capture the worker's engagement, day rate, UTR (CIS only),
24
24
  whether the 20% deduction shows, and the office invoice address. Store it as the `:Engineer` config
25
- on his `:Person`. The worker logs his days through the receive-only `worker-checkin` agent; the
26
- platform's multi-channel transport delivers those messages into one session.
25
+ on his `:Person`. The worker files his days as job sheets on the operator's data portal, against
26
+ his own visits; the device carries each one into the graph as a labour cost within a minute.
27
27
 
28
28
  - **Roll-up (operator-run, per period).** For a worker (or all workers) and a period:
29
- 1. Read his check-ins for the period by `personId` structure the worker's delivered messages
30
- into `:JobCost` records (one per working day) at this point.
29
+ 1. Read his labour `:JobCost` rows for the period with `memory-search`, by `engineerId`. They are
30
+ written by the portal visit exchange; this skill reads them and never creates them.
31
31
  2. Run `rollup.mjs compute <worker.json> <checkins.json>` — never compute by hand.
32
32
  3. Render the timesheet (and, for CIS, the invoice) from the computed figures.
33
33
  4. Run `rollup.mjs reconcile <computed.json> <netPence> <dayHundredths>` — both gates must pass.
@@ -42,6 +42,6 @@ total disagrees with the compute.
42
42
 
43
43
  ## Observability
44
44
 
45
- - one line per check-in read into a roll-up (worker id, source channel, date, site);
45
+ - one line per labour cost read into a roll-up (engineer id, source, date, site);
46
46
  - one line on generation: worker id, period, day-count, artefact filenames, email recipient;
47
47
  - the `op=reconcile-fail` line whenever a gate stops a send.
@@ -4,33 +4,51 @@ This skill ships these shapes, never a worker's data.
4
4
 
5
5
  ## `:Engineer` (operator config, one per worker)
6
6
 
7
- `(:Engineer { personId, accountId, name, engagement: "employee"|"cis", dayRatePence,
7
+ `(:Engineer { engineerId, accountId, name, engagement: "employee"|"cis", dayRatePence,
8
8
  utr?, showCisDeduction: bool, invoiceEmail, createdAt })`
9
9
 
10
- `personId` ties the worker to his `:Person`. `dayRatePence` is integer pence. `utr` is present
11
- only for `engagement: "cis"`. `invoiceEmail` is the office invoice address. Captured by the
12
- operator at runtime (see [setup.md](setup.md)), never written into this tree.
10
+ `engineerId` is the worker's key and the write-time MERGE key `(accountId, engineerId)`.
11
+ `dayRatePence` is integer pence. `utr` is present only for `engagement: "cis"`. `invoiceEmail` is
12
+ the office invoice address. Captured by the operator at runtime (see [setup.md](setup.md)), never
13
+ written into this tree.
13
14
 
14
- ## `:JobCost` (one labour cost per working day, `costType: "labour"`)
15
+ `Engineer` is an additional label on that worker's `:Person`; there is no standalone node. The rate
16
+ lives here, office-side, and never reaches the portal the worker files his day on.
15
17
 
16
- `(:JobCost { costId, costType: "labour", personId, accountId, source, receivedAt,
18
+ ## `:JobCost` (one labour cost per visit worked, `costType: "labour"`)
19
+
20
+ `(:JobCost { costId, costType: "labour", engineerId, accountId, jobId, source, receivedAt,
17
21
  date, site, description, dayHundredths, createdAt })`
18
22
 
19
- A logged labour day is an incurred labour cost. `costType` is `"labour"` and `costId` is the
20
- write-time MERGE key (`(accountId, costId)`) use a deterministic id such as `${personId}-${date}`
21
- so re-delivery of the same day stays idempotent. `personId` is the roll-up read key: the roll-up
22
- reads every labour `:JobCost` for the worker regardless of which channel produced it. `source`
23
- records the channel the message arrived on (`web`, `whatsapp`, …). `dayHundredths` is 100 for a
24
- full day; a smaller value only when the operator enabled part-day handling. One labour `:JobCost`
25
- per working day.
23
+ Time worked is an incurred labour cost. `costType` is `"labour"` and `costId` is the write-time
24
+ MERGE key (`(accountId, costId)`), formed as `${engineerId}-${visitId}`, so re-filing the same
25
+ visit merges rather than duplicating and the later sheet corrects the earlier one.
26
+
27
+ **One cost per visit, not per day.** A worker who attends two sites in a day files two sheets and
28
+ holds two labour costs on that date, each with its own `site` and its own share of the day. Keying
29
+ on the date instead would merge the second over the first and pay him for one of them; the roll-up
30
+ sums `dayHundredths` across every cost in the period, so several on one date add up to that day.
31
+
32
+ `engineerId` is the roll-up read key: the roll-up reads every labour `:JobCost` for the worker.
33
+ `date` is the day worked, which is what the roll-up filters a period on and what the timesheet
34
+ prints. `source` records where it came from (`portal`). `dayHundredths` is 100 for a full day; a
35
+ smaller value when the day is split across visits, or when the operator enabled part-day handling.
26
36
 
27
37
  Each `:JobCost` is linked to the engineer who incurred it with the canonical edge
28
- `(:JobCost)-[:INCURRED_BY]->(:Engineer)` (an additional label on that worker's `:Person`), and to
29
- its job with `(:Job)-[:HAS_COST]->(:JobCost)` the edge types are fixed by
30
- `schema-construction.md`; write no edge type absent from it. The edge satisfies the write-doctrine
31
- adjacency requirement (a node is written with at least one relationship); `personId` carries the
32
- same identity for roll-up reads.
33
-
34
- These records come from the worker's delivered messages. The platform's multi-channel transport
35
- delivers those messages into one session; the step that turns them into `:JobCost` records is this
36
- skill's roll-up (structure at roll-up see [roll-up.md](roll-up.md)).
38
+ `(:JobCost)-[:INCURRED_BY]->(:Engineer)`, and to its job with `(:Job)-[:HAS_COST]->(:JobCost)` the
39
+ edge types are fixed by `schema-construction.md`; write no edge type absent from it. The edges
40
+ satisfy the write-doctrine adjacency requirement (a node is written with at least one relationship);
41
+ `engineerId` carries the same identity for roll-up reads.
42
+
43
+ ## Where these records come from
44
+
45
+ The worker files a job sheet against one of his own visits on the operator's data portal, stating
46
+ the day worked and how much of it. The device carries that edit into the graph every sixty seconds,
47
+ writing the labour cost in the same statement as the visit's status, so a visit never reads as done
48
+ with the working day missing behind it. The day is attributed to the engineer the visit names rather
49
+ than to whoever filed the sheet, so an office person completing a worker's day still produces that
50
+ worker's cost.
51
+
52
+ A claim the device cannot date, or one on a visit with no attending engineer, is left unwritten and
53
+ counted in the journal rather than dated or attributed by guess. This skill reads these rows; it
54
+ never creates them.
@@ -3,13 +3,26 @@
3
3
  Days × rate and the CIS deduction are universal maths; they must reconcile to the penny, so they
4
4
  are computed by `rollup.mjs`, never by hand. The engine carries no operator content.
5
5
 
6
- ## Turning messages into check-ins (structure at roll-up)
7
-
8
- A worker's daily messages arrive over whatever channel and the platform delivers them into one session.
9
- At roll-up time, read the worker's messages for the period and structure each working day into one
10
- `:JobCost` (see [checkin-contract.md](checkin-contract.md)): `date`, `site`, `description`,
11
- `dayHundredths`. One message-day = one check-in. Structuring happens here, in the operator-run step,
12
- not in the unattended receive path — so the operator can review before anything is sent.
6
+ ## Reading the period's days
7
+
8
+ The days already exist as records. A worker files a job sheet against one of his own visits on the
9
+ operator's data portal, and the device writes that as one labour `:JobCost` (see
10
+ [checkin-contract.md](checkin-contract.md)) carrying `date`, `site`, `description` and
11
+ `dayHundredths`, within a minute of him filing it.
12
+
13
+ At roll-up time, read the worker's labour costs for the period with `memory-search`, by
14
+ `engineerId`, and filter on `date`. Never create them here. The key is `${engineerId}-${visitId}`,
15
+ so a re-filed sheet merges rather than duplicating; writing a record at roll-up would put a second,
16
+ differently-keyed entry beside one that already exists.
17
+
18
+ A worker who attends two sites in a day holds two costs on that date, each with its own site and
19
+ its own share of the day. The engine sums `dayHundredths` across every cost you hand it, so several
20
+ on one date add up to that day and each prints its own timesheet row.
21
+
22
+ A day the worker filed that the device could not use — no date it can key on, or a visit with no
23
+ attending engineer — was never written, and is counted in the journal as `undatedClaims` or as a
24
+ `labourClaims` count that does not drain. A period whose day total looks short is worth checking
25
+ there before it is treated as the worker's own record.
13
26
 
14
27
  ## The figures (integer pence; day amounts integer hundredths)
15
28
 
@@ -2,7 +2,9 @@
2
2
 
3
3
  The skill defines the questions; the operator's answers are his data. Per worker:
4
4
 
5
- - **Name** and the **`:Person`** he maps to.
5
+ - **Name**, the **`:Person`** he maps to, and his **`engineerId`** — the key everything else about
6
+ his days is read by. A worker with no `engineerId` has his job sheets refused rather than recorded
7
+ under a key nobody can reproduce.
6
8
  - **Engagement** — `employee` or `cis` (CIS subcontractor).
7
9
  - **Day rate** — captured in pounds, stored as integer pence (`dayRatePence`).
8
10
  - **UTR** — required when `engagement: cis`; omitted for employees.
@@ -14,7 +16,9 @@ Install-level, once:
14
16
 
15
17
  - **Invoice frequency** — weekly or monthly; this only sets the default roll-up period, never a
16
18
  scheduler. The roll-up is always operator-run.
17
- - **Part-day / overtime rule** — whether `dayHundredths` other than 100 are accepted, and how a
18
- part day is expressed. If disabled, every check-in is a full day.
19
+ - **Part-day rule** — whether `dayHundredths` below 100 are accepted, and how a part day is
20
+ expressed. If disabled, every day filed is a full day. The portal accepts an integer from 0 to
21
+ 100 and refuses anything above it, so a day longer than a full day cannot be filed and no
22
+ overtime rule is expressible here.
19
23
 
20
24
  No value is invented. A missing required value is a gap the agent flags, never a guess.
@@ -1,8 +1,9 @@
1
1
  import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
2
- import "./chunk-HYQNUVGO.js";
2
+ import {
3
+ __esm
4
+ } from "./chunk-KVR2FT6O.js";
3
5
 
4
6
  // app/lib/adminuser-self-heal.ts
5
- var UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
6
7
  function toNum(raw) {
7
8
  if (typeof raw === "number") return raw;
8
9
  if (raw && typeof raw.toNumber === "function") {
@@ -49,6 +50,13 @@ async function selfHealAdminUser(args) {
49
50
  await session.close();
50
51
  }
51
52
  }
53
+ var UUID_REGEX;
54
+ var init_adminuser_self_heal = __esm({
55
+ "app/lib/adminuser-self-heal.ts"() {
56
+ UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
57
+ }
58
+ });
59
+ init_adminuser_self_heal();
52
60
  export {
53
61
  selfHealAdminUser
54
62
  };