@hotmeshio/long-tail 0.1.5 → 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 (431) hide show
  1. package/README.md +78 -8
  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/migrate.js +3 -6
  43. package/{lib → build/lib}/db/schemas/001_schema.sql +3 -0
  44. package/build/lib/db/schemas/004_workflow_sets.sql +29 -0
  45. package/build/lib/db/schemas/005_unique_graph_topic.sql +7 -0
  46. package/{lib → build/lib}/db/schemas/011_system_workflow_configs.sql +14 -0
  47. package/build/lib/db/schemas/016_streamable_http.sql +7 -0
  48. package/build/lib/events/callback.d.ts +41 -0
  49. package/build/lib/events/callback.js +98 -0
  50. package/build/modules/config.js +1 -1
  51. package/build/routes/auth.js +37 -36
  52. package/build/routes/bot-accounts.js +34 -164
  53. package/build/routes/controlplane.js +20 -60
  54. package/build/routes/dba.js +18 -28
  55. package/build/routes/docs.js +25 -7
  56. package/build/routes/escalations/bulk.js +17 -192
  57. package/build/routes/escalations/list.js +29 -75
  58. package/build/routes/escalations/resolve.js +3 -193
  59. package/build/routes/escalations/single.js +13 -122
  60. package/build/routes/exports.js +44 -95
  61. package/build/routes/index.js +2 -0
  62. package/build/routes/insight.js +61 -40
  63. package/build/routes/maintenance.js +41 -17
  64. package/build/routes/mcp-runs.js +52 -60
  65. package/build/routes/mcp.js +55 -161
  66. package/build/routes/namespaces.js +9 -20
  67. package/build/routes/roles.js +23 -97
  68. package/build/routes/settings.js +37 -25
  69. package/build/routes/tasks.js +28 -64
  70. package/build/routes/users.js +24 -113
  71. package/build/routes/workflow-sets.d.ts +2 -0
  72. package/build/routes/workflow-sets.js +98 -0
  73. package/build/routes/workflows/config.js +23 -57
  74. package/build/routes/workflows/discovery.js +11 -85
  75. package/build/routes/workflows/invocation.js +16 -84
  76. package/build/routes/yaml-workflows/cron.d.ts +2 -0
  77. package/build/routes/yaml-workflows/cron.js +68 -0
  78. package/build/routes/yaml-workflows/crud.js +38 -193
  79. package/build/routes/yaml-workflows/deployment.js +15 -140
  80. package/build/routes/yaml-workflows/index.js +4 -1
  81. package/build/routes/yaml-workflows/versions.js +20 -58
  82. package/build/sdk/index.d.ts +327 -0
  83. package/build/sdk/index.js +298 -0
  84. package/build/services/controlplane/index.d.ts +1 -2
  85. package/build/services/controlplane/index.js +3 -3
  86. package/build/services/controlplane/sql.d.ts +2 -2
  87. package/build/services/controlplane/sql.js +4 -5
  88. package/build/services/controlplane/types.d.ts +1 -0
  89. package/build/services/cron/index.d.ts +17 -0
  90. package/build/services/cron/index.js +94 -1
  91. package/build/services/export/index.js +6 -1
  92. package/build/services/hotmesh-utils.js +2 -4
  93. package/build/services/insight/index.d.ts +18 -0
  94. package/build/services/insight/index.js +60 -0
  95. package/build/services/mcp/client/connection.d.ts +9 -0
  96. package/build/services/mcp/client/connection.js +49 -1
  97. package/build/services/mcp/client/tools.js +13 -1
  98. package/build/services/mcp/db-server/schemas.d.ts +2 -2
  99. package/build/services/mcp/db.d.ts +1 -1
  100. package/build/services/mcp/db.js +10 -0
  101. package/build/services/mcp/playwright-server/schemas.d.ts +4 -4
  102. package/build/services/mcp/sql.d.ts +1 -1
  103. package/build/services/mcp/sql.js +2 -2
  104. package/build/services/mcp/types.d.ts +3 -1
  105. package/build/services/mcp-runs/sql.js +1 -1
  106. package/build/services/workflow-sets/db.d.ts +16 -0
  107. package/build/services/workflow-sets/db.js +78 -0
  108. package/build/services/workflow-sets/index.d.ts +1 -0
  109. package/build/services/workflow-sets/index.js +11 -0
  110. package/build/services/workflow-sets/sql.d.ts +6 -0
  111. package/build/services/workflow-sets/sql.js +24 -0
  112. package/build/services/yaml-workflow/db-utils.d.ts +1 -0
  113. package/build/services/yaml-workflow/db-utils.js +4 -0
  114. package/build/services/yaml-workflow/db.d.ts +8 -0
  115. package/build/services/yaml-workflow/db.js +41 -0
  116. package/build/services/yaml-workflow/invoke.d.ts +19 -0
  117. package/build/services/yaml-workflow/invoke.js +80 -0
  118. package/build/services/yaml-workflow/pipeline/build/dag.js +1 -1
  119. package/build/services/yaml-workflow/pipeline/build/wiring.d.ts +1 -1
  120. package/build/services/yaml-workflow/pipeline/build/wiring.js +102 -2
  121. package/build/services/yaml-workflow/pipeline/prompts.d.ts +1 -1
  122. package/build/services/yaml-workflow/pipeline/prompts.js +44 -1
  123. package/build/services/yaml-workflow/sql.d.ts +5 -1
  124. package/build/services/yaml-workflow/sql.js +23 -3
  125. package/build/services/yaml-workflow/types.d.ts +16 -1
  126. package/build/services/yaml-workflow/workers/callbacks.js +16 -2
  127. package/build/services/yaml-workflow/workers/register.js +36 -1
  128. package/build/start/adapters.js +4 -0
  129. package/build/system/index.js +12 -0
  130. package/build/system/mcp-servers/admin/schemas.d.ts +12 -12
  131. package/build/system/mcp-servers/db-query/schemas.d.ts +2 -2
  132. package/build/system/mcp-servers/knowledge.js +1 -1
  133. package/build/system/mcp-servers/playwright/schemas.d.ts +18 -18
  134. package/build/system/mcp-servers/playwright-cli/schemas.d.ts +34 -34
  135. package/build/system/mcp-servers/playwright-cli/tools-capture.js +5 -1
  136. package/build/system/mcp-servers/vision.js +54 -17
  137. package/build/system/seed/server-definitions.d.ts +7 -0
  138. package/build/system/seed/server-definitions.js +6 -2
  139. package/build/system/seed/tool-manifests-workflows.d.ts +7 -0
  140. package/build/system/seed/tool-manifests-workflows.js +10 -3
  141. package/build/system/workflows/mcp-workflow-builder/activities/caches.d.ts +5 -0
  142. package/build/system/workflows/mcp-workflow-builder/activities/caches.js +8 -0
  143. package/build/system/workflows/mcp-workflow-builder/activities/index.d.ts +2 -0
  144. package/build/system/workflows/mcp-workflow-builder/activities/index.js +8 -0
  145. package/build/system/workflows/mcp-workflow-builder/activities/llm.d.ts +2 -0
  146. package/build/system/workflows/mcp-workflow-builder/activities/llm.js +25 -0
  147. package/build/system/workflows/mcp-workflow-builder/activities/tool-loader.d.ts +11 -0
  148. package/build/system/workflows/mcp-workflow-builder/activities/tool-loader.js +34 -0
  149. package/build/system/workflows/mcp-workflow-builder/index.d.ts +16 -0
  150. package/build/system/workflows/mcp-workflow-builder/index.js +253 -0
  151. package/build/system/workflows/mcp-workflow-builder/prompts.d.ts +8 -0
  152. package/build/system/workflows/mcp-workflow-builder/prompts.js +316 -0
  153. package/build/system/workflows/mcp-workflow-planner/activities/analyze.d.ts +11 -0
  154. package/build/system/workflows/mcp-workflow-planner/activities/analyze.js +36 -0
  155. package/build/system/workflows/mcp-workflow-planner/activities/index.d.ts +3 -0
  156. package/build/system/workflows/mcp-workflow-planner/activities/index.js +12 -0
  157. package/build/system/workflows/mcp-workflow-planner/activities/persist.d.ts +19 -0
  158. package/build/system/workflows/mcp-workflow-planner/activities/persist.js +55 -0
  159. package/build/system/workflows/mcp-workflow-planner/activities/plan.d.ts +10 -0
  160. package/build/system/workflows/mcp-workflow-planner/activities/plan.js +43 -0
  161. package/build/system/workflows/mcp-workflow-planner/index.d.ts +7 -0
  162. package/build/system/workflows/mcp-workflow-planner/index.js +152 -0
  163. package/build/system/workflows/mcp-workflow-planner/prompts.d.ts +7 -0
  164. package/build/system/workflows/mcp-workflow-planner/prompts.js +77 -0
  165. package/build/system/workflows/shared/tool-loader.js +3 -0
  166. package/build/tsconfig.tsbuildinfo +1 -1
  167. package/build/types/index.d.ts +1 -0
  168. package/build/types/mcp.d.ts +4 -3
  169. package/build/types/sdk.d.ts +27 -0
  170. package/build/types/sdk.js +2 -0
  171. package/build/types/workflow-set.d.ts +44 -0
  172. package/build/types/workflow-set.js +5 -0
  173. package/build/types/yaml-workflow.d.ts +6 -2
  174. package/dashboard/dist/assets/AdminDashboard-DRjkRSjJ.js +2 -0
  175. package/dashboard/dist/assets/{AdminDashboard-CTyAMUJR.js.map → AdminDashboard-DRjkRSjJ.js.map} +1 -1
  176. package/dashboard/dist/assets/AvailableEscalationsPage-CnivX4Tz.js +2 -0
  177. package/dashboard/dist/assets/AvailableEscalationsPage-CnivX4Tz.js.map +1 -0
  178. package/dashboard/dist/assets/BotPicker-DwwaBhTH.js +2 -0
  179. package/dashboard/dist/assets/{BotPicker-C51nKFEu.js.map → BotPicker-DwwaBhTH.js.map} +1 -1
  180. package/dashboard/dist/assets/{CollapsibleSection-BSyfd8uL.js → CollapsibleSection-DQpaVA0M.js} +2 -2
  181. package/dashboard/dist/assets/{CollapsibleSection-BSyfd8uL.js.map → CollapsibleSection-DQpaVA0M.js.map} +1 -1
  182. package/dashboard/dist/assets/{ConfirmDeleteModal-CBdhia5T.js → ConfirmDeleteModal-B7JoDNvt.js} +2 -2
  183. package/dashboard/dist/assets/{ConfirmDeleteModal-CBdhia5T.js.map → ConfirmDeleteModal-B7JoDNvt.js.map} +1 -1
  184. package/dashboard/dist/assets/{CopyableId-dGlewBCS.js → CopyableId-AqoZayBG.js} +2 -2
  185. package/dashboard/dist/assets/{CopyableId-dGlewBCS.js.map → CopyableId-AqoZayBG.js.map} +1 -1
  186. package/dashboard/dist/assets/CredentialsPage-qGw1kQzi.js +2 -0
  187. package/dashboard/dist/assets/CredentialsPage-qGw1kQzi.js.map +1 -0
  188. package/dashboard/dist/assets/{CustomDurationPicker-BataWFj8.js → CustomDurationPicker-D1HUQcd0.js} +2 -2
  189. package/dashboard/dist/assets/{CustomDurationPicker-BataWFj8.js.map → CustomDurationPicker-D1HUQcd0.js.map} +1 -1
  190. package/dashboard/dist/assets/{DataTable-B3uf5CCo.js → DataTable-DKvSKoVG.js} +2 -2
  191. package/dashboard/dist/assets/{DataTable-B3uf5CCo.js.map → DataTable-DKvSKoVG.js.map} +1 -1
  192. package/dashboard/dist/assets/{ElapsedCell-G5oSwTpT.js → ElapsedCell-B0yrReGQ.js} +2 -2
  193. package/dashboard/dist/assets/{ElapsedCell-G5oSwTpT.js.map → ElapsedCell-B0yrReGQ.js.map} +1 -1
  194. package/dashboard/dist/assets/{EmptyState-BChBJNGS.js → EmptyState-X0fIzYID.js} +2 -2
  195. package/dashboard/dist/assets/{EmptyState-BChBJNGS.js.map → EmptyState-X0fIzYID.js.map} +1 -1
  196. package/dashboard/dist/assets/{EscalationsOverview-CxUv8xjG.js → EscalationsOverview-BQAT9W7r.js} +2 -2
  197. package/dashboard/dist/assets/{EscalationsOverview-CxUv8xjG.js.map → EscalationsOverview-BQAT9W7r.js.map} +1 -1
  198. package/dashboard/dist/assets/{EventTable-CVt8B0BZ.js → EventTable-CX1KNLhZ.js} +2 -2
  199. package/dashboard/dist/assets/{EventTable-CVt8B0BZ.js.map → EventTable-CX1KNLhZ.js.map} +1 -1
  200. package/dashboard/dist/assets/{FilterBar-CShf0oe7.js → FilterBar-DMTvuQy-.js} +2 -2
  201. package/dashboard/dist/assets/{FilterBar-CShf0oe7.js.map → FilterBar-DMTvuQy-.js.map} +1 -1
  202. package/dashboard/dist/assets/ListToolbar-DTOSxoEy.js +2 -0
  203. package/dashboard/dist/assets/ListToolbar-DTOSxoEy.js.map +1 -0
  204. package/dashboard/dist/assets/{McpOverview-CbaZRnJl.js → McpOverview-BaKTIWrG.js} +2 -2
  205. package/dashboard/dist/assets/{McpOverview-CbaZRnJl.js.map → McpOverview-BaKTIWrG.js.map} +1 -1
  206. package/dashboard/dist/assets/McpQueryDetailPage-CC08T5k8.js +5 -0
  207. package/dashboard/dist/assets/McpQueryDetailPage-CC08T5k8.js.map +1 -0
  208. package/dashboard/dist/assets/McpQueryPage-CVfF9dYg.js +2 -0
  209. package/dashboard/dist/assets/McpQueryPage-CVfF9dYg.js.map +1 -0
  210. package/dashboard/dist/assets/McpRunDetailPage-CKs1RWeV.js +2 -0
  211. package/dashboard/dist/assets/McpRunDetailPage-CKs1RWeV.js.map +1 -0
  212. package/dashboard/dist/assets/McpRunsPage-CcPD_tY1.js +2 -0
  213. package/dashboard/dist/assets/McpRunsPage-CcPD_tY1.js.map +1 -0
  214. package/dashboard/dist/assets/{Modal-CI5RBPOQ.js → Modal-_2AbWxJT.js} +2 -2
  215. package/dashboard/dist/assets/{Modal-CI5RBPOQ.js.map → Modal-_2AbWxJT.js.map} +1 -1
  216. package/dashboard/dist/assets/OperatorDashboard-BGiRaRDr.js +2 -0
  217. package/dashboard/dist/assets/OperatorDashboard-BGiRaRDr.js.map +1 -0
  218. package/dashboard/dist/assets/{PageHeader-SMD9qtOO.js → PageHeader-DVr5Qyzm.js} +2 -2
  219. package/dashboard/dist/assets/{PageHeader-SMD9qtOO.js.map → PageHeader-DVr5Qyzm.js.map} +1 -1
  220. package/dashboard/dist/assets/{PageHeaderWithStats-TikLQsTp.js → PageHeaderWithStats-D0KRASML.js} +2 -2
  221. package/dashboard/dist/assets/{PageHeaderWithStats-TikLQsTp.js.map → PageHeaderWithStats-D0KRASML.js.map} +1 -1
  222. package/dashboard/dist/assets/{PriorityBadge-CQ0EsLTA.js → PriorityBadge-Bx2559OU.js} +2 -2
  223. package/dashboard/dist/assets/{PriorityBadge-CQ0EsLTA.js.map → PriorityBadge-Bx2559OU.js.map} +1 -1
  224. package/dashboard/dist/assets/ProcessDetailPage-69I--sry.js +2 -0
  225. package/dashboard/dist/assets/ProcessDetailPage-69I--sry.js.map +1 -0
  226. package/dashboard/dist/assets/ProcessesListPage-BDpUbua2.js +2 -0
  227. package/dashboard/dist/assets/ProcessesListPage-BDpUbua2.js.map +1 -0
  228. package/dashboard/dist/assets/{RolePill-Crj4TH5p.js → RolePill-CcAqEaSt.js} +2 -2
  229. package/dashboard/dist/assets/{RolePill-Crj4TH5p.js.map → RolePill-CcAqEaSt.js.map} +1 -1
  230. package/dashboard/dist/assets/{RolesPage-C_RInUwS.js → RolesPage-Cl23Hjet.js} +2 -2
  231. package/dashboard/dist/assets/{RolesPage-C_RInUwS.js.map → RolesPage-Cl23Hjet.js.map} +1 -1
  232. package/dashboard/dist/assets/{RowActions-Cp5HyK_w.js → RowActions-B4mqIt3Z.js} +2 -2
  233. package/dashboard/dist/assets/{RowActions-Cp5HyK_w.js.map → RowActions-B4mqIt3Z.js.map} +1 -1
  234. package/dashboard/dist/assets/{StatCard-BKZLSgNV.js → StatCard-Cz_2OjAZ.js} +2 -2
  235. package/dashboard/dist/assets/{StatCard-BKZLSgNV.js.map → StatCard-Cz_2OjAZ.js.map} +1 -1
  236. package/dashboard/dist/assets/{StatusBadge-BYNGGZK5.js → StatusBadge-Wi2FJZsn.js} +2 -2
  237. package/dashboard/dist/assets/{StatusBadge-BYNGGZK5.js.map → StatusBadge-Wi2FJZsn.js.map} +1 -1
  238. package/dashboard/dist/assets/StepIndicator-PW5NRDMb.js +2 -0
  239. package/dashboard/dist/assets/StepIndicator-PW5NRDMb.js.map +1 -0
  240. package/dashboard/dist/assets/{StickyPagination-CTosgiU2.js → StickyPagination-Bl2Uzz65.js} +2 -2
  241. package/dashboard/dist/assets/{StickyPagination-CTosgiU2.js.map → StickyPagination-Bl2Uzz65.js.map} +1 -1
  242. package/dashboard/dist/assets/{SwimlaneTimeline-ylG5Ps1s.js → SwimlaneTimeline-CUPqMd0z.js} +2 -2
  243. package/dashboard/dist/assets/{SwimlaneTimeline-ylG5Ps1s.js.map → SwimlaneTimeline-CUPqMd0z.js.map} +1 -1
  244. package/dashboard/dist/assets/TagInput-BLtf86Ly.js +2 -0
  245. package/dashboard/dist/assets/TagInput-BLtf86Ly.js.map +1 -0
  246. package/dashboard/dist/assets/{TaskDetailPage-C9pDGdD2.js → TaskDetailPage-BXJFX74D.js} +2 -2
  247. package/dashboard/dist/assets/{TaskDetailPage-C9pDGdD2.js.map → TaskDetailPage-BXJFX74D.js.map} +1 -1
  248. package/dashboard/dist/assets/{TaskQueuePill-BtJbZTT0.js → TaskQueuePill-CWYj3xKe.js} +2 -2
  249. package/dashboard/dist/assets/{TaskQueuePill-BtJbZTT0.js.map → TaskQueuePill-CWYj3xKe.js.map} +1 -1
  250. package/dashboard/dist/assets/{TasksListPage-DtFLUEhg.js → TasksListPage-C3cX94Mw.js} +2 -2
  251. package/dashboard/dist/assets/{TasksListPage-DtFLUEhg.js.map → TasksListPage-C3cX94Mw.js.map} +1 -1
  252. package/dashboard/dist/assets/{TimeAgo-WuM6xImZ.js → TimeAgo-B_5yDDHV.js} +2 -2
  253. package/dashboard/dist/assets/{TimeAgo-WuM6xImZ.js.map → TimeAgo-B_5yDDHV.js.map} +1 -1
  254. package/dashboard/dist/assets/{TimestampCell-IVL_-Upy.js → TimestampCell-DRX724uU.js} +2 -2
  255. package/dashboard/dist/assets/{TimestampCell-IVL_-Upy.js.map → TimestampCell-DRX724uU.js.map} +1 -1
  256. package/dashboard/dist/assets/{UserName-DU9qeg13.js → UserName-Ca8FA469.js} +2 -2
  257. package/dashboard/dist/assets/{UserName-DU9qeg13.js.map → UserName-Ca8FA469.js.map} +1 -1
  258. package/dashboard/dist/assets/WorkflowExecutionPage-BBYWEV2P.js +2 -0
  259. package/dashboard/dist/assets/WorkflowExecutionPage-BBYWEV2P.js.map +1 -0
  260. package/dashboard/dist/assets/WorkflowPill-BXifAuLi.js +2 -0
  261. package/dashboard/dist/assets/{WorkflowPill-Diw8iWBP.js.map → WorkflowPill-BXifAuLi.js.map} +1 -1
  262. package/dashboard/dist/assets/WorkflowsDashboard-Drl3juz9.js +2 -0
  263. package/dashboard/dist/assets/WorkflowsDashboard-Drl3juz9.js.map +1 -0
  264. package/dashboard/dist/assets/{WorkflowsOverview-CPuvA4t3.js → WorkflowsOverview-03IRrDLg.js} +2 -2
  265. package/dashboard/dist/assets/{WorkflowsOverview-CPuvA4t3.js.map → WorkflowsOverview-03IRrDLg.js.map} +1 -1
  266. package/dashboard/dist/assets/YamlWorkflowsPage-DC2cLxVi.js +2 -0
  267. package/dashboard/dist/assets/YamlWorkflowsPage-DC2cLxVi.js.map +1 -0
  268. package/dashboard/dist/assets/{bots-BPiZXf2h.js → bots-DZEXcgiJ.js} +2 -2
  269. package/dashboard/dist/assets/{bots-BPiZXf2h.js.map → bots-DZEXcgiJ.js.map} +1 -1
  270. package/dashboard/dist/assets/{escalation-DTY_OKRh.js → escalation-Cw48lNaF.js} +2 -2
  271. package/dashboard/dist/assets/{escalation-DTY_OKRh.js.map → escalation-Cw48lNaF.js.map} +1 -1
  272. package/dashboard/dist/assets/{escalation-columns-C91fHSkp.js → escalation-columns-NINpo3qf.js} +2 -2
  273. package/dashboard/dist/assets/{escalation-columns-C91fHSkp.js.map → escalation-columns-NINpo3qf.js.map} +1 -1
  274. package/dashboard/dist/assets/helpers-Cuu3xKfr.js +2 -0
  275. package/dashboard/dist/assets/helpers-Cuu3xKfr.js.map +1 -0
  276. package/dashboard/dist/assets/helpers-fk_qr729.js +2 -0
  277. package/dashboard/dist/assets/helpers-fk_qr729.js.map +1 -0
  278. package/dashboard/dist/assets/index-B98ipWxE.js +2 -0
  279. package/dashboard/dist/assets/{index-CDWOfCmi.js.map → index-B98ipWxE.js.map} +1 -1
  280. package/dashboard/dist/assets/{index-D_qEAYrg.js → index-BIG3KooI.js} +2 -2
  281. package/dashboard/dist/assets/{index-D_qEAYrg.js.map → index-BIG3KooI.js.map} +1 -1
  282. package/dashboard/dist/assets/{index-DSzSoku1.js → index-BwN3KP_L.js} +91 -93
  283. package/dashboard/dist/assets/index-BwN3KP_L.js.map +1 -0
  284. package/dashboard/dist/assets/index-Bxe8h1x4.js +17 -0
  285. package/dashboard/dist/assets/index-Bxe8h1x4.js.map +1 -0
  286. package/dashboard/dist/assets/index-CNI7k7oB.js +6 -0
  287. package/dashboard/dist/assets/index-CNI7k7oB.js.map +1 -0
  288. package/dashboard/dist/assets/index-CORHB0WC.js +2 -0
  289. package/dashboard/dist/assets/index-CORHB0WC.js.map +1 -0
  290. package/dashboard/dist/assets/index-DcIKW-cZ.css +1 -0
  291. package/dashboard/dist/assets/index-Dj-z-x8M.js +2 -0
  292. package/dashboard/dist/assets/index-Dj-z-x8M.js.map +1 -0
  293. package/dashboard/dist/assets/index-DwRytW9O.js +5 -0
  294. package/dashboard/dist/assets/index-DwRytW9O.js.map +1 -0
  295. package/dashboard/dist/assets/index-aRvL-dXp.js +2 -0
  296. package/dashboard/dist/assets/index-aRvL-dXp.js.map +1 -0
  297. package/dashboard/dist/assets/index-b03HlbnH.js +2 -0
  298. package/dashboard/dist/assets/{index-BtOwLI0K.js.map → index-b03HlbnH.js.map} +1 -1
  299. package/dashboard/dist/assets/mcp-BZoFryNc.js +2 -0
  300. package/dashboard/dist/assets/mcp-BZoFryNc.js.map +1 -0
  301. package/dashboard/dist/assets/mcp-query-wiw1kwm8.js +2 -0
  302. package/dashboard/dist/assets/mcp-query-wiw1kwm8.js.map +1 -0
  303. package/dashboard/dist/assets/{mcp-runs-DmXYJD19.js → mcp-runs-BaEKnf5v.js} +2 -2
  304. package/dashboard/dist/assets/{mcp-runs-DmXYJD19.js.map → mcp-runs-BaEKnf5v.js.map} +1 -1
  305. package/dashboard/dist/assets/{namespaces-DoGa7jc7.js → namespaces-BwnZI4_A.js} +2 -2
  306. package/dashboard/dist/assets/{namespaces-DoGa7jc7.js.map → namespaces-BwnZI4_A.js.map} +1 -1
  307. package/dashboard/dist/assets/{roles-wCdQ2Z7k.js → roles-Bgn1K8zU.js} +2 -2
  308. package/dashboard/dist/assets/{roles-wCdQ2Z7k.js.map → roles-Bgn1K8zU.js.map} +1 -1
  309. package/dashboard/dist/assets/{settings-DDe_L7JT.js → settings-CizYiutL.js} +2 -2
  310. package/dashboard/dist/assets/{settings-DDe_L7JT.js.map → settings-CizYiutL.js.map} +1 -1
  311. package/dashboard/dist/assets/{tasks-3Hih8Bt7.js → tasks-Bmte_hc4.js} +2 -2
  312. package/dashboard/dist/assets/{tasks-3Hih8Bt7.js.map → tasks-Bmte_hc4.js.map} +1 -1
  313. package/dashboard/dist/assets/useEventHooks-CUCxpiI2.js +2 -0
  314. package/dashboard/dist/assets/useEventHooks-CUCxpiI2.js.map +1 -0
  315. package/dashboard/dist/assets/useExpandedRows-Cg9iq6Vy.js +2 -0
  316. package/dashboard/dist/assets/useExpandedRows-Cg9iq6Vy.js.map +1 -0
  317. package/dashboard/dist/assets/{useYamlActivityEvents-B5dHec6Y.js → useYamlActivityEvents-Cum02Ej9.js} +2 -2
  318. package/dashboard/dist/assets/useYamlActivityEvents-Cum02Ej9.js.map +1 -0
  319. package/dashboard/dist/assets/{users-BTagPmGW.js → users-NSDgTt-z.js} +2 -2
  320. package/dashboard/dist/assets/{users-BTagPmGW.js.map → users-NSDgTt-z.js.map} +1 -1
  321. package/dashboard/dist/assets/{vendor-icons-DCLlGYO9.js → vendor-icons-D1DdudfH.js} +141 -66
  322. package/dashboard/dist/assets/vendor-icons-D1DdudfH.js.map +1 -0
  323. package/dashboard/dist/assets/{workflows-B20dR3NE.js → workflows-k0XRdGXx.js} +2 -2
  324. package/dashboard/dist/assets/{workflows-B20dR3NE.js.map → workflows-k0XRdGXx.js.map} +1 -1
  325. package/dashboard/dist/assets/yaml-workflows-DAre8I78.js +2 -0
  326. package/dashboard/dist/assets/yaml-workflows-DAre8I78.js.map +1 -0
  327. package/dashboard/dist/index.html +3 -3
  328. package/docs/api/mcp-servers.md +60 -2
  329. package/docs/architecture.md +3 -3
  330. package/docs/dashboard.md +1 -1
  331. package/docs/epic-integration.md +224 -0
  332. package/docs/escalation-strategies.md +2 -3
  333. package/docs/events.md +28 -0
  334. package/docs/mcp.md +301 -31
  335. package/docs/sdk.md +177 -0
  336. package/docs/story.md +157 -0
  337. package/docs/workflow-builder.md +371 -0
  338. package/package.json +5 -4
  339. package/build/routes/escalations/helpers.d.ts +0 -5
  340. package/build/routes/resolve.d.ts +0 -9
  341. package/build/routes/resolve.js +0 -19
  342. package/build/routes/yaml-workflows/helpers.d.ts +0 -2
  343. package/build/routes/yaml-workflows/helpers.js +0 -8
  344. package/dashboard/dist/assets/AdminDashboard-CTyAMUJR.js +0 -2
  345. package/dashboard/dist/assets/AvailableEscalationsPage-BMXV3Q4l.js +0 -2
  346. package/dashboard/dist/assets/AvailableEscalationsPage-BMXV3Q4l.js.map +0 -1
  347. package/dashboard/dist/assets/BotPicker-C51nKFEu.js +0 -2
  348. package/dashboard/dist/assets/CredentialsPage-CoBNFSAu.js +0 -2
  349. package/dashboard/dist/assets/CredentialsPage-CoBNFSAu.js.map +0 -1
  350. package/dashboard/dist/assets/McpQueryDetailPage-CGoR9XK6.js +0 -5
  351. package/dashboard/dist/assets/McpQueryDetailPage-CGoR9XK6.js.map +0 -1
  352. package/dashboard/dist/assets/McpQueryPage-BjXoYQuU.js +0 -2
  353. package/dashboard/dist/assets/McpQueryPage-BjXoYQuU.js.map +0 -1
  354. package/dashboard/dist/assets/McpRunDetailPage-DLkA5Aar.js +0 -2
  355. package/dashboard/dist/assets/McpRunDetailPage-DLkA5Aar.js.map +0 -1
  356. package/dashboard/dist/assets/McpRunsPage-DCh9n11D.js +0 -2
  357. package/dashboard/dist/assets/McpRunsPage-DCh9n11D.js.map +0 -1
  358. package/dashboard/dist/assets/OperatorDashboard-Dc80suXd.js +0 -2
  359. package/dashboard/dist/assets/OperatorDashboard-Dc80suXd.js.map +0 -1
  360. package/dashboard/dist/assets/ProcessDetailPage-B2GKuGzk.js +0 -2
  361. package/dashboard/dist/assets/ProcessDetailPage-B2GKuGzk.js.map +0 -1
  362. package/dashboard/dist/assets/ProcessesListPage-CTjI3Wn6.js +0 -2
  363. package/dashboard/dist/assets/ProcessesListPage-CTjI3Wn6.js.map +0 -1
  364. package/dashboard/dist/assets/RefreshButton-BcQDObrv.js +0 -2
  365. package/dashboard/dist/assets/RefreshButton-BcQDObrv.js.map +0 -1
  366. package/dashboard/dist/assets/RunAsSelector-BhyWtofX.js +0 -2
  367. package/dashboard/dist/assets/RunAsSelector-BhyWtofX.js.map +0 -1
  368. package/dashboard/dist/assets/WorkflowExecutionPage-DOocX81f.js +0 -2
  369. package/dashboard/dist/assets/WorkflowExecutionPage-DOocX81f.js.map +0 -1
  370. package/dashboard/dist/assets/WorkflowPill-Diw8iWBP.js +0 -2
  371. package/dashboard/dist/assets/WorkflowsDashboard-DDtUIrTy.js +0 -2
  372. package/dashboard/dist/assets/WorkflowsDashboard-DDtUIrTy.js.map +0 -1
  373. package/dashboard/dist/assets/YamlWorkflowsPage-DlwwkluN.js +0 -2
  374. package/dashboard/dist/assets/YamlWorkflowsPage-DlwwkluN.js.map +0 -1
  375. package/dashboard/dist/assets/helpers-DBUZ9pnG.js +0 -2
  376. package/dashboard/dist/assets/helpers-DBUZ9pnG.js.map +0 -1
  377. package/dashboard/dist/assets/index-BOeA-gfK.js +0 -17
  378. package/dashboard/dist/assets/index-BOeA-gfK.js.map +0 -1
  379. package/dashboard/dist/assets/index-BZ6K_kmL.js +0 -3
  380. package/dashboard/dist/assets/index-BZ6K_kmL.js.map +0 -1
  381. package/dashboard/dist/assets/index-Bpm0yeoi.js +0 -2
  382. package/dashboard/dist/assets/index-Bpm0yeoi.js.map +0 -1
  383. package/dashboard/dist/assets/index-BtOwLI0K.js +0 -2
  384. package/dashboard/dist/assets/index-CBF3ZvRZ.js +0 -6
  385. package/dashboard/dist/assets/index-CBF3ZvRZ.js.map +0 -1
  386. package/dashboard/dist/assets/index-CDWOfCmi.js +0 -2
  387. package/dashboard/dist/assets/index-Ce6sL__n.js +0 -2
  388. package/dashboard/dist/assets/index-Ce6sL__n.js.map +0 -1
  389. package/dashboard/dist/assets/index-DSzSoku1.js.map +0 -1
  390. package/dashboard/dist/assets/index-gCy9XX3W.css +0 -1
  391. package/dashboard/dist/assets/mcp-BzVpaaKF.js +0 -2
  392. package/dashboard/dist/assets/mcp-BzVpaaKF.js.map +0 -1
  393. package/dashboard/dist/assets/mcp-query-wTuxTTCV.js +0 -2
  394. package/dashboard/dist/assets/mcp-query-wTuxTTCV.js.map +0 -1
  395. package/dashboard/dist/assets/useNatsEvents-DeGKHFTX.js +0 -2
  396. package/dashboard/dist/assets/useNatsEvents-DeGKHFTX.js.map +0 -1
  397. package/dashboard/dist/assets/useYamlActivityEvents-B5dHec6Y.js.map +0 -1
  398. package/dashboard/dist/assets/vendor-icons-DCLlGYO9.js.map +0 -1
  399. package/dashboard/dist/assets/yaml-workflows-CaLPMQha.js +0 -2
  400. package/dashboard/dist/assets/yaml-workflows-CaLPMQha.js.map +0 -1
  401. package/docs/img/01-login.png +0 -0
  402. package/docs/img/02-dashboard-home.png +0 -0
  403. package/docs/img/03-processes-list.png +0 -0
  404. package/docs/img/04-escalations-list.png +0 -0
  405. package/docs/img/05-mcp-servers.png +0 -0
  406. package/docs/img/06-mcp-pipelines.png +0 -0
  407. package/docs/img/07-workflows-list.png +0 -0
  408. package/docs/img/compilation/01-query-submit.png +0 -0
  409. package/docs/img/compilation/02-mcp-servers.png +0 -0
  410. package/docs/img/compilation/03-query-completed.png +0 -0
  411. package/docs/img/compilation/04-wizard-original.png +0 -0
  412. package/docs/img/compilation/05-wizard-timeline.png +0 -0
  413. package/docs/img/compilation/06-wizard-profile.png +0 -0
  414. package/docs/img/compilation/07-wizard-deploy.png +0 -0
  415. package/docs/img/compilation/08-wizard-test-modal.png +0 -0
  416. package/docs/img/compilation/09-wizard-test-compare.png +0 -0
  417. package/docs/img/compilation/10-wizard-verify.png +0 -0
  418. package/lib/db/README.md +0 -8
  419. /package/{lib → build/lib}/db/schemas/002_seed.sql +0 -0
  420. /package/{lib → build/lib}/db/schemas/003_workflow_discovery.sql +0 -0
  421. /package/{lib → build/lib}/db/schemas/004_query_router.sql +0 -0
  422. /package/{lib → build/lib}/db/schemas/005_triage_router.sql +0 -0
  423. /package/{lib → build/lib}/db/schemas/006_oauth.sql +0 -0
  424. /package/{lib → build/lib}/db/schemas/007_security.sql +0 -0
  425. /package/{lib → build/lib}/db/schemas/008_bot_accounts.sql +0 -0
  426. /package/{lib → build/lib}/db/schemas/009_audit_trail.sql +0 -0
  427. /package/{lib → build/lib}/db/schemas/010_credential_providers.sql +0 -0
  428. /package/{lib → build/lib}/db/schemas/012_drop_modality.sql +0 -0
  429. /package/{lib → build/lib}/db/schemas/013_execute_as.sql +0 -0
  430. /package/{lib → build/lib}/db/schemas/014_ephemeral_credentials.sql +0 -0
  431. /package/{lib → build/lib}/db/schemas/015_knowledge.sql +0 -0
@@ -34,14 +34,7 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.registerResolveRoutes = registerResolveRoutes;
37
- const escalationService = __importStar(require("../../services/escalation"));
38
- const taskService = __importStar(require("../../services/task"));
39
- const escalation_strategy_1 = require("../../services/escalation-strategy");
40
- const publish_1 = require("../../lib/events/publish");
41
- const ephemeral_1 = require("../../services/iam/ephemeral");
42
- const deployer_1 = require("../../services/yaml-workflow/deployer");
43
- const workers_1 = require("../../workers");
44
- const defaults_1 = require("../../modules/defaults");
37
+ const api = __importStar(require("../../api/escalations"));
45
38
  function registerResolveRoutes(router) {
46
39
  /**
47
40
  * POST /api/escalations/:id/resolve
@@ -51,190 +44,7 @@ function registerResolveRoutes(router) {
51
44
  * Body: { resolverPayload: Record<string, any> }
52
45
  */
53
46
  router.post('/:id/resolve', async (req, res) => {
54
- try {
55
- const { resolverPayload } = req.body || {};
56
- if (!resolverPayload) {
57
- res.status(400).json({ error: 'resolverPayload is required' });
58
- return;
59
- }
60
- // 1. Read escalation (verify pending)
61
- const escalation = await escalationService.getEscalation(req.params.id);
62
- if (!escalation) {
63
- res.status(404).json({ error: 'Escalation not found' });
64
- return;
65
- }
66
- if (escalation.status !== 'pending') {
67
- res.status(409).json({ error: 'Escalation not available for resolution' });
68
- return;
69
- }
70
- // 2. waitFor signal escalation -- signal the paused workflow directly
71
- const signalRouting = escalation.metadata?.signal_routing;
72
- if (signalRouting?.signalId) {
73
- // Replace password fields with ephemeral tokens so plaintext never enters the signal store
74
- let signalPayload = resolverPayload;
75
- const formSchema = escalation.metadata?.form_schema;
76
- if (formSchema?.properties) {
77
- signalPayload = { ...resolverPayload };
78
- for (const [key, def] of Object.entries(formSchema.properties)) {
79
- if (def?.format === 'password' && typeof signalPayload[key] === 'string') {
80
- const uuid = await (0, ephemeral_1.storeEphemeral)(signalPayload[key], {
81
- ttlSeconds: 900,
82
- label: key,
83
- });
84
- signalPayload[key] = (0, ephemeral_1.formatEphemeralToken)(uuid, key);
85
- }
86
- }
87
- }
88
- if (signalRouting.engine === 'yaml' && signalRouting.hookTopic && signalRouting.appId) {
89
- // YAML workflow: signal the HotMesh engine directly via hook topic.
90
- // Include job_id for hook match condition ({$job.metadata.jid} === {$self.hook.data.job_id}).
91
- const engine = await (0, deployer_1.getEngine)(signalRouting.appId);
92
- await engine.signal(signalRouting.hookTopic, {
93
- ...signalPayload,
94
- escalationId: escalation.id,
95
- job_id: signalRouting.jobId,
96
- });
97
- }
98
- else if (signalRouting.workflowId) {
99
- // Durable workflow: signal via workflow handle
100
- const client = (0, workers_1.createClient)();
101
- const handle = await client.workflow.getHandle(signalRouting.taskQueue, signalRouting.workflowType, signalRouting.workflowId);
102
- await handle.signal(signalRouting.signalId, signalPayload);
103
- }
104
- await escalationService.resolveEscalation(escalation.id, resolverPayload);
105
- (0, publish_1.publishEscalationEvent)({
106
- type: 'escalation.resolved',
107
- source: 'api',
108
- workflowId: escalation.workflow_id || signalRouting.workflowId,
109
- workflowName: escalation.workflow_type || signalRouting.workflowType,
110
- taskQueue: escalation.task_queue || signalRouting.taskQueue || signalRouting.appId,
111
- taskId: escalation.task_id,
112
- escalationId: escalation.id,
113
- originId: escalation.origin_id ?? undefined,
114
- status: 'resolved',
115
- });
116
- res.json({ signaled: true, escalationId: escalation.id, workflowId: signalRouting.workflowId || signalRouting.appId });
117
- return;
118
- }
119
- // 3. Reconstruct the original envelope from the escalation or task
120
- let envelope = {};
121
- if (escalation.envelope) {
122
- try {
123
- envelope = JSON.parse(escalation.envelope);
124
- }
125
- catch { /* use empty */ }
126
- }
127
- else if (escalation.task_id) {
128
- const task = await taskService.getTask(escalation.task_id);
129
- if (task?.envelope) {
130
- try {
131
- envelope = JSON.parse(task.envelope);
132
- }
133
- catch { /* use empty */ }
134
- }
135
- }
136
- // 4. Check escalation strategy for triage routing
137
- const strategy = escalation_strategy_1.escalationStrategyRegistry.current;
138
- if (strategy) {
139
- const directive = await strategy.onResolution({
140
- escalation,
141
- resolverPayload,
142
- envelope,
143
- });
144
- if (directive.action === 'triage') {
145
- // Route to MCP triage orchestrator instead of standard re-run
146
- const originalTask = escalation.task_id
147
- ? await taskService.getTask(escalation.task_id)
148
- : null;
149
- const routing = originalTask?.metadata;
150
- const triageWorkflowId = `triage-${escalation.id}-${Date.now()}`;
151
- const client = (0, workers_1.createClient)();
152
- // Triage lives on a separate axis -- do NOT copy the original
153
- // task's parent routing (signalId, parentWorkflowId) into the
154
- // triage task. Otherwise the container interceptor would signal
155
- // the original parent when triage completes, prematurely closing
156
- // the original workflow. Triage exits the vortex by creating a
157
- // targeted escalation on the original task instead.
158
- await taskService.createTask({
159
- workflow_id: triageWorkflowId,
160
- workflow_type: 'mcpTriageRouter',
161
- lt_type: 'mcpTriage',
162
- task_queue: 'long-tail-system',
163
- signal_id: `lt-triage-${triageWorkflowId}`,
164
- parent_workflow_id: triageWorkflowId,
165
- origin_id: escalation.origin_id || triageWorkflowId,
166
- parent_id: escalation.parent_id ?? undefined,
167
- envelope: JSON.stringify(directive.triageEnvelope),
168
- });
169
- await client.workflow.start({
170
- workflowName: 'mcpTriageRouter',
171
- args: [directive.triageEnvelope],
172
- taskQueue: 'long-tail-system',
173
- workflowId: triageWorkflowId,
174
- expire: defaults_1.JOB_EXPIRE_SECS,
175
- entity: 'mcpTriageRouter',
176
- });
177
- // Mark escalation as resolved (triage is handling it)
178
- await escalationService.resolveEscalation(escalation.id, {
179
- ...resolverPayload,
180
- _lt: { ...resolverPayload._lt, triaged: true, triageWorkflowId },
181
- });
182
- (0, publish_1.publishEscalationEvent)({
183
- type: 'escalation.resolved',
184
- source: 'api',
185
- workflowId: escalation.workflow_id,
186
- workflowName: escalation.workflow_type,
187
- taskQueue: escalation.task_queue,
188
- taskId: escalation.task_id,
189
- escalationId: escalation.id,
190
- originId: escalation.origin_id ?? undefined,
191
- status: 'resolved',
192
- });
193
- res.json({
194
- started: true,
195
- escalationId: escalation.id,
196
- workflowId: triageWorkflowId,
197
- triage: true,
198
- });
199
- return;
200
- }
201
- }
202
- // 5. If no workflow_type, this is a notification-only escalation -- acknowledge and close
203
- if (!escalation.workflow_type || !escalation.task_queue) {
204
- await escalationService.resolveEscalation(escalation.id, resolverPayload);
205
- res.json({ acknowledged: true, escalationId: escalation.id });
206
- return;
207
- }
208
- // 6. Standard re-run: inject resolver data and start original workflow
209
- envelope.resolver = resolverPayload;
210
- envelope.lt = {
211
- ...envelope.lt,
212
- escalationId: escalation.id,
213
- };
214
- const newWorkflowId = `rerun-${escalation.id}-${Date.now()}`;
215
- const client = (0, workers_1.createClient)();
216
- await client.workflow.start({
217
- workflowName: escalation.workflow_type,
218
- args: [envelope],
219
- taskQueue: escalation.task_queue,
220
- workflowId: newWorkflowId,
221
- expire: 180,
222
- });
223
- (0, publish_1.publishEscalationEvent)({
224
- type: 'escalation.resolved',
225
- source: 'api',
226
- workflowId: escalation.workflow_id,
227
- workflowName: escalation.workflow_type,
228
- taskQueue: escalation.task_queue,
229
- taskId: escalation.task_id,
230
- escalationId: escalation.id,
231
- originId: escalation.origin_id ?? undefined,
232
- status: 'resolved',
233
- });
234
- res.json({ started: true, escalationId: escalation.id, workflowId: newWorkflowId });
235
- }
236
- catch (err) {
237
- res.status(500).json({ error: err.message });
238
- }
47
+ const result = await api.resolveEscalation({ id: req.params.id, resolverPayload: req.body?.resolverPayload }, req.auth);
48
+ res.status(result.status).json(result.data ?? { error: result.error });
239
49
  });
240
50
  }
@@ -34,10 +34,7 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.registerSingleRoutes = registerSingleRoutes;
37
- const escalationService = __importStar(require("../../services/escalation"));
38
- const userService = __importStar(require("../../services/user"));
39
- const roleService = __importStar(require("../../services/role"));
40
- const publish_1 = require("../../lib/events/publish");
37
+ const api = __importStar(require("../../api/escalations"));
41
38
  function registerSingleRoutes(router) {
42
39
  /**
43
40
  * PATCH /api/escalations/:id/escalate
@@ -45,51 +42,18 @@ function registerSingleRoutes(router) {
45
42
  * Body: { targetRole: string }
46
43
  */
47
44
  router.patch('/:id/escalate', async (req, res) => {
48
- try {
49
- const userId = req.auth.userId;
50
- const { targetRole } = req.body || {};
51
- if (!targetRole || typeof targetRole !== 'string') {
52
- res.status(400).json({ error: 'targetRole is required' });
53
- return;
54
- }
55
- const escalation = await escalationService.getEscalation(req.params.id);
56
- if (!escalation) {
57
- res.status(404).json({ error: 'Escalation not found' });
58
- return;
59
- }
60
- if (escalation.status !== 'pending') {
61
- res.status(409).json({ error: 'Escalation is not pending' });
62
- return;
63
- }
64
- // Authorization: user must be able to escalate from current role to target role
65
- const canEscalate = await roleService.canEscalateTo(userId, escalation.role, targetRole);
66
- if (!canEscalate) {
67
- res.status(403).json({ error: 'Not authorized to escalate to this role' });
68
- return;
69
- }
70
- const updated = await escalationService.escalateToRole(req.params.id, targetRole);
71
- if (!updated) {
72
- res.status(409).json({ error: 'Escalation could not be updated' });
73
- return;
74
- }
75
- res.json(updated);
76
- }
77
- catch (err) {
78
- res.status(500).json({ error: err.message });
79
- }
45
+ const result = await api.escalateToRole({ id: req.params.id, targetRole: req.body?.targetRole }, req.auth);
46
+ res.status(result.status).json(result.data ?? { error: result.error });
80
47
  });
81
48
  /**
82
49
  * GET /api/escalations/by-workflow/:workflowId
83
50
  * List escalations linked to a specific workflow.
84
51
  */
85
52
  router.get('/by-workflow/:workflowId', async (req, res) => {
86
- try {
87
- const escalations = await escalationService.getEscalationsByWorkflowId(req.params.workflowId);
88
- res.json({ escalations });
89
- }
90
- catch (err) {
91
- res.status(500).json({ error: err.message });
92
- }
53
+ const result = await api.getEscalationsByWorkflowId({
54
+ workflowId: req.params.workflowId,
55
+ });
56
+ res.status(result.status).json(result.data ?? { error: result.error });
93
57
  });
94
58
  // -- Parameterized routes (must come after literal paths) --
95
59
  /**
@@ -98,26 +62,8 @@ function registerSingleRoutes(router) {
98
62
  * RBAC: superadmin sees all; others must hold the escalation's role.
99
63
  */
100
64
  router.get('/:id', async (req, res) => {
101
- try {
102
- const escalation = await escalationService.getEscalation(req.params.id);
103
- if (!escalation) {
104
- res.status(404).json({ error: 'Escalation not found' });
105
- return;
106
- }
107
- const userId = req.auth.userId;
108
- const isSuperAdminUser = await userService.isSuperAdmin(userId);
109
- if (!isSuperAdminUser) {
110
- const userHasRole = await userService.hasRole(userId, escalation.role);
111
- if (!userHasRole) {
112
- res.status(403).json({ error: 'Not authorized to view this escalation' });
113
- return;
114
- }
115
- }
116
- res.json(escalation);
117
- }
118
- catch (err) {
119
- res.status(500).json({ error: err.message });
120
- }
65
+ const result = await api.getEscalation({ id: req.params.id }, req.auth);
66
+ res.status(result.status).json(result.data ?? { error: result.error });
121
67
  });
122
68
  /**
123
69
  * POST /api/escalations/:id/claim
@@ -125,43 +71,8 @@ function registerSingleRoutes(router) {
125
71
  * Body: { durationMinutes?: number }
126
72
  */
127
73
  router.post('/:id/claim', async (req, res) => {
128
- try {
129
- const userId = req.auth.userId;
130
- const { durationMinutes } = req.body || {};
131
- // Role check: user must hold the escalation's role or be superadmin
132
- const escalation = await escalationService.getEscalation(req.params.id);
133
- if (!escalation) {
134
- res.status(404).json({ error: 'Escalation not found' });
135
- return;
136
- }
137
- const isSuperAdminUser = await userService.isSuperAdmin(userId);
138
- if (!isSuperAdminUser) {
139
- const userHasRole = await userService.hasRole(userId, escalation.role);
140
- if (!userHasRole) {
141
- res.status(403).json({ error: `You must have the "${escalation.role}" role to claim this escalation` });
142
- return;
143
- }
144
- }
145
- const result = await escalationService.claimEscalation(req.params.id, userId, durationMinutes);
146
- if (!result) {
147
- res.status(409).json({ error: 'Escalation not available for claim' });
148
- return;
149
- }
150
- res.json(result);
151
- (0, publish_1.publishEscalationEvent)({
152
- type: 'escalation.claimed',
153
- source: 'api',
154
- workflowId: escalation.workflow_id || '',
155
- workflowName: escalation.workflow_type || '',
156
- taskQueue: escalation.task_queue || '',
157
- escalationId: req.params.id,
158
- status: 'claimed',
159
- data: { assigned_to: userId },
160
- });
161
- }
162
- catch (err) {
163
- res.status(500).json({ error: err.message });
164
- }
74
+ const result = await api.claimEscalation({ id: req.params.id, durationMinutes: req.body?.durationMinutes }, req.auth);
75
+ res.status(result.status).json(result.data ?? { error: result.error });
165
76
  });
166
77
  /**
167
78
  * POST /api/escalations/:id/release
@@ -169,27 +80,7 @@ function registerSingleRoutes(router) {
169
80
  * Only the assigned user may release their own claim.
170
81
  */
171
82
  router.post('/:id/release', async (req, res) => {
172
- try {
173
- const userId = req.auth.userId;
174
- const result = await escalationService.releaseEscalation(req.params.id, userId);
175
- if (!result) {
176
- res.status(409).json({ error: 'Escalation not found or not claimed by you' });
177
- return;
178
- }
179
- res.json({ escalation: result });
180
- (0, publish_1.publishEscalationEvent)({
181
- type: 'escalation.released',
182
- source: 'api',
183
- workflowId: result.workflow_id || '',
184
- workflowName: result.workflow_type || '',
185
- taskQueue: result.task_queue || '',
186
- escalationId: req.params.id,
187
- status: 'released',
188
- data: { released_by: userId },
189
- });
190
- }
191
- catch (err) {
192
- res.status(500).json({ error: err.message });
193
- }
83
+ const result = await api.releaseEscalation({ id: req.params.id }, req.auth);
84
+ res.status(result.status).json(result.data ?? { error: result.error });
194
85
  });
195
86
  }
@@ -34,130 +34,79 @@ 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 exportService = __importStar(require("../services/export"));
38
- const resolve_1 = require("./resolve");
37
+ const api = __importStar(require("../api/exports"));
39
38
  const router = (0, express_1.Router)();
40
39
  /**
41
40
  * GET /api/workflow-states/jobs
42
41
  * List workflow jobs with optional filtering and pagination.
43
42
  */
44
43
  router.get('/jobs', async (req, res) => {
45
- try {
46
- const result = await exportService.listJobs({
47
- limit: parseInt(req.query.limit) || undefined,
48
- offset: parseInt(req.query.offset) || undefined,
49
- entity: req.query.entity || undefined,
50
- search: req.query.search || undefined,
51
- status: req.query.status || undefined,
52
- sort_by: req.query.sort_by || undefined,
53
- order: req.query.order || undefined,
54
- registered: req.query.registered || undefined,
55
- });
56
- res.json(result);
57
- }
58
- catch (err) {
59
- res.status(500).json({ error: err.message });
60
- }
44
+ const result = await api.listJobs({
45
+ limit: parseInt(req.query.limit) || undefined,
46
+ offset: parseInt(req.query.offset) || undefined,
47
+ entity: req.query.entity || undefined,
48
+ search: req.query.search || undefined,
49
+ status: req.query.status || undefined,
50
+ sort_by: req.query.sort_by || undefined,
51
+ order: req.query.order || undefined,
52
+ registered: req.query.registered || undefined,
53
+ });
54
+ res.status(result.status).json(result.data ?? { error: result.error });
61
55
  });
62
56
  /**
63
57
  * GET /api/workflow-states/:workflowId
64
58
  * Export the full workflow state using HotMesh's durable export.
65
59
  */
66
60
  router.get('/:workflowId', async (req, res) => {
67
- try {
68
- const resolved = await (0, resolve_1.resolveHandle)(req, res);
69
- if (!resolved)
70
- return;
71
- const allow = req.query.allow
72
- ? req.query.allow.split(',')
73
- : undefined;
74
- const block = req.query.block
75
- ? req.query.block.split(',')
76
- : undefined;
77
- const values = req.query.values === 'false' ? false : undefined;
78
- const exported = await exportService.exportWorkflow(req.params.workflowId, resolved.taskQueue, resolved.workflowName, { allow, block, values });
79
- res.json(exported);
80
- }
81
- catch (err) {
82
- const msg = err.message ?? '';
83
- if (msg.includes('not found') || msg.includes('undefined')) {
84
- res.status(404).json({
85
- error: 'Workflow data is no longer available (job may have expired)',
86
- });
87
- return;
88
- }
89
- res.status(500).json({ error: msg });
90
- }
61
+ const allow = req.query.allow
62
+ ? req.query.allow.split(',')
63
+ : undefined;
64
+ const block = req.query.block
65
+ ? req.query.block.split(',')
66
+ : undefined;
67
+ const values = req.query.values === 'false' ? false : undefined;
68
+ const result = await api.exportWorkflowState({
69
+ workflowId: req.params.workflowId,
70
+ allow,
71
+ block,
72
+ values,
73
+ });
74
+ res.status(result.status).json(result.data ?? { error: result.error });
91
75
  });
92
76
  /**
93
77
  * GET /api/workflow-states/:workflowId/execution
94
78
  * Export workflow state as a structured execution event history.
95
79
  */
96
80
  router.get('/:workflowId/execution', async (req, res) => {
97
- try {
98
- const resolved = await (0, resolve_1.resolveHandle)(req, res);
99
- if (!resolved)
100
- return;
101
- const execution = await exportService.exportWorkflowExecution(req.params.workflowId, resolved.taskQueue, resolved.workflowName, {
102
- exclude_system: req.query.excludeSystem === 'true',
103
- omit_results: req.query.omitResults === 'true',
104
- mode: req.query.mode || undefined,
105
- max_depth: req.query.maxDepth
106
- ? parseInt(req.query.maxDepth, 10)
107
- : undefined,
108
- enrich_inputs: true,
109
- });
110
- res.json(execution);
111
- }
112
- catch (err) {
113
- const status = err.status === 404 || err.message?.includes('Not Found') ? 404 : 500;
114
- res.status(status).json({
115
- error: status === 404
116
- ? 'Workflow data is no longer available (job may have expired)'
117
- : err.message,
118
- });
119
- }
81
+ const result = await api.exportWorkflowExecution({
82
+ workflowId: req.params.workflowId,
83
+ excludeSystem: req.query.excludeSystem === 'true',
84
+ omitResults: req.query.omitResults === 'true',
85
+ mode: req.query.mode || undefined,
86
+ maxDepth: req.query.maxDepth
87
+ ? parseInt(req.query.maxDepth, 10)
88
+ : undefined,
89
+ });
90
+ res.status(result.status).json(result.data ?? { error: result.error });
120
91
  });
121
92
  /**
122
93
  * GET /api/workflow-states/:workflowId/status
123
94
  * Return only the numeric status semaphore.
124
95
  */
125
96
  router.get('/:workflowId/status', async (req, res) => {
126
- try {
127
- const resolved = await (0, resolve_1.resolveHandle)(req, res);
128
- if (!resolved)
129
- return;
130
- const result = await exportService.getWorkflowStatus(req.params.workflowId, resolved.taskQueue, resolved.workflowName);
131
- res.json(result);
132
- }
133
- catch (err) {
134
- const status = err.status === 404 || err.message?.includes('Not Found') ? 404 : 500;
135
- res.status(status).json({
136
- error: status === 404
137
- ? 'Workflow data is no longer available (job may have expired)'
138
- : err.message,
139
- });
140
- }
97
+ const result = await api.getWorkflowStatus({
98
+ workflowId: req.params.workflowId,
99
+ });
100
+ res.status(result.status).json(result.data ?? { error: result.error });
141
101
  });
142
102
  /**
143
103
  * GET /api/workflow-states/:workflowId/state
144
104
  * Return the current job state of the workflow.
145
105
  */
146
106
  router.get('/:workflowId/state', async (req, res) => {
147
- try {
148
- const resolved = await (0, resolve_1.resolveHandle)(req, res);
149
- if (!resolved)
150
- return;
151
- const result = await exportService.getWorkflowState(req.params.workflowId, resolved.taskQueue, resolved.workflowName);
152
- res.json(result);
153
- }
154
- catch (err) {
155
- const status = err.status === 404 || err.message?.includes('Not Found') ? 404 : 500;
156
- res.status(status).json({
157
- error: status === 404
158
- ? 'Workflow data is no longer available (job may have expired)'
159
- : err.message,
160
- });
161
- }
107
+ const result = await api.getWorkflowState({
108
+ workflowId: req.params.workflowId,
109
+ });
110
+ res.status(result.status).json(result.data ?? { error: result.error });
162
111
  });
163
112
  exports.default = router;
@@ -26,6 +26,7 @@ const files_1 = __importDefault(require("./files"));
26
26
  const controlplane_1 = __importDefault(require("./controlplane"));
27
27
  const bot_accounts_1 = __importDefault(require("./bot-accounts"));
28
28
  const docs_1 = __importDefault(require("./docs"));
29
+ const workflow_sets_1 = __importDefault(require("./workflow-sets"));
29
30
  const router = (0, express_1.Router)();
30
31
  // Public routes (no auth required — they handle their own auth)
31
32
  router.use('/auth', auth_2.default);
@@ -51,4 +52,5 @@ router.use('/namespaces', namespaces_1.default);
51
52
  router.use('/controlplane', controlplane_1.default);
52
53
  router.use('/bot-accounts', bot_accounts_1.default);
53
54
  router.use('/docs', docs_1.default);
55
+ router.use('/workflow-sets', workflow_sets_1.default);
54
56
  exports.default = router;