@hotmeshio/long-tail 0.27.0 → 0.28.0

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 (339) hide show
  1. package/README.md +9 -2
  2. package/build/api/settings.d.ts +4 -1
  3. package/build/api/settings.js +7 -1
  4. package/build/index.js +9 -4
  5. package/build/lib/db/config-lock.d.ts +10 -0
  6. package/build/lib/db/config-lock.js +28 -0
  7. package/build/lib/db/schemas/041_machine_lines.sql +26 -0
  8. package/build/lib/events/browser-view.js +8 -2
  9. package/build/lib/events/publish.d.ts +33 -0
  10. package/build/lib/events/publish.js +52 -1
  11. package/build/lib/machines/line.d.ts +4 -1
  12. package/build/lib/machines/line.js +18 -1
  13. package/build/lib/machines/protocol/codec.d.ts +8 -0
  14. package/build/lib/machines/protocol/codec.js +9 -0
  15. package/build/lib/machines/protocol/constants.d.ts +1 -1
  16. package/build/lib/machines/protocol/constants.js +1 -1
  17. package/build/lib/machines/protocol/contract.js +2 -2
  18. package/build/lib/machines/site/mosquitto-conf.d.ts +5 -4
  19. package/build/lib/machines/site/mosquitto-conf.js +31 -16
  20. package/build/lib/machines/site/site-conf.d.ts +9 -2
  21. package/build/lib/machines/site/site-conf.js +27 -8
  22. package/build/lib/machines/transport/callback-feed.d.ts +1 -0
  23. package/build/lib/machines/transport/callback-feed.js +4 -1
  24. package/build/lib/machines/transport/memory.d.ts +2 -0
  25. package/build/lib/machines/transport/memory.js +6 -0
  26. package/build/lib/machines/transport/mqtt-bus.d.ts +2 -0
  27. package/build/lib/machines/transport/mqtt-bus.js +4 -0
  28. package/build/lib/machines/transport/nats-bus.d.ts +1 -0
  29. package/build/lib/machines/transport/nats-bus.js +3 -0
  30. package/build/lib/machines/transport/nats-feed.d.ts +1 -0
  31. package/build/lib/machines/transport/nats-feed.js +4 -1
  32. package/build/lib/machines/transport/pubsub-feed.d.ts +1 -0
  33. package/build/lib/machines/transport/pubsub-feed.js +4 -1
  34. package/build/lib/machines/transport/stream-bus.d.ts +2 -0
  35. package/build/lib/machines/transport/stream-bus.js +5 -1
  36. package/build/modules/machines.d.ts +8 -0
  37. package/build/modules/machines.js +16 -0
  38. package/build/routes/index.js +2 -0
  39. package/build/routes/machines.d.ts +2 -0
  40. package/build/routes/machines.js +220 -0
  41. package/build/services/machines/commands.d.ts +5 -5
  42. package/build/services/machines/commands.js +3 -2
  43. package/build/services/machines/config.d.ts +2 -1
  44. package/build/services/machines/config.js +1 -1
  45. package/build/services/machines/contracts.d.ts +10 -0
  46. package/build/services/machines/gateway/actions.d.ts +1 -0
  47. package/build/services/machines/gateway/admission.d.ts +15 -3
  48. package/build/services/machines/gateway/admission.js +29 -14
  49. package/build/services/machines/gateway/dispatcher.d.ts +3 -0
  50. package/build/services/machines/gateway/dispatcher.js +12 -4
  51. package/build/services/machines/gateway/executor.d.ts +11 -2
  52. package/build/services/machines/gateway/executor.js +68 -29
  53. package/build/services/machines/gateway/gateway.d.ts +16 -1
  54. package/build/services/machines/gateway/gateway.js +55 -23
  55. package/build/services/machines/gateway/index.d.ts +3 -0
  56. package/build/services/machines/gateway/index.js +3 -0
  57. package/build/services/machines/gateway/inspect.d.ts +17 -0
  58. package/build/services/machines/gateway/inspect.js +68 -0
  59. package/build/services/machines/gateway/log.d.ts +8 -0
  60. package/build/services/machines/gateway/log.js +18 -0
  61. package/build/services/machines/gateway/pacing.js +1 -0
  62. package/build/services/machines/gateway/plan-escalation.js +8 -3
  63. package/build/services/machines/gateway/plan-machine.js +16 -6
  64. package/build/services/machines/gateway/project.d.ts +9 -0
  65. package/build/services/machines/gateway/project.js +55 -0
  66. package/build/services/machines/gateway/receipts.d.ts +3 -0
  67. package/build/services/machines/gateway/receipts.js +3 -1
  68. package/build/services/machines/gateway/reconcile.js +3 -3
  69. package/build/services/machines/gateway/registration.js +1 -1
  70. package/build/services/machines/gateway/reply-waiter.d.ts +6 -3
  71. package/build/services/machines/gateway/reply-waiter.js +37 -16
  72. package/build/services/machines/gateway/state.d.ts +29 -3
  73. package/build/services/machines/gateway/state.js +61 -7
  74. package/build/services/machines/gateway/wire.d.ts +58 -0
  75. package/build/services/machines/gateway/wire.js +171 -0
  76. package/build/services/machines/index.d.ts +3 -0
  77. package/build/services/machines/index.js +2 -0
  78. package/build/services/machines/line-index.d.ts +16 -0
  79. package/build/services/machines/line-index.js +39 -0
  80. package/build/services/machines/registry-sql.d.ts +31 -0
  81. package/build/services/machines/registry-sql.js +110 -0
  82. package/build/services/machines/registry-sync.d.ts +31 -0
  83. package/build/services/machines/registry-sync.js +81 -0
  84. package/build/services/machines/registry.d.ts +77 -0
  85. package/build/services/machines/registry.js +158 -0
  86. package/build/services/machines/rows.js +10 -1
  87. package/build/services/machines/surface.d.ts +45 -5
  88. package/build/services/machines/surface.js +95 -15
  89. package/build/start/apply-report.d.ts +1 -1
  90. package/build/start/apply-report.js +3 -25
  91. package/build/start/index.js +16 -4
  92. package/build/system/index.js +13 -0
  93. package/build/system/mcp-servers/admin/schemas.d.ts +22 -22
  94. package/build/system/mcp-servers/human-queue-schemas.d.ts +7 -7
  95. package/build/system/mcp-servers/machines-schemas.d.ts +35 -0
  96. package/build/system/mcp-servers/machines-schemas.js +35 -0
  97. package/build/system/mcp-servers/machines.d.ts +20 -0
  98. package/build/system/mcp-servers/machines.js +154 -0
  99. package/build/system/seed/tool-manifests-machines.d.ts +2 -0
  100. package/build/system/seed/tool-manifests-machines.js +88 -0
  101. package/build/tsconfig.tsbuildinfo +1 -1
  102. package/build/types/events.d.ts +6 -1
  103. package/build/types/index.d.ts +1 -0
  104. package/build/types/machines-view.d.ts +159 -0
  105. package/build/types/machines-view.js +7 -0
  106. package/build/types/machines.d.ts +4 -0
  107. package/dashboard/dist/assets/{AdminDashboard-DlItqxFS.js → AdminDashboard-Bm7VG65H.js} +2 -2
  108. package/dashboard/dist/assets/{AdminDashboard-DlItqxFS.js.map → AdminDashboard-Bm7VG65H.js.map} +1 -1
  109. package/dashboard/dist/assets/{AgentConfigPage-BUmT4a7n.js → AgentConfigPage-aJF7Sdbc.js} +6 -6
  110. package/dashboard/dist/assets/{AgentConfigPage-BUmT4a7n.js.map → AgentConfigPage-aJF7Sdbc.js.map} +1 -1
  111. package/dashboard/dist/assets/{AgentDetailPage-Cww8rlBi.js → AgentDetailPage-GwwghhxT.js} +3 -3
  112. package/dashboard/dist/assets/{AgentDetailPage-Cww8rlBi.js.map → AgentDetailPage-GwwghhxT.js.map} +1 -1
  113. package/dashboard/dist/assets/AgentsPage-DVvCzZyg.js +2 -0
  114. package/dashboard/dist/assets/{AgentsPage-C9UuUKhr.js.map → AgentsPage-DVvCzZyg.js.map} +1 -1
  115. package/dashboard/dist/assets/AvailableEscalationsPage-Cxmcji_K.js +2 -0
  116. package/dashboard/dist/assets/{AvailableEscalationsPage-DrvfXz70.js.map → AvailableEscalationsPage-Cxmcji_K.js.map} +1 -1
  117. package/dashboard/dist/assets/{BotPicker-CDq9XRMp.js → BotPicker-CofRxk4L.js} +2 -2
  118. package/dashboard/dist/assets/{BotPicker-CDq9XRMp.js.map → BotPicker-CofRxk4L.js.map} +1 -1
  119. package/dashboard/dist/assets/{BulkAssignModal-jsvqtrEA.js → BulkAssignModal-BARWuz4L.js} +2 -2
  120. package/dashboard/dist/assets/{BulkAssignModal-jsvqtrEA.js.map → BulkAssignModal-BARWuz4L.js.map} +1 -1
  121. package/dashboard/dist/assets/{CapabilitiesPage-CSCrI6B1.js → CapabilitiesPage-BJAWVNEx.js} +2 -2
  122. package/dashboard/dist/assets/{CapabilitiesPage-CSCrI6B1.js.map → CapabilitiesPage-BJAWVNEx.js.map} +1 -1
  123. package/dashboard/dist/assets/{CollapsibleSection-uD9mn-CQ.js → CollapsibleSection-CtgoaG75.js} +2 -2
  124. package/dashboard/dist/assets/{CollapsibleSection-uD9mn-CQ.js.map → CollapsibleSection-CtgoaG75.js.map} +1 -1
  125. package/dashboard/dist/assets/{ConfirmDeleteModal-BRmx2hA4.js → ConfirmDeleteModal-BYXXBWs6.js} +2 -2
  126. package/dashboard/dist/assets/{ConfirmDeleteModal-BRmx2hA4.js.map → ConfirmDeleteModal-BYXXBWs6.js.map} +1 -1
  127. package/dashboard/dist/assets/{ConnectedAppsPage-DlMzE5a-.js → ConnectedAppsPage-D0JkzWa7.js} +2 -2
  128. package/dashboard/dist/assets/{ConnectedAppsPage-DlMzE5a-.js.map → ConnectedAppsPage-D0JkzWa7.js.map} +1 -1
  129. package/dashboard/dist/assets/{CountdownTimer-sRuM4eM5.js → CountdownTimer-BcFxdZYN.js} +2 -2
  130. package/dashboard/dist/assets/{CountdownTimer-sRuM4eM5.js.map → CountdownTimer-BcFxdZYN.js.map} +1 -1
  131. package/dashboard/dist/assets/{CredentialsPage-bLYydwqa.js → CredentialsPage-DPSY20rV.js} +2 -2
  132. package/dashboard/dist/assets/{CredentialsPage-bLYydwqa.js.map → CredentialsPage-DPSY20rV.js.map} +1 -1
  133. package/dashboard/dist/assets/{CronLabel-D_ATDL2N.js → CronLabel-Dg_Oew_Y.js} +2 -2
  134. package/dashboard/dist/assets/{CronLabel-D_ATDL2N.js.map → CronLabel-Dg_Oew_Y.js.map} +1 -1
  135. package/dashboard/dist/assets/{DropZone-u1JGfR9G.js → DropZone-Cl_Flb16.js} +2 -2
  136. package/dashboard/dist/assets/{DropZone-u1JGfR9G.js.map → DropZone-Cl_Flb16.js.map} +1 -1
  137. package/dashboard/dist/assets/{ElapsedCell-groSMfqB.js → ElapsedCell-Dm3G5fK2.js} +2 -2
  138. package/dashboard/dist/assets/{ElapsedCell-groSMfqB.js.map → ElapsedCell-Dm3G5fK2.js.map} +1 -1
  139. package/dashboard/dist/assets/{EntityTimelinePanel-D-F3_A9m.js → EntityTimelinePanel-CrEEP04e.js} +2 -2
  140. package/dashboard/dist/assets/{EntityTimelinePanel-D-F3_A9m.js.map → EntityTimelinePanel-CrEEP04e.js.map} +1 -1
  141. package/dashboard/dist/assets/{EscalationListSchemaPage-Bad6Jrmr.js → EscalationListSchemaPage-wOInXcjs.js} +3 -3
  142. package/dashboard/dist/assets/{EscalationListSchemaPage-Bad6Jrmr.js.map → EscalationListSchemaPage-wOInXcjs.js.map} +1 -1
  143. package/dashboard/dist/assets/{EscalationSchemaPage-BKi_npI9.js → EscalationSchemaPage-CrIj_g9d.js} +3 -3
  144. package/dashboard/dist/assets/{EscalationSchemaPage-BKi_npI9.js.map → EscalationSchemaPage-CrIj_g9d.js.map} +1 -1
  145. package/dashboard/dist/assets/{EscalationTimeline-DQUUm3b1.js → EscalationTimeline-CeAsl5IT.js} +2 -2
  146. package/dashboard/dist/assets/{EscalationTimeline-DQUUm3b1.js.map → EscalationTimeline-CeAsl5IT.js.map} +1 -1
  147. package/dashboard/dist/assets/{EscalationTitleSelect-3mhXh77a.js → EscalationTitleSelect-D8qpCYiy.js} +2 -2
  148. package/dashboard/dist/assets/{EscalationTitleSelect-3mhXh77a.js.map → EscalationTitleSelect-D8qpCYiy.js.map} +1 -1
  149. package/dashboard/dist/assets/{EscalationsOverview-Qaov-uML.js → EscalationsOverview-CvaqVPsr.js} +2 -2
  150. package/dashboard/dist/assets/{EscalationsOverview-Qaov-uML.js.map → EscalationsOverview-CvaqVPsr.js.map} +1 -1
  151. package/dashboard/dist/assets/{EventTable-V4RF_n58.js → EventTable-Be0JuEl6.js} +2 -2
  152. package/dashboard/dist/assets/{EventTable-V4RF_n58.js.map → EventTable-Be0JuEl6.js.map} +1 -1
  153. package/dashboard/dist/assets/FilterBar-BVyAjIgv.js +2 -0
  154. package/dashboard/dist/assets/FilterBar-BVyAjIgv.js.map +1 -0
  155. package/dashboard/dist/assets/{GraphInvokePage-Djslhf96.js → GraphInvokePage-D_QigJeD.js} +2 -2
  156. package/dashboard/dist/assets/{GraphInvokePage-Djslhf96.js.map → GraphInvokePage-D_QigJeD.js.map} +1 -1
  157. package/dashboard/dist/assets/{HomePage-EjcNxlKx.js → HomePage-C1haeuNy.js} +2 -2
  158. package/dashboard/dist/assets/{HomePage-EjcNxlKx.js.map → HomePage-C1haeuNy.js.map} +1 -1
  159. package/dashboard/dist/assets/LinePage-CWD5pv1g.js +5 -0
  160. package/dashboard/dist/assets/LinePage-CWD5pv1g.js.map +1 -0
  161. package/dashboard/dist/assets/LinesPage-NqChsKcO.js +3 -0
  162. package/dashboard/dist/assets/LinesPage-NqChsKcO.js.map +1 -0
  163. package/dashboard/dist/assets/{ListToolbar-RrEAePOX.js → ListToolbar-BZCNrTh6.js} +2 -2
  164. package/dashboard/dist/assets/{ListToolbar-RrEAePOX.js.map → ListToolbar-BZCNrTh6.js.map} +1 -1
  165. package/dashboard/dist/assets/{McpOverview-8gqiL3Vj.js → McpOverview-yJTYnh1z.js} +2 -2
  166. package/dashboard/dist/assets/{McpOverview-8gqiL3Vj.js.map → McpOverview-yJTYnh1z.js.map} +1 -1
  167. package/dashboard/dist/assets/{McpQueryDetailPage-COyn6Ak5.js → McpQueryDetailPage-ChuLpJ4u.js} +3 -3
  168. package/dashboard/dist/assets/{McpQueryDetailPage-COyn6Ak5.js.map → McpQueryDetailPage-ChuLpJ4u.js.map} +1 -1
  169. package/dashboard/dist/assets/{McpQueryPage-Dj6Qj72w.js → McpQueryPage-9S-v9soF.js} +2 -2
  170. package/dashboard/dist/assets/{McpQueryPage-Dj6Qj72w.js.map → McpQueryPage-9S-v9soF.js.map} +1 -1
  171. package/dashboard/dist/assets/McpRunDetailPage-BhrcfxD5.js +2 -0
  172. package/dashboard/dist/assets/{McpRunDetailPage-80fQn9iX.js.map → McpRunDetailPage-BhrcfxD5.js.map} +1 -1
  173. package/dashboard/dist/assets/{McpRunsPage-DaSsI-EM.js → McpRunsPage-C5_i8_Zx.js} +2 -2
  174. package/dashboard/dist/assets/{McpRunsPage-DaSsI-EM.js.map → McpRunsPage-C5_i8_Zx.js.map} +1 -1
  175. package/dashboard/dist/assets/{NamespacePill-C5epAgq6.js → NamespacePill-OTZD2hzt.js} +2 -2
  176. package/dashboard/dist/assets/{NamespacePill-C5epAgq6.js.map → NamespacePill-OTZD2hzt.js.map} +1 -1
  177. package/dashboard/dist/assets/{OperationsPage-BSu1o2gB.js → OperationsPage-C03CeU5P.js} +2 -2
  178. package/dashboard/dist/assets/{OperationsPage-BSu1o2gB.js.map → OperationsPage-C03CeU5P.js.map} +1 -1
  179. package/dashboard/dist/assets/{OperatorDashboard-HFI4WGIV.js → OperatorDashboard-BzC134Jt.js} +2 -2
  180. package/dashboard/dist/assets/{OperatorDashboard-HFI4WGIV.js.map → OperatorDashboard-BzC134Jt.js.map} +1 -1
  181. package/dashboard/dist/assets/{PageHeader-BSWIspNB.js → PageHeader-Hx8APPwE.js} +2 -2
  182. package/dashboard/dist/assets/{PageHeader-BSWIspNB.js.map → PageHeader-Hx8APPwE.js.map} +1 -1
  183. package/dashboard/dist/assets/{PageHeaderWithStats-DDjopQ-k.js → PageHeaderWithStats-BEQYYBJv.js} +2 -2
  184. package/dashboard/dist/assets/{PageHeaderWithStats-DDjopQ-k.js.map → PageHeaderWithStats-BEQYYBJv.js.map} +1 -1
  185. package/dashboard/dist/assets/{PersonaDetailPage-D0qlBuGi.js → PersonaDetailPage-D0mY9L6j.js} +2 -2
  186. package/dashboard/dist/assets/{PersonaDetailPage-D0qlBuGi.js.map → PersonaDetailPage-D0mY9L6j.js.map} +1 -1
  187. package/dashboard/dist/assets/{PersonasPage-BJClu-5H.js → PersonasPage-FFlm5Eug.js} +2 -2
  188. package/dashboard/dist/assets/{PersonasPage-BJClu-5H.js.map → PersonasPage-FFlm5Eug.js.map} +1 -1
  189. package/dashboard/dist/assets/{PortalPage-CucNZn_w.js → PortalPage-Cpc25uO-.js} +2 -2
  190. package/dashboard/dist/assets/{PortalPage-CucNZn_w.js.map → PortalPage-Cpc25uO-.js.map} +1 -1
  191. package/dashboard/dist/assets/{ProcessDetailPage-B9wMw0RV.js → ProcessDetailPage-Di2J7KwY.js} +2 -2
  192. package/dashboard/dist/assets/{ProcessDetailPage-B9wMw0RV.js.map → ProcessDetailPage-Di2J7KwY.js.map} +1 -1
  193. package/dashboard/dist/assets/{ProcessesListPage-B6k4RpmR.js → ProcessesListPage-BEXwU3Z0.js} +2 -2
  194. package/dashboard/dist/assets/{ProcessesListPage-B6k4RpmR.js.map → ProcessesListPage-BEXwU3Z0.js.map} +1 -1
  195. package/dashboard/dist/assets/{ResolverForm-ZVufJ4G-.js → ResolverForm-2ks-3jXC.js} +6 -6
  196. package/dashboard/dist/assets/{ResolverForm-ZVufJ4G-.js.map → ResolverForm-2ks-3jXC.js.map} +1 -1
  197. package/dashboard/dist/assets/{RoleDetailPage-CTbq0mz4.js → RoleDetailPage-DqoOk0xc.js} +3 -3
  198. package/dashboard/dist/assets/{RoleDetailPage-CTbq0mz4.js.map → RoleDetailPage-DqoOk0xc.js.map} +1 -1
  199. package/dashboard/dist/assets/{RolePill-CoETDpjF.js → RolePill-R5_ctGFy.js} +2 -2
  200. package/dashboard/dist/assets/{RolePill-CoETDpjF.js.map → RolePill-R5_ctGFy.js.map} +1 -1
  201. package/dashboard/dist/assets/{RolesPage-DBKxeam4.js → RolesPage-CPmo8Srr.js} +2 -2
  202. package/dashboard/dist/assets/{RolesPage-DBKxeam4.js.map → RolesPage-CPmo8Srr.js.map} +1 -1
  203. package/dashboard/dist/assets/{RosterWidget-BkLAwEYB.js → RosterWidget-D2yovCKw.js} +2 -2
  204. package/dashboard/dist/assets/{RosterWidget-BkLAwEYB.js.map → RosterWidget-D2yovCKw.js.map} +1 -1
  205. package/dashboard/dist/assets/{RunAsSelector-D2DC4iDf.js → RunAsSelector-CMv96On6.js} +2 -2
  206. package/dashboard/dist/assets/{RunAsSelector-D2DC4iDf.js.map → RunAsSelector-CMv96On6.js.map} +1 -1
  207. package/dashboard/dist/assets/{ScanCodesPage-BlKleaT0.js → ScanCodesPage-CA6cTT-M.js} +2 -2
  208. package/dashboard/dist/assets/{ScanCodesPage-BlKleaT0.js.map → ScanCodesPage-CA6cTT-M.js.map} +1 -1
  209. package/dashboard/dist/assets/{ScanSchemeDetailPage-CTW6gofi.js → ScanSchemeDetailPage-DnctN5-H.js} +2 -2
  210. package/dashboard/dist/assets/{ScanSchemeDetailPage-CTW6gofi.js.map → ScanSchemeDetailPage-DnctN5-H.js.map} +1 -1
  211. package/dashboard/dist/assets/{ScanStationPage-DPRjSPyT.js → ScanStationPage-Bk8RwkKL.js} +2 -2
  212. package/dashboard/dist/assets/{ScanStationPage-DPRjSPyT.js.map → ScanStationPage-Bk8RwkKL.js.map} +1 -1
  213. package/dashboard/dist/assets/{ScopeBadge-CGsTtqFr.js → ScopeBadge-BXZ084nD.js} +2 -2
  214. package/dashboard/dist/assets/{ScopeBadge-CGsTtqFr.js.map → ScopeBadge-BXZ084nD.js.map} +1 -1
  215. package/dashboard/dist/assets/{StickyPagination-CkmX3-Gu.js → StickyPagination-B0FSuUgs.js} +2 -2
  216. package/dashboard/dist/assets/{StickyPagination-CkmX3-Gu.js.map → StickyPagination-B0FSuUgs.js.map} +1 -1
  217. package/dashboard/dist/assets/{StreamMessageDetail-Xm_n510s.js → StreamMessageDetail-BwZEvMpP.js} +2 -2
  218. package/dashboard/dist/assets/{StreamMessageDetail-Xm_n510s.js.map → StreamMessageDetail-BwZEvMpP.js.map} +1 -1
  219. package/dashboard/dist/assets/{SwimlaneTimeline-De48aJan.js → SwimlaneTimeline-BDVQEaMw.js} +2 -2
  220. package/dashboard/dist/assets/{SwimlaneTimeline-De48aJan.js.map → SwimlaneTimeline-BDVQEaMw.js.map} +1 -1
  221. package/dashboard/dist/assets/{TagInput-S7UuVT_M.js → TagInput-DjPUDp2M.js} +2 -2
  222. package/dashboard/dist/assets/{TagInput-S7UuVT_M.js.map → TagInput-DjPUDp2M.js.map} +1 -1
  223. package/dashboard/dist/assets/{TaskDetailPage-HycMx3O9.js → TaskDetailPage-BOlv3iGB.js} +2 -2
  224. package/dashboard/dist/assets/{TaskDetailPage-HycMx3O9.js.map → TaskDetailPage-BOlv3iGB.js.map} +1 -1
  225. package/dashboard/dist/assets/{TaskQueuePill-BlHNpYiZ.js → TaskQueuePill-D-4Ynf3K.js} +2 -2
  226. package/dashboard/dist/assets/{TaskQueuePill-BlHNpYiZ.js.map → TaskQueuePill-D-4Ynf3K.js.map} +1 -1
  227. package/dashboard/dist/assets/{TasksListPage-OIcFFp1C.js → TasksListPage-e2teY0bD.js} +2 -2
  228. package/dashboard/dist/assets/{TasksListPage-OIcFFp1C.js.map → TasksListPage-e2teY0bD.js.map} +1 -1
  229. package/dashboard/dist/assets/{TimeAgo-OTC_55oZ.js → TimeAgo-Cvkpf_b3.js} +2 -2
  230. package/dashboard/dist/assets/{TimeAgo-OTC_55oZ.js.map → TimeAgo-Cvkpf_b3.js.map} +1 -1
  231. package/dashboard/dist/assets/{TimestampCell-CAwIj_AI.js → TimestampCell-B3btAV0N.js} +2 -2
  232. package/dashboard/dist/assets/{TimestampCell-CAwIj_AI.js.map → TimestampCell-B3btAV0N.js.map} +1 -1
  233. package/dashboard/dist/assets/{ToolPill-D40uLM_v.js → ToolPill-GsKQ80CO.js} +2 -2
  234. package/dashboard/dist/assets/{ToolPill-D40uLM_v.js.map → ToolPill-GsKQ80CO.js.map} +1 -1
  235. package/dashboard/dist/assets/{ToolTestPanel-8Vf6pfw4.js → ToolTestPanel-B03nebR7.js} +2 -2
  236. package/dashboard/dist/assets/{ToolTestPanel-8Vf6pfw4.js.map → ToolTestPanel-B03nebR7.js.map} +1 -1
  237. package/dashboard/dist/assets/{TopicDetailPage-iZW8rK9L.js → TopicDetailPage-DBRWne3O.js} +3 -3
  238. package/dashboard/dist/assets/{TopicDetailPage-iZW8rK9L.js.map → TopicDetailPage-DBRWne3O.js.map} +1 -1
  239. package/dashboard/dist/assets/{TopicsPage-CqiEcj-W.js → TopicsPage-CVe2M9HD.js} +2 -2
  240. package/dashboard/dist/assets/{TopicsPage-CqiEcj-W.js.map → TopicsPage-CVe2M9HD.js.map} +1 -1
  241. package/dashboard/dist/assets/{UserName-DQFjuoib.js → UserName-B_q_qp6V.js} +2 -2
  242. package/dashboard/dist/assets/{UserName-DQFjuoib.js.map → UserName-B_q_qp6V.js.map} +1 -1
  243. package/dashboard/dist/assets/WorkflowExecutionPage-Bh_dr9tM.js +2 -0
  244. package/dashboard/dist/assets/{WorkflowExecutionPage-Di08wCbs.js.map → WorkflowExecutionPage-Bh_dr9tM.js.map} +1 -1
  245. package/dashboard/dist/assets/{WorkflowPill-DJLcK_CM.js → WorkflowPill-D7244fKp.js} +2 -2
  246. package/dashboard/dist/assets/{WorkflowPill-DJLcK_CM.js.map → WorkflowPill-D7244fKp.js.map} +1 -1
  247. package/dashboard/dist/assets/{WorkflowsDashboard-Bb8HlrTJ.js → WorkflowsDashboard-DA6Mj7qH.js} +2 -2
  248. package/dashboard/dist/assets/{WorkflowsDashboard-Bb8HlrTJ.js.map → WorkflowsDashboard-DA6Mj7qH.js.map} +1 -1
  249. package/dashboard/dist/assets/{WorkflowsOverview-Dta1kurk.js → WorkflowsOverview-B1kBLj-a.js} +2 -2
  250. package/dashboard/dist/assets/{WorkflowsOverview-Dta1kurk.js.map → WorkflowsOverview-B1kBLj-a.js.map} +1 -1
  251. package/dashboard/dist/assets/{YamlWorkflowDetailPage-CfAajg68.js → YamlWorkflowDetailPage-6GJM8QIX.js} +8 -8
  252. package/dashboard/dist/assets/{YamlWorkflowDetailPage-CfAajg68.js.map → YamlWorkflowDetailPage-6GJM8QIX.js.map} +1 -1
  253. package/dashboard/dist/assets/{YamlWorkflowsPage-CQFUzT4t.js → YamlWorkflowsPage-Bu811C7f.js} +2 -2
  254. package/dashboard/dist/assets/{YamlWorkflowsPage-CQFUzT4t.js.map → YamlWorkflowsPage-Bu811C7f.js.map} +1 -1
  255. package/dashboard/dist/assets/{agents-PuftRTB2.js → agents-MPk_GnYz.js} +2 -2
  256. package/dashboard/dist/assets/{agents-PuftRTB2.js.map → agents-MPk_GnYz.js.map} +1 -1
  257. package/dashboard/dist/assets/{bots-BmEiPAWY.js → bots-2RihE2Tc.js} +2 -2
  258. package/dashboard/dist/assets/{bots-BmEiPAWY.js.map → bots-2RihE2Tc.js.map} +1 -1
  259. package/dashboard/dist/assets/{capabilities-CRii4Soa.js → capabilities-CC4iwJ1P.js} +2 -2
  260. package/dashboard/dist/assets/{capabilities-CRii4Soa.js.map → capabilities-CC4iwJ1P.js.map} +1 -1
  261. package/dashboard/dist/assets/{controlplane-DO_czaYo.js → controlplane-Bmkic8BH.js} +2 -2
  262. package/dashboard/dist/assets/{controlplane-DO_czaYo.js.map → controlplane-Bmkic8BH.js.map} +1 -1
  263. package/dashboard/dist/assets/{escalation-columns-CzCquCPh.js → escalation-columns-B0lhUUrQ.js} +2 -2
  264. package/dashboard/dist/assets/{escalation-columns-CzCquCPh.js.map → escalation-columns-B0lhUUrQ.js.map} +1 -1
  265. package/dashboard/dist/assets/{escalation-items-Cy0ZgJqV.js → escalation-items-7WFpPo46.js} +2 -2
  266. package/dashboard/dist/assets/{escalation-items-Cy0ZgJqV.js.map → escalation-items-7WFpPo46.js.map} +1 -1
  267. package/dashboard/dist/assets/index-B9uv-euR.css +1 -0
  268. package/dashboard/dist/assets/{index-DhSCCpqM.js → index-B_XV1rwu.js} +2 -2
  269. package/dashboard/dist/assets/{index-DhSCCpqM.js.map → index-B_XV1rwu.js.map} +1 -1
  270. package/dashboard/dist/assets/{index-Cx8xb-oU.js → index-C2CLfGwL.js} +2 -2
  271. package/dashboard/dist/assets/{index-Cx8xb-oU.js.map → index-C2CLfGwL.js.map} +1 -1
  272. package/dashboard/dist/assets/{index-Cga5IW3D.js → index-C3AeFihz.js} +2 -2
  273. package/dashboard/dist/assets/{index-Cga5IW3D.js.map → index-C3AeFihz.js.map} +1 -1
  274. package/dashboard/dist/assets/{index-DiaRlFYI.js → index-CBri8fYM.js} +2 -2
  275. package/dashboard/dist/assets/{index-DiaRlFYI.js.map → index-CBri8fYM.js.map} +1 -1
  276. package/dashboard/dist/assets/{index-CL_1VpGb.js → index-CRWsB7ZC.js} +2 -2
  277. package/dashboard/dist/assets/{index-CL_1VpGb.js.map → index-CRWsB7ZC.js.map} +1 -1
  278. package/dashboard/dist/assets/{index-XntldBd0.js → index-CTOv3G7a.js} +2 -2
  279. package/dashboard/dist/assets/{index-XntldBd0.js.map → index-CTOv3G7a.js.map} +1 -1
  280. package/dashboard/dist/assets/{index-CfP2nKRc.js → index-CcArGkzI.js} +3 -3
  281. package/dashboard/dist/assets/{index-CfP2nKRc.js.map → index-CcArGkzI.js.map} +1 -1
  282. package/dashboard/dist/assets/{index-Dz6R8-Dw.js → index-CkMHS-hG.js} +25 -25
  283. package/dashboard/dist/assets/index-CkMHS-hG.js.map +1 -0
  284. package/dashboard/dist/assets/index-CmsmwCyv.js +2 -0
  285. package/dashboard/dist/assets/{index-4YaDUcKd.js.map → index-CmsmwCyv.js.map} +1 -1
  286. package/dashboard/dist/assets/{index-2SM2_onB.js → index-CvJsvqIc.js} +2 -2
  287. package/dashboard/dist/assets/{index-2SM2_onB.js.map → index-CvJsvqIc.js.map} +1 -1
  288. package/dashboard/dist/assets/{index-Rwqrflm-.js → index-D-ilRyfy.js} +2 -2
  289. package/dashboard/dist/assets/{index-Rwqrflm-.js.map → index-D-ilRyfy.js.map} +1 -1
  290. package/dashboard/dist/assets/{index-CZ7A3AcD.js → index-DSUtfDXx.js} +2 -2
  291. package/dashboard/dist/assets/{index-CZ7A3AcD.js.map → index-DSUtfDXx.js.map} +1 -1
  292. package/dashboard/dist/assets/{index-jL2K6us4.js → index-Da6ycKyf.js} +2 -2
  293. package/dashboard/dist/assets/{index-jL2K6us4.js.map → index-Da6ycKyf.js.map} +1 -1
  294. package/dashboard/dist/assets/{knowledge-CeUqGPuo.js → knowledge-Bpbg20DC.js} +2 -2
  295. package/dashboard/dist/assets/{knowledge-CeUqGPuo.js.map → knowledge-Bpbg20DC.js.map} +1 -1
  296. package/dashboard/dist/assets/machines-BqOZZU-3.js +2 -0
  297. package/dashboard/dist/assets/machines-BqOZZU-3.js.map +1 -0
  298. package/dashboard/dist/assets/{mcp-Cx96NTeD.js → mcp-CmcUXYce.js} +2 -2
  299. package/dashboard/dist/assets/{mcp-Cx96NTeD.js.map → mcp-CmcUXYce.js.map} +1 -1
  300. package/dashboard/dist/assets/{mcp-query-XAzWl0gm.js → mcp-query-C8buQxN9.js} +2 -2
  301. package/dashboard/dist/assets/{mcp-query-XAzWl0gm.js.map → mcp-query-C8buQxN9.js.map} +1 -1
  302. package/dashboard/dist/assets/{personas--4kjwyOw.js → personas-C2n5oDmY.js} +2 -2
  303. package/dashboard/dist/assets/{personas--4kjwyOw.js.map → personas-C2n5oDmY.js.map} +1 -1
  304. package/dashboard/dist/assets/{pipelines-PgkwvG7f.js → pipelines-RKpSkFz7.js} +2 -2
  305. package/dashboard/dist/assets/{pipelines-PgkwvG7f.js.map → pipelines-RKpSkFz7.js.map} +1 -1
  306. package/dashboard/dist/assets/{tasks-CcYxdBa3.js → tasks-Dab4hExW.js} +2 -2
  307. package/dashboard/dist/assets/{tasks-CcYxdBa3.js.map → tasks-Dab4hExW.js.map} +1 -1
  308. package/dashboard/dist/assets/{topics-_lik7cNY.js → topics-FTMNP7r3.js} +2 -2
  309. package/dashboard/dist/assets/{topics-_lik7cNY.js.map → topics-FTMNP7r3.js.map} +1 -1
  310. package/dashboard/dist/assets/{useDebouncedValue-Bm_AoxVx.js → useDebouncedValue-B_1u1YIk.js} +2 -2
  311. package/dashboard/dist/assets/{useDebouncedValue-Bm_AoxVx.js.map → useDebouncedValue-B_1u1YIk.js.map} +1 -1
  312. package/dashboard/dist/assets/{useNamespace-DgXXKdx5.js → useNamespace-HUeAI7Qb.js} +2 -2
  313. package/dashboard/dist/assets/{useNamespace-DgXXKdx5.js.map → useNamespace-HUeAI7Qb.js.map} +1 -1
  314. package/dashboard/dist/assets/{useYamlActivityEvents-Dj2qtGSd.js → useYamlActivityEvents-Cax54qHH.js} +2 -2
  315. package/dashboard/dist/assets/{useYamlActivityEvents-Dj2qtGSd.js.map → useYamlActivityEvents-Cax54qHH.js.map} +1 -1
  316. package/dashboard/dist/assets/{validate-FlXCBBT6.js → validate-DxOaV7QS.js} +2 -2
  317. package/dashboard/dist/assets/{validate-FlXCBBT6.js.map → validate-DxOaV7QS.js.map} +1 -1
  318. package/dashboard/dist/assets/{vendor-icons-DUYcKTjP.js → vendor-icons-fxBvvHBi.js} +187 -182
  319. package/dashboard/dist/assets/vendor-icons-fxBvvHBi.js.map +1 -0
  320. package/dashboard/dist/assets/{yaml-workflows-B0_JxRYQ.js → yaml-workflows-BgY1XHJx.js} +2 -2
  321. package/dashboard/dist/assets/{yaml-workflows-B0_JxRYQ.js.map → yaml-workflows-BgY1XHJx.js.map} +1 -1
  322. package/dashboard/dist/index.html +3 -3
  323. package/docs/architecture.md +1 -0
  324. package/docs/code-owned-configuration.md +6 -0
  325. package/docs/dashboard.md +1 -0
  326. package/docs/events.md +34 -1
  327. package/docs/machines.md +93 -16
  328. package/docs/mcp.md +19 -0
  329. package/package.json +1 -1
  330. package/dashboard/dist/assets/AgentsPage-C9UuUKhr.js +0 -2
  331. package/dashboard/dist/assets/AvailableEscalationsPage-DrvfXz70.js +0 -2
  332. package/dashboard/dist/assets/FilterBar-BygWrnB1.js +0 -2
  333. package/dashboard/dist/assets/FilterBar-BygWrnB1.js.map +0 -1
  334. package/dashboard/dist/assets/McpRunDetailPage-80fQn9iX.js +0 -2
  335. package/dashboard/dist/assets/WorkflowExecutionPage-Di08wCbs.js +0 -2
  336. package/dashboard/dist/assets/index-4YaDUcKd.js +0 -2
  337. package/dashboard/dist/assets/index-CnU7Jjz3.css +0 -1
  338. package/dashboard/dist/assets/index-Dz6R8-Dw.js.map +0 -1
  339. package/dashboard/dist/assets/vendor-icons-DUYcKTjP.js.map +0 -1
@@ -4,11 +4,18 @@
4
4
  * controls, one replica leads (an advisory lock), makes sure the line's bot
5
5
  * accounts exist, and runs the gateway: escalation events in, machine
6
6
  * messages in, verbs performed in process as each machine. Workflows never
7
- * see any of it; their rows are resolved the way a form resolves them.
7
+ * see any of it; their rows are resolved the way a form resolves them. The
8
+ * surface also describes its lines for the dashboard: every replica lists
9
+ * them, and the leader of a line projects it.
8
10
  */
9
11
  Object.defineProperty(exports, "__esModule", { value: true });
10
12
  exports.MachineSurface = void 0;
11
13
  exports.surfaceConfig = surfaceConfig;
14
+ exports.summarizeLine = summarizeLine;
15
+ exports.commandOpsOf = commandOpsOf;
16
+ const node_util_1 = require("node:util");
17
+ const line_1 = require("../../lib/machines/line");
18
+ const protocol_1 = require("../../lib/machines/protocol");
12
19
  const config_1 = require("./config");
13
20
  const api_escalations_1 = require("./gateway/api-escalations");
14
21
  const gateway_1 = require("./gateway/gateway");
@@ -24,20 +31,42 @@ function surfaceConfig(env) {
24
31
  }
25
32
  return (0, config_1.loadMachineLineConfig)({ ...env, MACHINE_ESCALATION_FEED: env.MACHINE_ESCALATION_FEED ?? config_1.ESCALATION_FEED.IN_PROCESS });
26
33
  }
34
+ /** The line as every replica can describe it: its machines, roles, declared addresses and the codec's own ops. */
35
+ function summarizeLine(line, codec) {
36
+ const rowOps = (0, protocol_1.declaredRowOps)(codec);
37
+ return {
38
+ siteId: line.siteId, lineId: line.lineId,
39
+ machines: line.machines.map((m) => {
40
+ const learned = (0, line_1.learnsAddress)(line, m.machineId);
41
+ return {
42
+ machineId: m.machineId, process: m.process, role: (0, line_1.machineRole)(m),
43
+ address: learned ? null : m.address ?? m.machineId, addressing: learned ? 'learned' : 'declared',
44
+ ...(rowOps.length ? { rowOps } : {}),
45
+ };
46
+ }),
47
+ };
48
+ }
49
+ /** The ops a machine-command row may ask for: the control ops, a snapshot, and the codec's own. */
50
+ function commandOpsOf(codec) {
51
+ return [...new Set([...protocol_1.CONTROL_OPS, protocol_1.OP.SNAPSHOT, ...(0, protocol_1.declaredRowOps)(codec)])];
52
+ }
27
53
  class LineRun {
28
54
  constructor(line, config, opts, log) {
29
55
  this.line = line;
30
56
  this.config = config;
31
57
  this.opts = opts;
32
58
  this.log = log;
59
+ this.ready = false;
33
60
  this.stopped = false;
34
61
  this.leadership = new leadership_1.LineLeadership(`lt-machine-line:${line.siteId}/${line.lineId}`);
62
+ this.codec = opts.codec ?? (0, select_1.defaultCodec)(config, line);
35
63
  }
36
64
  start() {
37
65
  const where = { site: this.line.siteId, line: this.line.lineId };
38
66
  this.log.info(log_1.GATEWAY_LOG.STANDBY, where);
39
67
  this.leadership.run(() => (this.leading = this.lead()), async (err) => {
40
68
  this.log.warn(log_1.GATEWAY_LOG.LEADERSHIP_LOST, { ...where, error: err.message });
69
+ this.ready = false;
41
70
  await this.gateway?.stop();
42
71
  this.gateway = undefined;
43
72
  }).catch((err) => this.log.error(log_1.GATEWAY_LOG.START_FAILED, { ...where, error: err.message }));
@@ -45,10 +74,15 @@ class LineRun {
45
74
  /** A gateway still starting finishes first, so none is left running after stop. */
46
75
  async stop() {
47
76
  this.stopped = true;
77
+ this.ready = false;
48
78
  await this.leading?.catch(() => undefined);
49
79
  await this.gateway?.stop();
50
80
  await this.leadership.stop();
51
81
  }
82
+ /** The gateway, once it leads the line. */
83
+ leader() {
84
+ return this.ready ? this.gateway : undefined;
85
+ }
52
86
  async lead() {
53
87
  // 1. Identities, 2. gateway on the line's bus and feed, 3. reconcile and consume (gateway.start)
54
88
  const ids = await (0, identities_1.ensureLineBots)(this.line);
@@ -60,8 +94,7 @@ class LineRun {
60
94
  throw new Error(`no bot for "${as}" on ${this.line.siteId}/${this.line.lineId}`);
61
95
  return id;
62
96
  };
63
- const { config, line } = this;
64
- const codec = this.opts.codec ?? (0, select_1.defaultCodec)(config, line);
97
+ const { config, line, codec } = this;
65
98
  this.gateway = new gateway_1.MachineGateway({
66
99
  bus: (0, select_1.createMachineBus)(config, line, codec),
67
100
  codec,
@@ -74,31 +107,78 @@ class LineRun {
74
107
  settings: {
75
108
  topicRoot: config.topicRoot, replyTimeoutMs: config.replyTimeoutMs, dispatchAttempts: config.dispatchAttempts,
76
109
  offlineDebounceMs: config.offlineDebounceMs, dispatchTtlMs: config.dispatchTtlMs, quietMs: config.quietMs,
77
- receiptDelayMs: config.receiptDelayMs, lifecycle: config.lifecycle, progressStep: config.progressStep,
110
+ receiptDelayMs: config.receiptDelayMs, lifecycle: config.lifecycle, progressStep: config.progressStep, wireTelemetry: config.wireTelemetry,
78
111
  },
79
112
  });
80
113
  await this.gateway.start();
114
+ this.ready = true;
81
115
  this.log.info(log_1.GATEWAY_LOG.LEADING, { site: line.siteId, line: line.lineId });
82
116
  }
83
117
  }
84
118
  class MachineSurface {
85
- constructor(runs) {
86
- this.runs = runs;
119
+ constructor(config, opts, log) {
120
+ this.config = config;
121
+ this.opts = opts;
122
+ this.log = log;
123
+ this.runs = new Map();
87
124
  }
88
- /** Validate the configuration, then contend for every line in the background. */
125
+ /** Validate the configuration, then contend for every line in the background. The registry may add lines later. */
89
126
  static start(opts) {
90
- if (!opts.lines.length)
91
- throw new Error('start({ machines }) needs at least one line');
92
127
  const config = surfaceConfig(opts.env ?? process.env);
93
- const log = opts.log ?? log_1.consoleLog;
94
- const runs = opts.lines.map((line) => new LineRun(line, config, opts, log));
95
- for (const run of runs)
96
- run.start();
97
- return new MachineSurface(runs);
128
+ const surface = new MachineSurface(config, opts, opts.log ?? log_1.consoleLog);
129
+ for (const line of opts.lines)
130
+ surface.begin(line);
131
+ return surface;
98
132
  }
99
133
  async stop() {
100
- for (const run of this.runs)
134
+ for (const run of this.runs.values())
101
135
  await run.stop();
136
+ this.runs.clear();
137
+ }
138
+ async declare(line) {
139
+ const current = this.run(line.siteId, line.lineId);
140
+ if (current && (0, node_util_1.isDeepStrictEqual)(current.line, line))
141
+ return 'unchanged';
142
+ if (current)
143
+ await current.stop();
144
+ this.begin(line);
145
+ return current ? 'replaced' : 'started';
146
+ }
147
+ async retire(siteId, lineId) {
148
+ const current = this.run(siteId, lineId);
149
+ if (!current)
150
+ return false;
151
+ this.runs.delete(keyOf(siteId, lineId));
152
+ await current.stop();
153
+ return true;
154
+ }
155
+ describeLines() {
156
+ return [...this.runs.values()].map((run) => summarizeLine(run.line, run.codec));
157
+ }
158
+ describeLine(siteId, lineId) {
159
+ const gateway = this.run(siteId, lineId)?.leader();
160
+ return gateway ? gateway.state.project(this.findLine(siteId, lineId)) : null;
161
+ }
162
+ inspect(siteId, lineId, probe) {
163
+ return this.run(siteId, lineId)?.leader()?.inspect(probe) ?? null;
164
+ }
165
+ findLine(siteId, lineId) {
166
+ return this.run(siteId, lineId)?.line;
167
+ }
168
+ commandOps(siteId, lineId) {
169
+ const run = this.run(siteId, lineId);
170
+ return run ? commandOpsOf(run.codec) : [];
171
+ }
172
+ begin(line) {
173
+ const run = new LineRun(line, this.config, this.opts, (0, log_1.composeLogs)(this.log, (0, log_1.eventsLog)(line)));
174
+ this.runs.set(keyOf(line.siteId, line.lineId), run);
175
+ run.start();
176
+ }
177
+ run(siteId, lineId) {
178
+ return this.runs.get(keyOf(siteId, lineId));
102
179
  }
103
180
  }
104
181
  exports.MachineSurface = MachineSurface;
182
+ function keyOf(siteId, lineId) {
183
+ return `${siteId}/${lineId}`;
184
+ }
@@ -18,7 +18,7 @@ export interface SurfaceReport {
18
18
  export declare function newSurfaceReport(): SurfaceReport;
19
19
  /** Record one entry's outcome on the surface report. */
20
20
  export declare function recordOutcome(report: SurfaceReport, name: string, outcome: ApplyOutcome): void;
21
- export declare function withConfigLock<T>(fn: () => Promise<T>): Promise<T>;
21
+ export { withConfigLock } from '../lib/db/config-lock';
22
22
  /**
23
23
  * One boot line per surface. Warn level when orphans exist so operators see
24
24
  * "declared set no longer matches the DB" without grepping.
@@ -1,11 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.withConfigLock = void 0;
3
4
  exports.ownedByCode = ownedByCode;
4
5
  exports.newSurfaceReport = newSurfaceReport;
5
6
  exports.recordOutcome = recordOutcome;
6
- exports.withConfigLock = withConfigLock;
7
7
  exports.logSurfaceReport = logSurfaceReport;
8
- const db_1 = require("../lib/db");
9
8
  const logger_1 = require("../lib/logger");
10
9
  /**
11
10
  * Effective ownership for one declared entry: the per-entry `reset` flag wins
@@ -26,29 +25,8 @@ function recordOutcome(report, name, outcome) {
26
25
  else
27
26
  report.dbOwned.push(name);
28
27
  }
29
- /**
30
- * Serializes multi-statement config writes (role-list replaces, escalation
31
- * target replaces) across concurrently booting containers. Single-statement
32
- * upserts are individually race-safe; the lock exists for the replace
33
- * transactions and keeps boot reports coherent. Distinct from the migration
34
- * lock so a slow migration on one container never blocks another's config
35
- * pass behind two locks at once.
36
- */
37
- const CONFIG_APPLY_LOCK_ID = 8675310;
38
- async function withConfigLock(fn) {
39
- const pool = (0, db_1.getPool)();
40
- const client = await pool.connect();
41
- try {
42
- await client.query(`SELECT pg_advisory_lock(${CONFIG_APPLY_LOCK_ID})`);
43
- return await fn();
44
- }
45
- finally {
46
- await client
47
- .query(`SELECT pg_advisory_unlock(${CONFIG_APPLY_LOCK_ID})`)
48
- .catch(() => { });
49
- client.release();
50
- }
51
- }
28
+ var config_lock_1 = require("../lib/db/config-lock");
29
+ Object.defineProperty(exports, "withConfigLock", { enumerable: true, get: function () { return config_lock_1.withConfigLock; } });
52
30
  /**
53
31
  * One boot line per surface. Warn level when orphans exist so operators see
54
32
  * "declared set no longer matches the DB" without grepping.
@@ -8,7 +8,9 @@ const events_1 = require("../lib/events");
8
8
  const messaging_1 = require("../lib/messaging");
9
9
  const callback_1 = require("../lib/events/callback");
10
10
  const surface_1 = require("../services/machines/surface");
11
+ const machines_1 = require("../modules/machines");
11
12
  const roles_1 = require("../services/machines/roles");
13
+ const registry_sync_1 = require("../services/machines/registry-sync");
12
14
  const maintenance_1 = require("../services/maintenance");
13
15
  const cron_1 = require("../services/cron");
14
16
  const mcp_1 = require("../services/mcp");
@@ -80,10 +82,18 @@ async function start(startConfig) {
80
82
  }
81
83
  const { workers, builtinMcpServerFactories } = await (0, workers_1.collectWorkers)(startConfig);
82
84
  const { adminUserId } = await (0, workers_1.startWorkers)(startConfig, workers, builtinMcpServerFactories);
83
- // 5b. Machines, after the workers exist so their rows publish lifecycle events
84
- const machines = startConfig.machines
85
- ? surface_1.MachineSurface.start({ ...startConfig.machines, callbacks: events_1.eventRegistry.getAdapter(callback_1.CallbackEventAdapter) })
86
- : null;
85
+ // 5b. Machines, after the workers exist so their rows publish lifecycle events.
86
+ // Code lines land in the registry under the configSource rules; the surface runs every line the registry holds.
87
+ let machines = null;
88
+ let unwatchLines = null;
89
+ if (startConfig.machines) {
90
+ const callbacks = events_1.eventRegistry.getAdapter(callback_1.CallbackEventAdapter);
91
+ const { lines } = await (0, registry_sync_1.syncDeclaredLines)(startConfig.machines.lines, (startConfig.configSource ?? 'db') === 'code');
92
+ machines = surface_1.MachineSurface.start({ ...startConfig.machines, lines, callbacks });
93
+ if (callbacks)
94
+ unwatchLines = (0, registry_sync_1.watchLineRegistry)(machines, callbacks);
95
+ }
96
+ (0, machines_1.registerMachineSurface)(machines);
87
97
  // 6. Start embedded server (if enabled)
88
98
  const serverEnabled = startConfig.server?.enabled !== false;
89
99
  let httpServer = null;
@@ -101,7 +111,9 @@ async function start(startConfig) {
101
111
  await new Promise((resolve) => httpServer.close(() => resolve()));
102
112
  }
103
113
  if (machines) {
114
+ unwatchLines?.();
104
115
  await machines.stop();
116
+ (0, machines_1.registerMachineSurface)(null);
105
117
  }
106
118
  if (mcp_1.mcpRegistry.hasAdapter) {
107
119
  await mcp_1.mcpRegistry.disconnect();
@@ -60,6 +60,7 @@ const tool_manifests_workflows_1 = require("./seed/tool-manifests-workflows");
60
60
  const tool_manifests_admin_1 = require("./seed/tool-manifests-admin");
61
61
  const tool_manifests_knowledge_1 = require("./seed/tool-manifests-knowledge");
62
62
  const tool_manifests_events_1 = require("./seed/tool-manifests-events");
63
+ const tool_manifests_machines_1 = require("./seed/tool-manifests-machines");
63
64
  // Example connectors — loaded conditionally (not in npm package)
64
65
  let GMAIL_TOOLS = [];
65
66
  try {
@@ -296,6 +297,18 @@ exports.builtinMcpServerFactories = {
296
297
  toolManifest: tool_manifests_data_1.SCHEMA_EXCHANGE_TOOLS,
297
298
  },
298
299
  },
300
+ 'long-tail-machines': {
301
+ factory: () => Promise.resolve().then(() => __importStar(require('./mcp-servers/machines'))).then((m) => m.createMachinesServer()),
302
+ config: {
303
+ description: 'The machine surface: the lines index with health, a line as its leader sees it, a wire message dry run, machine-command rows, and the registry\'s declare and retire.',
304
+ tags: ['machines', 'lines', 'mqtt', 'factory'],
305
+ category: 'Data',
306
+ compileHints: 'list_machine_lines answers which lines need attention; get_machine_line reads one line. ' +
307
+ 'send_machine_command parks a machine-command row that the gateway resolves with the machine\'s reply; ' +
308
+ 'read the row to learn the outcome. declare_machine_line and retire_machine_line change the registry and need admin.',
309
+ toolManifest: tool_manifests_machines_1.MACHINE_TOOLS,
310
+ },
311
+ },
299
312
  'long-tail-events': {
300
313
  factory: () => Promise.resolve().then(() => __importStar(require('./mcp-servers/events'))).then((m) => m.createEventsServer()),
301
314
  config: {
@@ -210,14 +210,14 @@ export declare const accumulateItemSchema: z.ZodObject<{
210
210
  key?: string | undefined;
211
211
  value?: string | undefined;
212
212
  id?: string | undefined;
213
- signalKey?: string | undefined;
214
213
  payload?: Record<string, any> | undefined;
214
+ signalKey?: string | undefined;
215
215
  }, {
216
216
  key?: string | undefined;
217
217
  value?: string | undefined;
218
218
  id?: string | undefined;
219
- signalKey?: string | undefined;
220
219
  payload?: Record<string, any> | undefined;
220
+ signalKey?: string | undefined;
221
221
  }>>;
222
222
  initiatedBy: z.ZodOptional<z.ZodString>;
223
223
  }, "strip", z.ZodTypeAny, {
@@ -229,8 +229,8 @@ export declare const accumulateItemSchema: z.ZodObject<{
229
229
  key?: string | undefined;
230
230
  value?: string | undefined;
231
231
  id?: string | undefined;
232
- signalKey?: string | undefined;
233
232
  payload?: Record<string, any> | undefined;
233
+ signalKey?: string | undefined;
234
234
  } | undefined;
235
235
  initiatedBy?: string | undefined;
236
236
  }, {
@@ -242,8 +242,8 @@ export declare const accumulateItemSchema: z.ZodObject<{
242
242
  key?: string | undefined;
243
243
  value?: string | undefined;
244
244
  id?: string | undefined;
245
- signalKey?: string | undefined;
246
245
  payload?: Record<string, any> | undefined;
246
+ signalKey?: string | undefined;
247
247
  } | undefined;
248
248
  initiatedBy?: string | undefined;
249
249
  }>;
@@ -1277,14 +1277,14 @@ export declare const applyThrottleSchema: z.ZodObject<{
1277
1277
  }, "strip", z.ZodTypeAny, {
1278
1278
  appId: string;
1279
1279
  throttle: number;
1280
- scope?: string | undefined;
1281
1280
  topic?: string | undefined;
1281
+ scope?: string | undefined;
1282
1282
  guid?: string | undefined;
1283
1283
  }, {
1284
1284
  throttle: number;
1285
+ topic?: string | undefined;
1285
1286
  appId?: string | undefined;
1286
1287
  scope?: string | undefined;
1287
- topic?: string | undefined;
1288
1288
  guid?: string | undefined;
1289
1289
  }>;
1290
1290
  export declare const getStreamStatsSchema: z.ZodObject<{
@@ -1320,10 +1320,10 @@ export declare const listStreamMessagesSchema: z.ZodObject<{
1320
1320
  offset: number;
1321
1321
  namespace: string;
1322
1322
  status?: string | undefined;
1323
+ topic?: string | undefined;
1323
1324
  order?: "asc" | "desc" | undefined;
1324
1325
  sort_by?: string | undefined;
1325
1326
  workflow_name?: string | undefined;
1326
- topic?: string | undefined;
1327
1327
  jid?: string | undefined;
1328
1328
  stream_name?: string | undefined;
1329
1329
  msg_type?: string | undefined;
@@ -1331,12 +1331,12 @@ export declare const listStreamMessagesSchema: z.ZodObject<{
1331
1331
  }, {
1332
1332
  source: string;
1333
1333
  status?: string | undefined;
1334
+ topic?: string | undefined;
1334
1335
  limit?: number | undefined;
1335
1336
  offset?: number | undefined;
1336
1337
  order?: "asc" | "desc" | undefined;
1337
1338
  sort_by?: string | undefined;
1338
1339
  workflow_name?: string | undefined;
1339
- topic?: string | undefined;
1340
1340
  jid?: string | undefined;
1341
1341
  namespace?: string | undefined;
1342
1342
  stream_name?: string | undefined;
@@ -1396,12 +1396,12 @@ export declare const interruptJobSchema: z.ZodObject<{
1396
1396
  topic: z.ZodString;
1397
1397
  app_id: z.ZodDefault<z.ZodOptional<z.ZodString>>;
1398
1398
  }, "strip", z.ZodTypeAny, {
1399
+ topic: string;
1399
1400
  app_id: string;
1400
1401
  job_id: string;
1401
- topic: string;
1402
1402
  }, {
1403
- job_id: string;
1404
1403
  topic: string;
1404
+ job_id: string;
1405
1405
  app_id?: string | undefined;
1406
1406
  }>;
1407
1407
  export declare const listTopicsSchema: z.ZodObject<{
@@ -1435,15 +1435,15 @@ export declare const createTopicSchema: z.ZodObject<{
1435
1435
  example_payload: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
1436
1436
  tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1437
1437
  }, "strip", z.ZodTypeAny, {
1438
- category: string;
1439
1438
  topic: string;
1439
+ category: string;
1440
1440
  description?: string | undefined;
1441
1441
  tags?: string[] | undefined;
1442
1442
  payload_schema?: Record<string, any> | undefined;
1443
1443
  example_payload?: Record<string, any> | undefined;
1444
1444
  }, {
1445
- category: string;
1446
1445
  topic: string;
1446
+ category: string;
1447
1447
  description?: string | undefined;
1448
1448
  tags?: string[] | undefined;
1449
1449
  payload_schema?: Record<string, any> | undefined;
@@ -2989,8 +2989,8 @@ export declare const upsertScanRuleSchema: z.ZodObject<{
2989
2989
  requireActingIdentity: z.ZodOptional<z.ZodBoolean>;
2990
2990
  code: z.ZodOptional<z.ZodString>;
2991
2991
  }, "strip", z.ZodTypeAny, {
2992
- label: string;
2993
2992
  verb: "resolve" | "show-detail" | "claim" | "claim-show-detail" | "release" | "escalate" | "cancel" | "hold";
2993
+ label: string;
2994
2994
  code?: string | undefined;
2995
2995
  confirm?: {
2996
2996
  prompt: string;
@@ -3041,8 +3041,8 @@ export declare const upsertScanRuleSchema: z.ZodObject<{
3041
3041
  } | undefined;
3042
3042
  requireActingIdentity?: boolean | undefined;
3043
3043
  }, {
3044
- label: string;
3045
3044
  verb: "resolve" | "show-detail" | "claim" | "claim-show-detail" | "release" | "escalate" | "cancel" | "hold";
3045
+ label: string;
3046
3046
  code?: string | undefined;
3047
3047
  confirm?: {
3048
3048
  prompt: string;
@@ -3148,6 +3148,7 @@ export declare const upsertScanRuleSchema: z.ZodObject<{
3148
3148
  markdown: string;
3149
3149
  }>>;
3150
3150
  }, "strip", z.ZodTypeAny, {
3151
+ verb: "resolve" | "show-detail" | "show-list" | "claim" | "claim-show-detail" | "release" | "escalate" | "cancel" | "accumulate" | "present" | "hold" | "fill";
3151
3152
  query: {
3152
3153
  status?: "pending" | "resolved" | "cancelled" | undefined;
3153
3154
  roles?: string[] | undefined;
@@ -3156,15 +3157,14 @@ export declare const upsertScanRuleSchema: z.ZodObject<{
3156
3157
  subtypes?: string[] | undefined;
3157
3158
  availability?: "available" | "claimed" | "mine" | "any" | undefined;
3158
3159
  };
3159
- verb: "resolve" | "show-detail" | "show-list" | "claim" | "claim-show-detail" | "release" | "escalate" | "cancel" | "accumulate" | "present" | "hold" | "fill";
3160
3160
  subject?: {
3161
3161
  schemes: number[];
3162
3162
  facets?: Record<string, string | number | boolean> | undefined;
3163
3163
  claimedByOther?: "refuse" | "allow" | undefined;
3164
3164
  } | undefined;
3165
3165
  choices?: {
3166
- label: string;
3167
3166
  verb: "resolve" | "show-detail" | "claim" | "claim-show-detail" | "release" | "escalate" | "cancel" | "hold";
3167
+ label: string;
3168
3168
  code?: string | undefined;
3169
3169
  confirm?: {
3170
3170
  prompt: string;
@@ -3282,6 +3282,7 @@ export declare const upsertScanRuleSchema: z.ZodObject<{
3282
3282
  }[] | undefined;
3283
3283
  autoSelectSingle?: boolean | undefined;
3284
3284
  }, {
3285
+ verb: "resolve" | "show-detail" | "show-list" | "claim" | "claim-show-detail" | "release" | "escalate" | "cancel" | "accumulate" | "present" | "hold" | "fill";
3285
3286
  query: {
3286
3287
  status?: "pending" | "resolved" | "cancelled" | undefined;
3287
3288
  roles?: string[] | undefined;
@@ -3290,15 +3291,14 @@ export declare const upsertScanRuleSchema: z.ZodObject<{
3290
3291
  subtypes?: string[] | undefined;
3291
3292
  availability?: "available" | "claimed" | "mine" | "any" | undefined;
3292
3293
  };
3293
- verb: "resolve" | "show-detail" | "show-list" | "claim" | "claim-show-detail" | "release" | "escalate" | "cancel" | "accumulate" | "present" | "hold" | "fill";
3294
3294
  subject?: {
3295
3295
  schemes: number[];
3296
3296
  facets?: Record<string, string | number | boolean> | undefined;
3297
3297
  claimedByOther?: "refuse" | "allow" | undefined;
3298
3298
  } | undefined;
3299
3299
  choices?: {
3300
- label: string;
3301
3300
  verb: "resolve" | "show-detail" | "claim" | "claim-show-detail" | "release" | "escalate" | "cancel" | "hold";
3301
+ label: string;
3302
3302
  code?: string | undefined;
3303
3303
  confirm?: {
3304
3304
  prompt: string;
@@ -3442,6 +3442,7 @@ export declare const upsertScanRuleSchema: z.ZodObject<{
3442
3442
  category: string;
3443
3443
  scheme_version: number;
3444
3444
  steps: {
3445
+ verb: "resolve" | "show-detail" | "show-list" | "claim" | "claim-show-detail" | "release" | "escalate" | "cancel" | "accumulate" | "present" | "hold" | "fill";
3445
3446
  query: {
3446
3447
  status?: "pending" | "resolved" | "cancelled" | undefined;
3447
3448
  roles?: string[] | undefined;
@@ -3450,15 +3451,14 @@ export declare const upsertScanRuleSchema: z.ZodObject<{
3450
3451
  subtypes?: string[] | undefined;
3451
3452
  availability?: "available" | "claimed" | "mine" | "any" | undefined;
3452
3453
  };
3453
- verb: "resolve" | "show-detail" | "show-list" | "claim" | "claim-show-detail" | "release" | "escalate" | "cancel" | "accumulate" | "present" | "hold" | "fill";
3454
3454
  subject?: {
3455
3455
  schemes: number[];
3456
3456
  facets?: Record<string, string | number | boolean> | undefined;
3457
3457
  claimedByOther?: "refuse" | "allow" | undefined;
3458
3458
  } | undefined;
3459
3459
  choices?: {
3460
- label: string;
3461
3460
  verb: "resolve" | "show-detail" | "claim" | "claim-show-detail" | "release" | "escalate" | "cancel" | "hold";
3461
+ label: string;
3462
3462
  code?: string | undefined;
3463
3463
  confirm?: {
3464
3464
  prompt: string;
@@ -3590,6 +3590,7 @@ export declare const upsertScanRuleSchema: z.ZodObject<{
3590
3590
  category: string;
3591
3591
  scheme_version: number;
3592
3592
  steps: {
3593
+ verb: "resolve" | "show-detail" | "show-list" | "claim" | "claim-show-detail" | "release" | "escalate" | "cancel" | "accumulate" | "present" | "hold" | "fill";
3593
3594
  query: {
3594
3595
  status?: "pending" | "resolved" | "cancelled" | undefined;
3595
3596
  roles?: string[] | undefined;
@@ -3598,15 +3599,14 @@ export declare const upsertScanRuleSchema: z.ZodObject<{
3598
3599
  subtypes?: string[] | undefined;
3599
3600
  availability?: "available" | "claimed" | "mine" | "any" | undefined;
3600
3601
  };
3601
- verb: "resolve" | "show-detail" | "show-list" | "claim" | "claim-show-detail" | "release" | "escalate" | "cancel" | "accumulate" | "present" | "hold" | "fill";
3602
3602
  subject?: {
3603
3603
  schemes: number[];
3604
3604
  facets?: Record<string, string | number | boolean> | undefined;
3605
3605
  claimedByOther?: "refuse" | "allow" | undefined;
3606
3606
  } | undefined;
3607
3607
  choices?: {
3608
- label: string;
3609
3608
  verb: "resolve" | "show-detail" | "claim" | "claim-show-detail" | "release" | "escalate" | "cancel" | "hold";
3609
+ label: string;
3610
3610
  code?: string | undefined;
3611
3611
  confirm?: {
3612
3612
  prompt: string;
@@ -11,8 +11,8 @@ export declare const escalateSchema: z.ZodObject<{
11
11
  role: string;
12
12
  subtype: string;
13
13
  type: string;
14
- priority: number;
15
14
  message: string;
15
+ priority: number;
16
16
  schema_version?: number | undefined;
17
17
  data?: Record<string, any> | undefined;
18
18
  }, {
@@ -69,12 +69,12 @@ export declare const resolveBatchItemSchema: z.ZodObject<{
69
69
  item_key: z.ZodString;
70
70
  payload: z.ZodRecord<z.ZodString, z.ZodAny>;
71
71
  }, "strip", z.ZodTypeAny, {
72
- item_key: string;
73
72
  payload: Record<string, any>;
73
+ item_key: string;
74
74
  escalation_id: string;
75
75
  }, {
76
- item_key: string;
77
76
  payload: Record<string, any>;
77
+ item_key: string;
78
78
  escalation_id: string;
79
79
  }>;
80
80
  export declare const accumulateItemSchema: z.ZodObject<{
@@ -91,14 +91,14 @@ export declare const accumulateItemSchema: z.ZodObject<{
91
91
  key?: string | undefined;
92
92
  value?: string | undefined;
93
93
  id?: string | undefined;
94
- signalKey?: string | undefined;
95
94
  payload?: Record<string, any> | undefined;
95
+ signalKey?: string | undefined;
96
96
  }, {
97
97
  key?: string | undefined;
98
98
  value?: string | undefined;
99
99
  id?: string | undefined;
100
- signalKey?: string | undefined;
101
100
  payload?: Record<string, any> | undefined;
101
+ signalKey?: string | undefined;
102
102
  }>>;
103
103
  }, "strip", z.ZodTypeAny, {
104
104
  item_key: string;
@@ -108,8 +108,8 @@ export declare const accumulateItemSchema: z.ZodObject<{
108
108
  key?: string | undefined;
109
109
  value?: string | undefined;
110
110
  id?: string | undefined;
111
- signalKey?: string | undefined;
112
111
  payload?: Record<string, any> | undefined;
112
+ signalKey?: string | undefined;
113
113
  } | undefined;
114
114
  }, {
115
115
  item_key: string;
@@ -119,8 +119,8 @@ export declare const accumulateItemSchema: z.ZodObject<{
119
119
  key?: string | undefined;
120
120
  value?: string | undefined;
121
121
  id?: string | undefined;
122
- signalKey?: string | undefined;
123
122
  payload?: Record<string, any> | undefined;
123
+ signalKey?: string | undefined;
124
124
  } | undefined;
125
125
  }>;
126
126
  export declare const removeItemSchema: z.ZodObject<{
@@ -0,0 +1,35 @@
1
+ import { z } from 'zod';
2
+ export declare const listMachineLinesSchema: {
3
+ q: z.ZodOptional<z.ZodString>;
4
+ site: z.ZodOptional<z.ZodString>;
5
+ attention: z.ZodOptional<z.ZodBoolean>;
6
+ sort: z.ZodOptional<z.ZodEnum<["attention", "site", "updated"]>>;
7
+ limit: z.ZodOptional<z.ZodNumber>;
8
+ offset: z.ZodOptional<z.ZodNumber>;
9
+ };
10
+ export declare const getMachineLineSchema: {
11
+ siteId: z.ZodString;
12
+ lineId: z.ZodString;
13
+ };
14
+ export declare const inspectMachineMessageSchema: {
15
+ topic: z.ZodString;
16
+ payload: z.ZodOptional<z.ZodAny>;
17
+ retained: z.ZodOptional<z.ZodBoolean>;
18
+ siteId: z.ZodString;
19
+ lineId: z.ZodString;
20
+ };
21
+ export declare const sendMachineCommandSchema: {
22
+ machineId: z.ZodString;
23
+ op: z.ZodString;
24
+ args: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
25
+ siteId: z.ZodString;
26
+ lineId: z.ZodString;
27
+ };
28
+ export declare const declareMachineLineSchema: {
29
+ definition: z.ZodRecord<z.ZodString, z.ZodAny>;
30
+ version: z.ZodOptional<z.ZodNumber>;
31
+ };
32
+ export declare const retireMachineLineSchema: {
33
+ siteId: z.ZodString;
34
+ lineId: z.ZodString;
35
+ };
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.retireMachineLineSchema = exports.declareMachineLineSchema = exports.sendMachineCommandSchema = exports.inspectMachineMessageSchema = exports.getMachineLineSchema = exports.listMachineLinesSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ /** Zod input schemas for the machines MCP server; the manifest mirrors them as JSON schema. */
6
+ const siteLine = {
7
+ siteId: zod_1.z.string().min(1).describe('Site id'),
8
+ lineId: zod_1.z.string().min(1).describe('Line id'),
9
+ };
10
+ exports.listMachineLinesSchema = {
11
+ q: zod_1.z.string().optional().describe('Search site, line, machine ids, processes, roles and addresses'),
12
+ site: zod_1.z.string().optional().describe('Only this site'),
13
+ attention: zod_1.z.boolean().optional().describe('Only lines with an offline machine, an active alarm or a row waiting on a person'),
14
+ sort: zod_1.z.enum(['attention', 'site', 'updated']).optional().describe('attention first (default), site, or recently changed'),
15
+ limit: zod_1.z.number().int().min(1).max(200).optional(),
16
+ offset: zod_1.z.number().int().min(0).optional(),
17
+ };
18
+ exports.getMachineLineSchema = { ...siteLine };
19
+ exports.inspectMachineMessageSchema = {
20
+ ...siteLine,
21
+ topic: zod_1.z.string().min(1).describe('The MQTT topic the message would arrive on'),
22
+ payload: zod_1.z.any().optional().describe('The message body: an object is serialized as JSON, a string passes through'),
23
+ retained: zod_1.z.boolean().optional().describe('Whether the broker would deliver it as retained'),
24
+ };
25
+ exports.sendMachineCommandSchema = {
26
+ ...siteLine,
27
+ machineId: zod_1.z.string().min(1).describe('The machine on the line'),
28
+ op: zod_1.z.string().min(1).describe('A control op, snapshot, or an op the line\'s codec declares'),
29
+ args: zod_1.z.record(zod_1.z.any()).optional().describe('Arguments the op takes, such as jobId or recipe'),
30
+ };
31
+ exports.declareMachineLineSchema = {
32
+ definition: zod_1.z.record(zod_1.z.any()).describe('The line definition: siteId, lineId, machines in route order (machineId, process, cycleSec), roles, addressing'),
33
+ version: zod_1.z.number().int().min(1).optional().describe('The version the row is expected to be at; a mismatch is a conflict'),
34
+ };
35
+ exports.retireMachineLineSchema = { ...siteLine };