@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
@@ -38,20 +38,9 @@ const escalationService = __importStar(require("../../../services/escalation"));
38
38
  const escalationApi = __importStar(require("../../../api/escalations"));
39
39
  const escalationMetaApi = __importStar(require("../../../api/escalations/metadata"));
40
40
  const escalationBulkApi = __importStar(require("../../../api/escalations/bulk"));
41
- const iam_1 = require("../../../services/iam");
41
+ const caller_auth_1 = require("../caller-auth");
42
+ const helpers_1 = require("../../../api/escalations/helpers");
42
43
  const schemas_1 = require("./schemas");
43
- let systemPrincipalId = null;
44
- /**
45
- * Resolve (and cache) the lt-system bot's real UUID. The escalation RBAC helpers
46
- * query the uuid `user_id` column, so the external_id string 'lt-system' would
47
- * raise `invalid input syntax for type uuid`. The bot is a superadmin, so it has
48
- * global escalation access.
49
- */
50
- async function systemAuth() {
51
- if (!systemPrincipalId)
52
- systemPrincipalId = await (0, iam_1.ensureSystemBot)();
53
- return { userId: systemPrincipalId, role: 'superadmin' };
54
- }
55
44
  /** Project the full escalation record to the MCP-facing shape, including metadata. */
56
45
  function projectEscalation(e) {
57
46
  return {
@@ -87,7 +76,7 @@ function registerEscalationTools(server) {
87
76
  '(no status filter required). Returns full records including metadata, workflow linkage, ' +
88
77
  'assignment, and signal_key.',
89
78
  inputSchema: schemas_1.findEscalationsSchema,
90
- }, async (args) => {
79
+ }, async (args, extra) => {
91
80
  const result = await escalationApi.listEscalations({
92
81
  status: args.status,
93
82
  role: args.role,
@@ -108,7 +97,7 @@ function registerEscalationTools(server) {
108
97
  exists: args.exists,
109
98
  available: args.available,
110
99
  orderBy: args.orderBy,
111
- }, await systemAuth());
100
+ }, await (0, caller_auth_1.callerAuth)(extra));
112
101
  if (result.error) {
113
102
  return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
114
103
  }
@@ -130,8 +119,8 @@ function registerEscalationTools(server) {
130
119
  description: 'Get a single escalation by ID — the full record including metadata, envelope ' +
131
120
  'linkage, resolver/escalation payloads, signal_key, and assignment state.',
132
121
  inputSchema: schemas_1.getEscalationSchema,
133
- }, async (args) => {
134
- const result = await escalationApi.getEscalation({ id: args.id }, await systemAuth());
122
+ }, async (args, extra) => {
123
+ const result = await escalationApi.getEscalation({ id: args.id }, await (0, caller_auth_1.callerAuth)(extra));
135
124
  if (result.error) {
136
125
  return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
137
126
  }
@@ -143,8 +132,8 @@ function registerEscalationTools(server) {
143
132
  description: 'List all escalations linked to a specific workflow ID, newest first. Returns ' +
144
133
  'full records including metadata.',
145
134
  inputSchema: schemas_1.getEscalationsByWorkflowSchema,
146
- }, async (args) => {
147
- const result = await escalationApi.getEscalationsByWorkflowId({ workflowId: args.workflow_id });
135
+ }, async (args, extra) => {
136
+ const result = await escalationApi.getEscalationsByWorkflowId({ workflowId: args.workflow_id }, (0, caller_auth_1.externalCaller)(extra));
148
137
  if (result.error) {
149
138
  return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
150
139
  }
@@ -156,7 +145,15 @@ function registerEscalationTools(server) {
156
145
  description: 'Aggregated escalation statistics: pending, claimed, created, ' +
157
146
  'resolved counts with breakdown by role and type.',
158
147
  inputSchema: schemas_1.getEscalationStatsSchema,
159
- }, async (args) => {
148
+ }, async (args, extra) => {
149
+ const caller = (0, caller_auth_1.externalCaller)(extra);
150
+ if (caller) {
151
+ const result = await escalationApi.getEscalationStats({ period: args.period }, caller);
152
+ if (result.error) {
153
+ return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
154
+ }
155
+ return { content: [{ type: 'text', text: JSON.stringify(result.data) }] };
156
+ }
160
157
  const stats = await escalationService.getEscalationStats(undefined, args.period);
161
158
  return {
162
159
  content: [{ type: 'text', text: JSON.stringify(stats) }],
@@ -168,8 +165,8 @@ function registerEscalationTools(server) {
168
165
  description: 'Find escalations by a metadata key-value pair (e.g. a correlation key written ' +
169
166
  'into metadata when the escalation was raised).',
170
167
  inputSchema: schemas_1.findByMetadataSchema,
171
- }, async (args) => {
172
- const result = await escalationMetaApi.findByMetadata(args, await systemAuth());
168
+ }, async (args, extra) => {
169
+ const result = await escalationMetaApi.findByMetadata(args, await (0, caller_auth_1.callerAuth)(extra));
173
170
  if (result.error) {
174
171
  return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
175
172
  }
@@ -183,8 +180,8 @@ function registerEscalationTools(server) {
183
180
  'reserved so no one else picks it up. If the claim expires, ' +
184
181
  'the escalation returns to the queue.',
185
182
  inputSchema: schemas_1.claimEscalationSchema,
186
- }, async (args) => {
187
- const result = await escalationApi.claimEscalation({ id: args.id, durationMinutes: args.duration_minutes }, await systemAuth());
183
+ }, async (args, extra) => {
184
+ const result = await escalationApi.claimEscalation({ id: args.id, durationMinutes: args.duration_minutes }, await (0, caller_auth_1.callerAuth)(extra));
188
185
  if (result.error) {
189
186
  return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
190
187
  }
@@ -196,8 +193,8 @@ function registerEscalationTools(server) {
196
193
  description: 'Release a claimed escalation back to the available pool. Reverses a ' +
197
194
  'claim_escalation so another holder can pick it up.',
198
195
  inputSchema: schemas_1.releaseEscalationSchema,
199
- }, async (args) => {
200
- const result = await escalationApi.releaseEscalation({ id: args.id }, await systemAuth());
196
+ }, async (args, extra) => {
197
+ const result = await escalationApi.releaseEscalation({ id: args.id }, await (0, caller_auth_1.callerAuth)(extra));
201
198
  if (result.error) {
202
199
  return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
203
200
  }
@@ -211,8 +208,8 @@ function registerEscalationTools(server) {
211
208
  'legacy paths signal via routing metadata or re-run the original workflow. ' +
212
209
  'Password fields in the payload are replaced with ephemeral tokens.',
213
210
  inputSchema: schemas_1.resolveEscalationSchema,
214
- }, async (args) => {
215
- const result = await escalationApi.resolveEscalation({ id: args.id, resolverPayload: args.resolverPayload }, await systemAuth());
211
+ }, async (args, extra) => {
212
+ const result = await escalationApi.resolveEscalation({ id: args.id, resolverPayload: args.resolverPayload }, await (0, caller_auth_1.callerAuth)(extra));
216
213
  if (result.error) {
217
214
  return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
218
215
  }
@@ -226,11 +223,11 @@ function registerEscalationTools(server) {
226
223
  'workflow with the ordered collection. A reciprocal row is written in the same statement, both or neither. ' +
227
224
  'initiatedBy credits the person the add is for.',
228
225
  inputSchema: schemas_1.accumulateItemSchema,
229
- }, async (args) => {
226
+ }, async (args, extra) => {
230
227
  const result = await escalationApi.accumulateItem({
231
228
  id: args.id, itemKey: args.itemKey, payload: args.payload, metadata: args.metadata,
232
229
  reciprocal: args.reciprocal, initiatedBy: args.initiatedBy,
233
- }, await systemAuth());
230
+ }, await (0, caller_auth_1.callerAuth)(extra));
234
231
  if (result.error) {
235
232
  return { content: [{ type: 'text', text: JSON.stringify({ error: result.error, ...(result.data ?? {}) }) }], isError: true };
236
233
  }
@@ -242,8 +239,8 @@ function registerEscalationTools(server) {
242
239
  description: 'Remove ONE held item from a pending open accumulator escalation. The row stays pending and the ' +
243
240
  'waiting workflow is never woken. initiatedBy credits the person the removal is for.',
244
241
  inputSchema: schemas_1.removeItemSchema,
245
- }, async (args) => {
246
- const result = await escalationApi.removeItem({ id: args.id, itemKey: args.itemKey, reciprocal: args.reciprocal, initiatedBy: args.initiatedBy }, await systemAuth());
242
+ }, async (args, extra) => {
243
+ const result = await escalationApi.removeItem({ id: args.id, itemKey: args.itemKey, reciprocal: args.reciprocal, initiatedBy: args.initiatedBy }, await (0, caller_auth_1.callerAuth)(extra));
247
244
  if (result.error) {
248
245
  return { content: [{ type: 'text', text: JSON.stringify({ error: result.error, ...(result.data ?? {}) }) }], isError: true };
249
246
  }
@@ -254,13 +251,13 @@ function registerEscalationTools(server) {
254
251
  title: 'Get Escalation Items',
255
252
  description: 'The held items of an accumulator or batch escalation in arrival order, with the count and max.',
256
253
  inputSchema: schemas_1.getEscalationItemsSchema,
257
- }, async (args) => {
254
+ }, async (args, extra) => {
258
255
  if (!args.id && !args.signalKey) {
259
256
  return { content: [{ type: 'text', text: JSON.stringify({ error: 'id or signalKey is required' }) }], isError: true };
260
257
  }
261
258
  const result = args.id
262
- ? await escalationApi.getEscalationItems({ id: args.id }, await systemAuth())
263
- : await escalationApi.getEscalationItemsBySignalKey({ signalKey: args.signalKey }, await systemAuth());
259
+ ? await escalationApi.getEscalationItems({ id: args.id }, await (0, caller_auth_1.callerAuth)(extra))
260
+ : await escalationApi.getEscalationItemsBySignalKey({ signalKey: args.signalKey }, await (0, caller_auth_1.callerAuth)(extra));
264
261
  if (result.error) {
265
262
  return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
266
263
  }
@@ -273,8 +270,8 @@ function registerEscalationTools(server) {
273
270
  'waiting workflow in place. For callers that know the deterministic signal id and want ' +
274
271
  'to skip the id lookup.',
275
272
  inputSchema: schemas_1.resolveBySignalKeySchema,
276
- }, async (args) => {
277
- const result = await escalationApi.resolveBySignalKey({ signalKey: args.signalKey, resolverPayload: args.resolverPayload }, await systemAuth());
273
+ }, async (args, extra) => {
274
+ const result = await escalationApi.resolveBySignalKey({ signalKey: args.signalKey, resolverPayload: args.resolverPayload }, await (0, caller_auth_1.callerAuth)(extra));
278
275
  if (result.error) {
279
276
  return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
280
277
  }
@@ -287,8 +284,8 @@ function registerEscalationTools(server) {
287
284
  'callers may only resolve rows whose role they hold. For bookkeeping rows woken ' +
288
285
  'collectively (no per-row signal delivery).',
289
286
  inputSchema: schemas_1.resolveByIdsSchema,
290
- }, async (args) => {
291
- const result = await escalationApi.resolveByIds({ ids: args.ids, resolverPayload: args.resolverPayload, metadata: args.metadata }, await systemAuth());
287
+ }, async (args, extra) => {
288
+ const result = await escalationApi.resolveByIds({ ids: args.ids, resolverPayload: args.resolverPayload, metadata: args.metadata }, await (0, caller_auth_1.callerAuth)(extra));
292
289
  if (result.error) {
293
290
  return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
294
291
  }
@@ -300,8 +297,8 @@ function registerEscalationTools(server) {
300
297
  description: 'Faceted search over a pond, scoped to the caller\'s role. Filter by status, ' +
301
298
  'availability, and metadata facets; sort by columns; page with limit/offset.',
302
299
  inputSchema: schemas_1.searchByFacetsSchema,
303
- }, async (args) => {
304
- const result = await escalationApi.searchByFacets(args, await systemAuth());
300
+ }, async (args, extra) => {
301
+ const result = await escalationApi.searchByFacets(args, await (0, caller_auth_1.callerAuth)(extra));
305
302
  if (result.error) {
306
303
  return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
307
304
  }
@@ -318,8 +315,8 @@ function registerEscalationTools(server) {
318
315
  'each group. One call replaces N per-filter count round-trips. The filter takes the WHAT ' +
319
316
  'fields only — status/available/jeopardy are rejected (liveness derives from the measure).',
320
317
  inputSchema: schemas_1.aggregateByFacetsSchema,
321
- }, async (args) => {
322
- const result = await escalationApi.aggregateByFacets(args, await systemAuth());
318
+ }, async (args, extra) => {
319
+ const result = await escalationApi.aggregateByFacets(args, await (0, caller_auth_1.callerAuth)(extra));
323
320
  if (result.error) {
324
321
  return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
325
322
  }
@@ -334,8 +331,8 @@ function registerEscalationTools(server) {
334
331
  'intervals are untracked time and are preserved, not filled. The entity facet value ' +
335
332
  'must be stored as a JSON string (GIN containment match).',
336
333
  inputSchema: schemas_1.timelineByFacetSchema,
337
- }, async (args) => {
338
- const result = await escalationApi.timelineByFacet(args, await systemAuth());
334
+ }, async (args, extra) => {
335
+ const result = await escalationApi.timelineByFacet(args, await (0, caller_auth_1.callerAuth)(extra));
339
336
  if (result.error) {
340
337
  return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
341
338
  }
@@ -347,8 +344,8 @@ function registerEscalationTools(server) {
347
344
  description: 'Batch-claim complete origin groups (orders) in priority order over a pond, ' +
348
345
  'assigned to the calling principal. RBAC-scoped to the pond role.',
349
346
  inputSchema: schemas_1.claimGroupsSchema,
350
- }, async (args) => {
351
- const result = await escalationApi.claimGroups({ query: args.query, limit: args.limit, durationMinutes: args.durationMinutes, sizeFacet: args.sizeFacet }, await systemAuth());
347
+ }, async (args, extra) => {
348
+ const result = await escalationApi.claimGroups({ query: args.query, limit: args.limit, durationMinutes: args.durationMinutes, sizeFacet: args.sizeFacet }, await (0, caller_auth_1.callerAuth)(extra));
352
349
  if (result.error) {
353
350
  return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
354
351
  }
@@ -361,8 +358,8 @@ function registerEscalationTools(server) {
361
358
  'assigned to the calling principal. With allOrNone, commits only the full set. ' +
362
359
  'RBAC-scoped to the pond role.',
363
360
  inputSchema: schemas_1.claimByFacetsSchema,
364
- }, async (args) => {
365
- const result = await escalationApi.claimByFacets({ query: args.query, limit: args.limit, durationMinutes: args.durationMinutes, allOrNone: args.allOrNone }, await systemAuth());
361
+ }, async (args, extra) => {
362
+ const result = await escalationApi.claimByFacets({ query: args.query, limit: args.limit, durationMinutes: args.durationMinutes, allOrNone: args.allOrNone }, await (0, caller_auth_1.callerAuth)(extra));
366
363
  if (result.error) {
367
364
  return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
368
365
  }
@@ -374,8 +371,8 @@ function registerEscalationTools(server) {
374
371
  description: 'Route a pending escalation to a different role (per the escalation chain). The new ' +
375
372
  'role becomes responsible for resolving it.',
376
373
  inputSchema: schemas_1.escalateEscalationSchema,
377
- }, async (args) => {
378
- const result = await escalationApi.escalateToRole({ id: args.id, targetRole: args.targetRole }, await systemAuth());
374
+ }, async (args, extra) => {
375
+ const result = await escalationApi.escalateToRole({ id: args.id, targetRole: args.targetRole }, await (0, caller_auth_1.callerAuth)(extra));
379
376
  if (result.error) {
380
377
  return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
381
378
  }
@@ -387,8 +384,8 @@ function registerEscalationTools(server) {
387
384
  description: 'Permanently cancel a pending escalation — used when the tied workflow has ' +
388
385
  'terminated and can never receive the resolution signal. Preserved for audit.',
389
386
  inputSchema: schemas_1.cancelEscalationSchema,
390
- }, async (args) => {
391
- const result = await escalationApi.cancelSingleEscalation({ id: args.id }, await systemAuth());
387
+ }, async (args, extra) => {
388
+ const result = await escalationApi.cancelSingleEscalation({ id: args.id }, await (0, caller_auth_1.callerAuth)(extra));
392
389
  if (result.error) {
393
390
  return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
394
391
  }
@@ -413,7 +410,14 @@ function registerEscalationTools(server) {
413
410
  'Each escalation is marked resolved with needsTriage=true, then ' +
414
411
  'a triage workflow is started to remediate the issue.',
415
412
  inputSchema: schemas_1.bulkTriageSchema,
416
- }, async (args) => {
413
+ }, async (args, extra) => {
414
+ const caller = (0, caller_auth_1.externalCaller)(extra);
415
+ if (caller) {
416
+ const perm = await (0, helpers_1.checkBulkPermission)(caller.userId, args.ids);
417
+ if (!perm.allowed) {
418
+ return { content: [{ type: 'text', text: JSON.stringify({ error: perm.error }) }], isError: true };
419
+ }
420
+ }
417
421
  const resolved = await escalationService.bulkResolveForTriage(args.ids, args.hint);
418
422
  return {
419
423
  content: [{
@@ -430,8 +434,8 @@ function registerEscalationTools(server) {
430
434
  title: 'Claim by Metadata',
431
435
  description: 'Find and claim an escalation by metadata key-value pair.',
432
436
  inputSchema: schemas_1.claimByMetadataSchema,
433
- }, async (args) => {
434
- const result = await escalationMetaApi.claimByMetadata(args, await systemAuth());
437
+ }, async (args, extra) => {
438
+ const result = await escalationMetaApi.claimByMetadata(args, await (0, caller_auth_1.callerAuth)(extra));
435
439
  if (result.error) {
436
440
  return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
437
441
  }
@@ -442,8 +446,8 @@ function registerEscalationTools(server) {
442
446
  title: 'Resolve by Metadata',
443
447
  description: 'Find and resolve an escalation by metadata key-value pair.',
444
448
  inputSchema: schemas_1.resolveByMetadataSchema,
445
- }, async (args) => {
446
- const result = await escalationMetaApi.resolveByMetadata(args, await systemAuth());
449
+ }, async (args, extra) => {
450
+ const result = await escalationMetaApi.resolveByMetadata(args, await (0, caller_auth_1.callerAuth)(extra));
447
451
  if (result.error) {
448
452
  return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
449
453
  }
@@ -455,8 +459,8 @@ function registerEscalationTools(server) {
455
459
  title: 'Bulk Claim',
456
460
  description: 'Claim multiple escalations in a single operation.',
457
461
  inputSchema: schemas_1.bulkClaimSchema,
458
- }, async (args) => {
459
- const result = await escalationBulkApi.bulkClaim(args, await systemAuth());
462
+ }, async (args, extra) => {
463
+ const result = await escalationBulkApi.bulkClaim(args, await (0, caller_auth_1.callerAuth)(extra));
460
464
  if (result.error) {
461
465
  return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
462
466
  }
@@ -467,8 +471,8 @@ function registerEscalationTools(server) {
467
471
  title: 'Bulk Assign',
468
472
  description: 'Assign multiple escalations to a specific user. Rows under a live claim are skipped unless reassign=true (the admin takeover).',
469
473
  inputSchema: schemas_1.bulkAssignSchema,
470
- }, async (args) => {
471
- const result = await escalationBulkApi.bulkAssign(args, await systemAuth());
474
+ }, async (args, extra) => {
475
+ const result = await escalationBulkApi.bulkAssign(args, await (0, caller_auth_1.callerAuth)(extra));
472
476
  if (result.error) {
473
477
  return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
474
478
  }
@@ -479,8 +483,8 @@ function registerEscalationTools(server) {
479
483
  title: 'Bulk Unassign',
480
484
  description: 'Return claimed escalations to the available pool — the admin override of a live claim. Unclaimed and terminal rows are skipped.',
481
485
  inputSchema: schemas_1.bulkUnassignSchema,
482
- }, async (args) => {
483
- const result = await escalationBulkApi.bulkUnassign(args, await systemAuth());
486
+ }, async (args, extra) => {
487
+ const result = await escalationBulkApi.bulkUnassign(args, await (0, caller_auth_1.callerAuth)(extra));
484
488
  if (result.error) {
485
489
  return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
486
490
  }
@@ -491,8 +495,8 @@ function registerEscalationTools(server) {
491
495
  title: 'Bulk Escalate',
492
496
  description: 'Escalate multiple escalations to a different role.',
493
497
  inputSchema: schemas_1.bulkEscalateSchema,
494
- }, async (args) => {
495
- const result = await escalationBulkApi.bulkEscalate(args, await systemAuth());
498
+ }, async (args, extra) => {
499
+ const result = await escalationBulkApi.bulkEscalate(args, await (0, caller_auth_1.callerAuth)(extra));
496
500
  if (result.error) {
497
501
  return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
498
502
  }
@@ -503,8 +507,8 @@ function registerEscalationTools(server) {
503
507
  title: 'Bulk Cancel',
504
508
  description: 'Cancel multiple pending escalations in a single operation.',
505
509
  inputSchema: schemas_1.bulkCancelSchema,
506
- }, async (args) => {
507
- const result = await escalationApi.bulkCancel(args, await systemAuth());
510
+ }, async (args, extra) => {
511
+ const result = await escalationApi.bulkCancel(args, await (0, caller_auth_1.callerAuth)(extra));
508
512
  if (result.error) {
509
513
  return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
510
514
  }
@@ -515,8 +519,8 @@ function registerEscalationTools(server) {
515
519
  title: 'Update Priority',
516
520
  description: 'Update the priority of multiple escalations.',
517
521
  inputSchema: schemas_1.updatePrioritySchema,
518
- }, async (args) => {
519
- const result = await escalationBulkApi.updatePriority(args, await systemAuth());
522
+ }, async (args, extra) => {
523
+ const result = await escalationBulkApi.updatePriority(args, await (0, caller_auth_1.callerAuth)(extra));
520
524
  if (result.error) {
521
525
  return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
522
526
  }
@@ -36,6 +36,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.registerExportTools = registerExportTools;
37
37
  const api = __importStar(require("../../../api/exports"));
38
38
  const pick_1 = require("../../../lib/json-path/pick");
39
+ const capabilities_1 = require("../../../modules/capabilities");
40
+ const caller_auth_1 = require("../caller-auth");
41
+ const run_read_1 = require("./run-read");
39
42
  const schemas_1 = require("./schemas");
40
43
  function registerExportTools(server) {
41
44
  // mirrors GET /api/workflow-states/jobs
@@ -76,7 +79,10 @@ function registerExportTools(server) {
76
79
  'Useful for debugging and workflow compilation. Histories run large — ' +
77
80
  'pass select (dot paths) to return only what you need.',
78
81
  inputSchema: schemas_1.exportWorkflowExecutionSchema,
79
- }, async (args) => {
82
+ }, async (args, extra) => {
83
+ if (!(await (0, capabilities_1.mayReadWorkflowRun)(await (0, caller_auth_1.callerAuth)(extra), args.workflow_id))) {
84
+ return { content: [{ type: 'text', text: JSON.stringify({ error: run_read_1.RUN_READ_DENIED }) }], isError: true };
85
+ }
80
86
  const result = await api.exportWorkflowExecution({
81
87
  workflowId: args.workflow_id,
82
88
  excludeSystem: args.excludeSystem,
@@ -39,6 +39,7 @@ exports.stopAdminServer = stopAdminServer;
39
39
  */
40
40
  const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
41
41
  const logger_1 = require("../../../lib/logger");
42
+ const registered_tools_1 = require("../../../services/mcp/registered-tools");
42
43
  const tasks_1 = require("./tasks");
43
44
  const escalations_1 = require("./escalations");
44
45
  const workflow_config_1 = require("./workflow-config");
@@ -61,7 +62,6 @@ const diagnostics_1 = require("./diagnostics");
61
62
  const scan_codes_1 = require("./scan-codes");
62
63
  const domain_context_1 = require("./domain-context");
63
64
  const announcements_1 = require("./announcements");
64
- const TOOL_COUNT = 105;
65
65
  let server = null;
66
66
  async function createAdminServer(options) {
67
67
  if (server && !options?.fresh)
@@ -71,30 +71,29 @@ async function createAdminServer(options) {
71
71
  if (!options?.fresh) {
72
72
  server = instance;
73
73
  }
74
- (0, tasks_1.registerTaskTools)(instance); // 2 tools
75
- (0, escalations_1.registerEscalationTools)(instance); // 20 tools (RO + RW single + metadata + bulk)
76
- (0, workflow_config_1.registerWorkflowConfigTools)(instance); // 3 tools
77
- (0, workflows_1.registerWorkflowTools)(instance); // 5 tools (+ terminate_workflow, invoke_workflow_read_safe)
78
- (0, mcp_servers_1.registerMcpServerTools)(instance); // 4 tools
79
- (0, yaml_workflows_1.registerYamlWorkflowTools)(instance); // 5 tools
80
- (0, users_1.registerUserTools)(instance); // 10 tools (users + roles + role schemas)
81
- (0, personas_1.registerPersonaTools)(instance); // 10 tools (persona CRUD + links + assignment)
82
- (0, maintenance_1.registerMaintenanceTools)(instance); // 1 tool
83
- (0, agents_1.registerAgentTools)(instance); // 5 tools
84
- (0, agent_subscriptions_1.registerAgentSubscriptionTools)(instance); // 3 tools
85
- (0, bot_accounts_1.registerBotAccountTools)(instance); // 7 tools
86
- (0, controlplane_1.registerControlPlaneTools)(instance); // 5 tools
87
- (0, pipelines_1.registerPipelineTools)(instance); // 4 tools
88
- (0, topics_1.registerTopicTools)(instance); // 5 tools
89
- (0, settings_1.registerSettingsTools)(instance); // 1 tool
90
- (0, exports_1.registerExportTools)(instance); // 4 tools
91
- (0, overview_1.registerOverviewTools)(instance); // 1 tool
92
- (0, diagnostics_1.registerDiagnosticsTools)(instance); // 3 tools
93
- (0, scan_codes_1.registerScanCodeTools)(instance); // 5 tools (scan schemes + rules + execute)
94
- (0, domain_context_1.registerDomainContextTools)(instance); // 1 tool (get_domain_context)
95
- (0, announcements_1.registerAnnouncementTools)(instance); // 1 tool (publish_announcement)
96
- // Total: 105
97
- logger_1.loggerRegistry.info(`[lt-mcp:admin] ${name} ready (${TOOL_COUNT} tools registered)`);
74
+ (0, tasks_1.registerTaskTools)(instance);
75
+ (0, escalations_1.registerEscalationTools)(instance);
76
+ (0, workflow_config_1.registerWorkflowConfigTools)(instance);
77
+ (0, workflows_1.registerWorkflowTools)(instance);
78
+ (0, mcp_servers_1.registerMcpServerTools)(instance);
79
+ (0, yaml_workflows_1.registerYamlWorkflowTools)(instance);
80
+ (0, users_1.registerUserTools)(instance);
81
+ (0, personas_1.registerPersonaTools)(instance);
82
+ (0, maintenance_1.registerMaintenanceTools)(instance);
83
+ (0, agents_1.registerAgentTools)(instance);
84
+ (0, agent_subscriptions_1.registerAgentSubscriptionTools)(instance);
85
+ (0, bot_accounts_1.registerBotAccountTools)(instance);
86
+ (0, controlplane_1.registerControlPlaneTools)(instance);
87
+ (0, pipelines_1.registerPipelineTools)(instance);
88
+ (0, topics_1.registerTopicTools)(instance);
89
+ (0, settings_1.registerSettingsTools)(instance);
90
+ (0, exports_1.registerExportTools)(instance);
91
+ (0, overview_1.registerOverviewTools)(instance);
92
+ (0, diagnostics_1.registerDiagnosticsTools)(instance);
93
+ (0, scan_codes_1.registerScanCodeTools)(instance);
94
+ (0, domain_context_1.registerDomainContextTools)(instance);
95
+ (0, announcements_1.registerAnnouncementTools)(instance);
96
+ logger_1.loggerRegistry.info(`[lt-mcp:admin] ${name} ready (${(0, registered_tools_1.registeredToolCount)(instance)} tools registered)`);
98
97
  return instance;
99
98
  }
100
99
  function getAdminServer() {
@@ -6,8 +6,8 @@ import { z } from 'zod';
6
6
  export declare const systemOverviewSchema: z.ZodObject<{
7
7
  period: z.ZodDefault<z.ZodOptional<z.ZodEnum<["1h", "24h", "7d"]>>>;
8
8
  }, "strip", z.ZodTypeAny, {
9
- period: "24h" | "1h" | "7d";
9
+ period: "1h" | "24h" | "7d";
10
10
  }, {
11
- period?: "24h" | "1h" | "7d" | undefined;
11
+ period?: "1h" | "24h" | "7d" | undefined;
12
12
  }>;
13
13
  export declare function registerOverviewTools(server: McpServer): void;
@@ -0,0 +1,2 @@
1
+ /** The refusal a run read gives a caller who neither builds nor started or runs as the run. */
2
+ export declare const RUN_READ_DENIED = "Forbidden: only a builder, or the person who started the run or it runs as, may read it";
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RUN_READ_DENIED = void 0;
4
+ /** The refusal a run read gives a caller who neither builds nor started or runs as the run. */
5
+ exports.RUN_READ_DENIED = 'Forbidden: only a builder, or the person who started the run or it runs as, may read it';
@@ -3,8 +3,8 @@
3
3
  *
4
4
  * Schemes map a code's leading two digits (10-99) to a target metadata facet
5
5
  * and parse shape; rules map a single-digit category (0-9) to ordered
6
- * condition/action steps over the escalation surface. execute_scan_code runs a raw code as
7
- * the lt-system principal (see escalations.ts for the principal rationale).
6
+ * condition/action steps over the escalation surface. execute_scan_code and
7
+ * execute_scan_choice run as the `/mcp` caller, or as lt-system for internal calls.
8
8
  */
9
9
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
10
10
  export declare function registerScanCodeTools(server: McpServer): void;
@@ -35,14 +35,8 @@ var __importStar = (this && this.__importStar) || (function () {
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.registerScanCodeTools = registerScanCodeTools;
37
37
  const scanCodesApi = __importStar(require("../../../api/scan-codes"));
38
- const iam_1 = require("../../../services/iam");
38
+ const caller_auth_1 = require("../caller-auth");
39
39
  const schemas_1 = require("./schemas");
40
- let systemPrincipalId = null;
41
- async function systemAuth() {
42
- if (!systemPrincipalId)
43
- systemPrincipalId = await (0, iam_1.ensureSystemBot)();
44
- return { userId: systemPrincipalId, role: 'superadmin' };
45
- }
46
40
  function asText(payload) {
47
41
  return { content: [{ type: 'text', text: JSON.stringify(payload) }] };
48
42
  }
@@ -58,14 +52,14 @@ function registerScanCodeTools(server) {
58
52
  'subject_stale, no_open_container, no_match_fallback, not_primed, ' +
59
53
  'identity_primed, identity_unknown, unconfigured, invalid_code, forbidden, conflict.',
60
54
  inputSchema: schemas_1.executeScanCodeSchema,
61
- }, async (args) => {
55
+ }, async (args, extra) => {
62
56
  const result = await scanCodesApi.executeScanCode({
63
57
  code: args.code,
64
58
  actingToken: args.actingToken,
65
59
  previousActingToken: args.previousActingToken,
66
60
  subject: args.subject,
67
61
  stationRole: args.stationRole,
68
- }, await systemAuth());
62
+ }, await (0, caller_auth_1.callerAuth)(extra));
69
63
  return asText(result.data ?? { error: result.error });
70
64
  });
71
65
  // mirrors POST /api/scan-codes/execute-choice
@@ -76,8 +70,8 @@ function registerScanCodeTools(server) {
76
70
  'against live config, the row\'s current state, the acting-identity gate, ' +
77
71
  'and RBAC before the verb runs.',
78
72
  inputSchema: schemas_1.executeScanChoiceSchema,
79
- }, async (args) => {
80
- const result = await scanCodesApi.executeScanChoice(args, await systemAuth());
73
+ }, async (args, extra) => {
74
+ const result = await scanCodesApi.executeScanChoice(args, await (0, caller_auth_1.callerAuth)(extra));
81
75
  return asText(result.data ?? { error: result.error });
82
76
  });
83
77
  // mirrors GET /api/scan-codes/schemes