@hotmeshio/long-tail 0.1.6 → 0.1.7

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 (335) hide show
  1. package/README.md +44 -4
  2. package/build/api/auth.d.ts +5 -0
  3. package/build/api/auth.js +42 -0
  4. package/build/api/bot-accounts.d.ts +50 -0
  5. package/build/api/bot-accounts.js +215 -0
  6. package/build/api/controlplane.d.ts +20 -0
  7. package/build/api/controlplane.js +110 -0
  8. package/build/api/dba.d.ts +15 -0
  9. package/build/api/dba.js +68 -0
  10. package/build/api/escalations.d.ts +70 -0
  11. package/build/api/escalations.js +656 -0
  12. package/build/api/exports.d.ts +32 -0
  13. package/build/api/exports.js +146 -0
  14. package/build/api/index.d.ts +18 -0
  15. package/build/api/index.js +54 -0
  16. package/build/api/insight.d.ts +29 -0
  17. package/build/api/insight.js +90 -0
  18. package/build/api/maintenance.d.ts +7 -0
  19. package/build/api/maintenance.js +28 -0
  20. package/build/api/mcp-runs.d.ts +16 -0
  21. package/build/api/mcp-runs.js +62 -0
  22. package/build/api/mcp.d.ts +52 -0
  23. package/build/api/mcp.js +212 -0
  24. package/build/api/namespaces.d.ts +7 -0
  25. package/build/{routes/escalations/helpers.js → api/namespaces.js} +24 -12
  26. package/build/api/roles.d.ts +25 -0
  27. package/build/api/roles.js +159 -0
  28. package/build/api/settings.d.ts +2 -0
  29. package/build/api/settings.js +35 -0
  30. package/build/api/tasks.d.ts +27 -0
  31. package/build/api/tasks.js +96 -0
  32. package/build/api/users.d.ts +44 -0
  33. package/build/api/users.js +162 -0
  34. package/build/api/workflow-sets.d.ts +26 -0
  35. package/build/api/workflow-sets.js +119 -0
  36. package/build/api/workflows.d.ts +48 -0
  37. package/build/api/workflows.js +298 -0
  38. package/build/api/yaml-workflows.d.ts +87 -0
  39. package/build/api/yaml-workflows.js +556 -0
  40. package/build/index.d.ts +4 -0
  41. package/build/index.js +6 -1
  42. package/build/lib/db/schemas/004_workflow_sets.sql +29 -0
  43. package/build/lib/db/schemas/005_unique_graph_topic.sql +7 -0
  44. package/build/lib/db/schemas/011_system_workflow_configs.sql +7 -0
  45. package/build/lib/events/callback.d.ts +41 -0
  46. package/build/lib/events/callback.js +98 -0
  47. package/build/modules/config.js +1 -1
  48. package/build/routes/auth.js +37 -36
  49. package/build/routes/bot-accounts.js +34 -164
  50. package/build/routes/controlplane.js +20 -60
  51. package/build/routes/dba.js +18 -28
  52. package/build/routes/escalations/bulk.js +17 -192
  53. package/build/routes/escalations/list.js +29 -75
  54. package/build/routes/escalations/resolve.js +3 -193
  55. package/build/routes/escalations/single.js +13 -122
  56. package/build/routes/exports.js +44 -95
  57. package/build/routes/index.js +2 -0
  58. package/build/routes/insight.js +46 -88
  59. package/build/routes/maintenance.js +41 -17
  60. package/build/routes/mcp-runs.js +52 -60
  61. package/build/routes/mcp.js +49 -177
  62. package/build/routes/namespaces.js +9 -20
  63. package/build/routes/roles.js +23 -97
  64. package/build/routes/settings.js +37 -25
  65. package/build/routes/tasks.js +28 -64
  66. package/build/routes/users.js +24 -113
  67. package/build/routes/workflow-sets.d.ts +2 -0
  68. package/build/routes/workflow-sets.js +98 -0
  69. package/build/routes/workflows/config.js +23 -57
  70. package/build/routes/workflows/discovery.js +11 -85
  71. package/build/routes/workflows/invocation.js +16 -84
  72. package/build/routes/yaml-workflows/cron.js +12 -61
  73. package/build/routes/yaml-workflows/crud.js +30 -223
  74. package/build/routes/yaml-workflows/deployment.js +15 -115
  75. package/build/routes/yaml-workflows/versions.js +20 -58
  76. package/build/sdk/index.d.ts +327 -0
  77. package/build/sdk/index.js +298 -0
  78. package/build/services/controlplane/index.d.ts +1 -2
  79. package/build/services/controlplane/index.js +3 -3
  80. package/build/services/controlplane/sql.d.ts +2 -2
  81. package/build/services/controlplane/sql.js +4 -5
  82. package/build/services/controlplane/types.d.ts +1 -0
  83. package/build/services/export/index.js +6 -1
  84. package/build/services/hotmesh-utils.js +2 -4
  85. package/build/services/insight/index.d.ts +7 -0
  86. package/build/services/insight/index.js +30 -0
  87. package/build/services/mcp/client/tools.js +13 -1
  88. package/build/services/mcp-runs/sql.js +1 -1
  89. package/build/services/workflow-sets/db.d.ts +16 -0
  90. package/build/services/workflow-sets/db.js +78 -0
  91. package/build/services/workflow-sets/index.d.ts +1 -0
  92. package/build/services/workflow-sets/index.js +11 -0
  93. package/build/services/workflow-sets/sql.d.ts +6 -0
  94. package/build/services/workflow-sets/sql.js +24 -0
  95. package/build/services/yaml-workflow/db-utils.d.ts +1 -0
  96. package/build/services/yaml-workflow/db-utils.js +4 -0
  97. package/build/services/yaml-workflow/db.d.ts +5 -0
  98. package/build/services/yaml-workflow/db.js +17 -0
  99. package/build/services/yaml-workflow/pipeline/build/wiring.js +14 -1
  100. package/build/services/yaml-workflow/pipeline/prompts.d.ts +1 -1
  101. package/build/services/yaml-workflow/pipeline/prompts.js +1 -1
  102. package/build/services/yaml-workflow/sql.d.ts +2 -1
  103. package/build/services/yaml-workflow/sql.js +8 -3
  104. package/build/services/yaml-workflow/types.d.ts +3 -0
  105. package/build/services/yaml-workflow/workers/callbacks.js +7 -1
  106. package/build/services/yaml-workflow/workers/register.js +7 -0
  107. package/build/start/adapters.js +4 -0
  108. package/build/system/index.js +6 -0
  109. package/build/system/mcp-servers/knowledge.js +1 -1
  110. package/build/system/seed/server-definitions.js +2 -1
  111. package/build/system/workflows/mcp-workflow-builder/activities/index.d.ts +1 -1
  112. package/build/system/workflows/mcp-workflow-builder/activities/index.js +2 -1
  113. package/build/system/workflows/mcp-workflow-builder/activities/tool-loader.d.ts +6 -0
  114. package/build/system/workflows/mcp-workflow-builder/activities/tool-loader.js +26 -0
  115. package/build/system/workflows/mcp-workflow-builder/index.js +26 -2
  116. package/build/system/workflows/mcp-workflow-builder/prompts.js +104 -35
  117. package/build/system/workflows/mcp-workflow-planner/activities/analyze.d.ts +11 -0
  118. package/build/system/workflows/mcp-workflow-planner/activities/analyze.js +36 -0
  119. package/build/system/workflows/mcp-workflow-planner/activities/index.d.ts +3 -0
  120. package/build/system/workflows/mcp-workflow-planner/activities/index.js +12 -0
  121. package/build/system/workflows/mcp-workflow-planner/activities/persist.d.ts +19 -0
  122. package/build/system/workflows/mcp-workflow-planner/activities/persist.js +55 -0
  123. package/build/system/workflows/mcp-workflow-planner/activities/plan.d.ts +10 -0
  124. package/build/system/workflows/mcp-workflow-planner/activities/plan.js +43 -0
  125. package/build/system/workflows/mcp-workflow-planner/index.d.ts +7 -0
  126. package/build/system/workflows/mcp-workflow-planner/index.js +152 -0
  127. package/build/system/workflows/mcp-workflow-planner/prompts.d.ts +7 -0
  128. package/build/system/workflows/mcp-workflow-planner/prompts.js +77 -0
  129. package/build/tsconfig.tsbuildinfo +1 -1
  130. package/build/types/index.d.ts +1 -0
  131. package/build/types/sdk.d.ts +27 -0
  132. package/build/types/sdk.js +2 -0
  133. package/build/types/workflow-set.d.ts +44 -0
  134. package/build/types/workflow-set.js +5 -0
  135. package/dashboard/dist/assets/{AdminDashboard-BXkKGkb5.js → AdminDashboard-DRjkRSjJ.js} +2 -2
  136. package/dashboard/dist/assets/{AdminDashboard-BXkKGkb5.js.map → AdminDashboard-DRjkRSjJ.js.map} +1 -1
  137. package/dashboard/dist/assets/{AvailableEscalationsPage-DcH592mc.js → AvailableEscalationsPage-CnivX4Tz.js} +2 -2
  138. package/dashboard/dist/assets/{AvailableEscalationsPage-DcH592mc.js.map → AvailableEscalationsPage-CnivX4Tz.js.map} +1 -1
  139. package/dashboard/dist/assets/BotPicker-DwwaBhTH.js +2 -0
  140. package/dashboard/dist/assets/{BotPicker-A6LtzyuO.js.map → BotPicker-DwwaBhTH.js.map} +1 -1
  141. package/dashboard/dist/assets/{CollapsibleSection-C7nL2_mv.js → CollapsibleSection-DQpaVA0M.js} +2 -2
  142. package/dashboard/dist/assets/{CollapsibleSection-C7nL2_mv.js.map → CollapsibleSection-DQpaVA0M.js.map} +1 -1
  143. package/dashboard/dist/assets/{ConfirmDeleteModal-CWFwJrSl.js → ConfirmDeleteModal-B7JoDNvt.js} +2 -2
  144. package/dashboard/dist/assets/{ConfirmDeleteModal-CWFwJrSl.js.map → ConfirmDeleteModal-B7JoDNvt.js.map} +1 -1
  145. package/dashboard/dist/assets/{CopyableId-DbZ5c3jh.js → CopyableId-AqoZayBG.js} +2 -2
  146. package/dashboard/dist/assets/{CopyableId-DbZ5c3jh.js.map → CopyableId-AqoZayBG.js.map} +1 -1
  147. package/dashboard/dist/assets/{CredentialsPage-ClWkmLPu.js → CredentialsPage-qGw1kQzi.js} +2 -2
  148. package/dashboard/dist/assets/{CredentialsPage-ClWkmLPu.js.map → CredentialsPage-qGw1kQzi.js.map} +1 -1
  149. package/dashboard/dist/assets/{CustomDurationPicker-CtH2hReF.js → CustomDurationPicker-D1HUQcd0.js} +2 -2
  150. package/dashboard/dist/assets/{CustomDurationPicker-CtH2hReF.js.map → CustomDurationPicker-D1HUQcd0.js.map} +1 -1
  151. package/dashboard/dist/assets/{DataTable-CM5ZcpPi.js → DataTable-DKvSKoVG.js} +2 -2
  152. package/dashboard/dist/assets/{DataTable-CM5ZcpPi.js.map → DataTable-DKvSKoVG.js.map} +1 -1
  153. package/dashboard/dist/assets/{ElapsedCell-CwqavyeC.js → ElapsedCell-B0yrReGQ.js} +2 -2
  154. package/dashboard/dist/assets/{ElapsedCell-CwqavyeC.js.map → ElapsedCell-B0yrReGQ.js.map} +1 -1
  155. package/dashboard/dist/assets/{EmptyState-BBn78pmm.js → EmptyState-X0fIzYID.js} +2 -2
  156. package/dashboard/dist/assets/{EmptyState-BBn78pmm.js.map → EmptyState-X0fIzYID.js.map} +1 -1
  157. package/dashboard/dist/assets/{EscalationsOverview-BcJ2E3X7.js → EscalationsOverview-BQAT9W7r.js} +2 -2
  158. package/dashboard/dist/assets/{EscalationsOverview-BcJ2E3X7.js.map → EscalationsOverview-BQAT9W7r.js.map} +1 -1
  159. package/dashboard/dist/assets/{EventTable-C1en_KZ0.js → EventTable-CX1KNLhZ.js} +2 -2
  160. package/dashboard/dist/assets/{EventTable-C1en_KZ0.js.map → EventTable-CX1KNLhZ.js.map} +1 -1
  161. package/dashboard/dist/assets/{FilterBar-CZTlrLQT.js → FilterBar-DMTvuQy-.js} +2 -2
  162. package/dashboard/dist/assets/{FilterBar-CZTlrLQT.js.map → FilterBar-DMTvuQy-.js.map} +1 -1
  163. package/dashboard/dist/assets/{ListToolbar-Cdbsapig.js → ListToolbar-DTOSxoEy.js} +2 -2
  164. package/dashboard/dist/assets/{ListToolbar-Cdbsapig.js.map → ListToolbar-DTOSxoEy.js.map} +1 -1
  165. package/dashboard/dist/assets/{McpOverview-CSpEJxKa.js → McpOverview-BaKTIWrG.js} +2 -2
  166. package/dashboard/dist/assets/{McpOverview-CSpEJxKa.js.map → McpOverview-BaKTIWrG.js.map} +1 -1
  167. package/dashboard/dist/assets/McpQueryDetailPage-CC08T5k8.js +5 -0
  168. package/dashboard/dist/assets/McpQueryDetailPage-CC08T5k8.js.map +1 -0
  169. package/dashboard/dist/assets/McpQueryPage-CVfF9dYg.js +2 -0
  170. package/dashboard/dist/assets/McpQueryPage-CVfF9dYg.js.map +1 -0
  171. package/dashboard/dist/assets/{McpRunDetailPage-9xdxgG4d.js → McpRunDetailPage-CKs1RWeV.js} +2 -2
  172. package/dashboard/dist/assets/{McpRunDetailPage-9xdxgG4d.js.map → McpRunDetailPage-CKs1RWeV.js.map} +1 -1
  173. package/dashboard/dist/assets/{McpRunsPage-wWLqHsd4.js → McpRunsPage-CcPD_tY1.js} +2 -2
  174. package/dashboard/dist/assets/{McpRunsPage-wWLqHsd4.js.map → McpRunsPage-CcPD_tY1.js.map} +1 -1
  175. package/dashboard/dist/assets/{Modal-kB_P7ZOr.js → Modal-_2AbWxJT.js} +2 -2
  176. package/dashboard/dist/assets/{Modal-kB_P7ZOr.js.map → Modal-_2AbWxJT.js.map} +1 -1
  177. package/dashboard/dist/assets/OperatorDashboard-BGiRaRDr.js +2 -0
  178. package/dashboard/dist/assets/{OperatorDashboard-jc0vrgDI.js.map → OperatorDashboard-BGiRaRDr.js.map} +1 -1
  179. package/dashboard/dist/assets/{PageHeader-NkOeBR05.js → PageHeader-DVr5Qyzm.js} +2 -2
  180. package/dashboard/dist/assets/{PageHeader-NkOeBR05.js.map → PageHeader-DVr5Qyzm.js.map} +1 -1
  181. package/dashboard/dist/assets/{PageHeaderWithStats-ywNhrmFK.js → PageHeaderWithStats-D0KRASML.js} +2 -2
  182. package/dashboard/dist/assets/{PageHeaderWithStats-ywNhrmFK.js.map → PageHeaderWithStats-D0KRASML.js.map} +1 -1
  183. package/dashboard/dist/assets/{PriorityBadge-B2MQbSxy.js → PriorityBadge-Bx2559OU.js} +2 -2
  184. package/dashboard/dist/assets/{PriorityBadge-B2MQbSxy.js.map → PriorityBadge-Bx2559OU.js.map} +1 -1
  185. package/dashboard/dist/assets/{ProcessDetailPage-B7z7IdqE.js → ProcessDetailPage-69I--sry.js} +2 -2
  186. package/dashboard/dist/assets/{ProcessDetailPage-B7z7IdqE.js.map → ProcessDetailPage-69I--sry.js.map} +1 -1
  187. package/dashboard/dist/assets/{ProcessesListPage-C-uHadO6.js → ProcessesListPage-BDpUbua2.js} +2 -2
  188. package/dashboard/dist/assets/{ProcessesListPage-C-uHadO6.js.map → ProcessesListPage-BDpUbua2.js.map} +1 -1
  189. package/dashboard/dist/assets/{RolePill-C1dgC-fK.js → RolePill-CcAqEaSt.js} +2 -2
  190. package/dashboard/dist/assets/{RolePill-C1dgC-fK.js.map → RolePill-CcAqEaSt.js.map} +1 -1
  191. package/dashboard/dist/assets/{RolesPage-BSxrD1vm.js → RolesPage-Cl23Hjet.js} +2 -2
  192. package/dashboard/dist/assets/{RolesPage-BSxrD1vm.js.map → RolesPage-Cl23Hjet.js.map} +1 -1
  193. package/dashboard/dist/assets/{RowActions-lYaHGI-v.js → RowActions-B4mqIt3Z.js} +2 -2
  194. package/dashboard/dist/assets/{RowActions-lYaHGI-v.js.map → RowActions-B4mqIt3Z.js.map} +1 -1
  195. package/dashboard/dist/assets/{StatCard-v2TiITVr.js → StatCard-Cz_2OjAZ.js} +2 -2
  196. package/dashboard/dist/assets/{StatCard-v2TiITVr.js.map → StatCard-Cz_2OjAZ.js.map} +1 -1
  197. package/dashboard/dist/assets/{StatusBadge-DWlxevgG.js → StatusBadge-Wi2FJZsn.js} +2 -2
  198. package/dashboard/dist/assets/{StatusBadge-DWlxevgG.js.map → StatusBadge-Wi2FJZsn.js.map} +1 -1
  199. package/dashboard/dist/assets/{StepIndicator-CRM4ft28.js → StepIndicator-PW5NRDMb.js} +2 -2
  200. package/dashboard/dist/assets/{StepIndicator-CRM4ft28.js.map → StepIndicator-PW5NRDMb.js.map} +1 -1
  201. package/dashboard/dist/assets/{StickyPagination-CF0EToEU.js → StickyPagination-Bl2Uzz65.js} +2 -2
  202. package/dashboard/dist/assets/{StickyPagination-CF0EToEU.js.map → StickyPagination-Bl2Uzz65.js.map} +1 -1
  203. package/dashboard/dist/assets/{SwimlaneTimeline-CNlj7fgg.js → SwimlaneTimeline-CUPqMd0z.js} +2 -2
  204. package/dashboard/dist/assets/{SwimlaneTimeline-CNlj7fgg.js.map → SwimlaneTimeline-CUPqMd0z.js.map} +1 -1
  205. package/dashboard/dist/assets/{TagInput-CH8qMGhC.js → TagInput-BLtf86Ly.js} +2 -2
  206. package/dashboard/dist/assets/{TagInput-CH8qMGhC.js.map → TagInput-BLtf86Ly.js.map} +1 -1
  207. package/dashboard/dist/assets/{TaskDetailPage-CdWo-6mu.js → TaskDetailPage-BXJFX74D.js} +2 -2
  208. package/dashboard/dist/assets/{TaskDetailPage-CdWo-6mu.js.map → TaskDetailPage-BXJFX74D.js.map} +1 -1
  209. package/dashboard/dist/assets/{TaskQueuePill-BPj4ogVG.js → TaskQueuePill-CWYj3xKe.js} +2 -2
  210. package/dashboard/dist/assets/{TaskQueuePill-BPj4ogVG.js.map → TaskQueuePill-CWYj3xKe.js.map} +1 -1
  211. package/dashboard/dist/assets/{TasksListPage-CtRkMpKU.js → TasksListPage-C3cX94Mw.js} +2 -2
  212. package/dashboard/dist/assets/{TasksListPage-CtRkMpKU.js.map → TasksListPage-C3cX94Mw.js.map} +1 -1
  213. package/dashboard/dist/assets/{TimeAgo-Di1a3X5P.js → TimeAgo-B_5yDDHV.js} +2 -2
  214. package/dashboard/dist/assets/{TimeAgo-Di1a3X5P.js.map → TimeAgo-B_5yDDHV.js.map} +1 -1
  215. package/dashboard/dist/assets/{TimestampCell-CqrXql-S.js → TimestampCell-DRX724uU.js} +2 -2
  216. package/dashboard/dist/assets/{TimestampCell-CqrXql-S.js.map → TimestampCell-DRX724uU.js.map} +1 -1
  217. package/dashboard/dist/assets/{UserName-BUFYCnRa.js → UserName-Ca8FA469.js} +2 -2
  218. package/dashboard/dist/assets/{UserName-BUFYCnRa.js.map → UserName-Ca8FA469.js.map} +1 -1
  219. package/dashboard/dist/assets/{WorkflowExecutionPage-25iusMml.js → WorkflowExecutionPage-BBYWEV2P.js} +2 -2
  220. package/dashboard/dist/assets/{WorkflowExecutionPage-25iusMml.js.map → WorkflowExecutionPage-BBYWEV2P.js.map} +1 -1
  221. package/dashboard/dist/assets/WorkflowPill-BXifAuLi.js +2 -0
  222. package/dashboard/dist/assets/{WorkflowPill-DPKOcbf4.js.map → WorkflowPill-BXifAuLi.js.map} +1 -1
  223. package/dashboard/dist/assets/{WorkflowsDashboard-BgxslssH.js → WorkflowsDashboard-Drl3juz9.js} +2 -2
  224. package/dashboard/dist/assets/{WorkflowsDashboard-BgxslssH.js.map → WorkflowsDashboard-Drl3juz9.js.map} +1 -1
  225. package/dashboard/dist/assets/{WorkflowsOverview-Doe5L-Re.js → WorkflowsOverview-03IRrDLg.js} +2 -2
  226. package/dashboard/dist/assets/{WorkflowsOverview-Doe5L-Re.js.map → WorkflowsOverview-03IRrDLg.js.map} +1 -1
  227. package/dashboard/dist/assets/YamlWorkflowsPage-DC2cLxVi.js +2 -0
  228. package/dashboard/dist/assets/YamlWorkflowsPage-DC2cLxVi.js.map +1 -0
  229. package/dashboard/dist/assets/{bots-Bi2_O1Ts.js → bots-DZEXcgiJ.js} +2 -2
  230. package/dashboard/dist/assets/{bots-Bi2_O1Ts.js.map → bots-DZEXcgiJ.js.map} +1 -1
  231. package/dashboard/dist/assets/{escalation-Ck1KlLkT.js → escalation-Cw48lNaF.js} +2 -2
  232. package/dashboard/dist/assets/{escalation-Ck1KlLkT.js.map → escalation-Cw48lNaF.js.map} +1 -1
  233. package/dashboard/dist/assets/{escalation-columns-ohDsj2eJ.js → escalation-columns-NINpo3qf.js} +2 -2
  234. package/dashboard/dist/assets/{escalation-columns-ohDsj2eJ.js.map → escalation-columns-NINpo3qf.js.map} +1 -1
  235. package/dashboard/dist/assets/helpers-Cuu3xKfr.js +2 -0
  236. package/dashboard/dist/assets/helpers-Cuu3xKfr.js.map +1 -0
  237. package/dashboard/dist/assets/{helpers-BoD2SgUY.js → helpers-fk_qr729.js} +2 -2
  238. package/dashboard/dist/assets/{helpers-BoD2SgUY.js.map → helpers-fk_qr729.js.map} +1 -1
  239. package/dashboard/dist/assets/index-B98ipWxE.js +2 -0
  240. package/dashboard/dist/assets/{index-D7zYZOnH.js.map → index-B98ipWxE.js.map} +1 -1
  241. package/dashboard/dist/assets/{index-BEtLIsML.js → index-BIG3KooI.js} +2 -2
  242. package/dashboard/dist/assets/{index-BEtLIsML.js.map → index-BIG3KooI.js.map} +1 -1
  243. package/dashboard/dist/assets/{index-DYyLF-Qb.js → index-BwN3KP_L.js} +5 -5
  244. package/dashboard/dist/assets/{index-DYyLF-Qb.js.map → index-BwN3KP_L.js.map} +1 -1
  245. package/dashboard/dist/assets/index-Bxe8h1x4.js +17 -0
  246. package/dashboard/dist/assets/{index-DOkHXmyf.js.map → index-Bxe8h1x4.js.map} +1 -1
  247. package/dashboard/dist/assets/{index-FuohTtaM.js → index-CNI7k7oB.js} +3 -3
  248. package/dashboard/dist/assets/{index-FuohTtaM.js.map → index-CNI7k7oB.js.map} +1 -1
  249. package/dashboard/dist/assets/{index-CZrJ09p-.js → index-CORHB0WC.js} +2 -2
  250. package/dashboard/dist/assets/{index-CZrJ09p-.js.map → index-CORHB0WC.js.map} +1 -1
  251. package/dashboard/dist/assets/{index-PyCTS05D.css → index-DcIKW-cZ.css} +1 -1
  252. package/dashboard/dist/assets/{index-D3NyVADW.js → index-Dj-z-x8M.js} +2 -2
  253. package/dashboard/dist/assets/index-Dj-z-x8M.js.map +1 -0
  254. package/dashboard/dist/assets/{index-Bn2xHDr8.js → index-DwRytW9O.js} +3 -3
  255. package/dashboard/dist/assets/{index-Bn2xHDr8.js.map → index-DwRytW9O.js.map} +1 -1
  256. package/dashboard/dist/assets/index-aRvL-dXp.js +2 -0
  257. package/dashboard/dist/assets/{index-Dk2Q51o0.js.map → index-aRvL-dXp.js.map} +1 -1
  258. package/dashboard/dist/assets/index-b03HlbnH.js +2 -0
  259. package/dashboard/dist/assets/{index-BpT-6WgJ.js.map → index-b03HlbnH.js.map} +1 -1
  260. package/dashboard/dist/assets/{mcp-CJtYjA7A.js → mcp-BZoFryNc.js} +2 -2
  261. package/dashboard/dist/assets/{mcp-CJtYjA7A.js.map → mcp-BZoFryNc.js.map} +1 -1
  262. package/dashboard/dist/assets/mcp-query-wiw1kwm8.js +2 -0
  263. package/dashboard/dist/assets/mcp-query-wiw1kwm8.js.map +1 -0
  264. package/dashboard/dist/assets/{mcp-runs-DUWm9Z4V.js → mcp-runs-BaEKnf5v.js} +2 -2
  265. package/dashboard/dist/assets/{mcp-runs-DUWm9Z4V.js.map → mcp-runs-BaEKnf5v.js.map} +1 -1
  266. package/dashboard/dist/assets/{namespaces-BM5P2qmL.js → namespaces-BwnZI4_A.js} +2 -2
  267. package/dashboard/dist/assets/{namespaces-BM5P2qmL.js.map → namespaces-BwnZI4_A.js.map} +1 -1
  268. package/dashboard/dist/assets/{roles-lv0shpjJ.js → roles-Bgn1K8zU.js} +2 -2
  269. package/dashboard/dist/assets/{roles-lv0shpjJ.js.map → roles-Bgn1K8zU.js.map} +1 -1
  270. package/dashboard/dist/assets/{settings-Wlq92mRo.js → settings-CizYiutL.js} +2 -2
  271. package/dashboard/dist/assets/{settings-Wlq92mRo.js.map → settings-CizYiutL.js.map} +1 -1
  272. package/dashboard/dist/assets/{tasks-BFGm4PuE.js → tasks-Bmte_hc4.js} +2 -2
  273. package/dashboard/dist/assets/{tasks-BFGm4PuE.js.map → tasks-Bmte_hc4.js.map} +1 -1
  274. package/dashboard/dist/assets/{useEventHooks-DIE6ue4x.js → useEventHooks-CUCxpiI2.js} +2 -2
  275. package/dashboard/dist/assets/{useEventHooks-DIE6ue4x.js.map → useEventHooks-CUCxpiI2.js.map} +1 -1
  276. package/dashboard/dist/assets/{useYamlActivityEvents-DCwSO73t.js → useYamlActivityEvents-Cum02Ej9.js} +2 -2
  277. package/dashboard/dist/assets/{useYamlActivityEvents-DCwSO73t.js.map → useYamlActivityEvents-Cum02Ej9.js.map} +1 -1
  278. package/dashboard/dist/assets/{users-tA5-K0wA.js → users-NSDgTt-z.js} +2 -2
  279. package/dashboard/dist/assets/{users-tA5-K0wA.js.map → users-NSDgTt-z.js.map} +1 -1
  280. package/dashboard/dist/assets/{vendor-icons-BiIug1SK.js → vendor-icons-D1DdudfH.js} +93 -73
  281. package/dashboard/dist/assets/vendor-icons-D1DdudfH.js.map +1 -0
  282. package/dashboard/dist/assets/{workflows-CfLc15Wr.js → workflows-k0XRdGXx.js} +2 -2
  283. package/dashboard/dist/assets/{workflows-CfLc15Wr.js.map → workflows-k0XRdGXx.js.map} +1 -1
  284. package/dashboard/dist/assets/yaml-workflows-DAre8I78.js +2 -0
  285. package/dashboard/dist/assets/yaml-workflows-DAre8I78.js.map +1 -0
  286. package/dashboard/dist/index.html +3 -3
  287. package/docs/epic-integration.md +224 -0
  288. package/docs/events.md +28 -0
  289. package/docs/sdk.md +177 -0
  290. package/docs/story.md +157 -0
  291. package/docs/workflow-builder.md +371 -0
  292. package/package.json +3 -2
  293. package/build/routes/escalations/helpers.d.ts +0 -5
  294. package/build/routes/resolve.d.ts +0 -9
  295. package/build/routes/resolve.js +0 -19
  296. package/build/routes/yaml-workflows/helpers.d.ts +0 -2
  297. package/build/routes/yaml-workflows/helpers.js +0 -8
  298. package/dashboard/dist/assets/BotPicker-A6LtzyuO.js +0 -2
  299. package/dashboard/dist/assets/McpQueryDetailPage-DhqEI180.js +0 -5
  300. package/dashboard/dist/assets/McpQueryDetailPage-DhqEI180.js.map +0 -1
  301. package/dashboard/dist/assets/McpQueryPage-CIiVMlqo.js +0 -2
  302. package/dashboard/dist/assets/McpQueryPage-CIiVMlqo.js.map +0 -1
  303. package/dashboard/dist/assets/OperatorDashboard-jc0vrgDI.js +0 -2
  304. package/dashboard/dist/assets/RunAsSelector-CJDnyp93.js +0 -2
  305. package/dashboard/dist/assets/RunAsSelector-CJDnyp93.js.map +0 -1
  306. package/dashboard/dist/assets/WorkflowPill-DPKOcbf4.js +0 -2
  307. package/dashboard/dist/assets/YamlWorkflowsPage-BliAckJ6.js +0 -2
  308. package/dashboard/dist/assets/YamlWorkflowsPage-BliAckJ6.js.map +0 -1
  309. package/dashboard/dist/assets/index-BpT-6WgJ.js +0 -2
  310. package/dashboard/dist/assets/index-D3NyVADW.js.map +0 -1
  311. package/dashboard/dist/assets/index-D7zYZOnH.js +0 -2
  312. package/dashboard/dist/assets/index-DOkHXmyf.js +0 -17
  313. package/dashboard/dist/assets/index-Dk2Q51o0.js +0 -2
  314. package/dashboard/dist/assets/mcp-query-jQJQrs_7.js +0 -2
  315. package/dashboard/dist/assets/mcp-query-jQJQrs_7.js.map +0 -1
  316. package/dashboard/dist/assets/vendor-icons-BiIug1SK.js.map +0 -1
  317. package/dashboard/dist/assets/yaml-workflows-D7JXNqbM.js +0 -2
  318. package/dashboard/dist/assets/yaml-workflows-D7JXNqbM.js.map +0 -1
  319. package/docs/img/01-login.png +0 -0
  320. package/docs/img/02-dashboard-home.png +0 -0
  321. package/docs/img/03-processes-list.png +0 -0
  322. package/docs/img/04-escalations-list.png +0 -0
  323. package/docs/img/05-mcp-servers.png +0 -0
  324. package/docs/img/06-mcp-pipelines.png +0 -0
  325. package/docs/img/07-workflows-list.png +0 -0
  326. package/docs/img/compilation/01-query-submit.png +0 -0
  327. package/docs/img/compilation/02-mcp-servers.png +0 -0
  328. package/docs/img/compilation/03-query-completed.png +0 -0
  329. package/docs/img/compilation/04-wizard-original.png +0 -0
  330. package/docs/img/compilation/05-wizard-timeline.png +0 -0
  331. package/docs/img/compilation/06-wizard-profile.png +0 -0
  332. package/docs/img/compilation/07-wizard-deploy.png +0 -0
  333. package/docs/img/compilation/08-wizard-test-modal.png +0 -0
  334. package/docs/img/compilation/09-wizard-test-compare.png +0 -0
  335. package/docs/img/compilation/10-wizard-verify.png +0 -0
@@ -34,10 +34,7 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  const express_1 = require("express");
37
- const workers_1 = require("../../workers");
38
- const exportService = __importStar(require("../../services/export"));
39
- const resolve_1 = require("../resolve");
40
- const workflow_invocation_1 = require("../../services/workflow-invocation");
37
+ const api = __importStar(require("../../api/workflows"));
41
38
  const router = (0, express_1.Router)();
42
39
  // ── Workflow invocation ─────────────────────────────────────────────────────
43
40
  /**
@@ -52,32 +49,13 @@ const router = (0, express_1.Router)();
52
49
  * Body: { data: Record<string, any>, metadata?: Record<string, any> }
53
50
  */
54
51
  router.post('/:type/invoke', async (req, res) => {
55
- try {
56
- const workflowType = req.params.type;
57
- const userId = req.auth?.userId ?? '';
58
- // Role check (requires DB lookup, kept separate from core invoke)
59
- await (0, workflow_invocation_1.checkInvocationRoles)(workflowType, userId);
60
- const { data, metadata, execute_as: executeAs } = req.body || {};
61
- const result = await (0, workflow_invocation_1.invokeWorkflow)({
62
- workflowType,
63
- data,
64
- metadata,
65
- executeAs,
66
- auth: {
67
- userId,
68
- role: req.auth?.role,
69
- scopes: req.auth?.scopes,
70
- },
71
- });
72
- res.status(202).json({
73
- workflowId: result.workflowId,
74
- message: 'Workflow started',
75
- });
76
- }
77
- catch (err) {
78
- const status = err instanceof workflow_invocation_1.InvocationError ? err.statusCode : 500;
79
- res.status(status).json({ error: err.message });
80
- }
52
+ const result = await api.invokeWorkflow({
53
+ type: req.params.type,
54
+ data: req.body?.data,
55
+ metadata: req.body?.metadata,
56
+ execute_as: req.body?.execute_as,
57
+ }, { userId: req.auth?.userId ?? '' });
58
+ res.status(result.status).json(result.data ?? { error: result.error });
81
59
  });
82
60
  // ── Workflow observation ────────────────────────────────────────────────────
83
61
  /**
@@ -85,18 +63,8 @@ router.post('/:type/invoke', async (req, res) => {
85
63
  * Get the status of a workflow. Only the workflowId is needed.
86
64
  */
87
65
  router.get('/:workflowId/status', async (req, res) => {
88
- try {
89
- const resolved = await (0, resolve_1.resolveHandle)(req, res);
90
- if (!resolved)
91
- return;
92
- const client = (0, workers_1.createClient)();
93
- const handle = await client.workflow.getHandle(resolved.taskQueue, resolved.workflowName, req.params.workflowId);
94
- const status = await handle.status();
95
- res.json({ workflowId: req.params.workflowId, status });
96
- }
97
- catch (err) {
98
- res.status(500).json({ error: err.message });
99
- }
66
+ const result = await api.getWorkflowStatus({ workflowId: req.params.workflowId });
67
+ res.status(result.status).json(result.data ?? { error: result.error });
100
68
  });
101
69
  /**
102
70
  * GET /api/workflows/:workflowId/result
@@ -104,59 +72,23 @@ router.get('/:workflowId/status', async (req, res) => {
104
72
  * Never blocks — always returns immediately.
105
73
  */
106
74
  router.get('/:workflowId/result', async (req, res) => {
107
- try {
108
- const resolved = await (0, resolve_1.resolveHandle)(req, res);
109
- if (!resolved)
110
- return;
111
- const client = (0, workers_1.createClient)();
112
- const handle = await client.workflow.getHandle(resolved.taskQueue, resolved.workflowName, req.params.workflowId);
113
- const status = await handle.status();
114
- if (status !== 0) {
115
- res.status(202).json({
116
- workflowId: req.params.workflowId,
117
- status: 'running',
118
- });
119
- return;
120
- }
121
- const result = await handle.result();
122
- res.json({ workflowId: req.params.workflowId, result });
123
- }
124
- catch (err) {
125
- res.status(500).json({ error: err.message });
126
- }
75
+ const result = await api.getWorkflowResult({ workflowId: req.params.workflowId });
76
+ res.status(result.status).json(result.data ?? { error: result.error });
127
77
  });
128
78
  /**
129
79
  * POST /api/workflows/:workflowId/terminate
130
80
  * Interrupt/terminate a running workflow.
131
81
  */
132
82
  router.post('/:workflowId/terminate', async (req, res) => {
133
- try {
134
- const resolved = await (0, resolve_1.resolveHandle)(req, res);
135
- if (!resolved)
136
- return;
137
- const client = (0, workers_1.createClient)();
138
- const handle = await client.workflow.getHandle(resolved.taskQueue, resolved.workflowName, req.params.workflowId);
139
- await handle.terminate();
140
- res.json({ terminated: true, workflowId: req.params.workflowId });
141
- }
142
- catch (err) {
143
- res.status(500).json({ error: err.message });
144
- }
83
+ const result = await api.terminateWorkflow({ workflowId: req.params.workflowId });
84
+ res.status(result.status).json(result.data ?? { error: result.error });
145
85
  });
146
86
  /**
147
87
  * GET /api/workflows/:workflowId/export
148
88
  * Export workflow state. Convenience alias for /api/workflow-states/:workflowId.
149
89
  */
150
90
  router.get('/:workflowId/export', async (req, res) => {
151
- try {
152
- const resolved = await (0, resolve_1.resolveHandle)(req, res);
153
- if (!resolved)
154
- return;
155
- const exported = await exportService.exportWorkflow(req.params.workflowId, resolved.taskQueue, resolved.workflowName);
156
- res.json(exported);
157
- }
158
- catch (err) {
159
- res.status(500).json({ error: err.message });
160
- }
91
+ const result = await api.exportWorkflow({ workflowId: req.params.workflowId });
92
+ res.status(result.status).json(result.data ?? { error: result.error });
161
93
  });
162
94
  exports.default = router;
@@ -34,84 +34,35 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  const express_1 = require("express");
37
- const yamlDb = __importStar(require("../../services/yaml-workflow/db"));
38
- const cron_1 = require("../../services/cron");
39
- const helpers_1 = require("./helpers");
37
+ const api = __importStar(require("../../api/yaml-workflows"));
40
38
  const router = (0, express_1.Router)();
41
39
  /**
42
40
  * PUT /api/yaml-workflows/:id/cron
43
41
  * Set or update cron schedule + envelope + execute_as.
44
42
  */
45
43
  router.put('/:id/cron', async (req, res) => {
46
- try {
47
- const wf = await yamlDb.getYamlWorkflow(req.params.id);
48
- if (!wf) {
49
- res.status(404).json({ error: 'YAML workflow not found' });
50
- return;
51
- }
52
- const { cron_schedule, cron_envelope, execute_as } = req.body;
53
- if (!cron_schedule || typeof cron_schedule !== 'string') {
54
- res.status(400).json({ error: 'cron_schedule is required' });
55
- return;
56
- }
57
- const updated = await yamlDb.updateCronSchedule(wf.id, cron_schedule.trim(), cron_envelope ?? null, execute_as ?? null);
58
- if (updated) {
59
- await cron_1.cronRegistry.restartYamlCron(updated);
60
- }
61
- res.json(updated);
62
- }
63
- catch (err) {
64
- if ((0, helpers_1.isNotFoundError)(err)) {
65
- res.status(404).json({ error: 'YAML workflow not found' });
66
- return;
67
- }
68
- res.status(500).json({ error: err.message });
69
- }
44
+ const result = await api.setCronSchedule({
45
+ id: req.params.id,
46
+ cron_schedule: req.body.cron_schedule,
47
+ cron_envelope: req.body.cron_envelope,
48
+ execute_as: req.body.execute_as,
49
+ });
50
+ res.status(result.status).json(result.data ?? { error: result.error });
70
51
  });
71
52
  /**
72
53
  * DELETE /api/yaml-workflows/:id/cron
73
54
  * Clear cron schedule.
74
55
  */
75
56
  router.delete('/:id/cron', async (req, res) => {
76
- try {
77
- const wf = await yamlDb.getYamlWorkflow(req.params.id);
78
- if (!wf) {
79
- res.status(404).json({ error: 'YAML workflow not found' });
80
- return;
81
- }
82
- await cron_1.cronRegistry.stopYamlCron(wf.id);
83
- const updated = await yamlDb.clearCronSchedule(wf.id);
84
- res.json(updated);
85
- }
86
- catch (err) {
87
- if ((0, helpers_1.isNotFoundError)(err)) {
88
- res.status(404).json({ error: 'YAML workflow not found' });
89
- return;
90
- }
91
- res.status(500).json({ error: err.message });
92
- }
57
+ const result = await api.clearCronSchedule({ id: req.params.id });
58
+ res.status(result.status).json(result.data ?? { error: result.error });
93
59
  });
94
60
  /**
95
61
  * GET /api/yaml-workflows/cron/status
96
62
  * List all YAML workflows with active cron schedules.
97
63
  */
98
64
  router.get('/cron/status', async (_req, res) => {
99
- try {
100
- const workflows = await yamlDb.getCronScheduledWorkflows();
101
- const activeTypes = cron_1.cronRegistry.activeWorkflowTypes;
102
- const schedules = workflows.map((wf) => ({
103
- id: wf.id,
104
- name: wf.name,
105
- graph_topic: wf.graph_topic,
106
- app_id: wf.app_id,
107
- cron_schedule: wf.cron_schedule,
108
- execute_as: wf.execute_as,
109
- active: activeTypes.includes(`yaml:${wf.id}`),
110
- }));
111
- res.json({ schedules });
112
- }
113
- catch (err) {
114
- res.status(500).json({ error: err.message });
115
- }
65
+ const result = await api.getCronStatus();
66
+ res.status(result.status).json(result.data ?? { error: result.error });
116
67
  });
117
68
  exports.default = router;
@@ -34,35 +34,24 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  const express_1 = require("express");
37
- const yamlDb = __importStar(require("../../services/yaml-workflow/db"));
38
- const yamlGenerator = __importStar(require("../../services/yaml-workflow/generator"));
39
- const task_1 = require("../../services/task");
40
- const helpers_1 = require("./helpers");
37
+ const api = __importStar(require("../../api/yaml-workflows"));
41
38
  const router = (0, express_1.Router)();
42
39
  /**
43
40
  * GET /api/yaml-workflows
44
41
  * List YAML workflows with optional status filter.
45
42
  */
46
43
  router.get('/', async (req, res) => {
47
- try {
48
- const result = await yamlDb.listYamlWorkflows({
49
- status: req.query.status,
50
- graph_topic: req.query.graph_topic,
51
- app_id: req.query.app_id,
52
- search: req.query.search,
53
- source_workflow_id: req.query.source_workflow_id,
54
- limit: req.query.limit ? parseInt(req.query.limit, 10) : undefined,
55
- offset: req.query.offset ? parseInt(req.query.offset, 10) : undefined,
56
- });
57
- res.json(result);
58
- }
59
- catch (err) {
60
- if ((0, helpers_1.isNotFoundError)(err)) {
61
- res.status(404).json({ error: 'YAML workflow not found' });
62
- return;
63
- }
64
- res.status(500).json({ error: err.message });
65
- }
44
+ const result = await api.listYamlWorkflows({
45
+ status: req.query.status,
46
+ graph_topic: req.query.graph_topic,
47
+ app_id: req.query.app_id,
48
+ search: req.query.search,
49
+ source_workflow_id: req.query.source_workflow_id,
50
+ set_id: req.query.set_id,
51
+ limit: req.query.limit ? parseInt(req.query.limit, 10) : undefined,
52
+ offset: req.query.offset ? parseInt(req.query.offset, 10) : undefined,
53
+ });
54
+ res.status(result.status).json(result.data ?? { error: result.error });
66
55
  });
67
56
  /**
68
57
  * POST /api/yaml-workflows
@@ -70,82 +59,16 @@ router.get('/', async (req, res) => {
70
59
  * Body: { workflow_id, task_queue, workflow_name, name, description? }
71
60
  */
72
61
  router.post('/', async (req, res) => {
73
- try {
74
- const { workflow_id, task_queue, workflow_name, name, description, app_id, subscribes, tags: userTags, compilation_feedback } = req.body;
75
- if (!workflow_id || !task_queue || !workflow_name || !name) {
76
- res.status(400).json({
77
- error: 'workflow_id, task_queue, workflow_name, and name are required',
78
- });
79
- return;
80
- }
81
- // Reject compilation of executions that exhausted their tool rounds —
82
- // the trace is incomplete and would produce a broken workflow.
83
- const task = await (0, task_1.getTaskByWorkflowId)(workflow_id);
84
- if (task) {
85
- const milestones = task.milestones ?? [];
86
- const roundsExhausted = milestones.some((m) => m.name === 'rounds_exhausted');
87
- if (roundsExhausted) {
88
- res.status(422).json({
89
- error: 'Cannot compile: the source execution exhausted its tool rounds without completing the task. Resolve the escalation and resubmit.',
90
- });
91
- return;
92
- }
93
- }
94
- // Generate YAML from execution
95
- const result = await yamlGenerator.generateYamlFromExecution({
96
- workflowId: workflow_id,
97
- taskQueue: task_queue,
98
- workflowName: workflow_name,
99
- name,
100
- description,
101
- appId: app_id,
102
- subscribes,
103
- compilationFeedback: compilation_feedback,
104
- });
105
- // Merge auto-derived tags with user-provided tags
106
- const mergedTags = [...new Set([...(result.tags || []), ...(Array.isArray(userTags) ? userTags : [])])];
107
- // Store in DB
108
- const record = await yamlDb.createYamlWorkflow({
109
- name,
110
- description,
111
- app_id: result.appId,
112
- yaml_content: result.yaml,
113
- graph_topic: result.graphTopic,
114
- input_schema: result.inputSchema,
115
- output_schema: result.outputSchema,
116
- activity_manifest: result.activityManifest,
117
- tags: mergedTags,
118
- source_workflow_id: workflow_id,
119
- source_workflow_type: workflow_name,
120
- original_prompt: result.originalPrompt || undefined,
121
- category: result.category || undefined,
122
- metadata: {
123
- input_field_meta: result.inputFieldMeta,
124
- ...(result.validationIssues?.length ? { validation_warnings: result.validationIssues } : {}),
125
- },
126
- });
127
- res.status(201).json(record);
128
- }
129
- catch (err) {
130
- if (err.message?.includes('duplicate key') || err.code === '23505') {
131
- res.status(409).json({ error: 'A tool with that name already exists' });
132
- return;
133
- }
134
- res.status(500).json({ error: err.message });
135
- }
62
+ const result = await api.createYamlWorkflow(req.body);
63
+ res.status(result.status).json(result.data ?? { error: result.error });
136
64
  });
137
65
  /**
138
66
  * GET /api/yaml-workflows/app-ids
139
67
  * Return distinct app_id values from non-archived workflows.
140
68
  */
141
69
  router.get('/app-ids', async (_req, res) => {
142
- try {
143
- const appIds = await yamlDb.getDistinctAppIds();
144
- res.json({ app_ids: appIds });
145
- }
146
- catch (err) {
147
- res.status(500).json({ error: err.message });
148
- }
70
+ const result = await api.getAppIds();
71
+ res.status(result.status).json(result.data ?? { error: result.error });
149
72
  });
150
73
  /**
151
74
  * POST /api/yaml-workflows/direct
@@ -154,36 +77,8 @@ router.get('/app-ids', async (_req, res) => {
154
77
  * Body: { name, description?, yaml_content, input_schema?, activity_manifest?, tags?, app_id? }
155
78
  */
156
79
  router.post('/direct', async (req, res) => {
157
- try {
158
- const { name, description, yaml_content, input_schema, activity_manifest, tags, app_id, graph_topic } = req.body;
159
- if (!name || !yaml_content) {
160
- res.status(400).json({ error: 'name and yaml_content are required' });
161
- return;
162
- }
163
- // Extract subscribes topic from YAML content, or fall back to name-derived slug
164
- let graphTopic = graph_topic || name.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');
165
- const subscribesMatch = yaml_content.match(/subscribes:\s*(.+)/);
166
- if (subscribesMatch) {
167
- graphTopic = subscribesMatch[1].trim().replace(/^['"]|['"]$/g, '');
168
- }
169
- const wf = await yamlDb.createYamlWorkflow({
170
- name,
171
- description,
172
- app_id: app_id || 'longtail',
173
- yaml_content,
174
- graph_topic: graphTopic,
175
- input_schema: input_schema || {},
176
- output_schema: {},
177
- activity_manifest: activity_manifest || [],
178
- tags: tags || [],
179
- original_prompt: description,
180
- category: 'builder',
181
- });
182
- res.json(wf);
183
- }
184
- catch (err) {
185
- res.status(500).json({ error: err.message });
186
- }
80
+ const result = await api.createYamlWorkflowDirect(req.body);
81
+ res.status(result.status).json(result.data ?? { error: result.error });
187
82
  });
188
83
  // -- Parameterized routes --
189
84
  /**
@@ -191,42 +86,16 @@ router.post('/direct', async (req, res) => {
191
86
  * Get a single YAML workflow.
192
87
  */
193
88
  router.get('/:id', async (req, res) => {
194
- try {
195
- const wf = await yamlDb.getYamlWorkflow(req.params.id);
196
- if (!wf) {
197
- res.status(404).json({ error: 'YAML workflow not found' });
198
- return;
199
- }
200
- res.json(wf);
201
- }
202
- catch (err) {
203
- if ((0, helpers_1.isNotFoundError)(err)) {
204
- res.status(404).json({ error: 'YAML workflow not found' });
205
- return;
206
- }
207
- res.status(500).json({ error: err.message });
208
- }
89
+ const result = await api.getYamlWorkflow({ id: req.params.id });
90
+ res.status(result.status).json(result.data ?? { error: result.error });
209
91
  });
210
92
  /**
211
93
  * PUT /api/yaml-workflows/:id
212
94
  * Update a YAML workflow's metadata.
213
95
  */
214
96
  router.put('/:id', async (req, res) => {
215
- try {
216
- const wf = await yamlDb.updateYamlWorkflow(req.params.id, req.body);
217
- if (!wf) {
218
- res.status(404).json({ error: 'YAML workflow not found' });
219
- return;
220
- }
221
- res.json(wf);
222
- }
223
- catch (err) {
224
- if ((0, helpers_1.isNotFoundError)(err)) {
225
- res.status(404).json({ error: 'YAML workflow not found' });
226
- return;
227
- }
228
- res.status(500).json({ error: err.message });
229
- }
97
+ const result = await api.updateYamlWorkflow({ id: req.params.id, ...req.body });
98
+ res.status(result.status).json(result.data ?? { error: result.error });
230
99
  });
231
100
  /**
232
101
  * POST /api/yaml-workflows/:id/regenerate
@@ -234,81 +103,19 @@ router.put('/:id', async (req, res) => {
234
103
  * Only allowed for non-archived workflows.
235
104
  */
236
105
  router.post('/:id/regenerate', async (req, res) => {
237
- try {
238
- const wf = await yamlDb.getYamlWorkflow(req.params.id);
239
- if (!wf) {
240
- res.status(404).json({ error: 'YAML workflow not found' });
241
- return;
242
- }
243
- if (wf.status === 'archived') {
244
- res.status(400).json({ error: 'Archived workflows cannot be regenerated' });
245
- return;
246
- }
247
- if (!wf.source_workflow_id || !wf.source_workflow_type) {
248
- res.status(400).json({ error: 'Missing source workflow reference — cannot regenerate' });
249
- return;
250
- }
251
- // Look up task queue from the source task record, or use body override
252
- let taskQueue = req.body.task_queue;
253
- if (!taskQueue) {
254
- const sourceTask = await (0, task_1.getTaskByWorkflowId)(wf.source_workflow_id);
255
- taskQueue = sourceTask?.task_queue || 'v1';
256
- }
257
- const feedback = req.body.compilation_feedback;
258
- const result = await yamlGenerator.generateYamlFromExecution({
259
- workflowId: wf.source_workflow_id,
260
- taskQueue,
261
- workflowName: wf.source_workflow_type,
262
- name: wf.name,
263
- description: wf.description || undefined,
264
- appId: wf.app_id,
265
- compilationFeedback: feedback || undefined,
266
- priorFailedYaml: feedback ? wf.yaml_content : undefined,
267
- });
268
- const updated = await yamlDb.updateYamlWorkflow(wf.id, {
269
- app_id: result.appId,
270
- graph_topic: result.graphTopic,
271
- yaml_content: result.yaml,
272
- input_schema: result.inputSchema,
273
- output_schema: result.outputSchema,
274
- activity_manifest: result.activityManifest,
275
- tags: result.tags,
276
- metadata: { input_field_meta: result.inputFieldMeta },
277
- });
278
- res.json(updated);
279
- }
280
- catch (err) {
281
- if ((0, helpers_1.isNotFoundError)(err)) {
282
- res.status(404).json({ error: 'YAML workflow not found' });
283
- return;
284
- }
285
- res.status(500).json({ error: err.message });
286
- }
106
+ const result = await api.regenerateYamlWorkflow({
107
+ id: req.params.id,
108
+ task_queue: req.body.task_queue,
109
+ compilation_feedback: req.body.compilation_feedback,
110
+ });
111
+ res.status(result.status).json(result.data ?? { error: result.error });
287
112
  });
288
113
  /**
289
114
  * DELETE /api/yaml-workflows/:id
290
115
  * Delete a YAML workflow (must be draft or archived).
291
116
  */
292
117
  router.delete('/:id', async (req, res) => {
293
- try {
294
- const wf = await yamlDb.getYamlWorkflow(req.params.id);
295
- if (!wf) {
296
- res.status(404).json({ error: 'YAML workflow not found' });
297
- return;
298
- }
299
- if (wf.status === 'active' || wf.status === 'deployed') {
300
- res.status(400).json({ error: 'Cannot delete an active or deployed workflow. Archive it first.' });
301
- return;
302
- }
303
- await yamlDb.deleteYamlWorkflow(req.params.id);
304
- res.json({ deleted: true });
305
- }
306
- catch (err) {
307
- if ((0, helpers_1.isNotFoundError)(err)) {
308
- res.status(404).json({ error: 'YAML workflow not found' });
309
- return;
310
- }
311
- res.status(500).json({ error: err.message });
312
- }
118
+ const result = await api.deleteYamlWorkflow({ id: req.params.id });
119
+ res.status(result.status).json(result.data ?? { error: result.error });
313
120
  });
314
121
  exports.default = router;