@hotmeshio/long-tail 0.1.13 → 0.1.15

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 (424) 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 +16 -0
  19. package/build/api/files.js +61 -0
  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/mcp-runs.d.ts +2 -0
  29. package/build/api/mcp-runs.js +2 -0
  30. package/build/api/settings.js +9 -1
  31. package/build/api/workflow-sets.d.ts +11 -0
  32. package/build/api/workflow-sets.js +62 -0
  33. package/build/api/workflows/config.d.ts +64 -0
  34. package/build/api/workflows/config.js +142 -0
  35. package/build/api/workflows/discovery.d.ts +29 -0
  36. package/build/api/workflows/discovery.js +153 -0
  37. package/build/api/workflows/index.d.ts +3 -0
  38. package/build/api/workflows/index.js +18 -0
  39. package/build/api/workflows/invocation.d.ts +67 -0
  40. package/build/api/workflows/invocation.js +188 -0
  41. package/build/api/yaml-workflows/cron.d.ts +39 -0
  42. package/build/api/yaml-workflows/cron.js +127 -0
  43. package/build/api/{yaml-workflows.d.ts → yaml-workflows/crud.d.ts} +22 -137
  44. package/build/api/{yaml-workflows.js → yaml-workflows/crud.js} +86 -358
  45. package/build/api/yaml-workflows/deploy.d.ts +71 -0
  46. package/build/api/yaml-workflows/deploy.js +223 -0
  47. package/build/api/yaml-workflows/helpers.d.ts +2 -0
  48. package/build/api/yaml-workflows/helpers.js +8 -0
  49. package/build/api/yaml-workflows/index.d.ts +4 -0
  50. package/build/api/yaml-workflows/index.js +27 -0
  51. package/build/api/yaml-workflows/versions.d.ts +43 -0
  52. package/build/api/yaml-workflows/versions.js +124 -0
  53. package/build/bin/ltc.d.ts +2 -0
  54. package/build/bin/ltc.js +220 -0
  55. package/build/examples/seed-data.d.ts +55 -0
  56. package/build/examples/seed-data.js +161 -0
  57. package/build/examples/seed.js +7 -164
  58. package/build/lib/cli/auth.d.ts +23 -0
  59. package/build/lib/cli/auth.js +167 -0
  60. package/build/lib/cli/client.d.ts +6 -0
  61. package/build/lib/cli/client.js +31 -0
  62. package/build/lib/cli/commands/escalations.d.ts +19 -0
  63. package/build/lib/cli/commands/escalations.js +69 -0
  64. package/build/lib/cli/commands/knowledge.d.ts +18 -0
  65. package/build/lib/cli/commands/knowledge.js +87 -0
  66. package/build/lib/cli/commands/mcp.d.ts +8 -0
  67. package/build/lib/cli/commands/mcp.js +33 -0
  68. package/build/lib/cli/commands/pipelines.d.ts +16 -0
  69. package/build/lib/cli/commands/pipelines.js +67 -0
  70. package/build/lib/cli/commands/status.d.ts +1 -0
  71. package/build/lib/cli/commands/status.js +28 -0
  72. package/build/lib/cli/commands/users.d.ts +7 -0
  73. package/build/lib/cli/commands/users.js +25 -0
  74. package/build/lib/cli/commands/workflows.d.ts +16 -0
  75. package/build/lib/cli/commands/workflows.js +104 -0
  76. package/build/lib/cli/compile.d.ts +2 -0
  77. package/build/lib/cli/compile.js +165 -0
  78. package/build/lib/cli/format.d.ts +23 -0
  79. package/build/lib/cli/format.js +94 -0
  80. package/build/lib/cli/init.d.ts +1 -0
  81. package/build/lib/cli/init.js +61 -0
  82. package/build/lib/cli/output.d.ts +27 -0
  83. package/build/lib/cli/output.js +126 -0
  84. package/build/lib/cli/scanner.d.ts +10 -0
  85. package/build/lib/cli/scanner.js +164 -0
  86. package/build/lib/cli/types.d.ts +16 -0
  87. package/build/lib/cli/types.js +2 -0
  88. package/build/lib/logger/index.d.ts +0 -9
  89. package/build/lib/logger/index.js +9 -4
  90. package/build/lib/storage/index.js +2 -2
  91. package/build/lib/storage/local.d.ts +15 -0
  92. package/build/lib/storage/local.js +63 -0
  93. package/build/lib/storage/mime.d.ts +4 -0
  94. package/build/lib/storage/mime.js +31 -0
  95. package/build/lib/storage/s3.d.ts +16 -0
  96. package/build/lib/storage/s3.js +70 -0
  97. package/build/lib/storage/types.d.ts +18 -0
  98. package/build/modules/utils.d.ts +73 -0
  99. package/build/modules/utils.js +84 -0
  100. package/build/routes/file-browser.d.ts +2 -0
  101. package/build/routes/file-browser.js +126 -0
  102. package/build/routes/files.js +25 -17
  103. package/build/routes/index.js +4 -0
  104. package/build/routes/knowledge.d.ts +2 -0
  105. package/build/routes/knowledge.js +141 -0
  106. package/build/routes/mcp-runs.js +2 -0
  107. package/build/routes/workflow-sets.js +9 -0
  108. package/build/routes/yaml-workflows/crud.js +9 -0
  109. package/build/routes/yaml-workflows/deployment.js +8 -0
  110. package/build/sdk/index.d.ts +17 -0
  111. package/build/sdk/index.js +19 -0
  112. package/build/services/insight/index.d.ts +13 -0
  113. package/build/services/insight/index.js +4 -7
  114. package/build/services/insight/prompts.d.ts +1 -1
  115. package/build/services/insight/prompts.js +1 -1
  116. package/build/services/mcp/client/connection-dispatch.d.ts +18 -0
  117. package/build/services/mcp/client/connection-dispatch.js +78 -0
  118. package/build/services/mcp/client/connection-lifecycle.d.ts +48 -0
  119. package/build/services/mcp/client/connection-lifecycle.js +296 -0
  120. package/build/services/mcp/client/connection-test.d.ts +10 -0
  121. package/build/services/mcp/client/connection-test.js +49 -0
  122. package/build/services/mcp/client/connection.d.ts +3 -68
  123. package/build/services/mcp/client/connection.js +15 -393
  124. package/build/services/mcp/server-lifecycle.d.ts +27 -0
  125. package/build/services/mcp/server-lifecycle.js +49 -0
  126. package/build/services/mcp/server-tools.d.ts +13 -0
  127. package/build/services/mcp/server-tools.js +287 -0
  128. package/build/services/mcp/server.d.ts +2 -26
  129. package/build/services/mcp/server.js +7 -315
  130. package/build/services/mcp-runs/queries.d.ts +2 -0
  131. package/build/services/mcp-runs/queries.js +11 -1
  132. package/build/services/mcp-runs/sql.d.ts +1 -1
  133. package/build/services/mcp-runs/sql.js +2 -2
  134. package/build/services/workflow-sets/db.d.ts +1 -0
  135. package/build/services/workflow-sets/db.js +6 -0
  136. package/build/services/workflow-sets/index.d.ts +1 -1
  137. package/build/services/workflow-sets/index.js +2 -1
  138. package/build/services/workflow-sets/sql.d.ts +1 -0
  139. package/build/services/workflow-sets/sql.js +6 -1
  140. package/build/services/yaml-workflow/builder-regenerate.d.ts +25 -0
  141. package/build/services/yaml-workflow/builder-regenerate.js +111 -0
  142. package/build/services/yaml-workflow/db-versions.d.ts +17 -0
  143. package/build/services/yaml-workflow/db-versions.js +76 -0
  144. package/build/services/yaml-workflow/db.d.ts +14 -12
  145. package/build/services/yaml-workflow/db.js +32 -70
  146. package/build/services/yaml-workflow/deployer-helpers.js +48 -17
  147. package/build/services/yaml-workflow/durable-compiler/index.d.ts +22 -0
  148. package/build/services/yaml-workflow/durable-compiler/index.js +168 -0
  149. package/build/services/yaml-workflow/durable-compiler/parser.d.ts +12 -0
  150. package/build/services/yaml-workflow/durable-compiler/parser.js +110 -0
  151. package/build/services/yaml-workflow/durable-compiler/prompts.d.ts +18 -0
  152. package/build/services/yaml-workflow/durable-compiler/prompts.js +570 -0
  153. package/build/services/yaml-workflow/durable-compiler/types.d.ts +51 -0
  154. package/build/services/yaml-workflow/durable-compiler/types.js +5 -0
  155. package/build/services/yaml-workflow/generator.js +4 -4
  156. package/build/services/yaml-workflow/pipeline/build/dag-assembly.d.ts +17 -0
  157. package/build/services/yaml-workflow/pipeline/build/dag-assembly.js +192 -0
  158. package/build/services/yaml-workflow/pipeline/build/dag.d.ts +4 -13
  159. package/build/services/yaml-workflow/pipeline/build/dag.js +9 -185
  160. package/build/services/yaml-workflow/pipeline/build/index.d.ts +2 -1
  161. package/build/services/yaml-workflow/pipeline/build/index.js +3 -2
  162. package/build/services/yaml-workflow/pipeline/build/utils.d.ts +0 -2
  163. package/build/services/yaml-workflow/pipeline/build/utils.js +0 -8
  164. package/build/services/yaml-workflow/pipeline/prompt-templates.d.ts +10 -0
  165. package/build/services/yaml-workflow/pipeline/prompt-templates.js +270 -0
  166. package/build/services/yaml-workflow/pipeline/prompts.d.ts +3 -6
  167. package/build/services/yaml-workflow/pipeline/prompts.js +8 -263
  168. package/build/services/yaml-workflow/sql.d.ts +2 -1
  169. package/build/services/yaml-workflow/sql.js +10 -3
  170. package/build/start/workers.js +6 -5
  171. package/build/system/activities/file-storage.d.ts +4 -0
  172. package/build/system/activities/file-storage.js +7 -1
  173. package/build/system/activities/knowledge.d.ts +23 -0
  174. package/build/system/activities/knowledge.js +50 -10
  175. package/build/system/activities/schema-exchange.d.ts +50 -0
  176. package/build/system/activities/schema-exchange.js +210 -0
  177. package/build/system/activities/sql.d.ts +4 -1
  178. package/build/system/activities/sql.js +37 -2
  179. package/build/system/index.js +1 -0
  180. package/build/system/mcp-servers/file-storage.js +3 -1
  181. package/build/system/mcp-servers/human-queue-schemas.d.ts +91 -0
  182. package/build/system/mcp-servers/human-queue-schemas.js +42 -0
  183. package/build/system/mcp-servers/human-queue.d.ts +2 -6
  184. package/build/system/mcp-servers/human-queue.js +9 -51
  185. package/build/system/mcp-servers/knowledge.js +69 -6
  186. package/build/system/mcp-servers/schema-exchange.d.ts +4 -0
  187. package/build/system/mcp-servers/schema-exchange.js +93 -0
  188. package/build/system/mcp-servers/workflow-compiler.js +54 -0
  189. package/build/system/seed/server-definitions.d.ts +112 -1
  190. package/build/system/seed/server-definitions.js +37 -0
  191. package/build/system/seed/tool-manifests-data.d.ts +87 -0
  192. package/build/system/seed/tool-manifests-data.js +37 -1
  193. package/build/system/seed/tool-manifests-knowledge.d.ts +9 -1
  194. package/build/system/seed/tool-manifests-knowledge.js +6 -5
  195. package/build/system/workflows/mcp-triage/activities-proxy.d.ts +21 -0
  196. package/build/system/workflows/mcp-triage/activities-proxy.js +70 -0
  197. package/build/system/workflows/mcp-triage/index.js +17 -75
  198. package/build/system/workflows/mcp-workflow-builder/prompts.d.ts +1 -1
  199. package/build/system/workflows/mcp-workflow-builder/prompts.js +21 -20
  200. package/build/system/workflows/mcp-workflow-planner/activities/persist.d.ts +2 -1
  201. package/build/system/workflows/mcp-workflow-planner/activities/persist.js +4 -3
  202. package/build/system/workflows/mcp-workflow-planner/index.js +41 -5
  203. package/build/system/workflows/mcp-workflow-planner/prompts.d.ts +1 -1
  204. package/build/system/workflows/mcp-workflow-planner/prompts.js +3 -3
  205. package/build/tsconfig.tsbuildinfo +1 -1
  206. package/dashboard/dist/assets/{AdminDashboard-DUrSBQOl.js → AdminDashboard-NLryl1_B.js} +2 -2
  207. package/dashboard/dist/assets/{AdminDashboard-DUrSBQOl.js.map → AdminDashboard-NLryl1_B.js.map} +1 -1
  208. package/dashboard/dist/assets/AvailableEscalationsPage-6vexlrk3.js +2 -0
  209. package/dashboard/dist/assets/AvailableEscalationsPage-6vexlrk3.js.map +1 -0
  210. package/dashboard/dist/assets/{BotPicker-Cg5iNEkm.js → BotPicker-DWhn0tr1.js} +2 -2
  211. package/dashboard/dist/assets/{BotPicker-Cg5iNEkm.js.map → BotPicker-DWhn0tr1.js.map} +1 -1
  212. package/dashboard/dist/assets/{CollapsibleSection-Kd9UIyeU.js → CollapsibleSection-CgYgQiOc.js} +2 -2
  213. package/dashboard/dist/assets/{CollapsibleSection-Kd9UIyeU.js.map → CollapsibleSection-CgYgQiOc.js.map} +1 -1
  214. package/dashboard/dist/assets/{ConfirmDeleteModal-DZMgmlof.js → ConfirmDeleteModal-DCKAPXD3.js} +2 -2
  215. package/dashboard/dist/assets/{ConfirmDeleteModal-DZMgmlof.js.map → ConfirmDeleteModal-DCKAPXD3.js.map} +1 -1
  216. package/dashboard/dist/assets/{CopyableId-cPFTRm8q.js → CopyableId-DXkaAOYk.js} +2 -2
  217. package/dashboard/dist/assets/{CopyableId-cPFTRm8q.js.map → CopyableId-DXkaAOYk.js.map} +1 -1
  218. package/dashboard/dist/assets/CredentialsPage-B361BOfU.js +2 -0
  219. package/dashboard/dist/assets/{CredentialsPage-DJablIbs.js.map → CredentialsPage-B361BOfU.js.map} +1 -1
  220. package/dashboard/dist/assets/{CustomDurationPicker-NgIP6YDW.js → CustomDurationPicker-D2G1ldiF.js} +2 -2
  221. package/dashboard/dist/assets/{CustomDurationPicker-NgIP6YDW.js.map → CustomDurationPicker-D2G1ldiF.js.map} +1 -1
  222. package/dashboard/dist/assets/{DataTable-CTRhTAfT.js → DataTable-DXSUbA26.js} +2 -2
  223. package/dashboard/dist/assets/{DataTable-CTRhTAfT.js.map → DataTable-DXSUbA26.js.map} +1 -1
  224. package/dashboard/dist/assets/{ElapsedCell-HcSJ_MMs.js → ElapsedCell-CQGqkXP_.js} +2 -2
  225. package/dashboard/dist/assets/{ElapsedCell-HcSJ_MMs.js.map → ElapsedCell-CQGqkXP_.js.map} +1 -1
  226. package/dashboard/dist/assets/{EmptyState-joNbd4gg.js → EmptyState-Dep92Wkg.js} +2 -2
  227. package/dashboard/dist/assets/{EmptyState-joNbd4gg.js.map → EmptyState-Dep92Wkg.js.map} +1 -1
  228. package/dashboard/dist/assets/{EscalationsOverview-DpXDnQux.js → EscalationsOverview-DVEFVjs7.js} +2 -2
  229. package/dashboard/dist/assets/{EscalationsOverview-DpXDnQux.js.map → EscalationsOverview-DVEFVjs7.js.map} +1 -1
  230. package/dashboard/dist/assets/{EventTable-CYem3v8n.js → EventTable-BMJAPkMi.js} +2 -2
  231. package/dashboard/dist/assets/{EventTable-CYem3v8n.js.map → EventTable-BMJAPkMi.js.map} +1 -1
  232. package/dashboard/dist/assets/{FilterBar-BiO8SOzc.js → FilterBar-DbVbCzH2.js} +2 -2
  233. package/dashboard/dist/assets/{FilterBar-BiO8SOzc.js.map → FilterBar-DbVbCzH2.js.map} +1 -1
  234. package/dashboard/dist/assets/{ListToolbar-6yRDh2e9.js → ListToolbar-0XNuXj0M.js} +2 -2
  235. package/dashboard/dist/assets/{ListToolbar-6yRDh2e9.js.map → ListToolbar-0XNuXj0M.js.map} +1 -1
  236. package/dashboard/dist/assets/{McpOverview-CUgSxkQe.js → McpOverview-CeYnCzBN.js} +2 -2
  237. package/dashboard/dist/assets/{McpOverview-CUgSxkQe.js.map → McpOverview-CeYnCzBN.js.map} +1 -1
  238. package/dashboard/dist/assets/McpQueryDetailPage-t3qW3QNa.js +5 -0
  239. package/dashboard/dist/assets/McpQueryDetailPage-t3qW3QNa.js.map +1 -0
  240. package/dashboard/dist/assets/McpQueryPage-CfUcdzaj.js +2 -0
  241. package/dashboard/dist/assets/{McpQueryPage-lV6kfDG5.js.map → McpQueryPage-CfUcdzaj.js.map} +1 -1
  242. package/dashboard/dist/assets/McpRunDetailPage-CZtodW_Z.js +2 -0
  243. package/dashboard/dist/assets/McpRunDetailPage-CZtodW_Z.js.map +1 -0
  244. package/dashboard/dist/assets/McpRunsPage-Dzgq7HGt.js +2 -0
  245. package/dashboard/dist/assets/McpRunsPage-Dzgq7HGt.js.map +1 -0
  246. package/dashboard/dist/assets/{Modal-BuTvD0pz.js → Modal-yyhUeKoA.js} +2 -2
  247. package/dashboard/dist/assets/{Modal-BuTvD0pz.js.map → Modal-yyhUeKoA.js.map} +1 -1
  248. package/dashboard/dist/assets/OperatorDashboard-Ceh7OQtZ.js +2 -0
  249. package/dashboard/dist/assets/{OperatorDashboard-C9SSV96T.js.map → OperatorDashboard-Ceh7OQtZ.js.map} +1 -1
  250. package/dashboard/dist/assets/{PageHeader-BcTVF9ul.js → PageHeader-CZ9a8cpr.js} +2 -2
  251. package/dashboard/dist/assets/{PageHeader-BcTVF9ul.js.map → PageHeader-CZ9a8cpr.js.map} +1 -1
  252. package/dashboard/dist/assets/{PageHeaderWithStats-BI7JG5x6.js → PageHeaderWithStats-BJuNs5NM.js} +2 -2
  253. package/dashboard/dist/assets/{PageHeaderWithStats-BI7JG5x6.js.map → PageHeaderWithStats-BJuNs5NM.js.map} +1 -1
  254. package/dashboard/dist/assets/{PriorityBadge-DqVaOU65.js → PriorityBadge-BrPikMFy.js} +2 -2
  255. package/dashboard/dist/assets/{PriorityBadge-DqVaOU65.js.map → PriorityBadge-BrPikMFy.js.map} +1 -1
  256. package/dashboard/dist/assets/{ProcessDetailPage-hFMhf9qa.js → ProcessDetailPage-2miaYd8G.js} +2 -2
  257. package/dashboard/dist/assets/{ProcessDetailPage-hFMhf9qa.js.map → ProcessDetailPage-2miaYd8G.js.map} +1 -1
  258. package/dashboard/dist/assets/{ProcessesListPage-ByVoBCQ3.js → ProcessesListPage-DqpRDqjk.js} +2 -2
  259. package/dashboard/dist/assets/{ProcessesListPage-ByVoBCQ3.js.map → ProcessesListPage-DqpRDqjk.js.map} +1 -1
  260. package/dashboard/dist/assets/{RolePill-D9ZIkYiu.js → RolePill-DxbJMfJu.js} +2 -2
  261. package/dashboard/dist/assets/{RolePill-D9ZIkYiu.js.map → RolePill-DxbJMfJu.js.map} +1 -1
  262. package/dashboard/dist/assets/{RolesPage-SMedMuqa.js → RolesPage-CYHRo21-.js} +2 -2
  263. package/dashboard/dist/assets/{RolesPage-SMedMuqa.js.map → RolesPage-CYHRo21-.js.map} +1 -1
  264. package/dashboard/dist/assets/{RowActions-yDhwwDbU.js → RowActions-DurFwIwe.js} +2 -2
  265. package/dashboard/dist/assets/{RowActions-yDhwwDbU.js.map → RowActions-DurFwIwe.js.map} +1 -1
  266. package/dashboard/dist/assets/RunAsSelector-CNKraP6u.js +2 -0
  267. package/dashboard/dist/assets/RunAsSelector-CNKraP6u.js.map +1 -0
  268. package/dashboard/dist/assets/{StatCard-BrBnQFxh.js → StatCard-CKplpK3w.js} +2 -2
  269. package/dashboard/dist/assets/{StatCard-BrBnQFxh.js.map → StatCard-CKplpK3w.js.map} +1 -1
  270. package/dashboard/dist/assets/{StatusBadge-xgb-lZku.js → StatusBadge-Dm0V1dNN.js} +2 -2
  271. package/dashboard/dist/assets/{StatusBadge-xgb-lZku.js.map → StatusBadge-Dm0V1dNN.js.map} +1 -1
  272. package/dashboard/dist/assets/{StepIndicator-B9ps2SvM.js → StepIndicator-Dicx0WTZ.js} +2 -2
  273. package/dashboard/dist/assets/{StepIndicator-B9ps2SvM.js.map → StepIndicator-Dicx0WTZ.js.map} +1 -1
  274. package/dashboard/dist/assets/{StickyPagination-DTIjBKN3.js → StickyPagination-B2jYvU3-.js} +2 -2
  275. package/dashboard/dist/assets/{StickyPagination-DTIjBKN3.js.map → StickyPagination-B2jYvU3-.js.map} +1 -1
  276. package/dashboard/dist/assets/SwimlaneTimeline-ClwumkT1.js +2 -0
  277. package/dashboard/dist/assets/SwimlaneTimeline-ClwumkT1.js.map +1 -0
  278. package/dashboard/dist/assets/{TagInput-CdNUuqk4.js → TagInput-CypDZ6Kl.js} +2 -2
  279. package/dashboard/dist/assets/{TagInput-CdNUuqk4.js.map → TagInput-CypDZ6Kl.js.map} +1 -1
  280. package/dashboard/dist/assets/{TaskDetailPage-C-nzaNea.js → TaskDetailPage-DooDNJGT.js} +2 -2
  281. package/dashboard/dist/assets/{TaskDetailPage-C-nzaNea.js.map → TaskDetailPage-DooDNJGT.js.map} +1 -1
  282. package/dashboard/dist/assets/{TaskQueuePill-Lvr2-NzS.js → TaskQueuePill-C1hZ-j31.js} +2 -2
  283. package/dashboard/dist/assets/{TaskQueuePill-Lvr2-NzS.js.map → TaskQueuePill-C1hZ-j31.js.map} +1 -1
  284. package/dashboard/dist/assets/{TasksListPage-DSUmD84y.js → TasksListPage-D7CdkAeg.js} +2 -2
  285. package/dashboard/dist/assets/{TasksListPage-DSUmD84y.js.map → TasksListPage-D7CdkAeg.js.map} +1 -1
  286. package/dashboard/dist/assets/{TimeAgo-BZdLdrIh.js → TimeAgo-B5LXB2aj.js} +2 -2
  287. package/dashboard/dist/assets/{TimeAgo-BZdLdrIh.js.map → TimeAgo-B5LXB2aj.js.map} +1 -1
  288. package/dashboard/dist/assets/{TimestampCell-QX_0i5FK.js → TimestampCell-Crb9b0Gw.js} +2 -2
  289. package/dashboard/dist/assets/{TimestampCell-QX_0i5FK.js.map → TimestampCell-Crb9b0Gw.js.map} +1 -1
  290. package/dashboard/dist/assets/{UserName-DyZMXcBm.js → UserName-OPg-nkRa.js} +2 -2
  291. package/dashboard/dist/assets/{UserName-DyZMXcBm.js.map → UserName-OPg-nkRa.js.map} +1 -1
  292. package/dashboard/dist/assets/{WorkflowExecutionPage-DjVxfZaF.js → WorkflowExecutionPage-CcLVrs9b.js} +2 -2
  293. package/dashboard/dist/assets/{WorkflowExecutionPage-DjVxfZaF.js.map → WorkflowExecutionPage-CcLVrs9b.js.map} +1 -1
  294. package/dashboard/dist/assets/WorkflowPill-CCV4MMj7.js +2 -0
  295. package/dashboard/dist/assets/WorkflowPill-CCV4MMj7.js.map +1 -0
  296. package/dashboard/dist/assets/{WorkflowsDashboard-DZjuiFZ0.js → WorkflowsDashboard-DB1SncBi.js} +2 -2
  297. package/dashboard/dist/assets/{WorkflowsDashboard-DZjuiFZ0.js.map → WorkflowsDashboard-DB1SncBi.js.map} +1 -1
  298. package/dashboard/dist/assets/{WorkflowsOverview-CLnLRpOu.js → WorkflowsOverview-DvShiYJV.js} +2 -2
  299. package/dashboard/dist/assets/{WorkflowsOverview-CLnLRpOu.js.map → WorkflowsOverview-DvShiYJV.js.map} +1 -1
  300. package/dashboard/dist/assets/YamlWorkflowsPage-DCBoMeGI.js +2 -0
  301. package/dashboard/dist/assets/YamlWorkflowsPage-DCBoMeGI.js.map +1 -0
  302. package/dashboard/dist/assets/{bots-DIM6lBoY.js → bots-Dqos20NE.js} +2 -2
  303. package/dashboard/dist/assets/{bots-DIM6lBoY.js.map → bots-Dqos20NE.js.map} +1 -1
  304. package/dashboard/dist/assets/{escalation-JOTuOqjq.js → escalation-A0CsbvNV.js} +2 -2
  305. package/dashboard/dist/assets/{escalation-JOTuOqjq.js.map → escalation-A0CsbvNV.js.map} +1 -1
  306. package/dashboard/dist/assets/escalation-columns-BpBJN6k4.js +2 -0
  307. package/dashboard/dist/assets/{escalation-columns-Cyg58nkg.js.map → escalation-columns-BpBJN6k4.js.map} +1 -1
  308. package/dashboard/dist/assets/{helpers-B1BDxBZd.js → helpers-CmznCuAx.js} +2 -2
  309. package/dashboard/dist/assets/{helpers-B1BDxBZd.js.map → helpers-CmznCuAx.js.map} +1 -1
  310. package/dashboard/dist/assets/index-BIeYV5QK.js +2 -0
  311. package/dashboard/dist/assets/index-BIeYV5QK.js.map +1 -0
  312. package/dashboard/dist/assets/index-BYwD3kHN.js +5 -0
  313. package/dashboard/dist/assets/index-BYwD3kHN.js.map +1 -0
  314. package/dashboard/dist/assets/index-C5TUqJu0.css +1 -0
  315. package/dashboard/dist/assets/index-C8-UaN4N.js +2 -0
  316. package/dashboard/dist/assets/{index-Cg5nfiYX.js.map → index-C8-UaN4N.js.map} +1 -1
  317. package/dashboard/dist/assets/index-CAj5LT9H.js +15 -0
  318. package/dashboard/dist/assets/index-CAj5LT9H.js.map +1 -0
  319. package/dashboard/dist/assets/index-CjxHCVxl.js +2 -0
  320. package/dashboard/dist/assets/{index-Cf60K3x9.js.map → index-CjxHCVxl.js.map} +1 -1
  321. package/dashboard/dist/assets/index-Cr0Rqsj7.js +2 -0
  322. package/dashboard/dist/assets/index-Cr0Rqsj7.js.map +1 -0
  323. package/dashboard/dist/assets/index-DZHNte4o.js +2 -0
  324. package/dashboard/dist/assets/{index-Di12t56M.js.map → index-DZHNte4o.js.map} +1 -1
  325. package/dashboard/dist/assets/{index-Ds0JoXS2.js → index-VnYkWW8r.js} +2 -2
  326. package/dashboard/dist/assets/{index-Ds0JoXS2.js.map → index-VnYkWW8r.js.map} +1 -1
  327. package/dashboard/dist/assets/{index-BcR6PfpY.js → index-XGOmZ117.js} +2 -2
  328. package/dashboard/dist/assets/{index-BcR6PfpY.js.map → index-XGOmZ117.js.map} +1 -1
  329. package/dashboard/dist/assets/index-ZjOUzWhc.js +2 -0
  330. package/dashboard/dist/assets/index-ZjOUzWhc.js.map +1 -0
  331. package/dashboard/dist/assets/{index-BYZX9tOb.js → index-puKKZ5l8.js} +77 -77
  332. package/dashboard/dist/assets/index-puKKZ5l8.js.map +1 -0
  333. package/dashboard/dist/assets/{index-BizfauqT.js → index-t5frSddy.js} +4 -4
  334. package/dashboard/dist/assets/{index-BizfauqT.js.map → index-t5frSddy.js.map} +1 -1
  335. package/dashboard/dist/assets/{mcp-B_xbczAt.js → mcp-DrWymhSu.js} +2 -2
  336. package/dashboard/dist/assets/{mcp-B_xbczAt.js.map → mcp-DrWymhSu.js.map} +1 -1
  337. package/dashboard/dist/assets/mcp-query-BhUxVEMS.js +2 -0
  338. package/dashboard/dist/assets/mcp-query-BhUxVEMS.js.map +1 -0
  339. package/dashboard/dist/assets/mcp-runs-DUfz4mLd.js +2 -0
  340. package/dashboard/dist/assets/mcp-runs-DUfz4mLd.js.map +1 -0
  341. package/dashboard/dist/assets/{namespaces-C3WtdO_9.js → namespaces-Cm6AY5sh.js} +2 -2
  342. package/dashboard/dist/assets/{namespaces-C3WtdO_9.js.map → namespaces-Cm6AY5sh.js.map} +1 -1
  343. package/dashboard/dist/assets/{roles-BDAsPpZG.js → roles-2v1Kc7BJ.js} +2 -2
  344. package/dashboard/dist/assets/{roles-BDAsPpZG.js.map → roles-2v1Kc7BJ.js.map} +1 -1
  345. package/dashboard/dist/assets/{settings-Ife_UwAp.js → settings-DTQNp6tH.js} +2 -2
  346. package/dashboard/dist/assets/{settings-Ife_UwAp.js.map → settings-DTQNp6tH.js.map} +1 -1
  347. package/dashboard/dist/assets/{tasks-BquNDHDI.js → tasks-CS1rgG1s.js} +2 -2
  348. package/dashboard/dist/assets/{tasks-BquNDHDI.js.map → tasks-CS1rgG1s.js.map} +1 -1
  349. package/dashboard/dist/assets/useEventHooks-BjXX8x3a.js +2 -0
  350. package/dashboard/dist/assets/{useEventHooks-anv_B2Yy.js.map → useEventHooks-BjXX8x3a.js.map} +1 -1
  351. package/dashboard/dist/assets/useFilterParams-CGRYFw_A.js +2 -0
  352. package/dashboard/dist/assets/useFilterParams-CGRYFw_A.js.map +1 -0
  353. package/dashboard/dist/assets/useYamlActivityEvents-BeR-nVWQ.js +2 -0
  354. package/dashboard/dist/assets/useYamlActivityEvents-BeR-nVWQ.js.map +1 -0
  355. package/dashboard/dist/assets/{users-CFcxB4v6.js → users-DYsdQ7Md.js} +2 -2
  356. package/dashboard/dist/assets/{users-CFcxB4v6.js.map → users-DYsdQ7Md.js.map} +1 -1
  357. package/dashboard/dist/assets/{vendor-icons-T4r2DSPD.js → vendor-icons-CWl44VA6.js} +132 -82
  358. package/dashboard/dist/assets/vendor-icons-CWl44VA6.js.map +1 -0
  359. package/dashboard/dist/assets/{workflows-CeRci9z3.js → workflows-2QAXh3UD.js} +2 -2
  360. package/dashboard/dist/assets/{workflows-CeRci9z3.js.map → workflows-2QAXh3UD.js.map} +1 -1
  361. package/dashboard/dist/assets/yaml-workflows-sx8-UEE3.js +2 -0
  362. package/dashboard/dist/assets/yaml-workflows-sx8-UEE3.js.map +1 -0
  363. package/dashboard/dist/index.html +3 -3
  364. package/docs/api/http/file-browser.md +101 -0
  365. package/docs/api/http/knowledge.md +203 -0
  366. package/docs/api/http/settings.md +6 -4
  367. package/docs/api/sdk/files.md +68 -0
  368. package/docs/api/sdk/knowledge.md +126 -0
  369. package/docs/api/sdk/settings.md +3 -2
  370. package/docs/cli.md +171 -0
  371. package/docs/compilation.md +16 -0
  372. package/docs/compiler.md +311 -0
  373. package/docs/events.md +19 -0
  374. package/docs/schema-exchange.md +173 -0
  375. package/docs/self-test.md +106 -0
  376. package/docs/workflows.md +19 -0
  377. package/package.json +15 -2
  378. package/build/api/escalations.d.ts +0 -271
  379. package/build/api/escalations.js +0 -932
  380. package/build/api/workflows.d.ts +0 -158
  381. package/build/api/workflows.js +0 -414
  382. package/dashboard/dist/assets/AvailableEscalationsPage-Dbd1qUK_.js +0 -2
  383. package/dashboard/dist/assets/AvailableEscalationsPage-Dbd1qUK_.js.map +0 -1
  384. package/dashboard/dist/assets/CredentialsPage-DJablIbs.js +0 -2
  385. package/dashboard/dist/assets/McpQueryDetailPage-BWbinTM_.js +0 -5
  386. package/dashboard/dist/assets/McpQueryDetailPage-BWbinTM_.js.map +0 -1
  387. package/dashboard/dist/assets/McpQueryPage-lV6kfDG5.js +0 -2
  388. package/dashboard/dist/assets/McpRunDetailPage-D6gaxH3_.js +0 -2
  389. package/dashboard/dist/assets/McpRunDetailPage-D6gaxH3_.js.map +0 -1
  390. package/dashboard/dist/assets/McpRunsPage-DKvTklh9.js +0 -2
  391. package/dashboard/dist/assets/McpRunsPage-DKvTklh9.js.map +0 -1
  392. package/dashboard/dist/assets/OperatorDashboard-C9SSV96T.js +0 -2
  393. package/dashboard/dist/assets/SwimlaneTimeline-RK4Yu66z.js +0 -2
  394. package/dashboard/dist/assets/SwimlaneTimeline-RK4Yu66z.js.map +0 -1
  395. package/dashboard/dist/assets/WorkflowPill-CZqGslD6.js +0 -2
  396. package/dashboard/dist/assets/WorkflowPill-CZqGslD6.js.map +0 -1
  397. package/dashboard/dist/assets/YamlWorkflowsPage-VjdhnLmO.js +0 -2
  398. package/dashboard/dist/assets/YamlWorkflowsPage-VjdhnLmO.js.map +0 -1
  399. package/dashboard/dist/assets/escalation-columns-Cyg58nkg.js +0 -2
  400. package/dashboard/dist/assets/helpers-BCix9c_m.js +0 -2
  401. package/dashboard/dist/assets/helpers-BCix9c_m.js.map +0 -1
  402. package/dashboard/dist/assets/index-BUK3qR-1.js +0 -2
  403. package/dashboard/dist/assets/index-BUK3qR-1.js.map +0 -1
  404. package/dashboard/dist/assets/index-BYZX9tOb.js.map +0 -1
  405. package/dashboard/dist/assets/index-Cf60K3x9.js +0 -2
  406. package/dashboard/dist/assets/index-Cg5nfiYX.js +0 -2
  407. package/dashboard/dist/assets/index-D1wVX50Z.js +0 -15
  408. package/dashboard/dist/assets/index-D1wVX50Z.js.map +0 -1
  409. package/dashboard/dist/assets/index-DDYFpi4l.js +0 -5
  410. package/dashboard/dist/assets/index-DDYFpi4l.js.map +0 -1
  411. package/dashboard/dist/assets/index-DcIKW-cZ.css +0 -1
  412. package/dashboard/dist/assets/index-Di12t56M.js +0 -2
  413. package/dashboard/dist/assets/mcp-query-B8-P_QoG.js +0 -2
  414. package/dashboard/dist/assets/mcp-query-B8-P_QoG.js.map +0 -1
  415. package/dashboard/dist/assets/mcp-runs-CWeZinoF.js +0 -2
  416. package/dashboard/dist/assets/mcp-runs-CWeZinoF.js.map +0 -1
  417. package/dashboard/dist/assets/useEventHooks-anv_B2Yy.js +0 -2
  418. package/dashboard/dist/assets/useFilterParams-BUyLHcx_.js +0 -2
  419. package/dashboard/dist/assets/useFilterParams-BUyLHcx_.js.map +0 -1
  420. package/dashboard/dist/assets/useYamlActivityEvents-DN-PTgVx.js +0 -2
  421. package/dashboard/dist/assets/useYamlActivityEvents-DN-PTgVx.js.map +0 -1
  422. package/dashboard/dist/assets/vendor-icons-T4r2DSPD.js.map +0 -1
  423. package/dashboard/dist/assets/yaml-workflows-DLwd2BOX.js +0 -2
  424. package/dashboard/dist/assets/yaml-workflows-DLwd2BOX.js.map +0 -1
@@ -41,31 +41,14 @@ exports.getYamlWorkflow = getYamlWorkflow;
41
41
  exports.updateYamlWorkflow = updateYamlWorkflow;
42
42
  exports.regenerateYamlWorkflow = regenerateYamlWorkflow;
43
43
  exports.deleteYamlWorkflow = deleteYamlWorkflow;
44
- exports.deployYamlWorkflow = deployYamlWorkflow;
45
- exports.activateYamlWorkflow = activateYamlWorkflow;
46
- exports.invokeYamlWorkflow = invokeYamlWorkflow;
47
- exports.archiveYamlWorkflow = archiveYamlWorkflow;
48
- exports.getVersionHistory = getVersionHistory;
49
- exports.getVersionSnapshot = getVersionSnapshot;
50
- exports.getYamlContent = getYamlContent;
51
- exports.setCronSchedule = setCronSchedule;
52
- exports.clearCronSchedule = clearCronSchedule;
53
- exports.getCronStatus = getCronStatus;
54
- const yamlDb = __importStar(require("../services/yaml-workflow/db"));
55
- const yamlGenerator = __importStar(require("../services/yaml-workflow/generator"));
56
- const yamlDeployer = __importStar(require("../services/yaml-workflow/deployer"));
57
- const yamlWorkers = __importStar(require("../services/yaml-workflow/workers"));
58
- const invoke_1 = require("../services/yaml-workflow/invoke");
59
- const task_1 = require("../services/task");
60
- const cron_1 = require("../services/cron");
61
- /** Return true if a Postgres error indicates an invalid/missing ID */
62
- function isNotFoundError(err) {
63
- const msg = err?.message ?? '';
64
- return msg.includes('invalid input syntax for type uuid') || msg.includes('not found');
65
- }
66
- // ---------------------------------------------------------------------------
67
- // CRUD
68
- // ---------------------------------------------------------------------------
44
+ exports.createYamlWorkflowFromDurable = createYamlWorkflowFromDurable;
45
+ const yamlDb = __importStar(require("../../services/yaml-workflow/db"));
46
+ const yamlGenerator = __importStar(require("../../services/yaml-workflow/generator"));
47
+ const durable_compiler_1 = require("../../services/yaml-workflow/durable-compiler");
48
+ const builder_regenerate_1 = require("../../services/yaml-workflow/builder-regenerate");
49
+ const task_1 = require("../../services/task");
50
+ const utils_1 = require("../../modules/utils");
51
+ const helpers_1 = require("./helpers");
69
52
  /**
70
53
  * List YAML workflows with optional filtering and pagination.
71
54
  *
@@ -96,7 +79,7 @@ async function listYamlWorkflows(input) {
96
79
  return { status: 200, data: result };
97
80
  }
98
81
  catch (err) {
99
- if (isNotFoundError(err)) {
82
+ if ((0, helpers_1.isNotFoundError)(err)) {
100
83
  return { status: 404, error: 'YAML workflow not found' };
101
84
  }
102
85
  return { status: 500, error: err.message };
@@ -143,8 +126,8 @@ async function createYamlWorkflow(input) {
143
126
  }
144
127
  }
145
128
  // Check for topic collision in the target namespace
146
- const compileAppId = app_id || 'longtail';
147
- const compileTopic = subscribes || name.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');
129
+ const compileAppId = (0, utils_1.sanitizeServerName)(app_id || 'longtail');
130
+ const compileTopic = (0, utils_1.sanitizeToolName)(subscribes || name);
148
131
  const conflicting = await yamlDb.checkTopicConflict(compileAppId, compileTopic);
149
132
  if (conflicting) {
150
133
  return {
@@ -220,15 +203,15 @@ async function createYamlWorkflowDirect(input) {
220
203
  if (!name || !yaml_content) {
221
204
  return { status: 400, error: 'name and yaml_content are required' };
222
205
  }
223
- // Sanitize name (tool name): lowercase alphanumeric, periods, dashes, underscores
224
- const sanitizedName = name.toLowerCase().replace(/[^a-z0-9._-]/g, '');
225
- // Sanitize app_id (MCP server name): force lowercase alphanumeric only
226
- const targetAppId = (app_id || 'longtail').toLowerCase().replace(/[^a-z0-9]/g, '');
227
- // Sanitize graph topic: lowercase alphanumeric, periods, dashes, underscores
228
- let graphTopic = (graph_topic || sanitizedName).toLowerCase().replace(/[^a-z0-9._-]/g, '');
206
+ // Sanitize name (tool name): snake_case only
207
+ const sanitizedName = (0, utils_1.sanitizeToolName)(name);
208
+ // Sanitize app_id (MCP server name): lowercase alphanumeric, must start with a letter
209
+ const targetAppId = (0, utils_1.sanitizeServerName)(app_id || 'longtail');
210
+ // Sanitize graph topic: snake_case only
211
+ let graphTopic = (0, utils_1.sanitizeToolName)(graph_topic || sanitizedName);
229
212
  const subscribesMatch = yaml_content.match(/subscribes:\s*(.+)/);
230
213
  if (subscribesMatch) {
231
- graphTopic = subscribesMatch[1].trim().replace(/^['"]|['"]$/g, '').toLowerCase().replace(/[^a-z0-9._-]/g, '');
214
+ graphTopic = (0, utils_1.sanitizeToolName)(subscribesMatch[1].trim().replace(/^['"]|['"]$/g, ''));
232
215
  }
233
216
  // Rewrite the subscribes line in the YAML to match the sanitized topic
234
217
  let finalYaml = yaml_content;
@@ -299,7 +282,7 @@ async function getYamlWorkflow(input) {
299
282
  return { status: 200, data: wf };
300
283
  }
301
284
  catch (err) {
302
- if (isNotFoundError(err)) {
285
+ if ((0, helpers_1.isNotFoundError)(err)) {
303
286
  return { status: 404, error: 'YAML workflow not found' };
304
287
  }
305
288
  return { status: 500, error: err.message };
@@ -324,7 +307,7 @@ async function updateYamlWorkflow(input) {
324
307
  return { status: 200, data: wf };
325
308
  }
326
309
  catch (err) {
327
- if (isNotFoundError(err)) {
310
+ if ((0, helpers_1.isNotFoundError)(err)) {
328
311
  return { status: 404, error: 'YAML workflow not found' };
329
312
  }
330
313
  return { status: 500, error: err.message };
@@ -352,10 +335,32 @@ async function regenerateYamlWorkflow(input) {
352
335
  if (wf.status === 'archived') {
353
336
  return { status: 400, error: 'Archived workflows cannot be regenerated' };
354
337
  }
338
+ // Plan Build workflows: recompile from original prompt via builder LLM
339
+ if (!wf.source_workflow_id && wf.source_workflow_type === 'mcpWorkflowPlanner') {
340
+ if (!wf.original_prompt) {
341
+ return { status: 400, error: 'Cannot recompile: original prompt not stored. Re-run the plan to rebuild this workflow.' };
342
+ }
343
+ const feedback = input.compilation_feedback;
344
+ const result = await (0, builder_regenerate_1.rebuildFromPrompt)({
345
+ prompt: wf.original_prompt,
346
+ feedback: feedback || undefined,
347
+ priorYaml: feedback ? wf.yaml_content : undefined,
348
+ name: wf.name,
349
+ appId: wf.app_id,
350
+ });
351
+ const updated = await yamlDb.updateYamlWorkflow(wf.id, {
352
+ yaml_content: result.yaml,
353
+ input_schema: result.inputSchema,
354
+ output_schema: result.outputSchema,
355
+ activity_manifest: result.activityManifest,
356
+ tags: result.tags,
357
+ });
358
+ return { status: 200, data: updated };
359
+ }
355
360
  if (!wf.source_workflow_id || !wf.source_workflow_type) {
356
361
  return { status: 400, error: 'Missing source workflow reference — cannot regenerate' };
357
362
  }
358
- // Look up task queue from the source task record, or use input override
363
+ // Execution-trace workflows: recompile from source execution
359
364
  let taskQueue = input.task_queue;
360
365
  if (!taskQueue) {
361
366
  const sourceTask = await (0, task_1.getTaskByWorkflowId)(wf.source_workflow_id);
@@ -385,7 +390,7 @@ async function regenerateYamlWorkflow(input) {
385
390
  return { status: 200, data: updated };
386
391
  }
387
392
  catch (err) {
388
- if (isNotFoundError(err)) {
393
+ if ((0, helpers_1.isNotFoundError)(err)) {
389
394
  return { status: 404, error: 'YAML workflow not found' };
390
395
  }
391
396
  return { status: 500, error: err.message };
@@ -413,337 +418,60 @@ async function deleteYamlWorkflow(input) {
413
418
  return { status: 200, data: { deleted: true } };
414
419
  }
415
420
  catch (err) {
416
- if (isNotFoundError(err)) {
421
+ if ((0, helpers_1.isNotFoundError)(err)) {
417
422
  return { status: 404, error: 'YAML workflow not found' };
418
423
  }
419
424
  return { status: 500, error: err.message };
420
425
  }
421
426
  }
422
- // ---------------------------------------------------------------------------
423
- // Deployment
424
- // ---------------------------------------------------------------------------
425
427
  /**
426
- * Deploy a YAML workflow and all sibling workflows sharing its app_id namespace.
428
+ * Compile a durable TypeScript workflow into a YAML DAG.
427
429
  *
428
- * Merges and deploys the full app_id YAML, registers HotMesh workers for every
429
- * non-archived sibling, transitions draft/deployed siblings to active, and marks
430
- * the app_id content as deployed. Uses the app_version declared in the workflow record.
430
+ * Accepts inline source code or a file path. The LLM translates the procedural
431
+ * orchestration into an equivalent HotMesh YAML DAG that runs without replay.
431
432
  *
432
- * @param input.idUUID of the workflow to deploy
433
- * @returns `{ status: 200, data: YamlWorkflow }` the refreshed workflow record after deployment
434
- */
435
- async function deployYamlWorkflow(input) {
436
- try {
437
- const wf = await yamlDb.getYamlWorkflow(input.id);
438
- if (!wf) {
439
- return { status: 404, error: 'YAML workflow not found' };
440
- }
441
- // Use the version declared in the YAML (like package.json)
442
- const deployVersion = wf.app_version || '1';
443
- // Deploy + activate merged YAML for the full app_id
444
- const siblings = await yamlDb.listYamlWorkflowsByAppId(wf.app_id);
445
- await yamlDeployer.deployAppId(wf.app_id, deployVersion);
446
- // Register workers and mark all non-archived siblings as active
447
- for (const sibling of siblings) {
448
- await yamlDb.updateYamlWorkflowVersion(sibling.id, deployVersion);
449
- await yamlWorkers.registerWorkersForWorkflow(sibling);
450
- if (sibling.status === 'draft' || sibling.status === 'deployed') {
451
- await yamlDb.updateYamlWorkflowStatus(sibling.id, 'active');
452
- }
453
- }
454
- // Mark content as deployed for the entire app_id
455
- await yamlDb.markAppIdContentDeployed(wf.app_id);
456
- const updated = await yamlDb.getYamlWorkflow(input.id);
457
- return { status: 200, data: updated };
458
- }
459
- catch (err) {
460
- if (isNotFoundError(err)) {
461
- return { status: 404, error: 'YAML workflow not found' };
462
- }
463
- return {
464
- status: 500,
465
- error: err.message,
466
- };
467
- }
468
- }
469
- /**
470
- * Activate a previously deployed YAML workflow and its app_id siblings.
471
- *
472
- * Calls the deployer to activate the app_id at its current version, then registers
473
- * HotMesh workers for all sibling workflows. Siblings in "deployed" status are
474
- * transitioned to "active". The workflow must already be in deployed or active status.
475
- *
476
- * @param input.id — UUID of the workflow to activate
477
- * @returns `{ status: 200, data: YamlWorkflow }` the refreshed workflow record after activation
478
- */
479
- async function activateYamlWorkflow(input) {
480
- try {
481
- const wf = await yamlDb.getYamlWorkflow(input.id);
482
- if (!wf) {
483
- return { status: 404, error: 'YAML workflow not found' };
484
- }
485
- if (wf.status !== 'deployed' && wf.status !== 'active') {
486
- return { status: 400, error: 'Workflow must be deployed before activation' };
487
- }
488
- await yamlDeployer.activateYamlWorkflow(wf.app_id, wf.app_version);
489
- // Register workers for ALL workflows sharing this app_id
490
- const siblings = await yamlDb.listYamlWorkflowsByAppId(wf.app_id);
491
- for (const sibling of siblings) {
492
- await yamlWorkers.registerWorkersForWorkflow(sibling);
493
- if (sibling.status === 'deployed') {
494
- await yamlDb.updateYamlWorkflowStatus(sibling.id, 'active');
495
- }
496
- }
497
- const updated = await yamlDb.getYamlWorkflow(input.id);
498
- return { status: 200, data: updated };
499
- }
500
- catch (err) {
501
- if (isNotFoundError(err)) {
502
- return { status: 404, error: 'YAML workflow not found' };
503
- }
504
- return { status: 500, error: err.message };
505
- }
506
- }
507
- /**
508
- * Invoke an active YAML workflow, executing its DAG pipeline.
509
- *
510
- * The workflow must be in "active" status. Delegates to the invoke service which
511
- * starts the HotMesh execution. Supports both synchronous (wait for result) and
512
- * asynchronous (fire-and-forget) invocation modes.
513
- *
514
- * @param input.id — UUID of the workflow to invoke
515
- * @param input.data — input payload passed to the workflow's entry point
516
- * @param input.sync — when true, block until the workflow completes and return its output
517
- * @param input.timeout — max milliseconds to wait when sync is true
518
- * @param input.execute_as — override identity for the execution context
519
- * @param auth — authenticated user context; userId is forwarded to the invoke service
520
- * @returns `{ status: 200, data: ... }` workflow execution result (sync) or job metadata (async)
433
+ * @param input.sourceTypeScript source code or file path
434
+ * @param input.is_file_path whether source is a file path (default: false)
435
+ * @param input.workflow_name — name of the exported workflow function
436
+ * @param input.name — name for the generated YAML workflow
437
+ * @param input.description — optional description
438
+ * @param input.app_id — target namespace (defaults to "longtail")
439
+ * @param input.subscribes — graph topic override
440
+ * @param input.tags additional tags
441
+ * @returns `{ status: 201, data: YamlWorkflow }` the newly created draft record
521
442
  */
522
- async function invokeYamlWorkflow(input, auth) {
443
+ async function createYamlWorkflowFromDurable(input) {
523
444
  try {
524
- const wf = await yamlDb.getYamlWorkflow(input.id);
525
- if (!wf) {
526
- return { status: 404, error: 'YAML workflow not found' };
527
- }
528
- if (wf.status !== 'active') {
529
- return { status: 400, error: 'Workflow must be active to invoke' };
445
+ const { source, workflow_name, name, description, app_id, subscribes, tags: userTags } = input;
446
+ if (!source || !workflow_name || !name) {
447
+ return { status: 400, error: 'source, workflow_name, and name are required' };
530
448
  }
531
- const result = await (0, invoke_1.invokeYamlWorkflow)(wf, {
532
- data: input.data,
533
- sync: input.sync,
534
- timeout: input.timeout,
535
- execute_as: input.execute_as,
536
- userId: auth?.userId,
449
+ const result = await (0, durable_compiler_1.compileDurableToYaml)({
450
+ source,
451
+ isFilePath: !!input.is_file_path,
452
+ workflowName: workflow_name,
453
+ name,
454
+ description,
455
+ appId: app_id,
456
+ subscribes,
537
457
  });
538
- return { status: 200, data: result };
539
- }
540
- catch (err) {
541
- if (isNotFoundError(err)) {
542
- return { status: 404, error: 'YAML workflow not found' };
543
- }
544
- return { status: 500, error: err.message };
545
- }
546
- }
547
- /**
548
- * Archive a YAML workflow, removing it from active service.
549
- *
550
- * If the workflow is currently active, its HotMesh engine is stopped before
551
- * transitioning the status to "archived". Archived workflows cannot be invoked
552
- * or regenerated but can still be viewed or deleted.
553
- *
554
- * @param input.id UUID of the workflow to archive
555
- * @returns `{ status: 200, data: YamlWorkflow }` the updated record with status "archived"
556
- */
557
- async function archiveYamlWorkflow(input) {
558
- try {
559
- const wf = await yamlDb.getYamlWorkflow(input.id);
560
- if (!wf) {
561
- return { status: 404, error: 'YAML workflow not found' };
562
- }
563
- if (wf.status === 'active') {
564
- await yamlDeployer.stopEngine(wf.app_id);
565
- }
566
- const updated = await yamlDb.updateYamlWorkflowStatus(wf.id, 'archived');
567
- return { status: 200, data: updated };
568
- }
569
- catch (err) {
570
- if (isNotFoundError(err)) {
571
- return { status: 404, error: 'YAML workflow not found' };
572
- }
573
- return { status: 500, error: err.message };
574
- }
575
- }
576
- // ---------------------------------------------------------------------------
577
- // Versions
578
- // ---------------------------------------------------------------------------
579
- /**
580
- * Retrieve the version history for a YAML workflow.
581
- *
582
- * Returns a paginated list of version snapshots ordered by version number.
583
- *
584
- * @param input.id — UUID of the workflow
585
- * @param input.limit — max versions to return (defaults to 20)
586
- * @param input.offset — pagination offset (defaults to 0)
587
- * @returns `{ status: 200, data: VersionSnapshot[] }` paginated version history
588
- */
589
- async function getVersionHistory(input) {
590
- try {
591
- const limit = input.limit ?? 20;
592
- const offset = input.offset ?? 0;
593
- const result = await yamlDb.getVersionHistory(input.id, limit, offset);
594
- return { status: 200, data: result };
595
- }
596
- catch (err) {
597
- if (isNotFoundError(err)) {
598
- return { status: 404, error: 'YAML workflow not found' };
599
- }
600
- return { status: 500, error: err.message };
601
- }
602
- }
603
- /**
604
- * Retrieve a specific version snapshot of a YAML workflow.
605
- *
606
- * Validates that the version number is a positive integer before querying.
607
- *
608
- * @param input.id — UUID of the workflow
609
- * @param input.version — 1-based version number to retrieve
610
- * @returns `{ status: 200, data: VersionSnapshot }` the snapshot at the requested version, or 404
611
- */
612
- async function getVersionSnapshot(input) {
613
- try {
614
- const version = input.version;
615
- if (isNaN(version) || version < 1) {
616
- return { status: 400, error: 'Invalid version number' };
617
- }
618
- const snapshot = await yamlDb.getVersionSnapshot(input.id, version);
619
- if (!snapshot) {
620
- return { status: 404, error: `Version ${version} not found` };
621
- }
622
- return { status: 200, data: snapshot };
623
- }
624
- catch (err) {
625
- if (isNotFoundError(err)) {
626
- return { status: 404, error: 'YAML workflow not found' };
627
- }
628
- return { status: 500, error: err.message };
629
- }
630
- }
631
- /**
632
- * Retrieve the raw YAML content for a workflow, optionally at a specific version.
633
- *
634
- * When a version is provided, fetches from the version snapshot table. Otherwise
635
- * returns the current yaml_content from the live workflow record.
636
- *
637
- * @param input.id — UUID of the workflow
638
- * @param input.version — optional version number; when omitted, returns the current content
639
- * @returns `{ status: 200, data: string }` the raw YAML string
640
- */
641
- async function getYamlContent(input) {
642
- try {
643
- if (input.version) {
644
- const snapshot = await yamlDb.getVersionSnapshot(input.id, input.version);
645
- if (!snapshot) {
646
- return { status: 404, error: `Version ${input.version} not found` };
647
- }
648
- return { status: 200, data: snapshot.yaml_content };
649
- }
650
- const wf = await yamlDb.getYamlWorkflow(input.id);
651
- if (!wf) {
652
- return { status: 404, error: 'YAML workflow not found' };
653
- }
654
- return { status: 200, data: wf.yaml_content };
655
- }
656
- catch (err) {
657
- if (isNotFoundError(err)) {
658
- return { status: 404, error: 'YAML workflow not found' };
659
- }
660
- return { status: 500, error: err.message };
661
- }
662
- }
663
- // ---------------------------------------------------------------------------
664
- // Cron
665
- // ---------------------------------------------------------------------------
666
- /**
667
- * Set or update the cron schedule for a YAML workflow.
668
- *
669
- * Persists the schedule in the DB and restarts the in-process cron timer via the
670
- * cron registry so the change takes effect immediately.
671
- *
672
- * @param input.id — UUID of the workflow to schedule
673
- * @param input.cron_schedule — cron expression (e.g. "0 * * * *")
674
- * @param input.cron_envelope — optional payload passed to each scheduled invocation
675
- * @param input.execute_as — optional identity override for scheduled executions
676
- * @returns `{ status: 200, data: YamlWorkflow }` the updated workflow record with cron fields set
677
- */
678
- async function setCronSchedule(input) {
679
- try {
680
- const wf = await yamlDb.getYamlWorkflow(input.id);
681
- if (!wf) {
682
- return { status: 404, error: 'YAML workflow not found' };
683
- }
684
- if (!input.cron_schedule || typeof input.cron_schedule !== 'string') {
685
- return { status: 400, error: 'cron_schedule is required' };
686
- }
687
- const updated = await yamlDb.updateCronSchedule(wf.id, input.cron_schedule.trim(), input.cron_envelope ?? null, input.execute_as ?? null);
688
- if (updated) {
689
- await cron_1.cronRegistry.restartYamlCron(updated);
690
- }
691
- return { status: 200, data: updated };
692
- }
693
- catch (err) {
694
- if (isNotFoundError(err)) {
695
- return { status: 404, error: 'YAML workflow not found' };
696
- }
697
- return { status: 500, error: err.message };
698
- }
699
- }
700
- /**
701
- * Remove the cron schedule from a YAML workflow.
702
- *
703
- * Stops the in-process cron timer first, then clears the schedule fields in the DB.
704
- *
705
- * @param input.id — UUID of the workflow to unschedule
706
- * @returns `{ status: 200, data: YamlWorkflow }` the updated workflow record with cron fields cleared
707
- */
708
- async function clearCronSchedule(input) {
709
- try {
710
- const wf = await yamlDb.getYamlWorkflow(input.id);
711
- if (!wf) {
712
- return { status: 404, error: 'YAML workflow not found' };
713
- }
714
- await cron_1.cronRegistry.stopYamlCron(wf.id);
715
- const updated = await yamlDb.clearCronSchedule(wf.id);
716
- return { status: 200, data: updated };
717
- }
718
- catch (err) {
719
- if (isNotFoundError(err)) {
720
- return { status: 404, error: 'YAML workflow not found' };
721
- }
722
- return { status: 500, error: err.message };
723
- }
724
- }
725
- /**
726
- * List all YAML workflows that have a cron schedule, with their live timer status.
727
- *
728
- * Fetches all cron-scheduled workflows from the DB and cross-references with the
729
- * in-process cron registry to determine which timers are actually running.
730
- *
731
- * @returns `{ status: 200, data: { schedules: Array<{ id, name, graph_topic, app_id, cron_schedule, execute_as, active }> } }`
732
- */
733
- async function getCronStatus() {
734
- try {
735
- const workflows = await yamlDb.getCronScheduledWorkflows();
736
- const activeTypes = cron_1.cronRegistry.activeWorkflowTypes;
737
- const schedules = workflows.map((wf) => ({
738
- id: wf.id,
739
- name: wf.name,
740
- graph_topic: wf.graph_topic,
741
- app_id: wf.app_id,
742
- cron_schedule: wf.cron_schedule,
743
- execute_as: wf.execute_as,
744
- active: activeTypes.includes(`yaml:${wf.id}`),
745
- }));
746
- return { status: 200, data: { schedules } };
458
+ const mergedTags = [...new Set([...(result.tags || []), ...(Array.isArray(userTags) ? userTags : [])])];
459
+ const record = await yamlDb.createYamlWorkflow({
460
+ name,
461
+ description,
462
+ app_id: result.appId,
463
+ yaml_content: result.yaml,
464
+ graph_topic: result.graphTopic,
465
+ input_schema: result.inputSchema,
466
+ output_schema: result.outputSchema,
467
+ activity_manifest: result.activityManifest,
468
+ tags: mergedTags,
469
+ source_workflow_type: 'durable',
470
+ original_prompt: description,
471
+ category: result.category,
472
+ metadata: { durable_source: source.slice(0, 5000) },
473
+ });
474
+ return { status: 201, data: record };
747
475
  }
748
476
  catch (err) {
749
477
  return { status: 500, error: err.message };
@@ -0,0 +1,71 @@
1
+ import type { LTApiResult, LTApiAuth } from '../../types/sdk';
2
+ /**
3
+ * Deploy a YAML workflow and all sibling workflows sharing its app_id namespace.
4
+ *
5
+ * Merges and deploys the full app_id YAML, registers HotMesh workers for every
6
+ * non-archived sibling, transitions draft/deployed siblings to active, and marks
7
+ * the app_id content as deployed. Uses the app_version declared in the workflow record.
8
+ *
9
+ * @param input.id — UUID of the workflow to deploy
10
+ * @returns `{ status: 200, data: YamlWorkflow }` the refreshed workflow record after deployment
11
+ */
12
+ export declare function deployYamlWorkflow(input: {
13
+ id: string;
14
+ }): Promise<LTApiResult>;
15
+ /**
16
+ * Activate a previously deployed YAML workflow and its app_id siblings.
17
+ *
18
+ * Calls the deployer to activate the app_id at its current version, then registers
19
+ * HotMesh workers for all sibling workflows. Siblings in "deployed" status are
20
+ * transitioned to "active". The workflow must already be in deployed or active status.
21
+ *
22
+ * @param input.id — UUID of the workflow to activate
23
+ * @returns `{ status: 200, data: YamlWorkflow }` the refreshed workflow record after activation
24
+ */
25
+ export declare function activateYamlWorkflow(input: {
26
+ id: string;
27
+ }): Promise<LTApiResult>;
28
+ /**
29
+ * Invoke an active YAML workflow, executing its DAG pipeline.
30
+ *
31
+ * The workflow must be in "active" status. Delegates to the invoke service which
32
+ * starts the HotMesh execution. Supports both synchronous (wait for result) and
33
+ * asynchronous (fire-and-forget) invocation modes.
34
+ *
35
+ * @param input.id — UUID of the workflow to invoke
36
+ * @param input.data — input payload passed to the workflow's entry point
37
+ * @param input.sync — when true, block until the workflow completes and return its output
38
+ * @param input.timeout — max milliseconds to wait when sync is true
39
+ * @param input.execute_as — override identity for the execution context
40
+ * @param auth — authenticated user context; userId is forwarded to the invoke service
41
+ * @returns `{ status: 200, data: ... }` workflow execution result (sync) or job metadata (async)
42
+ */
43
+ export declare function invokeYamlWorkflow(input: {
44
+ id: string;
45
+ data?: any;
46
+ sync?: boolean;
47
+ timeout?: number;
48
+ execute_as?: string;
49
+ }, auth?: LTApiAuth): Promise<LTApiResult>;
50
+ /**
51
+ * Archive a YAML workflow, removing it from active service.
52
+ *
53
+ * If the workflow is currently active, its HotMesh engine is stopped before
54
+ * transitioning the status to "archived". Archived workflows cannot be invoked
55
+ * or regenerated but can still be viewed or deleted.
56
+ *
57
+ * @param input.id — UUID of the workflow to archive
58
+ * @returns `{ status: 200, data: YamlWorkflow }` the updated record with status "archived"
59
+ */
60
+ export declare function archiveYamlWorkflow(input: {
61
+ id: string;
62
+ }): Promise<LTApiResult>;
63
+ /**
64
+ * Restore an archived YAML workflow back to draft status.
65
+ *
66
+ * Transitions the workflow from "archived" to "draft" so it can be
67
+ * redeployed. The workflow must be in "archived" status.
68
+ */
69
+ export declare function restoreYamlWorkflow(input: {
70
+ id: string;
71
+ }): Promise<LTApiResult>;