@hotmeshio/long-tail 0.23.1 → 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 (562) 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/index.d.ts +1 -0
  14. package/build/api/escalations/index.js +4 -1
  15. package/build/api/escalations/list.d.ts +5 -0
  16. package/build/api/escalations/list.js +19 -5
  17. package/build/api/escalations/metadata.js +3 -0
  18. package/build/api/escalations/related.d.ts +18 -0
  19. package/build/api/escalations/related.js +205 -0
  20. package/build/api/escalations/single.d.ts +3 -2
  21. package/build/api/escalations/single.js +8 -3
  22. package/build/api/mcp/tools.d.ts +12 -0
  23. package/build/api/mcp/tools.js +113 -9
  24. package/build/api/roles.js +4 -0
  25. package/build/api/scan-codes/choice.js +31 -7
  26. package/build/api/scan-codes/present.js +5 -1
  27. package/build/api/settings.d.ts +1 -1
  28. package/build/api/settings.js +12 -1
  29. package/build/api/tasks.d.ts +3 -3
  30. package/build/api/tasks.js +30 -7
  31. package/build/api/workflows/input-lookups.js +1 -1
  32. package/build/api/workflows/invocable.js +2 -2
  33. package/build/api/workflows/invocation.js +1 -1
  34. package/build/api/yaml-workflows/deploy.d.ts +10 -2
  35. package/build/api/yaml-workflows/deploy.js +42 -2
  36. package/build/lib/db/schemas/038_oauth_server.sql +46 -0
  37. package/build/lib/events/browser-view.d.ts +15 -0
  38. package/build/lib/events/browser-view.js +101 -0
  39. package/build/lib/events/nats-ws-filter.d.ts +29 -0
  40. package/build/lib/events/nats-ws-filter.js +94 -0
  41. package/build/lib/events/nats-ws-proxy.d.ts +2 -0
  42. package/build/lib/events/nats-ws-proxy.js +39 -5
  43. package/build/lib/events/nats-ws-server-filter.d.ts +16 -0
  44. package/build/lib/events/nats-ws-server-filter.js +56 -0
  45. package/build/lib/events/nats-ws-ticket.d.ts +10 -0
  46. package/build/lib/events/nats-ws-ticket.js +42 -0
  47. package/build/lib/events/socketio.d.ts +10 -1
  48. package/build/lib/events/socketio.js +10 -3
  49. package/build/lib/http/index.d.ts +27 -0
  50. package/build/lib/http/index.js +55 -0
  51. package/build/modules/auth.d.ts +15 -24
  52. package/build/modules/auth.js +43 -126
  53. package/build/modules/capabilities.d.ts +62 -0
  54. package/build/modules/capabilities.js +188 -0
  55. package/build/modules/config.d.ts +14 -0
  56. package/build/modules/config.js +20 -0
  57. package/build/modules/defaults.d.ts +10 -0
  58. package/build/modules/defaults.js +12 -1
  59. package/build/modules/display.d.ts +15 -0
  60. package/build/modules/display.js +27 -0
  61. package/build/modules/mcp-auth.d.ts +11 -0
  62. package/build/modules/mcp-auth.js +56 -0
  63. package/build/modules/oauth-server.d.ts +18 -0
  64. package/build/modules/oauth-server.js +40 -0
  65. package/build/routes/agents.js +46 -14
  66. package/build/routes/announcements.js +2 -2
  67. package/build/routes/auth-sso.js +2 -2
  68. package/build/routes/auth.js +2 -2
  69. package/build/routes/bot-accounts.js +26 -3
  70. package/build/routes/capabilities.js +4 -4
  71. package/build/routes/controlplane.js +2 -2
  72. package/build/routes/dba.js +2 -2
  73. package/build/routes/delegation.js +2 -2
  74. package/build/routes/diagnostics.js +2 -2
  75. package/build/routes/docs.js +2 -2
  76. package/build/routes/domain.js +2 -2
  77. package/build/routes/escalations/accumulate.d.ts +1 -1
  78. package/build/routes/escalations/acting.d.ts +1 -1
  79. package/build/routes/escalations/analytics.d.ts +1 -1
  80. package/build/routes/escalations/bulk.d.ts +1 -1
  81. package/build/routes/escalations/facets.d.ts +1 -1
  82. package/build/routes/escalations/index.js +5 -2
  83. package/build/routes/escalations/list.d.ts +1 -1
  84. package/build/routes/escalations/list.js +2 -0
  85. package/build/routes/escalations/metadata.d.ts +1 -1
  86. package/build/routes/escalations/related.d.ts +7 -0
  87. package/build/routes/escalations/related.js +60 -0
  88. package/build/routes/escalations/resolve.d.ts +1 -1
  89. package/build/routes/escalations/single.d.ts +1 -1
  90. package/build/routes/escalations/single.js +1 -1
  91. package/build/routes/exports.js +14 -13
  92. package/build/routes/file-browser.js +9 -8
  93. package/build/routes/files.js +2 -2
  94. package/build/routes/index.js +4 -2
  95. package/build/routes/insight.js +5 -4
  96. package/build/routes/knowledge.js +2 -2
  97. package/build/routes/maintenance.js +2 -2
  98. package/build/routes/mcp-endpoint.d.ts +3 -1
  99. package/build/routes/mcp-endpoint.js +18 -8
  100. package/build/routes/mcp.js +35 -15
  101. package/build/routes/me.js +2 -2
  102. package/build/routes/namespaces.js +4 -3
  103. package/build/routes/nats-credentials.js +27 -3
  104. package/build/routes/oauth-server/authorize.d.ts +2 -0
  105. package/build/routes/oauth-server/authorize.js +108 -0
  106. package/build/routes/oauth-server/grants.d.ts +2 -0
  107. package/build/routes/oauth-server/grants.js +35 -0
  108. package/build/routes/oauth-server/index.d.ts +8 -0
  109. package/build/routes/oauth-server/index.js +52 -0
  110. package/build/routes/oauth-server/registration.d.ts +2 -0
  111. package/build/routes/oauth-server/registration.js +38 -0
  112. package/build/routes/oauth-server/token.d.ts +2 -0
  113. package/build/routes/oauth-server/token.js +100 -0
  114. package/build/routes/oauth-well-known.d.ts +8 -0
  115. package/build/routes/oauth-well-known.js +31 -0
  116. package/build/routes/oauth.js +2 -2
  117. package/build/routes/overview.js +2 -2
  118. package/build/routes/personas.js +2 -2
  119. package/build/routes/pipelines.js +6 -5
  120. package/build/routes/roles.js +2 -2
  121. package/build/routes/scan-codes.js +2 -2
  122. package/build/routes/settings.js +2 -2
  123. package/build/routes/tasks.js +5 -5
  124. package/build/routes/topics.js +21 -9
  125. package/build/routes/users.js +25 -22
  126. package/build/routes/workflow-sets.js +13 -12
  127. package/build/routes/workflows/config.js +15 -2
  128. package/build/routes/workflows/discovery.js +2 -2
  129. package/build/routes/workflows/index.js +2 -2
  130. package/build/routes/workflows/invocation.js +11 -10
  131. package/build/routes/yaml-workflows/cron.js +19 -6
  132. package/build/routes/yaml-workflows/crud.js +13 -12
  133. package/build/routes/yaml-workflows/deployment.js +11 -10
  134. package/build/routes/yaml-workflows/index.js +2 -2
  135. package/build/routes/yaml-workflows/versions.js +2 -2
  136. package/build/scripts/consolidation-sim.d.ts +25 -0
  137. package/build/scripts/consolidation-sim.js +141 -0
  138. package/build/sdk/index.d.ts +12 -0
  139. package/build/sdk/index.js +2 -0
  140. package/build/services/agent/authority.d.ts +14 -0
  141. package/build/services/agent/authority.js +53 -0
  142. package/build/services/auth/bot-api-key.d.ts +2 -0
  143. package/build/services/auth/bot-api-key.js +10 -0
  144. package/build/services/auth/oauth-server/access-token.d.ts +36 -0
  145. package/build/services/auth/oauth-server/access-token.js +80 -0
  146. package/build/services/auth/oauth-server/authorization.d.ts +47 -0
  147. package/build/services/auth/oauth-server/authorization.js +54 -0
  148. package/build/services/auth/oauth-server/constants.d.ts +11 -0
  149. package/build/services/auth/oauth-server/constants.js +16 -0
  150. package/build/services/auth/oauth-server/index.d.ts +3 -0
  151. package/build/services/auth/oauth-server/index.js +26 -0
  152. package/build/services/auth/oauth-server/metadata.d.ts +21 -0
  153. package/build/services/auth/oauth-server/metadata.js +53 -0
  154. package/build/services/auth/oauth-server/registration.d.ts +42 -0
  155. package/build/services/auth/oauth-server/registration.js +134 -0
  156. package/build/services/auth/oauth-server/sql.d.ts +34 -0
  157. package/build/services/auth/oauth-server/sql.js +123 -0
  158. package/build/services/auth/oauth-server/store.d.ts +74 -0
  159. package/build/services/auth/oauth-server/store.js +151 -0
  160. package/build/services/auth/sql.d.ts +1 -0
  161. package/build/services/auth/sql.js +3 -1
  162. package/build/services/escalation/grouped-list.d.ts +19 -0
  163. package/build/services/escalation/grouped-list.js +54 -0
  164. package/build/services/escalation/index.d.ts +4 -0
  165. package/build/services/escalation/index.js +9 -1
  166. package/build/services/escalation/queries.d.ts +17 -13
  167. package/build/services/escalation/queries.js +38 -42
  168. package/build/services/escalation/read-scope-sql.d.ts +13 -0
  169. package/build/services/escalation/read-scope-sql.js +19 -0
  170. package/build/services/escalation/related.d.ts +58 -0
  171. package/build/services/escalation/related.js +196 -0
  172. package/build/services/export/index.d.ts +10 -0
  173. package/build/services/export/index.js +27 -0
  174. package/build/services/invocation-access.d.ts +25 -4
  175. package/build/services/invocation-access.js +39 -7
  176. package/build/services/mcp/client/connection-dispatch.d.ts +6 -1
  177. package/build/services/mcp/client/connection-dispatch.js +3 -2
  178. package/build/services/mcp/client/connection-lifecycle.d.ts +10 -2
  179. package/build/services/mcp/client/connection-lifecycle.js +45 -7
  180. package/build/services/mcp/client/connection-test.js +2 -6
  181. package/build/services/mcp/client/connection.d.ts +1 -1
  182. package/build/services/mcp/client/connection.js +3 -1
  183. package/build/services/mcp/client/index.d.ts +2 -2
  184. package/build/services/mcp/client/index.js +4 -1
  185. package/build/services/mcp/client/network-transport.d.ts +12 -0
  186. package/build/services/mcp/client/network-transport.js +20 -0
  187. package/build/services/mcp/client/tools.d.ts +13 -0
  188. package/build/services/mcp/client/tools.js +18 -0
  189. package/build/services/mcp/db-server/index.js +2 -1
  190. package/build/services/mcp/external-server.d.ts +9 -4
  191. package/build/services/mcp/external-server.js +34 -11
  192. package/build/services/mcp/playwright-server/index.js +2 -1
  193. package/build/services/mcp/registered-tools.d.ts +3 -0
  194. package/build/services/mcp/registered-tools.js +7 -0
  195. package/build/services/mcp/server-lifecycle.js +2 -1
  196. package/build/services/role/index.js +6 -0
  197. package/build/services/role/seed.js +4 -0
  198. package/build/services/scan-code/validate-facts.d.ts +1 -1
  199. package/build/services/scan-code/validate-facts.js +12 -1
  200. package/build/services/workflow-invocation.d.ts +16 -3
  201. package/build/services/workflow-invocation.js +42 -10
  202. package/build/services/yaml-workflow/deployer.d.ts +10 -2
  203. package/build/services/yaml-workflow/deployer.js +17 -5
  204. package/build/services/yaml-workflow/invoke.js +27 -26
  205. package/build/shared/form-validation/x-lt-scan.d.ts +8 -0
  206. package/build/shared/form-validation/x-lt-scan.js +20 -1
  207. package/build/shared/list-schema/index.d.ts +3 -0
  208. package/build/shared/list-schema/index.js +27 -0
  209. package/build/shared/list-schema/template.d.ts +14 -0
  210. package/build/shared/list-schema/template.js +85 -0
  211. package/build/shared/list-schema/types.d.ts +154 -0
  212. package/build/shared/list-schema/types.js +55 -0
  213. package/build/shared/list-schema/validate.d.ts +12 -0
  214. package/build/shared/list-schema/validate.js +204 -0
  215. package/build/shared/roles/segment.d.ts +22 -0
  216. package/build/shared/roles/segment.js +42 -0
  217. package/build/start/adapters.js +2 -0
  218. package/build/start/config.js +7 -0
  219. package/build/start/index.js +4 -22
  220. package/build/start/server.d.ts +6 -4
  221. package/build/start/server.js +11 -35
  222. package/build/start/socket-auth.js +2 -1
  223. package/build/start/workers.js +1 -1
  224. package/build/system/mcp-servers/admin/agent-subscriptions.js +24 -1
  225. package/build/system/mcp-servers/admin/agents.js +25 -2
  226. package/build/system/mcp-servers/admin/announcements.js +3 -2
  227. package/build/system/mcp-servers/admin/bot-accounts.js +37 -5
  228. package/build/system/mcp-servers/admin/escalations.d.ts +3 -5
  229. package/build/system/mcp-servers/admin/escalations.js +74 -70
  230. package/build/system/mcp-servers/admin/exports.js +7 -1
  231. package/build/system/mcp-servers/admin/index.js +24 -25
  232. package/build/system/mcp-servers/admin/overview.d.ts +2 -2
  233. package/build/system/mcp-servers/admin/run-read.d.ts +2 -0
  234. package/build/system/mcp-servers/admin/run-read.js +5 -0
  235. package/build/system/mcp-servers/admin/scan-codes.d.ts +2 -2
  236. package/build/system/mcp-servers/admin/scan-codes.js +5 -11
  237. package/build/system/mcp-servers/admin/schemas.d.ts +20 -20
  238. package/build/system/mcp-servers/admin/tasks.js +7 -2
  239. package/build/system/mcp-servers/admin/users.js +39 -4
  240. package/build/system/mcp-servers/admin/workflow-config.js +12 -1
  241. package/build/system/mcp-servers/admin/workflows.js +27 -5
  242. package/build/system/mcp-servers/admin/yaml-workflows.js +7 -1
  243. package/build/system/mcp-servers/caller-auth.d.ts +18 -0
  244. package/build/system/mcp-servers/caller-auth.js +29 -0
  245. package/build/system/mcp-servers/claude-code.js +2 -1
  246. package/build/system/mcp-servers/db-query/index.js +2 -1
  247. package/build/system/mcp-servers/file-storage.js +2 -1
  248. package/build/system/mcp-servers/http-fetch.js +2 -1
  249. package/build/system/mcp-servers/human-queue.js +7 -3
  250. package/build/system/mcp-servers/oauth.js +31 -4
  251. package/build/system/mcp-servers/schema-exchange.js +2 -1
  252. package/build/system/mcp-servers/vision.d.ts +1 -0
  253. package/build/system/mcp-servers/vision.js +17 -7
  254. package/build/system/seed/tool-manifests-admin.d.ts +2 -17985
  255. package/build/system/seed/tool-manifests-admin.js +121 -121
  256. package/build/system/seed/tool-manifests-data.d.ts +8 -374
  257. package/build/system/seed/tool-manifests-data.js +22 -4
  258. package/build/system/seed/tool-manifests-escalation.d.ts +2 -352
  259. package/build/system/seed/tool-manifests-escalation.js +11 -1
  260. package/build/system/seed/tool-manifests-events.d.ts +2 -116
  261. package/build/system/seed/tool-manifests-events.js +6 -2
  262. package/build/system/seed/tool-manifests-knowledge.d.ts +2 -221
  263. package/build/system/seed/tool-manifests-knowledge.js +41 -1
  264. package/build/system/seed/tool-manifests-workflows.d.ts +2 -71
  265. package/build/system/seed/tool-manifests-workflows.js +3 -1
  266. package/build/system/workflows/shared/principal-tools.d.ts +20 -0
  267. package/build/system/workflows/shared/principal-tools.js +64 -0
  268. package/build/system/workflows/shared/tool-executor.js +21 -11
  269. package/build/system/workflows/shared/tool-loader.js +8 -1
  270. package/build/tsconfig.tsbuildinfo +1 -1
  271. package/build/types/auth.d.ts +1 -1
  272. package/build/types/capability.d.ts +14 -0
  273. package/build/types/capability.js +2 -0
  274. package/build/types/events.d.ts +1 -1
  275. package/build/types/index.d.ts +5 -3
  276. package/build/types/index.js +2 -1
  277. package/build/types/mcp.d.ts +3 -1
  278. package/build/types/oauth-server.d.ts +52 -0
  279. package/build/types/oauth-server.js +2 -0
  280. package/build/types/scan-code/constants.d.ts +7 -0
  281. package/build/types/scan-code/constants.js +7 -1
  282. package/build/types/scan-code/response.d.ts +3 -2
  283. package/build/types/scan-code/rule.d.ts +6 -1
  284. package/build/types/startup.d.ts +23 -7
  285. package/build/vitest.config.js +2 -1
  286. package/build/vitest.fast.config.d.ts +2 -0
  287. package/build/vitest.fast.config.js +20 -0
  288. package/build/vitest.llm.config.d.ts +2 -0
  289. package/build/vitest.llm.config.js +16 -0
  290. package/dashboard/dist/assets/{AdminDashboard-DKrqLGjn.js → AdminDashboard-B3mkMIOT.js} +2 -2
  291. package/dashboard/dist/assets/{AdminDashboard-DKrqLGjn.js.map → AdminDashboard-B3mkMIOT.js.map} +1 -1
  292. package/dashboard/dist/assets/{AgentConfigPage-BoQhRW6U.js → AgentConfigPage-CQj2B678.js} +2 -2
  293. package/dashboard/dist/assets/{AgentConfigPage-BoQhRW6U.js.map → AgentConfigPage-CQj2B678.js.map} +1 -1
  294. package/dashboard/dist/assets/{AgentDetailPage-DZhzuZmO.js → AgentDetailPage-CzrD8JJI.js} +3 -3
  295. package/dashboard/dist/assets/{AgentDetailPage-DZhzuZmO.js.map → AgentDetailPage-CzrD8JJI.js.map} +1 -1
  296. package/dashboard/dist/assets/{AgentsPage-5MynmbWX.js → AgentsPage-jg2OFwyW.js} +2 -2
  297. package/dashboard/dist/assets/{AgentsPage-5MynmbWX.js.map → AgentsPage-jg2OFwyW.js.map} +1 -1
  298. package/dashboard/dist/assets/AvailableEscalationsPage-IS28XBRe.js +2 -0
  299. package/dashboard/dist/assets/AvailableEscalationsPage-IS28XBRe.js.map +1 -0
  300. package/dashboard/dist/assets/{BotPicker-C3LR6Sqy.js → BotPicker-DvEJFpwS.js} +2 -2
  301. package/dashboard/dist/assets/{BotPicker-C3LR6Sqy.js.map → BotPicker-DvEJFpwS.js.map} +1 -1
  302. package/dashboard/dist/assets/{BulkAssignModal-COjoOIIH.js → BulkAssignModal-BoQCi-YC.js} +2 -2
  303. package/dashboard/dist/assets/{BulkAssignModal-COjoOIIH.js.map → BulkAssignModal-BoQCi-YC.js.map} +1 -1
  304. package/dashboard/dist/assets/CapabilitiesPage-kwlrcb_t.js +2 -0
  305. package/dashboard/dist/assets/{CapabilitiesPage-DKxLvOfB.js.map → CapabilitiesPage-kwlrcb_t.js.map} +1 -1
  306. package/dashboard/dist/assets/{CollapsibleSection-Cz5sRx-r.js → CollapsibleSection-UMIV4KIj.js} +2 -2
  307. package/dashboard/dist/assets/{CollapsibleSection-Cz5sRx-r.js.map → CollapsibleSection-UMIV4KIj.js.map} +1 -1
  308. package/dashboard/dist/assets/ConfirmDeleteModal-C5puwMg7.js +2 -0
  309. package/dashboard/dist/assets/ConfirmDeleteModal-C5puwMg7.js.map +1 -0
  310. package/dashboard/dist/assets/ConnectedAppsPage-drZa65kP.js +2 -0
  311. package/dashboard/dist/assets/ConnectedAppsPage-drZa65kP.js.map +1 -0
  312. package/dashboard/dist/assets/CountdownTimer-LG03dVgR.js +2 -0
  313. package/dashboard/dist/assets/CountdownTimer-LG03dVgR.js.map +1 -0
  314. package/dashboard/dist/assets/{CredentialsPage-DhiHiPsG.js → CredentialsPage-CaFQ6vLb.js} +2 -2
  315. package/dashboard/dist/assets/{CredentialsPage-DhiHiPsG.js.map → CredentialsPage-CaFQ6vLb.js.map} +1 -1
  316. package/dashboard/dist/assets/{CronLabel-C9SkawB-.js → CronLabel-Co5j7tzW.js} +2 -2
  317. package/dashboard/dist/assets/{CronLabel-C9SkawB-.js.map → CronLabel-Co5j7tzW.js.map} +1 -1
  318. package/dashboard/dist/assets/DataTable-FjFhx0SE.js +2 -0
  319. package/dashboard/dist/assets/DataTable-FjFhx0SE.js.map +1 -0
  320. package/dashboard/dist/assets/{ElapsedCell-BeK1SUDK.js → ElapsedCell-WJyE9G0T.js} +2 -2
  321. package/dashboard/dist/assets/{ElapsedCell-BeK1SUDK.js.map → ElapsedCell-WJyE9G0T.js.map} +1 -1
  322. package/dashboard/dist/assets/{EntityTimelinePanel-BThdefKj.js → EntityTimelinePanel-CDFFfX9d.js} +2 -2
  323. package/dashboard/dist/assets/{EntityTimelinePanel-BThdefKj.js.map → EntityTimelinePanel-CDFFfX9d.js.map} +1 -1
  324. package/dashboard/dist/assets/{EscalationListSchemaPage-DlDIYb-p.js → EscalationListSchemaPage-CMrUlaKI.js} +3 -3
  325. package/dashboard/dist/assets/{EscalationListSchemaPage-DlDIYb-p.js.map → EscalationListSchemaPage-CMrUlaKI.js.map} +1 -1
  326. package/dashboard/dist/assets/{EscalationSchemaPage-CQt-Embr.js → EscalationSchemaPage-Dx2Lyfrz.js} +3 -3
  327. package/dashboard/dist/assets/{EscalationSchemaPage-CQt-Embr.js.map → EscalationSchemaPage-Dx2Lyfrz.js.map} +1 -1
  328. package/dashboard/dist/assets/EscalationTimeline-d3nvshOk.js +2 -0
  329. package/dashboard/dist/assets/EscalationTimeline-d3nvshOk.js.map +1 -0
  330. package/dashboard/dist/assets/{EscalationTitleSelect-Dewrv8wX.js → EscalationTitleSelect-DWQieOM9.js} +2 -2
  331. package/dashboard/dist/assets/{EscalationTitleSelect-Dewrv8wX.js.map → EscalationTitleSelect-DWQieOM9.js.map} +1 -1
  332. package/dashboard/dist/assets/{EscalationsOverview-BzH-Y-5x.js → EscalationsOverview-BX8Cpi0X.js} +2 -2
  333. package/dashboard/dist/assets/{EscalationsOverview-BzH-Y-5x.js.map → EscalationsOverview-BX8Cpi0X.js.map} +1 -1
  334. package/dashboard/dist/assets/{EventTable-C97m6IZv.js → EventTable-D1-ITVXS.js} +2 -2
  335. package/dashboard/dist/assets/{EventTable-C97m6IZv.js.map → EventTable-D1-ITVXS.js.map} +1 -1
  336. package/dashboard/dist/assets/{FilterBar-D-6xVHIw.js → FilterBar-ABC9ctin.js} +2 -2
  337. package/dashboard/dist/assets/{FilterBar-D-6xVHIw.js.map → FilterBar-ABC9ctin.js.map} +1 -1
  338. package/dashboard/dist/assets/FormattedValue-k27T4bG7.js +2 -0
  339. package/dashboard/dist/assets/FormattedValue-k27T4bG7.js.map +1 -0
  340. package/dashboard/dist/assets/{GraphInvokePage-Bwi8EF9Y.js → GraphInvokePage-DKUErxWc.js} +2 -2
  341. package/dashboard/dist/assets/{GraphInvokePage-Bwi8EF9Y.js.map → GraphInvokePage-DKUErxWc.js.map} +1 -1
  342. package/dashboard/dist/assets/{HomePage-Z_Q03C0z.js → HomePage-C6u9dIpR.js} +2 -2
  343. package/dashboard/dist/assets/{HomePage-Z_Q03C0z.js.map → HomePage-C6u9dIpR.js.map} +1 -1
  344. package/dashboard/dist/assets/{ListToolbar-_jWTw5no.js → ListToolbar-gA5rFzkz.js} +2 -2
  345. package/dashboard/dist/assets/{ListToolbar-_jWTw5no.js.map → ListToolbar-gA5rFzkz.js.map} +1 -1
  346. package/dashboard/dist/assets/{McpOverview-CjqTuP0N.js → McpOverview-BOPo3J_i.js} +2 -2
  347. package/dashboard/dist/assets/{McpOverview-CjqTuP0N.js.map → McpOverview-BOPo3J_i.js.map} +1 -1
  348. package/dashboard/dist/assets/{McpQueryDetailPage-leCsje1U.js → McpQueryDetailPage-BRVVi0Zh.js} +2 -2
  349. package/dashboard/dist/assets/{McpQueryDetailPage-leCsje1U.js.map → McpQueryDetailPage-BRVVi0Zh.js.map} +1 -1
  350. package/dashboard/dist/assets/{McpQueryPage-C-PyXYX4.js → McpQueryPage-Dmbb6SAc.js} +2 -2
  351. package/dashboard/dist/assets/{McpQueryPage-C-PyXYX4.js.map → McpQueryPage-Dmbb6SAc.js.map} +1 -1
  352. package/dashboard/dist/assets/{McpRunDetailPage-JDrr3uUQ.js → McpRunDetailPage-bMXNO-6V.js} +2 -2
  353. package/dashboard/dist/assets/{McpRunDetailPage-JDrr3uUQ.js.map → McpRunDetailPage-bMXNO-6V.js.map} +1 -1
  354. package/dashboard/dist/assets/{McpRunsPage-DERXQLgZ.js → McpRunsPage-Bi9AMWja.js} +2 -2
  355. package/dashboard/dist/assets/{McpRunsPage-DERXQLgZ.js.map → McpRunsPage-Bi9AMWja.js.map} +1 -1
  356. package/dashboard/dist/assets/{OperationsPage-B2DA7n9m.js → OperationsPage-CvR74ZUJ.js} +3 -3
  357. package/dashboard/dist/assets/OperationsPage-CvR74ZUJ.js.map +1 -0
  358. package/dashboard/dist/assets/OperatorDashboard-DctmZw10.js +2 -0
  359. package/dashboard/dist/assets/OperatorDashboard-DctmZw10.js.map +1 -0
  360. package/dashboard/dist/assets/{PersonaDetailPage-ChXwJ6u5.js → PersonaDetailPage-Ubqm2rQH.js} +2 -2
  361. package/dashboard/dist/assets/{PersonaDetailPage-ChXwJ6u5.js.map → PersonaDetailPage-Ubqm2rQH.js.map} +1 -1
  362. package/dashboard/dist/assets/{PersonasPage-BFFxncSE.js → PersonasPage-BpFL2rpo.js} +2 -2
  363. package/dashboard/dist/assets/{PersonasPage-BFFxncSE.js.map → PersonasPage-BpFL2rpo.js.map} +1 -1
  364. package/dashboard/dist/assets/PortalPage-Dfc_Q02R.js +2 -0
  365. package/dashboard/dist/assets/PortalPage-Dfc_Q02R.js.map +1 -0
  366. package/dashboard/dist/assets/ProcessDetailPage-liJspvQh.js +2 -0
  367. package/dashboard/dist/assets/{ProcessDetailPage-D7EYwW-j.js.map → ProcessDetailPage-liJspvQh.js.map} +1 -1
  368. package/dashboard/dist/assets/{ProcessesListPage-CakYRtnE.js → ProcessesListPage-C3OM5ZUy.js} +2 -2
  369. package/dashboard/dist/assets/{ProcessesListPage-CakYRtnE.js.map → ProcessesListPage-C3OM5ZUy.js.map} +1 -1
  370. package/dashboard/dist/assets/ResolverForm-B1_x8Blv.js +8 -0
  371. package/dashboard/dist/assets/ResolverForm-B1_x8Blv.js.map +1 -0
  372. package/dashboard/dist/assets/{RoleDetailPage-CKbGwezP.js → RoleDetailPage-CrlYCh-R.js} +2 -2
  373. package/dashboard/dist/assets/{RoleDetailPage-CKbGwezP.js.map → RoleDetailPage-CrlYCh-R.js.map} +1 -1
  374. package/dashboard/dist/assets/{RolesPage-Czu7Zku4.js → RolesPage-BaazL_pt.js} +2 -2
  375. package/dashboard/dist/assets/{RolesPage-Czu7Zku4.js.map → RolesPage-BaazL_pt.js.map} +1 -1
  376. package/dashboard/dist/assets/{RunAsSelector-6BLScYTX.js → RunAsSelector-DxuV0fa1.js} +2 -2
  377. package/dashboard/dist/assets/{RunAsSelector-6BLScYTX.js.map → RunAsSelector-DxuV0fa1.js.map} +1 -1
  378. package/dashboard/dist/assets/{ScanCodesPage-Cv9q8Bvt.js → ScanCodesPage-C0mvmYTq.js} +2 -2
  379. package/dashboard/dist/assets/{ScanCodesPage-Cv9q8Bvt.js.map → ScanCodesPage-C0mvmYTq.js.map} +1 -1
  380. package/dashboard/dist/assets/{ScanSchemeDetailPage-BxazXYIc.js → ScanSchemeDetailPage-CiJgt5dZ.js} +2 -2
  381. package/dashboard/dist/assets/{ScanSchemeDetailPage-BxazXYIc.js.map → ScanSchemeDetailPage-CiJgt5dZ.js.map} +1 -1
  382. package/dashboard/dist/assets/ScanStationPage-DzGaXc40.js +2 -0
  383. package/dashboard/dist/assets/ScanStationPage-DzGaXc40.js.map +1 -0
  384. package/dashboard/dist/assets/{StickyPagination-DsdtYoXR.js → StickyPagination-CqbjVY6T.js} +2 -2
  385. package/dashboard/dist/assets/{StickyPagination-DsdtYoXR.js.map → StickyPagination-CqbjVY6T.js.map} +1 -1
  386. package/dashboard/dist/assets/{StreamMessageDetail-CT3FQoT3.js → StreamMessageDetail-wX3i0aqs.js} +2 -2
  387. package/dashboard/dist/assets/{StreamMessageDetail-CT3FQoT3.js.map → StreamMessageDetail-wX3i0aqs.js.map} +1 -1
  388. package/dashboard/dist/assets/{SwimlaneTimeline-C8TjkJ10.js → SwimlaneTimeline-C50PsFoV.js} +2 -2
  389. package/dashboard/dist/assets/{SwimlaneTimeline-C8TjkJ10.js.map → SwimlaneTimeline-C50PsFoV.js.map} +1 -1
  390. package/dashboard/dist/assets/{TaskDetailPage-DGUzdBFN.js → TaskDetailPage-bbNSv4Ae.js} +2 -2
  391. package/dashboard/dist/assets/{TaskDetailPage-DGUzdBFN.js.map → TaskDetailPage-bbNSv4Ae.js.map} +1 -1
  392. package/dashboard/dist/assets/{TasksListPage-BVIP6-EZ.js → TasksListPage-CDWnm_d9.js} +2 -2
  393. package/dashboard/dist/assets/{TasksListPage-BVIP6-EZ.js.map → TasksListPage-CDWnm_d9.js.map} +1 -1
  394. package/dashboard/dist/assets/{TimeAgo-C-rd9F9g.js → TimeAgo-BLjqlfoX.js} +2 -2
  395. package/dashboard/dist/assets/{TimeAgo-C-rd9F9g.js.map → TimeAgo-BLjqlfoX.js.map} +1 -1
  396. package/dashboard/dist/assets/{TimestampCell-DPbchDOI.js → TimestampCell-CnW0ENb5.js} +2 -2
  397. package/dashboard/dist/assets/{TimestampCell-DPbchDOI.js.map → TimestampCell-CnW0ENb5.js.map} +1 -1
  398. package/dashboard/dist/assets/{ToolTestPanel-DAUC8DHK.js → ToolTestPanel-DkMgCB-k.js} +2 -2
  399. package/dashboard/dist/assets/{ToolTestPanel-DAUC8DHK.js.map → ToolTestPanel-DkMgCB-k.js.map} +1 -1
  400. package/dashboard/dist/assets/{TopicDetailPage-70mMKBzG.js → TopicDetailPage-g3pljKKX.js} +2 -2
  401. package/dashboard/dist/assets/{TopicDetailPage-70mMKBzG.js.map → TopicDetailPage-g3pljKKX.js.map} +1 -1
  402. package/dashboard/dist/assets/{TopicsPage-CE3hBthn.js → TopicsPage-CVcCYdy-.js} +2 -2
  403. package/dashboard/dist/assets/{TopicsPage-CE3hBthn.js.map → TopicsPage-CVcCYdy-.js.map} +1 -1
  404. package/dashboard/dist/assets/{UserName-BDBDA-LR.js → UserName-D6zGIK2i.js} +2 -2
  405. package/dashboard/dist/assets/{UserName-BDBDA-LR.js.map → UserName-D6zGIK2i.js.map} +1 -1
  406. package/dashboard/dist/assets/{WorkflowExecutionPage-BbkLZ1co.js → WorkflowExecutionPage-B8g81FCJ.js} +2 -2
  407. package/dashboard/dist/assets/{WorkflowExecutionPage-BbkLZ1co.js.map → WorkflowExecutionPage-B8g81FCJ.js.map} +1 -1
  408. package/dashboard/dist/assets/{WorkflowsDashboard-Bp1L7Ggz.js → WorkflowsDashboard-nxT3bv6W.js} +2 -2
  409. package/dashboard/dist/assets/{WorkflowsDashboard-Bp1L7Ggz.js.map → WorkflowsDashboard-nxT3bv6W.js.map} +1 -1
  410. package/dashboard/dist/assets/{WorkflowsOverview-IeTKHAi4.js → WorkflowsOverview-grI-KAI2.js} +2 -2
  411. package/dashboard/dist/assets/{WorkflowsOverview-IeTKHAi4.js.map → WorkflowsOverview-grI-KAI2.js.map} +1 -1
  412. package/dashboard/dist/assets/{YamlWorkflowDetailPage-DtKCXnKt.js → YamlWorkflowDetailPage-BoZ-hfBE.js} +2 -2
  413. package/dashboard/dist/assets/{YamlWorkflowDetailPage-DtKCXnKt.js.map → YamlWorkflowDetailPage-BoZ-hfBE.js.map} +1 -1
  414. package/dashboard/dist/assets/{YamlWorkflowsPage-CEcZBV_3.js → YamlWorkflowsPage-Bf04rwRv.js} +2 -2
  415. package/dashboard/dist/assets/{YamlWorkflowsPage-CEcZBV_3.js.map → YamlWorkflowsPage-Bf04rwRv.js.map} +1 -1
  416. package/dashboard/dist/assets/{agents-BT-sEk81.js → agents-Dphpdi8l.js} +2 -2
  417. package/dashboard/dist/assets/{agents-BT-sEk81.js.map → agents-Dphpdi8l.js.map} +1 -1
  418. package/dashboard/dist/assets/{bots-DRoAdLek.js → bots-DIFE298x.js} +2 -2
  419. package/dashboard/dist/assets/{bots-DRoAdLek.js.map → bots-DIFE298x.js.map} +1 -1
  420. package/dashboard/dist/assets/{capabilities-Bc-nJk6y.js → capabilities-D7Y7LClY.js} +2 -2
  421. package/dashboard/dist/assets/{capabilities-Bc-nJk6y.js.map → capabilities-D7Y7LClY.js.map} +1 -1
  422. package/dashboard/dist/assets/{controlplane-aXceSIRf.js → controlplane-D1TGcYsS.js} +2 -2
  423. package/dashboard/dist/assets/{controlplane-aXceSIRf.js.map → controlplane-D1TGcYsS.js.map} +1 -1
  424. package/dashboard/dist/assets/escalation-columns-cwZE6xyo.js +2 -0
  425. package/dashboard/dist/assets/escalation-columns-cwZE6xyo.js.map +1 -0
  426. package/dashboard/dist/assets/{index-CuBGGwXf.js → index-BzYcUPdD.js} +2 -2
  427. package/dashboard/dist/assets/{index-CuBGGwXf.js.map → index-BzYcUPdD.js.map} +1 -1
  428. package/dashboard/dist/assets/index-CeCtqujG.js +67 -0
  429. package/dashboard/dist/assets/index-CeCtqujG.js.map +1 -0
  430. package/dashboard/dist/assets/{index-h2gX31B2.js → index-ChV7pBjM.js} +2 -2
  431. package/dashboard/dist/assets/{index-h2gX31B2.js.map → index-ChV7pBjM.js.map} +1 -1
  432. package/dashboard/dist/assets/index-CniRa65p.js +3 -0
  433. package/dashboard/dist/assets/index-CniRa65p.js.map +1 -0
  434. package/dashboard/dist/assets/index-CxdjT1Yk.js +2 -0
  435. package/dashboard/dist/assets/{index-BCFEQEMC.js.map → index-CxdjT1Yk.js.map} +1 -1
  436. package/dashboard/dist/assets/{index-CZyO9hRb.js → index-DAvi5_2T.js} +2 -2
  437. package/dashboard/dist/assets/{index-CZyO9hRb.js.map → index-DAvi5_2T.js.map} +1 -1
  438. package/dashboard/dist/assets/{index-Djsoi8DI.js → index-DN-kX7hL.js} +2 -2
  439. package/dashboard/dist/assets/{index-Djsoi8DI.js.map → index-DN-kX7hL.js.map} +1 -1
  440. package/dashboard/dist/assets/index-Dl_8hbYI.js +2 -0
  441. package/dashboard/dist/assets/index-Dl_8hbYI.js.map +1 -0
  442. package/dashboard/dist/assets/{index-DBxpyIw5.js → index-DpKOr311.js} +2 -2
  443. package/dashboard/dist/assets/{index-DBxpyIw5.js.map → index-DpKOr311.js.map} +1 -1
  444. package/dashboard/dist/assets/{index-Ba-s5Yb5.js → index-Dy1wWu2e.js} +2 -2
  445. package/dashboard/dist/assets/{index-Ba-s5Yb5.js.map → index-Dy1wWu2e.js.map} +1 -1
  446. package/dashboard/dist/assets/{index-DH03y-UT.js → index-HLu98Sqh.js} +2 -2
  447. package/dashboard/dist/assets/{index-DH03y-UT.js.map → index-HLu98Sqh.js.map} +1 -1
  448. package/dashboard/dist/assets/{index-C3VTJcrp.js → index-ag2pCAPu.js} +2 -2
  449. package/dashboard/dist/assets/{index-C3VTJcrp.js.map → index-ag2pCAPu.js.map} +1 -1
  450. package/dashboard/dist/assets/index-gkxPN7Vx.js +13 -0
  451. package/dashboard/dist/assets/{index-BEPKAjna.js.map → index-gkxPN7Vx.js.map} +1 -1
  452. package/dashboard/dist/assets/index-m9A3UYst.css +1 -0
  453. package/dashboard/dist/assets/{knowledge-BhW8V-Hq.js → knowledge-DnMs-SOJ.js} +2 -2
  454. package/dashboard/dist/assets/{knowledge-BhW8V-Hq.js.map → knowledge-DnMs-SOJ.js.map} +1 -1
  455. package/dashboard/dist/assets/{mcp-BYfSMQzh.js → mcp-CwW-K3r4.js} +2 -2
  456. package/dashboard/dist/assets/{mcp-BYfSMQzh.js.map → mcp-CwW-K3r4.js.map} +1 -1
  457. package/dashboard/dist/assets/{mcp-query-DUJoOk_q.js → mcp-query-BZt5e8_Q.js} +2 -2
  458. package/dashboard/dist/assets/{mcp-query-DUJoOk_q.js.map → mcp-query-BZt5e8_Q.js.map} +1 -1
  459. package/dashboard/dist/assets/{personas-jT1O_SB4.js → personas-UA-Xn60f.js} +2 -2
  460. package/dashboard/dist/assets/{personas-jT1O_SB4.js.map → personas-UA-Xn60f.js.map} +1 -1
  461. package/dashboard/dist/assets/{pipelines-Bp-wIaz2.js → pipelines-Cu3PARum.js} +2 -2
  462. package/dashboard/dist/assets/{pipelines-Bp-wIaz2.js.map → pipelines-Cu3PARum.js.map} +1 -1
  463. package/dashboard/dist/assets/{tasks-CCrvnXbz.js → tasks-BO6h8GJE.js} +2 -2
  464. package/dashboard/dist/assets/{tasks-CCrvnXbz.js.map → tasks-BO6h8GJE.js.map} +1 -1
  465. package/dashboard/dist/assets/{topics-Blft0I1L.js → topics-CWjCR-17.js} +2 -2
  466. package/dashboard/dist/assets/{topics-Blft0I1L.js.map → topics-CWjCR-17.js.map} +1 -1
  467. package/dashboard/dist/assets/{useDebouncedValue-BYqbcism.js → useDebouncedValue-6t0jx1RB.js} +2 -2
  468. package/dashboard/dist/assets/{useDebouncedValue-BYqbcism.js.map → useDebouncedValue-6t0jx1RB.js.map} +1 -1
  469. package/dashboard/dist/assets/{useNamespace-BfxJAUgG.js → useNamespace-CqpoQx6D.js} +2 -2
  470. package/dashboard/dist/assets/{useNamespace-BfxJAUgG.js.map → useNamespace-CqpoQx6D.js.map} +1 -1
  471. package/dashboard/dist/assets/{useYamlActivityEvents-BukJuWpb.js → useYamlActivityEvents-hmCQQwzB.js} +2 -2
  472. package/dashboard/dist/assets/{useYamlActivityEvents-BukJuWpb.js.map → useYamlActivityEvents-hmCQQwzB.js.map} +1 -1
  473. package/dashboard/dist/assets/validate-BIRn4a6d.js +2 -0
  474. package/dashboard/dist/assets/validate-BIRn4a6d.js.map +1 -0
  475. package/dashboard/dist/assets/{yaml-workflows-DeRWqMGk.js → yaml-workflows-ziUdZhKY.js} +2 -2
  476. package/dashboard/dist/assets/{yaml-workflows-DeRWqMGk.js.map → yaml-workflows-ziUdZhKY.js.map} +1 -1
  477. package/dashboard/dist/index.html +2 -2
  478. package/docs/agents.md +3 -1
  479. package/docs/api/http/agents.md +15 -1
  480. package/docs/api/http/escalations.md +49 -3
  481. package/docs/api/http/exports.md +3 -1
  482. package/docs/api/http/file-browser.md +3 -1
  483. package/docs/api/http/mcp-endpoint.md +5 -2
  484. package/docs/api/http/mcp-servers.md +34 -4
  485. package/docs/api/http/namespaces.md +2 -0
  486. package/docs/api/http/pipelines.md +2 -0
  487. package/docs/api/http/roles.md +11 -8
  488. package/docs/api/http/service-accounts.md +8 -2
  489. package/docs/api/http/settings.md +29 -2
  490. package/docs/api/http/tasks.md +3 -1
  491. package/docs/api/http/topics.md +7 -1
  492. package/docs/api/http/users.md +8 -2
  493. package/docs/api/http/workflows.md +25 -10
  494. package/docs/api/http/yaml-workflows.md +21 -0
  495. package/docs/api/mcp/admin.md +409 -49
  496. package/docs/api/mcp/file-storage.md +4 -0
  497. package/docs/api/mcp/http-fetch.md +6 -2
  498. package/docs/api/mcp/human-queue.md +53 -0
  499. package/docs/api/mcp/index.md +13 -10
  500. package/docs/api/mcp/knowledge.md +34 -0
  501. package/docs/api/mcp/oauth.md +1 -1
  502. package/docs/api/mcp/ortho.md +113 -0
  503. package/docs/api/mcp/vision.md +1 -1
  504. package/docs/api/sdk/bot-accounts.md +1 -0
  505. package/docs/api/sdk/escalations.md +18 -2
  506. package/docs/api/sdk/mcp.md +2 -2
  507. package/docs/api/sdk/settings.md +1 -1
  508. package/docs/api/sdk/tasks.md +2 -2
  509. package/docs/api/sdk/workflows.md +2 -2
  510. package/docs/api/sdk/yaml-workflows.md +1 -1
  511. package/docs/architecture.md +3 -1
  512. package/docs/auth.md +3 -2
  513. package/docs/cloud.md +7 -2
  514. package/docs/code-owned-configuration.md +12 -0
  515. package/docs/dashboard.md +16 -7
  516. package/docs/data.md +1 -1
  517. package/docs/escalation-strategies.md +9 -20
  518. package/docs/events.md +6 -0
  519. package/docs/hitl/portal.md +2 -0
  520. package/docs/hitl/x-lt-list-schema.md +88 -1
  521. package/docs/hitl/x-lt-scan.md +4 -1
  522. package/docs/iam.md +7 -5
  523. package/docs/mcp.md +159 -210
  524. package/docs/oauth-and-delegation.md +32 -21
  525. package/docs/scan-codes.md +7 -1
  526. package/docs/topics.md +2 -0
  527. package/docs/workflows.md +14 -112
  528. package/package.json +6 -3
  529. package/dashboard/dist/assets/AvailableEscalationsPage-CWMyy3IL.js +0 -2
  530. package/dashboard/dist/assets/AvailableEscalationsPage-CWMyy3IL.js.map +0 -1
  531. package/dashboard/dist/assets/CapabilitiesPage-DKxLvOfB.js +0 -2
  532. package/dashboard/dist/assets/ConfirmDeleteModal-Beq1vQtY.js +0 -2
  533. package/dashboard/dist/assets/ConfirmDeleteModal-Beq1vQtY.js.map +0 -1
  534. package/dashboard/dist/assets/CountdownTimer-BUBl_4mP.js +0 -2
  535. package/dashboard/dist/assets/CountdownTimer-BUBl_4mP.js.map +0 -1
  536. package/dashboard/dist/assets/DataTable-spX1dFyb.js +0 -2
  537. package/dashboard/dist/assets/DataTable-spX1dFyb.js.map +0 -1
  538. package/dashboard/dist/assets/EscalationListView-DTIVuym4.js +0 -2
  539. package/dashboard/dist/assets/EscalationListView-DTIVuym4.js.map +0 -1
  540. package/dashboard/dist/assets/EscalationTimeline-DNKNp6pL.js +0 -2
  541. package/dashboard/dist/assets/EscalationTimeline-DNKNp6pL.js.map +0 -1
  542. package/dashboard/dist/assets/OperationsPage-B2DA7n9m.js.map +0 -1
  543. package/dashboard/dist/assets/OperatorDashboard-C8RtPv8P.js +0 -2
  544. package/dashboard/dist/assets/OperatorDashboard-C8RtPv8P.js.map +0 -1
  545. package/dashboard/dist/assets/PortalPage-Xk1zVneM.js +0 -2
  546. package/dashboard/dist/assets/PortalPage-Xk1zVneM.js.map +0 -1
  547. package/dashboard/dist/assets/ProcessDetailPage-D7EYwW-j.js +0 -2
  548. package/dashboard/dist/assets/ResolverForm-BwVOJUpJ.js +0 -8
  549. package/dashboard/dist/assets/ResolverForm-BwVOJUpJ.js.map +0 -1
  550. package/dashboard/dist/assets/ScanStationPage-Cg8LCFR7.js +0 -2
  551. package/dashboard/dist/assets/ScanStationPage-Cg8LCFR7.js.map +0 -1
  552. package/dashboard/dist/assets/escalation-columns-Bf09Q89t.js +0 -2
  553. package/dashboard/dist/assets/escalation-columns-Bf09Q89t.js.map +0 -1
  554. package/dashboard/dist/assets/index-BCFEQEMC.js +0 -2
  555. package/dashboard/dist/assets/index-BEPKAjna.js +0 -13
  556. package/dashboard/dist/assets/index-BUYokcrl.js +0 -67
  557. package/dashboard/dist/assets/index-BUYokcrl.js.map +0 -1
  558. package/dashboard/dist/assets/index-CcgmR-7-.js +0 -2
  559. package/dashboard/dist/assets/index-CcgmR-7-.js.map +0 -1
  560. package/dashboard/dist/assets/index-D1mKf_qz.js +0 -3
  561. package/dashboard/dist/assets/index-D1mKf_qz.js.map +0 -1
  562. package/dashboard/dist/assets/index-DcppjzP5.css +0 -1
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createWellKnownRouter = createWellKnownRouter;
4
+ const http_1 = require("../lib/http");
5
+ const oauth_server_1 = require("../modules/oauth-server");
6
+ const metadata_1 = require("../services/auth/oauth-server/metadata");
7
+ /**
8
+ * The two OAuth well-known documents, mounted at the host's root. Answers
9
+ * exactly those paths and passes every other request on, so it never shadows
10
+ * the host's routes. Paths are computed per request because the issuer is
11
+ * configured after the router is mounted.
12
+ */
13
+ function createWellKnownRouter() {
14
+ const router = (0, http_1.Router)();
15
+ const cors = (0, http_1.allowAnyOrigin)(['GET']);
16
+ router.use((req, res, next) => {
17
+ const settings = (0, oauth_server_1.getOAuthServerSettings)();
18
+ if (!settings || (req.method !== 'GET' && req.method !== 'OPTIONS'))
19
+ return next();
20
+ const paths = (0, metadata_1.wellKnownPaths)(settings);
21
+ const document = req.path === paths.authorizationServer
22
+ ? (0, metadata_1.authorizationServerMetadata)(settings)
23
+ : req.path === paths.protectedResource
24
+ ? (0, metadata_1.protectedResourceMetadata)(settings)
25
+ : null;
26
+ if (!document)
27
+ return next();
28
+ cors(req, res, () => res.json(document));
29
+ });
30
+ return router;
31
+ }
@@ -1,12 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.setOAuthConfig = setOAuthConfig;
4
- const express_1 = require("express");
4
+ const http_1 = require("../lib/http");
5
5
  const auth_1 = require("../modules/auth");
6
6
  const logger_1 = require("../lib/logger");
7
7
  const oauth_1 = require("../services/oauth");
8
8
  const user_1 = require("../services/user");
9
- const router = (0, express_1.Router)();
9
+ const router = (0, http_1.Router)();
10
10
  // ── OAuth startup config (set by initializeOAuth) ────────────────────────────
11
11
  let _oauthConfig = {
12
12
  autoProvision: true,
@@ -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/overview"));
38
- const router = (0, express_1.Router)();
38
+ const router = (0, http_1.Router)();
39
39
  /**
40
40
  * GET /api/overview?period=24h
41
41
  * System overview — triage, throughput, trends, infrastructure, processes.
@@ -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/personas"));
39
- const router = (0, express_1.Router)();
39
+ const router = (0, http_1.Router)();
40
40
  // Personas are role bundles — a management surface. Reads and writes share the
41
41
  // role-management gate (admin type, superadmin, engineer), the same audience
42
42
  // that manages roles and users.
@@ -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
  /**