@hotmeshio/long-tail 0.1.14 → 0.1.16

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 (360) hide show
  1. package/README.md +15 -0
  2. package/build/api/escalations/bulk.d.ts +78 -0
  3. package/build/api/escalations/bulk.js +279 -0
  4. package/build/api/escalations/claim.d.ts +30 -0
  5. package/build/api/escalations/claim.js +121 -0
  6. package/build/api/escalations/create.d.ts +29 -0
  7. package/build/api/escalations/create.js +101 -0
  8. package/build/api/escalations/helpers.d.ts +10 -0
  9. package/build/api/escalations/helpers.js +80 -0
  10. package/build/api/escalations/index.d.ts +6 -0
  11. package/build/api/escalations/index.js +26 -0
  12. package/build/api/escalations/list.d.ts +75 -0
  13. package/build/api/escalations/list.js +170 -0
  14. package/build/api/escalations/resolve.d.ts +18 -0
  15. package/build/api/escalations/resolve.js +243 -0
  16. package/build/api/escalations/single.d.ts +37 -0
  17. package/build/api/escalations/single.js +123 -0
  18. package/build/api/files.d.ts +3 -0
  19. package/build/api/files.js +18 -1
  20. package/build/api/knowledge.d.ts +36 -0
  21. package/build/api/knowledge.js +112 -0
  22. package/build/api/mcp/index.d.ts +2 -0
  23. package/build/api/mcp/index.js +16 -0
  24. package/build/api/{mcp.d.ts → mcp/servers.d.ts} +1 -33
  25. package/build/api/{mcp.js → mcp/servers.js} +4 -65
  26. package/build/api/mcp/tools.d.ts +33 -0
  27. package/build/api/mcp/tools.js +64 -0
  28. package/build/api/settings.js +6 -1
  29. package/build/api/workflows/config.d.ts +64 -0
  30. package/build/api/workflows/config.js +142 -0
  31. package/build/api/workflows/discovery.d.ts +29 -0
  32. package/build/api/workflows/discovery.js +153 -0
  33. package/build/api/workflows/index.d.ts +3 -0
  34. package/build/api/workflows/index.js +18 -0
  35. package/build/api/workflows/invocation.d.ts +67 -0
  36. package/build/api/workflows/invocation.js +188 -0
  37. package/build/api/yaml-workflows/cron.d.ts +39 -0
  38. package/build/api/yaml-workflows/cron.js +127 -0
  39. package/build/api/{yaml-workflows.d.ts → yaml-workflows/crud.d.ts} +22 -146
  40. package/build/api/{yaml-workflows.js → yaml-workflows/crud.js} +99 -380
  41. package/build/api/yaml-workflows/deploy.d.ts +71 -0
  42. package/build/api/yaml-workflows/deploy.js +223 -0
  43. package/build/api/yaml-workflows/helpers.d.ts +2 -0
  44. package/build/api/yaml-workflows/helpers.js +8 -0
  45. package/build/api/yaml-workflows/index.d.ts +4 -0
  46. package/build/api/yaml-workflows/index.js +27 -0
  47. package/build/api/yaml-workflows/versions.d.ts +43 -0
  48. package/build/api/yaml-workflows/versions.js +124 -0
  49. package/build/bin/ltc.d.ts +2 -0
  50. package/build/bin/ltc.js +220 -0
  51. package/build/examples/seed-data.d.ts +55 -0
  52. package/build/examples/seed-data.js +161 -0
  53. package/build/examples/seed.js +7 -164
  54. package/build/index.d.ts +1 -1
  55. package/build/lib/cli/auth.d.ts +23 -0
  56. package/build/lib/cli/auth.js +167 -0
  57. package/build/lib/cli/client.d.ts +6 -0
  58. package/build/lib/cli/client.js +31 -0
  59. package/build/lib/cli/commands/escalations.d.ts +19 -0
  60. package/build/lib/cli/commands/escalations.js +69 -0
  61. package/build/lib/cli/commands/knowledge.d.ts +18 -0
  62. package/build/lib/cli/commands/knowledge.js +87 -0
  63. package/build/lib/cli/commands/mcp.d.ts +8 -0
  64. package/build/lib/cli/commands/mcp.js +33 -0
  65. package/build/lib/cli/commands/pipelines.d.ts +16 -0
  66. package/build/lib/cli/commands/pipelines.js +67 -0
  67. package/build/lib/cli/commands/status.d.ts +1 -0
  68. package/build/lib/cli/commands/status.js +28 -0
  69. package/build/lib/cli/commands/users.d.ts +7 -0
  70. package/build/lib/cli/commands/users.js +25 -0
  71. package/build/lib/cli/commands/workflows.d.ts +16 -0
  72. package/build/lib/cli/commands/workflows.js +104 -0
  73. package/build/lib/cli/compile.d.ts +2 -0
  74. package/build/lib/cli/compile.js +165 -0
  75. package/build/lib/cli/format.d.ts +23 -0
  76. package/build/lib/cli/format.js +94 -0
  77. package/build/lib/cli/init.d.ts +1 -0
  78. package/build/lib/cli/init.js +61 -0
  79. package/build/lib/cli/output.d.ts +27 -0
  80. package/build/lib/cli/output.js +126 -0
  81. package/build/lib/cli/scanner.d.ts +10 -0
  82. package/build/lib/cli/scanner.js +164 -0
  83. package/build/lib/cli/types.d.ts +16 -0
  84. package/build/lib/cli/types.js +2 -0
  85. package/build/lib/db/schemas/schemas/001_schema.sql +485 -0
  86. package/build/lib/db/schemas/schemas/002_seed.sql +92 -0
  87. package/build/lib/events/socketio.d.ts +12 -0
  88. package/build/lib/events/socketio.js +24 -1
  89. package/build/lib/logger/index.d.ts +0 -9
  90. package/build/lib/logger/index.js +9 -4
  91. package/build/lib/storage/index.js +2 -2
  92. package/build/routes/file-browser.js +14 -0
  93. package/build/routes/index.js +4 -0
  94. package/build/routes/knowledge.d.ts +2 -0
  95. package/build/routes/knowledge.js +141 -0
  96. package/build/routes/nats-credentials.d.ts +2 -0
  97. package/build/routes/nats-credentials.js +22 -0
  98. package/build/routes/yaml-workflows/crud.js +9 -0
  99. package/build/sdk/index.d.ts +17 -0
  100. package/build/sdk/index.js +19 -0
  101. package/build/services/mcp/client/connection-dispatch.d.ts +18 -0
  102. package/build/services/mcp/client/connection-dispatch.js +78 -0
  103. package/build/services/mcp/client/connection-lifecycle.d.ts +48 -0
  104. package/build/services/mcp/client/connection-lifecycle.js +296 -0
  105. package/build/services/mcp/client/connection-test.d.ts +10 -0
  106. package/build/services/mcp/client/connection-test.js +49 -0
  107. package/build/services/mcp/client/connection.d.ts +3 -68
  108. package/build/services/mcp/client/connection.js +15 -393
  109. package/build/services/mcp/server-lifecycle.d.ts +27 -0
  110. package/build/services/mcp/server-lifecycle.js +49 -0
  111. package/build/services/mcp/server-tools.d.ts +13 -0
  112. package/build/services/mcp/server-tools.js +287 -0
  113. package/build/services/mcp/server.d.ts +2 -26
  114. package/build/services/mcp/server.js +7 -315
  115. package/build/services/yaml-workflow/builder-regenerate.d.ts +25 -0
  116. package/build/services/yaml-workflow/builder-regenerate.js +111 -0
  117. package/build/services/yaml-workflow/db-versions.d.ts +17 -0
  118. package/build/services/yaml-workflow/db-versions.js +76 -0
  119. package/build/services/yaml-workflow/db.d.ts +3 -13
  120. package/build/services/yaml-workflow/db.js +15 -71
  121. package/build/services/yaml-workflow/deployer-helpers.js +48 -17
  122. package/build/services/yaml-workflow/durable-compiler/index.d.ts +22 -0
  123. package/build/services/yaml-workflow/durable-compiler/index.js +168 -0
  124. package/build/services/yaml-workflow/durable-compiler/parser.d.ts +12 -0
  125. package/build/services/yaml-workflow/durable-compiler/parser.js +110 -0
  126. package/build/services/yaml-workflow/durable-compiler/prompts.d.ts +18 -0
  127. package/build/services/yaml-workflow/durable-compiler/prompts.js +570 -0
  128. package/build/services/yaml-workflow/durable-compiler/types.d.ts +51 -0
  129. package/build/services/yaml-workflow/durable-compiler/types.js +5 -0
  130. package/build/services/yaml-workflow/pipeline/build/dag-assembly.d.ts +17 -0
  131. package/build/services/yaml-workflow/pipeline/build/dag-assembly.js +192 -0
  132. package/build/services/yaml-workflow/pipeline/build/dag.d.ts +4 -13
  133. package/build/services/yaml-workflow/pipeline/build/dag.js +9 -185
  134. package/build/services/yaml-workflow/pipeline/prompt-templates.d.ts +10 -0
  135. package/build/services/yaml-workflow/pipeline/prompt-templates.js +270 -0
  136. package/build/services/yaml-workflow/pipeline/prompts.d.ts +3 -6
  137. package/build/services/yaml-workflow/pipeline/prompts.js +8 -263
  138. package/build/services/yaml-workflow/workers/register.js +4 -2
  139. package/build/start/adapters.js +4 -1
  140. package/build/start/socket-auth.d.ts +13 -0
  141. package/build/start/socket-auth.js +32 -0
  142. package/build/start/workers.js +6 -5
  143. package/build/system/activities/file-storage.d.ts +4 -0
  144. package/build/system/activities/file-storage.js +7 -1
  145. package/build/system/activities/knowledge.d.ts +23 -0
  146. package/build/system/activities/knowledge.js +50 -10
  147. package/build/system/activities/sql.d.ts +3 -0
  148. package/build/system/activities/sql.js +25 -1
  149. package/build/system/mcp-servers/file-storage.js +3 -1
  150. package/build/system/mcp-servers/human-queue-schemas.d.ts +91 -0
  151. package/build/system/mcp-servers/human-queue-schemas.js +42 -0
  152. package/build/system/mcp-servers/human-queue.d.ts +2 -6
  153. package/build/system/mcp-servers/human-queue.js +9 -51
  154. package/build/system/mcp-servers/knowledge.js +43 -9
  155. package/build/system/mcp-servers/workflow-compiler.js +54 -0
  156. package/build/system/workflows/mcp-triage/activities-proxy.d.ts +21 -0
  157. package/build/system/workflows/mcp-triage/activities-proxy.js +70 -0
  158. package/build/system/workflows/mcp-triage/index.js +17 -75
  159. package/build/system/workflows/mcp-workflow-planner/activities/persist.d.ts +1 -0
  160. package/build/system/workflows/mcp-workflow-planner/activities/persist.js +1 -0
  161. package/build/system/workflows/mcp-workflow-planner/index.js +2 -0
  162. package/build/tsconfig.tsbuildinfo +1 -1
  163. package/dashboard/dist/assets/{AdminDashboard-Cngijp4Q.js → AdminDashboard-Bprul9Eb.js} +2 -2
  164. package/dashboard/dist/assets/{AdminDashboard-Cngijp4Q.js.map → AdminDashboard-Bprul9Eb.js.map} +1 -1
  165. package/dashboard/dist/assets/AvailableEscalationsPage-H_z5mC10.js +2 -0
  166. package/dashboard/dist/assets/AvailableEscalationsPage-H_z5mC10.js.map +1 -0
  167. package/dashboard/dist/assets/{BotPicker-B8Uvw9Si.js → BotPicker-DcvILNUf.js} +2 -2
  168. package/dashboard/dist/assets/{BotPicker-B8Uvw9Si.js.map → BotPicker-DcvILNUf.js.map} +1 -1
  169. package/dashboard/dist/assets/{CollapsibleSection-DiFPuWOY.js → CollapsibleSection-BWPbzgEe.js} +2 -2
  170. package/dashboard/dist/assets/{CollapsibleSection-DiFPuWOY.js.map → CollapsibleSection-BWPbzgEe.js.map} +1 -1
  171. package/dashboard/dist/assets/{ConfirmDeleteModal-CpXG9uyu.js → ConfirmDeleteModal-Cy6KVLfC.js} +2 -2
  172. package/dashboard/dist/assets/{ConfirmDeleteModal-CpXG9uyu.js.map → ConfirmDeleteModal-Cy6KVLfC.js.map} +1 -1
  173. package/dashboard/dist/assets/{CopyableId-DKsTR9lK.js → CopyableId-CRED8hvk.js} +2 -2
  174. package/dashboard/dist/assets/{CopyableId-DKsTR9lK.js.map → CopyableId-CRED8hvk.js.map} +1 -1
  175. package/dashboard/dist/assets/{CredentialsPage-DlS7Kf40.js → CredentialsPage-BUdvxiE3.js} +2 -2
  176. package/dashboard/dist/assets/{CredentialsPage-DlS7Kf40.js.map → CredentialsPage-BUdvxiE3.js.map} +1 -1
  177. package/dashboard/dist/assets/{CustomDurationPicker-B-9eW3pm.js → CustomDurationPicker-eOk2EqQ5.js} +2 -2
  178. package/dashboard/dist/assets/{CustomDurationPicker-B-9eW3pm.js.map → CustomDurationPicker-eOk2EqQ5.js.map} +1 -1
  179. package/dashboard/dist/assets/{DataTable-DkOokbtL.js → DataTable-bd2PTBJd.js} +2 -2
  180. package/dashboard/dist/assets/{DataTable-DkOokbtL.js.map → DataTable-bd2PTBJd.js.map} +1 -1
  181. package/dashboard/dist/assets/{ElapsedCell-DVtHqM-5.js → ElapsedCell-BGo8vyus.js} +2 -2
  182. package/dashboard/dist/assets/{ElapsedCell-DVtHqM-5.js.map → ElapsedCell-BGo8vyus.js.map} +1 -1
  183. package/dashboard/dist/assets/{EmptyState-C7KIMIbE.js → EmptyState-BygtU-Rh.js} +2 -2
  184. package/dashboard/dist/assets/{EmptyState-C7KIMIbE.js.map → EmptyState-BygtU-Rh.js.map} +1 -1
  185. package/dashboard/dist/assets/{EscalationsOverview-BMKBlkPx.js → EscalationsOverview-DUEcN5MP.js} +2 -2
  186. package/dashboard/dist/assets/{EscalationsOverview-BMKBlkPx.js.map → EscalationsOverview-DUEcN5MP.js.map} +1 -1
  187. package/dashboard/dist/assets/{EventTable-BYZ5OVdQ.js → EventTable-CmFhswLW.js} +2 -2
  188. package/dashboard/dist/assets/{EventTable-BYZ5OVdQ.js.map → EventTable-CmFhswLW.js.map} +1 -1
  189. package/dashboard/dist/assets/{FilterBar-C5r3n6YO.js → FilterBar-BQNzsd3A.js} +2 -2
  190. package/dashboard/dist/assets/{FilterBar-C5r3n6YO.js.map → FilterBar-BQNzsd3A.js.map} +1 -1
  191. package/dashboard/dist/assets/{ListToolbar-BGUajIsW.js → ListToolbar-OWOn-HiC.js} +2 -2
  192. package/dashboard/dist/assets/{ListToolbar-BGUajIsW.js.map → ListToolbar-OWOn-HiC.js.map} +1 -1
  193. package/dashboard/dist/assets/{McpOverview-B_kJYHea.js → McpOverview-OkEzvClD.js} +2 -2
  194. package/dashboard/dist/assets/{McpOverview-B_kJYHea.js.map → McpOverview-OkEzvClD.js.map} +1 -1
  195. package/dashboard/dist/assets/McpQueryDetailPage-C6Ih5sC_.js +5 -0
  196. package/dashboard/dist/assets/McpQueryDetailPage-C6Ih5sC_.js.map +1 -0
  197. package/dashboard/dist/assets/{McpQueryPage-BgAq_bQg.js → McpQueryPage-BAuOf5TL.js} +2 -2
  198. package/dashboard/dist/assets/{McpQueryPage-BgAq_bQg.js.map → McpQueryPage-BAuOf5TL.js.map} +1 -1
  199. package/dashboard/dist/assets/{McpRunDetailPage-B8c0OszR.js → McpRunDetailPage-DMeiG4i_.js} +2 -2
  200. package/dashboard/dist/assets/{McpRunDetailPage-B8c0OszR.js.map → McpRunDetailPage-DMeiG4i_.js.map} +1 -1
  201. package/dashboard/dist/assets/{McpRunsPage-BY8C6k78.js → McpRunsPage-CG3cNJh8.js} +2 -2
  202. package/dashboard/dist/assets/{McpRunsPage-BY8C6k78.js.map → McpRunsPage-CG3cNJh8.js.map} +1 -1
  203. package/dashboard/dist/assets/{Modal-E1yRnCeW.js → Modal-Dir9Rlnx.js} +2 -2
  204. package/dashboard/dist/assets/{Modal-E1yRnCeW.js.map → Modal-Dir9Rlnx.js.map} +1 -1
  205. package/dashboard/dist/assets/{OperatorDashboard-C8MSTzey.js → OperatorDashboard-OqWC6Azy.js} +2 -2
  206. package/dashboard/dist/assets/{OperatorDashboard-C8MSTzey.js.map → OperatorDashboard-OqWC6Azy.js.map} +1 -1
  207. package/dashboard/dist/assets/{PageHeader-Cm5HBQF_.js → PageHeader-FJIemmrC.js} +2 -2
  208. package/dashboard/dist/assets/{PageHeader-Cm5HBQF_.js.map → PageHeader-FJIemmrC.js.map} +1 -1
  209. package/dashboard/dist/assets/{PageHeaderWithStats-CNmWJFSN.js → PageHeaderWithStats-Br5y9qNO.js} +2 -2
  210. package/dashboard/dist/assets/{PageHeaderWithStats-CNmWJFSN.js.map → PageHeaderWithStats-Br5y9qNO.js.map} +1 -1
  211. package/dashboard/dist/assets/{PriorityBadge-HSI4RVhs.js → PriorityBadge-C7D5d_HY.js} +2 -2
  212. package/dashboard/dist/assets/{PriorityBadge-HSI4RVhs.js.map → PriorityBadge-C7D5d_HY.js.map} +1 -1
  213. package/dashboard/dist/assets/{ProcessDetailPage-Dln8622H.js → ProcessDetailPage-DZIP6grw.js} +2 -2
  214. package/dashboard/dist/assets/{ProcessDetailPage-Dln8622H.js.map → ProcessDetailPage-DZIP6grw.js.map} +1 -1
  215. package/dashboard/dist/assets/{ProcessesListPage-bIsd9N_h.js → ProcessesListPage-BQoPYkeB.js} +2 -2
  216. package/dashboard/dist/assets/{ProcessesListPage-bIsd9N_h.js.map → ProcessesListPage-BQoPYkeB.js.map} +1 -1
  217. package/dashboard/dist/assets/{RolePill-BVUp2bF0.js → RolePill-D6nMxMvp.js} +2 -2
  218. package/dashboard/dist/assets/{RolePill-BVUp2bF0.js.map → RolePill-D6nMxMvp.js.map} +1 -1
  219. package/dashboard/dist/assets/RolesPage-CwLnJFhy.js +2 -0
  220. package/dashboard/dist/assets/{RolesPage-kH-Njt25.js.map → RolesPage-CwLnJFhy.js.map} +1 -1
  221. package/dashboard/dist/assets/{RowActions-DbUJPfaW.js → RowActions-JqgAB0p3.js} +2 -2
  222. package/dashboard/dist/assets/{RowActions-DbUJPfaW.js.map → RowActions-JqgAB0p3.js.map} +1 -1
  223. package/dashboard/dist/assets/RunAsSelector-KAlKtitB.js +2 -0
  224. package/dashboard/dist/assets/RunAsSelector-KAlKtitB.js.map +1 -0
  225. package/dashboard/dist/assets/{StatCard-Bs3JbyAz.js → StatCard-B-WLhOaH.js} +2 -2
  226. package/dashboard/dist/assets/{StatCard-Bs3JbyAz.js.map → StatCard-B-WLhOaH.js.map} +1 -1
  227. package/dashboard/dist/assets/{StatusBadge-CakDdsCw.js → StatusBadge-DVCf2ncM.js} +2 -2
  228. package/dashboard/dist/assets/{StatusBadge-CakDdsCw.js.map → StatusBadge-DVCf2ncM.js.map} +1 -1
  229. package/dashboard/dist/assets/{StepIndicator-Cd_SG_yA.js → StepIndicator-D9Xvdf18.js} +2 -2
  230. package/dashboard/dist/assets/{StepIndicator-Cd_SG_yA.js.map → StepIndicator-D9Xvdf18.js.map} +1 -1
  231. package/dashboard/dist/assets/{StickyPagination-Bz0C18nC.js → StickyPagination-CJHMzYJj.js} +2 -2
  232. package/dashboard/dist/assets/{StickyPagination-Bz0C18nC.js.map → StickyPagination-CJHMzYJj.js.map} +1 -1
  233. package/dashboard/dist/assets/SwimlaneTimeline-YiXPDyEL.js +2 -0
  234. package/dashboard/dist/assets/SwimlaneTimeline-YiXPDyEL.js.map +1 -0
  235. package/dashboard/dist/assets/{TagInput-ClFhXG-U.js → TagInput-DcPnUnSJ.js} +2 -2
  236. package/dashboard/dist/assets/{TagInput-ClFhXG-U.js.map → TagInput-DcPnUnSJ.js.map} +1 -1
  237. package/dashboard/dist/assets/{TaskDetailPage-SuMBdARt.js → TaskDetailPage-DftmYWD7.js} +2 -2
  238. package/dashboard/dist/assets/{TaskDetailPage-SuMBdARt.js.map → TaskDetailPage-DftmYWD7.js.map} +1 -1
  239. package/dashboard/dist/assets/{TaskQueuePill-lJR1JW_W.js → TaskQueuePill-BzduBqwy.js} +2 -2
  240. package/dashboard/dist/assets/{TaskQueuePill-lJR1JW_W.js.map → TaskQueuePill-BzduBqwy.js.map} +1 -1
  241. package/dashboard/dist/assets/{TasksListPage-Dkq1Vtbt.js → TasksListPage-DeewV4Gp.js} +2 -2
  242. package/dashboard/dist/assets/{TasksListPage-Dkq1Vtbt.js.map → TasksListPage-DeewV4Gp.js.map} +1 -1
  243. package/dashboard/dist/assets/{TimeAgo-DgfDZ1pl.js → TimeAgo-DJZq-e4R.js} +2 -2
  244. package/dashboard/dist/assets/{TimeAgo-DgfDZ1pl.js.map → TimeAgo-DJZq-e4R.js.map} +1 -1
  245. package/dashboard/dist/assets/{TimestampCell-MpHZ1hMD.js → TimestampCell-Dx5uwGfS.js} +2 -2
  246. package/dashboard/dist/assets/{TimestampCell-MpHZ1hMD.js.map → TimestampCell-Dx5uwGfS.js.map} +1 -1
  247. package/dashboard/dist/assets/{UserName-DqsosA4B.js → UserName-CnGk7MgL.js} +2 -2
  248. package/dashboard/dist/assets/{UserName-DqsosA4B.js.map → UserName-CnGk7MgL.js.map} +1 -1
  249. package/dashboard/dist/assets/{WorkflowExecutionPage-CVlg38C3.js → WorkflowExecutionPage-CPQ0fIwf.js} +2 -2
  250. package/dashboard/dist/assets/{WorkflowExecutionPage-CVlg38C3.js.map → WorkflowExecutionPage-CPQ0fIwf.js.map} +1 -1
  251. package/dashboard/dist/assets/{WorkflowPill-CRpZhjGR.js → WorkflowPill-BrD5d1AG.js} +2 -2
  252. package/dashboard/dist/assets/{WorkflowPill-CRpZhjGR.js.map → WorkflowPill-BrD5d1AG.js.map} +1 -1
  253. package/dashboard/dist/assets/{WorkflowsDashboard-Ugzbs8mV.js → WorkflowsDashboard-BzjhABZP.js} +2 -2
  254. package/dashboard/dist/assets/{WorkflowsDashboard-Ugzbs8mV.js.map → WorkflowsDashboard-BzjhABZP.js.map} +1 -1
  255. package/dashboard/dist/assets/{WorkflowsOverview-CIp_lTNl.js → WorkflowsOverview-lBp2E6rN.js} +2 -2
  256. package/dashboard/dist/assets/{WorkflowsOverview-CIp_lTNl.js.map → WorkflowsOverview-lBp2E6rN.js.map} +1 -1
  257. package/dashboard/dist/assets/YamlWorkflowsPage-C_MkAp2i.js +2 -0
  258. package/dashboard/dist/assets/YamlWorkflowsPage-C_MkAp2i.js.map +1 -0
  259. package/dashboard/dist/assets/{bots-DPfUpVqI.js → bots-fc_O_YIq.js} +2 -2
  260. package/dashboard/dist/assets/{bots-DPfUpVqI.js.map → bots-fc_O_YIq.js.map} +1 -1
  261. package/dashboard/dist/assets/{escalation-RrCDbMC3.js → escalation-BYhLYHBz.js} +2 -2
  262. package/dashboard/dist/assets/{escalation-RrCDbMC3.js.map → escalation-BYhLYHBz.js.map} +1 -1
  263. package/dashboard/dist/assets/{escalation-columns-CDGa9wsD.js → escalation-columns-DjJyuC1g.js} +2 -2
  264. package/dashboard/dist/assets/{escalation-columns-CDGa9wsD.js.map → escalation-columns-DjJyuC1g.js.map} +1 -1
  265. package/dashboard/dist/assets/{helpers-ZSKqdkdS.js → helpers-CQG3Rh2y.js} +2 -2
  266. package/dashboard/dist/assets/{helpers-ZSKqdkdS.js.map → helpers-CQG3Rh2y.js.map} +1 -1
  267. package/dashboard/dist/assets/{index-DX6zxr6t.js → index-2nBhR7Dg.js} +2 -2
  268. package/dashboard/dist/assets/{index-DX6zxr6t.js.map → index-2nBhR7Dg.js.map} +1 -1
  269. package/dashboard/dist/assets/index-4IUoh_hd.js +2 -0
  270. package/dashboard/dist/assets/{index-K40Qw1tk.js.map → index-4IUoh_hd.js.map} +1 -1
  271. package/dashboard/dist/assets/index-B2CqPzLK.js +2 -0
  272. package/dashboard/dist/assets/index-B2CqPzLK.js.map +1 -0
  273. package/dashboard/dist/assets/index-B78xalb4.js +2 -0
  274. package/dashboard/dist/assets/index-B78xalb4.js.map +1 -0
  275. package/dashboard/dist/assets/index-BI8r69O_.js +2 -0
  276. package/dashboard/dist/assets/{index-C90ZPzXk.js.map → index-BI8r69O_.js.map} +1 -1
  277. package/dashboard/dist/assets/index-C5TUqJu0.css +1 -0
  278. package/dashboard/dist/assets/{index-BmVCyB6C.js → index-CUqCBBZG.js} +2 -2
  279. package/dashboard/dist/assets/{index-BmVCyB6C.js.map → index-CUqCBBZG.js.map} +1 -1
  280. package/dashboard/dist/assets/index-D51PaQZY.js +2 -0
  281. package/dashboard/dist/assets/index-D51PaQZY.js.map +1 -0
  282. package/dashboard/dist/assets/{index-BbI2dzhJ.js → index-DNtXXy1o.js} +2 -2
  283. package/dashboard/dist/assets/{index-BbI2dzhJ.js.map → index-DNtXXy1o.js.map} +1 -1
  284. package/dashboard/dist/assets/{index-DNytWfSZ.js → index-DR4qQvlW.js} +2 -2
  285. package/dashboard/dist/assets/{index-DNytWfSZ.js.map → index-DR4qQvlW.js.map} +1 -1
  286. package/dashboard/dist/assets/index-Dh0PCbR-.js +15 -0
  287. package/dashboard/dist/assets/index-Dh0PCbR-.js.map +1 -0
  288. package/dashboard/dist/assets/index-KYpLvJKB.js +5 -0
  289. package/dashboard/dist/assets/index-KYpLvJKB.js.map +1 -0
  290. package/dashboard/dist/assets/{index-Cmgrk7PQ.js → index-sNrqYt0Q.js} +73 -73
  291. package/dashboard/dist/assets/index-sNrqYt0Q.js.map +1 -0
  292. package/dashboard/dist/assets/{mcp-CNE44TSp.js → mcp-D2XfRh8v.js} +2 -2
  293. package/dashboard/dist/assets/{mcp-CNE44TSp.js.map → mcp-D2XfRh8v.js.map} +1 -1
  294. package/dashboard/dist/assets/{mcp-query-RQX0uN-5.js → mcp-query-CIx_mIC7.js} +2 -2
  295. package/dashboard/dist/assets/{mcp-query-RQX0uN-5.js.map → mcp-query-CIx_mIC7.js.map} +1 -1
  296. package/dashboard/dist/assets/{mcp-runs-0w40bdz-.js → mcp-runs-C9_J4LIH.js} +2 -2
  297. package/dashboard/dist/assets/{mcp-runs-0w40bdz-.js.map → mcp-runs-C9_J4LIH.js.map} +1 -1
  298. package/dashboard/dist/assets/{namespaces-BbmdXuPp.js → namespaces-BwMljx6f.js} +2 -2
  299. package/dashboard/dist/assets/{namespaces-BbmdXuPp.js.map → namespaces-BwMljx6f.js.map} +1 -1
  300. package/dashboard/dist/assets/{roles-DoHYlhWH.js → roles-Bd_sTV6I.js} +2 -2
  301. package/dashboard/dist/assets/{roles-DoHYlhWH.js.map → roles-Bd_sTV6I.js.map} +1 -1
  302. package/dashboard/dist/assets/{settings-BAiJiCHS.js → settings-BCb8eFyA.js} +2 -2
  303. package/dashboard/dist/assets/{settings-BAiJiCHS.js.map → settings-BCb8eFyA.js.map} +1 -1
  304. package/dashboard/dist/assets/{tasks-CvroqHtm.js → tasks-Bq54qGGq.js} +2 -2
  305. package/dashboard/dist/assets/{tasks-CvroqHtm.js.map → tasks-Bq54qGGq.js.map} +1 -1
  306. package/dashboard/dist/assets/useEventHooks-BTbGf536.js +2 -0
  307. package/dashboard/dist/assets/{useEventHooks-BHMbzR_y.js.map → useEventHooks-BTbGf536.js.map} +1 -1
  308. package/dashboard/dist/assets/useYamlActivityEvents-CsYP09W5.js +2 -0
  309. package/dashboard/dist/assets/{useYamlActivityEvents-D56KV14X.js.map → useYamlActivityEvents-CsYP09W5.js.map} +1 -1
  310. package/dashboard/dist/assets/{users-CxIMy_xw.js → users-BTBhafGc.js} +2 -2
  311. package/dashboard/dist/assets/{users-CxIMy_xw.js.map → users-BTBhafGc.js.map} +1 -1
  312. package/dashboard/dist/assets/{vendor-icons-AFGxSeQS.js → vendor-icons-CWl44VA6.js} +77 -77
  313. package/dashboard/dist/assets/vendor-icons-CWl44VA6.js.map +1 -0
  314. package/dashboard/dist/assets/{workflows-yR9yais7.js → workflows-BkzA4ahe.js} +2 -2
  315. package/dashboard/dist/assets/{workflows-yR9yais7.js.map → workflows-BkzA4ahe.js.map} +1 -1
  316. package/dashboard/dist/assets/{yaml-workflows-QVF2MZ0l.js → yaml-workflows-Cs0EYp0F.js} +2 -2
  317. package/dashboard/dist/assets/{yaml-workflows-QVF2MZ0l.js.map → yaml-workflows-Cs0EYp0F.js.map} +1 -1
  318. package/dashboard/dist/index.html +3 -3
  319. package/docs/api/http/file-browser.md +101 -0
  320. package/docs/api/http/knowledge.md +203 -0
  321. package/docs/api/http/settings.md +6 -4
  322. package/docs/api/sdk/files.md +68 -0
  323. package/docs/api/sdk/knowledge.md +126 -0
  324. package/docs/api/sdk/settings.md +3 -2
  325. package/docs/cli.md +171 -0
  326. package/docs/compilation.md +16 -0
  327. package/docs/compiler.md +311 -0
  328. package/docs/events.md +19 -0
  329. package/docs/workflows.md +19 -0
  330. package/package.json +13 -2
  331. package/build/api/escalations.d.ts +0 -271
  332. package/build/api/escalations.js +0 -932
  333. package/build/api/workflows.d.ts +0 -158
  334. package/build/api/workflows.js +0 -414
  335. package/dashboard/dist/assets/AvailableEscalationsPage-CpBfGV1h.js +0 -2
  336. package/dashboard/dist/assets/AvailableEscalationsPage-CpBfGV1h.js.map +0 -1
  337. package/dashboard/dist/assets/McpQueryDetailPage-Czsmovqw.js +0 -5
  338. package/dashboard/dist/assets/McpQueryDetailPage-Czsmovqw.js.map +0 -1
  339. package/dashboard/dist/assets/RolesPage-kH-Njt25.js +0 -2
  340. package/dashboard/dist/assets/SwimlaneTimeline-Cfe-xQRX.js +0 -2
  341. package/dashboard/dist/assets/SwimlaneTimeline-Cfe-xQRX.js.map +0 -1
  342. package/dashboard/dist/assets/YamlWorkflowsPage-BICF0fRO.js +0 -2
  343. package/dashboard/dist/assets/YamlWorkflowsPage-BICF0fRO.js.map +0 -1
  344. package/dashboard/dist/assets/helpers-rMEcLwKs.js +0 -2
  345. package/dashboard/dist/assets/helpers-rMEcLwKs.js.map +0 -1
  346. package/dashboard/dist/assets/index-ABcJHHlN.js +0 -5
  347. package/dashboard/dist/assets/index-ABcJHHlN.js.map +0 -1
  348. package/dashboard/dist/assets/index-B91h_jZ0.js +0 -15
  349. package/dashboard/dist/assets/index-B91h_jZ0.js.map +0 -1
  350. package/dashboard/dist/assets/index-C1E5GTs9.js +0 -2
  351. package/dashboard/dist/assets/index-C1E5GTs9.js.map +0 -1
  352. package/dashboard/dist/assets/index-C90ZPzXk.js +0 -2
  353. package/dashboard/dist/assets/index-Cmgrk7PQ.js.map +0 -1
  354. package/dashboard/dist/assets/index-DeX-ezqf.css +0 -1
  355. package/dashboard/dist/assets/index-K40Qw1tk.js +0 -2
  356. package/dashboard/dist/assets/index-lCyNr5Xk.js +0 -2
  357. package/dashboard/dist/assets/index-lCyNr5Xk.js.map +0 -1
  358. package/dashboard/dist/assets/useEventHooks-BHMbzR_y.js +0 -2
  359. package/dashboard/dist/assets/useYamlActivityEvents-D56KV14X.js +0 -2
  360. package/dashboard/dist/assets/vendor-icons-AFGxSeQS.js.map +0 -1
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ /**
3
+ * Lightweight regex-based metadata extractor for durable workflow source.
4
+ *
5
+ * Extracts structural hints (activity names, primitives, control flow)
6
+ * that ground the LLM during compilation. This is NOT a full AST parser —
7
+ * it gives the LLM better context without requiring ts-morph or the TS compiler API.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.extractDurableMetadata = extractDurableMetadata;
11
+ /**
12
+ * Extract structural metadata from durable workflow TypeScript source.
13
+ */
14
+ function extractDurableMetadata(source, workflowFunctionName) {
15
+ return {
16
+ workflowFunctionName,
17
+ activityNames: extractActivityNames(source),
18
+ durablePrimitives: extractDurablePrimitives(source),
19
+ envelopeFields: extractEnvelopeFields(source),
20
+ activityImports: extractActivityImports(source),
21
+ hasForLoop: /\bfor\s*\(/.test(source) || /\.forEach\(/.test(source),
22
+ hasPromiseAll: /Promise\.all/.test(source),
23
+ hasConditionalBranch: /\bif\s*\(/.test(source),
24
+ hasEscalation: /type:\s*['"]escalation['"]/.test(source),
25
+ };
26
+ }
27
+ /**
28
+ * Extract activity function names from proxyActivities destructuring.
29
+ *
30
+ * Matches patterns like:
31
+ * const { greet, fetchData } = Durable.workflow.proxyActivities<T>({ ... });
32
+ */
33
+ function extractActivityNames(source) {
34
+ const names = [];
35
+ // Match destructured names from proxyActivities assignments
36
+ const proxyPattern = /(?:const|let)\s*\{\s*([^}]+)\}\s*=\s*(?:Durable\.workflow\.)?proxyActivities/g;
37
+ let match;
38
+ while ((match = proxyPattern.exec(source)) !== null) {
39
+ const destructured = match[1];
40
+ for (const name of destructured.split(',')) {
41
+ const trimmed = name.trim();
42
+ if (trimmed)
43
+ names.push(trimmed);
44
+ }
45
+ }
46
+ return names;
47
+ }
48
+ /**
49
+ * Extract Durable.workflow.* primitive calls.
50
+ */
51
+ function extractDurablePrimitives(source) {
52
+ const primitives = [];
53
+ const seen = new Set();
54
+ // Durable.workflow.sleep, condition, startChild, workflowInfo, etc.
55
+ const durablePattern = /Durable\.workflow\.(\w+)/g;
56
+ let match;
57
+ while ((match = durablePattern.exec(source)) !== null) {
58
+ const prim = match[1];
59
+ if (prim !== 'proxyActivities' && !seen.has(prim)) {
60
+ seen.add(prim);
61
+ primitives.push(prim);
62
+ }
63
+ }
64
+ // conditionLT (LT-specific wrapper)
65
+ if (/conditionLT/.test(source) && !seen.has('conditionLT')) {
66
+ primitives.push('conditionLT');
67
+ }
68
+ // executeLT (orchestrator wrapper)
69
+ if (/executeLT/.test(source) && !seen.has('executeLT')) {
70
+ primitives.push('executeLT');
71
+ }
72
+ return primitives;
73
+ }
74
+ /**
75
+ * Extract envelope field names from data destructuring.
76
+ *
77
+ * Matches patterns like:
78
+ * const { message, role } = envelope.data;
79
+ * const { productName, stations } = envelope.data as { ... };
80
+ */
81
+ function extractEnvelopeFields(source) {
82
+ const fields = [];
83
+ const envelopePattern = /(?:const|let)\s*\{\s*([^}]+)\}\s*=\s*envelope\.data/g;
84
+ let match;
85
+ while ((match = envelopePattern.exec(source)) !== null) {
86
+ const destructured = match[1];
87
+ for (const field of destructured.split(',')) {
88
+ // Strip defaults and type annotations
89
+ const name = field.trim().split(/\s*[=:]/)[0].trim();
90
+ if (name)
91
+ fields.push(name);
92
+ }
93
+ }
94
+ return fields;
95
+ }
96
+ /**
97
+ * Extract import paths for activity modules.
98
+ *
99
+ * Matches: import * as activities from './activities';
100
+ * import * as interceptorActivities from '../../../services/interceptor/activities';
101
+ */
102
+ function extractActivityImports(source) {
103
+ const imports = [];
104
+ const importPattern = /import\s+\*\s+as\s+\w+\s+from\s+['"]([^'"]+)['"]/g;
105
+ let match;
106
+ while ((match = importPattern.exec(source)) !== null) {
107
+ imports.push(match[1]);
108
+ }
109
+ return imports;
110
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * System prompt for the durable-to-YAML compiler.
3
+ *
4
+ * Teaches the LLM how to convert procedural durable TypeScript workflows
5
+ * (Temporal-like API via HotMesh Durable) into equivalent YAML DAGs.
6
+ */
7
+ import type { DurableSourceMetadata } from './types';
8
+ /**
9
+ * Build the system prompt for durable→YAML compilation.
10
+ *
11
+ * @param activityTypesRef - Full activity-types.md reference content
12
+ * @param metadata - Parsed metadata from the source workflow
13
+ */
14
+ export declare function DURABLE_COMPILER_SYSTEM_PROMPT(activityTypesRef: string, metadata: DurableSourceMetadata): string;
15
+ /**
16
+ * Build the user message containing the source code and context.
17
+ */
18
+ export declare function buildUserMessage(source: string, metadata: DurableSourceMetadata, activitiesSource?: string): string;
@@ -0,0 +1,570 @@
1
+ "use strict";
2
+ /**
3
+ * System prompt for the durable-to-YAML compiler.
4
+ *
5
+ * Teaches the LLM how to convert procedural durable TypeScript workflows
6
+ * (Temporal-like API via HotMesh Durable) into equivalent YAML DAGs.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.DURABLE_COMPILER_SYSTEM_PROMPT = DURABLE_COMPILER_SYSTEM_PROMPT;
10
+ exports.buildUserMessage = buildUserMessage;
11
+ /**
12
+ * Build the system prompt for durable→YAML compilation.
13
+ *
14
+ * @param activityTypesRef - Full activity-types.md reference content
15
+ * @param metadata - Parsed metadata from the source workflow
16
+ */
17
+ function DURABLE_COMPILER_SYSTEM_PROMPT(activityTypesRef, metadata) {
18
+ const primitivesUsed = metadata.durablePrimitives.length
19
+ ? `Detected primitives: ${metadata.durablePrimitives.join(', ')}`
20
+ : 'No Durable primitives detected (simple activity-only workflow)';
21
+ return `You are a HotMesh YAML compiler. Your job is to convert procedural durable TypeScript workflows into equivalent HotMesh YAML DAGs that produce the same behavior without the replay overhead.
22
+
23
+ The input is a TypeScript workflow that uses HotMesh's Durable API (Temporal-like). The output is a deterministic YAML DAG that achieves the same orchestration using HotMesh's native activity types.
24
+
25
+ ${primitivesUsed}
26
+
27
+ ## HotMesh YAML Structure
28
+
29
+ A workflow is a YAML document with this shape:
30
+
31
+ \`\`\`yaml
32
+ app:
33
+ id: longtail
34
+ version: '1'
35
+ graphs:
36
+ - subscribes: <workflow-topic>
37
+ expire: 432000
38
+ input:
39
+ schema:
40
+ type: object
41
+ properties:
42
+ <trigger inputs the user provides at runtime>
43
+ required: [<required input keys>]
44
+ output:
45
+ schema:
46
+ type: object
47
+ activities:
48
+ <activity definitions>
49
+ transitions:
50
+ <activity-id>:
51
+ - to: <next-activity-id>
52
+ hooks:
53
+ <signal-topic>:
54
+ - to: <hook-activity-id>
55
+ conditions:
56
+ match:
57
+ - expected: '{$job.metadata.jid}'
58
+ actual: '{$self.hook.data.job_id}'
59
+ \`\`\`
60
+
61
+ ## HotMesh Activity Types
62
+
63
+ ${activityTypesRef}
64
+
65
+ ## Data Mapping Rules
66
+
67
+ ### Simple reference (wire one activity's output to another's input):
68
+ \`\`\`yaml
69
+ field_name: '{sourceActivity.output.data.fieldName}'
70
+ \`\`\`
71
+
72
+ ### Trigger data reference:
73
+ \`\`\`yaml
74
+ field_name: '{trigger_xxxx.output.data.fieldName}'
75
+ \`\`\`
76
+
77
+ ### @pipe — Reverse Polish Notation (operands THEN operator)
78
+
79
+ @pipe uses stack-machine / RPN evaluation. ALL operands for a function must appear on the single row ABOVE the function row.
80
+
81
+ \`\`\`yaml
82
+ field_name:
83
+ '@pipe':
84
+ - ['{source.output.data.value}', '-suffix'] # operands
85
+ - ['{@string.concat}'] # operator
86
+ \`\`\`
87
+
88
+ ### Three mapping directions per activity:
89
+ - **input.maps**: Wire data INTO this activity from trigger or upstream activities
90
+ - **output.maps**: Transform this activity's own output before downstream consumption
91
+ - **job.maps**: Promote data to shared workflow state (use on LAST activity for workflow result)
92
+
93
+ ## Construction Rules
94
+
95
+ 1. **Trigger first**: Every workflow starts with a trigger activity
96
+ 2. **Collision-proof activity IDs**: Use a descriptive name with a shared 4-char random suffix: \`trigger_x8kf\`, \`greet_x8kf\`, \`fetch_x8kf\`. Same suffix for all activities in one workflow.
97
+ 3. **workflowName**: Every worker MUST have \`workflowName: '<activity_function_name>'\` in its input.maps — this routes to the correct handler
98
+ 4. **_scope threading**: Every worker MUST have \`_scope: '{trigger_xxxx.output.data._scope}'\` for IAM context
99
+ 5. **Wire outputs forward**: Use \`{prevActivity.output.data.fieldName}\` to pass data between steps
100
+ 6. **job.maps on last activity**: The final activity should have job.maps to promote output fields to the workflow result
101
+ 7. **Linear transitions**: Chain activities with transitions unless branching or iteration is needed
102
+
103
+ ## Durable Primitive → YAML Mapping
104
+
105
+ Convert each durable primitive to its YAML equivalent:
106
+
107
+ ### proxyActivities + activity call → worker
108
+ Each proxied activity call becomes a worker activity:
109
+ \`\`\`yaml
110
+ greet_x8kf:
111
+ type: worker
112
+ topic: <subscribes-topic>
113
+ input:
114
+ schema:
115
+ type: object
116
+ maps:
117
+ _scope: '{trigger_x8kf.output.data._scope}'
118
+ workflowName: greet
119
+ name: '{trigger_x8kf.output.data.name}'
120
+ output:
121
+ schema:
122
+ type: object
123
+ \`\`\`
124
+
125
+ ### Durable.workflow.sleep('N seconds') → hook with sleep
126
+ \`\`\`yaml
127
+ delay_x8kf:
128
+ type: hook
129
+ sleep: <N>
130
+ \`\`\`
131
+
132
+ ### Durable.workflow.condition(signalId) → hook (web hook mode)
133
+ \`\`\`yaml
134
+ wait_signal_x8kf:
135
+ type: hook
136
+ hook:
137
+ type: object
138
+ properties:
139
+ job_id: { type: string }
140
+ <payload fields>: { type: <type> }
141
+ output:
142
+ schema:
143
+ type: object
144
+ job:
145
+ maps:
146
+ <field>: '{$self.hook.data.<field>}'
147
+ \`\`\`
148
+ Plus a hooks section entry:
149
+ \`\`\`yaml
150
+ hooks:
151
+ <signal-topic>:
152
+ - to: wait_signal_x8kf
153
+ conditions:
154
+ match:
155
+ - expected: '{$job.metadata.jid}'
156
+ actual: '{$self.hook.data.job_id}'
157
+ \`\`\`
158
+
159
+ ### Escalation pattern (return { type: 'escalation' }) → 3-step pattern
160
+ When a workflow creates an escalation and waits for human resolution:
161
+ \`\`\`yaml
162
+ # Step 1: Create escalation
163
+ esc_x8kf:
164
+ type: worker
165
+ topic: <subscribes-topic>
166
+ input:
167
+ maps:
168
+ _scope: '{trigger_x8kf.output.data._scope}'
169
+ workflowName: escalate_and_wait
170
+ title: '<escalation title>'
171
+ message: '<escalation message>'
172
+ role: '<role>'
173
+ data:
174
+ <context fields>: '{trigger_x8kf.output.data.<field>}'
175
+
176
+ # Step 2: Wait for signal
177
+ wait_x8kf:
178
+ type: hook
179
+ hook:
180
+ type: object
181
+ properties:
182
+ job_id: { type: string }
183
+ escalationId: { type: string }
184
+ approved: { type: boolean }
185
+ output:
186
+ schema:
187
+ type: object
188
+
189
+ # Step 3: Resolve escalation
190
+ resolve_x8kf:
191
+ type: worker
192
+ topic: <subscribes-topic>
193
+ input:
194
+ maps:
195
+ _scope: '{trigger_x8kf.output.data._scope}'
196
+ workflowName: claim_and_resolve
197
+ escalation_id: '{wait_x8kf.hook.data.escalationId}'
198
+ resolver_id: workflow
199
+ payload:
200
+ approved: '{wait_x8kf.hook.data.approved}'
201
+ \`\`\`
202
+ Transitions: esc → wait, wait → [resolve, next_step]
203
+ Hook routing: signal topic → wait activity with job_id matching
204
+
205
+ ### Durable.workflow.startChild (fire-and-forget) + condition → await
206
+ When parent spawns a child and waits for completion:
207
+ \`\`\`yaml
208
+ child_x8kf:
209
+ type: await
210
+ topic: <child-workflow-subscribes-topic>
211
+ await: true
212
+ input:
213
+ schema:
214
+ type: object
215
+ maps:
216
+ <child inputs>: '{trigger_x8kf.output.data.<field>}'
217
+ output:
218
+ schema:
219
+ type: object
220
+ job:
221
+ maps:
222
+ <result field>: '{$self.output.data.<field>}'
223
+ \`\`\`
224
+ If fire-and-forget (no wait): use \`await: false\`.
225
+
226
+ ### Promise.all([a(), b()]) → parallel transitions
227
+ One activity transitions to multiple workers simultaneously:
228
+ \`\`\`yaml
229
+ transitions:
230
+ prior_step_x8kf:
231
+ - to: fetch_a_x8kf
232
+ - to: fetch_b_x8kf
233
+ \`\`\`
234
+
235
+ ### for loop over dynamic array → 4-activity cycle pattern
236
+
237
+ For loops over arrays that are determined at runtime, use the four-activity cycle pattern: **pivot → worker → cycle → done**.
238
+
239
+ IMPORTANT: Do NOT use bracket notation for array access. Use \`@pipe\` with \`@array.get\`.
240
+
241
+ \`\`\`yaml
242
+ # 1. PIVOT — initializes the iteration (hook with cycle: true)
243
+ pivot_x8kf:
244
+ type: hook
245
+ cycle: true
246
+ output:
247
+ maps:
248
+ index: 0
249
+ items: '{prior_step_x8kf.output.data.list}'
250
+
251
+ # 2. WORKER — processes one item per iteration
252
+ do_work_x8kf:
253
+ type: worker
254
+ topic: <subscribes-topic>
255
+ input:
256
+ schema:
257
+ type: object
258
+ maps:
259
+ _scope: '{trigger_x8kf.output.data._scope}'
260
+ workflowName: <activity-function-name>
261
+ # Extract current item from array using @pipe + @array.get
262
+ item:
263
+ '@pipe':
264
+ - ['{pivot_x8kf.output.data.items}', '{pivot_x8kf.output.data.index}']
265
+ - ['{@array.get}']
266
+ # To extract a specific field from the current item:
267
+ # fieldName:
268
+ # '@pipe':
269
+ # - ['{pivot_x8kf.output.data.items}', '{pivot_x8kf.output.data.index}']
270
+ # - ['{@array.get}']
271
+ # - ['{@object.get}', 'fieldName']
272
+ output:
273
+ schema:
274
+ type: object
275
+ job:
276
+ maps:
277
+ lastResult: '{$self.output.data.result}'
278
+
279
+ # 3. CYCLE — increments index and loops back to pivot
280
+ next_x8kf:
281
+ type: cycle
282
+ ancestor: pivot_x8kf
283
+ input:
284
+ maps:
285
+ index:
286
+ '@pipe':
287
+ - ['{pivot_x8kf.output.data.index}', 1]
288
+ - ['{@math.add}']
289
+
290
+ # 4. DONE — exit point after iteration completes
291
+ done_x8kf:
292
+ type: hook
293
+ \`\`\`
294
+
295
+ Transitions with exit condition (loop while next index < array length):
296
+ \`\`\`yaml
297
+ transitions:
298
+ pivot_x8kf:
299
+ - to: do_work_x8kf
300
+ do_work_x8kf:
301
+ - to: next_x8kf
302
+ conditions:
303
+ match:
304
+ - expected: true
305
+ actual:
306
+ '@pipe':
307
+ - ['{pivot_x8kf.output.data.index}', 1]
308
+ - ['{@math.add}']
309
+ - ['{pivot_x8kf.output.data.items}']
310
+ - ['{@array.length}']
311
+ - ['{@conditional.less_than}']
312
+ - to: done_x8kf
313
+ \`\`\`
314
+
315
+ Key rules for cycles:
316
+ - The pivot MUST be \`type: hook\` with \`cycle: true\`
317
+ - The cycle activity's \`ancestor\` MUST reference the pivot
318
+ - Each iteration runs in an isolated dimension — activity output resets per loop
319
+ - Only \`job.maps\` accumulates across iterations (use for collecting results)
320
+ - NEVER use bracket syntax \`items[index]\` — always use \`@pipe\` with \`@array.get\`
321
+ - The exit condition compares \`(index + 1) < items.length\` using \`@conditional.less_than\`
322
+ - The done hook is required as the exit target
323
+
324
+ ### for loop (bounded/small) → unrolled workers
325
+ For static, small loops (2-3 iterations known at compile time), unroll each iteration as a separate worker activity. Simpler and more explicit.
326
+
327
+ ### if/else → conditional transitions
328
+ \`\`\`yaml
329
+ transitions:
330
+ check_x8kf:
331
+ - to: branch_a_x8kf
332
+ conditions:
333
+ match:
334
+ - expected: true
335
+ actual: '{check_x8kf.output.data.shouldBranch}'
336
+ - to: branch_b_x8kf
337
+ \`\`\`
338
+
339
+ ## Few-Shot Example
340
+
341
+ ### Input: basicEcho durable workflow
342
+ \`\`\`typescript
343
+ export async function basicEcho(envelope: LTEnvelope): Promise<any> {
344
+ const { message = 'Hello', sleepSeconds = 1 } = envelope.data;
345
+ await Durable.workflow.sleep(\`\${sleepSeconds} seconds\`);
346
+ const echoResult = await echo({ message });
347
+ return {
348
+ type: 'return' as const,
349
+ data: { ...echoResult, userId: envelope.lt?.userId }
350
+ };
351
+ }
352
+ \`\`\`
353
+
354
+ ### Output: equivalent YAML
355
+ \`\`\`yaml
356
+ app:
357
+ id: longtail
358
+ version: '1'
359
+ graphs:
360
+ - subscribes: basic.echo
361
+ expire: 300
362
+ input:
363
+ schema:
364
+ type: object
365
+ properties:
366
+ message:
367
+ type: string
368
+ sleepSeconds:
369
+ type: number
370
+ output:
371
+ schema:
372
+ type: object
373
+ activities:
374
+ trigger_e4rk:
375
+ type: trigger
376
+ output:
377
+ schema:
378
+ type: object
379
+ delay_e4rk:
380
+ type: hook
381
+ sleep: '{trigger_e4rk.output.data.sleepSeconds}'
382
+ echo_e4rk:
383
+ type: worker
384
+ topic: basic.echo
385
+ input:
386
+ schema:
387
+ type: object
388
+ maps:
389
+ _scope: '{trigger_e4rk.output.data._scope}'
390
+ workflowName: echo
391
+ message: '{trigger_e4rk.output.data.message}'
392
+ output:
393
+ schema:
394
+ type: object
395
+ job:
396
+ maps:
397
+ message: '{$self.output.data.message}'
398
+ echoedAt: '{$self.output.data.echoedAt}'
399
+ transitions:
400
+ trigger_e4rk:
401
+ - to: delay_e4rk
402
+ delay_e4rk:
403
+ - to: echo_e4rk
404
+ \`\`\`
405
+
406
+ ### Input: iteration durable workflow (for loop over array)
407
+ \`\`\`typescript
408
+ export async function batchProcess(envelope: LTEnvelope): Promise<any> {
409
+ const { items } = envelope.data;
410
+ const results = [];
411
+ for (const item of items) {
412
+ const result = await processItem({ name: item.name, value: item.value });
413
+ results.push(result);
414
+ }
415
+ return { type: 'return' as const, data: { results, count: results.length } };
416
+ }
417
+ \`\`\`
418
+
419
+ ### Output: equivalent YAML with cycle pattern
420
+ \`\`\`yaml
421
+ app:
422
+ id: longtail
423
+ version: '1'
424
+ graphs:
425
+ - subscribes: batch.process
426
+ expire: 432000
427
+ input:
428
+ schema:
429
+ type: object
430
+ properties:
431
+ items:
432
+ type: array
433
+ items:
434
+ type: object
435
+ required: [items]
436
+ output:
437
+ schema:
438
+ type: object
439
+ activities:
440
+ trigger_k9pm:
441
+ type: trigger
442
+ output:
443
+ schema:
444
+ type: object
445
+ pivot_k9pm:
446
+ type: hook
447
+ cycle: true
448
+ output:
449
+ maps:
450
+ index: 0
451
+ items: '{trigger_k9pm.output.data.items}'
452
+ process_k9pm:
453
+ type: worker
454
+ topic: batch.process
455
+ input:
456
+ schema:
457
+ type: object
458
+ maps:
459
+ _scope: '{trigger_k9pm.output.data._scope}'
460
+ workflowName: processItem
461
+ name:
462
+ '@pipe':
463
+ - ['{pivot_k9pm.output.data.items}', '{pivot_k9pm.output.data.index}']
464
+ - ['{@array.get}']
465
+ - ['{@object.get}', 'name']
466
+ value:
467
+ '@pipe':
468
+ - ['{pivot_k9pm.output.data.items}', '{pivot_k9pm.output.data.index}']
469
+ - ['{@array.get}']
470
+ - ['{@object.get}', 'value']
471
+ output:
472
+ schema:
473
+ type: object
474
+ job:
475
+ maps:
476
+ lastResult: '{$self.output.data}'
477
+ cycle_k9pm:
478
+ type: cycle
479
+ ancestor: pivot_k9pm
480
+ input:
481
+ maps:
482
+ index:
483
+ '@pipe':
484
+ - ['{pivot_k9pm.output.data.index}', 1]
485
+ - ['{@math.add}']
486
+ done_k9pm:
487
+ type: hook
488
+ job:
489
+ maps:
490
+ count: '{pivot_k9pm.output.data.items}'
491
+ transitions:
492
+ trigger_k9pm:
493
+ - to: pivot_k9pm
494
+ pivot_k9pm:
495
+ - to: process_k9pm
496
+ process_k9pm:
497
+ - to: cycle_k9pm
498
+ conditions:
499
+ match:
500
+ - expected: true
501
+ actual:
502
+ '@pipe':
503
+ - ['{pivot_k9pm.output.data.index}', 1]
504
+ - ['{@math.add}']
505
+ - ['{pivot_k9pm.output.data.items}']
506
+ - ['{@array.length}']
507
+ - ['{@conditional.less_than}']
508
+ - to: done_k9pm
509
+ \`\`\`
510
+
511
+ ## Output Format
512
+
513
+ Return a JSON object (no markdown fences, no commentary):
514
+ {
515
+ "name": "<workflow-topic matching subscribes>",
516
+ "description": "<what this workflow does>",
517
+ "yaml": "<the complete YAML string>",
518
+ "input_schema": { <JSON Schema for trigger inputs> },
519
+ "output_schema": { <JSON Schema for workflow output> },
520
+ "activity_manifest": [
521
+ {
522
+ "activity_id": "<id>",
523
+ "title": "<human-readable title>",
524
+ "type": "trigger|worker|hook|await|cycle|signal|interrupt",
525
+ "tool_source": "trigger|durable|signal",
526
+ "topic": "<subscribes-topic>",
527
+ "workflow_name": "<activity function name if worker>",
528
+ "input_mappings": {},
529
+ "output_fields": []
530
+ }
531
+ ],
532
+ "tags": ["durable", "<relevant-tags>"],
533
+ "sample_inputs": { <example trigger values for testing> }
534
+ }
535
+
536
+ CRITICAL RULES:
537
+ - The "name" field MUST match the "subscribes" topic in the YAML exactly
538
+ - Every worker MUST have workflowName and _scope in input.maps
539
+ - Activity IDs all share the same 4-char random suffix
540
+ - Use the exact activity function names from the source as workflowName values
541
+ - Map envelope.data fields to trigger input schema properties
542
+ - Preserve the data flow: if activity A's result is used as input to activity B, wire it via maps
543
+ - NEVER use bracket notation for array access — always use @pipe with @array.get
544
+ - For loops over arrays MUST use the 4-activity cycle pattern: pivot (hook+cycle:true) → worker → cycle → done (hook)
545
+ - The cycle's ancestor MUST reference the pivot hook, never a worker
546
+ - Only job.maps accumulates across iterations — activity output is isolated per iteration`;
547
+ }
548
+ /**
549
+ * Build the user message containing the source code and context.
550
+ */
551
+ function buildUserMessage(source, metadata, activitiesSource) {
552
+ const parts = [
553
+ `Compile the following durable workflow function \`${metadata.workflowFunctionName}\` into a HotMesh YAML DAG.`,
554
+ '',
555
+ '## Workflow Source',
556
+ '```typescript',
557
+ source,
558
+ '```',
559
+ ];
560
+ if (activitiesSource) {
561
+ parts.push('', '## Activities Module (side-effect functions called by the workflow)', '```typescript', activitiesSource, '```');
562
+ }
563
+ if (metadata.activityNames.length) {
564
+ parts.push('', `## Detected Activities: ${metadata.activityNames.join(', ')}`);
565
+ }
566
+ if (metadata.envelopeFields.length) {
567
+ parts.push('', `## Envelope Input Fields: ${metadata.envelopeFields.join(', ')}`);
568
+ }
569
+ return parts.join('\n');
570
+ }