@hotmeshio/long-tail 0.23.2 → 0.24.0

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 (483) hide show
  1. package/build/adapters/express.d.ts +9 -1
  2. package/build/adapters/express.js +32 -41
  3. package/build/api/auth-sso.d.ts +1 -1
  4. package/build/api/bot-accounts.d.ts +2 -0
  5. package/build/api/bot-accounts.js +4 -0
  6. package/build/api/capabilities.d.ts +7 -2
  7. package/build/api/capabilities.js +13 -2
  8. package/build/api/escalations/analytics.js +5 -0
  9. package/build/api/escalations/bulk.d.ts +2 -0
  10. package/build/api/escalations/bulk.js +9 -4
  11. package/build/api/escalations/helpers.d.ts +5 -0
  12. package/build/api/escalations/helpers.js +7 -0
  13. package/build/api/escalations/metadata.js +3 -0
  14. package/build/api/escalations/single.d.ts +3 -2
  15. package/build/api/escalations/single.js +8 -3
  16. package/build/api/mcp/tools.d.ts +12 -0
  17. package/build/api/mcp/tools.js +113 -9
  18. package/build/api/scan-codes/choice.js +31 -7
  19. package/build/api/settings.js +9 -0
  20. package/build/api/tasks.d.ts +3 -3
  21. package/build/api/tasks.js +30 -7
  22. package/build/api/workflows/input-lookups.js +1 -1
  23. package/build/api/workflows/invocable.js +2 -2
  24. package/build/api/workflows/invocation.js +1 -1
  25. package/build/api/yaml-workflows/deploy.d.ts +10 -2
  26. package/build/api/yaml-workflows/deploy.js +42 -2
  27. package/build/lib/db/schemas/038_oauth_server.sql +46 -0
  28. package/build/lib/events/browser-view.d.ts +15 -0
  29. package/build/lib/events/browser-view.js +101 -0
  30. package/build/lib/events/nats-ws-filter.d.ts +29 -0
  31. package/build/lib/events/nats-ws-filter.js +94 -0
  32. package/build/lib/events/nats-ws-proxy.d.ts +2 -0
  33. package/build/lib/events/nats-ws-proxy.js +39 -5
  34. package/build/lib/events/nats-ws-server-filter.d.ts +16 -0
  35. package/build/lib/events/nats-ws-server-filter.js +56 -0
  36. package/build/lib/events/nats-ws-ticket.d.ts +10 -0
  37. package/build/lib/events/nats-ws-ticket.js +42 -0
  38. package/build/lib/events/socketio.d.ts +10 -1
  39. package/build/lib/events/socketio.js +10 -3
  40. package/build/lib/http/index.d.ts +27 -0
  41. package/build/lib/http/index.js +55 -0
  42. package/build/modules/auth.d.ts +15 -24
  43. package/build/modules/auth.js +43 -126
  44. package/build/modules/capabilities.d.ts +62 -0
  45. package/build/modules/capabilities.js +188 -0
  46. package/build/modules/config.d.ts +14 -0
  47. package/build/modules/config.js +20 -0
  48. package/build/modules/defaults.d.ts +10 -0
  49. package/build/modules/defaults.js +12 -1
  50. package/build/modules/mcp-auth.d.ts +11 -0
  51. package/build/modules/mcp-auth.js +56 -0
  52. package/build/modules/oauth-server.d.ts +18 -0
  53. package/build/modules/oauth-server.js +40 -0
  54. package/build/routes/agents.js +46 -14
  55. package/build/routes/announcements.js +2 -2
  56. package/build/routes/auth-sso.js +2 -2
  57. package/build/routes/auth.js +2 -2
  58. package/build/routes/bot-accounts.js +26 -3
  59. package/build/routes/capabilities.js +4 -4
  60. package/build/routes/controlplane.js +2 -2
  61. package/build/routes/dba.js +2 -2
  62. package/build/routes/delegation.js +2 -2
  63. package/build/routes/diagnostics.js +2 -2
  64. package/build/routes/docs.js +2 -2
  65. package/build/routes/domain.js +2 -2
  66. package/build/routes/escalations/accumulate.d.ts +1 -1
  67. package/build/routes/escalations/acting.d.ts +1 -1
  68. package/build/routes/escalations/analytics.d.ts +1 -1
  69. package/build/routes/escalations/bulk.d.ts +1 -1
  70. package/build/routes/escalations/facets.d.ts +1 -1
  71. package/build/routes/escalations/index.js +2 -2
  72. package/build/routes/escalations/list.d.ts +1 -1
  73. package/build/routes/escalations/metadata.d.ts +1 -1
  74. package/build/routes/escalations/related.d.ts +1 -1
  75. package/build/routes/escalations/resolve.d.ts +1 -1
  76. package/build/routes/escalations/single.d.ts +1 -1
  77. package/build/routes/escalations/single.js +1 -1
  78. package/build/routes/exports.js +14 -13
  79. package/build/routes/file-browser.js +9 -8
  80. package/build/routes/files.js +2 -2
  81. package/build/routes/index.js +4 -2
  82. package/build/routes/insight.js +5 -4
  83. package/build/routes/knowledge.js +2 -2
  84. package/build/routes/maintenance.js +2 -2
  85. package/build/routes/mcp-endpoint.d.ts +3 -1
  86. package/build/routes/mcp-endpoint.js +18 -8
  87. package/build/routes/mcp.js +35 -15
  88. package/build/routes/me.js +2 -2
  89. package/build/routes/namespaces.js +4 -3
  90. package/build/routes/nats-credentials.js +27 -3
  91. package/build/routes/oauth-server/authorize.d.ts +2 -0
  92. package/build/routes/oauth-server/authorize.js +108 -0
  93. package/build/routes/oauth-server/grants.d.ts +2 -0
  94. package/build/routes/oauth-server/grants.js +35 -0
  95. package/build/routes/oauth-server/index.d.ts +8 -0
  96. package/build/routes/oauth-server/index.js +52 -0
  97. package/build/routes/oauth-server/registration.d.ts +2 -0
  98. package/build/routes/oauth-server/registration.js +38 -0
  99. package/build/routes/oauth-server/token.d.ts +2 -0
  100. package/build/routes/oauth-server/token.js +100 -0
  101. package/build/routes/oauth-well-known.d.ts +8 -0
  102. package/build/routes/oauth-well-known.js +31 -0
  103. package/build/routes/oauth.js +2 -2
  104. package/build/routes/overview.js +2 -2
  105. package/build/routes/personas.js +2 -2
  106. package/build/routes/pipelines.js +6 -5
  107. package/build/routes/roles.js +2 -2
  108. package/build/routes/scan-codes.js +2 -2
  109. package/build/routes/settings.js +2 -2
  110. package/build/routes/tasks.js +5 -5
  111. package/build/routes/topics.js +21 -9
  112. package/build/routes/users.js +25 -22
  113. package/build/routes/workflow-sets.js +13 -12
  114. package/build/routes/workflows/config.js +15 -2
  115. package/build/routes/workflows/discovery.js +2 -2
  116. package/build/routes/workflows/index.js +2 -2
  117. package/build/routes/workflows/invocation.js +11 -10
  118. package/build/routes/yaml-workflows/cron.js +19 -6
  119. package/build/routes/yaml-workflows/crud.js +13 -12
  120. package/build/routes/yaml-workflows/deployment.js +11 -10
  121. package/build/routes/yaml-workflows/index.js +2 -2
  122. package/build/routes/yaml-workflows/versions.js +2 -2
  123. package/build/services/agent/authority.d.ts +14 -0
  124. package/build/services/agent/authority.js +53 -0
  125. package/build/services/auth/bot-api-key.d.ts +2 -0
  126. package/build/services/auth/bot-api-key.js +10 -0
  127. package/build/services/auth/oauth-server/access-token.d.ts +36 -0
  128. package/build/services/auth/oauth-server/access-token.js +80 -0
  129. package/build/services/auth/oauth-server/authorization.d.ts +47 -0
  130. package/build/services/auth/oauth-server/authorization.js +54 -0
  131. package/build/services/auth/oauth-server/constants.d.ts +11 -0
  132. package/build/services/auth/oauth-server/constants.js +16 -0
  133. package/build/services/auth/oauth-server/index.d.ts +3 -0
  134. package/build/services/auth/oauth-server/index.js +26 -0
  135. package/build/services/auth/oauth-server/metadata.d.ts +21 -0
  136. package/build/services/auth/oauth-server/metadata.js +53 -0
  137. package/build/services/auth/oauth-server/registration.d.ts +42 -0
  138. package/build/services/auth/oauth-server/registration.js +134 -0
  139. package/build/services/auth/oauth-server/sql.d.ts +34 -0
  140. package/build/services/auth/oauth-server/sql.js +123 -0
  141. package/build/services/auth/oauth-server/store.d.ts +74 -0
  142. package/build/services/auth/oauth-server/store.js +151 -0
  143. package/build/services/auth/sql.d.ts +1 -0
  144. package/build/services/auth/sql.js +3 -1
  145. package/build/services/escalation/queries.js +7 -2
  146. package/build/services/export/index.d.ts +10 -0
  147. package/build/services/export/index.js +27 -0
  148. package/build/services/invocation-access.d.ts +25 -4
  149. package/build/services/invocation-access.js +39 -7
  150. package/build/services/mcp/client/connection-dispatch.d.ts +6 -1
  151. package/build/services/mcp/client/connection-dispatch.js +3 -2
  152. package/build/services/mcp/client/connection-lifecycle.d.ts +10 -2
  153. package/build/services/mcp/client/connection-lifecycle.js +45 -7
  154. package/build/services/mcp/client/connection-test.js +2 -6
  155. package/build/services/mcp/client/connection.d.ts +1 -1
  156. package/build/services/mcp/client/connection.js +3 -1
  157. package/build/services/mcp/client/index.d.ts +2 -2
  158. package/build/services/mcp/client/index.js +4 -1
  159. package/build/services/mcp/client/network-transport.d.ts +12 -0
  160. package/build/services/mcp/client/network-transport.js +20 -0
  161. package/build/services/mcp/client/tools.d.ts +13 -0
  162. package/build/services/mcp/client/tools.js +18 -0
  163. package/build/services/mcp/db-server/index.js +2 -1
  164. package/build/services/mcp/external-server.d.ts +9 -4
  165. package/build/services/mcp/external-server.js +34 -11
  166. package/build/services/mcp/playwright-server/index.js +2 -1
  167. package/build/services/mcp/registered-tools.d.ts +3 -0
  168. package/build/services/mcp/registered-tools.js +7 -0
  169. package/build/services/mcp/server-lifecycle.js +2 -1
  170. package/build/services/workflow-invocation.d.ts +16 -3
  171. package/build/services/workflow-invocation.js +42 -10
  172. package/build/services/yaml-workflow/deployer.d.ts +10 -2
  173. package/build/services/yaml-workflow/deployer.js +17 -5
  174. package/build/services/yaml-workflow/invoke.js +27 -26
  175. package/build/start/config.js +7 -0
  176. package/build/start/index.js +4 -22
  177. package/build/start/server.d.ts +6 -4
  178. package/build/start/server.js +11 -35
  179. package/build/start/socket-auth.js +2 -1
  180. package/build/start/workers.js +1 -1
  181. package/build/system/mcp-servers/admin/agent-subscriptions.js +24 -1
  182. package/build/system/mcp-servers/admin/agents.js +25 -2
  183. package/build/system/mcp-servers/admin/announcements.js +3 -2
  184. package/build/system/mcp-servers/admin/bot-accounts.js +37 -5
  185. package/build/system/mcp-servers/admin/escalations.d.ts +3 -5
  186. package/build/system/mcp-servers/admin/escalations.js +74 -70
  187. package/build/system/mcp-servers/admin/exports.js +7 -1
  188. package/build/system/mcp-servers/admin/index.js +24 -25
  189. package/build/system/mcp-servers/admin/overview.d.ts +2 -2
  190. package/build/system/mcp-servers/admin/run-read.d.ts +2 -0
  191. package/build/system/mcp-servers/admin/run-read.js +5 -0
  192. package/build/system/mcp-servers/admin/scan-codes.d.ts +2 -2
  193. package/build/system/mcp-servers/admin/scan-codes.js +5 -11
  194. package/build/system/mcp-servers/admin/schemas.d.ts +20 -20
  195. package/build/system/mcp-servers/admin/tasks.js +7 -2
  196. package/build/system/mcp-servers/admin/users.js +31 -4
  197. package/build/system/mcp-servers/admin/workflow-config.js +12 -1
  198. package/build/system/mcp-servers/admin/workflows.js +27 -5
  199. package/build/system/mcp-servers/admin/yaml-workflows.js +7 -1
  200. package/build/system/mcp-servers/caller-auth.d.ts +18 -0
  201. package/build/system/mcp-servers/caller-auth.js +29 -0
  202. package/build/system/mcp-servers/claude-code.js +2 -1
  203. package/build/system/mcp-servers/db-query/index.js +2 -1
  204. package/build/system/mcp-servers/file-storage.js +2 -1
  205. package/build/system/mcp-servers/http-fetch.js +2 -1
  206. package/build/system/mcp-servers/human-queue.js +7 -3
  207. package/build/system/mcp-servers/oauth.js +31 -4
  208. package/build/system/mcp-servers/schema-exchange.js +2 -1
  209. package/build/system/mcp-servers/vision.d.ts +1 -0
  210. package/build/system/mcp-servers/vision.js +17 -7
  211. package/build/system/seed/tool-manifests-admin.d.ts +2 -17985
  212. package/build/system/seed/tool-manifests-admin.js +121 -121
  213. package/build/system/seed/tool-manifests-data.d.ts +8 -374
  214. package/build/system/seed/tool-manifests-data.js +22 -4
  215. package/build/system/seed/tool-manifests-escalation.d.ts +2 -352
  216. package/build/system/seed/tool-manifests-escalation.js +11 -1
  217. package/build/system/seed/tool-manifests-events.d.ts +2 -116
  218. package/build/system/seed/tool-manifests-events.js +6 -2
  219. package/build/system/seed/tool-manifests-knowledge.d.ts +2 -221
  220. package/build/system/seed/tool-manifests-knowledge.js +41 -1
  221. package/build/system/seed/tool-manifests-workflows.d.ts +2 -71
  222. package/build/system/seed/tool-manifests-workflows.js +3 -1
  223. package/build/system/workflows/shared/principal-tools.d.ts +20 -0
  224. package/build/system/workflows/shared/principal-tools.js +64 -0
  225. package/build/system/workflows/shared/tool-executor.js +21 -11
  226. package/build/system/workflows/shared/tool-loader.js +8 -1
  227. package/build/tsconfig.tsbuildinfo +1 -1
  228. package/build/types/auth.d.ts +1 -1
  229. package/build/types/capability.d.ts +14 -0
  230. package/build/types/capability.js +2 -0
  231. package/build/types/events.d.ts +1 -1
  232. package/build/types/index.d.ts +3 -1
  233. package/build/types/mcp.d.ts +3 -1
  234. package/build/types/oauth-server.d.ts +52 -0
  235. package/build/types/oauth-server.js +2 -0
  236. package/build/types/startup.d.ts +15 -7
  237. package/build/vitest.config.js +2 -1
  238. package/build/vitest.fast.config.d.ts +2 -0
  239. package/build/vitest.fast.config.js +20 -0
  240. package/build/vitest.llm.config.d.ts +2 -0
  241. package/build/vitest.llm.config.js +16 -0
  242. package/dashboard/dist/assets/{AdminDashboard-BPWsgMfZ.js → AdminDashboard-B3mkMIOT.js} +2 -2
  243. package/dashboard/dist/assets/{AdminDashboard-BPWsgMfZ.js.map → AdminDashboard-B3mkMIOT.js.map} +1 -1
  244. package/dashboard/dist/assets/{AgentConfigPage-De9imyo5.js → AgentConfigPage-CQj2B678.js} +2 -2
  245. package/dashboard/dist/assets/{AgentConfigPage-De9imyo5.js.map → AgentConfigPage-CQj2B678.js.map} +1 -1
  246. package/dashboard/dist/assets/{AgentDetailPage-B6o96Y5G.js → AgentDetailPage-CzrD8JJI.js} +3 -3
  247. package/dashboard/dist/assets/{AgentDetailPage-B6o96Y5G.js.map → AgentDetailPage-CzrD8JJI.js.map} +1 -1
  248. package/dashboard/dist/assets/{AgentsPage-DMEmiK_W.js → AgentsPage-jg2OFwyW.js} +2 -2
  249. package/dashboard/dist/assets/{AgentsPage-DMEmiK_W.js.map → AgentsPage-jg2OFwyW.js.map} +1 -1
  250. package/dashboard/dist/assets/{AvailableEscalationsPage-DeYMngwE.js → AvailableEscalationsPage-IS28XBRe.js} +2 -2
  251. package/dashboard/dist/assets/{AvailableEscalationsPage-DeYMngwE.js.map → AvailableEscalationsPage-IS28XBRe.js.map} +1 -1
  252. package/dashboard/dist/assets/{BotPicker-DDmpgGHZ.js → BotPicker-DvEJFpwS.js} +2 -2
  253. package/dashboard/dist/assets/{BotPicker-DDmpgGHZ.js.map → BotPicker-DvEJFpwS.js.map} +1 -1
  254. package/dashboard/dist/assets/{BulkAssignModal-BqlklomG.js → BulkAssignModal-BoQCi-YC.js} +2 -2
  255. package/dashboard/dist/assets/{BulkAssignModal-BqlklomG.js.map → BulkAssignModal-BoQCi-YC.js.map} +1 -1
  256. package/dashboard/dist/assets/{CapabilitiesPage-DOtjDTbK.js → CapabilitiesPage-kwlrcb_t.js} +2 -2
  257. package/dashboard/dist/assets/{CapabilitiesPage-DOtjDTbK.js.map → CapabilitiesPage-kwlrcb_t.js.map} +1 -1
  258. package/dashboard/dist/assets/{CollapsibleSection-CLr8LP0V.js → CollapsibleSection-UMIV4KIj.js} +2 -2
  259. package/dashboard/dist/assets/{CollapsibleSection-CLr8LP0V.js.map → CollapsibleSection-UMIV4KIj.js.map} +1 -1
  260. package/dashboard/dist/assets/ConfirmDeleteModal-C5puwMg7.js +2 -0
  261. package/dashboard/dist/assets/ConfirmDeleteModal-C5puwMg7.js.map +1 -0
  262. package/dashboard/dist/assets/ConnectedAppsPage-drZa65kP.js +2 -0
  263. package/dashboard/dist/assets/ConnectedAppsPage-drZa65kP.js.map +1 -0
  264. package/dashboard/dist/assets/{CountdownTimer-DxX72PwV.js → CountdownTimer-LG03dVgR.js} +2 -2
  265. package/dashboard/dist/assets/{CountdownTimer-DxX72PwV.js.map → CountdownTimer-LG03dVgR.js.map} +1 -1
  266. package/dashboard/dist/assets/{CredentialsPage-CObc9Rs5.js → CredentialsPage-CaFQ6vLb.js} +2 -2
  267. package/dashboard/dist/assets/{CredentialsPage-CObc9Rs5.js.map → CredentialsPage-CaFQ6vLb.js.map} +1 -1
  268. package/dashboard/dist/assets/{CronLabel-Bb8GoNY5.js → CronLabel-Co5j7tzW.js} +2 -2
  269. package/dashboard/dist/assets/{CronLabel-Bb8GoNY5.js.map → CronLabel-Co5j7tzW.js.map} +1 -1
  270. package/dashboard/dist/assets/{ElapsedCell-CmGhVlYl.js → ElapsedCell-WJyE9G0T.js} +2 -2
  271. package/dashboard/dist/assets/{ElapsedCell-CmGhVlYl.js.map → ElapsedCell-WJyE9G0T.js.map} +1 -1
  272. package/dashboard/dist/assets/{EntityTimelinePanel-B4Jwy1w3.js → EntityTimelinePanel-CDFFfX9d.js} +2 -2
  273. package/dashboard/dist/assets/{EntityTimelinePanel-B4Jwy1w3.js.map → EntityTimelinePanel-CDFFfX9d.js.map} +1 -1
  274. package/dashboard/dist/assets/{EscalationListSchemaPage-CZZbZ4Aa.js → EscalationListSchemaPage-CMrUlaKI.js} +3 -3
  275. package/dashboard/dist/assets/{EscalationListSchemaPage-CZZbZ4Aa.js.map → EscalationListSchemaPage-CMrUlaKI.js.map} +1 -1
  276. package/dashboard/dist/assets/{EscalationSchemaPage-D0ko59_S.js → EscalationSchemaPage-Dx2Lyfrz.js} +2 -2
  277. package/dashboard/dist/assets/{EscalationSchemaPage-D0ko59_S.js.map → EscalationSchemaPage-Dx2Lyfrz.js.map} +1 -1
  278. package/dashboard/dist/assets/{EscalationTimeline-BcnJEKFD.js → EscalationTimeline-d3nvshOk.js} +2 -2
  279. package/dashboard/dist/assets/{EscalationTimeline-BcnJEKFD.js.map → EscalationTimeline-d3nvshOk.js.map} +1 -1
  280. package/dashboard/dist/assets/{EscalationTitleSelect-P0q5sck4.js → EscalationTitleSelect-DWQieOM9.js} +2 -2
  281. package/dashboard/dist/assets/{EscalationTitleSelect-P0q5sck4.js.map → EscalationTitleSelect-DWQieOM9.js.map} +1 -1
  282. package/dashboard/dist/assets/{EscalationsOverview-BLPmh4AF.js → EscalationsOverview-BX8Cpi0X.js} +2 -2
  283. package/dashboard/dist/assets/{EscalationsOverview-BLPmh4AF.js.map → EscalationsOverview-BX8Cpi0X.js.map} +1 -1
  284. package/dashboard/dist/assets/{EventTable-gBzi5tIS.js → EventTable-D1-ITVXS.js} +2 -2
  285. package/dashboard/dist/assets/{EventTable-gBzi5tIS.js.map → EventTable-D1-ITVXS.js.map} +1 -1
  286. package/dashboard/dist/assets/{FilterBar-BulSsWb2.js → FilterBar-ABC9ctin.js} +2 -2
  287. package/dashboard/dist/assets/{FilterBar-BulSsWb2.js.map → FilterBar-ABC9ctin.js.map} +1 -1
  288. package/dashboard/dist/assets/{FormattedValue-BMHRrvrL.js → FormattedValue-k27T4bG7.js} +2 -2
  289. package/dashboard/dist/assets/{FormattedValue-BMHRrvrL.js.map → FormattedValue-k27T4bG7.js.map} +1 -1
  290. package/dashboard/dist/assets/{GraphInvokePage--997yNRr.js → GraphInvokePage-DKUErxWc.js} +2 -2
  291. package/dashboard/dist/assets/{GraphInvokePage--997yNRr.js.map → GraphInvokePage-DKUErxWc.js.map} +1 -1
  292. package/dashboard/dist/assets/{HomePage-CwXFz--v.js → HomePage-C6u9dIpR.js} +2 -2
  293. package/dashboard/dist/assets/{HomePage-CwXFz--v.js.map → HomePage-C6u9dIpR.js.map} +1 -1
  294. package/dashboard/dist/assets/{ListToolbar-Df4qZryJ.js → ListToolbar-gA5rFzkz.js} +2 -2
  295. package/dashboard/dist/assets/{ListToolbar-Df4qZryJ.js.map → ListToolbar-gA5rFzkz.js.map} +1 -1
  296. package/dashboard/dist/assets/{McpOverview-DrogIAKJ.js → McpOverview-BOPo3J_i.js} +2 -2
  297. package/dashboard/dist/assets/{McpOverview-DrogIAKJ.js.map → McpOverview-BOPo3J_i.js.map} +1 -1
  298. package/dashboard/dist/assets/{McpQueryDetailPage-CJmvCAE6.js → McpQueryDetailPage-BRVVi0Zh.js} +2 -2
  299. package/dashboard/dist/assets/{McpQueryDetailPage-CJmvCAE6.js.map → McpQueryDetailPage-BRVVi0Zh.js.map} +1 -1
  300. package/dashboard/dist/assets/{McpQueryPage-lygo4Yq0.js → McpQueryPage-Dmbb6SAc.js} +2 -2
  301. package/dashboard/dist/assets/{McpQueryPage-lygo4Yq0.js.map → McpQueryPage-Dmbb6SAc.js.map} +1 -1
  302. package/dashboard/dist/assets/{McpRunDetailPage-hvns2sCm.js → McpRunDetailPage-bMXNO-6V.js} +2 -2
  303. package/dashboard/dist/assets/{McpRunDetailPage-hvns2sCm.js.map → McpRunDetailPage-bMXNO-6V.js.map} +1 -1
  304. package/dashboard/dist/assets/{McpRunsPage-C2_7spTX.js → McpRunsPage-Bi9AMWja.js} +2 -2
  305. package/dashboard/dist/assets/{McpRunsPage-C2_7spTX.js.map → McpRunsPage-Bi9AMWja.js.map} +1 -1
  306. package/dashboard/dist/assets/{OperationsPage-BlK8WlsY.js → OperationsPage-CvR74ZUJ.js} +3 -3
  307. package/dashboard/dist/assets/{OperationsPage-BlK8WlsY.js.map → OperationsPage-CvR74ZUJ.js.map} +1 -1
  308. package/dashboard/dist/assets/{OperatorDashboard-BeWBiMGX.js → OperatorDashboard-DctmZw10.js} +2 -2
  309. package/dashboard/dist/assets/{OperatorDashboard-BeWBiMGX.js.map → OperatorDashboard-DctmZw10.js.map} +1 -1
  310. package/dashboard/dist/assets/{PersonaDetailPage-CNHpsX_i.js → PersonaDetailPage-Ubqm2rQH.js} +2 -2
  311. package/dashboard/dist/assets/{PersonaDetailPage-CNHpsX_i.js.map → PersonaDetailPage-Ubqm2rQH.js.map} +1 -1
  312. package/dashboard/dist/assets/{PersonasPage-ChASEZRg.js → PersonasPage-BpFL2rpo.js} +2 -2
  313. package/dashboard/dist/assets/{PersonasPage-ChASEZRg.js.map → PersonasPage-BpFL2rpo.js.map} +1 -1
  314. package/dashboard/dist/assets/{PortalPage-D5Lk-PKF.js → PortalPage-Dfc_Q02R.js} +2 -2
  315. package/dashboard/dist/assets/{PortalPage-D5Lk-PKF.js.map → PortalPage-Dfc_Q02R.js.map} +1 -1
  316. package/dashboard/dist/assets/ProcessDetailPage-liJspvQh.js +2 -0
  317. package/dashboard/dist/assets/{ProcessDetailPage-DNgCIwRl.js.map → ProcessDetailPage-liJspvQh.js.map} +1 -1
  318. package/dashboard/dist/assets/{ProcessesListPage-pRjWuWlH.js → ProcessesListPage-C3OM5ZUy.js} +2 -2
  319. package/dashboard/dist/assets/{ProcessesListPage-pRjWuWlH.js.map → ProcessesListPage-C3OM5ZUy.js.map} +1 -1
  320. package/dashboard/dist/assets/ResolverForm-B1_x8Blv.js +8 -0
  321. package/dashboard/dist/assets/ResolverForm-B1_x8Blv.js.map +1 -0
  322. package/dashboard/dist/assets/{RoleDetailPage-Bh_UcfYY.js → RoleDetailPage-CrlYCh-R.js} +2 -2
  323. package/dashboard/dist/assets/{RoleDetailPage-Bh_UcfYY.js.map → RoleDetailPage-CrlYCh-R.js.map} +1 -1
  324. package/dashboard/dist/assets/{RolesPage-CK17N7zz.js → RolesPage-BaazL_pt.js} +2 -2
  325. package/dashboard/dist/assets/{RolesPage-CK17N7zz.js.map → RolesPage-BaazL_pt.js.map} +1 -1
  326. package/dashboard/dist/assets/{RunAsSelector-BEKUP0p2.js → RunAsSelector-DxuV0fa1.js} +2 -2
  327. package/dashboard/dist/assets/{RunAsSelector-BEKUP0p2.js.map → RunAsSelector-DxuV0fa1.js.map} +1 -1
  328. package/dashboard/dist/assets/{ScanCodesPage-Bd0Pflqx.js → ScanCodesPage-C0mvmYTq.js} +2 -2
  329. package/dashboard/dist/assets/{ScanCodesPage-Bd0Pflqx.js.map → ScanCodesPage-C0mvmYTq.js.map} +1 -1
  330. package/dashboard/dist/assets/{ScanSchemeDetailPage-CnuhozmJ.js → ScanSchemeDetailPage-CiJgt5dZ.js} +2 -2
  331. package/dashboard/dist/assets/{ScanSchemeDetailPage-CnuhozmJ.js.map → ScanSchemeDetailPage-CiJgt5dZ.js.map} +1 -1
  332. package/dashboard/dist/assets/{ScanStationPage-CoLc-q3h.js → ScanStationPage-DzGaXc40.js} +2 -2
  333. package/dashboard/dist/assets/{ScanStationPage-CoLc-q3h.js.map → ScanStationPage-DzGaXc40.js.map} +1 -1
  334. package/dashboard/dist/assets/{StickyPagination-COrfvkBi.js → StickyPagination-CqbjVY6T.js} +2 -2
  335. package/dashboard/dist/assets/{StickyPagination-COrfvkBi.js.map → StickyPagination-CqbjVY6T.js.map} +1 -1
  336. package/dashboard/dist/assets/{StreamMessageDetail-Cif2egLy.js → StreamMessageDetail-wX3i0aqs.js} +2 -2
  337. package/dashboard/dist/assets/{StreamMessageDetail-Cif2egLy.js.map → StreamMessageDetail-wX3i0aqs.js.map} +1 -1
  338. package/dashboard/dist/assets/{SwimlaneTimeline-BnZYTrAh.js → SwimlaneTimeline-C50PsFoV.js} +2 -2
  339. package/dashboard/dist/assets/{SwimlaneTimeline-BnZYTrAh.js.map → SwimlaneTimeline-C50PsFoV.js.map} +1 -1
  340. package/dashboard/dist/assets/{TaskDetailPage-DEz_dqyR.js → TaskDetailPage-bbNSv4Ae.js} +2 -2
  341. package/dashboard/dist/assets/{TaskDetailPage-DEz_dqyR.js.map → TaskDetailPage-bbNSv4Ae.js.map} +1 -1
  342. package/dashboard/dist/assets/{TasksListPage-oEfEGj0_.js → TasksListPage-CDWnm_d9.js} +2 -2
  343. package/dashboard/dist/assets/{TasksListPage-oEfEGj0_.js.map → TasksListPage-CDWnm_d9.js.map} +1 -1
  344. package/dashboard/dist/assets/{TimeAgo-Dz5TgZZZ.js → TimeAgo-BLjqlfoX.js} +2 -2
  345. package/dashboard/dist/assets/{TimeAgo-Dz5TgZZZ.js.map → TimeAgo-BLjqlfoX.js.map} +1 -1
  346. package/dashboard/dist/assets/{TimestampCell-BUTgE244.js → TimestampCell-CnW0ENb5.js} +2 -2
  347. package/dashboard/dist/assets/{TimestampCell-BUTgE244.js.map → TimestampCell-CnW0ENb5.js.map} +1 -1
  348. package/dashboard/dist/assets/{ToolTestPanel-BS4g6vt-.js → ToolTestPanel-DkMgCB-k.js} +2 -2
  349. package/dashboard/dist/assets/{ToolTestPanel-BS4g6vt-.js.map → ToolTestPanel-DkMgCB-k.js.map} +1 -1
  350. package/dashboard/dist/assets/{TopicDetailPage-C_I6JIVD.js → TopicDetailPage-g3pljKKX.js} +2 -2
  351. package/dashboard/dist/assets/{TopicDetailPage-C_I6JIVD.js.map → TopicDetailPage-g3pljKKX.js.map} +1 -1
  352. package/dashboard/dist/assets/{TopicsPage-Cr6-wfhJ.js → TopicsPage-CVcCYdy-.js} +2 -2
  353. package/dashboard/dist/assets/{TopicsPage-Cr6-wfhJ.js.map → TopicsPage-CVcCYdy-.js.map} +1 -1
  354. package/dashboard/dist/assets/{UserName-ZFpWMaFF.js → UserName-D6zGIK2i.js} +2 -2
  355. package/dashboard/dist/assets/{UserName-ZFpWMaFF.js.map → UserName-D6zGIK2i.js.map} +1 -1
  356. package/dashboard/dist/assets/{WorkflowExecutionPage-ByPixDZW.js → WorkflowExecutionPage-B8g81FCJ.js} +2 -2
  357. package/dashboard/dist/assets/{WorkflowExecutionPage-ByPixDZW.js.map → WorkflowExecutionPage-B8g81FCJ.js.map} +1 -1
  358. package/dashboard/dist/assets/{WorkflowsDashboard-CWsJdMdR.js → WorkflowsDashboard-nxT3bv6W.js} +2 -2
  359. package/dashboard/dist/assets/{WorkflowsDashboard-CWsJdMdR.js.map → WorkflowsDashboard-nxT3bv6W.js.map} +1 -1
  360. package/dashboard/dist/assets/{WorkflowsOverview-Dk9gyqZN.js → WorkflowsOverview-grI-KAI2.js} +2 -2
  361. package/dashboard/dist/assets/{WorkflowsOverview-Dk9gyqZN.js.map → WorkflowsOverview-grI-KAI2.js.map} +1 -1
  362. package/dashboard/dist/assets/{YamlWorkflowDetailPage-CHwcrsaT.js → YamlWorkflowDetailPage-BoZ-hfBE.js} +2 -2
  363. package/dashboard/dist/assets/{YamlWorkflowDetailPage-CHwcrsaT.js.map → YamlWorkflowDetailPage-BoZ-hfBE.js.map} +1 -1
  364. package/dashboard/dist/assets/{YamlWorkflowsPage-B5jRX2Ph.js → YamlWorkflowsPage-Bf04rwRv.js} +2 -2
  365. package/dashboard/dist/assets/{YamlWorkflowsPage-B5jRX2Ph.js.map → YamlWorkflowsPage-Bf04rwRv.js.map} +1 -1
  366. package/dashboard/dist/assets/{agents-Dd7E-27d.js → agents-Dphpdi8l.js} +2 -2
  367. package/dashboard/dist/assets/{agents-Dd7E-27d.js.map → agents-Dphpdi8l.js.map} +1 -1
  368. package/dashboard/dist/assets/{bots-CpaYjZTk.js → bots-DIFE298x.js} +2 -2
  369. package/dashboard/dist/assets/{bots-CpaYjZTk.js.map → bots-DIFE298x.js.map} +1 -1
  370. package/dashboard/dist/assets/{capabilities-CNjg_qv1.js → capabilities-D7Y7LClY.js} +2 -2
  371. package/dashboard/dist/assets/{capabilities-CNjg_qv1.js.map → capabilities-D7Y7LClY.js.map} +1 -1
  372. package/dashboard/dist/assets/{controlplane-DgmvnAtU.js → controlplane-D1TGcYsS.js} +2 -2
  373. package/dashboard/dist/assets/{controlplane-DgmvnAtU.js.map → controlplane-D1TGcYsS.js.map} +1 -1
  374. package/dashboard/dist/assets/{escalation-columns-Uj4U9g5H.js → escalation-columns-cwZE6xyo.js} +2 -2
  375. package/dashboard/dist/assets/{escalation-columns-Uj4U9g5H.js.map → escalation-columns-cwZE6xyo.js.map} +1 -1
  376. package/dashboard/dist/assets/{index-x5z73M9N.js → index-BzYcUPdD.js} +2 -2
  377. package/dashboard/dist/assets/{index-x5z73M9N.js.map → index-BzYcUPdD.js.map} +1 -1
  378. package/dashboard/dist/assets/index-CeCtqujG.js +67 -0
  379. package/dashboard/dist/assets/index-CeCtqujG.js.map +1 -0
  380. package/dashboard/dist/assets/{index-RIFT3RlO.js → index-ChV7pBjM.js} +2 -2
  381. package/dashboard/dist/assets/{index-RIFT3RlO.js.map → index-ChV7pBjM.js.map} +1 -1
  382. package/dashboard/dist/assets/{index-OfO0173w.js → index-CniRa65p.js} +2 -2
  383. package/dashboard/dist/assets/{index-OfO0173w.js.map → index-CniRa65p.js.map} +1 -1
  384. package/dashboard/dist/assets/{index-ByBy9M3L.js → index-CxdjT1Yk.js} +2 -2
  385. package/dashboard/dist/assets/{index-ByBy9M3L.js.map → index-CxdjT1Yk.js.map} +1 -1
  386. package/dashboard/dist/assets/{index-C_K7OlzT.js → index-DAvi5_2T.js} +2 -2
  387. package/dashboard/dist/assets/{index-C_K7OlzT.js.map → index-DAvi5_2T.js.map} +1 -1
  388. package/dashboard/dist/assets/{index-BrwqtXRh.js → index-DN-kX7hL.js} +2 -2
  389. package/dashboard/dist/assets/{index-BrwqtXRh.js.map → index-DN-kX7hL.js.map} +1 -1
  390. package/dashboard/dist/assets/index-Dl_8hbYI.js +2 -0
  391. package/dashboard/dist/assets/index-Dl_8hbYI.js.map +1 -0
  392. package/dashboard/dist/assets/{index-D4Dlznn9.js → index-DpKOr311.js} +2 -2
  393. package/dashboard/dist/assets/{index-D4Dlznn9.js.map → index-DpKOr311.js.map} +1 -1
  394. package/dashboard/dist/assets/{index-CnOvJz6U.js → index-Dy1wWu2e.js} +2 -2
  395. package/dashboard/dist/assets/{index-CnOvJz6U.js.map → index-Dy1wWu2e.js.map} +1 -1
  396. package/dashboard/dist/assets/{index-BT1Ms5Q5.js → index-HLu98Sqh.js} +2 -2
  397. package/dashboard/dist/assets/{index-BT1Ms5Q5.js.map → index-HLu98Sqh.js.map} +1 -1
  398. package/dashboard/dist/assets/{index-BFASQ7_X.js → index-ag2pCAPu.js} +2 -2
  399. package/dashboard/dist/assets/{index-BFASQ7_X.js.map → index-ag2pCAPu.js.map} +1 -1
  400. package/dashboard/dist/assets/{index-BsHVgWH6.js → index-gkxPN7Vx.js} +2 -2
  401. package/dashboard/dist/assets/{index-BsHVgWH6.js.map → index-gkxPN7Vx.js.map} +1 -1
  402. package/dashboard/dist/assets/index-m9A3UYst.css +1 -0
  403. package/dashboard/dist/assets/{knowledge-Cci_r6Kl.js → knowledge-DnMs-SOJ.js} +2 -2
  404. package/dashboard/dist/assets/{knowledge-Cci_r6Kl.js.map → knowledge-DnMs-SOJ.js.map} +1 -1
  405. package/dashboard/dist/assets/{mcp-NY4iL0L-.js → mcp-CwW-K3r4.js} +2 -2
  406. package/dashboard/dist/assets/{mcp-NY4iL0L-.js.map → mcp-CwW-K3r4.js.map} +1 -1
  407. package/dashboard/dist/assets/{mcp-query-CbvZo_I_.js → mcp-query-BZt5e8_Q.js} +2 -2
  408. package/dashboard/dist/assets/{mcp-query-CbvZo_I_.js.map → mcp-query-BZt5e8_Q.js.map} +1 -1
  409. package/dashboard/dist/assets/{personas-Fy-f7QQd.js → personas-UA-Xn60f.js} +2 -2
  410. package/dashboard/dist/assets/{personas-Fy-f7QQd.js.map → personas-UA-Xn60f.js.map} +1 -1
  411. package/dashboard/dist/assets/{pipelines-DKiuozxV.js → pipelines-Cu3PARum.js} +2 -2
  412. package/dashboard/dist/assets/{pipelines-DKiuozxV.js.map → pipelines-Cu3PARum.js.map} +1 -1
  413. package/dashboard/dist/assets/{tasks-CdM1Rkk9.js → tasks-BO6h8GJE.js} +2 -2
  414. package/dashboard/dist/assets/{tasks-CdM1Rkk9.js.map → tasks-BO6h8GJE.js.map} +1 -1
  415. package/dashboard/dist/assets/{topics-XNy2mf3n.js → topics-CWjCR-17.js} +2 -2
  416. package/dashboard/dist/assets/{topics-XNy2mf3n.js.map → topics-CWjCR-17.js.map} +1 -1
  417. package/dashboard/dist/assets/{useDebouncedValue-CyGcU3_S.js → useDebouncedValue-6t0jx1RB.js} +2 -2
  418. package/dashboard/dist/assets/{useDebouncedValue-CyGcU3_S.js.map → useDebouncedValue-6t0jx1RB.js.map} +1 -1
  419. package/dashboard/dist/assets/{useNamespace-C2RIh_IN.js → useNamespace-CqpoQx6D.js} +2 -2
  420. package/dashboard/dist/assets/{useNamespace-C2RIh_IN.js.map → useNamespace-CqpoQx6D.js.map} +1 -1
  421. package/dashboard/dist/assets/{useYamlActivityEvents-CDiV5fjf.js → useYamlActivityEvents-hmCQQwzB.js} +2 -2
  422. package/dashboard/dist/assets/{useYamlActivityEvents-CDiV5fjf.js.map → useYamlActivityEvents-hmCQQwzB.js.map} +1 -1
  423. package/dashboard/dist/assets/{validate-DcGWN82Y.js → validate-BIRn4a6d.js} +2 -2
  424. package/dashboard/dist/assets/{validate-DcGWN82Y.js.map → validate-BIRn4a6d.js.map} +1 -1
  425. package/dashboard/dist/assets/{yaml-workflows-CH8UrouH.js → yaml-workflows-ziUdZhKY.js} +2 -2
  426. package/dashboard/dist/assets/{yaml-workflows-CH8UrouH.js.map → yaml-workflows-ziUdZhKY.js.map} +1 -1
  427. package/dashboard/dist/index.html +2 -2
  428. package/docs/agents.md +3 -1
  429. package/docs/api/http/agents.md +15 -1
  430. package/docs/api/http/escalations.md +3 -3
  431. package/docs/api/http/exports.md +3 -1
  432. package/docs/api/http/file-browser.md +3 -1
  433. package/docs/api/http/mcp-endpoint.md +5 -2
  434. package/docs/api/http/mcp-servers.md +34 -4
  435. package/docs/api/http/namespaces.md +2 -0
  436. package/docs/api/http/pipelines.md +2 -0
  437. package/docs/api/http/roles.md +11 -8
  438. package/docs/api/http/service-accounts.md +8 -2
  439. package/docs/api/http/settings.md +29 -2
  440. package/docs/api/http/tasks.md +3 -1
  441. package/docs/api/http/topics.md +7 -1
  442. package/docs/api/http/users.md +8 -2
  443. package/docs/api/http/workflows.md +25 -10
  444. package/docs/api/http/yaml-workflows.md +21 -0
  445. package/docs/api/mcp/admin.md +409 -49
  446. package/docs/api/mcp/file-storage.md +4 -0
  447. package/docs/api/mcp/http-fetch.md +6 -2
  448. package/docs/api/mcp/human-queue.md +53 -0
  449. package/docs/api/mcp/index.md +13 -10
  450. package/docs/api/mcp/knowledge.md +34 -0
  451. package/docs/api/mcp/oauth.md +1 -1
  452. package/docs/api/mcp/ortho.md +113 -0
  453. package/docs/api/mcp/vision.md +1 -1
  454. package/docs/api/sdk/bot-accounts.md +1 -0
  455. package/docs/api/sdk/escalations.md +2 -2
  456. package/docs/api/sdk/mcp.md +2 -2
  457. package/docs/api/sdk/settings.md +1 -1
  458. package/docs/api/sdk/tasks.md +2 -2
  459. package/docs/api/sdk/workflows.md +2 -2
  460. package/docs/api/sdk/yaml-workflows.md +1 -1
  461. package/docs/architecture.md +3 -1
  462. package/docs/auth.md +3 -2
  463. package/docs/cloud.md +7 -2
  464. package/docs/dashboard.md +16 -7
  465. package/docs/data.md +1 -1
  466. package/docs/escalation-strategies.md +9 -20
  467. package/docs/events.md +6 -0
  468. package/docs/iam.md +7 -5
  469. package/docs/mcp.md +159 -210
  470. package/docs/oauth-and-delegation.md +32 -21
  471. package/docs/topics.md +2 -0
  472. package/docs/workflows.md +14 -112
  473. package/package.json +5 -3
  474. package/dashboard/dist/assets/ConfirmDeleteModal-DW4DrPur.js +0 -2
  475. package/dashboard/dist/assets/ConfirmDeleteModal-DW4DrPur.js.map +0 -1
  476. package/dashboard/dist/assets/ProcessDetailPage-DNgCIwRl.js +0 -2
  477. package/dashboard/dist/assets/ResolverForm-CKIOAGtY.js +0 -8
  478. package/dashboard/dist/assets/ResolverForm-CKIOAGtY.js.map +0 -1
  479. package/dashboard/dist/assets/index-CtlBjl8o.js +0 -2
  480. package/dashboard/dist/assets/index-CtlBjl8o.js.map +0 -1
  481. package/dashboard/dist/assets/index-LRYC__mE.js +0 -67
  482. package/dashboard/dist/assets/index-LRYC__mE.js.map +0 -1
  483. package/dashboard/dist/assets/index-MYI2_Xb3.css +0 -1
@@ -33,9 +33,10 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- const express_1 = require("express");
36
+ const http_1 = require("../lib/http");
37
+ const auth_1 = require("../modules/auth");
37
38
  const api = __importStar(require("../api/pipelines"));
38
- const router = (0, express_1.Router)();
39
+ const router = (0, http_1.Router)();
39
40
  // ── Routes ───────────────────────────────────────────────────────────────────
40
41
  /**
41
42
  * GET /api/pipelines/entities
@@ -71,7 +72,7 @@ router.get('/', async (req, res) => {
71
72
  */
72
73
  router.get('/:jobId/execution', async (req, res) => {
73
74
  const result = await api.getJobExecution({
74
- jobId: req.params.jobId,
75
+ jobId: String(req.params.jobId),
75
76
  app_id: req.query.app_id,
76
77
  });
77
78
  res.status(result.status).json(result.data ?? { error: result.error });
@@ -81,9 +82,9 @@ router.get('/:jobId/execution', async (req, res) => {
81
82
  * Interrupt a running pipeline job via HotMesh.interrupt().
82
83
  * Body: { topic, app_id }
83
84
  */
84
- router.post('/:jobId/interrupt', async (req, res) => {
85
+ router.post('/:jobId/interrupt', auth_1.requireBuilder, async (req, res) => {
85
86
  const result = await api.interruptJob({
86
- jobId: req.params.jobId,
87
+ jobId: String(req.params.jobId),
87
88
  topic: req.body.topic,
88
89
  app_id: req.body.app_id,
89
90
  });
@@ -33,10 +33,10 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- const express_1 = require("express");
36
+ const http_1 = require("../lib/http");
37
37
  const auth_1 = require("../modules/auth");
38
38
  const api = __importStar(require("../api/roles"));
39
- const router = (0, express_1.Router)();
39
+ const router = (0, http_1.Router)();
40
40
  /**
41
41
  * GET /api/roles
42
42
  * List all distinct roles known to the system.
@@ -33,10 +33,10 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- const express_1 = require("express");
36
+ const http_1 = require("../lib/http");
37
37
  const api = __importStar(require("../api/scan-codes"));
38
38
  const auth_1 = require("../modules/auth");
39
- const router = (0, express_1.Router)();
39
+ const router = (0, http_1.Router)();
40
40
  // ── Execute ───────────────────────────────────────────────────────────────
41
41
  /**
42
42
  * POST /api/scan-codes/execute
@@ -34,10 +34,10 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  const crypto_1 = require("crypto");
37
- const express_1 = require("express");
37
+ const http_1 = require("../lib/http");
38
38
  const api = __importStar(require("../api/settings"));
39
39
  const branding_1 = require("../modules/branding");
40
- const router = (0, express_1.Router)();
40
+ const router = (0, http_1.Router)();
41
41
  /**
42
42
  * GET /api/settings
43
43
  * Returns frontend-relevant configuration (no secrets).
@@ -33,9 +33,9 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- const express_1 = require("express");
36
+ const http_1 = require("../lib/http");
37
37
  const api = __importStar(require("../api/tasks"));
38
- const router = (0, express_1.Router)();
38
+ const router = (0, http_1.Router)();
39
39
  /**
40
40
  * POST /api/tasks
41
41
  * Create a new task record.
@@ -74,7 +74,7 @@ router.get('/', async (req, res) => {
74
74
  origin_id: req.query.origin_id,
75
75
  limit: req.query.limit ? parseInt(req.query.limit, 10) : undefined,
76
76
  offset: req.query.offset ? parseInt(req.query.offset, 10) : undefined,
77
- });
77
+ }, req.auth);
78
78
  res.status(result.status).json(result.data ?? { error: result.error });
79
79
  });
80
80
  /**
@@ -106,7 +106,7 @@ router.get('/processes', async (req, res) => {
106
106
  * Get all tasks and escalations for a process (origin_id).
107
107
  */
108
108
  router.get('/processes/:originId', async (req, res) => {
109
- const result = await api.getProcess({ originId: req.params.originId });
109
+ const result = await api.getProcess({ originId: req.params.originId }, req.auth);
110
110
  res.status(result.status).json(result.data ?? { error: result.error });
111
111
  });
112
112
  /**
@@ -114,7 +114,7 @@ router.get('/processes/:originId', async (req, res) => {
114
114
  * Get a single task by ID.
115
115
  */
116
116
  router.get('/:id', async (req, res) => {
117
- const result = await api.getTask({ id: req.params.id });
117
+ const result = await api.getTask({ id: req.params.id }, req.auth);
118
118
  res.status(result.status).json(result.data ?? { error: result.error });
119
119
  });
120
120
  exports.default = router;
@@ -33,9 +33,16 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- const express_1 = require("express");
36
+ const http_1 = require("../lib/http");
37
37
  const api = __importStar(require("../api/topics"));
38
- const router = (0, express_1.Router)();
38
+ const auth_1 = require("../modules/auth");
39
+ const user_1 = require("../services/user");
40
+ /**
41
+ * Subjects the platform itself publishes and acts on (agent triggers, system
42
+ * lifecycle). Only a superadmin may publish one over REST.
43
+ */
44
+ const RESERVED_SUBJECT_PREFIXES = ['system.', 'agent.'];
45
+ const router = (0, http_1.Router)();
39
46
  /**
40
47
  * GET /api/topics
41
48
  * List topics with optional filters.
@@ -54,7 +61,7 @@ router.get('/', async (req, res) => {
54
61
  * POST /api/topics
55
62
  * Register a new topic in the catalog.
56
63
  */
57
- router.post('/', async (req, res) => {
64
+ router.post('/', auth_1.requireBuilder, async (req, res) => {
58
65
  const { topic, category } = req.body;
59
66
  if (!topic || !category) {
60
67
  res.status(400).json({ error: 'topic and category are required' });
@@ -75,26 +82,31 @@ router.get('/by-name/:topic', async (req, res) => {
75
82
  * PUT /api/topics/by-name/:topic
76
83
  * Update a topic in the catalog.
77
84
  */
78
- router.put('/by-name/:topic', async (req, res) => {
79
- const result = await api.updateTopic({ topic: decodeURIComponent(req.params.topic), ...req.body });
85
+ router.put('/by-name/:topic', auth_1.requireBuilder, async (req, res) => {
86
+ const result = await api.updateTopic({ ...req.body, topic: decodeURIComponent(String(req.params.topic)) });
80
87
  res.status(result.status).json(result.data ?? { error: result.error });
81
88
  });
82
89
  /**
83
90
  * DELETE /api/topics/by-name/:topic
84
91
  * Delete a topic from the catalog (system topics are protected).
85
92
  */
86
- router.delete('/by-name/:topic', async (req, res) => {
87
- const result = await api.deleteTopic({ topic: decodeURIComponent(req.params.topic) });
93
+ router.delete('/by-name/:topic', auth_1.requireBuilder, async (req, res) => {
94
+ const result = await api.deleteTopic({ topic: decodeURIComponent(String(req.params.topic)) });
88
95
  res.status(result.status).json(result.data ?? { error: result.error });
89
96
  });
90
97
  /**
91
98
  * POST /api/topics/by-name/:topic/publish
92
99
  * Publish a test event to the event bus with the given topic and payload.
93
100
  */
94
- router.post('/by-name/:topic/publish', async (req, res) => {
101
+ router.post('/by-name/:topic/publish', auth_1.requireBuilder, async (req, res) => {
95
102
  // The request body IS the event envelope (Partial<LTEvent> + optional subject).
103
+ const subject = String(req.body?.subject || decodeURIComponent(String(req.params.topic)));
104
+ if (RESERVED_SUBJECT_PREFIXES.some((prefix) => subject.startsWith(prefix)) && !(await (0, user_1.isSuperAdmin)(req.auth.userId))) {
105
+ res.status(403).json({ error: 'Forbidden: only superadmin can publish a system subject' });
106
+ return;
107
+ }
96
108
  const result = await api.publishTopic({
97
- topic: decodeURIComponent(req.params.topic),
109
+ topic: decodeURIComponent(String(req.params.topic)),
98
110
  event: (req.body ?? {}),
99
111
  });
100
112
  res.status(result.status).json(result.data ?? { error: result.error });
@@ -33,11 +33,19 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- const express_1 = require("express");
36
+ const http_1 = require("../lib/http");
37
37
  const auth_1 = require("../modules/auth");
38
+ const capabilities_1 = require("../modules/capabilities");
38
39
  const api = __importStar(require("../api/users"));
39
40
  const personasApi = __importStar(require("../api/personas"));
40
- const router = (0, express_1.Router)();
41
+ const router = (0, http_1.Router)();
42
+ /** Answer a refused decision with 403; true when the request may go on. */
43
+ function allowed(decision, res) {
44
+ if (decision.allowed)
45
+ return true;
46
+ res.status(403).json({ error: decision.error });
47
+ return false;
48
+ }
41
49
  // ── User CRUD ─────────────────────────────────────────────────────────────────
42
50
  /**
43
51
  * GET /api/users
@@ -88,6 +96,8 @@ router.get('/:id', async (req, res) => {
88
96
  * Body: { external_id, email?, display_name?, roles?: [{ role, type }], metadata? }
89
97
  */
90
98
  router.post('/', auth_1.requireBuilder, async (req, res) => {
99
+ if (!allowed(await (0, capabilities_1.mayGrantRoles)(req.auth.userId, (req.body || {}).roles), res))
100
+ return;
91
101
  const result = await api.createUser(req.body || {});
92
102
  res.status(result.status).json(result.data ?? { error: result.error });
93
103
  });
@@ -97,6 +107,8 @@ router.post('/', auth_1.requireBuilder, async (req, res) => {
97
107
  * Body: { email?, display_name?, status?, metadata? }
98
108
  */
99
109
  router.put('/:id', auth_1.requireBuilder, async (req, res) => {
110
+ if (!allowed(await (0, capabilities_1.mayManageAccount)(req.auth.userId, String(req.params.id)), res))
111
+ return;
100
112
  const result = await api.updateUser({ id: req.params.id, ...(req.body || {}) });
101
113
  res.status(result.status).json(result.data ?? { error: result.error });
102
114
  });
@@ -107,6 +119,8 @@ router.put('/:id', auth_1.requireBuilder, async (req, res) => {
107
119
  * Body: { set?: { key: value }, remove?: [key], rename?: { old: new } }
108
120
  */
109
121
  router.patch('/:id/properties', auth_1.requireBuilder, async (req, res) => {
122
+ if (!allowed(await (0, capabilities_1.mayManageAccount)(req.auth.userId, String(req.params.id)), res))
123
+ return;
110
124
  const { set, remove, rename } = req.body || {};
111
125
  const result = await api.patchUserProperties({
112
126
  id: req.params.id,
@@ -121,6 +135,8 @@ router.patch('/:id/properties', auth_1.requireBuilder, async (req, res) => {
121
135
  * Delete a user. Builder only.
122
136
  */
123
137
  router.delete('/:id', auth_1.requireBuilder, async (req, res) => {
138
+ if (!allowed(await (0, capabilities_1.mayManageAccount)(req.auth.userId, String(req.params.id)), res))
139
+ return;
124
140
  const result = await api.deleteUser({ id: req.params.id });
125
141
  res.status(result.status).json(result.data ?? { error: result.error });
126
142
  });
@@ -148,26 +164,10 @@ router.get('/:id/roles', async (req, res) => {
148
164
  */
149
165
  router.post('/:id/roles', auth_1.requireAdmin, async (req, res) => {
150
166
  const { role, type, read_scope, write_scope } = req.body || {};
151
- const userId = req.auth.userId;
152
- // Superadmin bypasses all scoping
153
- const { isSuperAdmin } = await Promise.resolve().then(() => __importStar(require('../services/user/rbac')));
154
- if (!(await isSuperAdmin(userId))) {
155
- // Non-superadmin can never assign superadmin type
156
- if (type === 'superadmin') {
157
- res.status(403).json({ error: 'Only superadmin can assign superadmin role type' });
158
- return;
159
- }
160
- // Check if caller has the engineer role (builder) — can assign any non-superadmin role
161
- const { hasRole: checkRole } = await Promise.resolve().then(() => __importStar(require('../services/user/roles')));
162
- const isEngineer = await checkRole(userId, 'engineer');
163
- if (!isEngineer) {
164
- // Non-builder admin: can only assign roles they themselves hold
165
- const callerHasRole = await checkRole(userId, role);
166
- if (!callerHasRole) {
167
- res.status(403).json({ error: `You can only assign roles you hold. You do not have the '${role}' role.` });
168
- return;
169
- }
170
- }
167
+ const decision = await (0, capabilities_1.mayGrantRole)(req.auth.userId, { role, type });
168
+ if (!decision.allowed) {
169
+ res.status(403).json({ error: decision.error });
170
+ return;
171
171
  }
172
172
  const result = await api.addUserRole({ id: req.params.id, role, type, read_scope, write_scope });
173
173
  res.status(result.status).json(result.data ?? { error: result.error });
@@ -177,6 +177,9 @@ router.post('/:id/roles', auth_1.requireAdmin, async (req, res) => {
177
177
  * Remove a role from a user.
178
178
  */
179
179
  router.delete('/:id/roles/:role', auth_1.requireAdmin, async (req, res) => {
180
+ const decision = await (0, capabilities_1.mayRevokeRole)(req.auth.userId, String(req.params.id), String(req.params.role));
181
+ if (!allowed(decision, res))
182
+ return;
180
183
  const result = await api.removeUserRole({ id: req.params.id, role: req.params.role });
181
184
  res.status(result.status).json(result.data ?? { error: result.error });
182
185
  });
@@ -33,14 +33,15 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- const express_1 = require("express");
36
+ const http_1 = require("../lib/http");
37
+ const auth_1 = require("../modules/auth");
37
38
  const api = __importStar(require("../api/workflow-sets"));
38
- const router = (0, express_1.Router)();
39
+ const router = (0, http_1.Router)();
39
40
  /**
40
41
  * POST /api/workflow-sets
41
42
  * Create a workflow set from a specification and start the planner workflow.
42
43
  */
43
- router.post('/', async (req, res) => {
44
+ router.post('/', auth_1.requireBuilder, async (req, res) => {
44
45
  const { name, description, specification } = req.body;
45
46
  const result = await api.createWorkflowSet({ name, description, specification }, req.auth ? { userId: req.auth.userId } : undefined);
46
47
  res.status(result.status).json(result.data ?? { error: result.error });
@@ -63,17 +64,17 @@ router.get('/', async (req, res) => {
63
64
  * Get a single workflow set with its plan and workflow statuses.
64
65
  */
65
66
  router.get('/:id', async (req, res) => {
66
- const result = await api.getWorkflowSet({ id: req.params.id });
67
+ const result = await api.getWorkflowSet({ id: String(req.params.id) });
67
68
  res.status(result.status).json(result.data ?? { error: result.error });
68
69
  });
69
70
  /**
70
71
  * PUT /api/workflow-sets/:id/plan
71
72
  * Update the plan (engineer adjustments before building).
72
73
  */
73
- router.put('/:id/plan', async (req, res) => {
74
+ router.put('/:id/plan', auth_1.requireBuilder, async (req, res) => {
74
75
  const { plan, namespaces } = req.body;
75
76
  const result = await api.updateWorkflowSetPlanApi({
76
- id: req.params.id,
77
+ id: String(req.params.id),
77
78
  plan,
78
79
  namespaces,
79
80
  });
@@ -83,25 +84,25 @@ router.put('/:id/plan', async (req, res) => {
83
84
  * POST /api/workflow-sets/:id/add
84
85
  * Add additional workflows to an existing set from a new specification.
85
86
  */
86
- router.post('/:id/add', async (req, res) => {
87
+ router.post('/:id/add', auth_1.requireBuilder, async (req, res) => {
87
88
  const { specification } = req.body;
88
- const result = await api.addToWorkflowSet({ id: req.params.id, specification }, req.auth ? { userId: req.auth.userId } : undefined);
89
+ const result = await api.addToWorkflowSet({ id: String(req.params.id), specification }, req.auth ? { userId: req.auth.userId } : undefined);
89
90
  res.status(result.status).json(result.data ?? { error: result.error });
90
91
  });
91
92
  /**
92
93
  * POST /api/workflow-sets/:id/build
93
94
  * Trigger the build phase (resume the planner workflow).
94
95
  */
95
- router.post('/:id/build', async (req, res) => {
96
- const result = await api.buildWorkflowSet({ id: req.params.id });
96
+ router.post('/:id/build', auth_1.requireBuilder, async (req, res) => {
97
+ const result = await api.buildWorkflowSet({ id: String(req.params.id) });
97
98
  res.status(result.status).json(result.data ?? { error: result.error });
98
99
  });
99
100
  /**
100
101
  * POST /api/workflow-sets/:id/deploy
101
102
  * Deploy all namespaces in the set.
102
103
  */
103
- router.post('/:id/deploy', async (req, res) => {
104
- const result = await api.deployWorkflowSet({ id: req.params.id });
104
+ router.post('/:id/deploy', auth_1.requireBuilder, async (req, res) => {
105
+ const result = await api.deployWorkflowSet({ id: String(req.params.id) });
105
106
  res.status(result.status).json(result.data ?? { error: result.error });
106
107
  });
107
108
  exports.default = router;
@@ -33,10 +33,11 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- const express_1 = require("express");
36
+ const http_1 = require("../../lib/http");
37
+ const workflow_invocation_1 = require("../../services/workflow-invocation");
37
38
  const api = __importStar(require("../../api/workflows"));
38
39
  const auth_1 = require("../../modules/auth");
39
- const router = (0, express_1.Router)();
40
+ const router = (0, http_1.Router)();
40
41
  // ── Workflow configuration ────────────────────────────────────────────────────
41
42
  /**
42
43
  * GET /api/workflows/config
@@ -69,6 +70,18 @@ router.get('/:type/input-lookups', async (req, res) => {
69
70
  * Requires admin or superadmin role.
70
71
  */
71
72
  router.put('/:type/config', auth_1.requireAdmin, async (req, res) => {
73
+ // Every invocation of this workflow runs as execute_as, so it may not exceed the caller.
74
+ if (req.body.execute_as) {
75
+ try {
76
+ await (0, workflow_invocation_1.assertMayActAs)(req.auth.userId, req.body.execute_as);
77
+ }
78
+ catch (err) {
79
+ if (!(err instanceof workflow_invocation_1.InvocationError))
80
+ throw err;
81
+ res.status(err.statusCode).json({ error: err.message });
82
+ return;
83
+ }
84
+ }
72
85
  const result = await api.upsertWorkflowConfig({
73
86
  type: req.params.type,
74
87
  invocable: req.body.invocable,
@@ -33,9 +33,9 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- const express_1 = require("express");
36
+ const http_1 = require("../../lib/http");
37
37
  const api = __importStar(require("../../api/workflows"));
38
- const router = (0, express_1.Router)();
38
+ const router = (0, http_1.Router)();
39
39
  // ── Active workers ───────────────────────────────────────────────────────────
40
40
  /**
41
41
  * GET /api/workflows/workers
@@ -3,11 +3,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- const express_1 = require("express");
6
+ const http_1 = require("../../lib/http");
7
7
  const discovery_1 = __importDefault(require("./discovery"));
8
8
  const config_1 = __importDefault(require("./config"));
9
9
  const invocation_1 = __importDefault(require("./invocation"));
10
- const router = (0, express_1.Router)();
10
+ const router = (0, http_1.Router)();
11
11
  // Mount in original route registration order:
12
12
  // 1. Discovery: /workers, /discovered, /cron/status
13
13
  router.use(discovery_1.default);
@@ -33,9 +33,10 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- const express_1 = require("express");
36
+ const http_1 = require("../../lib/http");
37
+ const auth_1 = require("../../modules/auth");
37
38
  const api = __importStar(require("../../api/workflows"));
38
- const router = (0, express_1.Router)();
39
+ const router = (0, http_1.Router)();
39
40
  // ── Workflow invocation ─────────────────────────────────────────────────────
40
41
  /**
41
42
  * POST /api/workflows/:type/invoke
@@ -69,9 +70,9 @@ router.post('/:type/invoke', async (req, res) => {
69
70
  * Get the status of a workflow. Optional `app_id` query param selects the
70
71
  * HotMesh namespace for resolution (default: durable).
71
72
  */
72
- router.get('/:workflowId/status', async (req, res) => {
73
+ router.get('/:workflowId/status', auth_1.requireBuilder, async (req, res) => {
73
74
  const result = await api.getWorkflowStatus({
74
- workflowId: req.params.workflowId,
75
+ workflowId: String(req.params.workflowId),
75
76
  appId: typeof req.query.app_id === 'string' ? req.query.app_id : undefined,
76
77
  });
77
78
  res.status(result.status).json(result.data ?? { error: result.error });
@@ -82,9 +83,9 @@ router.get('/:workflowId/status', async (req, res) => {
82
83
  * Never blocks — always returns immediately. Optional `app_id` query param
83
84
  * selects the HotMesh namespace for resolution (default: durable).
84
85
  */
85
- router.get('/:workflowId/result', async (req, res) => {
86
+ router.get('/:workflowId/result', auth_1.requireWorkflowReader, async (req, res) => {
86
87
  const result = await api.getWorkflowResult({
87
- workflowId: req.params.workflowId,
88
+ workflowId: String(req.params.workflowId),
88
89
  appId: typeof req.query.app_id === 'string' ? req.query.app_id : undefined,
89
90
  });
90
91
  res.status(result.status).json(result.data ?? { error: result.error });
@@ -93,16 +94,16 @@ router.get('/:workflowId/result', async (req, res) => {
93
94
  * POST /api/workflows/:workflowId/terminate
94
95
  * Interrupt/terminate a running workflow.
95
96
  */
96
- router.post('/:workflowId/terminate', async (req, res) => {
97
- const result = await api.terminateWorkflow({ workflowId: req.params.workflowId });
97
+ router.post('/:workflowId/terminate', auth_1.requireBuilder, async (req, res) => {
98
+ const result = await api.terminateWorkflow({ workflowId: String(req.params.workflowId) });
98
99
  res.status(result.status).json(result.data ?? { error: result.error });
99
100
  });
100
101
  /**
101
102
  * GET /api/workflows/:workflowId/export
102
103
  * Export workflow state. Convenience alias for /api/workflow-states/:workflowId.
103
104
  */
104
- router.get('/:workflowId/export', async (req, res) => {
105
- const result = await api.exportWorkflow({ workflowId: req.params.workflowId });
105
+ router.get('/:workflowId/export', auth_1.requireBuilder, async (req, res) => {
106
+ const result = await api.exportWorkflow({ workflowId: String(req.params.workflowId) });
106
107
  res.status(result.status).json(result.data ?? { error: result.error });
107
108
  });
108
109
  exports.default = router;
@@ -33,16 +33,29 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- const express_1 = require("express");
36
+ const http_1 = require("../../lib/http");
37
37
  const api = __importStar(require("../../api/yaml-workflows"));
38
- const router = (0, express_1.Router)();
38
+ const auth_1 = require("../../modules/auth");
39
+ const workflow_invocation_1 = require("../../services/workflow-invocation");
40
+ const router = (0, http_1.Router)();
39
41
  /**
40
42
  * PUT /api/yaml-workflows/:id/cron
41
43
  * Set or update cron schedule + envelope + execute_as.
42
44
  */
43
- router.put('/:id/cron', async (req, res) => {
45
+ router.put('/:id/cron', auth_1.requireBuilder, async (req, res) => {
46
+ if (req.body.execute_as) {
47
+ try {
48
+ await (0, workflow_invocation_1.assertMayActAs)(req.auth.userId, req.body.execute_as);
49
+ }
50
+ catch (err) {
51
+ if (!(err instanceof workflow_invocation_1.InvocationError))
52
+ throw err;
53
+ res.status(err.statusCode).json({ error: err.message });
54
+ return;
55
+ }
56
+ }
44
57
  const result = await api.setCronSchedule({
45
- id: req.params.id,
58
+ id: String(req.params.id),
46
59
  cron_schedule: req.body.cron_schedule,
47
60
  cron_envelope: req.body.cron_envelope,
48
61
  execute_as: req.body.execute_as,
@@ -53,8 +66,8 @@ router.put('/:id/cron', async (req, res) => {
53
66
  * DELETE /api/yaml-workflows/:id/cron
54
67
  * Clear cron schedule.
55
68
  */
56
- router.delete('/:id/cron', async (req, res) => {
57
- const result = await api.clearCronSchedule({ id: req.params.id });
69
+ router.delete('/:id/cron', auth_1.requireBuilder, async (req, res) => {
70
+ const result = await api.clearCronSchedule({ id: String(req.params.id) });
58
71
  res.status(result.status).json(result.data ?? { error: result.error });
59
72
  });
60
73
  /**
@@ -33,9 +33,10 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- const express_1 = require("express");
36
+ const http_1 = require("../../lib/http");
37
37
  const api = __importStar(require("../../api/yaml-workflows"));
38
- const router = (0, express_1.Router)();
38
+ const auth_1 = require("../../modules/auth");
39
+ const router = (0, http_1.Router)();
39
40
  /**
40
41
  * GET /api/yaml-workflows
41
42
  * List YAML workflows with optional status filter.
@@ -58,7 +59,7 @@ router.get('/', async (req, res) => {
58
59
  * Generate a YAML workflow from a completed execution.
59
60
  * Body: { workflow_id, task_queue, workflow_name, name, description? }
60
61
  */
61
- router.post('/', async (req, res) => {
62
+ router.post('/', auth_1.requireBuilder, async (req, res) => {
62
63
  const result = await api.createYamlWorkflow(req.body);
63
64
  res.status(result.status).json(result.data ?? { error: result.error });
64
65
  });
@@ -76,7 +77,7 @@ router.get('/app-ids', async (_req, res) => {
76
77
  * Unlike POST /, this does not require a source execution — the YAML is provided directly.
77
78
  * Body: { name, description?, yaml_content, input_schema?, activity_manifest?, tags?, app_id? }
78
79
  */
79
- router.post('/direct', async (req, res) => {
80
+ router.post('/direct', auth_1.requireBuilder, async (req, res) => {
80
81
  const result = await api.createYamlWorkflowDirect(req.body);
81
82
  res.status(result.status).json(result.data ?? { error: result.error });
82
83
  });
@@ -85,7 +86,7 @@ router.post('/direct', async (req, res) => {
85
86
  * Compile a durable TypeScript workflow into a YAML DAG.
86
87
  * Body: { source, is_file_path?, workflow_name, name, description?, app_id?, subscribes?, tags? }
87
88
  */
88
- router.post('/from-durable', async (req, res) => {
89
+ router.post('/from-durable', auth_1.requireBuilder, async (req, res) => {
89
90
  const result = await api.createYamlWorkflowFromDurable(req.body);
90
91
  res.status(result.status).json(result.data ?? { error: result.error });
91
92
  });
@@ -95,15 +96,15 @@ router.post('/from-durable', async (req, res) => {
95
96
  * Get a single YAML workflow.
96
97
  */
97
98
  router.get('/:id', async (req, res) => {
98
- const result = await api.getYamlWorkflow({ id: req.params.id });
99
+ const result = await api.getYamlWorkflow({ id: String(req.params.id) });
99
100
  res.status(result.status).json(result.data ?? { error: result.error });
100
101
  });
101
102
  /**
102
103
  * PUT /api/yaml-workflows/:id
103
104
  * Update a YAML workflow's metadata.
104
105
  */
105
- router.put('/:id', async (req, res) => {
106
- const result = await api.updateYamlWorkflow({ id: req.params.id, ...req.body });
106
+ router.put('/:id', auth_1.requireBuilder, async (req, res) => {
107
+ const result = await api.updateYamlWorkflow({ ...req.body, id: String(req.params.id) });
107
108
  res.status(result.status).json(result.data ?? { error: result.error });
108
109
  });
109
110
  /**
@@ -111,9 +112,9 @@ router.put('/:id', async (req, res) => {
111
112
  * Re-generate the YAML from the original source execution.
112
113
  * Only allowed for non-archived workflows.
113
114
  */
114
- router.post('/:id/regenerate', async (req, res) => {
115
+ router.post('/:id/regenerate', auth_1.requireBuilder, async (req, res) => {
115
116
  const result = await api.regenerateYamlWorkflow({
116
- id: req.params.id,
117
+ id: String(req.params.id),
117
118
  task_queue: req.body.task_queue,
118
119
  compilation_feedback: req.body.compilation_feedback,
119
120
  });
@@ -123,8 +124,8 @@ router.post('/:id/regenerate', async (req, res) => {
123
124
  * DELETE /api/yaml-workflows/:id
124
125
  * Delete a YAML workflow (must be draft or archived).
125
126
  */
126
- router.delete('/:id', async (req, res) => {
127
- const result = await api.deleteYamlWorkflow({ id: req.params.id });
127
+ router.delete('/:id', auth_1.requireBuilder, async (req, res) => {
128
+ const result = await api.deleteYamlWorkflow({ id: String(req.params.id) });
128
129
  res.status(result.status).json(result.data ?? { error: result.error });
129
130
  });
130
131
  exports.default = router;