@hotmeshio/long-tail 0.23.2 → 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (483) hide show
  1. package/build/adapters/express.d.ts +9 -1
  2. package/build/adapters/express.js +32 -41
  3. package/build/api/auth-sso.d.ts +1 -1
  4. package/build/api/bot-accounts.d.ts +2 -0
  5. package/build/api/bot-accounts.js +4 -0
  6. package/build/api/capabilities.d.ts +7 -2
  7. package/build/api/capabilities.js +13 -2
  8. package/build/api/escalations/analytics.js +5 -0
  9. package/build/api/escalations/bulk.d.ts +2 -0
  10. package/build/api/escalations/bulk.js +9 -4
  11. package/build/api/escalations/helpers.d.ts +5 -0
  12. package/build/api/escalations/helpers.js +7 -0
  13. package/build/api/escalations/metadata.js +3 -0
  14. package/build/api/escalations/single.d.ts +3 -2
  15. package/build/api/escalations/single.js +8 -3
  16. package/build/api/mcp/tools.d.ts +12 -0
  17. package/build/api/mcp/tools.js +113 -9
  18. package/build/api/scan-codes/choice.js +31 -7
  19. package/build/api/settings.js +9 -0
  20. package/build/api/tasks.d.ts +3 -3
  21. package/build/api/tasks.js +30 -7
  22. package/build/api/workflows/input-lookups.js +1 -1
  23. package/build/api/workflows/invocable.js +2 -2
  24. package/build/api/workflows/invocation.js +1 -1
  25. package/build/api/yaml-workflows/deploy.d.ts +10 -2
  26. package/build/api/yaml-workflows/deploy.js +42 -2
  27. package/build/lib/db/schemas/038_oauth_server.sql +46 -0
  28. package/build/lib/events/browser-view.d.ts +15 -0
  29. package/build/lib/events/browser-view.js +101 -0
  30. package/build/lib/events/nats-ws-filter.d.ts +29 -0
  31. package/build/lib/events/nats-ws-filter.js +94 -0
  32. package/build/lib/events/nats-ws-proxy.d.ts +2 -0
  33. package/build/lib/events/nats-ws-proxy.js +39 -5
  34. package/build/lib/events/nats-ws-server-filter.d.ts +16 -0
  35. package/build/lib/events/nats-ws-server-filter.js +56 -0
  36. package/build/lib/events/nats-ws-ticket.d.ts +10 -0
  37. package/build/lib/events/nats-ws-ticket.js +42 -0
  38. package/build/lib/events/socketio.d.ts +10 -1
  39. package/build/lib/events/socketio.js +10 -3
  40. package/build/lib/http/index.d.ts +27 -0
  41. package/build/lib/http/index.js +55 -0
  42. package/build/modules/auth.d.ts +15 -24
  43. package/build/modules/auth.js +43 -126
  44. package/build/modules/capabilities.d.ts +62 -0
  45. package/build/modules/capabilities.js +188 -0
  46. package/build/modules/config.d.ts +14 -0
  47. package/build/modules/config.js +20 -0
  48. package/build/modules/defaults.d.ts +10 -0
  49. package/build/modules/defaults.js +12 -1
  50. package/build/modules/mcp-auth.d.ts +11 -0
  51. package/build/modules/mcp-auth.js +56 -0
  52. package/build/modules/oauth-server.d.ts +18 -0
  53. package/build/modules/oauth-server.js +40 -0
  54. package/build/routes/agents.js +46 -14
  55. package/build/routes/announcements.js +2 -2
  56. package/build/routes/auth-sso.js +2 -2
  57. package/build/routes/auth.js +2 -2
  58. package/build/routes/bot-accounts.js +26 -3
  59. package/build/routes/capabilities.js +4 -4
  60. package/build/routes/controlplane.js +2 -2
  61. package/build/routes/dba.js +2 -2
  62. package/build/routes/delegation.js +2 -2
  63. package/build/routes/diagnostics.js +2 -2
  64. package/build/routes/docs.js +2 -2
  65. package/build/routes/domain.js +2 -2
  66. package/build/routes/escalations/accumulate.d.ts +1 -1
  67. package/build/routes/escalations/acting.d.ts +1 -1
  68. package/build/routes/escalations/analytics.d.ts +1 -1
  69. package/build/routes/escalations/bulk.d.ts +1 -1
  70. package/build/routes/escalations/facets.d.ts +1 -1
  71. package/build/routes/escalations/index.js +2 -2
  72. package/build/routes/escalations/list.d.ts +1 -1
  73. package/build/routes/escalations/metadata.d.ts +1 -1
  74. package/build/routes/escalations/related.d.ts +1 -1
  75. package/build/routes/escalations/resolve.d.ts +1 -1
  76. package/build/routes/escalations/single.d.ts +1 -1
  77. package/build/routes/escalations/single.js +1 -1
  78. package/build/routes/exports.js +14 -13
  79. package/build/routes/file-browser.js +9 -8
  80. package/build/routes/files.js +2 -2
  81. package/build/routes/index.js +4 -2
  82. package/build/routes/insight.js +5 -4
  83. package/build/routes/knowledge.js +2 -2
  84. package/build/routes/maintenance.js +2 -2
  85. package/build/routes/mcp-endpoint.d.ts +3 -1
  86. package/build/routes/mcp-endpoint.js +18 -8
  87. package/build/routes/mcp.js +35 -15
  88. package/build/routes/me.js +2 -2
  89. package/build/routes/namespaces.js +4 -3
  90. package/build/routes/nats-credentials.js +27 -3
  91. package/build/routes/oauth-server/authorize.d.ts +2 -0
  92. package/build/routes/oauth-server/authorize.js +108 -0
  93. package/build/routes/oauth-server/grants.d.ts +2 -0
  94. package/build/routes/oauth-server/grants.js +35 -0
  95. package/build/routes/oauth-server/index.d.ts +8 -0
  96. package/build/routes/oauth-server/index.js +52 -0
  97. package/build/routes/oauth-server/registration.d.ts +2 -0
  98. package/build/routes/oauth-server/registration.js +38 -0
  99. package/build/routes/oauth-server/token.d.ts +2 -0
  100. package/build/routes/oauth-server/token.js +100 -0
  101. package/build/routes/oauth-well-known.d.ts +8 -0
  102. package/build/routes/oauth-well-known.js +31 -0
  103. package/build/routes/oauth.js +2 -2
  104. package/build/routes/overview.js +2 -2
  105. package/build/routes/personas.js +2 -2
  106. package/build/routes/pipelines.js +6 -5
  107. package/build/routes/roles.js +2 -2
  108. package/build/routes/scan-codes.js +2 -2
  109. package/build/routes/settings.js +2 -2
  110. package/build/routes/tasks.js +5 -5
  111. package/build/routes/topics.js +21 -9
  112. package/build/routes/users.js +25 -22
  113. package/build/routes/workflow-sets.js +13 -12
  114. package/build/routes/workflows/config.js +15 -2
  115. package/build/routes/workflows/discovery.js +2 -2
  116. package/build/routes/workflows/index.js +2 -2
  117. package/build/routes/workflows/invocation.js +11 -10
  118. package/build/routes/yaml-workflows/cron.js +19 -6
  119. package/build/routes/yaml-workflows/crud.js +13 -12
  120. package/build/routes/yaml-workflows/deployment.js +11 -10
  121. package/build/routes/yaml-workflows/index.js +2 -2
  122. package/build/routes/yaml-workflows/versions.js +2 -2
  123. package/build/services/agent/authority.d.ts +14 -0
  124. package/build/services/agent/authority.js +53 -0
  125. package/build/services/auth/bot-api-key.d.ts +2 -0
  126. package/build/services/auth/bot-api-key.js +10 -0
  127. package/build/services/auth/oauth-server/access-token.d.ts +36 -0
  128. package/build/services/auth/oauth-server/access-token.js +80 -0
  129. package/build/services/auth/oauth-server/authorization.d.ts +47 -0
  130. package/build/services/auth/oauth-server/authorization.js +54 -0
  131. package/build/services/auth/oauth-server/constants.d.ts +11 -0
  132. package/build/services/auth/oauth-server/constants.js +16 -0
  133. package/build/services/auth/oauth-server/index.d.ts +3 -0
  134. package/build/services/auth/oauth-server/index.js +26 -0
  135. package/build/services/auth/oauth-server/metadata.d.ts +21 -0
  136. package/build/services/auth/oauth-server/metadata.js +53 -0
  137. package/build/services/auth/oauth-server/registration.d.ts +42 -0
  138. package/build/services/auth/oauth-server/registration.js +134 -0
  139. package/build/services/auth/oauth-server/sql.d.ts +34 -0
  140. package/build/services/auth/oauth-server/sql.js +123 -0
  141. package/build/services/auth/oauth-server/store.d.ts +74 -0
  142. package/build/services/auth/oauth-server/store.js +151 -0
  143. package/build/services/auth/sql.d.ts +1 -0
  144. package/build/services/auth/sql.js +3 -1
  145. package/build/services/escalation/queries.js +7 -2
  146. package/build/services/export/index.d.ts +10 -0
  147. package/build/services/export/index.js +27 -0
  148. package/build/services/invocation-access.d.ts +25 -4
  149. package/build/services/invocation-access.js +39 -7
  150. package/build/services/mcp/client/connection-dispatch.d.ts +6 -1
  151. package/build/services/mcp/client/connection-dispatch.js +3 -2
  152. package/build/services/mcp/client/connection-lifecycle.d.ts +10 -2
  153. package/build/services/mcp/client/connection-lifecycle.js +45 -7
  154. package/build/services/mcp/client/connection-test.js +2 -6
  155. package/build/services/mcp/client/connection.d.ts +1 -1
  156. package/build/services/mcp/client/connection.js +3 -1
  157. package/build/services/mcp/client/index.d.ts +2 -2
  158. package/build/services/mcp/client/index.js +4 -1
  159. package/build/services/mcp/client/network-transport.d.ts +12 -0
  160. package/build/services/mcp/client/network-transport.js +20 -0
  161. package/build/services/mcp/client/tools.d.ts +13 -0
  162. package/build/services/mcp/client/tools.js +18 -0
  163. package/build/services/mcp/db-server/index.js +2 -1
  164. package/build/services/mcp/external-server.d.ts +9 -4
  165. package/build/services/mcp/external-server.js +34 -11
  166. package/build/services/mcp/playwright-server/index.js +2 -1
  167. package/build/services/mcp/registered-tools.d.ts +3 -0
  168. package/build/services/mcp/registered-tools.js +7 -0
  169. package/build/services/mcp/server-lifecycle.js +2 -1
  170. package/build/services/workflow-invocation.d.ts +16 -3
  171. package/build/services/workflow-invocation.js +42 -10
  172. package/build/services/yaml-workflow/deployer.d.ts +10 -2
  173. package/build/services/yaml-workflow/deployer.js +17 -5
  174. package/build/services/yaml-workflow/invoke.js +27 -26
  175. package/build/start/config.js +7 -0
  176. package/build/start/index.js +4 -22
  177. package/build/start/server.d.ts +6 -4
  178. package/build/start/server.js +11 -35
  179. package/build/start/socket-auth.js +2 -1
  180. package/build/start/workers.js +1 -1
  181. package/build/system/mcp-servers/admin/agent-subscriptions.js +24 -1
  182. package/build/system/mcp-servers/admin/agents.js +25 -2
  183. package/build/system/mcp-servers/admin/announcements.js +3 -2
  184. package/build/system/mcp-servers/admin/bot-accounts.js +37 -5
  185. package/build/system/mcp-servers/admin/escalations.d.ts +3 -5
  186. package/build/system/mcp-servers/admin/escalations.js +74 -70
  187. package/build/system/mcp-servers/admin/exports.js +7 -1
  188. package/build/system/mcp-servers/admin/index.js +24 -25
  189. package/build/system/mcp-servers/admin/overview.d.ts +2 -2
  190. package/build/system/mcp-servers/admin/run-read.d.ts +2 -0
  191. package/build/system/mcp-servers/admin/run-read.js +5 -0
  192. package/build/system/mcp-servers/admin/scan-codes.d.ts +2 -2
  193. package/build/system/mcp-servers/admin/scan-codes.js +5 -11
  194. package/build/system/mcp-servers/admin/schemas.d.ts +20 -20
  195. package/build/system/mcp-servers/admin/tasks.js +7 -2
  196. package/build/system/mcp-servers/admin/users.js +31 -4
  197. package/build/system/mcp-servers/admin/workflow-config.js +12 -1
  198. package/build/system/mcp-servers/admin/workflows.js +27 -5
  199. package/build/system/mcp-servers/admin/yaml-workflows.js +7 -1
  200. package/build/system/mcp-servers/caller-auth.d.ts +18 -0
  201. package/build/system/mcp-servers/caller-auth.js +29 -0
  202. package/build/system/mcp-servers/claude-code.js +2 -1
  203. package/build/system/mcp-servers/db-query/index.js +2 -1
  204. package/build/system/mcp-servers/file-storage.js +2 -1
  205. package/build/system/mcp-servers/http-fetch.js +2 -1
  206. package/build/system/mcp-servers/human-queue.js +7 -3
  207. package/build/system/mcp-servers/oauth.js +31 -4
  208. package/build/system/mcp-servers/schema-exchange.js +2 -1
  209. package/build/system/mcp-servers/vision.d.ts +1 -0
  210. package/build/system/mcp-servers/vision.js +17 -7
  211. package/build/system/seed/tool-manifests-admin.d.ts +2 -17985
  212. package/build/system/seed/tool-manifests-admin.js +121 -121
  213. package/build/system/seed/tool-manifests-data.d.ts +8 -374
  214. package/build/system/seed/tool-manifests-data.js +22 -4
  215. package/build/system/seed/tool-manifests-escalation.d.ts +2 -352
  216. package/build/system/seed/tool-manifests-escalation.js +11 -1
  217. package/build/system/seed/tool-manifests-events.d.ts +2 -116
  218. package/build/system/seed/tool-manifests-events.js +6 -2
  219. package/build/system/seed/tool-manifests-knowledge.d.ts +2 -221
  220. package/build/system/seed/tool-manifests-knowledge.js +41 -1
  221. package/build/system/seed/tool-manifests-workflows.d.ts +2 -71
  222. package/build/system/seed/tool-manifests-workflows.js +3 -1
  223. package/build/system/workflows/shared/principal-tools.d.ts +20 -0
  224. package/build/system/workflows/shared/principal-tools.js +64 -0
  225. package/build/system/workflows/shared/tool-executor.js +21 -11
  226. package/build/system/workflows/shared/tool-loader.js +8 -1
  227. package/build/tsconfig.tsbuildinfo +1 -1
  228. package/build/types/auth.d.ts +1 -1
  229. package/build/types/capability.d.ts +14 -0
  230. package/build/types/capability.js +2 -0
  231. package/build/types/events.d.ts +1 -1
  232. package/build/types/index.d.ts +3 -1
  233. package/build/types/mcp.d.ts +3 -1
  234. package/build/types/oauth-server.d.ts +52 -0
  235. package/build/types/oauth-server.js +2 -0
  236. package/build/types/startup.d.ts +15 -7
  237. package/build/vitest.config.js +2 -1
  238. package/build/vitest.fast.config.d.ts +2 -0
  239. package/build/vitest.fast.config.js +20 -0
  240. package/build/vitest.llm.config.d.ts +2 -0
  241. package/build/vitest.llm.config.js +16 -0
  242. package/dashboard/dist/assets/{AdminDashboard-BPWsgMfZ.js → AdminDashboard-B3mkMIOT.js} +2 -2
  243. package/dashboard/dist/assets/{AdminDashboard-BPWsgMfZ.js.map → AdminDashboard-B3mkMIOT.js.map} +1 -1
  244. package/dashboard/dist/assets/{AgentConfigPage-De9imyo5.js → AgentConfigPage-CQj2B678.js} +2 -2
  245. package/dashboard/dist/assets/{AgentConfigPage-De9imyo5.js.map → AgentConfigPage-CQj2B678.js.map} +1 -1
  246. package/dashboard/dist/assets/{AgentDetailPage-B6o96Y5G.js → AgentDetailPage-CzrD8JJI.js} +3 -3
  247. package/dashboard/dist/assets/{AgentDetailPage-B6o96Y5G.js.map → AgentDetailPage-CzrD8JJI.js.map} +1 -1
  248. package/dashboard/dist/assets/{AgentsPage-DMEmiK_W.js → AgentsPage-jg2OFwyW.js} +2 -2
  249. package/dashboard/dist/assets/{AgentsPage-DMEmiK_W.js.map → AgentsPage-jg2OFwyW.js.map} +1 -1
  250. package/dashboard/dist/assets/{AvailableEscalationsPage-DeYMngwE.js → AvailableEscalationsPage-IS28XBRe.js} +2 -2
  251. package/dashboard/dist/assets/{AvailableEscalationsPage-DeYMngwE.js.map → AvailableEscalationsPage-IS28XBRe.js.map} +1 -1
  252. package/dashboard/dist/assets/{BotPicker-DDmpgGHZ.js → BotPicker-DvEJFpwS.js} +2 -2
  253. package/dashboard/dist/assets/{BotPicker-DDmpgGHZ.js.map → BotPicker-DvEJFpwS.js.map} +1 -1
  254. package/dashboard/dist/assets/{BulkAssignModal-BqlklomG.js → BulkAssignModal-BoQCi-YC.js} +2 -2
  255. package/dashboard/dist/assets/{BulkAssignModal-BqlklomG.js.map → BulkAssignModal-BoQCi-YC.js.map} +1 -1
  256. package/dashboard/dist/assets/{CapabilitiesPage-DOtjDTbK.js → CapabilitiesPage-kwlrcb_t.js} +2 -2
  257. package/dashboard/dist/assets/{CapabilitiesPage-DOtjDTbK.js.map → CapabilitiesPage-kwlrcb_t.js.map} +1 -1
  258. package/dashboard/dist/assets/{CollapsibleSection-CLr8LP0V.js → CollapsibleSection-UMIV4KIj.js} +2 -2
  259. package/dashboard/dist/assets/{CollapsibleSection-CLr8LP0V.js.map → CollapsibleSection-UMIV4KIj.js.map} +1 -1
  260. package/dashboard/dist/assets/ConfirmDeleteModal-C5puwMg7.js +2 -0
  261. package/dashboard/dist/assets/ConfirmDeleteModal-C5puwMg7.js.map +1 -0
  262. package/dashboard/dist/assets/ConnectedAppsPage-drZa65kP.js +2 -0
  263. package/dashboard/dist/assets/ConnectedAppsPage-drZa65kP.js.map +1 -0
  264. package/dashboard/dist/assets/{CountdownTimer-DxX72PwV.js → CountdownTimer-LG03dVgR.js} +2 -2
  265. package/dashboard/dist/assets/{CountdownTimer-DxX72PwV.js.map → CountdownTimer-LG03dVgR.js.map} +1 -1
  266. package/dashboard/dist/assets/{CredentialsPage-CObc9Rs5.js → CredentialsPage-CaFQ6vLb.js} +2 -2
  267. package/dashboard/dist/assets/{CredentialsPage-CObc9Rs5.js.map → CredentialsPage-CaFQ6vLb.js.map} +1 -1
  268. package/dashboard/dist/assets/{CronLabel-Bb8GoNY5.js → CronLabel-Co5j7tzW.js} +2 -2
  269. package/dashboard/dist/assets/{CronLabel-Bb8GoNY5.js.map → CronLabel-Co5j7tzW.js.map} +1 -1
  270. package/dashboard/dist/assets/{ElapsedCell-CmGhVlYl.js → ElapsedCell-WJyE9G0T.js} +2 -2
  271. package/dashboard/dist/assets/{ElapsedCell-CmGhVlYl.js.map → ElapsedCell-WJyE9G0T.js.map} +1 -1
  272. package/dashboard/dist/assets/{EntityTimelinePanel-B4Jwy1w3.js → EntityTimelinePanel-CDFFfX9d.js} +2 -2
  273. package/dashboard/dist/assets/{EntityTimelinePanel-B4Jwy1w3.js.map → EntityTimelinePanel-CDFFfX9d.js.map} +1 -1
  274. package/dashboard/dist/assets/{EscalationListSchemaPage-CZZbZ4Aa.js → EscalationListSchemaPage-CMrUlaKI.js} +3 -3
  275. package/dashboard/dist/assets/{EscalationListSchemaPage-CZZbZ4Aa.js.map → EscalationListSchemaPage-CMrUlaKI.js.map} +1 -1
  276. package/dashboard/dist/assets/{EscalationSchemaPage-D0ko59_S.js → EscalationSchemaPage-Dx2Lyfrz.js} +2 -2
  277. package/dashboard/dist/assets/{EscalationSchemaPage-D0ko59_S.js.map → EscalationSchemaPage-Dx2Lyfrz.js.map} +1 -1
  278. package/dashboard/dist/assets/{EscalationTimeline-BcnJEKFD.js → EscalationTimeline-d3nvshOk.js} +2 -2
  279. package/dashboard/dist/assets/{EscalationTimeline-BcnJEKFD.js.map → EscalationTimeline-d3nvshOk.js.map} +1 -1
  280. package/dashboard/dist/assets/{EscalationTitleSelect-P0q5sck4.js → EscalationTitleSelect-DWQieOM9.js} +2 -2
  281. package/dashboard/dist/assets/{EscalationTitleSelect-P0q5sck4.js.map → EscalationTitleSelect-DWQieOM9.js.map} +1 -1
  282. package/dashboard/dist/assets/{EscalationsOverview-BLPmh4AF.js → EscalationsOverview-BX8Cpi0X.js} +2 -2
  283. package/dashboard/dist/assets/{EscalationsOverview-BLPmh4AF.js.map → EscalationsOverview-BX8Cpi0X.js.map} +1 -1
  284. package/dashboard/dist/assets/{EventTable-gBzi5tIS.js → EventTable-D1-ITVXS.js} +2 -2
  285. package/dashboard/dist/assets/{EventTable-gBzi5tIS.js.map → EventTable-D1-ITVXS.js.map} +1 -1
  286. package/dashboard/dist/assets/{FilterBar-BulSsWb2.js → FilterBar-ABC9ctin.js} +2 -2
  287. package/dashboard/dist/assets/{FilterBar-BulSsWb2.js.map → FilterBar-ABC9ctin.js.map} +1 -1
  288. package/dashboard/dist/assets/{FormattedValue-BMHRrvrL.js → FormattedValue-k27T4bG7.js} +2 -2
  289. package/dashboard/dist/assets/{FormattedValue-BMHRrvrL.js.map → FormattedValue-k27T4bG7.js.map} +1 -1
  290. package/dashboard/dist/assets/{GraphInvokePage--997yNRr.js → GraphInvokePage-DKUErxWc.js} +2 -2
  291. package/dashboard/dist/assets/{GraphInvokePage--997yNRr.js.map → GraphInvokePage-DKUErxWc.js.map} +1 -1
  292. package/dashboard/dist/assets/{HomePage-CwXFz--v.js → HomePage-C6u9dIpR.js} +2 -2
  293. package/dashboard/dist/assets/{HomePage-CwXFz--v.js.map → HomePage-C6u9dIpR.js.map} +1 -1
  294. package/dashboard/dist/assets/{ListToolbar-Df4qZryJ.js → ListToolbar-gA5rFzkz.js} +2 -2
  295. package/dashboard/dist/assets/{ListToolbar-Df4qZryJ.js.map → ListToolbar-gA5rFzkz.js.map} +1 -1
  296. package/dashboard/dist/assets/{McpOverview-DrogIAKJ.js → McpOverview-BOPo3J_i.js} +2 -2
  297. package/dashboard/dist/assets/{McpOverview-DrogIAKJ.js.map → McpOverview-BOPo3J_i.js.map} +1 -1
  298. package/dashboard/dist/assets/{McpQueryDetailPage-CJmvCAE6.js → McpQueryDetailPage-BRVVi0Zh.js} +2 -2
  299. package/dashboard/dist/assets/{McpQueryDetailPage-CJmvCAE6.js.map → McpQueryDetailPage-BRVVi0Zh.js.map} +1 -1
  300. package/dashboard/dist/assets/{McpQueryPage-lygo4Yq0.js → McpQueryPage-Dmbb6SAc.js} +2 -2
  301. package/dashboard/dist/assets/{McpQueryPage-lygo4Yq0.js.map → McpQueryPage-Dmbb6SAc.js.map} +1 -1
  302. package/dashboard/dist/assets/{McpRunDetailPage-hvns2sCm.js → McpRunDetailPage-bMXNO-6V.js} +2 -2
  303. package/dashboard/dist/assets/{McpRunDetailPage-hvns2sCm.js.map → McpRunDetailPage-bMXNO-6V.js.map} +1 -1
  304. package/dashboard/dist/assets/{McpRunsPage-C2_7spTX.js → McpRunsPage-Bi9AMWja.js} +2 -2
  305. package/dashboard/dist/assets/{McpRunsPage-C2_7spTX.js.map → McpRunsPage-Bi9AMWja.js.map} +1 -1
  306. package/dashboard/dist/assets/{OperationsPage-BlK8WlsY.js → OperationsPage-CvR74ZUJ.js} +3 -3
  307. package/dashboard/dist/assets/{OperationsPage-BlK8WlsY.js.map → OperationsPage-CvR74ZUJ.js.map} +1 -1
  308. package/dashboard/dist/assets/{OperatorDashboard-BeWBiMGX.js → OperatorDashboard-DctmZw10.js} +2 -2
  309. package/dashboard/dist/assets/{OperatorDashboard-BeWBiMGX.js.map → OperatorDashboard-DctmZw10.js.map} +1 -1
  310. package/dashboard/dist/assets/{PersonaDetailPage-CNHpsX_i.js → PersonaDetailPage-Ubqm2rQH.js} +2 -2
  311. package/dashboard/dist/assets/{PersonaDetailPage-CNHpsX_i.js.map → PersonaDetailPage-Ubqm2rQH.js.map} +1 -1
  312. package/dashboard/dist/assets/{PersonasPage-ChASEZRg.js → PersonasPage-BpFL2rpo.js} +2 -2
  313. package/dashboard/dist/assets/{PersonasPage-ChASEZRg.js.map → PersonasPage-BpFL2rpo.js.map} +1 -1
  314. package/dashboard/dist/assets/{PortalPage-D5Lk-PKF.js → PortalPage-Dfc_Q02R.js} +2 -2
  315. package/dashboard/dist/assets/{PortalPage-D5Lk-PKF.js.map → PortalPage-Dfc_Q02R.js.map} +1 -1
  316. package/dashboard/dist/assets/ProcessDetailPage-liJspvQh.js +2 -0
  317. package/dashboard/dist/assets/{ProcessDetailPage-DNgCIwRl.js.map → ProcessDetailPage-liJspvQh.js.map} +1 -1
  318. package/dashboard/dist/assets/{ProcessesListPage-pRjWuWlH.js → ProcessesListPage-C3OM5ZUy.js} +2 -2
  319. package/dashboard/dist/assets/{ProcessesListPage-pRjWuWlH.js.map → ProcessesListPage-C3OM5ZUy.js.map} +1 -1
  320. package/dashboard/dist/assets/ResolverForm-B1_x8Blv.js +8 -0
  321. package/dashboard/dist/assets/ResolverForm-B1_x8Blv.js.map +1 -0
  322. package/dashboard/dist/assets/{RoleDetailPage-Bh_UcfYY.js → RoleDetailPage-CrlYCh-R.js} +2 -2
  323. package/dashboard/dist/assets/{RoleDetailPage-Bh_UcfYY.js.map → RoleDetailPage-CrlYCh-R.js.map} +1 -1
  324. package/dashboard/dist/assets/{RolesPage-CK17N7zz.js → RolesPage-BaazL_pt.js} +2 -2
  325. package/dashboard/dist/assets/{RolesPage-CK17N7zz.js.map → RolesPage-BaazL_pt.js.map} +1 -1
  326. package/dashboard/dist/assets/{RunAsSelector-BEKUP0p2.js → RunAsSelector-DxuV0fa1.js} +2 -2
  327. package/dashboard/dist/assets/{RunAsSelector-BEKUP0p2.js.map → RunAsSelector-DxuV0fa1.js.map} +1 -1
  328. package/dashboard/dist/assets/{ScanCodesPage-Bd0Pflqx.js → ScanCodesPage-C0mvmYTq.js} +2 -2
  329. package/dashboard/dist/assets/{ScanCodesPage-Bd0Pflqx.js.map → ScanCodesPage-C0mvmYTq.js.map} +1 -1
  330. package/dashboard/dist/assets/{ScanSchemeDetailPage-CnuhozmJ.js → ScanSchemeDetailPage-CiJgt5dZ.js} +2 -2
  331. package/dashboard/dist/assets/{ScanSchemeDetailPage-CnuhozmJ.js.map → ScanSchemeDetailPage-CiJgt5dZ.js.map} +1 -1
  332. package/dashboard/dist/assets/{ScanStationPage-CoLc-q3h.js → ScanStationPage-DzGaXc40.js} +2 -2
  333. package/dashboard/dist/assets/{ScanStationPage-CoLc-q3h.js.map → ScanStationPage-DzGaXc40.js.map} +1 -1
  334. package/dashboard/dist/assets/{StickyPagination-COrfvkBi.js → StickyPagination-CqbjVY6T.js} +2 -2
  335. package/dashboard/dist/assets/{StickyPagination-COrfvkBi.js.map → StickyPagination-CqbjVY6T.js.map} +1 -1
  336. package/dashboard/dist/assets/{StreamMessageDetail-Cif2egLy.js → StreamMessageDetail-wX3i0aqs.js} +2 -2
  337. package/dashboard/dist/assets/{StreamMessageDetail-Cif2egLy.js.map → StreamMessageDetail-wX3i0aqs.js.map} +1 -1
  338. package/dashboard/dist/assets/{SwimlaneTimeline-BnZYTrAh.js → SwimlaneTimeline-C50PsFoV.js} +2 -2
  339. package/dashboard/dist/assets/{SwimlaneTimeline-BnZYTrAh.js.map → SwimlaneTimeline-C50PsFoV.js.map} +1 -1
  340. package/dashboard/dist/assets/{TaskDetailPage-DEz_dqyR.js → TaskDetailPage-bbNSv4Ae.js} +2 -2
  341. package/dashboard/dist/assets/{TaskDetailPage-DEz_dqyR.js.map → TaskDetailPage-bbNSv4Ae.js.map} +1 -1
  342. package/dashboard/dist/assets/{TasksListPage-oEfEGj0_.js → TasksListPage-CDWnm_d9.js} +2 -2
  343. package/dashboard/dist/assets/{TasksListPage-oEfEGj0_.js.map → TasksListPage-CDWnm_d9.js.map} +1 -1
  344. package/dashboard/dist/assets/{TimeAgo-Dz5TgZZZ.js → TimeAgo-BLjqlfoX.js} +2 -2
  345. package/dashboard/dist/assets/{TimeAgo-Dz5TgZZZ.js.map → TimeAgo-BLjqlfoX.js.map} +1 -1
  346. package/dashboard/dist/assets/{TimestampCell-BUTgE244.js → TimestampCell-CnW0ENb5.js} +2 -2
  347. package/dashboard/dist/assets/{TimestampCell-BUTgE244.js.map → TimestampCell-CnW0ENb5.js.map} +1 -1
  348. package/dashboard/dist/assets/{ToolTestPanel-BS4g6vt-.js → ToolTestPanel-DkMgCB-k.js} +2 -2
  349. package/dashboard/dist/assets/{ToolTestPanel-BS4g6vt-.js.map → ToolTestPanel-DkMgCB-k.js.map} +1 -1
  350. package/dashboard/dist/assets/{TopicDetailPage-C_I6JIVD.js → TopicDetailPage-g3pljKKX.js} +2 -2
  351. package/dashboard/dist/assets/{TopicDetailPage-C_I6JIVD.js.map → TopicDetailPage-g3pljKKX.js.map} +1 -1
  352. package/dashboard/dist/assets/{TopicsPage-Cr6-wfhJ.js → TopicsPage-CVcCYdy-.js} +2 -2
  353. package/dashboard/dist/assets/{TopicsPage-Cr6-wfhJ.js.map → TopicsPage-CVcCYdy-.js.map} +1 -1
  354. package/dashboard/dist/assets/{UserName-ZFpWMaFF.js → UserName-D6zGIK2i.js} +2 -2
  355. package/dashboard/dist/assets/{UserName-ZFpWMaFF.js.map → UserName-D6zGIK2i.js.map} +1 -1
  356. package/dashboard/dist/assets/{WorkflowExecutionPage-ByPixDZW.js → WorkflowExecutionPage-B8g81FCJ.js} +2 -2
  357. package/dashboard/dist/assets/{WorkflowExecutionPage-ByPixDZW.js.map → WorkflowExecutionPage-B8g81FCJ.js.map} +1 -1
  358. package/dashboard/dist/assets/{WorkflowsDashboard-CWsJdMdR.js → WorkflowsDashboard-nxT3bv6W.js} +2 -2
  359. package/dashboard/dist/assets/{WorkflowsDashboard-CWsJdMdR.js.map → WorkflowsDashboard-nxT3bv6W.js.map} +1 -1
  360. package/dashboard/dist/assets/{WorkflowsOverview-Dk9gyqZN.js → WorkflowsOverview-grI-KAI2.js} +2 -2
  361. package/dashboard/dist/assets/{WorkflowsOverview-Dk9gyqZN.js.map → WorkflowsOverview-grI-KAI2.js.map} +1 -1
  362. package/dashboard/dist/assets/{YamlWorkflowDetailPage-CHwcrsaT.js → YamlWorkflowDetailPage-BoZ-hfBE.js} +2 -2
  363. package/dashboard/dist/assets/{YamlWorkflowDetailPage-CHwcrsaT.js.map → YamlWorkflowDetailPage-BoZ-hfBE.js.map} +1 -1
  364. package/dashboard/dist/assets/{YamlWorkflowsPage-B5jRX2Ph.js → YamlWorkflowsPage-Bf04rwRv.js} +2 -2
  365. package/dashboard/dist/assets/{YamlWorkflowsPage-B5jRX2Ph.js.map → YamlWorkflowsPage-Bf04rwRv.js.map} +1 -1
  366. package/dashboard/dist/assets/{agents-Dd7E-27d.js → agents-Dphpdi8l.js} +2 -2
  367. package/dashboard/dist/assets/{agents-Dd7E-27d.js.map → agents-Dphpdi8l.js.map} +1 -1
  368. package/dashboard/dist/assets/{bots-CpaYjZTk.js → bots-DIFE298x.js} +2 -2
  369. package/dashboard/dist/assets/{bots-CpaYjZTk.js.map → bots-DIFE298x.js.map} +1 -1
  370. package/dashboard/dist/assets/{capabilities-CNjg_qv1.js → capabilities-D7Y7LClY.js} +2 -2
  371. package/dashboard/dist/assets/{capabilities-CNjg_qv1.js.map → capabilities-D7Y7LClY.js.map} +1 -1
  372. package/dashboard/dist/assets/{controlplane-DgmvnAtU.js → controlplane-D1TGcYsS.js} +2 -2
  373. package/dashboard/dist/assets/{controlplane-DgmvnAtU.js.map → controlplane-D1TGcYsS.js.map} +1 -1
  374. package/dashboard/dist/assets/{escalation-columns-Uj4U9g5H.js → escalation-columns-cwZE6xyo.js} +2 -2
  375. package/dashboard/dist/assets/{escalation-columns-Uj4U9g5H.js.map → escalation-columns-cwZE6xyo.js.map} +1 -1
  376. package/dashboard/dist/assets/{index-x5z73M9N.js → index-BzYcUPdD.js} +2 -2
  377. package/dashboard/dist/assets/{index-x5z73M9N.js.map → index-BzYcUPdD.js.map} +1 -1
  378. package/dashboard/dist/assets/index-CeCtqujG.js +67 -0
  379. package/dashboard/dist/assets/index-CeCtqujG.js.map +1 -0
  380. package/dashboard/dist/assets/{index-RIFT3RlO.js → index-ChV7pBjM.js} +2 -2
  381. package/dashboard/dist/assets/{index-RIFT3RlO.js.map → index-ChV7pBjM.js.map} +1 -1
  382. package/dashboard/dist/assets/{index-OfO0173w.js → index-CniRa65p.js} +2 -2
  383. package/dashboard/dist/assets/{index-OfO0173w.js.map → index-CniRa65p.js.map} +1 -1
  384. package/dashboard/dist/assets/{index-ByBy9M3L.js → index-CxdjT1Yk.js} +2 -2
  385. package/dashboard/dist/assets/{index-ByBy9M3L.js.map → index-CxdjT1Yk.js.map} +1 -1
  386. package/dashboard/dist/assets/{index-C_K7OlzT.js → index-DAvi5_2T.js} +2 -2
  387. package/dashboard/dist/assets/{index-C_K7OlzT.js.map → index-DAvi5_2T.js.map} +1 -1
  388. package/dashboard/dist/assets/{index-BrwqtXRh.js → index-DN-kX7hL.js} +2 -2
  389. package/dashboard/dist/assets/{index-BrwqtXRh.js.map → index-DN-kX7hL.js.map} +1 -1
  390. package/dashboard/dist/assets/index-Dl_8hbYI.js +2 -0
  391. package/dashboard/dist/assets/index-Dl_8hbYI.js.map +1 -0
  392. package/dashboard/dist/assets/{index-D4Dlznn9.js → index-DpKOr311.js} +2 -2
  393. package/dashboard/dist/assets/{index-D4Dlznn9.js.map → index-DpKOr311.js.map} +1 -1
  394. package/dashboard/dist/assets/{index-CnOvJz6U.js → index-Dy1wWu2e.js} +2 -2
  395. package/dashboard/dist/assets/{index-CnOvJz6U.js.map → index-Dy1wWu2e.js.map} +1 -1
  396. package/dashboard/dist/assets/{index-BT1Ms5Q5.js → index-HLu98Sqh.js} +2 -2
  397. package/dashboard/dist/assets/{index-BT1Ms5Q5.js.map → index-HLu98Sqh.js.map} +1 -1
  398. package/dashboard/dist/assets/{index-BFASQ7_X.js → index-ag2pCAPu.js} +2 -2
  399. package/dashboard/dist/assets/{index-BFASQ7_X.js.map → index-ag2pCAPu.js.map} +1 -1
  400. package/dashboard/dist/assets/{index-BsHVgWH6.js → index-gkxPN7Vx.js} +2 -2
  401. package/dashboard/dist/assets/{index-BsHVgWH6.js.map → index-gkxPN7Vx.js.map} +1 -1
  402. package/dashboard/dist/assets/index-m9A3UYst.css +1 -0
  403. package/dashboard/dist/assets/{knowledge-Cci_r6Kl.js → knowledge-DnMs-SOJ.js} +2 -2
  404. package/dashboard/dist/assets/{knowledge-Cci_r6Kl.js.map → knowledge-DnMs-SOJ.js.map} +1 -1
  405. package/dashboard/dist/assets/{mcp-NY4iL0L-.js → mcp-CwW-K3r4.js} +2 -2
  406. package/dashboard/dist/assets/{mcp-NY4iL0L-.js.map → mcp-CwW-K3r4.js.map} +1 -1
  407. package/dashboard/dist/assets/{mcp-query-CbvZo_I_.js → mcp-query-BZt5e8_Q.js} +2 -2
  408. package/dashboard/dist/assets/{mcp-query-CbvZo_I_.js.map → mcp-query-BZt5e8_Q.js.map} +1 -1
  409. package/dashboard/dist/assets/{personas-Fy-f7QQd.js → personas-UA-Xn60f.js} +2 -2
  410. package/dashboard/dist/assets/{personas-Fy-f7QQd.js.map → personas-UA-Xn60f.js.map} +1 -1
  411. package/dashboard/dist/assets/{pipelines-DKiuozxV.js → pipelines-Cu3PARum.js} +2 -2
  412. package/dashboard/dist/assets/{pipelines-DKiuozxV.js.map → pipelines-Cu3PARum.js.map} +1 -1
  413. package/dashboard/dist/assets/{tasks-CdM1Rkk9.js → tasks-BO6h8GJE.js} +2 -2
  414. package/dashboard/dist/assets/{tasks-CdM1Rkk9.js.map → tasks-BO6h8GJE.js.map} +1 -1
  415. package/dashboard/dist/assets/{topics-XNy2mf3n.js → topics-CWjCR-17.js} +2 -2
  416. package/dashboard/dist/assets/{topics-XNy2mf3n.js.map → topics-CWjCR-17.js.map} +1 -1
  417. package/dashboard/dist/assets/{useDebouncedValue-CyGcU3_S.js → useDebouncedValue-6t0jx1RB.js} +2 -2
  418. package/dashboard/dist/assets/{useDebouncedValue-CyGcU3_S.js.map → useDebouncedValue-6t0jx1RB.js.map} +1 -1
  419. package/dashboard/dist/assets/{useNamespace-C2RIh_IN.js → useNamespace-CqpoQx6D.js} +2 -2
  420. package/dashboard/dist/assets/{useNamespace-C2RIh_IN.js.map → useNamespace-CqpoQx6D.js.map} +1 -1
  421. package/dashboard/dist/assets/{useYamlActivityEvents-CDiV5fjf.js → useYamlActivityEvents-hmCQQwzB.js} +2 -2
  422. package/dashboard/dist/assets/{useYamlActivityEvents-CDiV5fjf.js.map → useYamlActivityEvents-hmCQQwzB.js.map} +1 -1
  423. package/dashboard/dist/assets/{validate-DcGWN82Y.js → validate-BIRn4a6d.js} +2 -2
  424. package/dashboard/dist/assets/{validate-DcGWN82Y.js.map → validate-BIRn4a6d.js.map} +1 -1
  425. package/dashboard/dist/assets/{yaml-workflows-CH8UrouH.js → yaml-workflows-ziUdZhKY.js} +2 -2
  426. package/dashboard/dist/assets/{yaml-workflows-CH8UrouH.js.map → yaml-workflows-ziUdZhKY.js.map} +1 -1
  427. package/dashboard/dist/index.html +2 -2
  428. package/docs/agents.md +3 -1
  429. package/docs/api/http/agents.md +15 -1
  430. package/docs/api/http/escalations.md +3 -3
  431. package/docs/api/http/exports.md +3 -1
  432. package/docs/api/http/file-browser.md +3 -1
  433. package/docs/api/http/mcp-endpoint.md +5 -2
  434. package/docs/api/http/mcp-servers.md +34 -4
  435. package/docs/api/http/namespaces.md +2 -0
  436. package/docs/api/http/pipelines.md +2 -0
  437. package/docs/api/http/roles.md +11 -8
  438. package/docs/api/http/service-accounts.md +8 -2
  439. package/docs/api/http/settings.md +29 -2
  440. package/docs/api/http/tasks.md +3 -1
  441. package/docs/api/http/topics.md +7 -1
  442. package/docs/api/http/users.md +8 -2
  443. package/docs/api/http/workflows.md +25 -10
  444. package/docs/api/http/yaml-workflows.md +21 -0
  445. package/docs/api/mcp/admin.md +409 -49
  446. package/docs/api/mcp/file-storage.md +4 -0
  447. package/docs/api/mcp/http-fetch.md +6 -2
  448. package/docs/api/mcp/human-queue.md +53 -0
  449. package/docs/api/mcp/index.md +13 -10
  450. package/docs/api/mcp/knowledge.md +34 -0
  451. package/docs/api/mcp/oauth.md +1 -1
  452. package/docs/api/mcp/ortho.md +113 -0
  453. package/docs/api/mcp/vision.md +1 -1
  454. package/docs/api/sdk/bot-accounts.md +1 -0
  455. package/docs/api/sdk/escalations.md +2 -2
  456. package/docs/api/sdk/mcp.md +2 -2
  457. package/docs/api/sdk/settings.md +1 -1
  458. package/docs/api/sdk/tasks.md +2 -2
  459. package/docs/api/sdk/workflows.md +2 -2
  460. package/docs/api/sdk/yaml-workflows.md +1 -1
  461. package/docs/architecture.md +3 -1
  462. package/docs/auth.md +3 -2
  463. package/docs/cloud.md +7 -2
  464. package/docs/dashboard.md +16 -7
  465. package/docs/data.md +1 -1
  466. package/docs/escalation-strategies.md +9 -20
  467. package/docs/events.md +6 -0
  468. package/docs/iam.md +7 -5
  469. package/docs/mcp.md +159 -210
  470. package/docs/oauth-and-delegation.md +32 -21
  471. package/docs/topics.md +2 -0
  472. package/docs/workflows.md +14 -112
  473. package/package.json +5 -3
  474. package/dashboard/dist/assets/ConfirmDeleteModal-DW4DrPur.js +0 -2
  475. package/dashboard/dist/assets/ConfirmDeleteModal-DW4DrPur.js.map +0 -1
  476. package/dashboard/dist/assets/ProcessDetailPage-DNgCIwRl.js +0 -2
  477. package/dashboard/dist/assets/ResolverForm-CKIOAGtY.js +0 -8
  478. package/dashboard/dist/assets/ResolverForm-CKIOAGtY.js.map +0 -1
  479. package/dashboard/dist/assets/index-CtlBjl8o.js +0 -2
  480. package/dashboard/dist/assets/index-CtlBjl8o.js.map +0 -1
  481. package/dashboard/dist/assets/index-LRYC__mE.js +0 -67
  482. package/dashboard/dist/assets/index-LRYC__mE.js.map +0 -1
  483. package/dashboard/dist/assets/index-MYI2_Xb3.css +0 -1
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ /**
3
+ * The server's half of a browser's NATS connection, as the WebSocket proxy
4
+ * forwards it. Message payloads (MSG and HMSG) pass through `rewrite`, which
5
+ * returns the payload to deliver or null to withhold the message; protocol
6
+ * lines (INFO, PING, PONG, +OK, -ERR) pass unchanged.
7
+ *
8
+ * Operations can span WebSocket frames, so the filter keeps whatever it has
9
+ * not yet seen whole.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.NatsServerFilter = void 0;
13
+ const CRLF = Buffer.from('\r\n');
14
+ class NatsServerFilter {
15
+ constructor(rewrite) {
16
+ this.rewrite = rewrite;
17
+ this.pending = Buffer.alloc(0);
18
+ }
19
+ /** The bytes to forward to the browser for one chunk from the server. */
20
+ feed(chunk) {
21
+ this.pending = this.pending.length ? Buffer.concat([this.pending, chunk]) : chunk;
22
+ const out = [];
23
+ for (;;) {
24
+ const end = this.pending.indexOf(CRLF);
25
+ if (end === -1)
26
+ break;
27
+ const line = this.pending.subarray(0, end).toString('utf8');
28
+ const space = line.indexOf(' ');
29
+ const op = (space === -1 ? line : line.slice(0, space)).toUpperCase();
30
+ if (op !== 'MSG' && op !== 'HMSG') {
31
+ out.push(this.pending.subarray(0, end + CRLF.length));
32
+ this.pending = this.pending.subarray(end + CRLF.length);
33
+ continue;
34
+ }
35
+ // MSG <subject> <sid> [reply] <size>
36
+ // HMSG <subject> <sid> [reply] <header size> <total size>
37
+ const args = line.slice(space + 1).trim().split(/\s+/);
38
+ const total = Number(args[args.length - 1]);
39
+ const headerSize = op === 'HMSG' ? Number(args[args.length - 2]) : 0;
40
+ const start = end + CRLF.length;
41
+ const need = start + total + CRLF.length;
42
+ if (this.pending.length < need)
43
+ break;
44
+ const headers = this.pending.subarray(start, start + headerSize);
45
+ const body = this.rewrite(this.pending.subarray(start + headerSize, start + total));
46
+ this.pending = this.pending.subarray(need);
47
+ if (body === null)
48
+ continue;
49
+ const prefix = args.slice(0, op === 'HMSG' ? -2 : -1).join(' ');
50
+ const sizes = op === 'HMSG' ? `${headerSize} ${headerSize + body.length}` : `${body.length}`;
51
+ out.push(Buffer.from(`${op} ${prefix} ${sizes}\r\n`, 'utf8'), headers, body, CRLF);
52
+ }
53
+ return Buffer.concat(out);
54
+ }
55
+ }
56
+ exports.NatsServerFilter = NatsServerFilter;
@@ -0,0 +1,10 @@
1
+ /**
2
+ * A browser's pass to the NATS WebSocket proxy, in place of the NATS server
3
+ * credential. It names the person in `sub` and carries no `userId`, so it
4
+ * authenticates nothing but the proxy upgrade.
5
+ */
6
+ export declare const NATS_WS_TICKET_TYPE = "nats-ws+jwt";
7
+ export declare const NATS_WS_TICKET_PARAM = "ticket";
8
+ export declare function signNatsWsTicket(userId: string): string | null;
9
+ /** The person a valid ticket names; null for anything else. */
10
+ export declare function verifyNatsWsTicket(ticket: string | null | undefined): string | null;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.NATS_WS_TICKET_PARAM = exports.NATS_WS_TICKET_TYPE = void 0;
7
+ exports.signNatsWsTicket = signNatsWsTicket;
8
+ exports.verifyNatsWsTicket = verifyNatsWsTicket;
9
+ const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
10
+ const config_1 = require("../../modules/config");
11
+ /**
12
+ * A browser's pass to the NATS WebSocket proxy, in place of the NATS server
13
+ * credential. It names the person in `sub` and carries no `userId`, so it
14
+ * authenticates nothing but the proxy upgrade.
15
+ */
16
+ exports.NATS_WS_TICKET_TYPE = 'nats-ws+jwt';
17
+ exports.NATS_WS_TICKET_PARAM = 'ticket';
18
+ function signNatsWsTicket(userId) {
19
+ if (!config_1.config.JWT_SECRET)
20
+ return null;
21
+ return jsonwebtoken_1.default.sign({}, config_1.config.JWT_SECRET, {
22
+ algorithm: 'HS256',
23
+ header: { alg: 'HS256', typ: exports.NATS_WS_TICKET_TYPE },
24
+ subject: userId,
25
+ expiresIn: config_1.config.NATS_WS_TICKET_TTL_SECONDS,
26
+ });
27
+ }
28
+ /** The person a valid ticket names; null for anything else. */
29
+ function verifyNatsWsTicket(ticket) {
30
+ if (!ticket || !config_1.config.JWT_SECRET)
31
+ return null;
32
+ try {
33
+ const decoded = jsonwebtoken_1.default.verify(ticket, config_1.config.JWT_SECRET, { algorithms: ['HS256'], complete: true });
34
+ if (decoded.header.typ !== exports.NATS_WS_TICKET_TYPE)
35
+ return null;
36
+ const payload = decoded.payload;
37
+ return typeof payload.sub === 'string' && typeof payload.exp === 'number' ? payload.sub : null;
38
+ }
39
+ catch {
40
+ return null;
41
+ }
42
+ }
@@ -4,7 +4,16 @@ import type { LTEvent, LTEventAdapter } from '../../types';
4
4
  * Callback to verify a Socket.IO handshake token.
5
5
  * Return `true` to allow the connection, `false` to reject.
6
6
  */
7
- export type SocketIOAuthenticator = (token: string) => boolean | Promise<boolean>;
7
+ /**
8
+ * Verifies a socket's token. Returning the person (`{ userId }`) lets delivery
9
+ * follow their capabilities; `true` admits the socket with the browser view
10
+ * (lib/events/browser-view.ts).
11
+ */
12
+ export type SocketIOAuthenticator = (token: string) => boolean | {
13
+ userId: string;
14
+ } | Promise<boolean | {
15
+ userId: string;
16
+ }>;
8
17
  /**
9
18
  * Socket.IO event adapter for browser clients.
10
19
  *
@@ -4,6 +4,7 @@ exports.SocketIOEventAdapter = void 0;
4
4
  const socket_io_1 = require("socket.io");
5
5
  const logger_1 = require("../logger");
6
6
  const matching_1 = require("./matching");
7
+ const browser_view_1 = require("./browser-view");
7
8
  /**
8
9
  * Socket.IO event adapter for browser clients.
9
10
  *
@@ -73,6 +74,8 @@ class SocketIOEventAdapter {
73
74
  if (!valid) {
74
75
  return next(new Error('Authentication failed'));
75
76
  }
77
+ if (typeof valid === 'object')
78
+ socket.data.ltUserId = valid.userId;
76
79
  next();
77
80
  }
78
81
  catch {
@@ -86,6 +89,9 @@ class SocketIOEventAdapter {
86
89
  // switches the socket from broadcast to scoped delivery.
87
90
  const patterns = new Set();
88
91
  socket.data.ltPatterns = patterns;
92
+ // Until the lookup answers, the socket receives the browser view.
93
+ socket.data.ltViewer = { builder: false };
94
+ (0, browser_view_1.viewerFor)(socket.data.ltUserId).then((viewer) => { socket.data.ltViewer = viewer; });
89
95
  socket.on('lt.subscribe', (pattern) => {
90
96
  if (typeof pattern === 'string' && pattern.length > 0 && pattern.length <= 256) {
91
97
  patterns.add(pattern);
@@ -107,14 +113,15 @@ class SocketIOEventAdapter {
107
113
  const channel = `lt.events.${event.type}`;
108
114
  for (const socket of this.io.of('/').sockets.values()) {
109
115
  const patterns = socket.data.ltPatterns;
116
+ const delivered = (0, browser_view_1.eventForViewer)(event, socket.data.ltViewer ?? { builder: false });
110
117
  if (!patterns || patterns.size === 0) {
111
- // Legacy scope: a socket with no registered patterns gets everything.
112
- socket.emit(channel, event);
118
+ // Legacy scope: a socket with no registered patterns gets every subject.
119
+ socket.emit(channel, delivered);
113
120
  continue;
114
121
  }
115
122
  for (const pattern of patterns) {
116
123
  if ((0, matching_1.subjectMatchesPattern)(channel, pattern)) {
117
- socket.emit(channel, event);
124
+ socket.emit(channel, delivered);
118
125
  break;
119
126
  }
120
127
  }
@@ -0,0 +1,27 @@
1
+ import express from 'express';
2
+ /**
3
+ * The single module that imports the HTTP framework.
4
+ *
5
+ * Routes, middleware, adapters and the standalone server take routers,
6
+ * handler types and body/static middleware from here. Long Tail runs both
7
+ * as its own server and as a guest on a host's Express instance (NestJS,
8
+ * Express), so the framework dependency has exactly one owner.
9
+ */
10
+ export { Router } from 'express';
11
+ export type { Application, ErrorRequestHandler, NextFunction, Request, RequestHandler, Response, } from 'express';
12
+ type JsonBodyOptions = Parameters<typeof express.json>[0];
13
+ type StaticFilesOptions = Parameters<typeof express.static>[1];
14
+ /** A new application. Only the standalone server owns one; embedded mode uses the host's. */
15
+ export declare function createApp(): express.Application;
16
+ /** JSON body parsing. A body the host already parsed is left as is. */
17
+ export declare function jsonBody(options?: JsonBodyOptions): express.RequestHandler;
18
+ /** Static file serving from `root`. */
19
+ export declare function serveStatic(root: string, options?: StaticFilesOptions): express.RequestHandler;
20
+ /**
21
+ * Non-credentialed CORS for public endpoints: any origin may call them, and
22
+ * preflight requests are answered here.
23
+ */
24
+ export declare function allowAnyOrigin(methods?: string[]): express.RequestHandler;
25
+ type FormBodyOptions = Parameters<typeof express.urlencoded>[0];
26
+ /** URL-encoded form body parsing. A body the host already parsed is left as is. */
27
+ export declare function formBody(options?: FormBodyOptions): express.RequestHandler;
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Router = void 0;
7
+ exports.createApp = createApp;
8
+ exports.jsonBody = jsonBody;
9
+ exports.serveStatic = serveStatic;
10
+ exports.allowAnyOrigin = allowAnyOrigin;
11
+ exports.formBody = formBody;
12
+ const express_1 = __importDefault(require("express"));
13
+ /**
14
+ * The single module that imports the HTTP framework.
15
+ *
16
+ * Routes, middleware, adapters and the standalone server take routers,
17
+ * handler types and body/static middleware from here. Long Tail runs both
18
+ * as its own server and as a guest on a host's Express instance (NestJS,
19
+ * Express), so the framework dependency has exactly one owner.
20
+ */
21
+ var express_2 = require("express");
22
+ Object.defineProperty(exports, "Router", { enumerable: true, get: function () { return express_2.Router; } });
23
+ /** A new application. Only the standalone server owns one; embedded mode uses the host's. */
24
+ function createApp() {
25
+ return (0, express_1.default)();
26
+ }
27
+ /** JSON body parsing. A body the host already parsed is left as is. */
28
+ function jsonBody(options) {
29
+ return express_1.default.json(options);
30
+ }
31
+ /** Static file serving from `root`. */
32
+ function serveStatic(root, options) {
33
+ return express_1.default.static(root, options);
34
+ }
35
+ /**
36
+ * Non-credentialed CORS for public endpoints: any origin may call them, and
37
+ * preflight requests are answered here.
38
+ */
39
+ function allowAnyOrigin(methods = ['GET', 'POST']) {
40
+ const allowMethods = [...methods, 'OPTIONS'].join(', ');
41
+ return (req, res, next) => {
42
+ res.setHeader('Access-Control-Allow-Origin', '*');
43
+ res.setHeader('Access-Control-Allow-Methods', allowMethods);
44
+ res.setHeader('Access-Control-Allow-Headers', 'Authorization, Content-Type, MCP-Protocol-Version');
45
+ if (req.method === 'OPTIONS') {
46
+ res.status(204).end();
47
+ return;
48
+ }
49
+ next();
50
+ };
51
+ }
52
+ /** URL-encoded form body parsing. A body the host already parsed is left as is. */
53
+ function formBody(options = { extended: false }) {
54
+ return express_1.default.urlencoded(options);
55
+ }
@@ -1,4 +1,4 @@
1
- import { Request, RequestHandler } from 'express';
1
+ import { Request, RequestHandler } from '../lib/http';
2
2
  import type { AuthPayload, LTAuthAdapter } from '../types';
3
3
  export type { AuthPayload, LTAuthAdapter };
4
4
  declare global {
@@ -40,34 +40,25 @@ export declare class JwtAuthAdapter implements LTAuthAdapter {
40
40
  */
41
41
  export declare function createAuthMiddleware(adapter: LTAuthAdapter): RequestHandler;
42
42
  export declare const requireAuth: RequestHandler;
43
+ /**
44
+ * `requireAuth` without the SSO fallback: only a credential the request
45
+ * carries itself (the configured adapter, else a Bearer JWT or bot key).
46
+ * For endpoints a cross-site page must not reach through the host's cookie.
47
+ */
48
+ export declare const requireCredentialAuth: RequestHandler;
43
49
  /**
44
50
  * Replace the auth adapter used by `requireAuth`.
45
51
  * Call before starting the server.
46
52
  */
47
53
  export declare function setAuthAdapter(adapter: LTAuthAdapter): void;
48
- /**
49
- * Middleware that requires admin access. Must be placed AFTER requireAuth.
50
- *
51
- * Checks isSuperAdmin() via the database first, then falls back to the
52
- * JWT `role` claim for stateless admin checks. Returns 403 otherwise.
53
- */
54
- export declare const requireAdmin: RequestHandler;
55
- /**
56
- * Middleware that requires builder access. Must be placed AFTER requireAuth.
57
- *
58
- * Builders are superadmin or users with the 'engineer' role.
59
- * This is the backend equivalent of the dashboard's `isBuilder` check.
60
- */
61
- export declare const requireBuilder: RequestHandler;
62
- /**
63
- * Middleware that requires role-management access. Must be placed AFTER requireAuth.
64
- *
65
- * Grants access to superadmins, admin-type users, and engineers — the backend
66
- * equivalent of the dashboard's `isBuilder || isOps`. Ops (admin type) manage
67
- * users and roles; builders (superadmin, engineer) are a superset. This is the
68
- * gate for reading and writing role definitions.
69
- */
70
- export declare const requireRoleManager: RequestHandler;
54
+ /** Admin access: admin or superadmin claim, or a superadmin in the database. */
55
+ export declare const requireAdmin: RequestHandler<import("express-serve-static-core").ParamsDictionary, any, any, import("qs").ParsedQs, Record<string, any>>;
56
+ /** Builder access: superadmin or the 'engineer' role. Backend twin of the dashboard's `isBuilder`. */
57
+ export declare const requireBuilder: RequestHandler<import("express-serve-static-core").ParamsDictionary, any, any, import("qs").ParsedQs, Record<string, any>>;
58
+ /** Role-management access: admin access or the 'engineer' role. Backend twin of `isBuilder || isOps`. */
59
+ export declare const requireRoleManager: RequestHandler<import("express-serve-static-core").ParamsDictionary, any, any, import("qs").ParsedQs, Record<string, any>>;
60
+ /** Reads of one workflow run (`:workflowId`): builder access, or the person who started it or it runs as. */
61
+ export declare const requireWorkflowReader: RequestHandler;
71
62
  /**
72
63
  * Generate a JWT token. Utility for tests and token provisioning.
73
64
  */
@@ -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;