@hotmeshio/long-tail 0.1.6 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (384) hide show
  1. package/README.md +47 -5
  2. package/build/api/auth.d.ts +16 -0
  3. package/build/api/auth.js +53 -0
  4. package/build/api/bot-accounts.d.ts +137 -0
  5. package/build/api/bot-accounts.js +302 -0
  6. package/build/api/controlplane.d.ts +68 -0
  7. package/build/api/controlplane.js +158 -0
  8. package/build/api/dba.d.ts +42 -0
  9. package/build/api/dba.js +95 -0
  10. package/build/api/escalations.d.ts +271 -0
  11. package/build/api/escalations.js +892 -0
  12. package/build/api/exports.d.ts +90 -0
  13. package/build/api/exports.js +204 -0
  14. package/build/api/index.d.ts +18 -0
  15. package/build/api/index.js +54 -0
  16. package/build/api/insight.d.ts +86 -0
  17. package/build/api/insight.js +147 -0
  18. package/build/api/maintenance.d.ts +22 -0
  19. package/build/api/maintenance.js +43 -0
  20. package/build/api/mcp-runs.d.ts +43 -0
  21. package/build/api/mcp-runs.js +89 -0
  22. package/build/api/mcp.d.ts +160 -0
  23. package/build/api/mcp.js +320 -0
  24. package/build/api/namespaces.d.ts +20 -0
  25. package/build/{routes/escalations/helpers.js → api/namespaces.js} +35 -10
  26. package/build/api/roles.d.ts +88 -0
  27. package/build/api/roles.js +217 -0
  28. package/build/api/settings.d.ts +10 -0
  29. package/build/api/settings.js +43 -0
  30. package/build/api/tasks.d.ts +70 -0
  31. package/build/api/tasks.js +139 -0
  32. package/build/api/users.d.ts +115 -0
  33. package/build/api/users.js +228 -0
  34. package/build/api/workflow-sets.d.ts +77 -0
  35. package/build/api/workflow-sets.js +170 -0
  36. package/build/api/workflows.d.ts +158 -0
  37. package/build/api/workflows.js +407 -0
  38. package/build/api/yaml-workflows.d.ts +282 -0
  39. package/build/api/yaml-workflows.js +751 -0
  40. package/build/examples/types/envelopes.d.ts +27 -0
  41. package/build/examples/types/index.d.ts +1 -1
  42. package/build/examples/workers.js +8 -0
  43. package/build/examples/workflows/assembly-line/activities.d.ts +28 -0
  44. package/build/examples/workflows/assembly-line/activities.js +53 -0
  45. package/build/examples/workflows/assembly-line/index.d.ts +17 -0
  46. package/build/examples/workflows/assembly-line/index.js +60 -0
  47. package/build/examples/workflows/assembly-line/iterator.d.ts +12 -0
  48. package/build/examples/workflows/assembly-line/iterator.js +54 -0
  49. package/build/examples/workflows/assembly-line/reverter.d.ts +18 -0
  50. package/build/examples/workflows/assembly-line/reverter.js +89 -0
  51. package/build/examples/workflows/assembly-line/types.d.ts +25 -0
  52. package/build/examples/workflows/assembly-line/types.js +8 -0
  53. package/build/examples/workflows/assembly-line/worker.d.ts +13 -0
  54. package/build/examples/workflows/assembly-line/worker.js +81 -0
  55. package/build/index.d.ts +4 -0
  56. package/build/index.js +6 -1
  57. package/build/lib/db/schemas/004_workflow_sets.sql +29 -0
  58. package/build/lib/db/schemas/005_unique_graph_topic.sql +7 -0
  59. package/build/lib/db/schemas/011_system_workflow_configs.sql +7 -0
  60. package/build/lib/events/callback.d.ts +41 -0
  61. package/build/lib/events/callback.js +98 -0
  62. package/build/modules/config.js +1 -1
  63. package/build/routes/auth.js +37 -36
  64. package/build/routes/bot-accounts.js +34 -164
  65. package/build/routes/controlplane.js +20 -60
  66. package/build/routes/dba.js +18 -28
  67. package/build/routes/escalations/bulk.js +17 -192
  68. package/build/routes/escalations/list.js +51 -75
  69. package/build/routes/escalations/resolve.js +3 -193
  70. package/build/routes/escalations/single.js +13 -122
  71. package/build/routes/exports.js +44 -95
  72. package/build/routes/index.js +2 -0
  73. package/build/routes/insight.js +46 -88
  74. package/build/routes/maintenance.js +41 -17
  75. package/build/routes/mcp-runs.js +52 -60
  76. package/build/routes/mcp.js +49 -177
  77. package/build/routes/namespaces.js +9 -20
  78. package/build/routes/roles.js +23 -97
  79. package/build/routes/settings.js +37 -25
  80. package/build/routes/tasks.js +28 -64
  81. package/build/routes/users.js +24 -113
  82. package/build/routes/workflow-sets.d.ts +2 -0
  83. package/build/routes/workflow-sets.js +98 -0
  84. package/build/routes/workflows/config.js +23 -57
  85. package/build/routes/workflows/discovery.js +11 -85
  86. package/build/routes/workflows/invocation.js +28 -90
  87. package/build/routes/yaml-workflows/cron.js +12 -61
  88. package/build/routes/yaml-workflows/crud.js +30 -223
  89. package/build/routes/yaml-workflows/deployment.js +15 -115
  90. package/build/routes/yaml-workflows/versions.js +20 -58
  91. package/build/sdk/index.d.ts +338 -0
  92. package/build/sdk/index.js +299 -0
  93. package/build/services/controlplane/index.d.ts +1 -2
  94. package/build/services/controlplane/index.js +3 -3
  95. package/build/services/controlplane/sql.d.ts +2 -2
  96. package/build/services/controlplane/sql.js +4 -5
  97. package/build/services/controlplane/types.d.ts +1 -0
  98. package/build/services/export/index.js +6 -1
  99. package/build/services/hotmesh-utils.js +2 -4
  100. package/build/services/insight/index.d.ts +7 -0
  101. package/build/services/insight/index.js +30 -0
  102. package/build/services/mcp/client/tools.js +13 -1
  103. package/build/services/mcp-runs/sql.js +1 -1
  104. package/build/services/workflow-invocation.d.ts +15 -2
  105. package/build/services/workflow-invocation.js +11 -6
  106. package/build/services/workflow-sets/db.d.ts +16 -0
  107. package/build/services/workflow-sets/db.js +78 -0
  108. package/build/services/workflow-sets/index.d.ts +1 -0
  109. package/build/services/workflow-sets/index.js +11 -0
  110. package/build/services/workflow-sets/sql.d.ts +6 -0
  111. package/build/services/workflow-sets/sql.js +24 -0
  112. package/build/services/yaml-workflow/db-utils.d.ts +1 -0
  113. package/build/services/yaml-workflow/db-utils.js +4 -0
  114. package/build/services/yaml-workflow/db.d.ts +5 -0
  115. package/build/services/yaml-workflow/db.js +17 -0
  116. package/build/services/yaml-workflow/pipeline/build/wiring.js +14 -1
  117. package/build/services/yaml-workflow/pipeline/prompts.d.ts +1 -1
  118. package/build/services/yaml-workflow/pipeline/prompts.js +1 -1
  119. package/build/services/yaml-workflow/sql.d.ts +2 -1
  120. package/build/services/yaml-workflow/sql.js +8 -3
  121. package/build/services/yaml-workflow/types.d.ts +3 -0
  122. package/build/services/yaml-workflow/workers/callbacks.js +7 -1
  123. package/build/services/yaml-workflow/workers/register.js +7 -0
  124. package/build/start/adapters.js +4 -0
  125. package/build/system/index.js +6 -0
  126. package/build/system/mcp-servers/knowledge.js +1 -1
  127. package/build/system/seed/server-definitions.js +2 -1
  128. package/build/system/workflows/mcp-workflow-builder/activities/index.d.ts +1 -1
  129. package/build/system/workflows/mcp-workflow-builder/activities/index.js +2 -1
  130. package/build/system/workflows/mcp-workflow-builder/activities/tool-loader.d.ts +6 -0
  131. package/build/system/workflows/mcp-workflow-builder/activities/tool-loader.js +26 -0
  132. package/build/system/workflows/mcp-workflow-builder/index.js +26 -2
  133. package/build/system/workflows/mcp-workflow-builder/prompts.js +104 -35
  134. package/build/system/workflows/mcp-workflow-planner/activities/analyze.d.ts +11 -0
  135. package/build/system/workflows/mcp-workflow-planner/activities/analyze.js +36 -0
  136. package/build/system/workflows/mcp-workflow-planner/activities/index.d.ts +3 -0
  137. package/build/system/workflows/mcp-workflow-planner/activities/index.js +12 -0
  138. package/build/system/workflows/mcp-workflow-planner/activities/persist.d.ts +19 -0
  139. package/build/system/workflows/mcp-workflow-planner/activities/persist.js +55 -0
  140. package/build/system/workflows/mcp-workflow-planner/activities/plan.d.ts +10 -0
  141. package/build/system/workflows/mcp-workflow-planner/activities/plan.js +43 -0
  142. package/build/system/workflows/mcp-workflow-planner/index.d.ts +7 -0
  143. package/build/system/workflows/mcp-workflow-planner/index.js +152 -0
  144. package/build/system/workflows/mcp-workflow-planner/prompts.d.ts +7 -0
  145. package/build/system/workflows/mcp-workflow-planner/prompts.js +77 -0
  146. package/build/tsconfig.tsbuildinfo +1 -1
  147. package/build/types/index.d.ts +1 -0
  148. package/build/types/sdk.d.ts +27 -0
  149. package/build/types/sdk.js +2 -0
  150. package/build/types/workflow-set.d.ts +44 -0
  151. package/build/types/workflow-set.js +5 -0
  152. package/dashboard/dist/assets/{AdminDashboard-BXkKGkb5.js → AdminDashboard-B15jSEV2.js} +2 -2
  153. package/dashboard/dist/assets/{AdminDashboard-BXkKGkb5.js.map → AdminDashboard-B15jSEV2.js.map} +1 -1
  154. package/dashboard/dist/assets/{AvailableEscalationsPage-DcH592mc.js → AvailableEscalationsPage-0V2yvKak.js} +2 -2
  155. package/dashboard/dist/assets/{AvailableEscalationsPage-DcH592mc.js.map → AvailableEscalationsPage-0V2yvKak.js.map} +1 -1
  156. package/dashboard/dist/assets/BotPicker-B4UxHcek.js +2 -0
  157. package/dashboard/dist/assets/{BotPicker-A6LtzyuO.js.map → BotPicker-B4UxHcek.js.map} +1 -1
  158. package/dashboard/dist/assets/{CollapsibleSection-C7nL2_mv.js → CollapsibleSection-BBexNWVd.js} +2 -2
  159. package/dashboard/dist/assets/{CollapsibleSection-C7nL2_mv.js.map → CollapsibleSection-BBexNWVd.js.map} +1 -1
  160. package/dashboard/dist/assets/{ConfirmDeleteModal-CWFwJrSl.js → ConfirmDeleteModal-DlPDJSq_.js} +2 -2
  161. package/dashboard/dist/assets/{ConfirmDeleteModal-CWFwJrSl.js.map → ConfirmDeleteModal-DlPDJSq_.js.map} +1 -1
  162. package/dashboard/dist/assets/{CopyableId-DbZ5c3jh.js → CopyableId-BxHW1ahb.js} +2 -2
  163. package/dashboard/dist/assets/{CopyableId-DbZ5c3jh.js.map → CopyableId-BxHW1ahb.js.map} +1 -1
  164. package/dashboard/dist/assets/{CredentialsPage-ClWkmLPu.js → CredentialsPage-Bp_Y1Szk.js} +2 -2
  165. package/dashboard/dist/assets/{CredentialsPage-ClWkmLPu.js.map → CredentialsPage-Bp_Y1Szk.js.map} +1 -1
  166. package/dashboard/dist/assets/{CustomDurationPicker-CtH2hReF.js → CustomDurationPicker-ByBFqXSO.js} +2 -2
  167. package/dashboard/dist/assets/{CustomDurationPicker-CtH2hReF.js.map → CustomDurationPicker-ByBFqXSO.js.map} +1 -1
  168. package/dashboard/dist/assets/{DataTable-CM5ZcpPi.js → DataTable-DyIXg-tQ.js} +2 -2
  169. package/dashboard/dist/assets/{DataTable-CM5ZcpPi.js.map → DataTable-DyIXg-tQ.js.map} +1 -1
  170. package/dashboard/dist/assets/{ElapsedCell-CwqavyeC.js → ElapsedCell-BgnA0qpS.js} +2 -2
  171. package/dashboard/dist/assets/{ElapsedCell-CwqavyeC.js.map → ElapsedCell-BgnA0qpS.js.map} +1 -1
  172. package/dashboard/dist/assets/{EmptyState-BBn78pmm.js → EmptyState-DlMImvgm.js} +2 -2
  173. package/dashboard/dist/assets/{EmptyState-BBn78pmm.js.map → EmptyState-DlMImvgm.js.map} +1 -1
  174. package/dashboard/dist/assets/{EscalationsOverview-BcJ2E3X7.js → EscalationsOverview-D90kdfw1.js} +2 -2
  175. package/dashboard/dist/assets/{EscalationsOverview-BcJ2E3X7.js.map → EscalationsOverview-D90kdfw1.js.map} +1 -1
  176. package/dashboard/dist/assets/{EventTable-C1en_KZ0.js → EventTable-BNxtlgNz.js} +2 -2
  177. package/dashboard/dist/assets/{EventTable-C1en_KZ0.js.map → EventTable-BNxtlgNz.js.map} +1 -1
  178. package/dashboard/dist/assets/{FilterBar-CZTlrLQT.js → FilterBar-BTiaAhCx.js} +2 -2
  179. package/dashboard/dist/assets/{FilterBar-CZTlrLQT.js.map → FilterBar-BTiaAhCx.js.map} +1 -1
  180. package/dashboard/dist/assets/{ListToolbar-Cdbsapig.js → ListToolbar-BUcagSCn.js} +2 -2
  181. package/dashboard/dist/assets/{ListToolbar-Cdbsapig.js.map → ListToolbar-BUcagSCn.js.map} +1 -1
  182. package/dashboard/dist/assets/{McpOverview-CSpEJxKa.js → McpOverview-B-tCvz8C.js} +2 -2
  183. package/dashboard/dist/assets/{McpOverview-CSpEJxKa.js.map → McpOverview-B-tCvz8C.js.map} +1 -1
  184. package/dashboard/dist/assets/McpQueryDetailPage-DPlF1wYb.js +5 -0
  185. package/dashboard/dist/assets/McpQueryDetailPage-DPlF1wYb.js.map +1 -0
  186. package/dashboard/dist/assets/McpQueryPage-Bz7AdcfR.js +2 -0
  187. package/dashboard/dist/assets/McpQueryPage-Bz7AdcfR.js.map +1 -0
  188. package/dashboard/dist/assets/{McpRunDetailPage-9xdxgG4d.js → McpRunDetailPage-Di_qpL2V.js} +2 -2
  189. package/dashboard/dist/assets/{McpRunDetailPage-9xdxgG4d.js.map → McpRunDetailPage-Di_qpL2V.js.map} +1 -1
  190. package/dashboard/dist/assets/{McpRunsPage-wWLqHsd4.js → McpRunsPage-BBgybBEa.js} +2 -2
  191. package/dashboard/dist/assets/{McpRunsPage-wWLqHsd4.js.map → McpRunsPage-BBgybBEa.js.map} +1 -1
  192. package/dashboard/dist/assets/{Modal-kB_P7ZOr.js → Modal-CaJ0gTEa.js} +2 -2
  193. package/dashboard/dist/assets/{Modal-kB_P7ZOr.js.map → Modal-CaJ0gTEa.js.map} +1 -1
  194. package/dashboard/dist/assets/OperatorDashboard-DDfMmrmR.js +2 -0
  195. package/dashboard/dist/assets/{OperatorDashboard-jc0vrgDI.js.map → OperatorDashboard-DDfMmrmR.js.map} +1 -1
  196. package/dashboard/dist/assets/{PageHeader-NkOeBR05.js → PageHeader-C5D-G5rp.js} +2 -2
  197. package/dashboard/dist/assets/{PageHeader-NkOeBR05.js.map → PageHeader-C5D-G5rp.js.map} +1 -1
  198. package/dashboard/dist/assets/{PageHeaderWithStats-ywNhrmFK.js → PageHeaderWithStats-DCa2eZh2.js} +2 -2
  199. package/dashboard/dist/assets/{PageHeaderWithStats-ywNhrmFK.js.map → PageHeaderWithStats-DCa2eZh2.js.map} +1 -1
  200. package/dashboard/dist/assets/{PriorityBadge-B2MQbSxy.js → PriorityBadge-DTHq6OUZ.js} +2 -2
  201. package/dashboard/dist/assets/{PriorityBadge-B2MQbSxy.js.map → PriorityBadge-DTHq6OUZ.js.map} +1 -1
  202. package/dashboard/dist/assets/{ProcessDetailPage-B7z7IdqE.js → ProcessDetailPage-fC4dhrd0.js} +2 -2
  203. package/dashboard/dist/assets/{ProcessDetailPage-B7z7IdqE.js.map → ProcessDetailPage-fC4dhrd0.js.map} +1 -1
  204. package/dashboard/dist/assets/{ProcessesListPage-C-uHadO6.js → ProcessesListPage-CL2MY8uD.js} +2 -2
  205. package/dashboard/dist/assets/{ProcessesListPage-C-uHadO6.js.map → ProcessesListPage-CL2MY8uD.js.map} +1 -1
  206. package/dashboard/dist/assets/{RolePill-C1dgC-fK.js → RolePill-kgKPANly.js} +2 -2
  207. package/dashboard/dist/assets/{RolePill-C1dgC-fK.js.map → RolePill-kgKPANly.js.map} +1 -1
  208. package/dashboard/dist/assets/{RolesPage-BSxrD1vm.js → RolesPage-Be2lXTHD.js} +2 -2
  209. package/dashboard/dist/assets/{RolesPage-BSxrD1vm.js.map → RolesPage-Be2lXTHD.js.map} +1 -1
  210. package/dashboard/dist/assets/{RowActions-lYaHGI-v.js → RowActions-DIzJCwqR.js} +2 -2
  211. package/dashboard/dist/assets/{RowActions-lYaHGI-v.js.map → RowActions-DIzJCwqR.js.map} +1 -1
  212. package/dashboard/dist/assets/{StatCard-v2TiITVr.js → StatCard-CRi2Jy6t.js} +2 -2
  213. package/dashboard/dist/assets/{StatCard-v2TiITVr.js.map → StatCard-CRi2Jy6t.js.map} +1 -1
  214. package/dashboard/dist/assets/{StatusBadge-DWlxevgG.js → StatusBadge-BETI_8Mr.js} +2 -2
  215. package/dashboard/dist/assets/{StatusBadge-DWlxevgG.js.map → StatusBadge-BETI_8Mr.js.map} +1 -1
  216. package/dashboard/dist/assets/{StepIndicator-CRM4ft28.js → StepIndicator-DjpMqCjz.js} +2 -2
  217. package/dashboard/dist/assets/{StepIndicator-CRM4ft28.js.map → StepIndicator-DjpMqCjz.js.map} +1 -1
  218. package/dashboard/dist/assets/{StickyPagination-CF0EToEU.js → StickyPagination-BZbExQ9t.js} +2 -2
  219. package/dashboard/dist/assets/{StickyPagination-CF0EToEU.js.map → StickyPagination-BZbExQ9t.js.map} +1 -1
  220. package/dashboard/dist/assets/{SwimlaneTimeline-CNlj7fgg.js → SwimlaneTimeline-DZthQyhR.js} +2 -2
  221. package/dashboard/dist/assets/{SwimlaneTimeline-CNlj7fgg.js.map → SwimlaneTimeline-DZthQyhR.js.map} +1 -1
  222. package/dashboard/dist/assets/{TagInput-CH8qMGhC.js → TagInput-CukbOfYn.js} +2 -2
  223. package/dashboard/dist/assets/{TagInput-CH8qMGhC.js.map → TagInput-CukbOfYn.js.map} +1 -1
  224. package/dashboard/dist/assets/{TaskDetailPage-CdWo-6mu.js → TaskDetailPage-CIZHIKo9.js} +2 -2
  225. package/dashboard/dist/assets/{TaskDetailPage-CdWo-6mu.js.map → TaskDetailPage-CIZHIKo9.js.map} +1 -1
  226. package/dashboard/dist/assets/{TaskQueuePill-BPj4ogVG.js → TaskQueuePill-Q7DGoysj.js} +2 -2
  227. package/dashboard/dist/assets/{TaskQueuePill-BPj4ogVG.js.map → TaskQueuePill-Q7DGoysj.js.map} +1 -1
  228. package/dashboard/dist/assets/{TasksListPage-CtRkMpKU.js → TasksListPage-CsC9wjb0.js} +2 -2
  229. package/dashboard/dist/assets/{TasksListPage-CtRkMpKU.js.map → TasksListPage-CsC9wjb0.js.map} +1 -1
  230. package/dashboard/dist/assets/{TimeAgo-Di1a3X5P.js → TimeAgo-BcOOnJeH.js} +2 -2
  231. package/dashboard/dist/assets/{TimeAgo-Di1a3X5P.js.map → TimeAgo-BcOOnJeH.js.map} +1 -1
  232. package/dashboard/dist/assets/{TimestampCell-CqrXql-S.js → TimestampCell-CEMapYDQ.js} +2 -2
  233. package/dashboard/dist/assets/{TimestampCell-CqrXql-S.js.map → TimestampCell-CEMapYDQ.js.map} +1 -1
  234. package/dashboard/dist/assets/{UserName-BUFYCnRa.js → UserName-BHoN7iRL.js} +2 -2
  235. package/dashboard/dist/assets/{UserName-BUFYCnRa.js.map → UserName-BHoN7iRL.js.map} +1 -1
  236. package/dashboard/dist/assets/{WorkflowExecutionPage-25iusMml.js → WorkflowExecutionPage-DawKl1LT.js} +2 -2
  237. package/dashboard/dist/assets/{WorkflowExecutionPage-25iusMml.js.map → WorkflowExecutionPage-DawKl1LT.js.map} +1 -1
  238. package/dashboard/dist/assets/WorkflowPill-CP84Vqeg.js +2 -0
  239. package/dashboard/dist/assets/{WorkflowPill-DPKOcbf4.js.map → WorkflowPill-CP84Vqeg.js.map} +1 -1
  240. package/dashboard/dist/assets/{WorkflowsDashboard-BgxslssH.js → WorkflowsDashboard-QrvVFxtQ.js} +2 -2
  241. package/dashboard/dist/assets/{WorkflowsDashboard-BgxslssH.js.map → WorkflowsDashboard-QrvVFxtQ.js.map} +1 -1
  242. package/dashboard/dist/assets/{WorkflowsOverview-Doe5L-Re.js → WorkflowsOverview-DuhAi_OY.js} +2 -2
  243. package/dashboard/dist/assets/{WorkflowsOverview-Doe5L-Re.js.map → WorkflowsOverview-DuhAi_OY.js.map} +1 -1
  244. package/dashboard/dist/assets/YamlWorkflowsPage-Dc9xw82a.js +2 -0
  245. package/dashboard/dist/assets/YamlWorkflowsPage-Dc9xw82a.js.map +1 -0
  246. package/dashboard/dist/assets/{bots-Bi2_O1Ts.js → bots-Dny-rmmI.js} +2 -2
  247. package/dashboard/dist/assets/{bots-Bi2_O1Ts.js.map → bots-Dny-rmmI.js.map} +1 -1
  248. package/dashboard/dist/assets/{escalation-Ck1KlLkT.js → escalation-CV0sKNH5.js} +2 -2
  249. package/dashboard/dist/assets/{escalation-Ck1KlLkT.js.map → escalation-CV0sKNH5.js.map} +1 -1
  250. package/dashboard/dist/assets/{escalation-columns-ohDsj2eJ.js → escalation-columns-30CKyoWI.js} +2 -2
  251. package/dashboard/dist/assets/{escalation-columns-ohDsj2eJ.js.map → escalation-columns-30CKyoWI.js.map} +1 -1
  252. package/dashboard/dist/assets/{helpers-BoD2SgUY.js → helpers-C1-30CzH.js} +2 -2
  253. package/dashboard/dist/assets/{helpers-BoD2SgUY.js.map → helpers-C1-30CzH.js.map} +1 -1
  254. package/dashboard/dist/assets/helpers-C1jaRD-d.js +2 -0
  255. package/dashboard/dist/assets/helpers-C1jaRD-d.js.map +1 -0
  256. package/dashboard/dist/assets/{index-FuohTtaM.js → index-BUVQ6wmy.js} +3 -3
  257. package/dashboard/dist/assets/{index-FuohTtaM.js.map → index-BUVQ6wmy.js.map} +1 -1
  258. package/dashboard/dist/assets/index-CxVB7F4X.js +2 -0
  259. package/dashboard/dist/assets/{index-Dk2Q51o0.js.map → index-CxVB7F4X.js.map} +1 -1
  260. package/dashboard/dist/assets/{index-BEtLIsML.js → index-D-oCWCAS.js} +2 -2
  261. package/dashboard/dist/assets/{index-BEtLIsML.js.map → index-D-oCWCAS.js.map} +1 -1
  262. package/dashboard/dist/assets/index-D0wPM3Ck.js +2 -0
  263. package/dashboard/dist/assets/{index-BpT-6WgJ.js.map → index-D0wPM3Ck.js.map} +1 -1
  264. package/dashboard/dist/assets/{index-Bn2xHDr8.js → index-DHgnkykj.js} +3 -3
  265. package/dashboard/dist/assets/{index-Bn2xHDr8.js.map → index-DHgnkykj.js.map} +1 -1
  266. package/dashboard/dist/assets/{index-D3NyVADW.js → index-D_aJBEAG.js} +2 -2
  267. package/dashboard/dist/assets/index-D_aJBEAG.js.map +1 -0
  268. package/dashboard/dist/assets/{index-PyCTS05D.css → index-DcIKW-cZ.css} +1 -1
  269. package/dashboard/dist/assets/{index-CZrJ09p-.js → index-Dd_U4mLm.js} +2 -2
  270. package/dashboard/dist/assets/{index-CZrJ09p-.js.map → index-Dd_U4mLm.js.map} +1 -1
  271. package/dashboard/dist/assets/{index-DYyLF-Qb.js → index-DnmZbNxk.js} +8 -8
  272. package/dashboard/dist/assets/index-DnmZbNxk.js.map +1 -0
  273. package/dashboard/dist/assets/index-_RBvi7s6.js +2 -0
  274. package/dashboard/dist/assets/{index-D7zYZOnH.js.map → index-_RBvi7s6.js.map} +1 -1
  275. package/dashboard/dist/assets/index-n7td8zgX.js +17 -0
  276. package/dashboard/dist/assets/{index-DOkHXmyf.js.map → index-n7td8zgX.js.map} +1 -1
  277. package/dashboard/dist/assets/{mcp-CJtYjA7A.js → mcp-CRFr4L9W.js} +2 -2
  278. package/dashboard/dist/assets/{mcp-CJtYjA7A.js.map → mcp-CRFr4L9W.js.map} +1 -1
  279. package/dashboard/dist/assets/mcp-query-DHY2mZBQ.js +2 -0
  280. package/dashboard/dist/assets/mcp-query-DHY2mZBQ.js.map +1 -0
  281. package/dashboard/dist/assets/{mcp-runs-DUWm9Z4V.js → mcp-runs-BqPHqwAO.js} +2 -2
  282. package/dashboard/dist/assets/{mcp-runs-DUWm9Z4V.js.map → mcp-runs-BqPHqwAO.js.map} +1 -1
  283. package/dashboard/dist/assets/{namespaces-BM5P2qmL.js → namespaces-TG1aIpo_.js} +2 -2
  284. package/dashboard/dist/assets/{namespaces-BM5P2qmL.js.map → namespaces-TG1aIpo_.js.map} +1 -1
  285. package/dashboard/dist/assets/{roles-lv0shpjJ.js → roles-DhhLTvXg.js} +2 -2
  286. package/dashboard/dist/assets/{roles-lv0shpjJ.js.map → roles-DhhLTvXg.js.map} +1 -1
  287. package/dashboard/dist/assets/{settings-Wlq92mRo.js → settings-D9MBzEeB.js} +2 -2
  288. package/dashboard/dist/assets/{settings-Wlq92mRo.js.map → settings-D9MBzEeB.js.map} +1 -1
  289. package/dashboard/dist/assets/{tasks-BFGm4PuE.js → tasks-BxmcZoev.js} +2 -2
  290. package/dashboard/dist/assets/{tasks-BFGm4PuE.js.map → tasks-BxmcZoev.js.map} +1 -1
  291. package/dashboard/dist/assets/{useEventHooks-DIE6ue4x.js → useEventHooks-BylecvvI.js} +2 -2
  292. package/dashboard/dist/assets/{useEventHooks-DIE6ue4x.js.map → useEventHooks-BylecvvI.js.map} +1 -1
  293. package/dashboard/dist/assets/{useYamlActivityEvents-DCwSO73t.js → useYamlActivityEvents-ocmj11e_.js} +2 -2
  294. package/dashboard/dist/assets/{useYamlActivityEvents-DCwSO73t.js.map → useYamlActivityEvents-ocmj11e_.js.map} +1 -1
  295. package/dashboard/dist/assets/{users-tA5-K0wA.js → users-Ce5r-JAv.js} +2 -2
  296. package/dashboard/dist/assets/{users-tA5-K0wA.js.map → users-Ce5r-JAv.js.map} +1 -1
  297. package/dashboard/dist/assets/{vendor-icons-BiIug1SK.js → vendor-icons-D1DdudfH.js} +93 -73
  298. package/dashboard/dist/assets/vendor-icons-D1DdudfH.js.map +1 -0
  299. package/dashboard/dist/assets/{workflows-CfLc15Wr.js → workflows-ykIeVbRJ.js} +2 -2
  300. package/dashboard/dist/assets/{workflows-CfLc15Wr.js.map → workflows-ykIeVbRJ.js.map} +1 -1
  301. package/dashboard/dist/assets/yaml-workflows-WypmKYht.js +2 -0
  302. package/dashboard/dist/assets/yaml-workflows-WypmKYht.js.map +1 -0
  303. package/dashboard/dist/index.html +3 -3
  304. package/docs/api/sdk/auth.md +27 -0
  305. package/docs/api/sdk/bot-accounts.md +243 -0
  306. package/docs/api/sdk/controlplane.md +103 -0
  307. package/docs/api/sdk/dba.md +52 -0
  308. package/docs/api/sdk/escalations.md +374 -0
  309. package/docs/api/sdk/events.md +68 -0
  310. package/docs/api/sdk/exports.md +124 -0
  311. package/docs/api/sdk/insight.md +112 -0
  312. package/docs/api/sdk/maintenance.md +54 -0
  313. package/docs/api/sdk/mcp-runs.md +71 -0
  314. package/docs/api/sdk/mcp.md +250 -0
  315. package/docs/api/sdk/namespaces.md +43 -0
  316. package/docs/api/sdk/roles.md +183 -0
  317. package/docs/api/sdk/settings.md +24 -0
  318. package/docs/api/sdk/tasks.md +120 -0
  319. package/docs/api/sdk/users.md +196 -0
  320. package/docs/api/sdk/workflow-sets.md +135 -0
  321. package/docs/api/sdk/workflows.md +271 -0
  322. package/docs/api/sdk/yaml-workflows.md +408 -0
  323. package/docs/events.md +28 -0
  324. package/docs/sdk.md +177 -0
  325. package/docs/story.md +157 -0
  326. package/package.json +3 -2
  327. package/build/routes/escalations/helpers.d.ts +0 -5
  328. package/build/routes/resolve.d.ts +0 -9
  329. package/build/routes/resolve.js +0 -19
  330. package/build/routes/yaml-workflows/helpers.d.ts +0 -2
  331. package/build/routes/yaml-workflows/helpers.js +0 -8
  332. package/dashboard/dist/assets/BotPicker-A6LtzyuO.js +0 -2
  333. package/dashboard/dist/assets/McpQueryDetailPage-DhqEI180.js +0 -5
  334. package/dashboard/dist/assets/McpQueryDetailPage-DhqEI180.js.map +0 -1
  335. package/dashboard/dist/assets/McpQueryPage-CIiVMlqo.js +0 -2
  336. package/dashboard/dist/assets/McpQueryPage-CIiVMlqo.js.map +0 -1
  337. package/dashboard/dist/assets/OperatorDashboard-jc0vrgDI.js +0 -2
  338. package/dashboard/dist/assets/RunAsSelector-CJDnyp93.js +0 -2
  339. package/dashboard/dist/assets/RunAsSelector-CJDnyp93.js.map +0 -1
  340. package/dashboard/dist/assets/WorkflowPill-DPKOcbf4.js +0 -2
  341. package/dashboard/dist/assets/YamlWorkflowsPage-BliAckJ6.js +0 -2
  342. package/dashboard/dist/assets/YamlWorkflowsPage-BliAckJ6.js.map +0 -1
  343. package/dashboard/dist/assets/index-BpT-6WgJ.js +0 -2
  344. package/dashboard/dist/assets/index-D3NyVADW.js.map +0 -1
  345. package/dashboard/dist/assets/index-D7zYZOnH.js +0 -2
  346. package/dashboard/dist/assets/index-DOkHXmyf.js +0 -17
  347. package/dashboard/dist/assets/index-DYyLF-Qb.js.map +0 -1
  348. package/dashboard/dist/assets/index-Dk2Q51o0.js +0 -2
  349. package/dashboard/dist/assets/mcp-query-jQJQrs_7.js +0 -2
  350. package/dashboard/dist/assets/mcp-query-jQJQrs_7.js.map +0 -1
  351. package/dashboard/dist/assets/vendor-icons-BiIug1SK.js.map +0 -1
  352. package/dashboard/dist/assets/yaml-workflows-D7JXNqbM.js +0 -2
  353. package/dashboard/dist/assets/yaml-workflows-D7JXNqbM.js.map +0 -1
  354. package/docs/img/01-login.png +0 -0
  355. package/docs/img/02-dashboard-home.png +0 -0
  356. package/docs/img/03-processes-list.png +0 -0
  357. package/docs/img/04-escalations-list.png +0 -0
  358. package/docs/img/05-mcp-servers.png +0 -0
  359. package/docs/img/06-mcp-pipelines.png +0 -0
  360. package/docs/img/07-workflows-list.png +0 -0
  361. package/docs/img/compilation/01-query-submit.png +0 -0
  362. package/docs/img/compilation/02-mcp-servers.png +0 -0
  363. package/docs/img/compilation/03-query-completed.png +0 -0
  364. package/docs/img/compilation/04-wizard-original.png +0 -0
  365. package/docs/img/compilation/05-wizard-timeline.png +0 -0
  366. package/docs/img/compilation/06-wizard-profile.png +0 -0
  367. package/docs/img/compilation/07-wizard-deploy.png +0 -0
  368. package/docs/img/compilation/08-wizard-test-modal.png +0 -0
  369. package/docs/img/compilation/09-wizard-test-compare.png +0 -0
  370. package/docs/img/compilation/10-wizard-verify.png +0 -0
  371. /package/docs/api/{dba.md → http/dba.md} +0 -0
  372. /package/docs/api/{escalations.md → http/escalations.md} +0 -0
  373. /package/docs/api/{exports.md → http/exports.md} +0 -0
  374. /package/docs/api/{maintenance.md → http/maintenance.md} +0 -0
  375. /package/docs/api/{mcp-runs.md → http/mcp-runs.md} +0 -0
  376. /package/docs/api/{mcp-servers.md → http/mcp-servers.md} +0 -0
  377. /package/docs/api/{namespaces.md → http/namespaces.md} +0 -0
  378. /package/docs/api/{roles.md → http/roles.md} +0 -0
  379. /package/docs/api/{service-accounts.md → http/service-accounts.md} +0 -0
  380. /package/docs/api/{settings.md → http/settings.md} +0 -0
  381. /package/docs/api/{tasks.md → http/tasks.md} +0 -0
  382. /package/docs/api/{users.md → http/users.md} +0 -0
  383. /package/docs/api/{workflows.md → http/workflows.md} +0 -0
  384. /package/docs/api/{yaml-workflows.md → http/yaml-workflows.md} +0 -0
@@ -34,8 +34,8 @@ 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 api = __importStar(require("../api/dba"));
37
38
  const auth_1 = require("../modules/auth");
38
- const dbaService = __importStar(require("../services/dba"));
39
39
  const router = (0, express_1.Router)();
40
40
  /**
41
41
  * POST /api/dba/prune
@@ -53,38 +53,28 @@ const router = (0, express_1.Router)();
53
53
  * Returns: { jobs, streams, attributes, transient, marked }
54
54
  */
55
55
  router.post('/prune', auth_1.requireAdmin, async (req, res) => {
56
- try {
57
- const result = await dbaService.prune({
58
- expire: req.body.expire,
59
- jobs: req.body.jobs,
60
- streams: req.body.streams,
61
- engineStreams: req.body.engineStreams,
62
- engineStreamsExpire: req.body.engineStreamsExpire,
63
- workerStreams: req.body.workerStreams,
64
- workerStreamsExpire: req.body.workerStreamsExpire,
65
- attributes: req.body.attributes,
66
- entities: req.body.entities,
67
- pruneTransient: req.body.pruneTransient,
68
- keepHmark: req.body.keepHmark,
69
- });
70
- res.json(result);
71
- }
72
- catch (err) {
73
- res.status(500).json({ error: err.message });
74
- }
56
+ const result = await api.prune({
57
+ expire: req.body.expire,
58
+ jobs: req.body.jobs,
59
+ streams: req.body.streams,
60
+ engineStreams: req.body.engineStreams,
61
+ engineStreamsExpire: req.body.engineStreamsExpire,
62
+ workerStreams: req.body.workerStreams,
63
+ workerStreamsExpire: req.body.workerStreamsExpire,
64
+ attributes: req.body.attributes,
65
+ entities: req.body.entities,
66
+ pruneTransient: req.body.pruneTransient,
67
+ keepHmark: req.body.keepHmark,
68
+ });
69
+ res.status(result.status).json(result.data ?? { error: result.error });
75
70
  });
76
71
  /**
77
72
  * POST /api/dba/deploy
78
73
  * Deploy the server-side prune function and run migrations.
79
74
  * Idempotent — safe to call on startup or from CI/CD.
80
75
  */
81
- router.post('/deploy', auth_1.requireAdmin, async (req, res) => {
82
- try {
83
- await dbaService.deploy();
84
- res.json({ ok: true });
85
- }
86
- catch (err) {
87
- res.status(500).json({ error: err.message });
88
- }
76
+ router.post('/deploy', auth_1.requireAdmin, async (_req, res) => {
77
+ const result = await api.deploy();
78
+ res.status(result.status).json(result.data ?? { error: result.error });
89
79
  });
90
80
  exports.default = router;
@@ -34,209 +34,34 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.registerBulkRoutes = registerBulkRoutes;
37
- const escalationService = __importStar(require("../../services/escalation"));
38
- const taskService = __importStar(require("../../services/task"));
39
- const userService = __importStar(require("../../services/user"));
40
- const workers_1 = require("../../workers");
41
- const defaults_1 = require("../../modules/defaults");
42
- const publish_1 = require("../../lib/events/publish");
43
- // ── Shared helpers ──────────────────────────────────────────────────────────
44
- function validateIds(ids) {
45
- return Array.isArray(ids) && ids.length > 0;
46
- }
47
- async function requireBulkPermission(userId, ids, res) {
48
- const isSuperAdminUser = await userService.isSuperAdmin(userId);
49
- if (isSuperAdminUser)
50
- return true;
51
- const roles = await escalationService.getEscalationRoles(ids);
52
- for (const role of roles) {
53
- const canManage = await userService.isGroupAdmin(userId, role);
54
- if (!canManage) {
55
- res.status(403).json({ error: `Insufficient permissions for role "${role}"` });
56
- return false;
57
- }
58
- }
59
- return true;
60
- }
61
- function publishBulkClaimEvents(ids, assignedTo) {
62
- for (const id of ids) {
63
- (0, publish_1.publishEscalationEvent)({
64
- type: 'escalation.claimed',
65
- source: 'api',
66
- workflowId: '',
67
- workflowName: '',
68
- taskQueue: '',
69
- escalationId: id,
70
- status: 'claimed',
71
- data: { assigned_to: assignedTo, bulk: true },
72
- });
73
- }
74
- }
75
- // ── Routes ──────────────────────────────────────────────────────────────────
37
+ const api = __importStar(require("../../api/escalations"));
76
38
  function registerBulkRoutes(router) {
77
39
  router.post('/release-expired', async (_req, res) => {
78
- try {
79
- const released = await escalationService.releaseExpiredClaims();
80
- res.json({ released });
81
- }
82
- catch (err) {
83
- res.status(500).json({ error: err.message });
84
- }
40
+ const result = await api.releaseExpiredClaims();
41
+ res.status(result.status).json(result.data ?? { error: result.error });
85
42
  });
86
43
  router.patch('/priority', async (req, res) => {
87
- try {
88
- const { ids, priority } = req.body || {};
89
- if (!validateIds(ids))
90
- return res.status(400).json({ error: 'ids must be a non-empty array' });
91
- if (![1, 2, 3, 4].includes(priority))
92
- return res.status(400).json({ error: 'priority must be 1, 2, 3, or 4' });
93
- if (!await requireBulkPermission(req.auth.userId, ids, res))
94
- return;
95
- const updated = await escalationService.updateEscalationsPriority(ids, priority);
96
- res.json({ updated });
97
- }
98
- catch (err) {
99
- res.status(500).json({ error: err.message });
100
- }
44
+ const result = await api.updatePriority({ ids: req.body?.ids, priority: req.body?.priority }, req.auth);
45
+ res.status(result.status).json(result.data ?? { error: result.error });
101
46
  });
102
47
  router.post('/bulk-claim', async (req, res) => {
103
- try {
104
- const userId = req.auth.userId;
105
- const { ids, durationMinutes } = req.body || {};
106
- if (!validateIds(ids))
107
- return res.status(400).json({ error: 'ids must be a non-empty array' });
108
- if (!await requireBulkPermission(userId, ids, res))
109
- return;
110
- const result = await escalationService.bulkClaimEscalations(ids, userId, durationMinutes ?? 30);
111
- res.json(result);
112
- if (result.claimed > 0)
113
- publishBulkClaimEvents(ids, userId);
114
- }
115
- catch (err) {
116
- res.status(500).json({ error: err.message });
117
- }
48
+ const result = await api.bulkClaim({ ids: req.body?.ids, durationMinutes: req.body?.durationMinutes }, req.auth);
49
+ res.status(result.status).json(result.data ?? { error: result.error });
118
50
  });
119
51
  router.post('/bulk-assign', async (req, res) => {
120
- try {
121
- const userId = req.auth.userId;
122
- const { ids, targetUserId, durationMinutes } = req.body || {};
123
- if (!validateIds(ids))
124
- return res.status(400).json({ error: 'ids must be a non-empty array' });
125
- if (!targetUserId || typeof targetUserId !== 'string')
126
- return res.status(400).json({ error: 'targetUserId is required' });
127
- if (!await requireBulkPermission(userId, ids, res))
128
- return;
129
- // Non-superadmin: target user must hold each escalation's role
130
- const isSuperAdminUser = await userService.isSuperAdmin(userId);
131
- if (!isSuperAdminUser) {
132
- const roles = await escalationService.getEscalationRoles(ids);
133
- for (const role of roles) {
134
- const targetHasRole = await userService.hasRole(targetUserId, role);
135
- if (!targetHasRole) {
136
- return res.status(400).json({ error: `Target user does not hold the "${role}" role` });
137
- }
138
- }
139
- }
140
- const result = await escalationService.bulkAssignEscalations(ids, targetUserId, durationMinutes ?? 30);
141
- res.json(result);
142
- if (result.assigned > 0)
143
- publishBulkClaimEvents(ids, targetUserId);
144
- }
145
- catch (err) {
146
- res.status(500).json({ error: err.message });
147
- }
52
+ const result = await api.bulkAssign({
53
+ ids: req.body?.ids,
54
+ targetUserId: req.body?.targetUserId,
55
+ durationMinutes: req.body?.durationMinutes,
56
+ }, req.auth);
57
+ res.status(result.status).json(result.data ?? { error: result.error });
148
58
  });
149
59
  router.patch('/bulk-escalate', async (req, res) => {
150
- try {
151
- const { ids, targetRole } = req.body || {};
152
- if (!validateIds(ids))
153
- return res.status(400).json({ error: 'ids must be a non-empty array' });
154
- if (!targetRole || typeof targetRole !== 'string')
155
- return res.status(400).json({ error: 'targetRole is required' });
156
- if (!await requireBulkPermission(req.auth.userId, ids, res))
157
- return;
158
- const updated = await escalationService.bulkEscalateToRole(ids, targetRole);
159
- res.json({ updated });
160
- }
161
- catch (err) {
162
- res.status(500).json({ error: err.message });
163
- }
60
+ const result = await api.bulkEscalate({ ids: req.body?.ids, targetRole: req.body?.targetRole }, req.auth);
61
+ res.status(result.status).json(result.data ?? { error: result.error });
164
62
  });
165
63
  router.post('/bulk-triage', async (req, res) => {
166
- try {
167
- const { ids, hint } = req.body || {};
168
- if (!validateIds(ids))
169
- return res.status(400).json({ error: 'ids must be a non-empty array' });
170
- if (!await requireBulkPermission(req.auth.userId, ids, res))
171
- return;
172
- const resolved = await escalationService.bulkResolveForTriage(ids, hint);
173
- const client = (0, workers_1.createClient)();
174
- const workflowIds = [];
175
- for (const escalation of resolved) {
176
- const triageWorkflowId = await startTriageWorkflow(escalation, hint, req.auth?.userId, client);
177
- workflowIds.push(triageWorkflowId);
178
- }
179
- res.json({ triaged: resolved.length, workflows: workflowIds });
180
- }
181
- catch (err) {
182
- res.status(500).json({ error: err.message });
183
- }
184
- });
185
- }
186
- // ── Triage workflow launcher ────────────────────────────────────────────────
187
- async function startTriageWorkflow(escalation, hint, userId, client) {
188
- let escalationPayload = {};
189
- if (escalation.escalation_payload) {
190
- try {
191
- escalationPayload = JSON.parse(escalation.escalation_payload);
192
- }
193
- catch { }
194
- }
195
- let envelope = {};
196
- if (escalation.envelope) {
197
- try {
198
- envelope = JSON.parse(escalation.envelope);
199
- }
200
- catch { }
201
- }
202
- const triageWorkflowId = `triage-${escalation.id}-${Date.now()}`;
203
- const triageEnvelope = {
204
- data: {
205
- escalationId: escalation.id,
206
- originId: escalation.origin_id ?? undefined,
207
- originalWorkflowType: escalation.workflow_type,
208
- originalTaskQueue: escalation.task_queue,
209
- originalTaskId: escalation.task_id,
210
- escalationPayload,
211
- resolverPayload: {
212
- _lt: { needsTriage: true, ...(hint ? { hint } : {}) },
213
- },
214
- },
215
- metadata: envelope.metadata || {},
216
- lt: { ...(envelope.lt || {}), userId },
217
- };
218
- const routing = escalation.task_id
219
- ? (await taskService.getTask(escalation.task_id))?.metadata
220
- : null;
221
- await taskService.createTask({
222
- workflow_id: triageWorkflowId,
223
- workflow_type: 'mcpTriage',
224
- lt_type: 'mcpTriage',
225
- task_queue: 'long-tail-system',
226
- signal_id: `lt-triage-${triageWorkflowId}`,
227
- parent_workflow_id: routing?.parentWorkflowId || triageWorkflowId,
228
- origin_id: escalation.origin_id || triageWorkflowId,
229
- parent_id: escalation.parent_id ?? undefined,
230
- envelope: JSON.stringify(triageEnvelope),
231
- metadata: routing || undefined,
232
- });
233
- await client.workflow.start({
234
- workflowName: 'mcpTriage',
235
- args: [triageEnvelope],
236
- taskQueue: 'long-tail-system',
237
- workflowId: triageWorkflowId,
238
- expire: defaults_1.JOB_EXPIRE_SECS,
239
- entity: 'mcpTriage',
64
+ const result = await api.bulkTriage({ ids: req.body?.ids, hint: req.body?.hint }, req.auth);
65
+ res.status(result.status).json(result.data ?? { error: result.error });
240
66
  });
241
- return triageWorkflowId;
242
67
  }
@@ -34,40 +34,49 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.registerListRoutes = registerListRoutes;
37
- const escalationService = __importStar(require("../../services/escalation"));
38
- const helpers_1 = require("./helpers");
37
+ const api = __importStar(require("../../api/escalations"));
39
38
  function registerListRoutes(router) {
39
+ /**
40
+ * POST /api/escalations
41
+ * Create a standalone escalation (not tied to a workflow).
42
+ *
43
+ * RBAC: caller must hold the target role or be superadmin.
44
+ *
45
+ * Body: { type, role, subtype?, description?, priority?, envelope?,
46
+ * metadata?, escalation_payload? }
47
+ */
48
+ router.post('/', async (req, res) => {
49
+ const result = await api.createEscalation({
50
+ type: req.body?.type,
51
+ subtype: req.body?.subtype,
52
+ role: req.body?.role,
53
+ description: req.body?.description,
54
+ priority: req.body?.priority,
55
+ envelope: req.body?.envelope,
56
+ metadata: req.body?.metadata,
57
+ escalation_payload: req.body?.escalation_payload,
58
+ }, req.auth);
59
+ res.status(result.status).json(result.data ?? { error: result.error });
60
+ });
40
61
  /**
41
62
  * GET /api/escalations
42
63
  * List escalations with optional filters.
43
64
  * RBAC: superadmin sees all; others see only roles they belong to.
44
65
  */
45
66
  router.get('/', async (req, res) => {
46
- try {
47
- const userId = req.auth.userId;
48
- const visibleRoles = await (0, helpers_1.getVisibleRoles)(userId);
49
- if (visibleRoles && visibleRoles.length === 0) {
50
- res.json({ escalations: [], total: 0 });
51
- return;
52
- }
53
- const result = await escalationService.listEscalations({
54
- status: req.query.status,
55
- role: req.query.role,
56
- type: req.query.type,
57
- subtype: req.query.subtype,
58
- assigned_to: req.query.assigned_to,
59
- priority: req.query.priority ? parseInt(req.query.priority, 10) : undefined,
60
- limit: req.query.limit ? parseInt(req.query.limit, 10) : undefined,
61
- offset: req.query.offset ? parseInt(req.query.offset, 10) : undefined,
62
- sort_by: req.query.sort_by,
63
- order: req.query.order,
64
- visibleRoles,
65
- });
66
- res.json(result);
67
- }
68
- catch (err) {
69
- res.status(500).json({ error: err.message });
70
- }
67
+ const result = await api.listEscalations({
68
+ status: req.query.status,
69
+ role: req.query.role,
70
+ type: req.query.type,
71
+ subtype: req.query.subtype,
72
+ assigned_to: req.query.assigned_to,
73
+ priority: req.query.priority ? parseInt(req.query.priority, 10) : undefined,
74
+ limit: req.query.limit ? parseInt(req.query.limit, 10) : undefined,
75
+ offset: req.query.offset ? parseInt(req.query.offset, 10) : undefined,
76
+ sort_by: req.query.sort_by,
77
+ order: req.query.order,
78
+ }, req.auth);
79
+ res.status(result.status).json(result.data ?? { error: result.error });
71
80
  });
72
81
  /**
73
82
  * GET /api/escalations/available
@@ -75,42 +84,25 @@ function registerListRoutes(router) {
75
84
  * RBAC: superadmin sees all; others see only roles they belong to.
76
85
  */
77
86
  router.get('/available', async (req, res) => {
78
- try {
79
- const userId = req.auth.userId;
80
- const visibleRoles = await (0, helpers_1.getVisibleRoles)(userId);
81
- if (visibleRoles && visibleRoles.length === 0) {
82
- res.json({ escalations: [], total: 0 });
83
- return;
84
- }
85
- const result = await escalationService.listAvailableEscalations({
86
- role: req.query.role,
87
- type: req.query.type,
88
- subtype: req.query.subtype,
89
- priority: req.query.priority ? parseInt(req.query.priority, 10) : undefined,
90
- limit: req.query.limit ? parseInt(req.query.limit, 10) : undefined,
91
- offset: req.query.offset ? parseInt(req.query.offset, 10) : undefined,
92
- sort_by: req.query.sort_by,
93
- order: req.query.order,
94
- visibleRoles,
95
- });
96
- res.json(result);
97
- }
98
- catch (err) {
99
- res.status(500).json({ error: err.message });
100
- }
87
+ const result = await api.listAvailableEscalations({
88
+ role: req.query.role,
89
+ type: req.query.type,
90
+ subtype: req.query.subtype,
91
+ priority: req.query.priority ? parseInt(req.query.priority, 10) : undefined,
92
+ limit: req.query.limit ? parseInt(req.query.limit, 10) : undefined,
93
+ offset: req.query.offset ? parseInt(req.query.offset, 10) : undefined,
94
+ sort_by: req.query.sort_by,
95
+ order: req.query.order,
96
+ }, req.auth);
97
+ res.status(result.status).json(result.data ?? { error: result.error });
101
98
  });
102
99
  /**
103
100
  * GET /api/escalations/types
104
101
  * Returns distinct escalation type values.
105
102
  */
106
103
  router.get('/types', async (_req, res) => {
107
- try {
108
- const types = await escalationService.listDistinctTypes();
109
- res.json({ types });
110
- }
111
- catch (err) {
112
- res.status(500).json({ error: err.message });
113
- }
104
+ const result = await api.listDistinctTypes();
105
+ res.status(result.status).json(result.data ?? { error: result.error });
114
106
  });
115
107
  /**
116
108
  * GET /api/escalations/stats
@@ -118,23 +110,7 @@ function registerListRoutes(router) {
118
110
  * RBAC: superadmin sees all; others scoped to their roles.
119
111
  */
120
112
  router.get('/stats', async (req, res) => {
121
- try {
122
- const userId = req.auth.userId;
123
- const visibleRoles = await (0, helpers_1.getVisibleRoles)(userId);
124
- if (visibleRoles && visibleRoles.length === 0) {
125
- res.json({
126
- pending: 0, claimed: 0,
127
- created: 0, resolved: 0,
128
- by_role: [], by_type: [],
129
- });
130
- return;
131
- }
132
- const period = req.query.period || undefined;
133
- const stats = await escalationService.getEscalationStats(visibleRoles, period);
134
- res.json(stats);
135
- }
136
- catch (err) {
137
- res.status(500).json({ error: err.message });
138
- }
113
+ const result = await api.getEscalationStats({ period: req.query.period || undefined }, req.auth);
114
+ res.status(result.status).json(result.data ?? { error: result.error });
139
115
  });
140
116
  }
@@ -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
  }