@hotmeshio/long-tail 0.23.2 → 0.24.1

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 (499) hide show
  1. package/build/adapters/express.d.ts +11 -1
  2. package/build/adapters/express.js +42 -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/cron.d.ts +3 -2
  26. package/build/api/yaml-workflows/cron.js +6 -1
  27. package/build/api/yaml-workflows/deploy.d.ts +15 -2
  28. package/build/api/yaml-workflows/deploy.js +69 -2
  29. package/build/lib/db/schemas/038_oauth_server.sql +46 -0
  30. package/build/lib/db/schemas/039_nats_ws_tickets.sql +12 -0
  31. package/build/lib/events/browser-view.d.ts +20 -0
  32. package/build/lib/events/browser-view.js +117 -0
  33. package/build/lib/events/nats-ws-filter.d.ts +29 -0
  34. package/build/lib/events/nats-ws-filter.js +109 -0
  35. package/build/lib/events/nats-ws-proxy.d.ts +7 -0
  36. package/build/lib/events/nats-ws-proxy.js +86 -7
  37. package/build/lib/events/nats-ws-server-filter.d.ts +16 -0
  38. package/build/lib/events/nats-ws-server-filter.js +56 -0
  39. package/build/lib/events/nats-ws-ticket.d.ts +19 -0
  40. package/build/lib/events/nats-ws-ticket.js +63 -0
  41. package/build/lib/events/socketio.d.ts +10 -1
  42. package/build/lib/events/socketio.js +10 -3
  43. package/build/lib/http/index.d.ts +27 -0
  44. package/build/lib/http/index.js +55 -0
  45. package/build/modules/auth.d.ts +15 -24
  46. package/build/modules/auth.js +43 -126
  47. package/build/modules/capabilities.d.ts +62 -0
  48. package/build/modules/capabilities.js +188 -0
  49. package/build/modules/config.d.ts +19 -0
  50. package/build/modules/config.js +27 -0
  51. package/build/modules/defaults.d.ts +10 -0
  52. package/build/modules/defaults.js +12 -1
  53. package/build/modules/maintenance.d.ts +2 -0
  54. package/build/modules/maintenance.js +7 -0
  55. package/build/modules/mcp-auth.d.ts +11 -0
  56. package/build/modules/mcp-auth.js +56 -0
  57. package/build/modules/oauth-server.d.ts +18 -0
  58. package/build/modules/oauth-server.js +40 -0
  59. package/build/routes/agents.js +47 -14
  60. package/build/routes/announcements.js +2 -2
  61. package/build/routes/auth-sso.js +2 -2
  62. package/build/routes/auth.js +2 -2
  63. package/build/routes/bot-accounts.js +26 -3
  64. package/build/routes/capabilities.js +4 -4
  65. package/build/routes/controlplane.js +2 -2
  66. package/build/routes/dba.js +2 -2
  67. package/build/routes/delegation.js +2 -2
  68. package/build/routes/diagnostics.js +2 -2
  69. package/build/routes/docs.js +2 -2
  70. package/build/routes/domain.js +2 -2
  71. package/build/routes/escalations/accumulate.d.ts +1 -1
  72. package/build/routes/escalations/acting.d.ts +1 -1
  73. package/build/routes/escalations/analytics.d.ts +1 -1
  74. package/build/routes/escalations/bulk.d.ts +1 -1
  75. package/build/routes/escalations/facets.d.ts +1 -1
  76. package/build/routes/escalations/index.js +2 -2
  77. package/build/routes/escalations/list.d.ts +1 -1
  78. package/build/routes/escalations/metadata.d.ts +1 -1
  79. package/build/routes/escalations/related.d.ts +1 -1
  80. package/build/routes/escalations/resolve.d.ts +1 -1
  81. package/build/routes/escalations/single.d.ts +1 -1
  82. package/build/routes/escalations/single.js +1 -1
  83. package/build/routes/exports.js +14 -13
  84. package/build/routes/file-browser.js +9 -8
  85. package/build/routes/files.js +2 -2
  86. package/build/routes/index.js +4 -2
  87. package/build/routes/insight.js +5 -4
  88. package/build/routes/knowledge.js +2 -2
  89. package/build/routes/maintenance.js +2 -2
  90. package/build/routes/mcp-endpoint.d.ts +3 -1
  91. package/build/routes/mcp-endpoint.js +18 -8
  92. package/build/routes/mcp.js +35 -15
  93. package/build/routes/me.js +2 -2
  94. package/build/routes/namespaces.js +4 -3
  95. package/build/routes/nats-credentials.js +27 -3
  96. package/build/routes/oauth-server/authorize.d.ts +2 -0
  97. package/build/routes/oauth-server/authorize.js +110 -0
  98. package/build/routes/oauth-server/grants.d.ts +2 -0
  99. package/build/routes/oauth-server/grants.js +35 -0
  100. package/build/routes/oauth-server/index.d.ts +8 -0
  101. package/build/routes/oauth-server/index.js +52 -0
  102. package/build/routes/oauth-server/registration.d.ts +2 -0
  103. package/build/routes/oauth-server/registration.js +38 -0
  104. package/build/routes/oauth-server/token.d.ts +2 -0
  105. package/build/routes/oauth-server/token.js +100 -0
  106. package/build/routes/oauth-well-known.d.ts +8 -0
  107. package/build/routes/oauth-well-known.js +31 -0
  108. package/build/routes/oauth.js +2 -2
  109. package/build/routes/overview.js +2 -2
  110. package/build/routes/personas.js +2 -2
  111. package/build/routes/pipelines.js +6 -5
  112. package/build/routes/roles.js +2 -2
  113. package/build/routes/scan-codes.js +2 -2
  114. package/build/routes/settings.js +2 -2
  115. package/build/routes/tasks.js +5 -5
  116. package/build/routes/topics.js +21 -9
  117. package/build/routes/users.js +25 -22
  118. package/build/routes/workflow-sets.js +13 -12
  119. package/build/routes/workflows/config.js +15 -2
  120. package/build/routes/workflows/discovery.js +2 -2
  121. package/build/routes/workflows/index.js +2 -2
  122. package/build/routes/workflows/invocation.js +11 -10
  123. package/build/routes/yaml-workflows/cron.js +20 -7
  124. package/build/routes/yaml-workflows/crud.js +13 -12
  125. package/build/routes/yaml-workflows/deployment.js +11 -10
  126. package/build/routes/yaml-workflows/index.js +2 -2
  127. package/build/routes/yaml-workflows/versions.js +2 -2
  128. package/build/services/agent/authority.d.ts +15 -0
  129. package/build/services/agent/authority.js +59 -0
  130. package/build/services/agent/trigger-registry.js +7 -2
  131. package/build/services/auth/bot-api-key.d.ts +2 -0
  132. package/build/services/auth/bot-api-key.js +10 -0
  133. package/build/services/auth/oauth-server/access-token.d.ts +36 -0
  134. package/build/services/auth/oauth-server/access-token.js +80 -0
  135. package/build/services/auth/oauth-server/authorization.d.ts +47 -0
  136. package/build/services/auth/oauth-server/authorization.js +54 -0
  137. package/build/services/auth/oauth-server/constants.d.ts +11 -0
  138. package/build/services/auth/oauth-server/constants.js +16 -0
  139. package/build/services/auth/oauth-server/index.d.ts +3 -0
  140. package/build/services/auth/oauth-server/index.js +27 -0
  141. package/build/services/auth/oauth-server/metadata.d.ts +21 -0
  142. package/build/services/auth/oauth-server/metadata.js +53 -0
  143. package/build/services/auth/oauth-server/registration.d.ts +42 -0
  144. package/build/services/auth/oauth-server/registration.js +134 -0
  145. package/build/services/auth/oauth-server/sql.d.ts +50 -0
  146. package/build/services/auth/oauth-server/sql.js +156 -0
  147. package/build/services/auth/oauth-server/store.d.ts +88 -0
  148. package/build/services/auth/oauth-server/store.js +171 -0
  149. package/build/services/auth/sql.d.ts +1 -0
  150. package/build/services/auth/sql.js +3 -1
  151. package/build/services/cron/index.js +5 -3
  152. package/build/services/escalation/queries.js +7 -2
  153. package/build/services/export/index.d.ts +10 -0
  154. package/build/services/export/index.js +27 -0
  155. package/build/services/invocation-access.d.ts +25 -4
  156. package/build/services/invocation-access.js +39 -7
  157. package/build/services/maintenance/index.js +8 -0
  158. package/build/services/mcp/client/connection-dispatch.d.ts +6 -1
  159. package/build/services/mcp/client/connection-dispatch.js +3 -2
  160. package/build/services/mcp/client/connection-lifecycle.d.ts +10 -2
  161. package/build/services/mcp/client/connection-lifecycle.js +45 -7
  162. package/build/services/mcp/client/connection-test.js +2 -6
  163. package/build/services/mcp/client/connection.d.ts +1 -1
  164. package/build/services/mcp/client/connection.js +3 -1
  165. package/build/services/mcp/client/index.d.ts +2 -2
  166. package/build/services/mcp/client/index.js +4 -1
  167. package/build/services/mcp/client/network-transport.d.ts +12 -0
  168. package/build/services/mcp/client/network-transport.js +20 -0
  169. package/build/services/mcp/client/tools.d.ts +13 -0
  170. package/build/services/mcp/client/tools.js +18 -0
  171. package/build/services/mcp/db-server/index.js +2 -1
  172. package/build/services/mcp/external-server.d.ts +9 -4
  173. package/build/services/mcp/external-server.js +34 -11
  174. package/build/services/mcp/playwright-server/index.js +2 -1
  175. package/build/services/mcp/registered-tools.d.ts +3 -0
  176. package/build/services/mcp/registered-tools.js +7 -0
  177. package/build/services/mcp/seed-service-account.d.ts +4 -1
  178. package/build/services/mcp/seed-service-account.js +11 -6
  179. package/build/services/mcp/server-lifecycle.js +2 -1
  180. package/build/services/workflow-invocation.d.ts +16 -3
  181. package/build/services/workflow-invocation.js +42 -10
  182. package/build/services/yaml-workflow/deployer.d.ts +10 -2
  183. package/build/services/yaml-workflow/deployer.js +17 -5
  184. package/build/services/yaml-workflow/invoke.js +31 -26
  185. package/build/services/yaml-workflow/workers/register.js +3 -13
  186. package/build/services/yaml-workflow/workers/step-tool.d.ts +7 -0
  187. package/build/services/yaml-workflow/workers/step-tool.js +69 -0
  188. package/build/start/config.js +7 -0
  189. package/build/start/index.js +4 -22
  190. package/build/start/server.d.ts +6 -4
  191. package/build/start/server.js +11 -35
  192. package/build/start/socket-auth.js +2 -1
  193. package/build/start/workers.js +1 -1
  194. package/build/system/mcp-servers/admin/agent-subscriptions.js +25 -1
  195. package/build/system/mcp-servers/admin/agents.js +25 -2
  196. package/build/system/mcp-servers/admin/announcements.js +3 -2
  197. package/build/system/mcp-servers/admin/bot-accounts.js +37 -5
  198. package/build/system/mcp-servers/admin/escalations.d.ts +3 -5
  199. package/build/system/mcp-servers/admin/escalations.js +74 -70
  200. package/build/system/mcp-servers/admin/exports.js +7 -1
  201. package/build/system/mcp-servers/admin/index.js +24 -25
  202. package/build/system/mcp-servers/admin/overview.d.ts +2 -2
  203. package/build/system/mcp-servers/admin/run-read.d.ts +2 -0
  204. package/build/system/mcp-servers/admin/run-read.js +5 -0
  205. package/build/system/mcp-servers/admin/scan-codes.d.ts +2 -2
  206. package/build/system/mcp-servers/admin/scan-codes.js +5 -11
  207. package/build/system/mcp-servers/admin/schemas.d.ts +26 -26
  208. package/build/system/mcp-servers/admin/tasks.js +7 -2
  209. package/build/system/mcp-servers/admin/users.js +31 -4
  210. package/build/system/mcp-servers/admin/workflow-config.js +12 -1
  211. package/build/system/mcp-servers/admin/workflows.js +27 -5
  212. package/build/system/mcp-servers/admin/yaml-workflows.js +13 -21
  213. package/build/system/mcp-servers/caller-auth.d.ts +18 -0
  214. package/build/system/mcp-servers/caller-auth.js +29 -0
  215. package/build/system/mcp-servers/claude-code.js +2 -1
  216. package/build/system/mcp-servers/db-query/index.js +2 -1
  217. package/build/system/mcp-servers/file-storage.js +2 -1
  218. package/build/system/mcp-servers/http-fetch.js +2 -1
  219. package/build/system/mcp-servers/human-queue.js +7 -3
  220. package/build/system/mcp-servers/oauth.js +31 -4
  221. package/build/system/mcp-servers/schema-exchange.js +2 -1
  222. package/build/system/mcp-servers/vision.d.ts +1 -0
  223. package/build/system/mcp-servers/vision.js +17 -7
  224. package/build/system/mcp-servers/workflow.js +13 -25
  225. package/build/system/seed/tool-manifests-admin.d.ts +2 -17985
  226. package/build/system/seed/tool-manifests-admin.js +121 -121
  227. package/build/system/seed/tool-manifests-data.d.ts +8 -374
  228. package/build/system/seed/tool-manifests-data.js +22 -4
  229. package/build/system/seed/tool-manifests-escalation.d.ts +2 -352
  230. package/build/system/seed/tool-manifests-escalation.js +11 -1
  231. package/build/system/seed/tool-manifests-events.d.ts +2 -116
  232. package/build/system/seed/tool-manifests-events.js +6 -2
  233. package/build/system/seed/tool-manifests-knowledge.d.ts +2 -221
  234. package/build/system/seed/tool-manifests-knowledge.js +41 -1
  235. package/build/system/seed/tool-manifests-workflows.d.ts +2 -71
  236. package/build/system/seed/tool-manifests-workflows.js +3 -1
  237. package/build/system/workflows/shared/principal-tools.d.ts +20 -0
  238. package/build/system/workflows/shared/principal-tools.js +64 -0
  239. package/build/system/workflows/shared/tool-executor.js +21 -11
  240. package/build/system/workflows/shared/tool-loader.js +8 -1
  241. package/build/tsconfig.tsbuildinfo +1 -1
  242. package/build/types/auth.d.ts +1 -1
  243. package/build/types/capability.d.ts +14 -0
  244. package/build/types/capability.js +2 -0
  245. package/build/types/events.d.ts +1 -1
  246. package/build/types/index.d.ts +3 -1
  247. package/build/types/maintenance.d.ts +2 -2
  248. package/build/types/mcp.d.ts +3 -1
  249. package/build/types/oauth-server.d.ts +52 -0
  250. package/build/types/oauth-server.js +2 -0
  251. package/build/types/startup.d.ts +15 -7
  252. package/build/vitest.config.js +2 -1
  253. package/build/vitest.fast.config.d.ts +2 -0
  254. package/build/vitest.fast.config.js +20 -0
  255. package/build/vitest.llm.config.d.ts +2 -0
  256. package/build/vitest.llm.config.js +16 -0
  257. package/dashboard/dist/assets/{AdminDashboard-BPWsgMfZ.js → AdminDashboard-B3mkMIOT.js} +2 -2
  258. package/dashboard/dist/assets/{AdminDashboard-BPWsgMfZ.js.map → AdminDashboard-B3mkMIOT.js.map} +1 -1
  259. package/dashboard/dist/assets/{AgentConfigPage-De9imyo5.js → AgentConfigPage-CQj2B678.js} +2 -2
  260. package/dashboard/dist/assets/{AgentConfigPage-De9imyo5.js.map → AgentConfigPage-CQj2B678.js.map} +1 -1
  261. package/dashboard/dist/assets/{AgentDetailPage-B6o96Y5G.js → AgentDetailPage-CzrD8JJI.js} +3 -3
  262. package/dashboard/dist/assets/{AgentDetailPage-B6o96Y5G.js.map → AgentDetailPage-CzrD8JJI.js.map} +1 -1
  263. package/dashboard/dist/assets/{AgentsPage-DMEmiK_W.js → AgentsPage-jg2OFwyW.js} +2 -2
  264. package/dashboard/dist/assets/{AgentsPage-DMEmiK_W.js.map → AgentsPage-jg2OFwyW.js.map} +1 -1
  265. package/dashboard/dist/assets/{AvailableEscalationsPage-DeYMngwE.js → AvailableEscalationsPage-IS28XBRe.js} +2 -2
  266. package/dashboard/dist/assets/{AvailableEscalationsPage-DeYMngwE.js.map → AvailableEscalationsPage-IS28XBRe.js.map} +1 -1
  267. package/dashboard/dist/assets/{BotPicker-DDmpgGHZ.js → BotPicker-DvEJFpwS.js} +2 -2
  268. package/dashboard/dist/assets/{BotPicker-DDmpgGHZ.js.map → BotPicker-DvEJFpwS.js.map} +1 -1
  269. package/dashboard/dist/assets/{BulkAssignModal-BqlklomG.js → BulkAssignModal-BoQCi-YC.js} +2 -2
  270. package/dashboard/dist/assets/{BulkAssignModal-BqlklomG.js.map → BulkAssignModal-BoQCi-YC.js.map} +1 -1
  271. package/dashboard/dist/assets/{CapabilitiesPage-DOtjDTbK.js → CapabilitiesPage-kwlrcb_t.js} +2 -2
  272. package/dashboard/dist/assets/{CapabilitiesPage-DOtjDTbK.js.map → CapabilitiesPage-kwlrcb_t.js.map} +1 -1
  273. package/dashboard/dist/assets/{CollapsibleSection-CLr8LP0V.js → CollapsibleSection-UMIV4KIj.js} +2 -2
  274. package/dashboard/dist/assets/{CollapsibleSection-CLr8LP0V.js.map → CollapsibleSection-UMIV4KIj.js.map} +1 -1
  275. package/dashboard/dist/assets/ConfirmDeleteModal-C5puwMg7.js +2 -0
  276. package/dashboard/dist/assets/ConfirmDeleteModal-C5puwMg7.js.map +1 -0
  277. package/dashboard/dist/assets/ConnectedAppsPage-drZa65kP.js +2 -0
  278. package/dashboard/dist/assets/ConnectedAppsPage-drZa65kP.js.map +1 -0
  279. package/dashboard/dist/assets/{CountdownTimer-DxX72PwV.js → CountdownTimer-LG03dVgR.js} +2 -2
  280. package/dashboard/dist/assets/{CountdownTimer-DxX72PwV.js.map → CountdownTimer-LG03dVgR.js.map} +1 -1
  281. package/dashboard/dist/assets/{CredentialsPage-CObc9Rs5.js → CredentialsPage-CaFQ6vLb.js} +2 -2
  282. package/dashboard/dist/assets/{CredentialsPage-CObc9Rs5.js.map → CredentialsPage-CaFQ6vLb.js.map} +1 -1
  283. package/dashboard/dist/assets/{CronLabel-Bb8GoNY5.js → CronLabel-Co5j7tzW.js} +2 -2
  284. package/dashboard/dist/assets/{CronLabel-Bb8GoNY5.js.map → CronLabel-Co5j7tzW.js.map} +1 -1
  285. package/dashboard/dist/assets/{ElapsedCell-CmGhVlYl.js → ElapsedCell-WJyE9G0T.js} +2 -2
  286. package/dashboard/dist/assets/{ElapsedCell-CmGhVlYl.js.map → ElapsedCell-WJyE9G0T.js.map} +1 -1
  287. package/dashboard/dist/assets/{EntityTimelinePanel-B4Jwy1w3.js → EntityTimelinePanel-CDFFfX9d.js} +2 -2
  288. package/dashboard/dist/assets/{EntityTimelinePanel-B4Jwy1w3.js.map → EntityTimelinePanel-CDFFfX9d.js.map} +1 -1
  289. package/dashboard/dist/assets/{EscalationListSchemaPage-CZZbZ4Aa.js → EscalationListSchemaPage-CMrUlaKI.js} +3 -3
  290. package/dashboard/dist/assets/{EscalationListSchemaPage-CZZbZ4Aa.js.map → EscalationListSchemaPage-CMrUlaKI.js.map} +1 -1
  291. package/dashboard/dist/assets/{EscalationSchemaPage-D0ko59_S.js → EscalationSchemaPage-Dx2Lyfrz.js} +2 -2
  292. package/dashboard/dist/assets/{EscalationSchemaPage-D0ko59_S.js.map → EscalationSchemaPage-Dx2Lyfrz.js.map} +1 -1
  293. package/dashboard/dist/assets/{EscalationTimeline-BcnJEKFD.js → EscalationTimeline-d3nvshOk.js} +2 -2
  294. package/dashboard/dist/assets/{EscalationTimeline-BcnJEKFD.js.map → EscalationTimeline-d3nvshOk.js.map} +1 -1
  295. package/dashboard/dist/assets/{EscalationTitleSelect-P0q5sck4.js → EscalationTitleSelect-DWQieOM9.js} +2 -2
  296. package/dashboard/dist/assets/{EscalationTitleSelect-P0q5sck4.js.map → EscalationTitleSelect-DWQieOM9.js.map} +1 -1
  297. package/dashboard/dist/assets/{EscalationsOverview-BLPmh4AF.js → EscalationsOverview-BX8Cpi0X.js} +2 -2
  298. package/dashboard/dist/assets/{EscalationsOverview-BLPmh4AF.js.map → EscalationsOverview-BX8Cpi0X.js.map} +1 -1
  299. package/dashboard/dist/assets/{EventTable-gBzi5tIS.js → EventTable-D1-ITVXS.js} +2 -2
  300. package/dashboard/dist/assets/{EventTable-gBzi5tIS.js.map → EventTable-D1-ITVXS.js.map} +1 -1
  301. package/dashboard/dist/assets/{FilterBar-BulSsWb2.js → FilterBar-ABC9ctin.js} +2 -2
  302. package/dashboard/dist/assets/{FilterBar-BulSsWb2.js.map → FilterBar-ABC9ctin.js.map} +1 -1
  303. package/dashboard/dist/assets/{FormattedValue-BMHRrvrL.js → FormattedValue-k27T4bG7.js} +2 -2
  304. package/dashboard/dist/assets/{FormattedValue-BMHRrvrL.js.map → FormattedValue-k27T4bG7.js.map} +1 -1
  305. package/dashboard/dist/assets/{GraphInvokePage--997yNRr.js → GraphInvokePage-DKUErxWc.js} +2 -2
  306. package/dashboard/dist/assets/{GraphInvokePage--997yNRr.js.map → GraphInvokePage-DKUErxWc.js.map} +1 -1
  307. package/dashboard/dist/assets/{HomePage-CwXFz--v.js → HomePage-C6u9dIpR.js} +2 -2
  308. package/dashboard/dist/assets/{HomePage-CwXFz--v.js.map → HomePage-C6u9dIpR.js.map} +1 -1
  309. package/dashboard/dist/assets/{ListToolbar-Df4qZryJ.js → ListToolbar-gA5rFzkz.js} +2 -2
  310. package/dashboard/dist/assets/{ListToolbar-Df4qZryJ.js.map → ListToolbar-gA5rFzkz.js.map} +1 -1
  311. package/dashboard/dist/assets/{McpOverview-DrogIAKJ.js → McpOverview-BOPo3J_i.js} +2 -2
  312. package/dashboard/dist/assets/{McpOverview-DrogIAKJ.js.map → McpOverview-BOPo3J_i.js.map} +1 -1
  313. package/dashboard/dist/assets/{McpQueryDetailPage-CJmvCAE6.js → McpQueryDetailPage-BRVVi0Zh.js} +2 -2
  314. package/dashboard/dist/assets/{McpQueryDetailPage-CJmvCAE6.js.map → McpQueryDetailPage-BRVVi0Zh.js.map} +1 -1
  315. package/dashboard/dist/assets/{McpQueryPage-lygo4Yq0.js → McpQueryPage-Dmbb6SAc.js} +2 -2
  316. package/dashboard/dist/assets/{McpQueryPage-lygo4Yq0.js.map → McpQueryPage-Dmbb6SAc.js.map} +1 -1
  317. package/dashboard/dist/assets/{McpRunDetailPage-hvns2sCm.js → McpRunDetailPage-bMXNO-6V.js} +2 -2
  318. package/dashboard/dist/assets/{McpRunDetailPage-hvns2sCm.js.map → McpRunDetailPage-bMXNO-6V.js.map} +1 -1
  319. package/dashboard/dist/assets/{McpRunsPage-C2_7spTX.js → McpRunsPage-Bi9AMWja.js} +2 -2
  320. package/dashboard/dist/assets/{McpRunsPage-C2_7spTX.js.map → McpRunsPage-Bi9AMWja.js.map} +1 -1
  321. package/dashboard/dist/assets/{OperationsPage-BlK8WlsY.js → OperationsPage-CvR74ZUJ.js} +3 -3
  322. package/dashboard/dist/assets/{OperationsPage-BlK8WlsY.js.map → OperationsPage-CvR74ZUJ.js.map} +1 -1
  323. package/dashboard/dist/assets/{OperatorDashboard-BeWBiMGX.js → OperatorDashboard-DctmZw10.js} +2 -2
  324. package/dashboard/dist/assets/{OperatorDashboard-BeWBiMGX.js.map → OperatorDashboard-DctmZw10.js.map} +1 -1
  325. package/dashboard/dist/assets/{PersonaDetailPage-CNHpsX_i.js → PersonaDetailPage-Ubqm2rQH.js} +2 -2
  326. package/dashboard/dist/assets/{PersonaDetailPage-CNHpsX_i.js.map → PersonaDetailPage-Ubqm2rQH.js.map} +1 -1
  327. package/dashboard/dist/assets/{PersonasPage-ChASEZRg.js → PersonasPage-BpFL2rpo.js} +2 -2
  328. package/dashboard/dist/assets/{PersonasPage-ChASEZRg.js.map → PersonasPage-BpFL2rpo.js.map} +1 -1
  329. package/dashboard/dist/assets/{PortalPage-D5Lk-PKF.js → PortalPage-Dfc_Q02R.js} +2 -2
  330. package/dashboard/dist/assets/{PortalPage-D5Lk-PKF.js.map → PortalPage-Dfc_Q02R.js.map} +1 -1
  331. package/dashboard/dist/assets/ProcessDetailPage-liJspvQh.js +2 -0
  332. package/dashboard/dist/assets/{ProcessDetailPage-DNgCIwRl.js.map → ProcessDetailPage-liJspvQh.js.map} +1 -1
  333. package/dashboard/dist/assets/{ProcessesListPage-pRjWuWlH.js → ProcessesListPage-C3OM5ZUy.js} +2 -2
  334. package/dashboard/dist/assets/{ProcessesListPage-pRjWuWlH.js.map → ProcessesListPage-C3OM5ZUy.js.map} +1 -1
  335. package/dashboard/dist/assets/ResolverForm-B1_x8Blv.js +8 -0
  336. package/dashboard/dist/assets/ResolverForm-B1_x8Blv.js.map +1 -0
  337. package/dashboard/dist/assets/{RoleDetailPage-Bh_UcfYY.js → RoleDetailPage-CrlYCh-R.js} +2 -2
  338. package/dashboard/dist/assets/{RoleDetailPage-Bh_UcfYY.js.map → RoleDetailPage-CrlYCh-R.js.map} +1 -1
  339. package/dashboard/dist/assets/{RolesPage-CK17N7zz.js → RolesPage-BaazL_pt.js} +2 -2
  340. package/dashboard/dist/assets/{RolesPage-CK17N7zz.js.map → RolesPage-BaazL_pt.js.map} +1 -1
  341. package/dashboard/dist/assets/{RunAsSelector-BEKUP0p2.js → RunAsSelector-DxuV0fa1.js} +2 -2
  342. package/dashboard/dist/assets/{RunAsSelector-BEKUP0p2.js.map → RunAsSelector-DxuV0fa1.js.map} +1 -1
  343. package/dashboard/dist/assets/{ScanCodesPage-Bd0Pflqx.js → ScanCodesPage-C0mvmYTq.js} +2 -2
  344. package/dashboard/dist/assets/{ScanCodesPage-Bd0Pflqx.js.map → ScanCodesPage-C0mvmYTq.js.map} +1 -1
  345. package/dashboard/dist/assets/{ScanSchemeDetailPage-CnuhozmJ.js → ScanSchemeDetailPage-CiJgt5dZ.js} +2 -2
  346. package/dashboard/dist/assets/{ScanSchemeDetailPage-CnuhozmJ.js.map → ScanSchemeDetailPage-CiJgt5dZ.js.map} +1 -1
  347. package/dashboard/dist/assets/{ScanStationPage-CoLc-q3h.js → ScanStationPage-DzGaXc40.js} +2 -2
  348. package/dashboard/dist/assets/{ScanStationPage-CoLc-q3h.js.map → ScanStationPage-DzGaXc40.js.map} +1 -1
  349. package/dashboard/dist/assets/{StickyPagination-COrfvkBi.js → StickyPagination-CqbjVY6T.js} +2 -2
  350. package/dashboard/dist/assets/{StickyPagination-COrfvkBi.js.map → StickyPagination-CqbjVY6T.js.map} +1 -1
  351. package/dashboard/dist/assets/{StreamMessageDetail-Cif2egLy.js → StreamMessageDetail-wX3i0aqs.js} +2 -2
  352. package/dashboard/dist/assets/{StreamMessageDetail-Cif2egLy.js.map → StreamMessageDetail-wX3i0aqs.js.map} +1 -1
  353. package/dashboard/dist/assets/{SwimlaneTimeline-BnZYTrAh.js → SwimlaneTimeline-C50PsFoV.js} +2 -2
  354. package/dashboard/dist/assets/{SwimlaneTimeline-BnZYTrAh.js.map → SwimlaneTimeline-C50PsFoV.js.map} +1 -1
  355. package/dashboard/dist/assets/{TaskDetailPage-DEz_dqyR.js → TaskDetailPage-bbNSv4Ae.js} +2 -2
  356. package/dashboard/dist/assets/{TaskDetailPage-DEz_dqyR.js.map → TaskDetailPage-bbNSv4Ae.js.map} +1 -1
  357. package/dashboard/dist/assets/{TasksListPage-oEfEGj0_.js → TasksListPage-CDWnm_d9.js} +2 -2
  358. package/dashboard/dist/assets/{TasksListPage-oEfEGj0_.js.map → TasksListPage-CDWnm_d9.js.map} +1 -1
  359. package/dashboard/dist/assets/{TimeAgo-Dz5TgZZZ.js → TimeAgo-BLjqlfoX.js} +2 -2
  360. package/dashboard/dist/assets/{TimeAgo-Dz5TgZZZ.js.map → TimeAgo-BLjqlfoX.js.map} +1 -1
  361. package/dashboard/dist/assets/{TimestampCell-BUTgE244.js → TimestampCell-CnW0ENb5.js} +2 -2
  362. package/dashboard/dist/assets/{TimestampCell-BUTgE244.js.map → TimestampCell-CnW0ENb5.js.map} +1 -1
  363. package/dashboard/dist/assets/{ToolTestPanel-BS4g6vt-.js → ToolTestPanel-DkMgCB-k.js} +2 -2
  364. package/dashboard/dist/assets/{ToolTestPanel-BS4g6vt-.js.map → ToolTestPanel-DkMgCB-k.js.map} +1 -1
  365. package/dashboard/dist/assets/{TopicDetailPage-C_I6JIVD.js → TopicDetailPage-g3pljKKX.js} +2 -2
  366. package/dashboard/dist/assets/{TopicDetailPage-C_I6JIVD.js.map → TopicDetailPage-g3pljKKX.js.map} +1 -1
  367. package/dashboard/dist/assets/{TopicsPage-Cr6-wfhJ.js → TopicsPage-CVcCYdy-.js} +2 -2
  368. package/dashboard/dist/assets/{TopicsPage-Cr6-wfhJ.js.map → TopicsPage-CVcCYdy-.js.map} +1 -1
  369. package/dashboard/dist/assets/{UserName-ZFpWMaFF.js → UserName-D6zGIK2i.js} +2 -2
  370. package/dashboard/dist/assets/{UserName-ZFpWMaFF.js.map → UserName-D6zGIK2i.js.map} +1 -1
  371. package/dashboard/dist/assets/{WorkflowExecutionPage-ByPixDZW.js → WorkflowExecutionPage-B8g81FCJ.js} +2 -2
  372. package/dashboard/dist/assets/{WorkflowExecutionPage-ByPixDZW.js.map → WorkflowExecutionPage-B8g81FCJ.js.map} +1 -1
  373. package/dashboard/dist/assets/{WorkflowsDashboard-CWsJdMdR.js → WorkflowsDashboard-nxT3bv6W.js} +2 -2
  374. package/dashboard/dist/assets/{WorkflowsDashboard-CWsJdMdR.js.map → WorkflowsDashboard-nxT3bv6W.js.map} +1 -1
  375. package/dashboard/dist/assets/{WorkflowsOverview-Dk9gyqZN.js → WorkflowsOverview-grI-KAI2.js} +2 -2
  376. package/dashboard/dist/assets/{WorkflowsOverview-Dk9gyqZN.js.map → WorkflowsOverview-grI-KAI2.js.map} +1 -1
  377. package/dashboard/dist/assets/{YamlWorkflowDetailPage-CHwcrsaT.js → YamlWorkflowDetailPage-BoZ-hfBE.js} +2 -2
  378. package/dashboard/dist/assets/{YamlWorkflowDetailPage-CHwcrsaT.js.map → YamlWorkflowDetailPage-BoZ-hfBE.js.map} +1 -1
  379. package/dashboard/dist/assets/{YamlWorkflowsPage-B5jRX2Ph.js → YamlWorkflowsPage-Bf04rwRv.js} +2 -2
  380. package/dashboard/dist/assets/{YamlWorkflowsPage-B5jRX2Ph.js.map → YamlWorkflowsPage-Bf04rwRv.js.map} +1 -1
  381. package/dashboard/dist/assets/{agents-Dd7E-27d.js → agents-Dphpdi8l.js} +2 -2
  382. package/dashboard/dist/assets/{agents-Dd7E-27d.js.map → agents-Dphpdi8l.js.map} +1 -1
  383. package/dashboard/dist/assets/{bots-CpaYjZTk.js → bots-DIFE298x.js} +2 -2
  384. package/dashboard/dist/assets/{bots-CpaYjZTk.js.map → bots-DIFE298x.js.map} +1 -1
  385. package/dashboard/dist/assets/{capabilities-CNjg_qv1.js → capabilities-D7Y7LClY.js} +2 -2
  386. package/dashboard/dist/assets/{capabilities-CNjg_qv1.js.map → capabilities-D7Y7LClY.js.map} +1 -1
  387. package/dashboard/dist/assets/{controlplane-DgmvnAtU.js → controlplane-D1TGcYsS.js} +2 -2
  388. package/dashboard/dist/assets/{controlplane-DgmvnAtU.js.map → controlplane-D1TGcYsS.js.map} +1 -1
  389. package/dashboard/dist/assets/{escalation-columns-Uj4U9g5H.js → escalation-columns-cwZE6xyo.js} +2 -2
  390. package/dashboard/dist/assets/{escalation-columns-Uj4U9g5H.js.map → escalation-columns-cwZE6xyo.js.map} +1 -1
  391. package/dashboard/dist/assets/{index-x5z73M9N.js → index-BzYcUPdD.js} +2 -2
  392. package/dashboard/dist/assets/{index-x5z73M9N.js.map → index-BzYcUPdD.js.map} +1 -1
  393. package/dashboard/dist/assets/index-CeCtqujG.js +67 -0
  394. package/dashboard/dist/assets/index-CeCtqujG.js.map +1 -0
  395. package/dashboard/dist/assets/{index-RIFT3RlO.js → index-ChV7pBjM.js} +2 -2
  396. package/dashboard/dist/assets/{index-RIFT3RlO.js.map → index-ChV7pBjM.js.map} +1 -1
  397. package/dashboard/dist/assets/{index-OfO0173w.js → index-CniRa65p.js} +2 -2
  398. package/dashboard/dist/assets/{index-OfO0173w.js.map → index-CniRa65p.js.map} +1 -1
  399. package/dashboard/dist/assets/{index-ByBy9M3L.js → index-CxdjT1Yk.js} +2 -2
  400. package/dashboard/dist/assets/{index-ByBy9M3L.js.map → index-CxdjT1Yk.js.map} +1 -1
  401. package/dashboard/dist/assets/{index-C_K7OlzT.js → index-DAvi5_2T.js} +2 -2
  402. package/dashboard/dist/assets/{index-C_K7OlzT.js.map → index-DAvi5_2T.js.map} +1 -1
  403. package/dashboard/dist/assets/{index-BrwqtXRh.js → index-DN-kX7hL.js} +2 -2
  404. package/dashboard/dist/assets/{index-BrwqtXRh.js.map → index-DN-kX7hL.js.map} +1 -1
  405. package/dashboard/dist/assets/index-Dl_8hbYI.js +2 -0
  406. package/dashboard/dist/assets/index-Dl_8hbYI.js.map +1 -0
  407. package/dashboard/dist/assets/{index-D4Dlznn9.js → index-DpKOr311.js} +2 -2
  408. package/dashboard/dist/assets/{index-D4Dlznn9.js.map → index-DpKOr311.js.map} +1 -1
  409. package/dashboard/dist/assets/{index-CnOvJz6U.js → index-Dy1wWu2e.js} +2 -2
  410. package/dashboard/dist/assets/{index-CnOvJz6U.js.map → index-Dy1wWu2e.js.map} +1 -1
  411. package/dashboard/dist/assets/{index-BT1Ms5Q5.js → index-HLu98Sqh.js} +2 -2
  412. package/dashboard/dist/assets/{index-BT1Ms5Q5.js.map → index-HLu98Sqh.js.map} +1 -1
  413. package/dashboard/dist/assets/{index-BFASQ7_X.js → index-ag2pCAPu.js} +2 -2
  414. package/dashboard/dist/assets/{index-BFASQ7_X.js.map → index-ag2pCAPu.js.map} +1 -1
  415. package/dashboard/dist/assets/{index-BsHVgWH6.js → index-gkxPN7Vx.js} +2 -2
  416. package/dashboard/dist/assets/{index-BsHVgWH6.js.map → index-gkxPN7Vx.js.map} +1 -1
  417. package/dashboard/dist/assets/index-m9A3UYst.css +1 -0
  418. package/dashboard/dist/assets/{knowledge-Cci_r6Kl.js → knowledge-DnMs-SOJ.js} +2 -2
  419. package/dashboard/dist/assets/{knowledge-Cci_r6Kl.js.map → knowledge-DnMs-SOJ.js.map} +1 -1
  420. package/dashboard/dist/assets/{mcp-NY4iL0L-.js → mcp-CwW-K3r4.js} +2 -2
  421. package/dashboard/dist/assets/{mcp-NY4iL0L-.js.map → mcp-CwW-K3r4.js.map} +1 -1
  422. package/dashboard/dist/assets/{mcp-query-CbvZo_I_.js → mcp-query-BZt5e8_Q.js} +2 -2
  423. package/dashboard/dist/assets/{mcp-query-CbvZo_I_.js.map → mcp-query-BZt5e8_Q.js.map} +1 -1
  424. package/dashboard/dist/assets/{personas-Fy-f7QQd.js → personas-UA-Xn60f.js} +2 -2
  425. package/dashboard/dist/assets/{personas-Fy-f7QQd.js.map → personas-UA-Xn60f.js.map} +1 -1
  426. package/dashboard/dist/assets/{pipelines-DKiuozxV.js → pipelines-Cu3PARum.js} +2 -2
  427. package/dashboard/dist/assets/{pipelines-DKiuozxV.js.map → pipelines-Cu3PARum.js.map} +1 -1
  428. package/dashboard/dist/assets/{tasks-CdM1Rkk9.js → tasks-BO6h8GJE.js} +2 -2
  429. package/dashboard/dist/assets/{tasks-CdM1Rkk9.js.map → tasks-BO6h8GJE.js.map} +1 -1
  430. package/dashboard/dist/assets/{topics-XNy2mf3n.js → topics-CWjCR-17.js} +2 -2
  431. package/dashboard/dist/assets/{topics-XNy2mf3n.js.map → topics-CWjCR-17.js.map} +1 -1
  432. package/dashboard/dist/assets/{useDebouncedValue-CyGcU3_S.js → useDebouncedValue-6t0jx1RB.js} +2 -2
  433. package/dashboard/dist/assets/{useDebouncedValue-CyGcU3_S.js.map → useDebouncedValue-6t0jx1RB.js.map} +1 -1
  434. package/dashboard/dist/assets/{useNamespace-C2RIh_IN.js → useNamespace-CqpoQx6D.js} +2 -2
  435. package/dashboard/dist/assets/{useNamespace-C2RIh_IN.js.map → useNamespace-CqpoQx6D.js.map} +1 -1
  436. package/dashboard/dist/assets/{useYamlActivityEvents-CDiV5fjf.js → useYamlActivityEvents-hmCQQwzB.js} +2 -2
  437. package/dashboard/dist/assets/{useYamlActivityEvents-CDiV5fjf.js.map → useYamlActivityEvents-hmCQQwzB.js.map} +1 -1
  438. package/dashboard/dist/assets/{validate-DcGWN82Y.js → validate-BIRn4a6d.js} +2 -2
  439. package/dashboard/dist/assets/{validate-DcGWN82Y.js.map → validate-BIRn4a6d.js.map} +1 -1
  440. package/dashboard/dist/assets/{yaml-workflows-CH8UrouH.js → yaml-workflows-ziUdZhKY.js} +2 -2
  441. package/dashboard/dist/assets/{yaml-workflows-CH8UrouH.js.map → yaml-workflows-ziUdZhKY.js.map} +1 -1
  442. package/dashboard/dist/index.html +2 -2
  443. package/docs/agents.md +3 -1
  444. package/docs/api/http/agents.md +15 -1
  445. package/docs/api/http/escalations.md +3 -3
  446. package/docs/api/http/exports.md +3 -1
  447. package/docs/api/http/file-browser.md +3 -1
  448. package/docs/api/http/mcp-endpoint.md +8 -5
  449. package/docs/api/http/mcp-servers.md +34 -4
  450. package/docs/api/http/namespaces.md +2 -0
  451. package/docs/api/http/pipelines.md +2 -0
  452. package/docs/api/http/roles.md +11 -8
  453. package/docs/api/http/service-accounts.md +8 -2
  454. package/docs/api/http/settings.md +29 -2
  455. package/docs/api/http/tasks.md +3 -1
  456. package/docs/api/http/topics.md +7 -1
  457. package/docs/api/http/users.md +8 -2
  458. package/docs/api/http/workflows.md +25 -10
  459. package/docs/api/http/yaml-workflows.md +21 -0
  460. package/docs/api/mcp/admin.md +409 -49
  461. package/docs/api/mcp/file-storage.md +4 -0
  462. package/docs/api/mcp/http-fetch.md +6 -2
  463. package/docs/api/mcp/human-queue.md +53 -0
  464. package/docs/api/mcp/index.md +13 -10
  465. package/docs/api/mcp/knowledge.md +34 -0
  466. package/docs/api/mcp/oauth.md +1 -1
  467. package/docs/api/mcp/ortho.md +113 -0
  468. package/docs/api/mcp/vision.md +1 -1
  469. package/docs/api/sdk/bot-accounts.md +1 -0
  470. package/docs/api/sdk/escalations.md +2 -2
  471. package/docs/api/sdk/mcp.md +2 -2
  472. package/docs/api/sdk/settings.md +1 -1
  473. package/docs/api/sdk/tasks.md +2 -2
  474. package/docs/api/sdk/workflows.md +2 -2
  475. package/docs/api/sdk/yaml-workflows.md +1 -1
  476. package/docs/architecture.md +3 -1
  477. package/docs/auth.md +3 -2
  478. package/docs/cloud.md +7 -2
  479. package/docs/dashboard.md +16 -7
  480. package/docs/data.md +1 -1
  481. package/docs/escalation-strategies.md +9 -20
  482. package/docs/events.md +6 -0
  483. package/docs/iam.md +7 -5
  484. package/docs/maintenance.md +51 -28
  485. package/docs/mcp.md +159 -210
  486. package/docs/oauth-and-delegation.md +32 -21
  487. package/docs/topics.md +2 -0
  488. package/docs/workflows.md +14 -112
  489. package/package.json +5 -3
  490. package/dashboard/dist/assets/ConfirmDeleteModal-DW4DrPur.js +0 -2
  491. package/dashboard/dist/assets/ConfirmDeleteModal-DW4DrPur.js.map +0 -1
  492. package/dashboard/dist/assets/ProcessDetailPage-DNgCIwRl.js +0 -2
  493. package/dashboard/dist/assets/ResolverForm-CKIOAGtY.js +0 -8
  494. package/dashboard/dist/assets/ResolverForm-CKIOAGtY.js.map +0 -1
  495. package/dashboard/dist/assets/index-CtlBjl8o.js +0 -2
  496. package/dashboard/dist/assets/index-CtlBjl8o.js.map +0 -1
  497. package/dashboard/dist/assets/index-LRYC__mE.js +0 -67
  498. package/dashboard/dist/assets/index-LRYC__mE.js.map +0 -1
  499. package/dashboard/dist/assets/index-MYI2_Xb3.css +0 -1
@@ -1,42 +1,9 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
36
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
37
4
  };
38
5
  Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.requireRoleManager = exports.requireBuilder = exports.requireAdmin = exports.requireAuth = exports.JwtAuthAdapter = void 0;
6
+ exports.requireWorkflowReader = exports.requireRoleManager = exports.requireBuilder = exports.requireAdmin = exports.requireCredentialAuth = exports.requireAuth = exports.JwtAuthAdapter = void 0;
40
7
  exports.createAuthMiddleware = createAuthMiddleware;
41
8
  exports.setAuthAdapter = setAuthAdapter;
42
9
  exports.signToken = signToken;
@@ -44,7 +11,7 @@ const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
44
11
  const config_1 = require("./config");
45
12
  const sso_1 = require("./sso");
46
13
  const logger_1 = require("../lib/logger");
47
- const user_1 = require("../services/user");
14
+ const capabilities_1 = require("./capabilities");
48
15
  const sso_provision_1 = require("../services/user/sso-provision");
49
16
  const bot_api_key_1 = require("../services/auth/bot-api-key");
50
17
  const principal_1 = require("../services/iam/principal");
@@ -192,6 +159,16 @@ const requireAuth = async (req, res, next) => {
192
159
  mw(req, res, next);
193
160
  };
194
161
  exports.requireAuth = requireAuth;
162
+ /**
163
+ * `requireAuth` without the SSO fallback: only a credential the request
164
+ * carries itself (the configured adapter, else a Bearer JWT or bot key).
165
+ * For endpoints a cross-site page must not reach through the host's cookie.
166
+ */
167
+ const requireCredentialAuth = (req, res, next) => {
168
+ const mw = _authMiddleware || createAuthMiddleware(new JwtAuthAdapter());
169
+ return mw(req, res, next);
170
+ };
171
+ exports.requireCredentialAuth = requireCredentialAuth;
195
172
  /**
196
173
  * Replace the auth adapter used by `requireAuth`.
197
174
  * Call before starting the server.
@@ -199,107 +176,47 @@ exports.requireAuth = requireAuth;
199
176
  function setAuthAdapter(adapter) {
200
177
  _authMiddleware = createAuthMiddleware(adapter);
201
178
  }
202
- /**
203
- * Middleware that requires admin access. Must be placed AFTER requireAuth.
204
- *
205
- * Checks isSuperAdmin() via the database first, then falls back to the
206
- * JWT `role` claim for stateless admin checks. Returns 403 otherwise.
207
- */
208
- const requireAdmin = async (req, res, next) => {
209
- try {
210
- if (!req.auth?.userId) {
211
- res.status(403).json({ error: 'Forbidden' });
212
- return;
213
- }
214
- // Fast path: trust the JWT role claim for admin/superadmin
215
- if (req.auth.role === 'admin' || req.auth.role === 'superadmin') {
216
- next();
217
- return;
218
- }
219
- // Slow path: check database for superadmin role type
220
- if (await (0, user_1.isSuperAdmin)(req.auth.userId)) {
221
- next();
222
- return;
179
+ /** Express gate over a capability predicate. Must be placed AFTER requireAuth. */
180
+ function requireCapability(check, denial) {
181
+ return async (req, res, next) => {
182
+ try {
183
+ if (!req.auth?.userId) {
184
+ res.status(403).json({ error: 'Forbidden' });
185
+ return;
186
+ }
187
+ if (await check(req.auth)) {
188
+ next();
189
+ return;
190
+ }
191
+ res.status(403).json({ error: denial });
223
192
  }
224
- res.status(403).json({ error: 'Forbidden: admin access required' });
225
- }
226
- catch {
227
- res.status(403).json({ error: 'Forbidden' });
228
- }
229
- };
230
- exports.requireAdmin = requireAdmin;
231
- /**
232
- * Middleware that requires builder access. Must be placed AFTER requireAuth.
233
- *
234
- * Builders are superadmin or users with the 'engineer' role.
235
- * This is the backend equivalent of the dashboard's `isBuilder` check.
236
- */
237
- const requireBuilder = async (req, res, next) => {
238
- try {
239
- if (!req.auth?.userId) {
193
+ catch {
240
194
  res.status(403).json({ error: 'Forbidden' });
241
- return;
242
195
  }
243
- // Fast path: trust the JWT role claim for superadmin
244
- if (req.auth.role === 'superadmin') {
245
- next();
246
- return;
247
- }
248
- // Check database for superadmin role type
249
- if (await (0, user_1.isSuperAdmin)(req.auth.userId)) {
250
- next();
251
- return;
252
- }
253
- // Check database for engineer role (builder)
254
- const { hasRole } = await Promise.resolve().then(() => __importStar(require('../services/user/roles')));
255
- if (await hasRole(req.auth.userId, 'engineer')) {
256
- next();
257
- return;
258
- }
259
- res.status(403).json({ error: 'Forbidden: builder access required' });
260
- }
261
- catch {
262
- res.status(403).json({ error: 'Forbidden' });
263
- }
264
- };
265
- exports.requireBuilder = requireBuilder;
266
- /**
267
- * Middleware that requires role-management access. Must be placed AFTER requireAuth.
268
- *
269
- * Grants access to superadmins, admin-type users, and engineers — the backend
270
- * equivalent of the dashboard's `isBuilder || isOps`. Ops (admin type) manage
271
- * users and roles; builders (superadmin, engineer) are a superset. This is the
272
- * gate for reading and writing role definitions.
273
- */
274
- const requireRoleManager = async (req, res, next) => {
196
+ };
197
+ }
198
+ /** Admin access: admin or superadmin claim, or a superadmin in the database. */
199
+ exports.requireAdmin = requireCapability(capabilities_1.mayAdminister, 'Forbidden: admin access required');
200
+ /** Builder access: superadmin or the 'engineer' role. Backend twin of the dashboard's `isBuilder`. */
201
+ exports.requireBuilder = requireCapability(capabilities_1.mayBuild, 'Forbidden: builder access required');
202
+ /** Role-management access: admin access or the 'engineer' role. Backend twin of `isBuilder || isOps`. */
203
+ exports.requireRoleManager = requireCapability(capabilities_1.mayManageRoles, 'Forbidden: role-management access required');
204
+ /** Reads of one workflow run (`:workflowId`): builder access, or the person who started it or it runs as. */
205
+ const requireWorkflowReader = async (req, res, next) => {
275
206
  try {
276
- if (!req.auth?.userId) {
277
- res.status(403).json({ error: 'Forbidden' });
278
- return;
279
- }
280
- // Fast path: trust the JWT role claim for admin/superadmin
281
- if (req.auth.role === 'admin' || req.auth.role === 'superadmin') {
282
- next();
283
- return;
284
- }
285
- // Slow path: check database for superadmin role type
286
- if (await (0, user_1.isSuperAdmin)(req.auth.userId)) {
287
- next();
288
- return;
289
- }
290
- // Check database for engineer role (builder)
291
- const { hasRole } = await Promise.resolve().then(() => __importStar(require('../services/user/roles')));
292
- if (await hasRole(req.auth.userId, 'engineer')) {
207
+ if (req.auth?.userId && await (0, capabilities_1.mayReadWorkflowRun)(req.auth, String(req.params.workflowId))) {
293
208
  next();
294
209
  return;
295
210
  }
296
- res.status(403).json({ error: 'Forbidden: role-management access required' });
211
+ res.status(403).json({ error: 'Forbidden: workflow read access required' });
297
212
  }
298
- catch {
299
- res.status(403).json({ error: 'Forbidden' });
213
+ catch (err) {
214
+ // A failed lookup is not an access decision: report it, and serve nothing.
215
+ logger_1.loggerRegistry.error(`[long-tail] workflow read check failed: ${err?.message}`);
216
+ res.status(500).json({ error: 'Workflow read check failed' });
300
217
  }
301
218
  };
302
- exports.requireRoleManager = requireRoleManager;
219
+ exports.requireWorkflowReader = requireWorkflowReader;
303
220
  /**
304
221
  * Generate a JWT token. Utility for tests and token provisioning.
305
222
  */
@@ -0,0 +1,62 @@
1
+ import type { AuthPayload, CapabilityAccess, CapabilitySet, LTGrantRole } from '../types';
2
+ /**
3
+ * Capability predicates shared by every entry point that faces people.
4
+ *
5
+ * Each predicate trusts the principal's `role` claim first and only then
6
+ * consults the database. Lookup errors propagate so callers can deny.
7
+ */
8
+ export type CapabilityPrincipal = Pick<AuthPayload, 'userId' | 'role'> & {
9
+ /** Present for OAuth callers: the memberships the access token carries. */
10
+ grantRoles?: LTGrantRole[];
11
+ };
12
+ export interface RoleGrant {
13
+ role: string;
14
+ type?: string;
15
+ }
16
+ export type GrantDecision = {
17
+ allowed: true;
18
+ } | {
19
+ allowed: false;
20
+ error: string;
21
+ };
22
+ /** Admin or superadmin claim, or a superadmin in the database. */
23
+ export declare function mayAdminister(principal: CapabilityPrincipal | undefined): Promise<boolean>;
24
+ /** Superadmin (claim or database), or holder of the engineer role. */
25
+ export declare function mayBuild(principal: CapabilityPrincipal | undefined): Promise<boolean>;
26
+ /**
27
+ * Builder access, or the person a workflow run was started by or runs as,
28
+ * read from the run's own start envelope.
29
+ */
30
+ export declare function mayReadWorkflowRun(principal: CapabilityPrincipal | undefined, workflowId: string): Promise<boolean>;
31
+ /** Anyone who may administer, plus holders of the engineer role. */
32
+ export declare function mayManageRoles(principal: CapabilityPrincipal | undefined): Promise<boolean>;
33
+ /**
34
+ * Whether `granterId` may assign `grant` to a user.
35
+ *
36
+ * - superadmin: any role and type
37
+ * - engineer: any role, never the superadmin type
38
+ * - anyone else: only roles they hold, never the superadmin type
39
+ */
40
+ export declare function mayGrantRole(granterId: string, grant: RoleGrant): Promise<GrantDecision>;
41
+ /** Whether `granterId` may assign every grant in a new account's role list. */
42
+ export declare function mayGrantRoles(granterId: string, grants: RoleGrant[] | undefined): Promise<GrantDecision>;
43
+ /**
44
+ * Whether `callerId` may change, remove, or mint keys for an account. An
45
+ * account holding superadmin is a superadmin's to manage; any other account
46
+ * is left to the route's own gate.
47
+ */
48
+ export declare function mayManageAccount(callerId: string, targetId: string): Promise<GrantDecision>;
49
+ /** Removing a role follows the grant rule for the role as the account holds it. */
50
+ export declare function mayRevokeRole(callerId: string, targetId: string, role: string): Promise<GrantDecision>;
51
+ /**
52
+ * Every capability the principal holds, with the same outcomes as the
53
+ * predicates above. A superadmin claim costs no lookup; anyone else costs
54
+ * at most one superadmin lookup and one engineer-role lookup.
55
+ */
56
+ export declare function resolveCapabilities(principal: CapabilityPrincipal | undefined): Promise<CapabilitySet>;
57
+ /**
58
+ * Capability checks for one request. `caller` needs only an authenticated
59
+ * principal; any other gate resolves the principal's capabilities once, on
60
+ * first need, so a request that checks only `caller` gates makes no lookup.
61
+ */
62
+ export declare function capabilityAccess(principal: CapabilityPrincipal | undefined): CapabilityAccess;
@@ -0,0 +1,188 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.mayAdminister = mayAdminister;
37
+ exports.mayBuild = mayBuild;
38
+ exports.mayReadWorkflowRun = mayReadWorkflowRun;
39
+ exports.mayManageRoles = mayManageRoles;
40
+ exports.mayGrantRole = mayGrantRole;
41
+ exports.mayGrantRoles = mayGrantRoles;
42
+ exports.mayManageAccount = mayManageAccount;
43
+ exports.mayRevokeRole = mayRevokeRole;
44
+ exports.resolveCapabilities = resolveCapabilities;
45
+ exports.capabilityAccess = capabilityAccess;
46
+ const user_1 = require("../services/user");
47
+ const export_1 = require("../services/export");
48
+ const uuid_1 = require("../lib/uuid");
49
+ const BUILDER_ROLE = 'engineer';
50
+ async function hasBuilderRole(userId) {
51
+ const { hasRole } = await Promise.resolve().then(() => __importStar(require('../services/user/roles')));
52
+ return hasRole(userId, BUILDER_ROLE);
53
+ }
54
+ /** Admin or superadmin claim, or a superadmin in the database. */
55
+ async function mayAdminister(principal) {
56
+ if (!principal?.userId)
57
+ return false;
58
+ if (principal.role === 'admin' || principal.role === 'superadmin')
59
+ return true;
60
+ return (0, user_1.isSuperAdmin)(principal.userId);
61
+ }
62
+ /** Superadmin (claim or database), or holder of the engineer role. */
63
+ async function mayBuild(principal) {
64
+ if (!principal?.userId)
65
+ return false;
66
+ if (principal.role === 'superadmin')
67
+ return true;
68
+ if (await (0, user_1.isSuperAdmin)(principal.userId))
69
+ return true;
70
+ return hasBuilderRole(principal.userId);
71
+ }
72
+ /**
73
+ * Builder access, or the person a workflow run was started by or runs as,
74
+ * read from the run's own start envelope.
75
+ */
76
+ async function mayReadWorkflowRun(principal, workflowId) {
77
+ if (!principal?.userId)
78
+ return false;
79
+ if (await mayBuild(principal))
80
+ return true;
81
+ const started = await (0, export_1.getWorkflowStartIdentity)(workflowId);
82
+ return !!started && (started.userId === principal.userId || started.initiatedBy === principal.userId);
83
+ }
84
+ /** Anyone who may administer, plus holders of the engineer role. */
85
+ async function mayManageRoles(principal) {
86
+ if (!principal?.userId)
87
+ return false;
88
+ if (await mayAdminister(principal))
89
+ return true;
90
+ return hasBuilderRole(principal.userId);
91
+ }
92
+ /**
93
+ * Whether `granterId` may assign `grant` to a user.
94
+ *
95
+ * - superadmin: any role and type
96
+ * - engineer: any role, never the superadmin type
97
+ * - anyone else: only roles they hold, never the superadmin type
98
+ */
99
+ async function mayGrantRole(granterId, grant) {
100
+ if (await (0, user_1.isSuperAdmin)(granterId))
101
+ return { allowed: true };
102
+ if (grant.type === 'superadmin') {
103
+ return { allowed: false, error: 'Only superadmin can assign superadmin role type' };
104
+ }
105
+ if (await hasBuilderRole(granterId))
106
+ return { allowed: true };
107
+ const { hasRole } = await Promise.resolve().then(() => __importStar(require('../services/user/roles')));
108
+ if (await hasRole(granterId, grant.role))
109
+ return { allowed: true };
110
+ return { allowed: false, error: `You can only assign roles you hold. You do not have the '${grant.role}' role.` };
111
+ }
112
+ const ALLOWED = { allowed: true };
113
+ /** Whether `granterId` may assign every grant in a new account's role list. */
114
+ async function mayGrantRoles(granterId, grants) {
115
+ for (const grant of grants ?? []) {
116
+ const decision = await mayGrantRole(granterId, grant);
117
+ if (!decision.allowed)
118
+ return decision;
119
+ }
120
+ return ALLOWED;
121
+ }
122
+ /**
123
+ * Whether `callerId` may change, remove, or mint keys for an account. An
124
+ * account holding superadmin is a superadmin's to manage; any other account
125
+ * is left to the route's own gate.
126
+ */
127
+ async function mayManageAccount(callerId, targetId) {
128
+ if (await (0, user_1.isSuperAdmin)(callerId))
129
+ return ALLOWED;
130
+ if (!(0, uuid_1.isUuid)(targetId))
131
+ return ALLOWED;
132
+ if (await (0, user_1.isSuperAdmin)(targetId)) {
133
+ return { allowed: false, error: 'Only superadmin can change a superadmin account' };
134
+ }
135
+ return ALLOWED;
136
+ }
137
+ /** Removing a role follows the grant rule for the role as the account holds it. */
138
+ async function mayRevokeRole(callerId, targetId, role) {
139
+ const account = await mayManageAccount(callerId, targetId);
140
+ if (!account.allowed || !(0, uuid_1.isUuid)(targetId))
141
+ return account;
142
+ const { getUserRoles } = await Promise.resolve().then(() => __importStar(require('../services/user')));
143
+ const held = (await getUserRoles(targetId)).find((r) => r.role === role);
144
+ return held ? mayGrantRole(callerId, { role, type: held.type }) : ALLOWED;
145
+ }
146
+ /** Capabilities from memberships carried by the caller's token: the same outcomes, no lookup. */
147
+ function capabilitiesFromRoles(roles) {
148
+ const superadmin = roles.some((r) => r.type === 'superadmin');
149
+ const admin = superadmin || roles.some((r) => r.type === 'admin');
150
+ const engineer = roles.some((r) => r.role === BUILDER_ROLE);
151
+ return { caller: true, admin, builder: superadmin || engineer, roleManager: admin || engineer, superadmin };
152
+ }
153
+ const NO_CAPABILITIES = {
154
+ caller: false, admin: false, builder: false, roleManager: false, superadmin: false,
155
+ };
156
+ /**
157
+ * Every capability the principal holds, with the same outcomes as the
158
+ * predicates above. A superadmin claim costs no lookup; anyone else costs
159
+ * at most one superadmin lookup and one engineer-role lookup.
160
+ */
161
+ async function resolveCapabilities(principal) {
162
+ if (!principal?.userId)
163
+ return NO_CAPABILITIES;
164
+ if (principal.grantRoles)
165
+ return capabilitiesFromRoles(principal.grantRoles);
166
+ if (principal.role === 'superadmin' || (await (0, user_1.isSuperAdmin)(principal.userId))) {
167
+ return { caller: true, admin: true, builder: true, roleManager: true, superadmin: true };
168
+ }
169
+ const admin = principal.role === 'admin';
170
+ const engineer = await hasBuilderRole(principal.userId);
171
+ return { caller: true, admin, builder: engineer, roleManager: admin || engineer, superadmin: false };
172
+ }
173
+ /**
174
+ * Capability checks for one request. `caller` needs only an authenticated
175
+ * principal; any other gate resolves the principal's capabilities once, on
176
+ * first need, so a request that checks only `caller` gates makes no lookup.
177
+ */
178
+ function capabilityAccess(principal) {
179
+ let resolved;
180
+ return async (gate) => {
181
+ if (!principal?.userId)
182
+ return false;
183
+ if (gate === 'caller')
184
+ return true;
185
+ resolved ??= resolveCapabilities(principal);
186
+ return (await resolved)[gate];
187
+ };
188
+ }
@@ -8,9 +8,28 @@ export declare const config: {
8
8
  NATS_URL: string;
9
9
  NATS_WS_URL: string;
10
10
  NATS_TOKEN: string;
11
+ /** A subscribe-only NATS credential for browsers that connect without the proxy. */
12
+ NATS_DASHBOARD_TOKEN: string;
13
+ /** How long a browser's WebSocket proxy ticket admits an upgrade. The dashboard fetches one per attempt. */
14
+ NATS_WS_TICKET_TTL_SECONDS: number;
15
+ /** Largest WebSocket frame the proxy accepts from a browser, near NATS's own max_payload. */
16
+ NATS_WS_MAX_PAYLOAD_BYTES: number;
17
+ /** How often the proxy rechecks a connection holder's account; a change closes the connection. */
18
+ NATS_WS_RECHECK_SECONDS: number;
19
+ /**
20
+ * Dashboard reconnect: first backoff delay, delay cap, how long a drop lasts
21
+ * before the banner shows, and the window the first retry and catch-up
22
+ * refetch spread across.
23
+ */
24
+ NATS_RECONNECT_INITIAL_MS: number;
25
+ NATS_RECONNECT_MAX_MS: number;
26
+ NATS_LIVE_NOTICE_AFTER_MS: number;
27
+ NATS_RECONNECT_SPREAD_MS: number;
11
28
  PORT: number;
12
29
  NODE_ENV: string;
13
30
  JWT_SECRET: string;
31
+ LT_SEED_SERVICE_KEYS: boolean;
32
+ LT_OAUTH_ISSUER: string;
14
33
  HONEYCOMB_API_KEY: string;
15
34
  ROLE_ENFORCEMENT_CACHE_TTL_MS: number;
16
35
  LT_ANALYTICS_MAX_GROUPS: number;
@@ -1,6 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.postgres_options = exports.config = void 0;
4
+ /** A positive integer from the environment, or the default when unset or malformed. */
5
+ function positiveInt(name, fallback) {
6
+ const value = Number(process.env[name]);
7
+ return Number.isInteger(value) && value > 0 ? value : fallback;
8
+ }
4
9
  exports.config = {
5
10
  POSTGRES_HOST: process.env.POSTGRES_HOST || 'localhost',
6
11
  POSTGRES_PORT: parseInt(process.env.POSTGRES_PORT || '5415', 10),
@@ -15,9 +20,31 @@ exports.config = {
15
20
  NATS_URL: process.env.NATS_URL || 'nats://localhost:4222',
16
21
  NATS_WS_URL: process.env.NATS_WS_URL || '',
17
22
  NATS_TOKEN: process.env.NATS_TOKEN || '',
23
+ /** A subscribe-only NATS credential for browsers that connect without the proxy. */
24
+ NATS_DASHBOARD_TOKEN: process.env.NATS_DASHBOARD_TOKEN || '',
25
+ /** How long a browser's WebSocket proxy ticket admits an upgrade. The dashboard fetches one per attempt. */
26
+ NATS_WS_TICKET_TTL_SECONDS: positiveInt('NATS_WS_TICKET_TTL_SECONDS', 300),
27
+ /** Largest WebSocket frame the proxy accepts from a browser, near NATS's own max_payload. */
28
+ NATS_WS_MAX_PAYLOAD_BYTES: positiveInt('NATS_WS_MAX_PAYLOAD_BYTES', 1024 * 1024),
29
+ /** How often the proxy rechecks a connection holder's account; a change closes the connection. */
30
+ NATS_WS_RECHECK_SECONDS: positiveInt('NATS_WS_RECHECK_SECONDS', 60),
31
+ /**
32
+ * Dashboard reconnect: first backoff delay, delay cap, how long a drop lasts
33
+ * before the banner shows, and the window the first retry and catch-up
34
+ * refetch spread across.
35
+ */
36
+ NATS_RECONNECT_INITIAL_MS: positiveInt('NATS_RECONNECT_INITIAL_MS', 1000),
37
+ NATS_RECONNECT_MAX_MS: positiveInt('NATS_RECONNECT_MAX_MS', 60000),
38
+ NATS_LIVE_NOTICE_AFTER_MS: positiveInt('NATS_LIVE_NOTICE_AFTER_MS', 30000),
39
+ NATS_RECONNECT_SPREAD_MS: positiveInt('NATS_RECONNECT_SPREAD_MS', 5000),
18
40
  PORT: parseInt(process.env.PORT || '3000', 10),
19
41
  NODE_ENV: process.env.NODE_ENV || 'development',
20
42
  JWT_SECRET: process.env.JWT_SECRET || '',
43
+ // Mint the seeded mcp-service account's API keys and print them to stdout once, at first seed.
44
+ // Local docker compose sets it; elsewhere a superadmin mints keys from the dashboard.
45
+ LT_SEED_SERVICE_KEYS: process.env.LT_SEED_SERVICE_KEYS === 'true',
46
+ // Enables the OAuth authorization server for /mcp when start() passes no auth.oauthServer.
47
+ LT_OAUTH_ISSUER: process.env.LT_OAUTH_ISSUER || '',
21
48
  HONEYCOMB_API_KEY: process.env.HONEYCOMB_API_KEY || '',
22
49
  // Resolver schema enforcement: TTL for the cached enforcing-role set and
23
50
  // latest role form schemas. Bounds cross-container staleness after a role
@@ -60,3 +60,13 @@ export declare const CLAIM_DURATION_OPTIONS: number[];
60
60
  export declare const STOP_WORDS: Set<string>;
61
61
  /** YAML dump line width. */
62
62
  export declare const YAML_LINE_WIDTH: number;
63
+ /** Access-token lifetime. Bounds how stale a token's roles can be when no revocation event arrives. */
64
+ export declare const OAUTH_ACCESS_TOKEN_TTL_SECONDS: number;
65
+ /** Refresh-token lifetime. Each refresh issues a new one. */
66
+ export declare const OAUTH_REFRESH_TOKEN_TTL_SECONDS: number;
67
+ /** Authorization-code lifetime, from consent to the client's token request. */
68
+ export declare const OAUTH_CODE_TTL_SECONDS: number;
69
+ /** Client registrations allowed per address in each window. */
70
+ export declare const OAUTH_REGISTRATIONS_PER_WINDOW: number;
71
+ /** Registration rate-limit window. */
72
+ export declare const OAUTH_REGISTRATION_WINDOW_SECONDS: number;
@@ -9,7 +9,7 @@
9
9
  * Grouped by domain so related knobs live together.
10
10
  */
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.YAML_LINE_WIDTH = exports.STOP_WORDS = exports.CLAIM_DURATION_OPTIONS = exports.ESCALATION_BULK_RESOLVE_MAX = exports.YAML_VERSION_LIMIT = exports.YAML_LIST_LIMIT = exports.QUERY_LIMIT_MAX = exports.QUERY_LIMIT_DEFAULT = exports.CONFIG_CACHE_TTL_MS = exports.MCP_TOOL_TIMEOUT_MS = exports.WORKFLOW_SYNC_TIMEOUT_MS = exports.JOB_EXPIRE_SECS = exports.WORKFLOW_EXPIRE_SECS = exports.TOOL_ARG_LIMIT_CAP = exports.TOOL_ROUNDS_MCP_QUERY = exports.TOOL_ROUNDS_TRIAGE = exports.TOOL_RESULT_MAX_CHARS = exports.LLM_MAX_INPUT_CHARS = exports.LLM_MAX_ARRAY_ITEMS = exports.LLM_MAX_TOKENS_VISION = exports.LLM_MAX_TOKENS_JSON = exports.LLM_MAX_TOKENS_DEFAULT = exports.LLM_BASE_URL = exports.LLM_MODEL_SECONDARY = exports.LLM_MODEL_PRIMARY = void 0;
12
+ exports.OAUTH_REGISTRATION_WINDOW_SECONDS = exports.OAUTH_REGISTRATIONS_PER_WINDOW = exports.OAUTH_CODE_TTL_SECONDS = exports.OAUTH_REFRESH_TOKEN_TTL_SECONDS = exports.OAUTH_ACCESS_TOKEN_TTL_SECONDS = exports.YAML_LINE_WIDTH = exports.STOP_WORDS = exports.CLAIM_DURATION_OPTIONS = exports.ESCALATION_BULK_RESOLVE_MAX = exports.YAML_VERSION_LIMIT = exports.YAML_LIST_LIMIT = exports.QUERY_LIMIT_MAX = exports.QUERY_LIMIT_DEFAULT = exports.CONFIG_CACHE_TTL_MS = exports.MCP_TOOL_TIMEOUT_MS = exports.WORKFLOW_SYNC_TIMEOUT_MS = exports.JOB_EXPIRE_SECS = exports.WORKFLOW_EXPIRE_SECS = exports.TOOL_ARG_LIMIT_CAP = exports.TOOL_ROUNDS_MCP_QUERY = exports.TOOL_ROUNDS_TRIAGE = exports.TOOL_RESULT_MAX_CHARS = exports.LLM_MAX_INPUT_CHARS = exports.LLM_MAX_ARRAY_ITEMS = exports.LLM_MAX_TOKENS_VISION = exports.LLM_MAX_TOKENS_JSON = exports.LLM_MAX_TOKENS_DEFAULT = exports.LLM_BASE_URL = exports.LLM_MODEL_SECONDARY = exports.LLM_MODEL_PRIMARY = void 0;
13
13
  function envInt(key, fallback) {
14
14
  const v = process.env[key];
15
15
  if (v === undefined || v === '')
@@ -97,3 +97,14 @@ exports.STOP_WORDS = new Set([
97
97
  // ── Formatting ───────────────────────────────────────────────────────
98
98
  /** YAML dump line width. */
99
99
  exports.YAML_LINE_WIDTH = envInt('LT_YAML_LINE_WIDTH', 120);
100
+ // ── OAuth authorization server ───────────────────────────────────────
101
+ /** Access-token lifetime. Bounds how stale a token's roles can be when no revocation event arrives. */
102
+ exports.OAUTH_ACCESS_TOKEN_TTL_SECONDS = envInt('LT_OAUTH_ACCESS_TOKEN_TTL_SECONDS', 300);
103
+ /** Refresh-token lifetime. Each refresh issues a new one. */
104
+ exports.OAUTH_REFRESH_TOKEN_TTL_SECONDS = envInt('LT_OAUTH_REFRESH_TOKEN_TTL_SECONDS', 30 * 24 * 60 * 60);
105
+ /** Authorization-code lifetime, from consent to the client's token request. */
106
+ exports.OAUTH_CODE_TTL_SECONDS = envInt('LT_OAUTH_CODE_TTL_SECONDS', 60);
107
+ /** Client registrations allowed per address in each window. */
108
+ exports.OAUTH_REGISTRATIONS_PER_WINDOW = envInt('LT_OAUTH_REGISTRATIONS_PER_WINDOW', 20);
109
+ /** Registration rate-limit window. */
110
+ exports.OAUTH_REGISTRATION_WINDOW_SECONDS = envInt('LT_OAUTH_REGISTRATION_WINDOW_SECONDS', 600);
@@ -10,6 +10,8 @@ import type { LTMaintenanceConfig } from '../types/maintenance';
10
10
  * 3. Strip execution artifacts from entity jobs older than 30 days
11
11
  * (preserves jdata, udata, jmark, hmark — exports always work)
12
12
  * 4. Hard-delete pruned jobs older than 180 days
13
+ * 5. Delete OAuth server rows (expired codes and tokens, unused or revoked
14
+ * grants, clients with no live grant) older than 7 days
13
15
  *
14
16
  * Conservative defaults — execution artifacts (activity inputs, stream
15
17
  * history) are needed for rich export data. Pruning too early strips
@@ -12,6 +12,8 @@ exports.defaultMaintenanceConfig = void 0;
12
12
  * 3. Strip execution artifacts from entity jobs older than 30 days
13
13
  * (preserves jdata, udata, jmark, hmark — exports always work)
14
14
  * 4. Hard-delete pruned jobs older than 180 days
15
+ * 5. Delete OAuth server rows (expired codes and tokens, unused or revoked
16
+ * grants, clients with no live grant) older than 7 days
15
17
  *
16
18
  * Conservative defaults — execution artifacts (activity inputs, stream
17
19
  * history) are needed for rich export data. Pruning too early strips
@@ -44,5 +46,10 @@ exports.defaultMaintenanceConfig = {
44
46
  olderThan: '180 days',
45
47
  pruned: true,
46
48
  },
49
+ {
50
+ target: 'oauth',
51
+ action: 'delete',
52
+ olderThan: '7 days',
53
+ },
47
54
  ],
48
55
  };
@@ -0,0 +1,11 @@
1
+ import type { RequestHandler } from '../lib/http';
2
+ /**
3
+ * Authentication for `/mcp`. Only a credential the request carries itself
4
+ * authenticates: the host's SSO cookie fallback never applies here, since a
5
+ * cookie rides along on a request any page the person visits can send. With
6
+ * the OAuth server configured, an access token for this resource
7
+ * authenticates the request while its grant is live, and every 401 carries
8
+ * the RFC 9728 challenge so MCP clients can discover how to sign in. Any other
9
+ * credential goes through the configured auth adapter unchanged.
10
+ */
11
+ export declare const requireMcpAuth: RequestHandler;