@hotmeshio/long-tail 0.1.6 → 0.1.8

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 (384) hide show
  1. package/README.md +47 -5
  2. package/build/api/auth.d.ts +16 -0
  3. package/build/api/auth.js +53 -0
  4. package/build/api/bot-accounts.d.ts +137 -0
  5. package/build/api/bot-accounts.js +302 -0
  6. package/build/api/controlplane.d.ts +68 -0
  7. package/build/api/controlplane.js +158 -0
  8. package/build/api/dba.d.ts +42 -0
  9. package/build/api/dba.js +95 -0
  10. package/build/api/escalations.d.ts +271 -0
  11. package/build/api/escalations.js +892 -0
  12. package/build/api/exports.d.ts +90 -0
  13. package/build/api/exports.js +204 -0
  14. package/build/api/index.d.ts +18 -0
  15. package/build/api/index.js +54 -0
  16. package/build/api/insight.d.ts +86 -0
  17. package/build/api/insight.js +147 -0
  18. package/build/api/maintenance.d.ts +22 -0
  19. package/build/api/maintenance.js +43 -0
  20. package/build/api/mcp-runs.d.ts +43 -0
  21. package/build/api/mcp-runs.js +89 -0
  22. package/build/api/mcp.d.ts +160 -0
  23. package/build/api/mcp.js +320 -0
  24. package/build/api/namespaces.d.ts +20 -0
  25. package/build/{routes/escalations/helpers.js → api/namespaces.js} +35 -10
  26. package/build/api/roles.d.ts +88 -0
  27. package/build/api/roles.js +217 -0
  28. package/build/api/settings.d.ts +10 -0
  29. package/build/api/settings.js +43 -0
  30. package/build/api/tasks.d.ts +70 -0
  31. package/build/api/tasks.js +139 -0
  32. package/build/api/users.d.ts +115 -0
  33. package/build/api/users.js +228 -0
  34. package/build/api/workflow-sets.d.ts +77 -0
  35. package/build/api/workflow-sets.js +170 -0
  36. package/build/api/workflows.d.ts +158 -0
  37. package/build/api/workflows.js +407 -0
  38. package/build/api/yaml-workflows.d.ts +282 -0
  39. package/build/api/yaml-workflows.js +751 -0
  40. package/build/examples/types/envelopes.d.ts +27 -0
  41. package/build/examples/types/index.d.ts +1 -1
  42. package/build/examples/workers.js +8 -0
  43. package/build/examples/workflows/assembly-line/activities.d.ts +28 -0
  44. package/build/examples/workflows/assembly-line/activities.js +53 -0
  45. package/build/examples/workflows/assembly-line/index.d.ts +17 -0
  46. package/build/examples/workflows/assembly-line/index.js +60 -0
  47. package/build/examples/workflows/assembly-line/iterator.d.ts +12 -0
  48. package/build/examples/workflows/assembly-line/iterator.js +54 -0
  49. package/build/examples/workflows/assembly-line/reverter.d.ts +18 -0
  50. package/build/examples/workflows/assembly-line/reverter.js +89 -0
  51. package/build/examples/workflows/assembly-line/types.d.ts +25 -0
  52. package/build/examples/workflows/assembly-line/types.js +8 -0
  53. package/build/examples/workflows/assembly-line/worker.d.ts +13 -0
  54. package/build/examples/workflows/assembly-line/worker.js +81 -0
  55. package/build/index.d.ts +4 -0
  56. package/build/index.js +6 -1
  57. package/build/lib/db/schemas/004_workflow_sets.sql +29 -0
  58. package/build/lib/db/schemas/005_unique_graph_topic.sql +7 -0
  59. package/build/lib/db/schemas/011_system_workflow_configs.sql +7 -0
  60. package/build/lib/events/callback.d.ts +41 -0
  61. package/build/lib/events/callback.js +98 -0
  62. package/build/modules/config.js +1 -1
  63. package/build/routes/auth.js +37 -36
  64. package/build/routes/bot-accounts.js +34 -164
  65. package/build/routes/controlplane.js +20 -60
  66. package/build/routes/dba.js +18 -28
  67. package/build/routes/escalations/bulk.js +17 -192
  68. package/build/routes/escalations/list.js +51 -75
  69. package/build/routes/escalations/resolve.js +3 -193
  70. package/build/routes/escalations/single.js +13 -122
  71. package/build/routes/exports.js +44 -95
  72. package/build/routes/index.js +2 -0
  73. package/build/routes/insight.js +46 -88
  74. package/build/routes/maintenance.js +41 -17
  75. package/build/routes/mcp-runs.js +52 -60
  76. package/build/routes/mcp.js +49 -177
  77. package/build/routes/namespaces.js +9 -20
  78. package/build/routes/roles.js +23 -97
  79. package/build/routes/settings.js +37 -25
  80. package/build/routes/tasks.js +28 -64
  81. package/build/routes/users.js +24 -113
  82. package/build/routes/workflow-sets.d.ts +2 -0
  83. package/build/routes/workflow-sets.js +98 -0
  84. package/build/routes/workflows/config.js +23 -57
  85. package/build/routes/workflows/discovery.js +11 -85
  86. package/build/routes/workflows/invocation.js +28 -90
  87. package/build/routes/yaml-workflows/cron.js +12 -61
  88. package/build/routes/yaml-workflows/crud.js +30 -223
  89. package/build/routes/yaml-workflows/deployment.js +15 -115
  90. package/build/routes/yaml-workflows/versions.js +20 -58
  91. package/build/sdk/index.d.ts +338 -0
  92. package/build/sdk/index.js +299 -0
  93. package/build/services/controlplane/index.d.ts +1 -2
  94. package/build/services/controlplane/index.js +3 -3
  95. package/build/services/controlplane/sql.d.ts +2 -2
  96. package/build/services/controlplane/sql.js +4 -5
  97. package/build/services/controlplane/types.d.ts +1 -0
  98. package/build/services/export/index.js +6 -1
  99. package/build/services/hotmesh-utils.js +2 -4
  100. package/build/services/insight/index.d.ts +7 -0
  101. package/build/services/insight/index.js +30 -0
  102. package/build/services/mcp/client/tools.js +13 -1
  103. package/build/services/mcp-runs/sql.js +1 -1
  104. package/build/services/workflow-invocation.d.ts +15 -2
  105. package/build/services/workflow-invocation.js +11 -6
  106. package/build/services/workflow-sets/db.d.ts +16 -0
  107. package/build/services/workflow-sets/db.js +78 -0
  108. package/build/services/workflow-sets/index.d.ts +1 -0
  109. package/build/services/workflow-sets/index.js +11 -0
  110. package/build/services/workflow-sets/sql.d.ts +6 -0
  111. package/build/services/workflow-sets/sql.js +24 -0
  112. package/build/services/yaml-workflow/db-utils.d.ts +1 -0
  113. package/build/services/yaml-workflow/db-utils.js +4 -0
  114. package/build/services/yaml-workflow/db.d.ts +5 -0
  115. package/build/services/yaml-workflow/db.js +17 -0
  116. package/build/services/yaml-workflow/pipeline/build/wiring.js +14 -1
  117. package/build/services/yaml-workflow/pipeline/prompts.d.ts +1 -1
  118. package/build/services/yaml-workflow/pipeline/prompts.js +1 -1
  119. package/build/services/yaml-workflow/sql.d.ts +2 -1
  120. package/build/services/yaml-workflow/sql.js +8 -3
  121. package/build/services/yaml-workflow/types.d.ts +3 -0
  122. package/build/services/yaml-workflow/workers/callbacks.js +7 -1
  123. package/build/services/yaml-workflow/workers/register.js +7 -0
  124. package/build/start/adapters.js +4 -0
  125. package/build/system/index.js +6 -0
  126. package/build/system/mcp-servers/knowledge.js +1 -1
  127. package/build/system/seed/server-definitions.js +2 -1
  128. package/build/system/workflows/mcp-workflow-builder/activities/index.d.ts +1 -1
  129. package/build/system/workflows/mcp-workflow-builder/activities/index.js +2 -1
  130. package/build/system/workflows/mcp-workflow-builder/activities/tool-loader.d.ts +6 -0
  131. package/build/system/workflows/mcp-workflow-builder/activities/tool-loader.js +26 -0
  132. package/build/system/workflows/mcp-workflow-builder/index.js +26 -2
  133. package/build/system/workflows/mcp-workflow-builder/prompts.js +104 -35
  134. package/build/system/workflows/mcp-workflow-planner/activities/analyze.d.ts +11 -0
  135. package/build/system/workflows/mcp-workflow-planner/activities/analyze.js +36 -0
  136. package/build/system/workflows/mcp-workflow-planner/activities/index.d.ts +3 -0
  137. package/build/system/workflows/mcp-workflow-planner/activities/index.js +12 -0
  138. package/build/system/workflows/mcp-workflow-planner/activities/persist.d.ts +19 -0
  139. package/build/system/workflows/mcp-workflow-planner/activities/persist.js +55 -0
  140. package/build/system/workflows/mcp-workflow-planner/activities/plan.d.ts +10 -0
  141. package/build/system/workflows/mcp-workflow-planner/activities/plan.js +43 -0
  142. package/build/system/workflows/mcp-workflow-planner/index.d.ts +7 -0
  143. package/build/system/workflows/mcp-workflow-planner/index.js +152 -0
  144. package/build/system/workflows/mcp-workflow-planner/prompts.d.ts +7 -0
  145. package/build/system/workflows/mcp-workflow-planner/prompts.js +77 -0
  146. package/build/tsconfig.tsbuildinfo +1 -1
  147. package/build/types/index.d.ts +1 -0
  148. package/build/types/sdk.d.ts +27 -0
  149. package/build/types/sdk.js +2 -0
  150. package/build/types/workflow-set.d.ts +44 -0
  151. package/build/types/workflow-set.js +5 -0
  152. package/dashboard/dist/assets/{AdminDashboard-BXkKGkb5.js → AdminDashboard-B15jSEV2.js} +2 -2
  153. package/dashboard/dist/assets/{AdminDashboard-BXkKGkb5.js.map → AdminDashboard-B15jSEV2.js.map} +1 -1
  154. package/dashboard/dist/assets/{AvailableEscalationsPage-DcH592mc.js → AvailableEscalationsPage-0V2yvKak.js} +2 -2
  155. package/dashboard/dist/assets/{AvailableEscalationsPage-DcH592mc.js.map → AvailableEscalationsPage-0V2yvKak.js.map} +1 -1
  156. package/dashboard/dist/assets/BotPicker-B4UxHcek.js +2 -0
  157. package/dashboard/dist/assets/{BotPicker-A6LtzyuO.js.map → BotPicker-B4UxHcek.js.map} +1 -1
  158. package/dashboard/dist/assets/{CollapsibleSection-C7nL2_mv.js → CollapsibleSection-BBexNWVd.js} +2 -2
  159. package/dashboard/dist/assets/{CollapsibleSection-C7nL2_mv.js.map → CollapsibleSection-BBexNWVd.js.map} +1 -1
  160. package/dashboard/dist/assets/{ConfirmDeleteModal-CWFwJrSl.js → ConfirmDeleteModal-DlPDJSq_.js} +2 -2
  161. package/dashboard/dist/assets/{ConfirmDeleteModal-CWFwJrSl.js.map → ConfirmDeleteModal-DlPDJSq_.js.map} +1 -1
  162. package/dashboard/dist/assets/{CopyableId-DbZ5c3jh.js → CopyableId-BxHW1ahb.js} +2 -2
  163. package/dashboard/dist/assets/{CopyableId-DbZ5c3jh.js.map → CopyableId-BxHW1ahb.js.map} +1 -1
  164. package/dashboard/dist/assets/{CredentialsPage-ClWkmLPu.js → CredentialsPage-Bp_Y1Szk.js} +2 -2
  165. package/dashboard/dist/assets/{CredentialsPage-ClWkmLPu.js.map → CredentialsPage-Bp_Y1Szk.js.map} +1 -1
  166. package/dashboard/dist/assets/{CustomDurationPicker-CtH2hReF.js → CustomDurationPicker-ByBFqXSO.js} +2 -2
  167. package/dashboard/dist/assets/{CustomDurationPicker-CtH2hReF.js.map → CustomDurationPicker-ByBFqXSO.js.map} +1 -1
  168. package/dashboard/dist/assets/{DataTable-CM5ZcpPi.js → DataTable-DyIXg-tQ.js} +2 -2
  169. package/dashboard/dist/assets/{DataTable-CM5ZcpPi.js.map → DataTable-DyIXg-tQ.js.map} +1 -1
  170. package/dashboard/dist/assets/{ElapsedCell-CwqavyeC.js → ElapsedCell-BgnA0qpS.js} +2 -2
  171. package/dashboard/dist/assets/{ElapsedCell-CwqavyeC.js.map → ElapsedCell-BgnA0qpS.js.map} +1 -1
  172. package/dashboard/dist/assets/{EmptyState-BBn78pmm.js → EmptyState-DlMImvgm.js} +2 -2
  173. package/dashboard/dist/assets/{EmptyState-BBn78pmm.js.map → EmptyState-DlMImvgm.js.map} +1 -1
  174. package/dashboard/dist/assets/{EscalationsOverview-BcJ2E3X7.js → EscalationsOverview-D90kdfw1.js} +2 -2
  175. package/dashboard/dist/assets/{EscalationsOverview-BcJ2E3X7.js.map → EscalationsOverview-D90kdfw1.js.map} +1 -1
  176. package/dashboard/dist/assets/{EventTable-C1en_KZ0.js → EventTable-BNxtlgNz.js} +2 -2
  177. package/dashboard/dist/assets/{EventTable-C1en_KZ0.js.map → EventTable-BNxtlgNz.js.map} +1 -1
  178. package/dashboard/dist/assets/{FilterBar-CZTlrLQT.js → FilterBar-BTiaAhCx.js} +2 -2
  179. package/dashboard/dist/assets/{FilterBar-CZTlrLQT.js.map → FilterBar-BTiaAhCx.js.map} +1 -1
  180. package/dashboard/dist/assets/{ListToolbar-Cdbsapig.js → ListToolbar-BUcagSCn.js} +2 -2
  181. package/dashboard/dist/assets/{ListToolbar-Cdbsapig.js.map → ListToolbar-BUcagSCn.js.map} +1 -1
  182. package/dashboard/dist/assets/{McpOverview-CSpEJxKa.js → McpOverview-B-tCvz8C.js} +2 -2
  183. package/dashboard/dist/assets/{McpOverview-CSpEJxKa.js.map → McpOverview-B-tCvz8C.js.map} +1 -1
  184. package/dashboard/dist/assets/McpQueryDetailPage-DPlF1wYb.js +5 -0
  185. package/dashboard/dist/assets/McpQueryDetailPage-DPlF1wYb.js.map +1 -0
  186. package/dashboard/dist/assets/McpQueryPage-Bz7AdcfR.js +2 -0
  187. package/dashboard/dist/assets/McpQueryPage-Bz7AdcfR.js.map +1 -0
  188. package/dashboard/dist/assets/{McpRunDetailPage-9xdxgG4d.js → McpRunDetailPage-Di_qpL2V.js} +2 -2
  189. package/dashboard/dist/assets/{McpRunDetailPage-9xdxgG4d.js.map → McpRunDetailPage-Di_qpL2V.js.map} +1 -1
  190. package/dashboard/dist/assets/{McpRunsPage-wWLqHsd4.js → McpRunsPage-BBgybBEa.js} +2 -2
  191. package/dashboard/dist/assets/{McpRunsPage-wWLqHsd4.js.map → McpRunsPage-BBgybBEa.js.map} +1 -1
  192. package/dashboard/dist/assets/{Modal-kB_P7ZOr.js → Modal-CaJ0gTEa.js} +2 -2
  193. package/dashboard/dist/assets/{Modal-kB_P7ZOr.js.map → Modal-CaJ0gTEa.js.map} +1 -1
  194. package/dashboard/dist/assets/OperatorDashboard-DDfMmrmR.js +2 -0
  195. package/dashboard/dist/assets/{OperatorDashboard-jc0vrgDI.js.map → OperatorDashboard-DDfMmrmR.js.map} +1 -1
  196. package/dashboard/dist/assets/{PageHeader-NkOeBR05.js → PageHeader-C5D-G5rp.js} +2 -2
  197. package/dashboard/dist/assets/{PageHeader-NkOeBR05.js.map → PageHeader-C5D-G5rp.js.map} +1 -1
  198. package/dashboard/dist/assets/{PageHeaderWithStats-ywNhrmFK.js → PageHeaderWithStats-DCa2eZh2.js} +2 -2
  199. package/dashboard/dist/assets/{PageHeaderWithStats-ywNhrmFK.js.map → PageHeaderWithStats-DCa2eZh2.js.map} +1 -1
  200. package/dashboard/dist/assets/{PriorityBadge-B2MQbSxy.js → PriorityBadge-DTHq6OUZ.js} +2 -2
  201. package/dashboard/dist/assets/{PriorityBadge-B2MQbSxy.js.map → PriorityBadge-DTHq6OUZ.js.map} +1 -1
  202. package/dashboard/dist/assets/{ProcessDetailPage-B7z7IdqE.js → ProcessDetailPage-fC4dhrd0.js} +2 -2
  203. package/dashboard/dist/assets/{ProcessDetailPage-B7z7IdqE.js.map → ProcessDetailPage-fC4dhrd0.js.map} +1 -1
  204. package/dashboard/dist/assets/{ProcessesListPage-C-uHadO6.js → ProcessesListPage-CL2MY8uD.js} +2 -2
  205. package/dashboard/dist/assets/{ProcessesListPage-C-uHadO6.js.map → ProcessesListPage-CL2MY8uD.js.map} +1 -1
  206. package/dashboard/dist/assets/{RolePill-C1dgC-fK.js → RolePill-kgKPANly.js} +2 -2
  207. package/dashboard/dist/assets/{RolePill-C1dgC-fK.js.map → RolePill-kgKPANly.js.map} +1 -1
  208. package/dashboard/dist/assets/{RolesPage-BSxrD1vm.js → RolesPage-Be2lXTHD.js} +2 -2
  209. package/dashboard/dist/assets/{RolesPage-BSxrD1vm.js.map → RolesPage-Be2lXTHD.js.map} +1 -1
  210. package/dashboard/dist/assets/{RowActions-lYaHGI-v.js → RowActions-DIzJCwqR.js} +2 -2
  211. package/dashboard/dist/assets/{RowActions-lYaHGI-v.js.map → RowActions-DIzJCwqR.js.map} +1 -1
  212. package/dashboard/dist/assets/{StatCard-v2TiITVr.js → StatCard-CRi2Jy6t.js} +2 -2
  213. package/dashboard/dist/assets/{StatCard-v2TiITVr.js.map → StatCard-CRi2Jy6t.js.map} +1 -1
  214. package/dashboard/dist/assets/{StatusBadge-DWlxevgG.js → StatusBadge-BETI_8Mr.js} +2 -2
  215. package/dashboard/dist/assets/{StatusBadge-DWlxevgG.js.map → StatusBadge-BETI_8Mr.js.map} +1 -1
  216. package/dashboard/dist/assets/{StepIndicator-CRM4ft28.js → StepIndicator-DjpMqCjz.js} +2 -2
  217. package/dashboard/dist/assets/{StepIndicator-CRM4ft28.js.map → StepIndicator-DjpMqCjz.js.map} +1 -1
  218. package/dashboard/dist/assets/{StickyPagination-CF0EToEU.js → StickyPagination-BZbExQ9t.js} +2 -2
  219. package/dashboard/dist/assets/{StickyPagination-CF0EToEU.js.map → StickyPagination-BZbExQ9t.js.map} +1 -1
  220. package/dashboard/dist/assets/{SwimlaneTimeline-CNlj7fgg.js → SwimlaneTimeline-DZthQyhR.js} +2 -2
  221. package/dashboard/dist/assets/{SwimlaneTimeline-CNlj7fgg.js.map → SwimlaneTimeline-DZthQyhR.js.map} +1 -1
  222. package/dashboard/dist/assets/{TagInput-CH8qMGhC.js → TagInput-CukbOfYn.js} +2 -2
  223. package/dashboard/dist/assets/{TagInput-CH8qMGhC.js.map → TagInput-CukbOfYn.js.map} +1 -1
  224. package/dashboard/dist/assets/{TaskDetailPage-CdWo-6mu.js → TaskDetailPage-CIZHIKo9.js} +2 -2
  225. package/dashboard/dist/assets/{TaskDetailPage-CdWo-6mu.js.map → TaskDetailPage-CIZHIKo9.js.map} +1 -1
  226. package/dashboard/dist/assets/{TaskQueuePill-BPj4ogVG.js → TaskQueuePill-Q7DGoysj.js} +2 -2
  227. package/dashboard/dist/assets/{TaskQueuePill-BPj4ogVG.js.map → TaskQueuePill-Q7DGoysj.js.map} +1 -1
  228. package/dashboard/dist/assets/{TasksListPage-CtRkMpKU.js → TasksListPage-CsC9wjb0.js} +2 -2
  229. package/dashboard/dist/assets/{TasksListPage-CtRkMpKU.js.map → TasksListPage-CsC9wjb0.js.map} +1 -1
  230. package/dashboard/dist/assets/{TimeAgo-Di1a3X5P.js → TimeAgo-BcOOnJeH.js} +2 -2
  231. package/dashboard/dist/assets/{TimeAgo-Di1a3X5P.js.map → TimeAgo-BcOOnJeH.js.map} +1 -1
  232. package/dashboard/dist/assets/{TimestampCell-CqrXql-S.js → TimestampCell-CEMapYDQ.js} +2 -2
  233. package/dashboard/dist/assets/{TimestampCell-CqrXql-S.js.map → TimestampCell-CEMapYDQ.js.map} +1 -1
  234. package/dashboard/dist/assets/{UserName-BUFYCnRa.js → UserName-BHoN7iRL.js} +2 -2
  235. package/dashboard/dist/assets/{UserName-BUFYCnRa.js.map → UserName-BHoN7iRL.js.map} +1 -1
  236. package/dashboard/dist/assets/{WorkflowExecutionPage-25iusMml.js → WorkflowExecutionPage-DawKl1LT.js} +2 -2
  237. package/dashboard/dist/assets/{WorkflowExecutionPage-25iusMml.js.map → WorkflowExecutionPage-DawKl1LT.js.map} +1 -1
  238. package/dashboard/dist/assets/WorkflowPill-CP84Vqeg.js +2 -0
  239. package/dashboard/dist/assets/{WorkflowPill-DPKOcbf4.js.map → WorkflowPill-CP84Vqeg.js.map} +1 -1
  240. package/dashboard/dist/assets/{WorkflowsDashboard-BgxslssH.js → WorkflowsDashboard-QrvVFxtQ.js} +2 -2
  241. package/dashboard/dist/assets/{WorkflowsDashboard-BgxslssH.js.map → WorkflowsDashboard-QrvVFxtQ.js.map} +1 -1
  242. package/dashboard/dist/assets/{WorkflowsOverview-Doe5L-Re.js → WorkflowsOverview-DuhAi_OY.js} +2 -2
  243. package/dashboard/dist/assets/{WorkflowsOverview-Doe5L-Re.js.map → WorkflowsOverview-DuhAi_OY.js.map} +1 -1
  244. package/dashboard/dist/assets/YamlWorkflowsPage-Dc9xw82a.js +2 -0
  245. package/dashboard/dist/assets/YamlWorkflowsPage-Dc9xw82a.js.map +1 -0
  246. package/dashboard/dist/assets/{bots-Bi2_O1Ts.js → bots-Dny-rmmI.js} +2 -2
  247. package/dashboard/dist/assets/{bots-Bi2_O1Ts.js.map → bots-Dny-rmmI.js.map} +1 -1
  248. package/dashboard/dist/assets/{escalation-Ck1KlLkT.js → escalation-CV0sKNH5.js} +2 -2
  249. package/dashboard/dist/assets/{escalation-Ck1KlLkT.js.map → escalation-CV0sKNH5.js.map} +1 -1
  250. package/dashboard/dist/assets/{escalation-columns-ohDsj2eJ.js → escalation-columns-30CKyoWI.js} +2 -2
  251. package/dashboard/dist/assets/{escalation-columns-ohDsj2eJ.js.map → escalation-columns-30CKyoWI.js.map} +1 -1
  252. package/dashboard/dist/assets/{helpers-BoD2SgUY.js → helpers-C1-30CzH.js} +2 -2
  253. package/dashboard/dist/assets/{helpers-BoD2SgUY.js.map → helpers-C1-30CzH.js.map} +1 -1
  254. package/dashboard/dist/assets/helpers-C1jaRD-d.js +2 -0
  255. package/dashboard/dist/assets/helpers-C1jaRD-d.js.map +1 -0
  256. package/dashboard/dist/assets/{index-FuohTtaM.js → index-BUVQ6wmy.js} +3 -3
  257. package/dashboard/dist/assets/{index-FuohTtaM.js.map → index-BUVQ6wmy.js.map} +1 -1
  258. package/dashboard/dist/assets/index-CxVB7F4X.js +2 -0
  259. package/dashboard/dist/assets/{index-Dk2Q51o0.js.map → index-CxVB7F4X.js.map} +1 -1
  260. package/dashboard/dist/assets/{index-BEtLIsML.js → index-D-oCWCAS.js} +2 -2
  261. package/dashboard/dist/assets/{index-BEtLIsML.js.map → index-D-oCWCAS.js.map} +1 -1
  262. package/dashboard/dist/assets/index-D0wPM3Ck.js +2 -0
  263. package/dashboard/dist/assets/{index-BpT-6WgJ.js.map → index-D0wPM3Ck.js.map} +1 -1
  264. package/dashboard/dist/assets/{index-Bn2xHDr8.js → index-DHgnkykj.js} +3 -3
  265. package/dashboard/dist/assets/{index-Bn2xHDr8.js.map → index-DHgnkykj.js.map} +1 -1
  266. package/dashboard/dist/assets/{index-D3NyVADW.js → index-D_aJBEAG.js} +2 -2
  267. package/dashboard/dist/assets/index-D_aJBEAG.js.map +1 -0
  268. package/dashboard/dist/assets/{index-PyCTS05D.css → index-DcIKW-cZ.css} +1 -1
  269. package/dashboard/dist/assets/{index-CZrJ09p-.js → index-Dd_U4mLm.js} +2 -2
  270. package/dashboard/dist/assets/{index-CZrJ09p-.js.map → index-Dd_U4mLm.js.map} +1 -1
  271. package/dashboard/dist/assets/{index-DYyLF-Qb.js → index-DnmZbNxk.js} +8 -8
  272. package/dashboard/dist/assets/index-DnmZbNxk.js.map +1 -0
  273. package/dashboard/dist/assets/index-_RBvi7s6.js +2 -0
  274. package/dashboard/dist/assets/{index-D7zYZOnH.js.map → index-_RBvi7s6.js.map} +1 -1
  275. package/dashboard/dist/assets/index-n7td8zgX.js +17 -0
  276. package/dashboard/dist/assets/{index-DOkHXmyf.js.map → index-n7td8zgX.js.map} +1 -1
  277. package/dashboard/dist/assets/{mcp-CJtYjA7A.js → mcp-CRFr4L9W.js} +2 -2
  278. package/dashboard/dist/assets/{mcp-CJtYjA7A.js.map → mcp-CRFr4L9W.js.map} +1 -1
  279. package/dashboard/dist/assets/mcp-query-DHY2mZBQ.js +2 -0
  280. package/dashboard/dist/assets/mcp-query-DHY2mZBQ.js.map +1 -0
  281. package/dashboard/dist/assets/{mcp-runs-DUWm9Z4V.js → mcp-runs-BqPHqwAO.js} +2 -2
  282. package/dashboard/dist/assets/{mcp-runs-DUWm9Z4V.js.map → mcp-runs-BqPHqwAO.js.map} +1 -1
  283. package/dashboard/dist/assets/{namespaces-BM5P2qmL.js → namespaces-TG1aIpo_.js} +2 -2
  284. package/dashboard/dist/assets/{namespaces-BM5P2qmL.js.map → namespaces-TG1aIpo_.js.map} +1 -1
  285. package/dashboard/dist/assets/{roles-lv0shpjJ.js → roles-DhhLTvXg.js} +2 -2
  286. package/dashboard/dist/assets/{roles-lv0shpjJ.js.map → roles-DhhLTvXg.js.map} +1 -1
  287. package/dashboard/dist/assets/{settings-Wlq92mRo.js → settings-D9MBzEeB.js} +2 -2
  288. package/dashboard/dist/assets/{settings-Wlq92mRo.js.map → settings-D9MBzEeB.js.map} +1 -1
  289. package/dashboard/dist/assets/{tasks-BFGm4PuE.js → tasks-BxmcZoev.js} +2 -2
  290. package/dashboard/dist/assets/{tasks-BFGm4PuE.js.map → tasks-BxmcZoev.js.map} +1 -1
  291. package/dashboard/dist/assets/{useEventHooks-DIE6ue4x.js → useEventHooks-BylecvvI.js} +2 -2
  292. package/dashboard/dist/assets/{useEventHooks-DIE6ue4x.js.map → useEventHooks-BylecvvI.js.map} +1 -1
  293. package/dashboard/dist/assets/{useYamlActivityEvents-DCwSO73t.js → useYamlActivityEvents-ocmj11e_.js} +2 -2
  294. package/dashboard/dist/assets/{useYamlActivityEvents-DCwSO73t.js.map → useYamlActivityEvents-ocmj11e_.js.map} +1 -1
  295. package/dashboard/dist/assets/{users-tA5-K0wA.js → users-Ce5r-JAv.js} +2 -2
  296. package/dashboard/dist/assets/{users-tA5-K0wA.js.map → users-Ce5r-JAv.js.map} +1 -1
  297. package/dashboard/dist/assets/{vendor-icons-BiIug1SK.js → vendor-icons-D1DdudfH.js} +93 -73
  298. package/dashboard/dist/assets/vendor-icons-D1DdudfH.js.map +1 -0
  299. package/dashboard/dist/assets/{workflows-CfLc15Wr.js → workflows-ykIeVbRJ.js} +2 -2
  300. package/dashboard/dist/assets/{workflows-CfLc15Wr.js.map → workflows-ykIeVbRJ.js.map} +1 -1
  301. package/dashboard/dist/assets/yaml-workflows-WypmKYht.js +2 -0
  302. package/dashboard/dist/assets/yaml-workflows-WypmKYht.js.map +1 -0
  303. package/dashboard/dist/index.html +3 -3
  304. package/docs/api/sdk/auth.md +27 -0
  305. package/docs/api/sdk/bot-accounts.md +243 -0
  306. package/docs/api/sdk/controlplane.md +103 -0
  307. package/docs/api/sdk/dba.md +52 -0
  308. package/docs/api/sdk/escalations.md +374 -0
  309. package/docs/api/sdk/events.md +68 -0
  310. package/docs/api/sdk/exports.md +124 -0
  311. package/docs/api/sdk/insight.md +112 -0
  312. package/docs/api/sdk/maintenance.md +54 -0
  313. package/docs/api/sdk/mcp-runs.md +71 -0
  314. package/docs/api/sdk/mcp.md +250 -0
  315. package/docs/api/sdk/namespaces.md +43 -0
  316. package/docs/api/sdk/roles.md +183 -0
  317. package/docs/api/sdk/settings.md +24 -0
  318. package/docs/api/sdk/tasks.md +120 -0
  319. package/docs/api/sdk/users.md +196 -0
  320. package/docs/api/sdk/workflow-sets.md +135 -0
  321. package/docs/api/sdk/workflows.md +271 -0
  322. package/docs/api/sdk/yaml-workflows.md +408 -0
  323. package/docs/events.md +28 -0
  324. package/docs/sdk.md +177 -0
  325. package/docs/story.md +157 -0
  326. package/package.json +3 -2
  327. package/build/routes/escalations/helpers.d.ts +0 -5
  328. package/build/routes/resolve.d.ts +0 -9
  329. package/build/routes/resolve.js +0 -19
  330. package/build/routes/yaml-workflows/helpers.d.ts +0 -2
  331. package/build/routes/yaml-workflows/helpers.js +0 -8
  332. package/dashboard/dist/assets/BotPicker-A6LtzyuO.js +0 -2
  333. package/dashboard/dist/assets/McpQueryDetailPage-DhqEI180.js +0 -5
  334. package/dashboard/dist/assets/McpQueryDetailPage-DhqEI180.js.map +0 -1
  335. package/dashboard/dist/assets/McpQueryPage-CIiVMlqo.js +0 -2
  336. package/dashboard/dist/assets/McpQueryPage-CIiVMlqo.js.map +0 -1
  337. package/dashboard/dist/assets/OperatorDashboard-jc0vrgDI.js +0 -2
  338. package/dashboard/dist/assets/RunAsSelector-CJDnyp93.js +0 -2
  339. package/dashboard/dist/assets/RunAsSelector-CJDnyp93.js.map +0 -1
  340. package/dashboard/dist/assets/WorkflowPill-DPKOcbf4.js +0 -2
  341. package/dashboard/dist/assets/YamlWorkflowsPage-BliAckJ6.js +0 -2
  342. package/dashboard/dist/assets/YamlWorkflowsPage-BliAckJ6.js.map +0 -1
  343. package/dashboard/dist/assets/index-BpT-6WgJ.js +0 -2
  344. package/dashboard/dist/assets/index-D3NyVADW.js.map +0 -1
  345. package/dashboard/dist/assets/index-D7zYZOnH.js +0 -2
  346. package/dashboard/dist/assets/index-DOkHXmyf.js +0 -17
  347. package/dashboard/dist/assets/index-DYyLF-Qb.js.map +0 -1
  348. package/dashboard/dist/assets/index-Dk2Q51o0.js +0 -2
  349. package/dashboard/dist/assets/mcp-query-jQJQrs_7.js +0 -2
  350. package/dashboard/dist/assets/mcp-query-jQJQrs_7.js.map +0 -1
  351. package/dashboard/dist/assets/vendor-icons-BiIug1SK.js.map +0 -1
  352. package/dashboard/dist/assets/yaml-workflows-D7JXNqbM.js +0 -2
  353. package/dashboard/dist/assets/yaml-workflows-D7JXNqbM.js.map +0 -1
  354. package/docs/img/01-login.png +0 -0
  355. package/docs/img/02-dashboard-home.png +0 -0
  356. package/docs/img/03-processes-list.png +0 -0
  357. package/docs/img/04-escalations-list.png +0 -0
  358. package/docs/img/05-mcp-servers.png +0 -0
  359. package/docs/img/06-mcp-pipelines.png +0 -0
  360. package/docs/img/07-workflows-list.png +0 -0
  361. package/docs/img/compilation/01-query-submit.png +0 -0
  362. package/docs/img/compilation/02-mcp-servers.png +0 -0
  363. package/docs/img/compilation/03-query-completed.png +0 -0
  364. package/docs/img/compilation/04-wizard-original.png +0 -0
  365. package/docs/img/compilation/05-wizard-timeline.png +0 -0
  366. package/docs/img/compilation/06-wizard-profile.png +0 -0
  367. package/docs/img/compilation/07-wizard-deploy.png +0 -0
  368. package/docs/img/compilation/08-wizard-test-modal.png +0 -0
  369. package/docs/img/compilation/09-wizard-test-compare.png +0 -0
  370. package/docs/img/compilation/10-wizard-verify.png +0 -0
  371. /package/docs/api/{dba.md → http/dba.md} +0 -0
  372. /package/docs/api/{escalations.md → http/escalations.md} +0 -0
  373. /package/docs/api/{exports.md → http/exports.md} +0 -0
  374. /package/docs/api/{maintenance.md → http/maintenance.md} +0 -0
  375. /package/docs/api/{mcp-runs.md → http/mcp-runs.md} +0 -0
  376. /package/docs/api/{mcp-servers.md → http/mcp-servers.md} +0 -0
  377. /package/docs/api/{namespaces.md → http/namespaces.md} +0 -0
  378. /package/docs/api/{roles.md → http/roles.md} +0 -0
  379. /package/docs/api/{service-accounts.md → http/service-accounts.md} +0 -0
  380. /package/docs/api/{settings.md → http/settings.md} +0 -0
  381. /package/docs/api/{tasks.md → http/tasks.md} +0 -0
  382. /package/docs/api/{users.md → http/users.md} +0 -0
  383. /package/docs/api/{workflows.md → http/workflows.md} +0 -0
  384. /package/docs/api/{yaml-workflows.md → http/yaml-workflows.md} +0 -0
@@ -24,11 +24,38 @@ export interface BasicEchoEnvelopeData {
24
24
  /** Duration to sleep before echoing (seconds). */
25
25
  sleepSeconds?: number;
26
26
  }
27
+ /** Assembly line — durable orchestrator with sequential human task queues. */
28
+ export interface AssemblyLineEnvelopeData {
29
+ /** Product name for the assembly run. */
30
+ productName: string;
31
+ /** Ordered stations the product passes through. */
32
+ stations: Array<{
33
+ stationName: string;
34
+ role: string;
35
+ instructions: string;
36
+ }>;
37
+ }
38
+ /** Step iterator — generic loop over data-driven steps with human escalations. */
39
+ export interface StepIteratorEnvelopeData {
40
+ /** Display name for this run. */
41
+ name: string;
42
+ /** Dynamic list of steps — each spawns a child workflow with an escalation. */
43
+ steps: Array<{
44
+ stationName: string;
45
+ role: string;
46
+ instructions: string;
47
+ }>;
48
+ }
49
+ /** Reverter — step loop with revert support (same shape as stepIterator). */
50
+ export type ReverterEnvelopeData = StepIteratorEnvelopeData;
27
51
  /** Map of invocable workflow type → its typed envelope data shape. */
28
52
  export type WorkflowEnvelopeMap = {
29
53
  reviewContent: ReviewContentEnvelopeData;
30
54
  kitchenSink: KitchenSinkEnvelopeData;
31
55
  basicEcho: BasicEchoEnvelopeData;
56
+ assemblyLine: AssemblyLineEnvelopeData;
57
+ stepIterator: StepIteratorEnvelopeData;
58
+ reverter: ReverterEnvelopeData;
32
59
  };
33
60
  /** All invocable workflow type names. */
34
61
  export type InvocableWorkflowType = keyof WorkflowEnvelopeMap;
@@ -5,6 +5,6 @@
5
5
  * Resolver types define the payload shape for resolving escalations.
6
6
  * Per-workflow types are re-exported for convenience.
7
7
  */
8
- export type { ReviewContentEnvelopeData, KitchenSinkEnvelopeData, BasicEchoEnvelopeData, WorkflowEnvelopeMap, InvocableWorkflowType, } from './envelopes';
8
+ export type { ReviewContentEnvelopeData, KitchenSinkEnvelopeData, BasicEchoEnvelopeData, AssemblyLineEnvelopeData, StepIteratorEnvelopeData, ReverterEnvelopeData, WorkflowEnvelopeMap, InvocableWorkflowType, } from './envelopes';
9
9
  export type { ResolverLTBlock, BaseResolverPayload, ReviewContentResolverPayload, } from './resolvers';
10
10
  export type { ReviewContentInput, ReviewAnalysis, ReviewContentReturnData, ReviewContentReturn, ReviewContentEscalationData, ReviewContentEscalation, } from '../workflows/review-content/types';
@@ -37,6 +37,10 @@ exports.exampleWorkers = void 0;
37
37
  const reviewContentWorkflow = __importStar(require("./workflows/review-content"));
38
38
  const kitchenSinkWorkflow = __importStar(require("./workflows/kitchen-sink"));
39
39
  const basicEchoWorkflow = __importStar(require("./workflows/basic-echo"));
40
+ const assemblyLineWorkflow = __importStar(require("./workflows/assembly-line"));
41
+ const workstationWorkflow = __importStar(require("./workflows/assembly-line/worker"));
42
+ const stepIteratorWorkflow = __importStar(require("./workflows/assembly-line/iterator"));
43
+ const reverterWorkflow = __importStar(require("./workflows/assembly-line/reverter"));
40
44
  /**
41
45
  * Example workers that ship with Long Tail.
42
46
  * Pass these to `start({ workers: [...exampleWorkers] })` or enable
@@ -46,4 +50,8 @@ exports.exampleWorkers = [
46
50
  { taskQueue: 'long-tail-examples', workflow: reviewContentWorkflow.reviewContent },
47
51
  { taskQueue: 'long-tail-examples', workflow: kitchenSinkWorkflow.kitchenSink },
48
52
  { taskQueue: 'long-tail-examples', workflow: basicEchoWorkflow.basicEcho },
53
+ { taskQueue: 'long-tail-examples', workflow: assemblyLineWorkflow.assemblyLine },
54
+ { taskQueue: 'long-tail-examples', workflow: workstationWorkflow.workstation },
55
+ { taskQueue: 'long-tail-examples', workflow: stepIteratorWorkflow.stepIterator },
56
+ { taskQueue: 'long-tail-examples', workflow: reverterWorkflow.reverter },
49
57
  ];
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Assembly Line Activities
3
+ *
4
+ * Side-effect functions that run outside the deterministic workflow
5
+ * sandbox. Each is wrapped via proxyActivities so results are
6
+ * checkpointed and replayed on restart.
7
+ *
8
+ * Two responsibilities:
9
+ * 1. Create an escalation with signal routing so the resolve API
10
+ * can wake the paused child workflow.
11
+ * 2. Signal the parent orchestrator when the child completes.
12
+ */
13
+ export declare function createStationEscalation(input: {
14
+ role: string;
15
+ stationName: string;
16
+ instructions: string;
17
+ workflowId: string;
18
+ workflowType: string;
19
+ taskQueue: string;
20
+ signalId: string;
21
+ }): Promise<string>;
22
+ export declare function signalParent(input: {
23
+ parentTaskQueue: string;
24
+ parentWorkflowType: string;
25
+ parentWorkflowId: string;
26
+ signalId: string;
27
+ data: any;
28
+ }): Promise<void>;
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ /**
3
+ * Assembly Line Activities
4
+ *
5
+ * Side-effect functions that run outside the deterministic workflow
6
+ * sandbox. Each is wrapped via proxyActivities so results are
7
+ * checkpointed and replayed on restart.
8
+ *
9
+ * Two responsibilities:
10
+ * 1. Create an escalation with signal routing so the resolve API
11
+ * can wake the paused child workflow.
12
+ * 2. Signal the parent orchestrator when the child completes.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.createStationEscalation = createStationEscalation;
16
+ exports.signalParent = signalParent;
17
+ const hotmesh_1 = require("@hotmeshio/hotmesh");
18
+ const db_1 = require("../../../lib/db");
19
+ const escalation_1 = require("../../../services/escalation");
20
+ // ── Create station escalation ──────────────────────────────────────
21
+ async function createStationEscalation(input) {
22
+ const escalation = await (0, escalation_1.createEscalation)({
23
+ type: 'assemblyLine',
24
+ subtype: input.stationName,
25
+ description: input.instructions,
26
+ priority: 2,
27
+ role: input.role,
28
+ envelope: JSON.stringify({ station: input.stationName }),
29
+ workflow_id: input.workflowId,
30
+ task_queue: input.taskQueue,
31
+ workflow_type: input.workflowType,
32
+ });
33
+ await (0, escalation_1.enrichEscalationRouting)(escalation.id, {
34
+ signal_routing: {
35
+ engine: 'durable',
36
+ taskQueue: input.taskQueue,
37
+ workflowType: input.workflowType,
38
+ workflowId: input.workflowId,
39
+ signalId: input.signalId,
40
+ },
41
+ }, {
42
+ workflowType: input.workflowType,
43
+ workflowId: input.workflowId,
44
+ taskQueue: input.taskQueue,
45
+ });
46
+ return escalation.id;
47
+ }
48
+ // ── Signal parent orchestrator ─────────────────────────────────────
49
+ async function signalParent(input) {
50
+ const client = new hotmesh_1.Durable.Client({ connection: (0, db_1.getConnection)() });
51
+ const handle = await client.workflow.getHandle(input.parentTaskQueue, input.parentWorkflowType, input.parentWorkflowId);
52
+ await handle.signal(input.signalId, input.data);
53
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Assembly Line — durable orchestrator with human task queues.
3
+ *
4
+ * Demonstrates the core composition pattern without the LT interceptor:
5
+ * startChild → spawn a child workflow (fire-and-forget)
6
+ * condition → pause until the child signals back
7
+ * signal → child wakes the parent when done
8
+ *
9
+ * A product moves through sequential workstations. Each station
10
+ * creates an escalation for a human operator, pauses, then signals
11
+ * the parent when the human resolves it.
12
+ *
13
+ * No registration, no certification, no interceptor — just Durable
14
+ * primitives and the escalation table.
15
+ */
16
+ import type { LTEnvelope } from '../../../types';
17
+ export declare function assemblyLine(envelope: LTEnvelope): Promise<any>;
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ /**
3
+ * Assembly Line — durable orchestrator with human task queues.
4
+ *
5
+ * Demonstrates the core composition pattern without the LT interceptor:
6
+ * startChild → spawn a child workflow (fire-and-forget)
7
+ * condition → pause until the child signals back
8
+ * signal → child wakes the parent when done
9
+ *
10
+ * A product moves through sequential workstations. Each station
11
+ * creates an escalation for a human operator, pauses, then signals
12
+ * the parent when the human resolves it.
13
+ *
14
+ * No registration, no certification, no interceptor — just Durable
15
+ * primitives and the escalation table.
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.assemblyLine = assemblyLine;
19
+ const hotmesh_1 = require("@hotmeshio/hotmesh");
20
+ const defaults_1 = require("../../../modules/defaults");
21
+ async function assemblyLine(envelope) {
22
+ const { productName, stations } = envelope.data;
23
+ const ctx = hotmesh_1.Durable.workflow.workflowInfo();
24
+ const results = [];
25
+ for (const [i, station] of stations.entries()) {
26
+ const signalId = `station-${i}-${ctx.workflowId}`;
27
+ const childWorkflowId = `workstation-${ctx.workflowId}-${i}`;
28
+ // Spawn child — fire-and-forget; only the start is awaited
29
+ await hotmesh_1.Durable.workflow.startChild({
30
+ workflowName: 'workstation',
31
+ args: [
32
+ {
33
+ data: {
34
+ ...station,
35
+ parentSignalId: signalId,
36
+ parentTaskQueue: 'long-tail-examples',
37
+ parentWorkflowType: 'assemblyLine',
38
+ parentWorkflowId: ctx.workflowId,
39
+ },
40
+ metadata: { source: 'assembly-line', station: station.stationName },
41
+ },
42
+ ],
43
+ taskQueue: 'long-tail-examples',
44
+ workflowId: childWorkflowId,
45
+ expire: defaults_1.JOB_EXPIRE_SECS,
46
+ entity: 'workstation',
47
+ });
48
+ // Pause until the child signals back with its result
49
+ const result = await hotmesh_1.Durable.workflow.condition(signalId);
50
+ results.push(result);
51
+ }
52
+ return {
53
+ type: 'return',
54
+ data: {
55
+ productName,
56
+ stations: results,
57
+ completedAt: new Date().toISOString(),
58
+ },
59
+ };
60
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Step Iterator — generic durable loop over dynamic steps.
3
+ *
4
+ * Proves that the number and shape of steps can be entirely
5
+ * data-driven. The orchestrator knows nothing about grinder,
6
+ * gluer, or any specific station — it just walks the list,
7
+ * spawns a child for each, and waits for the signal.
8
+ *
9
+ * Reuses the same `workstation` child workflow as the assembly line.
10
+ */
11
+ import type { LTEnvelope } from '../../../types';
12
+ export declare function stepIterator(envelope: LTEnvelope): Promise<any>;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ /**
3
+ * Step Iterator — generic durable loop over dynamic steps.
4
+ *
5
+ * Proves that the number and shape of steps can be entirely
6
+ * data-driven. The orchestrator knows nothing about grinder,
7
+ * gluer, or any specific station — it just walks the list,
8
+ * spawns a child for each, and waits for the signal.
9
+ *
10
+ * Reuses the same `workstation` child workflow as the assembly line.
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.stepIterator = stepIterator;
14
+ const hotmesh_1 = require("@hotmeshio/hotmesh");
15
+ const defaults_1 = require("../../../modules/defaults");
16
+ async function stepIterator(envelope) {
17
+ const { name, steps } = envelope.data;
18
+ const ctx = hotmesh_1.Durable.workflow.workflowInfo();
19
+ const results = [];
20
+ for (const [i, step] of steps.entries()) {
21
+ const signalId = `step-${i}-${ctx.workflowId}`;
22
+ const childWorkflowId = `workstation-${ctx.workflowId}-${i}`;
23
+ await hotmesh_1.Durable.workflow.startChild({
24
+ workflowName: 'workstation',
25
+ args: [
26
+ {
27
+ data: {
28
+ ...step,
29
+ parentSignalId: signalId,
30
+ parentTaskQueue: 'long-tail-examples',
31
+ parentWorkflowType: 'stepIterator',
32
+ parentWorkflowId: ctx.workflowId,
33
+ },
34
+ metadata: { source: 'step-iterator', step: i },
35
+ },
36
+ ],
37
+ taskQueue: 'long-tail-examples',
38
+ workflowId: childWorkflowId,
39
+ expire: defaults_1.JOB_EXPIRE_SECS,
40
+ entity: 'workstation',
41
+ });
42
+ const result = await hotmesh_1.Durable.workflow.condition(signalId);
43
+ results.push(result);
44
+ }
45
+ return {
46
+ type: 'return',
47
+ data: {
48
+ name,
49
+ totalSteps: steps.length,
50
+ steps: results,
51
+ completedAt: new Date().toISOString(),
52
+ },
53
+ };
54
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Reverter — durable step loop with revert support.
3
+ *
4
+ * Like stepIterator, but each human resolution can send the
5
+ * pipeline backwards. The resolver payload controls flow:
6
+ *
7
+ * { approved: true } → advance to next step
8
+ * { approved: false, revertSteps: 1 } → go back 1 step
9
+ * { approved: false, revertSteps: 2 } → go back 2 steps
10
+ *
11
+ * The orchestrator tracks a monotonic attempt counter so every
12
+ * child spawn gets a unique workflow ID and signal key — even
13
+ * when revisiting a step after a revert.
14
+ *
15
+ * The full history (approvals + reverts) is recorded in the result.
16
+ */
17
+ import type { LTEnvelope } from '../../../types';
18
+ export declare function reverter(envelope: LTEnvelope): Promise<any>;
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ /**
3
+ * Reverter — durable step loop with revert support.
4
+ *
5
+ * Like stepIterator, but each human resolution can send the
6
+ * pipeline backwards. The resolver payload controls flow:
7
+ *
8
+ * { approved: true } → advance to next step
9
+ * { approved: false, revertSteps: 1 } → go back 1 step
10
+ * { approved: false, revertSteps: 2 } → go back 2 steps
11
+ *
12
+ * The orchestrator tracks a monotonic attempt counter so every
13
+ * child spawn gets a unique workflow ID and signal key — even
14
+ * when revisiting a step after a revert.
15
+ *
16
+ * The full history (approvals + reverts) is recorded in the result.
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.reverter = reverter;
20
+ const hotmesh_1 = require("@hotmeshio/hotmesh");
21
+ const defaults_1 = require("../../../modules/defaults");
22
+ async function reverter(envelope) {
23
+ const { name, steps } = envelope.data;
24
+ const ctx = hotmesh_1.Durable.workflow.workflowInfo();
25
+ const history = [];
26
+ const finalResults = [];
27
+ let stepIndex = 0;
28
+ let attempt = 0;
29
+ while (stepIndex < steps.length) {
30
+ const step = steps[stepIndex];
31
+ const signalId = `step-${stepIndex}-a${attempt}-${ctx.workflowId}`;
32
+ const childWorkflowId = `workstation-${ctx.workflowId}-${stepIndex}-a${attempt}`;
33
+ await hotmesh_1.Durable.workflow.startChild({
34
+ workflowName: 'workstation',
35
+ args: [
36
+ {
37
+ data: {
38
+ ...step,
39
+ parentSignalId: signalId,
40
+ parentTaskQueue: 'long-tail-examples',
41
+ parentWorkflowType: 'reverter',
42
+ parentWorkflowId: ctx.workflowId,
43
+ },
44
+ metadata: {
45
+ source: 'reverter',
46
+ step: stepIndex,
47
+ attempt,
48
+ totalSteps: steps.length,
49
+ },
50
+ },
51
+ ],
52
+ taskQueue: 'long-tail-examples',
53
+ workflowId: childWorkflowId,
54
+ expire: defaults_1.JOB_EXPIRE_SECS,
55
+ entity: 'workstation',
56
+ });
57
+ const result = await hotmesh_1.Durable.workflow.condition(signalId);
58
+ const approved = result.resolution?.approved !== false;
59
+ const revertSteps = Number(result.resolution?.revertSteps) || 0;
60
+ history.push({
61
+ type: approved ? 'advance' : 'revert',
62
+ stepIndex,
63
+ stationName: step.stationName,
64
+ attempt,
65
+ resolution: result.resolution,
66
+ completedAt: result.completedAt,
67
+ });
68
+ attempt++;
69
+ if (approved) {
70
+ finalResults[stepIndex] = result;
71
+ stepIndex++;
72
+ }
73
+ else {
74
+ // Clamp revert target to 0
75
+ stepIndex = Math.max(0, stepIndex - revertSteps);
76
+ }
77
+ }
78
+ return {
79
+ type: 'return',
80
+ data: {
81
+ name,
82
+ totalSteps: steps.length,
83
+ totalAttempts: attempt,
84
+ steps: finalResults,
85
+ history,
86
+ completedAt: new Date().toISOString(),
87
+ },
88
+ };
89
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Assembly Line types.
3
+ *
4
+ * Defines the station config passed in the envelope and the
5
+ * result shape each station returns when a human resolves it.
6
+ */
7
+ export interface AssemblyLineStation {
8
+ stationName: string;
9
+ role: string;
10
+ instructions: string;
11
+ }
12
+ export interface StationEnvelopeData {
13
+ stationName: string;
14
+ role: string;
15
+ instructions: string;
16
+ parentSignalId: string;
17
+ parentTaskQueue: string;
18
+ parentWorkflowType: string;
19
+ parentWorkflowId: string;
20
+ }
21
+ export interface StationResult {
22
+ stationName: string;
23
+ resolution: Record<string, any>;
24
+ completedAt: string;
25
+ }
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ /**
3
+ * Assembly Line types.
4
+ *
5
+ * Defines the station config passed in the envelope and the
6
+ * result shape each station returns when a human resolves it.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Workstation — child workflow for the assembly line.
3
+ *
4
+ * Each workstation:
5
+ * 1. Creates an escalation assigned to its role (grinder, gluer, etc.)
6
+ * 2. Pauses (condition) until a human claims and resolves the escalation
7
+ * 3. Signals the parent orchestrator with the result
8
+ *
9
+ * No interceptor, no registration — just raw Durable primitives
10
+ * and a direct escalation record with signal routing metadata.
11
+ */
12
+ import type { LTEnvelope } from '../../../types';
13
+ export declare function workstation(envelope: LTEnvelope): Promise<any>;
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ /**
3
+ * Workstation — child workflow for the assembly line.
4
+ *
5
+ * Each workstation:
6
+ * 1. Creates an escalation assigned to its role (grinder, gluer, etc.)
7
+ * 2. Pauses (condition) until a human claims and resolves the escalation
8
+ * 3. Signals the parent orchestrator with the result
9
+ *
10
+ * No interceptor, no registration — just raw Durable primitives
11
+ * and a direct escalation record with signal routing metadata.
12
+ */
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || (function () {
30
+ var ownKeys = function(o) {
31
+ ownKeys = Object.getOwnPropertyNames || function (o) {
32
+ var ar = [];
33
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
34
+ return ar;
35
+ };
36
+ return ownKeys(o);
37
+ };
38
+ return function (mod) {
39
+ if (mod && mod.__esModule) return mod;
40
+ var result = {};
41
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
42
+ __setModuleDefault(result, mod);
43
+ return result;
44
+ };
45
+ })();
46
+ Object.defineProperty(exports, "__esModule", { value: true });
47
+ exports.workstation = workstation;
48
+ const hotmesh_1 = require("@hotmeshio/hotmesh");
49
+ const activities = __importStar(require("./activities"));
50
+ const { createStationEscalation, signalParent } = hotmesh_1.Durable.workflow.proxyActivities({ activities });
51
+ async function workstation(envelope) {
52
+ const { stationName, role, instructions, parentSignalId, parentTaskQueue, parentWorkflowType, parentWorkflowId, } = envelope.data;
53
+ const ctx = hotmesh_1.Durable.workflow.workflowInfo();
54
+ const localSignalId = `station-done-${ctx.workflowId}`;
55
+ // 1. Create escalation — human sees this in their queue
56
+ await createStationEscalation({
57
+ role,
58
+ stationName,
59
+ instructions,
60
+ workflowId: ctx.workflowId,
61
+ workflowType: 'workstation',
62
+ taskQueue: 'long-tail-examples',
63
+ signalId: localSignalId,
64
+ });
65
+ // 2. Pause until the human resolves the escalation
66
+ const resolution = await hotmesh_1.Durable.workflow.condition(localSignalId);
67
+ // 3. Build result and signal the parent orchestrator
68
+ const result = {
69
+ stationName,
70
+ resolution,
71
+ completedAt: new Date().toISOString(),
72
+ };
73
+ await signalParent({
74
+ parentTaskQueue,
75
+ parentWorkflowType,
76
+ parentWorkflowId,
77
+ signalId: parentSignalId,
78
+ data: result,
79
+ });
80
+ return { type: 'return', data: result };
81
+ }
package/build/index.d.ts CHANGED
@@ -37,3 +37,7 @@ export { getToolContext } from './services/iam/context';
37
37
  export { registerMcpTool } from './services/mcp/register-tool';
38
38
  export { getSystemWorkers, builtinMcpServerFactories } from './system';
39
39
  export { seedSystemMcpServers } from './system/seed';
40
+ export { CallbackEventAdapter } from './lib/events/callback';
41
+ export { createClient } from './sdk';
42
+ export type { LTClient, LTClientOptions } from './sdk';
43
+ export * as api from './api';
package/build/index.js CHANGED
@@ -36,7 +36,7 @@ var __importStar = (this && this.__importStar) || (function () {
36
36
  };
37
37
  })();
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.seedSystemMcpServers = exports.builtinMcpServerFactories = exports.getSystemWorkers = exports.registerMcpTool = exports.getToolContext = exports.getActivityIdentity = exports.seedExamples = exports.exampleWorkers = exports.McpEscalationStrategy = exports.DefaultEscalationStrategy = exports.escalationStrategyRegistry = exports.McpVisionServer = exports.McpTranslationServer = exports.McpServer = exports.McpClient = exports.McpService = exports.BuiltInMcpAdapter = exports.mcpRegistry = exports.defaultMaintenanceConfig = exports.maintenanceRegistry = exports.PinoLoggerAdapter = exports.loggerRegistry = exports.HoneycombTelemetryAdapter = exports.telemetryRegistry = exports.publishWorkflowEvent = exports.publishEscalationEvent = exports.publishTaskEvent = exports.publishMilestoneEvent = exports.SocketIOEventAdapter = exports.InMemoryEventAdapter = exports.NatsEventAdapter = exports.eventRegistry = exports.ltConfig = exports.UserService = exports.ConfigService = exports.EscalationService = exports.TaskService = exports.signToken = exports.requireAdmin = exports.requireAuth = exports.createAuthMiddleware = exports.JwtAuthAdapter = exports.executeLT = exports.createLTActivityInterceptor = exports.createLTInterceptor = exports.registerLT = exports.start = void 0;
39
+ exports.api = exports.createClient = exports.CallbackEventAdapter = exports.seedSystemMcpServers = exports.builtinMcpServerFactories = exports.getSystemWorkers = exports.registerMcpTool = exports.getToolContext = exports.getActivityIdentity = exports.seedExamples = exports.exampleWorkers = exports.McpEscalationStrategy = exports.DefaultEscalationStrategy = exports.escalationStrategyRegistry = exports.McpVisionServer = exports.McpTranslationServer = exports.McpServer = exports.McpClient = exports.McpService = exports.BuiltInMcpAdapter = exports.mcpRegistry = exports.defaultMaintenanceConfig = exports.maintenanceRegistry = exports.PinoLoggerAdapter = exports.loggerRegistry = exports.HoneycombTelemetryAdapter = exports.telemetryRegistry = exports.publishWorkflowEvent = exports.publishEscalationEvent = exports.publishTaskEvent = exports.publishMilestoneEvent = exports.SocketIOEventAdapter = exports.InMemoryEventAdapter = exports.NatsEventAdapter = exports.eventRegistry = exports.ltConfig = exports.UserService = exports.ConfigService = exports.EscalationService = exports.TaskService = exports.signToken = exports.requireAdmin = exports.requireAuth = exports.createAuthMiddleware = exports.JwtAuthAdapter = exports.executeLT = exports.createLTActivityInterceptor = exports.createLTInterceptor = exports.registerLT = exports.start = void 0;
40
40
  const config_1 = require("./modules/config");
41
41
  const logger_1 = require("./lib/logger");
42
42
  const start_1 = require("./start");
@@ -117,6 +117,11 @@ Object.defineProperty(exports, "getSystemWorkers", { enumerable: true, get: func
117
117
  Object.defineProperty(exports, "builtinMcpServerFactories", { enumerable: true, get: function () { return system_1.builtinMcpServerFactories; } });
118
118
  var seed_1 = require("./system/seed");
119
119
  Object.defineProperty(exports, "seedSystemMcpServers", { enumerable: true, get: function () { return seed_1.seedSystemMcpServers; } });
120
+ var callback_1 = require("./lib/events/callback");
121
+ Object.defineProperty(exports, "CallbackEventAdapter", { enumerable: true, get: function () { return callback_1.CallbackEventAdapter; } });
122
+ var sdk_1 = require("./sdk");
123
+ Object.defineProperty(exports, "createClient", { enumerable: true, get: function () { return sdk_1.createClient; } });
124
+ exports.api = __importStar(require("./api"));
120
125
  // ─── Server ──────────────────────────────────────────────────────────────────
121
126
  async function main() {
122
127
  const honeycombKey = process.env.HONEYCOMB_API_KEY;
@@ -0,0 +1,29 @@
1
+ -- Workflow sets: groups of related workflows produced by plan mode.
2
+
3
+ CREATE TABLE IF NOT EXISTS lt_workflow_sets (
4
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
5
+ name TEXT UNIQUE NOT NULL,
6
+ description TEXT,
7
+ specification TEXT NOT NULL,
8
+ plan JSONB NOT NULL DEFAULT '[]'::JSONB,
9
+ namespaces TEXT[] NOT NULL DEFAULT '{}',
10
+ status TEXT NOT NULL DEFAULT 'planning'
11
+ CHECK (status IN ('planning','planned','building','deploying','completed','failed')),
12
+ source_workflow_id TEXT,
13
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
14
+ updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
15
+ );
16
+
17
+ CREATE OR REPLACE TRIGGER trg_lt_workflow_sets_updated_at
18
+ BEFORE UPDATE ON lt_workflow_sets
19
+ FOR EACH ROW EXECUTE FUNCTION lt_set_updated_at();
20
+
21
+ -- Extend lt_yaml_workflows with set membership columns
22
+ ALTER TABLE lt_yaml_workflows ADD COLUMN IF NOT EXISTS set_id UUID
23
+ REFERENCES lt_workflow_sets(id) ON DELETE SET NULL;
24
+ ALTER TABLE lt_yaml_workflows ADD COLUMN IF NOT EXISTS set_role TEXT
25
+ CHECK (set_role IN ('leaf', 'composition', 'router'));
26
+ ALTER TABLE lt_yaml_workflows ADD COLUMN IF NOT EXISTS set_build_order INTEGER;
27
+
28
+ CREATE INDEX IF NOT EXISTS idx_lt_yaml_workflows_set_id
29
+ ON lt_yaml_workflows (set_id) WHERE set_id IS NOT NULL;
@@ -0,0 +1,7 @@
1
+ -- Enforce unique graph_topic per app_id for non-archived workflows.
2
+ -- Two active/deployed/draft workflows in the same namespace must not
3
+ -- share a subscribes topic — deploying them would cause routing collisions.
4
+
5
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_lt_yaml_workflows_app_topic_unique
6
+ ON lt_yaml_workflows (app_id, graph_topic)
7
+ WHERE status != 'archived';
@@ -13,6 +13,9 @@ VALUES
13
13
  '{}'),
14
14
  ('mcpWorkflowBuilder', 'long-tail-system', 'engineer', false,
15
15
  'Direct pipeline builder — LLM constructs DAG from tool schemas',
16
+ '{}'),
17
+ ('mcpWorkflowPlanner', 'long-tail-system', 'engineer', false,
18
+ 'Plan mode — decomposes specifications into multi-workflow sets',
16
19
  '{}')
17
20
  ON CONFLICT (workflow_type) DO NOTHING;
18
21
 
@@ -28,3 +31,7 @@ ON CONFLICT (workflow_type, role) DO NOTHING;
28
31
  INSERT INTO lt_config_roles (workflow_type, role)
29
32
  SELECT 'mcpWorkflowBuilder', unnest(ARRAY['reviewer', 'engineer', 'admin'])
30
33
  ON CONFLICT (workflow_type, role) DO NOTHING;
34
+
35
+ INSERT INTO lt_config_roles (workflow_type, role)
36
+ SELECT 'mcpWorkflowPlanner', unnest(ARRAY['reviewer', 'engineer', 'admin'])
37
+ ON CONFLICT (workflow_type, role) DO NOTHING;